public View() { ColumnController = new ColumnController(); ColumnController.AddRange( new Column(String.Empty, new ColumnCellCheckBox("F", true), 1), new Column("Apples", new ColumnCellText("B", true), 1), new Column("Pears", new ColumnCellText("C", true), 1), new Column("How Hot", new ColumnCellRating("G", true), 1), new Column("Peaches", new ColumnCellText("D", true), 1), new Column("Doodle", new ColumnCellDoodle("E", true), 1), new Column("GUIDs!OMG", new ColumnCellText("A", true), 1) ); }
private void BuildWidgets() { var hbox = new HBox() { Spacing = 12 }; // Left box - cover art, title, etc var left_box = new VBox() { BorderWidth = 12, Spacing = 12 }; // Cover art cover = new BookCover(this) { WidthRequest = 256, HeightRequest = 256 }; var editable_cover = CoverArtEditor.For( cover, (x, y) => true, () => library.TrackModel[0], UpdateCover ); // Title title_label = new WrapLabel(); resume_button = new ImageButton("", null, IconSize.LargeToolbar); resume_button.ImageWidget.Stock = Stock.MediaPlay; resume_button.LabelWidget.Xalign = 0; resume_button.Spacing = 6; // FIXME the left padding on this is not right rating_entry = new RatingEntry() { AlwaysShowEmptyStars = true, HasFrame = false }; var rating = new HBox(); rating.PackStart(rating_entry, false, false, 0); // Packing left_box.PackStart(editable_cover, false, false, 0); left_box.PackStart(title_label, false, false, 0); left_box.PackStart(resume_button, false, false, 0); //left_box.PackStart (rating, false, false, 0); hbox.PackStart(left_box, false, false, 0); // Right box - track list track_list = new BaseTrackListView() { HeaderVisible = true, IsEverReorderable = false }; var columns = new DefaultColumnController(); var file_columns = new ColumnController(); var disc_column = DefaultColumnController.Create( BansheeQuery.DiscNumberField, 0.02, false, new ColumnCellPositiveInt(null, false, 2, 2)); file_columns.AddRange( columns.IndicatorColumn, disc_column, columns.TitleColumn, columns.DurationColumn ); file_columns.SortColumn = columns.DiscNumberAndCountColumn; foreach (var col in file_columns) { col.Visible = true; } var track_sw = new Gtk.ScrolledWindow() { Child = track_list, ShadowType = ShadowType.None }; track_list.ColumnController = file_columns; hbox.PackEnd(track_sw, true, true, 0); Child = hbox; }
private void BuildWidgets () { var hbox = new HBox () { Spacing = 12 }; // Left box - cover art, title, etc var left_box = new VBox () { BorderWidth = 12, Spacing = 12 }; // Cover art cover = new BookCover (this) { WidthRequest = 300, HeightRequest = 300 }; var editable_cover = CoverArtEditor.For ( cover, (x, y) => true, () => library.TrackModel[0], UpdateCover ); // Title title_label = new WrapLabel (); resume_button = new ImageButton ("", null, IconSize.LargeToolbar); resume_button.ImageWidget.Stock = Stock.MediaPlay; resume_button.LabelWidget.Xalign = 0; resume_button.Spacing = 6; // FIXME the left padding on this is not right rating_entry = new RatingEntry () { AlwaysShowEmptyStars = true, HasFrame = false }; var rating = new HBox (); rating.PackStart (rating_entry, false, false, 0); // Packing left_box.PackStart (editable_cover, false, false, 0); left_box.PackStart (title_label, false, false, 0); left_box.PackStart (resume_button, false, false, 0); //left_box.PackStart (rating, false, false, 0); hbox.PackStart (left_box, false, false, 0); // Right box - track list track_list = new BaseTrackListView () { HeaderVisible = true, IsEverReorderable = false }; var columns = new DefaultColumnController (); var file_columns = new ColumnController (); var disc_column = DefaultColumnController.Create ( BansheeQuery.DiscNumberField, 0.02, false, new ColumnCellPositiveInt (null, false, 2, 2)); file_columns.AddRange ( columns.IndicatorColumn, disc_column, columns.TitleColumn, columns.DurationColumn ); file_columns.SortColumn = columns.DiscNumberAndCountColumn; foreach (var col in file_columns) { col.Visible = true; } var track_sw = new Gtk.ScrolledWindow () { Child = track_list, ShadowType = ShadowType.None }; track_list.ColumnController = file_columns; hbox.PackEnd (track_sw, true, true, 0); Child = hbox; }
private void BuildFilesBox() { var vbox = new VBox(); vbox.Spacing = 6; var file_list = new BaseTrackListView() { HeaderVisible = true, IsEverReorderable = false }; var files_model = source.TrackModel as MemoryTrackListModel; var columns = new DefaultColumnController(); columns.TrackColumn.Title = "#"; var file_columns = new ColumnController(); file_columns.AddRange( columns.IndicatorColumn, columns.TrackColumn, columns.TitleColumn, columns.DurationColumn, columns.FileSizeColumn ); foreach (var col in file_columns) { col.Visible = true; } var file_sw = new Gtk.ScrolledWindow(); file_sw.Child = file_list; var tracks = new List <TrackInfo> (); var files = new List <IA.DetailsFile> (details.Files); string [] format_blacklist = new string [] { "metadata", "fingerprint", "checksums", "xml", "m3u", "dublin core", "unknown" }; var formats = new List <string> (); foreach (var f in files) { var track = new TrackInfo() { Uri = new SafeUri(f.Location), FileSize = f.Size, TrackNumber = f.Track, ArtistName = f.Creator ?? details.Creator, AlbumTitle = item.Title, TrackTitle = f.Title, BitRate = f.BitRate, MimeType = f.Format, Duration = f.Length }; // Fix up duration/track#/title if ((f.Length == TimeSpan.Zero || f.Title == null || f.Track == 0) && !f.Location.Contains("zip") && !f.Location.EndsWith("m3u")) { foreach (var b in files) { if ((f.Title != null && f.Title == b.Title) || (f.OriginalFile != null && b.Location != null && b.Location.EndsWith(f.OriginalFile)) || (f.OriginalFile != null && f.OriginalFile == b.OriginalFile)) { if (track.Duration == TimeSpan.Zero) { track.Duration = b.Length; } if (track.TrackTitle == null) { track.TrackTitle = b.Title; } if (track.TrackNumber == 0) { track.TrackNumber = b.Track; } if (track.Duration != TimeSpan.Zero && track.TrackTitle != null && track.TrackNumber != 0) { break; } } } } track.TrackTitle = track.TrackTitle ?? System.IO.Path.GetFileName(f.Location); tracks.Add(track); if (f.Format != null && !formats.Contains(f.Format)) { if (!format_blacklist.Any(fmt => f.Format.ToLower().Contains(fmt))) { formats.Add(f.Format); } } } // Order the formats according to the preferences string format_order = String.Format(", {0}, {1}, {2},", HomeSource.VideoTypes.Get(), HomeSource.AudioTypes.Get(), HomeSource.TextTypes.Get()).ToLower(); var sorted_formats = formats.Select(f => new { Format = f, Order = Math.Max(format_order.IndexOf(", " + f.ToLower() + ","), format_order.IndexOf(f.ToLower())) }) .OrderBy(o => o.Order == -1 ? Int32.MaxValue : o.Order); // See if all the files contain their track # bool all_tracks_have_num_in_title = tracks.All(t => t.TrackNumber == 0 || t.TrackTitle.Contains(t.TrackNumber.ToString())); // Make these columns snugly fix their data if (tracks.Count > 0) { // Mono in openSUSE 11.0 doesn't like this //SetWidth (columns.TrackColumn, all_tracks_have_num_in_title ? 0 : tracks.Max (f => f.TrackNumber), 0); int max_track = 0; long max_size = 0; foreach (var t in tracks) { max_track = Math.Max(max_track, t.TrackNumber); max_size = Math.Max(max_size, t.FileSize); } SetWidth(columns.TrackColumn, all_tracks_have_num_in_title ? 0 : max_track, 0); // Mono in openSUSE 11.0 doesn't like this //SetWidth (columns.FileSizeColumn, tracks.Max (f => f.FileSize), 0); SetWidth(columns.FileSizeColumn, max_size, 0); SetWidth(columns.DurationColumn, tracks.Max(f => f.Duration), TimeSpan.Zero); } string max_title = " "; if (tracks.Count > 0) { var sorted_by_title = files.Where(t => !t.Location.Contains("zip")) .OrderBy(f => f.Title == null ? 0 : f.Title.Length) .ToList(); string nine_tenths = sorted_by_title[(int)Math.Floor(.90 * sorted_by_title.Count)].Title ?? ""; string max = sorted_by_title[sorted_by_title.Count - 1].Title ?? ""; max_title = ((double)max.Length >= (double)(1.6 * (double)nine_tenths.Length)) ? nine_tenths : max; } (columns.TitleColumn.GetCell(0) as ColumnCellText).SetMinMaxStrings(max_title); file_list.ColumnController = file_columns; file_list.SetModel(files_model); var format_list = new ComboBoxText(); format_list.RowSeparatorFunc = (model, iter) => { return((string)model.GetValue(iter, 0) == "---"); }; bool have_sep = false; int active_format = 0; foreach (var fmt in sorted_formats) { if (fmt.Order == -1 && !have_sep) { have_sep = true; if (format_list.Model.IterNChildren() > 0) { format_list.AppendText("---"); } } format_list.AppendText(fmt.Format); if (active_format == 0 && fmt.Format == item.SelectedFormat) { active_format = format_list.Model.IterNChildren() - 1; } } format_list.Changed += (o, a) => { files_model.Clear(); var selected_fmt = format_list.ActiveText; foreach (var track in tracks) { if (track.MimeType == selected_fmt) { files_model.Add(track); } } files_model.Reload(); item.SelectedFormat = selected_fmt; item.Save(); }; if (formats.Count > 0) { format_list.Active = active_format; } vbox.PackStart(file_sw, true, true, 0); vbox.PackStart(format_list, false, false, 0); file_list.SizeAllocated += (o, a) => { int target_list_width = file_list.MaxWidth; if (file_sw.VScrollbar != null && file_sw.VScrollbar.IsMapped) { target_list_width += file_sw.VScrollbar.Allocation.Width + 2; } // Don't let the track list be too wide target_list_width = Math.Min(target_list_width, (int)(0.5 * (double)Allocation.Width)); if (a.Allocation.Width != target_list_width && target_list_width > 0) { file_sw.SetSizeRequest(target_list_width, -1); } }; PackStart(vbox, false, false, 0); }