ocarina/trunk/src/window.py

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)