00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
00039
00040
00041
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
00067 model = gtk.ListStore(
00068 gobject.TYPE_BOOLEAN,
00069 gobject.TYPE_STRING,
00070 gobject.TYPE_UINT)
00071
00072
00073
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
00081 self.__add_columns(self.treeview)
00082
00083
00084 self.add_button(gtk.STOCK_CANCEL, -1)
00085 bOK = self.add_button(gtk.STOCK_OK, 1)
00086
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
00104 iter = model.get_iter((int(path),))
00105 fixed = model.get_value(iter, COLUMN_FIXED)
00106
00107
00108 fixed = not fixed
00109
00110
00111 model.set(iter, COLUMN_FIXED, fixed)
00112
00113 def __add_columns(self, treeview):
00114 model = treeview.get_model()
00115
00116
00117 renderer = gtk.CellRendererToggle()
00118 renderer.connect('toggled', self.fixed_toggled, model)
00119
00120 column = gtk.TreeViewColumn(_('Import'), renderer, active=COLUMN_FIXED)
00121
00122
00123 column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
00124 column.set_fixed_width(50)
00125
00126 treeview.append_column(column)
00127
00128
00129
00130
00131
00132
00133
00134
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
00162
00163
00164
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
00182 model = gtk.ListStore(
00183 gobject.TYPE_BOOLEAN,
00184 gobject.TYPE_STRING)
00185
00186
00187
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
00195 self.__add_columns(self.treeview)
00196
00197
00198 bDelete = self.add_button(gtk.STOCK_DELETE, 1)
00199
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
00217 iter = model.get_iter((int(path),))
00218 fixed = model.get_value(iter, COLUMN_FIXED)
00219
00220
00221 fixed = not fixed
00222
00223
00224 model.set(iter, COLUMN_FIXED, fixed)
00225
00226 def __add_columns(self, treeview):
00227 model = treeview.get_model()
00228
00229
00230 renderer = gtk.CellRendererToggle()
00231 renderer.connect('toggled', self.fixed_toggled, model)
00232
00233 column = gtk.TreeViewColumn(_('Delete'), renderer, active=COLUMN_FIXED)
00234
00235
00236 column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
00237 column.set_fixed_width(50)
00238
00239 treeview.append_column(column)
00240
00241
00242
00243
00244
00245
00246
00247
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
00259
00260
00261
00262 self.set_title(_("Save Playlist"))
00263
00264 self.set_border_width(8)
00265
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
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
00287
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
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)