import gobject import gtk from menuItem import MenuItem #class LibView(gtk.ScrolledWindow): class LibView(gtk.VBox): def __init__(self,data): gtk.VBox.__init__(self,False,0) data.library.libview = self self.win = gtk.ScrolledWindow() self.win.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) self.data = data self.treeview = None self.tree = gtk.TreeStore(str,int) 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): #if self.treeview: #self.win.remove(self.treeview) #self.treeview.remove_column(self.col) #self.tree = gtk.TreeStore(str,int) #self.pbar.pulse() #self.pbar.set_text("Found "+str(self.data.library.count)+" files.") #for artist in self.data.library.artAlb.keys(): # ariter = self.tree.append(None,[artist,-1]) # for album in self.data.library.artAlb[artist]: # aliter = self.tree.append(ariter,[album,-1]) # for track in self.data.library.albTrk[(artist,album)]: # self.tree.append(aliter,[self.data.library.files[track].title,self.data.library.files[track].id]) self.tree.set_sort_column_id(0,gtk.SORT_ASCENDING) self.treeview = gtk.TreeView(self.tree) #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) for file in self.data.library.files: self.insertSong(file) #self.updateLabel() 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() self.updating = True gobject.timeout_add(500,self.updateLibview) def updateLibview(self): self.pbar.set_text("Found "+str(self.data.library.count)+" files.") self.pbar.pulse() #self.updateLabel() self.col.set_title('Library ('+str(self.data.library.count)+')') return self.updating def stopUpdates(self): self.updating = False self.pbar.hide() self.data.dump() # 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 insertSong(self,song): foundArt = False foundAlb = False artist = song.artist album = song.album track = song.title ariter = self.tree.get_iter_root() while ariter: if self.tree[ariter][0]==artist: foundArt = True break else: ariter = self.tree.iter_next(ariter) aliter = self.tree.iter_children(ariter) while aliter: if self.tree[aliter][0]==album: foundAlb = True break else: aliter = self.tree.iter_next(aliter) if foundArt == False: ariter = self.tree.insert(None,0,[artist,-1]) if foundAlb == False: aliter = self.tree.insert(ariter,0,[album,-1]) self.tree.insert(aliter,0,[song.title.title(),song.id]) 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)