212 lines
5.7 KiB
Python
212 lines
5.7 KiB
Python
import gobject
|
|
import pango
|
|
import pygtk
|
|
pygtk.require('2.0')
|
|
import gtk
|
|
import thread
|
|
from kiwi.ui.objectlist import Column, ObjectList
|
|
|
|
from GuiObjects.menuItem import MenuItem
|
|
from GuiObjects.libView import LibView
|
|
from GuiObjects.plistView import PlistView
|
|
from GuiObjects.controlPanel import ControlPanel
|
|
from GuiObjects.infoView import InfoView
|
|
|
|
|
|
class Window(gtk.Window):
|
|
#def __init__(self,onQuit,ops,song):
|
|
def __init__(self,onQuit,options,data):
|
|
gtk.Window.__init__(self,gtk.WINDOW_TOPLEVEL)
|
|
self.data = data
|
|
self.options = options
|
|
if self.options.verbose == True:
|
|
print "Making window!"
|
|
self.resize(self.data.size[0],self.data.size[1])
|
|
self.set_title("Ocarina")
|
|
self.connect("delete_event",onQuit)
|
|
self.set_icon_from_file("images/ocarina.png")
|
|
|
|
self.mainLayout = gtk.VBox(False,0)
|
|
|
|
self.add(self.mainLayout)
|
|
self.makeMenuBar()
|
|
self.makeContentPane()
|
|
|
|
self.mainLayout.show()
|
|
self.show()
|
|
|
|
|
|
'''
|
|
# Make initial info pane
|
|
def makeInfoPane(self):
|
|
self.infoFrame = gtk.Frame("Current Song:")
|
|
box = gtk.VBox(False,0)
|
|
self.infoFrame.add(box)
|
|
attr = pango.AttrList()
|
|
attr.insert(pango.AttrSize(12000, 0, -1))
|
|
self.tagLabels["title"] = self.makeLabel("Title: ?",box,attr)
|
|
self.tagLabels["artist"] = self.makeLabel("Artist: ?",box,attr)
|
|
self.tagLabels["album"] = self.makeLabel("Album: ?",box,attr)
|
|
box.show()
|
|
self.infoFrame.show()
|
|
#self.mainLayout.add(self.infoFrame)
|
|
self.mainLayout.pack_start(self.infoFrame,False,False,0)
|
|
|
|
|
|
# Set up a new label, add to container
|
|
# Goes into a HBox so that it is left justified
|
|
def makeLabel(self,text,container,attr):
|
|
box = gtk.HBox(False,0)
|
|
label = gtk.Label(text)
|
|
s = label.get_style().copy()
|
|
self.tooltip.set_tip(label,text,tip_private=None)
|
|
#label.set_max_width_chars(35)
|
|
label.set_attributes(attr)
|
|
label.show()
|
|
box.pack_start(label,False,False,0)
|
|
box.show()
|
|
container.pack_start(box,False,False,0)
|
|
return label
|
|
|
|
|
|
# Change label info
|
|
def changeInfo(self,tags):
|
|
keys = tags.keys()
|
|
labels = self.tagLabels.keys()
|
|
for key in keys:
|
|
if (key in labels) == True:
|
|
str = key.title()+": "+tags[key]
|
|
self.tagLabels[key].set_label(str)
|
|
self.tooltip.set_tip(self.tagLabels[key],str,tip_private=None)
|
|
self.tagLabels[key].show()
|
|
|
|
|
|
def changeFrameTitle(self,label):
|
|
self.infoFrame.set_label(label+"Current Track:")
|
|
|
|
|
|
# Reset label info
|
|
def resetInfo(self):
|
|
labels = self.tagLabels.keys()
|
|
for key in labels:
|
|
self.tagLabels[key].set_label(key.title()+": ?")
|
|
self.tooltip.set_tip(self.tagLabels[key],key.title()+": ?")
|
|
self.tagLabels[key].show()
|
|
|
|
|
|
def gotoCurSong(self):
|
|
#return
|
|
if len(self.list) == 0:
|
|
return
|
|
#print self.list[0][0]
|
|
#print len(self.list)
|
|
selrow = 0
|
|
row = 0
|
|
for i in range(len(self.list)):
|
|
#print i
|
|
if self.list[i].id == self.ops.plist.curSong:
|
|
if i > 10:
|
|
selrow = i - 10
|
|
row = i
|
|
break
|
|
self.list.select(self.list[row],True)
|
|
#selrow = self.ops.plist.curSong - 10
|
|
#if selrow < 0:
|
|
# selrow = 0
|
|
#print selrow,row
|
|
#self.tree.scroll_to_cell(selrow,None,True,0,0)
|
|
#treesel = self.tree.get_selection()
|
|
#treesel.select_path(row)
|
|
'''
|
|
|
|
# Used to make the top row menu bar
|
|
def makeMenuBar(self):
|
|
# Make a menu bar
|
|
bar = gtk.MenuBar()
|
|
# This is the dropdown selections
|
|
# Make a new library option
|
|
newLib = MenuItem("New Library",self.selectDir,"ScanLib",self.data.library.scan,None)
|
|
delete = MenuItem("Delete Library",self.deleteLib,"Delete",None,None)
|
|
library = MenuItem("Library",None,None,None,[newLib,delete])
|
|
bar.append(library)
|
|
|
|
clear = MenuItem("Clear Playlist",self.clearPlist,"Clear",None,None)
|
|
plist = MenuItem("Playlist",None,None,None,[clear])
|
|
bar.append(plist)
|
|
|
|
# Replace first 'None' with after track functions
|
|
pafter = MenuItem("Pause After Current Track",None,"pafter",None,None)
|
|
qafter = MenuItem("Quit After Current Track",None,"qafter",None,None)
|
|
playback = MenuItem("Playback",None,None,None,[pafter,qafter])
|
|
bar.append(playback)
|
|
|
|
bar.show()
|
|
self.mainLayout.pack_start(bar,False,False,0)
|
|
|
|
|
|
def deleteLib(self,widgit,data,other=None):
|
|
self.data.library.reset()
|
|
self.libview.update()
|
|
self.clearPlist()
|
|
|
|
|
|
def clearPlist(self,widgit,data,other=None):
|
|
self.data.curList = []
|
|
self.data.updateList = True
|
|
|
|
|
|
# Used to select a directory
|
|
def selectDir(self,widgit,data,func):
|
|
dirsel = gtk.FileChooserDialog(None,action=gtk.FILE_CHOOSER_ACTION_OPEN,buttons =(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
|
|
dirsel.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
|
|
response = None
|
|
response = dirsel.run()
|
|
file = ""
|
|
if response == gtk.RESPONSE_OK:
|
|
file = dirsel.get_filename()
|
|
dirsel.hide()
|
|
if response != gtk.RESPONSE_OK:
|
|
return
|
|
self.libview.updates()
|
|
thread.start_new_thread(func,(data,file))
|
|
|
|
|
|
def makeContentPane(self):
|
|
self.contentPane = gtk.HBox(False,0)
|
|
self.divider = gtk.HPaned()
|
|
self.divider.set_position(self.data.divider)
|
|
self.contentPane.add(self.divider)
|
|
self.divider.show()
|
|
|
|
self.libview = LibView(self.data)
|
|
self.libview.show()
|
|
self.divider.add1(self.libview)
|
|
|
|
rightPane=gtk.VBox(False,0)
|
|
|
|
infoview = InfoView(self.data)
|
|
rightPane.pack_start(infoview,False,False,0)
|
|
self.plistview = PlistView(self.data)
|
|
rightPane.add(self.plistview)
|
|
self.makeBottomRow(rightPane)
|
|
rightPane.show()
|
|
|
|
self.divider.add2(rightPane)
|
|
|
|
self.contentPane.show()
|
|
self.mainLayout.add(self.contentPane)
|
|
|
|
|
|
def makeBottomRow(self,vbox):
|
|
box = gtk.HBox(False,0)
|
|
#box.pack_end(self.libview.label,False,False,10)
|
|
controls = ControlPanel(self.data,self.plistview)
|
|
self.plistview.controls = controls
|
|
vbox.pack_start(controls,False,False,0)
|
|
box.pack_end(self.plistview.label)
|
|
box.show()
|
|
align = gtk.Alignment(1,1,0,0)
|
|
align.add(box)
|
|
align.show()
|
|
vbox.pack_start(align,False,False,0)
|