4 from album_art_thread import MussorgskyAlbumArt
6 class AlbumArtSelectionDialog (gtk.Dialog):
8 def __init__ (self, parent, artist, album, size, downloader=None):
10 parent window, amount of images to offer
11 Optionally downloader (for testing porpouses)
13 gtk.Dialog.__init__ (self,
14 "Select album art", parent,
15 gtk.DIALOG_DESTROY_WITH_PARENT,
16 (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))
17 self.DEFAULT_ALBUM = size+1
22 self.__create_view (size)
24 self.connect ("response", self.handle_response)
27 self.downloader = downloader
29 self.downloader = MussorgskyAlbumArt ()
31 gobject.idle_add (self.__get_alternatives_async)
32 self.selection_img = None
33 self.selection_thumb = None
34 hildon.hildon_gtk_window_set_progress_indicator (self, 1)
37 def __create_view (self, size):
38 hbox = gtk.HBox (homogeneous=True)
42 for i in range (0, size):
44 img.set_size_request (124, 124)
45 self.images.append (img)
47 event_box = gtk.EventBox ()
49 event_box.connect ("button-release-event", self.click_on_img, i)
50 event_box.set_sensitive (False)
51 self.event_boxes.append (event_box)
53 hbox.pack_start (event_box, expand=False, fill=True)
55 # default empty option
57 img.set_from_icon_name ("mediaplayer_default_album", gtk.ICON_SIZE_MENU)
58 img.set_pixel_size (124)
59 #img.set_size_request (124, 124)
60 self.images.append (img)
62 event_box = gtk.EventBox ()
64 event_box.connect ("button-release-event", self.click_on_img, self.DEFAULT_ALBUM)
65 event_box.set_sensitive (True)
66 self.event_boxes.append (event_box)
68 hbox.pack_start (event_box, expand=False, fill=True)
73 def __get_alternatives_async (self):
75 for (path, thumb) in self.downloader.get_alternatives (self.album, self.artist, self.size):
79 self.paths.insert (counter, (path, thumb))
81 print "Setting", thumb, "as image"
82 self.images[counter].set_from_file (thumb)
83 self.event_boxes [counter].set_sensitive (True)
87 while (gtk.events_pending()):
90 while (counter < self.size):
91 self.images[counter].set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG)
94 hildon.hildon_gtk_window_set_progress_indicator (self, 0)
97 def click_on_img (self, widget, event, position):
98 if (position == self.DEFAULT_ALBUM):
99 self.selection_img = None
100 self.selection_thumb = None
101 self.downloader.reset_alternative (self.artist, self.album)
103 img, thumb = self.paths[position]
104 self.selection_img, self.selection_thumb = self.downloader.save_alternative (self.artist,
107 self.response (position)
109 def get_selection (self):
110 return (self.selection_img, self.selection_thumb)
113 def handle_response (self, widget, response_id):
115 # Return False to continue propagating the signal
118 if __name__ == "__main__":
121 class MockDownloader:
123 self.alt = [("../hendrix.jpeg", "../hendrix-thumb.jpeg"),
124 ("../hoover.jpeg", "../hoover-thumb.jpeg"),
125 ("../backbeat.jpeg", "../backbeat-thumb.jpeg"),
126 ("../dylan.jpeg", "../dylan-thumb.jpeg")]
127 def get_alternatives (self, album, artist, amount):
131 def save_alternative (self, artist, album, img, thumb):
132 return ("/home/user/.cache/media-art/" + img, "/home/user/.thumbnails/normal/" + thumb)
133 def reset_alternative (self, artist, album):
134 print "Removing the album-art and the thumbnail"
137 def clicked_button (self):
138 aadd = AlbumArtSelectionDialog (w, "rory gallagher", "irish tour", 4, MockDownloader ())
140 response = aadd.run ()
141 if response == gtk.RESPONSE_CLOSE or response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_REJECT:
144 print "Selected", aadd.get_selection ()
148 w.connect ("destroy", gtk.main_quit)
151 button = gtk.Button ("click")
152 button.connect ("clicked", clicked_button)