Ejemplo n.º 1
0
 private void AddToTable(Banshee.Gui.TrackEditor.StatisticsPage table, string label, object val)
 {
     if (val != null)
     {
         if (val is long)
         {
             table.AddItem(label, ((long)val).ToString("N0"));
         }
         else if (val is DateTime)
         {
             var dt = (DateTime)val;
             if (dt != DateTime.MinValue)
             {
                 var local_dt = dt.ToLocalTime();
                 var str      = dt.TimeOfDay == TimeSpan.Zero
                     ? local_dt.ToShortDateString()
                     : local_dt.ToString("g");
                 table.AddItem(label, str);
             }
         }
         else
         {
             table.AddItem(label, val.ToString());
         }
     }
 }
Ejemplo n.º 2
0
        private void BuildInfoBox()
        {
            var frame = new Hyena.Widgets.RoundedFrame();
            var vbox  = new VBox();

            vbox.Spacing     = 6;
            vbox.BorderWidth = 2;

            // Description
            var desc = new Hyena.Widgets.WrapLabel()
            {
                Markup = String.Format("{0}", GLib.Markup.EscapeText(Hyena.StringUtil.RemoveHtml(details.Description)))
            };

            var desc_expander = CreateSection(Catalog.GetString("Description"), desc);

            // Details
            var table = new Banshee.Gui.TrackEditor.StatisticsPage()
            {
                ShadowType  = ShadowType.None,
                BorderWidth = 0
            };

            table.NameRenderer.Scale  = Pango.Scale.Medium;
            table.ValueRenderer.Scale = Pango.Scale.Medium;

            // Keep the table from needing to vertically scroll

            /*table.Child.SizeRequested += (o, a) => {
             *  table.SetSizeRequest (a.Requisition.Width, a.Requisition.Height);
             * };*/

            AddToTable(table, Catalog.GetString("Creator:"), details.Creator);
            AddToTable(table, Catalog.GetString("Venue:"), details.Venue);
            AddToTable(table, Catalog.GetString("Location:"), details.Coverage);
            if (details.DateCreated != DateTime.MinValue)
            {
                AddToTable(table, Catalog.GetString("Date:"), details.DateCreated);
            }
            else
            {
                AddToTable(table, Catalog.GetString("Year:"), details.Year);
            }
            AddToTable(table, Catalog.GetString("Publisher:"), details.Publisher);
            AddToTable(table, Catalog.GetString("Keywords:"), details.Subject);
            AddToTable(table, Catalog.GetString("License URL:"), details.LicenseUrl);
            AddToTable(table, Catalog.GetString("Language:"), details.Language);

            table.AddSeparator();

            AddToTable(table, Catalog.GetString("Downloads, overall:"), details.DownloadsAllTime);
            AddToTable(table, Catalog.GetString("Downloads, past month:"), details.DownloadsLastMonth);
            AddToTable(table, Catalog.GetString("Downloads, past week:"), details.DownloadsLastWeek);

            table.AddSeparator();

            AddToTable(table, Catalog.GetString("Added:"), details.DateAdded);
            AddToTable(table, Catalog.GetString("Added by:"), details.AddedBy);
            AddToTable(table, Catalog.GetString("Collections:"), details.Collections);
            AddToTable(table, Catalog.GetString("Source:"), details.Source);
            AddToTable(table, Catalog.GetString("Contributor:"), details.Contributor);
            AddToTable(table, Catalog.GetString("Recorded by:"), details.Taper);
            AddToTable(table, Catalog.GetString("Lineage:"), details.Lineage);
            AddToTable(table, Catalog.GetString("Transferred by:"), details.Transferer);

            var details_expander = CreateSection(Catalog.GetString("Details"), table);

            // Reviews
            Section reviews = null;

            if (details.NumReviews > 0)
            {
                string [] stars =
                {
                    "\u2606\u2606\u2606\u2606\u2606",
                    "\u2605\u2606\u2606\u2606\u2606",
                    "\u2605\u2605\u2606\u2606\u2606",
                    "\u2605\u2605\u2605\u2606\u2606",
                    "\u2605\u2605\u2605\u2605\u2606",
                    "\u2605\u2605\u2605\u2605\u2605"
                };

                var reviews_box = new VBox()
                {
                    Spacing = 12, BorderWidth = 0
                };
                reviews = CreateSection(Catalog.GetString("Reviews"), reviews_box);

                var avg_label = new Label(String.Format(Catalog.GetPluralString(
                                                            // Translators: {0} is the number of reviewers, {1} is the average rating (not really relevant if there's only 1)
                                                            "{0} reviewer", "{0} reviewers, avg {1}", details.NumReviews),
                                                        details.NumReviews, stars[Math.Max(0, Math.Min(5, (int)Math.Round(details.AvgRating)))]
                                                        ));
                avg_label.TooltipText = String.Format("{0:N2}", details.AvgRating);
                avg_label.Xalign      = 1.0f;
                reviews.Header.Box.PackEnd(avg_label, false, false, 0);

                var sb = new System.Text.StringBuilder();
                foreach (var review in details.Reviews)
                {
                    //sb.Append ("<small>");

                    var review_txt = new Hyena.Widgets.WrapLabel();

                    var title = review.Title;
                    if (title != null)
                    {
                        sb.AppendFormat("<b>{0}</b>\n", GLib.Markup.EscapeText(title));
                    }

                    // Translators: {0} is the unicode-stars-rating, {1} is the name of a person who reviewed this item, and {1} is a date/time string
                    sb.AppendFormat(Catalog.GetString("{0} by {1} on {2}"),
                                    stars[Math.Max(0, Math.Min(5, review.Stars))],
                                    GLib.Markup.EscapeText(review.Reviewer),
                                    GLib.Markup.EscapeText(review.DateReviewed.ToLocalTime().ToShortDateString())
                                    );

                    var body = review.Body;
                    if (body != null)
                    {
                        body = body.Replace("\r\n", "\n");
                        body = body.Replace("\n\n", "\n");
                        sb.Append("\n");
                        sb.Append(GLib.Markup.EscapeText(body));
                    }

                    //sb.Append ("</small>");
                    review_txt.Markup = sb.ToString();
                    sb.Length         = 0;

                    reviews_box.PackStart(review_txt, false, false, 0);
                }
            }

            // Packing
            vbox.PackStart(desc_expander, true, true, 0);
            vbox.PackStart(details_expander, true, true, 0);
            if (reviews != null)
            {
                vbox.PackStart(reviews, true, true, 0);
            }

            string write_review_url    = String.Format("http://www.archive.org/write-review.php?identifier={0}", item.Id);
            var    write_review_button = new LinkButton(write_review_url, Catalog.GetString("Write your own review"));

            write_review_button.Clicked += (o, a) => Banshee.Web.Browser.Open(write_review_url);
            write_review_button.Xalign   = 0f;
            vbox.PackStart(write_review_button, false, false, 0);

            var vbox2 = new VBox();

            vbox2.PackStart(vbox, false, false, 0);

            var sw = new Gtk.ScrolledWindow()
            {
                ShadowType = ShadowType.None
            };

            sw.AddWithViewport(vbox2);
            (sw.Child as Viewport).ShadowType = ShadowType.None;
            frame.Child = sw;
            frame.ShowAll();

            sw.Child.OverrideBackgroundColor(StateFlags.Normal, StyleContext.GetBackgroundColor(StateFlags.Normal));
            sw.Child.OverrideColor(StateFlags.Normal, StyleContext.GetColor(StateFlags.Normal));
            StyleUpdated += delegate {
                sw.Child.OverrideBackgroundColor(StateFlags.Normal, StyleContext.GetBackgroundColor(StateFlags.Normal));
                sw.Child.OverrideColor(StateFlags.Normal, StyleContext.GetColor(StateFlags.Normal));
            };

            PackStart(frame, true, true, 0);
        }