159 lines
4.2 KiB
Python
159 lines
4.2 KiB
Python
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)
|