X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=jamaui%2Fui.py;h=ac1c6a8d01e7d54acf73f95547ef2afe6f9bd2cc;hb=f738313567e28f7b01e0d90df1840fe90d2c30df;hp=2ba459723959b8cec9334017933307ed7e1d971f;hpb=d2b935f99c20e44a06663f0bf2c696b2ff911582;p=jamaendo diff --git a/jamaui/ui.py b/jamaui/ui.py index 2ba4597..ac1c6a8 100644 --- a/jamaui/ui.py +++ b/jamaui/ui.py @@ -38,7 +38,7 @@ gobject.threads_init() log = logging.getLogger(__name__) -VERSION = '0.1' +VERSION = '0.2' try: import hildon @@ -47,8 +47,8 @@ except: log.critical('Using GTK widgets, install "python2.5-hildon" ' 'for this to work properly.') else: - log.critical('This ui only works in maemo') - sys.exit(1) + log.critical('This ui (probably) only works in maemo') + import helldon as hildon from dbus.mainloop.glib import DBusGMainLoop @@ -56,21 +56,14 @@ DBusGMainLoop(set_as_default=True) import jamaendo +from postoffice import postoffice from playerwindow import open_playerwindow from search import SearchWindow from featured import FeaturedWindow from radios import RadiosWindow from favorites import FavoritesWindow - -class PlaylistsWindow(hildon.StackableWindow): - def __init__(self): - hildon.StackableWindow.__init__(self) - self.set_title("Playlists") - - label = gtk.Label("Playlists") - vbox = gtk.VBox(False, 0) - vbox.pack_start(label, True, True, 0) - self.add(vbox) +from playlists import PlaylistsWindow +from listbox import ButtonListDialog class Jamaui(object): def __init__(self): @@ -79,11 +72,13 @@ class Jamaui(object): self.window = None def create_window(self): + log.debug("Creating main window...") self.app = hildon.Program() self.window = hildon.StackableWindow() self.app.add_window(self.window) self.window.set_title("jamaendo") + self.window.connect("destroy", self.destroy) self.CONFDIR = os.path.expanduser('~/MyDocs/.jamaendo') @@ -91,44 +86,33 @@ class Jamaui(object): settings.set_filename(os.path.join(self.CONFDIR, 'ui_settings')) settings.load() - def save_settings(self): - settings.save() + postoffice.connect('request-album-cover', self, self.on_request_cover) + postoffice.connect('request-images', self, self.on_request_images) + log.debug("Created main window.") def create_menu(self): self.menu = hildon.AppMenu() - #search = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) - #search.set_label("Search") - #search.connect("clicked", self.on_search) - #self.menu.append(search) - - #player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) - #player.set_label("Open player") - #player.connect("clicked", self.on_player) - #self.menu.append(player) + player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) + player.set_label("Open player") + player.connect("clicked", self.on_player) + self.menu.append(player) player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) player.set_label("Favorites") player.connect("clicked", self.on_favorites) self.menu.append(player) - #player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) - #player.set_label("Playlists") - #player.connect("clicked", self.on_playlists) - #self.menu.append(player) + player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) + player.set_label("Playlists") + player.connect("clicked", self.on_playlists) + self.menu.append(player) player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) player.set_label("Settings") player.connect("clicked", self.on_settings) self.menu.append(player) - - # Don't use localdb ATM - #refresh = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) - #refresh.set_label("Refresh") - #refresh.connect("clicked", self.on_refresh) - #self.menu.append(refresh) - menu_about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) menu_about.set_label("About") menu_about.connect("clicked", self.show_about, self.window) @@ -147,7 +131,7 @@ class Jamaui(object): self.window.window.set_back_pixmap(background, False) bbox = gtk.HButtonBox() - alignment = gtk.Alignment(xalign=0.2, yalign=0.925, xscale=1.0) + alignment = gtk.Alignment(xalign=0.2, yalign=0.4, xscale=1.0) alignment.add(bbox) bbox.set_property('layout-style', gtk.BUTTONBOX_SPREAD) self.bbox = bbox @@ -167,27 +151,35 @@ class Jamaui(object): btn.connect('clicked', callback) self.bbox.add(btn) - #def add_featured_button(self): - # self.featured_sel = hildon.TouchSelector(text=True) - # self.featured_sel.append_text("Albums of the week") - # self.featured_sel.append_text("Tracks of the week") - # self.featured_sel.append_text("New releases") - # btn = hildon.PickerButton(gtk.HILDON_SIZE_THUMB_HEIGHT, - # hildon.BUTTON_ARRANGEMENT_VERTICAL) - # btn.set_text("Featured", "Most listened to") - # btn.set_property('width-request', 225) - # btn.set_selector(self.featured_sel) - # self.featured_btn = btn - # self.bbox.add(btn) + def on_request_cover(self, albumid, size): + jamaendo.get_album_cover_async(self.got_album_cover, int(albumid), size) + + def on_request_images(self, urls): + jamaendo.get_images_async(self.got_images, urls) + + def got_album_cover(self, albumid, size, cover): + gtk.gdk.threads_enter() + postoffice.notify('album-cover', albumid, size, cover) + gtk.gdk.threads_leave() + + def got_images(self, images): + gtk.gdk.threads_enter() + postoffice.notify('images', images) + gtk.gdk.threads_leave() def destroy(self, widget): + postoffice.disconnect(['request-album-cover', 'request-images'], self) + settings.save() + from player import the_player + if the_player: + the_player.stop() gtk.main_quit() def show_about(self, w, win): dialog = gtk.AboutDialog() dialog.set_program_name("jamaendo") - dialog.set_website("http://github.com/krig") - dialog.set_website_label("http://github.com/krig") + dialog.set_website("http://jamaendo.garage.maemo.org/") + dialog.set_website_label("http://jamaendo.garage.maemo.org/") dialog.set_version(VERSION) dialog.set_license("""Copyright (c) 2010, Kristoffer Gronlund All rights reserved. @@ -215,7 +207,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """) dialog.set_authors(("Kristoffer Gronlund ", - "Based on Panucci, written by Thomas Perl ")) + "Based on Panucci, written by Thomas Perl ", + "Icons by Joseph Wain ")) dialog.set_comments("""Jamaendo plays music from the music catalog of JAMENDO. JAMENDO is an online platform that distributes musical works under Creative Commons licenses.""") @@ -231,28 +224,19 @@ JAMENDO is an online platform that distributes musical works under Creative Comm dialog.destroy() def open_link(self, d, url, data): - print "url: %s" % (url) import webbrowser webbrowser.open_new(url) - - #def on_refresh(self, button): - # dialog = RefreshDialog() - # dialog.show_all() - # dialog.run() - # dialog.hide() - def on_featured(self, button): - dialog = hildon.PickerDialog(self.window) - sel = hildon.TouchSelector(text=True) - for feature, _ in FeaturedWindow.features: - sel.append_text(feature) - dialog.set_selector(sel) - dialog.set_title("Featured") - if dialog.run() == gtk.RESPONSE_OK: - txt = sel.get_current_text() - self.featuredwnd = FeaturedWindow(txt) + dialog = ButtonListDialog('Featured', self.window) + def fn(btn, feature): + self.featuredwnd = FeaturedWindow(feature) self.featuredwnd.show_all() + dialog.response(gtk.RESPONSE_OK) + for feature, _ in FeaturedWindow.features: + dialog.add_button(feature, fn, feature) + dialog.show_all() + dialog.run() dialog.destroy() def on_radios(self, button): @@ -272,23 +256,21 @@ JAMENDO is an online platform that distributes musical works under Creative Comm dialog.set_title("Settings") dialog.add_button( gtk.STOCK_OK, gtk.RESPONSE_OK ) vbox = dialog.vbox - tbl = gtk.Table(1, 2) - tbl.attach(gtk.Label("Username:"), 0, 1, 0, 1) + hboxinner = gtk.HBox() + hboxinner.pack_start(gtk.Label("Username:"), False, False, 0) entry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT) entry.set_placeholder("jamendo.com username") if settings.user: entry.set_text(settings.user) - tbl.attach(entry, 1, 2, 0, 1) - vbox.pack_start(tbl, True, True, 2) + hboxinner.pack_start(entry, True, True, 0) + vbox.pack_start(hboxinner, True, True, 0) dialog.show_all() result = dialog.run() val = entry.get_text() dialog.destroy() - print val, result if val and result == gtk.RESPONSE_OK: - print "new user name:", val settings.user = val - self.save_settings() + settings.save() def on_favorites(self, button): @@ -296,23 +278,7 @@ JAMENDO is an online platform that distributes musical works under Creative Comm self.favoriteswnd.show_all() def on_player(self, button): - open_playerwindow([]) - - ''' - def on_search(self, button): - if self.searchbar: - self.searchbar.show() - else: - self.searchstore = gtk.ListStore(gobject.TYPE_STRING) - iter = self.searchstore.append() - self.searchstore.set(iter, 0, "Test1") - iter = self.searchstore.append() - self.searchstore.set(iter, 0, "Test2") - self.searchbar = hildon.FindToolbar("Search", self.searchstore, 0) - self.searchbar.set_active(0) - self.window.add_toolbar(self.searchbar) - self.searchbar.show() - ''' + open_playerwindow() def run(self): ossohelper.application_init('org.jamaendo', '0.1') @@ -320,7 +286,9 @@ JAMENDO is an online platform that distributes musical works under Creative Comm self.create_menu() self.setup_widgets() self.window.show_all() + gtk.gdk.threads_enter() gtk.main() + gtk.gdk.threads_leave() ossohelper.application_exit() if __name__=="__main__":