X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Faa_selection_dialog.py;h=bd6daa341c4c9a8e0a34b59a6fe86f168926a8f7;hb=9e9ad4b8e59a7fa34680311458e709f450d68ce4;hp=47086d1ba480efe76bea0ae5beb57cc6cfb8c021;hpb=ad4b732e9e889ed13408a368e2241b02b9818090;p=mussorgsky diff --git a/src/aa_selection_dialog.py b/src/aa_selection_dialog.py index 47086d1..bd6daa3 100644 --- a/src/aa_selection_dialog.py +++ b/src/aa_selection_dialog.py @@ -1,7 +1,47 @@ import hildon import gtk import gobject -from album_art import MussorgskyAlbumArt +from album_art_thread import MussorgskyAlbumArt + +RESPONSE_CLICK = 1 + +class ClickableImage (gtk.EventBox): + + def __init__ (self, isRemoveOption=False): + gtk.EventBox.__init__ (self) + + self.isRemoveOption = isRemoveOption + + self.img = gtk.Image () + self.img.set_size_request (124, 124) + self.add (self.img) + self.set_sensitive (False) + + self.img_path = None + self.thumb_path = None + + if (self.isRemoveOption): + self.img.set_from_icon_name ("mediaplayer_default_album", + gtk.ICON_SIZE_MENU) + self.img.set_pixel_size (124) + self.set_sensitive (True) + + def set_image (self, tmp_img, tmp_thumb): + assert not self.isRemoveOption + self.img_path = tmp_img + self.thumb_path = tmp_thumb + self.img.set_from_file (self.thumb_path) + self.set_sensitive (True) + + def set_default_image (self): + self.img.set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG) + + def get_paths (self): + return self.img_path, self.thumb_path + + def is_remove_option (self): + return self.isRemoveOption + class AlbumArtSelectionDialog (gtk.Dialog): @@ -14,10 +54,13 @@ class AlbumArtSelectionDialog (gtk.Dialog): "Select album art", parent, gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)) + self.DEFAULT_ALBUM = size+1 self.artist = artist self.album = album self.size = size self.__create_view (size) + self.cancel = False + self.connect ("response", self.handle_response) if (downloader): self.downloader = downloader @@ -29,62 +72,88 @@ class AlbumArtSelectionDialog (gtk.Dialog): self.selection_thumb = None hildon.hildon_gtk_window_set_progress_indicator (self, 1) + def __create_view (self, size): hbox = gtk.HBox (homogeneous=True) self.images = [] - self.event_boxes = [] for i in range (0, size): - img = gtk.Image () - img.set_size_request (124, 124) - self.images.append (img) - - event_box = gtk.EventBox () - event_box.add (img) - event_box.connect ("button-release-event", self.click_on_img, i) - event_box.set_sensitive (False) - self.event_boxes.append (event_box) + image = ClickableImage () + image.connect ("button-release-event", self.click_on_img) + self.images.append (image) + hbox.pack_start (image, expand=False, fill=True) - hbox.pack_start (event_box, expand=False, fill=True) + # default empty option + image = ClickableImage (isRemoveOption=True) + image.connect ("button-release-event", self.click_on_img) + self.images.append (image) + hbox.pack_start (image, expand=False, fill=True) self.vbox.add (hbox) def __get_alternatives_async (self): - self.paths = self.downloader.get_alternatives (self.album, self.artist, 4) - self.__populate (self.paths) + counter = 0 + for (path, thumb) in self.downloader.get_alternatives (self.album, + self.artist, + self.size): + print path, thumb + if (self.cancel): + return False + if (thumb): + print "Setting", thumb, "as image" + self.images[counter].set_image (path, thumb) + else: + continue + counter += 1 + while (gtk.events_pending()): + gtk.main_iteration() + + while (counter < self.size): + self.images[counter].set_default_image () + counter += 1 + hildon.hildon_gtk_window_set_progress_indicator (self, 0) - def __populate (self, paths): - for i in range (0, self.size): - if (len(paths) > i): - self.images[i].set_from_file (paths[i]) - self.event_boxes[i].set_sensitive (True) - else: - self.images[i].set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG) - - def click_on_img (self, widget, event, position): - self.selection_img, self.selection_thumb = self.downloader.save_alternative (self.artist, - self.album, - self.paths[position]) - self.response (position) + def click_on_img (self, image, event): + if (image.is_remove_option ()): + self.selection_img = None + self.selection_thumb = None + self.downloader.reset_alternative (self.artist, self.album) + else: + tmp_img, tmp_thumb = image.get_paths () + img, thumb = self.downloader.save_alternative (self.artist, + self.album, + tmp_img, + tmp_thumb) + self.selection_img, self.selection_thumb = img, thumb + self.response (RESPONSE_CLICK) def get_selection (self): return (self.selection_img, self.selection_thumb) - + def handle_response (self, widget, response_id): + self.cancel = True + # Return False to continue propagating the signal + return False if __name__ == "__main__": import time class MockDownloader: def __init__ (self): - self.alt = ["../hendrix.jpeg", "../hoover.jpeg", "../dylan.jpeg"] + self.alt = [("../hendrix.jpeg", "../hendrix-thumb.jpeg"), + ("../hoover.jpeg", "../hoover-thumb.jpeg"), + ("../backbeat.jpeg", "../backbeat-thumb.jpeg"), + ("../dylan.jpeg", "../dylan-thumb.jpeg")] def get_alternatives (self, album, artist, amount): - time.sleep (5) - return self.alt [0:amount] - def save_alternative (self, artist, album, img): - return ("/home/user/.cache/media-art/" + img, "/home/user/.thumbnails/normal/" + img) + for a in self.alt: + time.sleep (1) + yield a + def save_alternative (self, artist, album, img, thumb): + return ("/home/user/.cache/media-art/" + img, "/home/user/.thumbnails/normal/" + thumb) + def reset_alternative (self, artist, album): + print "Removing the album-art and the thumbnail" def clicked_button (self): @@ -94,6 +163,7 @@ if __name__ == "__main__": if response == gtk.RESPONSE_CLOSE or response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_REJECT: print "Noooo" else: + print "RESPONSE_CLICK", response == RESPONSE_CLICK print "Selected", aadd.get_selection () aadd.hide ()