aaa191070033b1962304a54d6f708de28ba56adb
[mussorgsky] / src / aa_selection_dialog.py
1 import hildon
2 import gtk
3 from album_art import MussorgskyAlbumArt
4
5 class AlbumArtSelectionDialog (gtk.Dialog):
6
7     def __init__ (self, parent, artist, album, size, downloader=None):
8         """
9         parent window, amount of images to offer
10         Optionally downloader (for testing porpouses)
11         """
12         gtk.Dialog.__init__ (self,
13                              "Select album art", parent,
14                              gtk.DIALOG_DESTROY_WITH_PARENT,
15                              (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))
16         self.artist = artist
17         self.album = album
18         self.size = size
19         self.__create_view (size)
20
21         if (downloader):
22             self.downloader = downloader
23         else:
24             self.downloader = MussorgskyAlbumArt ()
25         self.paths = self.downloader.get_alternatives (album, artist, 4)
26         self.selection_img = None
27         self.selection_thumb = None
28         self.__populate (self.paths)
29
30
31     def __create_view (self, size):
32         hbox = gtk.HBox (homogeneous=True)
33
34         self.images = []
35         self.event_boxes = []
36         for i in range (0, size):
37             img = gtk.Image ()
38             img.set_size_request (124, 124)
39             self.images.append (img)
40
41             event_box = gtk.EventBox ()
42             event_box.add (img)
43             event_box.connect ("button-release-event", self.click_on_img, i)
44             event_box.set_sensitive (False)
45             self.event_boxes.append (event_box)
46             
47             hbox.pack_start (event_box, expand=False, fill=True)
48
49         self.vbox.add (hbox)
50
51     def __populate (self, paths):
52
53         for i in range (0, self.size):
54             if (len(paths) > i):
55                 self.images[i].set_from_file (paths[i])
56                 self.event_boxes[i].set_sensitive (True)
57             else:
58                 self.images[i].set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG)
59
60     def click_on_img (self, widget, event, position):
61         self.selection_img, self.selection_thumb = self.downloader.save_alternative (self.artist,
62                                                                                      self.album,
63                                                                                      self.paths[position])
64         self.response (position)
65
66     def get_selection (self):
67         return (self.selection_img, self.selection_thumb)
68
69     
70
71 if __name__ == "__main__":
72
73     class MockDownloader:
74         def __init__ (self):
75             self.alt = ["../hendrix.jpeg", "../hoover.jpeg", "../dylan.jpeg"]
76         def get_alternatives (self, album, artist, amount):
77             return self.alt [0:amount]
78         def save_alternative (self, artist, album, img):
79             return ("/home/user/.cache/media-art/" + img, "/home/user/.thumbnails/normal/" + img)
80                               
81
82     def clicked_button (self):
83         aadd = AlbumArtSelectionDialog (w, "rory gallagher", "irish tour", 4, MockDownloader (ALTERNATIVES))
84         aadd.show_all ()
85         response = aadd.run ()
86         if response == gtk.RESPONSE_CLOSE or response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_REJECT:
87             print "Noooo"
88         else:
89             print "Selected", aadd.get_selection ()
90         aadd.hide ()
91         
92     w = gtk.Window ()
93     w.connect ("destroy", gtk.main_quit)
94     box = gtk.VBox ()
95
96     button = gtk.Button ("click")
97     button.connect ("clicked", clicked_button)
98     box.add (button)
99
100     w.add (box)
101     w.show_all ()
102
103
104     gtk.main ()
105