New panel for album art handling
[mussorgsky] / src / album_art_panel.py
1 #!/usr/bin/env python2.5
2 import hildon
3 import gtk, gobject
4 from tracker_backend import TrackerBackend
5 from album_art_spec import getCoverArtThumbFileName
6 from download_dialog import MussorgskyAlbumArtDownloadDialog
7
8 class MussorgskyAlbumArtPanel (hildon.StackableWindow):
9
10     def __init__ (self):
11         hildon.StackableWindow.__init__ (self)
12         self.set_title ("Album art handling")
13         self.set_border_width (12)
14         self.__create_view ()
15         self.model = gtk.ListStore (str, gtk.gdk.Pixbuf, str, str)
16
17         self.tracker = TrackerBackend ()
18         
19         pairs = self.tracker.get_all_pairs_artist_album ()
20         for p in pairs:
21             if (not p[1]):
22                 continue
23             album_art_path = getCoverArtThumbFileName (p[1])
24             try:
25                 pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (album_art_path, 124, 124)
26             except gobject.GError:
27                 pixbuf = None
28             t = ("<b>%s</b>\n<small>%s</small>" % (p[1], p[0]), pixbuf, p[0], p[1])
29             self.model.append (t)
30                 
31             
32         self.treeview.set_model (self.model)
33
34     def __create_view (self):
35         vbox = gtk.VBox (spacing=12, homogeneous=False)
36
37         self.treeview = gtk.TreeView ()
38         self.treeview.connect ("row-activated", self.row_activated_cb)
39
40         artist_column = gtk.TreeViewColumn ("Artist", gtk.CellRendererText (), markup=0)
41         self.treeview.append_column (artist_column)
42
43         album_art = gtk.TreeViewColumn ("Album art", gtk.CellRendererPixbuf (), pixbuf=1)
44         self.treeview.append_column (album_art)
45
46         vbox.add (self.treeview)
47         
48         self.add (vbox)
49
50         # Menu
51         menu = hildon.AppMenu ()
52         automatic_retrieval = hildon.Button (hildon.BUTTON_STYLE_NORMAL,
53                                              hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
54         automatic_retrieval.set_title ("Automatic retrieval")
55         automatic_retrieval.connect ("clicked", self.get_all_album_art)
56         menu.append (automatic_retrieval)
57         menu.show_all ()
58         self.set_app_menu (menu)
59
60     def get_all_album_art (self, user_data):
61         dialog = MussorgskyAlbumArtDownloadDialog (self)
62         dialog.show_all ()
63         dialog.do_the_job (self.model)
64
65     def row_activated_cb (self, treeview, path, view_colum):
66         print "Get alternatives for..."
67         it = treeview.get_model ().get_iter (path)
68         print treeview.get_model ().get_value (it, 3)
69
70
71
72 if __name__ == "__main__":
73
74     window = MussorgskyAlbumArtPanel ()
75     window.connect ("destroy", gtk.main_quit )
76     window.show_all ()
77     gtk.main ()