import gobject import pygtk pygtk.require('2.0') import gtk from menuItem import MenuItem #class LibView(gtk.ScrolledWindow): class LibView(gtk.VBox): def __init__(self,data): gtk.VBox.__init__(self,False,0) self.win = gtk.ScrolledWindow() self.win.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) self.data = data self.treeview = None self.col = None self.plist = None self.pbar = gtk.ProgressBar() self.pack_start(self.win) self.pack_start(self.pbar,False,False,0) self.makeRCMenu() self.makeLabel() self.update() self.win.show() # Use to update the library pane def update(self): rval = self.data.library.scanning if self.treeview: self.win.remove(self.treeview) self.treeview.remove_column(self.col) self.pbar.pulse() self.pbar.set_text("Found "+str(self.data.library.count)+" files.") tree = gtk.TreeStore(str,int) for artist in self.data.library.artAlb.keys(): ariter = tree.append(None,[artist.title(),-1]) for album in self.data.library.artAlb[artist]: aliter = tree.append(ariter,[album.title(),-1]) for track in self.data.library.albTrk[(artist,album)]: tree.append(aliter,[self.data.library.files[track].title,self.data.library.files[track].id]) tree.set_sort_column_id(0,gtk.SORT_ASCENDING) self.treeview = gtk.TreeView(tree) #self.treeview.set_hover_expand(True) self.treeview.set_enable_search(True) self.treeview.connect("button_release_event",self.clicked) self.col = gtk.TreeViewColumn('Library ('+str(self.data.library.count)+')') self.treeview.append_column(self.col) cell = gtk.CellRendererText() self.col.pack_start(cell,True) self.col.add_attribute(cell,'text',0) self.col.set_sort_column_id(0) self.treeview.set_rules_hint(True) self.treeview.show() self.selection = self.treeview.get_selection() self.selection.set_mode(gtk.SELECTION_MULTIPLE) self.win.add(self.treeview) self.updateLabel() if rval==False: self.pbar.hide() return rval def makeLabel(self): self.label = gtk.Label("") self.updateLabel() def updateLabel(self): self.label.set_text(str(self.data.library.count)+" collected") self.label.show() # Begin updating the library def updates(self): self.pbar.show() gobject.timeout_add(1000,self.update) # Right click menu def makeRCMenu(self): self.rcmenu = gtk.Menu() add = MenuItem("Add to Playlist",self.populatePlaylist,None,None,None) self.rcmenu.append(add) # Show the right click menu on a right click def clicked(self,widget,data): if data.button == 3: self.rcmenu.popup(None,None,None,data.button,data.time) def populatePlaylist(self,widgit,func,data): (model,pathlist) = self.selection.get_selected_rows() list = [] #self.data.curList = [] for path in pathlist: iter = model.get_iter(path) self.popHelper(model,iter,model.iter_n_children(iter),list) #self.data.updateList = True self.plist.addToList(list,self.plist.plist) def popHelper(self,model,iter,count,list): if count == 0: row = model[iter][1] self.data.curList+=[row] list += [row] return child = model.iter_children(iter) for i in range(count): self.popHelper(model,child,model.iter_n_children(child),list) child = model.iter_next(child)