diff -Nru banshee-community-extensions-2.4.0+git20130914.r1.3c54432/debian/changelog banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/debian/changelog --- banshee-community-extensions-2.4.0+git20130914.r1.3c54432/debian/changelog 2013-09-15 21:21:57.000000000 +0000 +++ banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/debian/changelog 2013-09-16 16:04:56.000000000 +0000 @@ -1,3 +1,17 @@ +banshee-community-extensions (2.4.0+git20130916.r1.9059cb6-0ubuntu1+saucy) saucy; urgency=low + + * [9059cb6] Fanart: delete unused method in FanartArtistColumnCell + * [8a86275] Fanart: delete unused methods in FanartArtistListView + * [5ce6335] Fanart: don't duplicate artist name in two-column mode + * [127386d] Fanart: enable switching one-column and two-column views + * [59d2144] Fanart: show menu options only when thay are relevant + * [d2175dd] Fanart: add a view selector in menu + * [f5045a3] Fanart: delete old TODO in FanartArtistListView + * [b6703ef] Fanart: add two methods in FanartArtistListView + * [4cea2cf] Fanart: add ViewKind property in FanartArtistListView + + -- Chow Loong Jin Tue, 17 Sep 2013 00:04:56 +0800 + banshee-community-extensions (2.4.0+git20130914.r1.3c54432-0ubuntu1+saucy) saucy; urgency=low * [3c54432] Fanart: add FanartArtistColumnCell.RenderNameWhenNoImage diff -Nru banshee-community-extensions-2.4.0+git20130914.r1.3c54432/debian/control banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/debian/control --- banshee-community-extensions-2.4.0+git20130914.r1.3c54432/debian/control 2013-09-15 21:21:57.000000000 +0000 +++ banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/debian/control 2013-09-16 16:04:56.000000000 +0000 @@ -11,7 +11,7 @@ mono-devel (>= 2.4.2.3), autotools-dev, lsb-release, - banshee (>= 2.6.1+git20130915.r1.471bf78-0ubuntu1+saucy), + banshee (>= 2.6.1+git20130916.r1.74b0f25-0ubuntu1+saucy), pkg-config, liblircclient-dev (>= 0.8.6), libglib2.0-dev, @@ -73,7 +73,7 @@ Package: banshee-extensions-common Architecture: all -Depends: banshee (>= 2.6.1+git20130915.r1.471bf78-0ubuntu1+saucy), +Depends: banshee (>= 2.6.1+git20130916.r1.74b0f25-0ubuntu1+saucy), ${misc:Depends} Description: common files for banshee-community-extensions This package contains the common files for all the extensions in the Banshee diff -Nru banshee-community-extensions-2.4.0+git20130914.r1.3c54432/src/Fanart/Banshee.Fanart.UI/FanartArtistColumnCell.cs banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/src/Fanart/Banshee.Fanart.UI/FanartArtistColumnCell.cs --- banshee-community-extensions-2.4.0+git20130914.r1.3c54432/src/Fanart/Banshee.Fanart.UI/FanartArtistColumnCell.cs 2013-09-14 20:41:37.000000000 +0000 +++ banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/src/Fanart/Banshee.Fanart.UI/FanartArtistColumnCell.cs 2013-09-16 00:24:02.000000000 +0000 @@ -126,12 +126,6 @@ } } - private Cairo.ImageSurface GetDefaultArtistImage (int image_size) - { - // TODO: improve image - return PixbufImageSurface.Create (IconThemeUtils.LoadIcon (image_size, "applications-multimedia")); - } - public virtual int ComputeRowHeight (Widget w) { return 40; } diff -Nru banshee-community-extensions-2.4.0+git20130914.r1.3c54432/src/Fanart/Banshee.Fanart.UI/FanartArtistListView.cs banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/src/Fanart/Banshee.Fanart.UI/FanartArtistListView.cs --- banshee-community-extensions-2.4.0+git20130914.r1.3c54432/src/Fanart/Banshee.Fanart.UI/FanartArtistListView.cs 2013-09-14 20:41:37.000000000 +0000 +++ banshee-community-extensions-2.4.0+git20130916.r1.9059cb6/src/Fanart/Banshee.Fanart.UI/FanartArtistListView.cs 2013-09-16 00:24:02.000000000 +0000 @@ -3,8 +3,12 @@ // // Author: // Tomasz Maczyński +// Aaron Bockover +// Frank Ziegler // // Copyright 2013 Tomasz Maczyński +// Copyright (C) 2007 Novell, Inc. +// Copyright (C) 2011 Frank Ziegler // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -27,6 +31,13 @@ using Banshee.Collection.Gui; using Banshee.Collection; using Hyena.Data.Gui; +using Banshee.Configuration; +using Banshee.ServiceStack; +using Banshee.Gui; +using Gtk; +using Banshee.I18n; +using Hyena; +using Banshee.Sources; namespace Banshee.Fanart.UI { @@ -36,13 +47,138 @@ private Column image_column; private Column artist_name_column; + private InterfaceActionService action_service; + private ActionGroup viewKindActions; + + private static string menu_xml = @" + + + + + + + + + + + + + + "; + + private static FanartArtistListViewKind ViewKind { + get { + return ListViewKindSchema.Get (); + } + set { + ListViewKindSchema.Set (value); + } + } + protected FanartArtistListView (IntPtr ptr) : base () {} public FanartArtistListView () : base () { - image_column_cell = new FanartArtistColumnCell (); + InstallPreferences (); + SetView (ViewKind); + } + + private void InstallPreferences () + { + if (ServiceManager.Contains ("InterfaceActionService")) { + action_service = ServiceManager.Get (); + + if (action_service.FindActionGroup ("ArtistGridView") == null) { + viewKindActions = new ActionGroup ("ArtistGridView"); + + viewKindActions.Add (new Gtk.Action("FanartViewKindMenuAction", "FanartViewKindMenuAction")); + + viewKindActions.Add (new RadioActionEntry [] { + new RadioActionEntry ("FanartViewOneColumnKindAction", null, + "One column mode", null, + "Use one column mode...", + ViewKind == FanartArtistListViewKind.NormalOneColumn ? 1 : 0), + + new RadioActionEntry ("FanartViewTwoColumnsKindAction", null, + "Two columns mode", null, + "Use two columns mode...", + ViewKind == FanartArtistListViewKind.NormalTwoColumns ? 1 : 0) + }, (int)ViewKind, OnViewKindChanged); + + action_service.AddActionGroup (viewKindActions); + action_service.UIManager.AddUiFromString (menu_xml); + + } + } + + ServiceManager.SourceManager.ActiveSourceChanged += delegate { + ThreadAssist.ProxyToMain (delegate { + if (ServiceManager.SourceManager.ActiveSource is ITrackModelSource) { + ITrackModelSource source = ServiceManager.SourceManager.ActiveSource as ITrackModelSource; + action_service.FindAction("ArtistGridView.FanartViewOneColumnKindAction").Visible = source.ShowBrowser; + action_service.FindAction("ArtistGridView.FanartViewOneColumnKindAction").Sensitive = source.ShowBrowser; + action_service.FindAction("ArtistGridView.FanartViewTwoColumnsKindAction").Visible = source.ShowBrowser; + action_service.FindAction("ArtistGridView.FanartViewTwoColumnsKindAction").Sensitive = source.ShowBrowser; + } else { + action_service.FindAction("ArtistGridView.FanartViewOneColumnKindAction").Visible = false; + action_service.FindAction("ArtistGridView.FanartViewOneColumnKindAction").Sensitive = false; + action_service.FindAction("ArtistGridView.FanartViewTwoColumnsKindAction").Visible = false; + action_service.FindAction("ArtistGridView.FanartViewTwoColumnsKindAction").Sensitive = false; + } + }); + }; + + } + + private void SwitchToView (FanartArtistListViewKind viewKind) + { + ClearColumns (); + SetView (viewKind); + } + + void ClearColumns () + { + column_controller.Clear (); + ColumnController = column_controller; + } + private void SetView (FanartArtistListViewKind viewKind) + { + switch (viewKind) { + case FanartArtistListViewKind.NormalOneColumn: + SetNormalOneColumn (); + break; + case FanartArtistListViewKind.NormalTwoColumns: + SetNormalTwoColumns (); + break; + default: + var msg = "FanartArtistListViewKind enum value with no corresponding method was passed to SetView method"; + Hyena.Log.Debug (msg); + throw new NotImplementedException (msg); + } + + QueueDraw (); + } + + private void OnViewKindChanged (object o, ChangedArgs args) + { + var button = o as RadioAction; + SwitchToView ((FanartArtistListViewKind) button.Value); + } + + private void SetNormalOneColumn () + { + image_column_cell = new FanartArtistColumnCell () { RenderNameWhenNoImage = true }; + image_column = new Column ("Artist Image", image_column_cell, 1.0); + column_controller.Add (image_column); + + ColumnController = column_controller; + } + + private void SetNormalTwoColumns () + { artist_name_column = new Column ("Artist", new ColumnCellText ("DisplayName", true), 0.65); + image_column_cell = new FanartArtistColumnCell () { RenderNameWhenNoImage = false }; image_column = new Column ("Artist Image", image_column_cell, 0.35); column_controller.Add (artist_name_column); @@ -55,15 +191,18 @@ { return new Gdk.Size (0, image_column_cell.ComputeRowHeight (this)); } - - // TODO add context menu for artists/albums...probably need a Banshee.Gui/ArtistActions.cs file. Should - // make TrackActions.cs more generic with regards to the TrackSelection stuff, using the new properties - // set on the sources themselves that give us access to the IListView. - /*protected override bool OnPopupMenu () - { - ServiceManager.Get ().TrackActions["TrackContextMenuAction"].Activate (); - return true; - }*/ + + public enum FanartArtistListViewKind { + NormalOneColumn, + NormalTwoColumns, + } + + private static readonly SchemaEntry ListViewKindSchema = new SchemaEntry ( + "player_window", "fanart_artist_listview_kind", + FanartArtistListViewKind.NormalOneColumn, + "Desired kind of FanartListView's appearance", + "Desired kind of FanartListView's appearance" + ); } }