ocarina/trunk/playlist.py

114 lines
2.6 KiB
Python

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()