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