clPlaylistDialog.py

00001 #!/usr/bin/env python
00002 # -*- coding: utf-8 -*-
00003 
00004 # ----------------------------------------------------------------------------
00005 # pyjama - python jamendo audioplayer
00006 # Copyright (c) 2009 Daniel Nögel
00007 #
00008 # This program is free software: you can redistribute it and/or modify
00009 # it under the terms of the GNU General Public License as published by
00010 # the Free Software Foundation, either version 3 of the License, or
00011 # (at your option) any later version.
00012 #
00013 # This program is distributed in the hope that it will be useful,
00014 # but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 # GNU General Public License for more details.
00017 # You should have received a copy of the GNU General Public License
00018 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
00019 # ----------------------------------------------------------------------------
00020 
00021 import gobject
00022 import gtk
00023 
00024 from modules import clWidgets
00025 
00026 (
00027     COLUMN_FIXED,
00028     COLUMN_NAME,
00029     COLUMN_ID
00030 ) = range(3)
00031 
00032 
00033 class PlaylistDialog(gtk.Dialog):
00034     def __init__(self, parent):
00035         self.par = parent
00036 
00037         gtk.Dialog.__init__(self)
00038 #        try:
00039 #            self.set_screen(parent.get_screen())
00040 #        except AttributeError:
00041 #            self.connect('destroy', lambda *w: gtk.main_quit())
00042         self.set_title(_("Jamendo Playlist Import"))
00043 
00044         self.set_border_width(8)
00045         self.set_size_request(400, 350)
00046 
00047         label = gtk.Label(_("Enter a jamendo username below to show all his playlists.\nTo import a playlist check the checkbox in the list."))
00048         self.vbox.pack_start(label, False, False)
00049 
00050         HBox = gtk.HBox()
00051         self.entry = gtk.Entry()
00052         self.entry.connect("activate", self.cb_entry_activate)
00053         bSearch = gtk.Button(gtk.STOCK_FIND)
00054         bSearch.set_use_stock(True)
00055         bSearch.connect("clicked", self.cb_entry_activate)
00056         HBox.pack_start(self.entry, True, True)
00057         HBox.pack_start(bSearch, False, True)
00058         self.vbox.pack_start(HBox, False, False)
00059 
00060         sw = gtk.ScrolledWindow()
00061         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
00062         sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
00063         self.vbox.pack_start(sw)
00064 
00065 
00066         # create tree model
00067         model = gtk.ListStore(
00068             gobject.TYPE_BOOLEAN,
00069             gobject.TYPE_STRING,
00070             gobject.TYPE_UINT)
00071         
00072 
00073         # create tree view
00074         self.treeview = gtk.TreeView(model)
00075         self.treeview.set_rules_hint(True)
00076         self.treeview.set_search_column(COLUMN_NAME)
00077 
00078         sw.add(self.treeview)
00079 
00080         # add columns to the tree view
00081         self.__add_columns(self.treeview)
00082 
00083         # Buttons
00084         self.add_button(gtk.STOCK_CANCEL, -1)
00085         bOK = self.add_button(gtk.STOCK_OK, 1)
00086 #        bOK.connect("clicked", self.cb_bOK_clicked)
00087         self.show_all()
00088 
00089     def populate_list(self, data):
00090         lstore = self.treeview.get_model()
00091         lstore.clear()
00092 
00093         for item in data:
00094             iter = lstore.append()
00095             lstore.set(iter,
00096                 COLUMN_FIXED, False,
00097                 COLUMN_NAME, item['name'],
00098                 COLUMN_ID, item['id']
00099                 )
00100         return lstore
00101 
00102     def fixed_toggled(self, cell, path, model):
00103         # get toggled iter
00104         iter = model.get_iter((int(path),))
00105         fixed = model.get_value(iter, COLUMN_FIXED)
00106 
00107         # do something with the value
00108         fixed = not fixed
00109 
00110         # set new value
00111         model.set(iter, COLUMN_FIXED, fixed)
00112 
00113     def __add_columns(self, treeview):
00114         model = treeview.get_model()
00115 
00116         # column for fixed toggles
00117         renderer = gtk.CellRendererToggle()
00118         renderer.connect('toggled', self.fixed_toggled, model)
00119 
00120         column = gtk.TreeViewColumn(_('Import'), renderer, active=COLUMN_FIXED)
00121 
00122         # set this column to a fixed sizing(of 50 pixels)
00123         column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
00124         column.set_fixed_width(50)
00125 
00126         treeview.append_column(column)
00127 
00128         # column for id
00129 #        column = gtk.TreeViewColumn('Bug Number', gtk.CellRendererText(),
00130 #                                    text=COLUMN_NUMBER)
00131 #        column.set_sort_column_id(COLUMN_NUMBER)
00132 #        treeview.append_column(column)
00133 
00134         # column for description
00135         column = gtk.TreeViewColumn('Name', gtk.CellRendererText(),
00136                                      text=COLUMN_NAME)
00137         column.set_sort_column_id(COLUMN_NAME)
00138         treeview.append_column(column)
00139 
00140     def cb_entry_activate(self, widget):
00141         txt  = self.entry.get_text().replace(" ", "+")
00142         playlists = self.par.user_playlists(txt)
00143         print playlists
00144         if playlists == []:
00145             dia = clWidgets.MyDialog(_('No playlists found'),
00146                                       self.par.pyjama.window.get_toplevel(),
00147                                       gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 
00148                                         (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT),        gtk.STOCK_DIALOG_WARNING, _('No playlists could be found for %s' % txt))
00149             dia.run()
00150             dia.destroy()
00151         else:
00152             self.populate_list(playlists)
00153 
00154 
00155 
00156 class PlaylistManageDialog(gtk.Dialog):
00157     def __init__(self, parent):
00158         self.par = parent
00159 
00160         gtk.Dialog.__init__(self)
00161 #        try:
00162 #            self.set_screen(parent.get_screen())
00163 #        except AttributeError:
00164 #            self.connect('destroy', lambda *w: gtk.main_quit())
00165         self.set_title(_("Playlist Manager"))
00166 
00167         self.set_border_width(8)
00168         self.set_size_request(400, 350)
00169 
00170         label = gtk.Label(_("Select the playlists you want to delete and click the delete button."))
00171         label.set_line_wrap(True)
00172         self.vbox.pack_start(label, False, True)
00173 
00174 
00175         sw = gtk.ScrolledWindow()
00176         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
00177         sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
00178         self.vbox.pack_start(sw)
00179 
00180 
00181         # create tree model
00182         model = gtk.ListStore(
00183             gobject.TYPE_BOOLEAN,
00184             gobject.TYPE_STRING)
00185         
00186 
00187         # create tree view
00188         self.treeview = gtk.TreeView(model)
00189         self.treeview.set_rules_hint(True)
00190         self.treeview.set_search_column(COLUMN_NAME)
00191 
00192         sw.add(self.treeview)
00193 
00194         # add columns to the tree view
00195         self.__add_columns(self.treeview)
00196 
00197         # Buttons
00198         bDelete = self.add_button(gtk.STOCK_DELETE, 1)
00199 #        bOK.connect("clicked", self.cb_bOK_clicked)
00200         self.add_button(gtk.STOCK_CANCEL, -1)
00201         self.show_all()
00202 
00203     def populate_list(self, data):
00204         lstore = self.treeview.get_model()
00205         lstore.clear()
00206 
00207         for name, ids in data:
00208             iter = lstore.append()
00209             lstore.set(iter,
00210                 COLUMN_FIXED, False,
00211                 COLUMN_NAME, name
00212                 )
00213         return lstore
00214 
00215     def fixed_toggled(self, cell, path, model):
00216         # get toggled iter
00217         iter = model.get_iter((int(path),))
00218         fixed = model.get_value(iter, COLUMN_FIXED)
00219 
00220         # do something with the value
00221         fixed = not fixed
00222 
00223         # set new value
00224         model.set(iter, COLUMN_FIXED, fixed)
00225 
00226     def __add_columns(self, treeview):
00227         model = treeview.get_model()
00228 
00229         # column for fixed toggles
00230         renderer = gtk.CellRendererToggle()
00231         renderer.connect('toggled', self.fixed_toggled, model)
00232 
00233         column = gtk.TreeViewColumn(_('Delete'), renderer, active=COLUMN_FIXED)
00234 
00235         # set this column to a fixed sizing(of 50 pixels)
00236         column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
00237         column.set_fixed_width(50)
00238 
00239         treeview.append_column(column)
00240 
00241         # column for id
00242 #        column = gtk.TreeViewColumn('Bug Number', gtk.CellRendererText(),
00243 #                                    text=COLUMN_NUMBER)
00244 #        column.set_sort_column_id(COLUMN_NUMBER)
00245 #        treeview.append_column(column)
00246 
00247         # column for description
00248         column = gtk.TreeViewColumn('Name', gtk.CellRendererText(),
00249                                      text=COLUMN_NAME)
00250         column.set_sort_column_id(COLUMN_NAME)
00251         treeview.append_column(column)
00252 
00253 class SaveDialog(gtk.Dialog):
00254     def __init__(self, parent):
00255         self.par = parent
00256 
00257         gtk.Dialog.__init__(self)
00258 #        try:
00259 #            self.set_screen(parent.get_screen())
00260 #        except AttributeError:
00261 #            self.connect('destroy', lambda *w: gtk.main_quit())
00262         self.set_title(_("Save Playlist"))
00263 
00264         self.set_border_width(8)
00265 #        self.set_size_request(200, 150)
00266 
00267         label = gtk.Label(_("Enter a new Playlist name or select a playlist to overwrite."))
00268         label.set_line_wrap(True)
00269         self.vbox.pack_start(label, False, True)
00270 
00271         # Combo Entry
00272         liststore = gtk.ListStore(gobject.TYPE_STRING)
00273         combo = gtk.ComboBoxEntry(liststore)
00274         cell = gtk.CellRendererText()
00275         combo.pack_start(cell, False)
00276         combo.set_wrap_width(1)
00277         combo.set_tooltip_text(_("Select or enter playlist name"))
00278 
00279         combo.set_model(liststore)
00280         self.entry = combo.child
00281         self.entry.connect("activate", self.cb_save)
00282 
00283         sql = "SELECT option FROM settings WHERE section='playlists'"
00284         playlists = self.par.pyjama.settingsdb.query(sql)
00285         if playlists:
00286 #        if self.par.pyjama.settings.section_exists("Playlists"):
00287 #            playlists = self.par.pyjama.settings.config.options("Playlists")
00288             for name in playlists:
00289                 liststore.append(name)
00290 
00291         if len(playlists)>0:
00292             combo.set_active(0)    
00293 
00294         self.vbox.pack_start(combo, False, True)
00295 
00296         # Buttons
00297         bSave = self.add_button(gtk.STOCK_SAVE, 1)
00298         self.add_button(gtk.STOCK_CANCEL, -1)
00299         self.show_all()
00300 
00301     def cb_save(self, widget):
00302         self.response(1)

Generated on Thu Jun 4 19:08:24 2009 for Pyjama by  doxygen 1.5.8