Fanart: add ViewKind property in FanartArtistListView
[banshee-community-extensions:banshee-community-extensions.git] / src / Fanart / Banshee.Fanart.UI / FanartArtistListView.cs
1 //
2 // FanartArtistListView.cs
3 //
4 // Author:
5 //   Tomasz Maczyński <tmtimon@gmail.com>
6 //
7 // Copyright 2013 Tomasz Maczyński
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining a copy
10 // of this software and associated documentation files (the "Software"), to deal
11 // in the Software without restriction, including without limitation the rights
12 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 // copies of the Software, and to permit persons to whom the Software is
14 // furnished to do so, subject to the following conditions:
15 //
16 // The above copyright notice and this permission notice shall be included in
17 // all copies or substantial portions of the Software.
18 //
19 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 // THE SOFTWARE.
26 using System;
27 using Banshee.Collection.Gui;
28 using Banshee.Collection;
29 using Hyena.Data.Gui;
30 using Banshee.Configuration;
31
32 namespace Banshee.Fanart.UI
33 {
34     public class FanartArtistListView : TrackFilterListView<ArtistInfo>
35     {
36         private FanartArtistColumnCell image_column_cell;
37         private Column image_column;
38         private Column artist_name_column;
39
40         public static FanartArtistListViewKind ViewKind {
41             get { 
42                 return ListViewKindSchema.Get (); 
43             }
44             set {
45                 ListViewKindSchema.Set (value);
46             }
47         }
48
49         protected FanartArtistListView (IntPtr ptr) : base () {}
50
51         public FanartArtistListView () : base ()
52         {
53             image_column_cell = new FanartArtistColumnCell ();
54
55             artist_name_column = new Column ("Artist", new ColumnCellText ("DisplayName", true), 0.65);
56             image_column = new Column ("Artist Image", image_column_cell, 0.35);
57
58             column_controller.Add (artist_name_column);
59             column_controller.Add (image_column);
60
61             ColumnController = column_controller;
62         }
63
64         protected override Gdk.Size OnMeasureChild ()
65         {
66             return new Gdk.Size (0, image_column_cell.ComputeRowHeight (this));
67         }
68
69         public enum FanartArtistListViewKind {
70             NormalOneColumn,
71             NormalTwoColumns,
72         }
73
74         private static readonly SchemaEntry<FanartArtistListViewKind> ListViewKindSchema = new SchemaEntry<FanartArtistListViewKind> (
75             "player_window", "fanart_artist_listview_kind",
76             FanartArtistListViewKind.NormalOneColumn,
77             "Desired kind of FanartListView's appearance",
78             "Desired kind of FanartListView's appearance"
79             );
80        
81         // TODO add context menu for artists/albums...probably need a Banshee.Gui/ArtistActions.cs file.  Should
82         // make TrackActions.cs more generic with regards to the TrackSelection stuff, using the new properties
83         // set on the sources themselves that give us access to the IListView<T>.
84         /*protected override bool OnPopupMenu ()
85         {
86             ServiceManager.Get<InterfaceActionService> ().TrackActions["TrackContextMenuAction"].Activate ();
87             return true;
88         }*/
89     }
90 }
91