Save the queue in a seperate file
git-svn-id: file:///home/anna/Desktop/ocarina-legacy/mithos/ocarina@54 1daee41c-8060-4895-b1f0-2197c00d777a
This commit is contained in:
parent
e98ebb0bec
commit
8586fa1f47
|
@ -24,11 +24,13 @@ class Data:
|
|||
self.library.libview = None
|
||||
self.save(self.library,"library")
|
||||
self.library.libview = libview
|
||||
self.save([self.curList,self.curQ,self.curSong],"playlist")
|
||||
self.save([self.curList,self.curSong],"playlist")
|
||||
self.save([self.curQ],"queue")
|
||||
self.save([self.size,self.divider,self.colSizes,self.sortedCol,self.random],"preferences")
|
||||
self.save([self.lfm,self.lfmuser,self.lfmpass],"last.fm")
|
||||
|
||||
|
||||
# Pickle out an object to file
|
||||
def save(self,obj,file):
|
||||
out = open(os.path.join(self.path,file),'w')
|
||||
p = pickle.Pickler(out,1)
|
||||
|
@ -43,18 +45,23 @@ class Data:
|
|||
if self.library == None:
|
||||
self.library = Library()
|
||||
|
||||
# Load saved playlist
|
||||
plist = self.load2("playlist")
|
||||
if plist == None:
|
||||
self.curList = []
|
||||
self.curQ = []
|
||||
self.curSong = 0
|
||||
#self.playingQ = False
|
||||
else:
|
||||
self.curList = plist[0]
|
||||
self.curQ = plist[1]
|
||||
self.curSong = plist[2]
|
||||
#self.playingQ = plist[3]
|
||||
self.curSong = plist[1]
|
||||
|
||||
# Load saved queue
|
||||
queue = self.load2("queue")
|
||||
if queue == None:
|
||||
self.curQ = []
|
||||
else:
|
||||
self.curQ = queue[0]
|
||||
|
||||
# Load user preferences
|
||||
prefs = self.load2("preferences")
|
||||
if prefs == None:
|
||||
self.size = (800,600)
|
||||
|
@ -69,6 +76,7 @@ class Data:
|
|||
self.sortedCol = prefs[3]
|
||||
self.random = prefs[4]
|
||||
|
||||
# Load last.fm data
|
||||
lfm = self.load2("last.fm")
|
||||
if lfm == None:
|
||||
self.lfm = ""
|
||||
|
@ -80,6 +88,7 @@ class Data:
|
|||
self.lfmpass = lfm[2]
|
||||
|
||||
|
||||
# Read in a pickled saved data file
|
||||
def load2(self,file):
|
||||
path = os.path.join(self.path,file)
|
||||
if os.path.exists(path):
|
||||
|
|
|
@ -1,158 +0,0 @@
|
|||
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)
|
|
@ -42,6 +42,7 @@ class List(gtk.ScrolledWindow):
|
|||
def makeList(self):
|
||||
self.list = gtk.ListStore(int,str,str,str,str,int)
|
||||
self.tree = gtk.TreeView(self.list)
|
||||
self.tree.set_reorderable(True)
|
||||
cell = gtk.CellRendererText()
|
||||
cols = ["Id","Title","Length","Artist","Album","#"]
|
||||
for i in range(len(cols)):
|
||||
|
@ -70,7 +71,6 @@ class List(gtk.ScrolledWindow):
|
|||
|
||||
# Select a song by double clicking on its row
|
||||
def selectSong(self,widgit,iter,path,data,list):
|
||||
#self.loadSong(self.data.library.files[self.filter[iter][0]])
|
||||
self.loadSong(self.data.library.files[self.sort[iter][0]])
|
||||
self.plause(None,None)
|
||||
self.data.scrobbler.nowPlaying(self.data.song.info)
|
||||
|
@ -78,6 +78,13 @@ class List(gtk.ScrolledWindow):
|
|||
|
||||
# Opens a menu on a right click
|
||||
def clicked(self,widgit,data):
|
||||
end = self.tree.get_path_at_pos(int(data.x),int(data.y))
|
||||
# end will be None if no rows are selected.
|
||||
if end != None:
|
||||
end = end[0][0]
|
||||
begin = self.sel.get_selected_rows()[1][0][0]
|
||||
# This function likes ints for some reason...
|
||||
self.sel.select_range(int(begin),int(end))
|
||||
if data.button == 3:
|
||||
self.rcmenu.popup(None,None,None,data.button,data.time)
|
||||
|
||||
|
|
|
@ -1,357 +0,0 @@
|
|||
import random
|
||||
import gtk
|
||||
import thread
|
||||
import re
|
||||
|
||||
from menuItem import MenuItem
|
||||
from song import Song
|
||||
|
||||
from list import List
|
||||
|
||||
CONTINUE = 0
|
||||
PAFTER = 1
|
||||
|
||||
# This is both the playlist and the queue
|
||||
class PlistView(gtk.Notebook):
|
||||
def __init__(self,data,info):
|
||||
gtk.Notebook.__init__(self)
|
||||
self.connect("switch-page",self.changedTab)
|
||||
self.set_scrollable(True)
|
||||
self.data = data
|
||||
self.info = info
|
||||
|
||||
self.controls = None
|
||||
self.status = CONTINUE
|
||||
|
||||
self.ptime = 0
|
||||
self.qtime = 0
|
||||
self.search = ""
|
||||
|
||||
self.label = gtk.Label("")
|
||||
self.label.show()
|
||||
|
||||
self.ptree = None
|
||||
self.pwin = gtk.ScrolledWindow()
|
||||
self.pwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
||||
self.pwin.show()
|
||||
|
||||
self.qtree = None
|
||||
self.makePList()
|
||||
self.makeQList()
|
||||
self.makeSearch()
|
||||
self.qwin.show()
|
||||
self.loadSong(True)
|
||||
#gobject.timeout_add(1000,self.checkUpdate)
|
||||
self.append_page(self.pwin,gtk.Label(""))
|
||||
self.append_page(self.qwin,gtk.Label(""))
|
||||
self.setTabText("plist")
|
||||
self.setTabText("queue")
|
||||
self.show()
|
||||
|
||||
|
||||
def setStatus(self,status):
|
||||
if status == "pafter":
|
||||
self.status = PAFTER
|
||||
|
||||
|
||||
def setTabText(self,tab):
|
||||
if tab == "plist":
|
||||
self.set_tab_label_text(self.pwin,"Playlist ("+str(len(self.data.curList))+")")
|
||||
else:
|
||||
self.set_tab_label_text(self.qwin,"Queue ("+str(len(self.data.curQ))+")")
|
||||
|
||||
|
||||
# Check if the playlist has been updated
|
||||
def checkUpdate(self):
|
||||
if self.data.updateList == True:
|
||||
self.clearList(self.plist)
|
||||
self.data.updateList = False
|
||||
self.ptime = self.popList(self.data.curList,self.plist)
|
||||
self.setTabText("plist")
|
||||
return True
|
||||
|
||||
|
||||
def makePList(self):
|
||||
self.plist = gtk.ListStore(int,str,str,str,str,int)
|
||||
if self.ptree:
|
||||
self.pwin.remove(self.ptree)
|
||||
self.ptree,self.ptreesel = self.list2Tree(self.plist)
|
||||
self.pwin.add(self.ptree)
|
||||
|
||||
self.prcmenu = gtk.Menu()
|
||||
queue = MenuItem("Queue Song",self.enqueue,None,None,None,)
|
||||
self.prcmenu.append(queue)
|
||||
|
||||
self.plist.set_sort_column_id(self.data.sortedCol,gtk.SORT_ASCENDING)
|
||||
self.ptree.connect("button_release_event",self.clicked)
|
||||
self.ptime = self.popList(self.data.curList,self.plist)
|
||||
|
||||
self.pfilter = self.plist.filter_new()
|
||||
self.pfilter.set_visible_func(self.hideRows)
|
||||
self.psort = gtk.TreeModelSort(self.pfilter)
|
||||
self.ptree.set_model(self.psort)
|
||||
|
||||
#self.pfilter.set_child(self.ptreesel)
|
||||
|
||||
|
||||
# Populate a list
|
||||
def popList(self,src,dst):
|
||||
time = self.generateList(src,dst)
|
||||
return time
|
||||
|
||||
|
||||
def makeQList(self):
|
||||
self.qwin = gtk.ScrolledWindow()
|
||||
self.qwin.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
||||
self.qlist = gtk.ListStore(int,str,str,str,str,int)
|
||||
self.qtree,self.qtreesel = self.list2Tree(self.qlist)
|
||||
self.qwin.add(self.qtree)
|
||||
self.qtime = self.generateList(self.data.curQ,self.qlist)
|
||||
|
||||
|
||||
def generateList(self,src,dst):
|
||||
time = 0
|
||||
i = len(dst)
|
||||
for index in src:
|
||||
track = self.data.library.files[index]
|
||||
dst.insert(i,[track.id,track.title,track.length,track.artist,track.album,track.count])
|
||||
time+=track.duration
|
||||
i+=1
|
||||
return time
|
||||
|
||||
|
||||
# Called by libview to add rows to list
|
||||
def addToList(self,src,dest):
|
||||
self.ptime+=self.generateList(src,dest)
|
||||
self.updatePTime()
|
||||
self.setTabText("plist")
|
||||
|
||||
|
||||
# Make the playlist and show it
|
||||
def list2Tree(self,list):
|
||||
tree = gtk.TreeView(list)
|
||||
cell = gtk.CellRendererText()
|
||||
cols = ["Id","Title","Length","Artist","Album","#"]
|
||||
lenSaved = len(self.data.colSizes)
|
||||
for i in range(len(cols)):
|
||||
col = gtk.TreeViewColumn(cols[i],cell)
|
||||
col.add_attribute(cell,'text',i)
|
||||
col.set_resizable(True)
|
||||
col.set_sort_column_id(i)
|
||||
col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
|
||||
col.set_min_width(2)
|
||||
col.set_max_width(700)
|
||||
col.set_sort_indicator(False)
|
||||
if cols[i] != "Id":
|
||||
tree.append_column(col)
|
||||
tree.set_rules_hint(True)
|
||||
tree.set_enable_search(True)
|
||||
tree.connect("row-activated",self.selectSong,"clicked",list)
|
||||
treesel = tree.get_selection()
|
||||
tree.show()
|
||||
self.resizeCols(tree)
|
||||
return tree,treesel
|
||||
|
||||
|
||||
# Use to save column widths
|
||||
def saveCols(self):
|
||||
cols = self.ptree.get_columns()
|
||||
self.data.colSizes = []
|
||||
for col in cols:
|
||||
self.data.colSizes +=[col.get_width()]
|
||||
|
||||
|
||||
# Uses saved column settings
|
||||
def resizeCols(self,tree):
|
||||
cols = tree.get_columns()
|
||||
for i in range(len(self.data.colSizes)):
|
||||
cols[i].set_fixed_width(self.data.colSizes[i])
|
||||
|
||||
|
||||
# Erase the entire list
|
||||
def clearList(self,list,time):
|
||||
max = len(list)
|
||||
if max == 0:
|
||||
return
|
||||
if max > 0:
|
||||
iter = list.get_iter(0)
|
||||
for i in range(0,max):
|
||||
list.remove(iter)
|
||||
self.ptime = 0
|
||||
self.setTabText("plist")
|
||||
self.updatePTime()
|
||||
|
||||
|
||||
# Update the playlist time label
|
||||
def updatePTime(self):
|
||||
page = self.get_current_page()
|
||||
if page==0:
|
||||
self.label.set_text(self.makeTimeLabel(self.ptime))
|
||||
|
||||
|
||||
# Shows total running time of the playlist
|
||||
def makeTimeLabel(self,sec):
|
||||
day = 0
|
||||
hour = 0
|
||||
min = 0
|
||||
day = sec/86500
|
||||
sec = sec-(day*86500)
|
||||
hour = sec/3600
|
||||
sec = sec-(hour*3600)
|
||||
min = sec/60
|
||||
sec = sec-(min*60)
|
||||
string = ""
|
||||
string = self.toStr(day,"day")+self.toStr(hour,"hour")
|
||||
string += self.toStr(min,"minute")+self.toStr(sec,"second")
|
||||
return string
|
||||
|
||||
|
||||
# Make a string for the amount of time
|
||||
def toStr(self,time,label):
|
||||
if time > 0:
|
||||
string=str(time) + " "+label
|
||||
if time > 1:
|
||||
string+="s"
|
||||
string += " "
|
||||
return string
|
||||
return ""
|
||||
|
||||
|
||||
# User selected a song with mouse click
|
||||
def selectSong(self,widgit,iter,path,data,list):
|
||||
self.data.curSong = self.pfilter[iter][0]
|
||||
self.loadSong(False)
|
||||
self.controls.plause(None,None)
|
||||
self.data.scrobbler.nowPlaying(self.data.library.files[self.data.curSong])
|
||||
|
||||
|
||||
# Go to the next song in the list
|
||||
def next(self,widgit,data):
|
||||
self.data.playingQ = False
|
||||
#print self.pfilter[0][1]
|
||||
#print self.pfilter[1][1]
|
||||
#print float(self.data.song.position)/float(self.data.song.info.duration)
|
||||
if (float(self.data.song.position)/float(self.data.song.info.duration)) >= 0.75:
|
||||
for row in self.plist:
|
||||
if row[0]==self.data.curSong:
|
||||
row[5]+=1
|
||||
break
|
||||
self.data.library.files[self.data.curSong].count+=1
|
||||
#if self.plist[self.data.curSong][0]==self.data.curSong:
|
||||
# self.plist[self.data.curSong][5]+=1
|
||||
if len(self.data.curQ) > 0:
|
||||
self.data.curSong = self.qlist[0][0]
|
||||
self.data.curQ.pop(self.data.curQ.index(self.data.curSong))
|
||||
self.qtime -= self.data.library.files[self.data.curSong].duration
|
||||
self.changedTab(None,None,1)
|
||||
self.qlist.remove(self.qlist.get_iter(0))
|
||||
self.data.playingQ = True
|
||||
self.setTabText("queue")
|
||||
elif self.data.random == True:
|
||||
self.data.curSong = self.pfilter[random.randint(0,len(self.pfilter)-1)][0]
|
||||
else:
|
||||
next = self.pfilter[0][0]
|
||||
for i in range(len(self.pfilter)-1):
|
||||
if self.pfilter[i][0]==self.data.curSong:
|
||||
next = self.pfilter[i+1][0]
|
||||
break
|
||||
self.data.curSong = next
|
||||
#if self.data.curSong >= len(self.data.curList):
|
||||
# self.data.curSong = 0
|
||||
|
||||
self.loadSong(True)
|
||||
pause = (self.status == PAFTER)
|
||||
|
||||
if pause == False:
|
||||
self.controls.plause(None,None)
|
||||
self.data.scrobbler.nowPlaying(self.data.library.files[self.data.curSong])
|
||||
self.controls.changeImg()
|
||||
self.status = CONTINUE
|
||||
|
||||
|
||||
# Load a song and begin playback
|
||||
def loadSong(self,scroll):
|
||||
if len(self.data.curList) == 0:
|
||||
return
|
||||
if self.data.song:
|
||||
self.data.scrobbler.submit(self.data.song.timestamp)
|
||||
self.data.song.close()
|
||||
self.data.song = Song(self.data.library.files[self.data.curSong],self.next)
|
||||
self.info.changeLabels()
|
||||
if scroll == True:
|
||||
self.gotoCurSong()
|
||||
|
||||
|
||||
# Scroll window and select row with current song
|
||||
def gotoCurSong(self):
|
||||
if len(self.pfilter) == 0:
|
||||
return
|
||||
for i in range(len(self.pfilter)):
|
||||
if self.pfilter[i][0] == self.data.song.info.id:
|
||||
if i > 10:
|
||||
self.ptree.scroll_to_cell(i-10,None,True,0,0)
|
||||
else:
|
||||
self.ptree.scroll_to_cell(0,None,True,0,0)
|
||||
self.ptree.set_cursor_on_cell(i,None,None,False)
|
||||
|
||||
|
||||
# A callback to show the right click menu
|
||||
def clicked(self,widget,data):
|
||||
if data.button == 3:
|
||||
self.prcmenu.popup(None,None,None,data.button,data.time)
|
||||
|
||||
|
||||
# Called when songs are queued
|
||||
def enqueue(self,widgit,func,data):
|
||||
(model,pathlist) = self.ptreesel.get_selected_rows()
|
||||
for path in pathlist:
|
||||
q = self.pfilter[path]
|
||||
self.data.curQ+=[q[0]]
|
||||
self.qlist.append([q[0],q[1],q[2],q[3],q[4],q[5]])
|
||||
self.qtime+=self.data.library.files[q[0]].duration
|
||||
self.setTabText("queue")
|
||||
|
||||
|
||||
# Update the total time label when a tab is changed
|
||||
def changedTab(self,widgit,page,pagenum):
|
||||
if pagenum == 0:
|
||||
self.label.set_text(self.makeTimeLabel(self.ptime))
|
||||
else:
|
||||
self.label.set_text(self.makeTimeLabel(self.qtime))
|
||||
|
||||
|
||||
def makeSearch(self):
|
||||
self.searchBar = gtk.Entry()
|
||||
self.searchBar.connect("changed",self.textTyped)
|
||||
self.searchBar.show()
|
||||
|
||||
|
||||
def textTyped(self,entry):
|
||||
self.search = entry.get_text().lower()
|
||||
self.pfilter.refilter()
|
||||
self.gotoCurSong()
|
||||
|
||||
|
||||
def hideRows(self,list,iter):
|
||||
if self.search == "":
|
||||
return True
|
||||
elif len(self.search) == 1:
|
||||
try:
|
||||
self.data.library.files[list[iter][0]].single[self.search]
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
elif len(self.search) == 2:
|
||||
try:
|
||||
self.data.library.files[list[iter][0]].double[self.search]
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
file = self.data.library.files[list[iter][0]]
|
||||
if re.search(self.search,file.titlel):
|
||||
return True
|
||||
elif re.search(self.search,file.artistl):
|
||||
return True
|
||||
elif re.search(self.search,file.albuml):
|
||||
return True
|
||||
return False
|
|
@ -48,11 +48,11 @@ class Window(gtk.Window):
|
|||
plist = MenuItem("Playlist",None,None,None,[clear])
|
||||
bar.append(plist)
|
||||
|
||||
# Replace first 'None' with after track functions
|
||||
pafter = MenuItem("Pause After Current Track",self.setPlayStatus,"pafter",None,None)
|
||||
qafter = MenuItem("Quit After Current Track",None,"qafter",None,None)
|
||||
#qafter = MenuItem("Quit After Current Track",None,"qafter",None,None)
|
||||
curSong = MenuItem("Go to Current Song",self.gotoCurSong,"cursng",None,None)
|
||||
playback = MenuItem("Playback",None,None,None,[pafter,qafter,curSong])
|
||||
#playback = MenuItem("Playback",None,None,None,[pafter,qafter,curSong])
|
||||
playback = MenuItem("Playback",None,None,None,[pafter,curSong])
|
||||
bar.append(playback)
|
||||
|
||||
bar.show()
|
||||
|
|
Loading…
Reference in New Issue