import Queue import random import pygtk pygtk.require('2.0') import gtk class Playlist: #def __init__(self,prnt): def __init__(self): #self.prnt = prnt self.list = [] self.queue = Queue.Queue() self.curSong = 0 self.random = True self.translate = None self.opsNext = None #self.makeWindow() # Enqueue a song # Takes songid def queueSong(self,song): self.queue.put(song) # Insert the list of songs def insert(self,list): self.list = list # Return the next song def next(self): if self.queue.empty() == False: self.curSong = self.queue.get() return self.curSong if len(self.list) == 0: return -2 if self.random==True: self.curSong = random.randint(0,len(self.list)-1) else: self.curSong += 1 if self.curSong > len(self.list): self.curSong = 0 song = self.list[self.curSong] return song # Play the selected song def selectSong(self,module,iter,path,data,list): self.queueSong(list[iter][0]) self.opsNext(None,None) self.hideWindow(None,None) # Make the playlist window def makeWindow(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event",self.hideWindow) self.window.set_size_request(200,300) self.scroll = gtk.ScrolledWindow() self.scroll.set_border_width(0) self.scroll.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) self.window.add(self.scroll) self.populateList() # Fill in rows in the playlist def populateList(self): liststore = gtk.ListStore(int,str,str,str,int) #liststore = gtk.ListStore(str,str) for num in self.list: liststore.append(self.translate(num)) treeview = gtk.TreeView(liststore) cell = gtk.CellRendererText() cols = ["Id","Title","Artist","Album","Count"] 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) treeview.append_column(col) treeview.set_search_column(1) treeview.connect("row-activated",self.selectSong,"clicked",liststore) treeview.show() treeview.columns_autosize() self.scroll.add(treeview) self.scroll.show() # Go to current song, enable grid lines selrow = self.curSong-10 if selrow < 0: selrow = 0 treeview.scroll_to_cell(selrow,None,False,0,0) treeview.set_grid_lines(True) treesel = treeview.get_selection() treesel.select_path(self.curSong) # Hide the playlist def hideWindow(self,widget,data): #self.scroll.hide() self.window.hide() self.window = None # Show the playlist def showWindow(self,widget,data): #self.populateList() self.makeWindow() self.window.show() self.window.maximize()