ocarina/trunk/src/GuiObjects/libView.py

116 lines
3.2 KiB
Python

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)