Began work on classic theme, finished simple theme

This commit is contained in:
bjschuma 2010-03-21 17:06:04 -04:00
parent a9a9c3e642
commit a9040d9481
22 changed files with 592 additions and 193 deletions

View File

@ -20,16 +20,27 @@ def join(a,b):
def exists(path): def exists(path):
return os.path.exists( path ) return os.path.exists( expand(path) )
def isdir(path):
if exists(path) == True:
return os.path.isdir( expand(path) )
return False
def ls(path): def ls(path):
try: try:
return os.listdir(path) return os.listdir( expand(path) )
except: except:
return None return None
def mkdir(path):
if exists(path) == False:
os.mkdir(path)
def addPyPath(path): def addPyPath(path):
mods = [] mods = []
if exists(path) == True: if exists(path) == True:

View File

@ -4,17 +4,18 @@ __author__="bjschuma"
__date__ ="$Mar 13, 2010 4:19:31 PM$" __date__ ="$Mar 13, 2010 4:19:31 PM$"
import ocarina import ocarina
import coredefaults
ocarina.init()
from ct.message import write from ct.message import write
import scripting import scripting
import manager import manager
import cli import cli
import gstreamer import gstreamer
import coredefaults
def main(): def main():
ocarina.init()
# Potentially the first thing printed # Potentially the first thing printed
write("Welcome to Ocarina (core)", 1) write("Welcome to Ocarina (core)", 1)

View File

@ -26,12 +26,7 @@ plugins = None
# Set default values # Set default values
def init(): def init():
opts.parse() opts.parse()
#vars["$user"] = path.expand("~") path.mkdir(vars["$ocarina"])
#vars["$ocarina"] = path.join(vars["$user"],".ocarina3")
#vars["$verbose"] = 0
#vars["$path"] = "coreplug"
#vars["$prompt"] = ">>>"
#vars["$playonload"] = True
# Set verbose value # Set verbose value
if opts.opts.has("v") == True: if opts.opts.has("v") == True:

View File

@ -6,10 +6,12 @@
__author__="bjschuma" __author__="bjschuma"
__date__ ="$Mar 14, 2010 7:33:16 PM$" __date__ ="$Mar 14, 2010 7:33:16 PM$"
import re
from ct import cmd from ct import cmd
import ocarina import ocarina
def runScript(file):
def runOcaScript(file):
fin = open(file) fin = open(file)
for line in fin: for line in fin:
# Do some formatting for each line # Do some formatting for each line
@ -17,6 +19,17 @@ def runScript(file):
line = line.strip() line = line.strip()
if len(line) > 0: if len(line) > 0:
cmd.run(line) cmd.run(line)
def runScript(file):
if re.match("(.*?)\.py",file) == None:
runOcaScript(file)
else:
try:
execfile(file)
except:
print "Error in: " + file
def init(): def init():

View File

@ -7,10 +7,11 @@ __author__="bjschuma"
__date__ ="$Jan 27, 2010 6:21:27 PM$" __date__ ="$Jan 27, 2010 6:21:27 PM$"
from bt.message import write from ct.message import write
from sqlite3 import * from sqlite3 import *
from bt import sql from et import sql
import settings from ct.path import expand
#import settings
def init(): def init():
@ -52,10 +53,11 @@ def init():
def newlib(name,path): def newlib(name,path):
try: try:
ins = sql.Insert('library',[None,name,path]) ins = sql.Insert('library',[None,name,expand(path)])
ins.execute() ins.execute()
return 0
except: except:
pass return -1
def rmtrk(trid): def rmtrk(trid):
@ -128,15 +130,16 @@ def listlib():
result = sel.execute().fetchall() result = sel.execute().fetchall()
id = settings.get("curlib") id = settings.get("curlib")
curname = "" curname = ""
write("Id Name Count Path") write("Id Name Count Path",2)
write("---------------------------") write("---------------------------",2)
for row in result: for row in result:
if row[0] == id: if row[0] == id:
curname = row[1] curname = row[1]
count = str( countlib(row[0]) ) count = str( countlib(row[0]) )
write( str(row[0]) + " " + write( str(row[0]) + " " +
row[1] + " " + count + " " + row[2] ) row[1] + " " + count + " " + row[2],2 )
write("Current: "+curname) write("Current: "+curname,2)
return result
def getpath(dbid): def getpath(dbid):
@ -147,4 +150,7 @@ def getpath(dbid):
selt = sql.Select("path","track","id="+str(dbid)) selt = sql.Select("path","track","id="+str(dbid))
track = selt.execute().fetchone()[0] track = selt.execute().fetchone()[0]
return root+track return root+track
init()

View File

@ -1,4 +1,4 @@
__author__="bjschuma" __author__="bjschuma"
__date__ ="$Mar 14, 2010 9:53:12 PM$" __date__ ="$Mar 14, 2010 9:53:12 PM$"
__all__ = ["db", "sql", "times", "xm"] __all__ = ["needle", "scanlib", "sql", "times", "xm"]

24
src/extra/et/needle.py Normal file
View File

@ -0,0 +1,24 @@
#! /usr/bin/python
# To change this template, choose Tools | Templates
# and open the template in the editor.
__author__="bjschuma"
__date__ ="$Dec 19, 2009 9:30:59 PM$"
from threading import Thread
class Needle(Thread):
def __init__(self, func, args=None):
Thread.__init__(self)
self.func = func
self.args = args
def run(self):
if self.args==None:
self.func()
else:
self.func(self.args)

186
src/extra/et/scanlib.py Normal file
View File

@ -0,0 +1,186 @@
#! /usr/bin/python
# To change this template, choose Tools | Templates
# and open the template in the editor.
__author__="bjschuma"
__date__ ="$Jan 30, 2010 3:57:53 PM$"
from et import sql
#from bt import needle
from ct.path import *
from ct.message import write
import ocarina
import tagpy
import re
global total
global scanned
global added
global root
global goodFiles
global search
global libid
total = 0
added = 0
scanned = 0
root = ""
goodFiles = ["ogg", "mp3"]
# Generate search string (allows adding to goodFiles later)
def genSearch():
global goodFiles
global search
search = ".*\.("
for index,file in enumerate(goodFiles):
if index > 0:
search += "|"
search += file
search += ")"
genSearch()
# Test if the file extension is in goodFiles
def testPath(path):
global search
match = re.search(search,path,re.IGNORECASE)
if match == None:
return False
return True
def incr(path):
global total
total += 1
# Call to insert either an artist or an album
def insartalb(table,value):
if value == "":
value = "Unknown "+table.title()
#value = value.replace("\'","\'\'")
sel = sql.Select("id",table,'name="' + value + '"')
result = sel.execute().fetchall()
if result == []:
ins = sql.Insert(table,[None,value])
ins.execute()
result = sel.execute().fetchall()
return result[0][0]
# Call to insert a new track
def instrk(arid, alid, title, length, path):
global root
global libid
if title == "":
title = "Unknown Title"
path = path[len(root):]
sel = sql.Select("id","track",'path="'+path+'"')
result = sel.execute().fetchall()
if result == []:
ins = sql.Insert("track", [None, arid, alid, 0, length, title, path] )
ins.execute()
result = sel.execute().fetchall()
trid = str(result[0][0])
where = "library='"+libid+"' AND track='"+trid+"'"
sel = sql.Select("*","libtrack",where)
result = sel.execute().fetchall()
if result == []:
ins = sql.Insert("libtrack",[int(libid),int(trid)])
ins.execute()
def addtrk(path):
global added
global scanned
scanned += 1
try:
f = tagpy.FileRef(path)
t = f.tag()
added += 1
except:
return
try:
arid = insartalb("artist", t.artist)
alid = insartalb("album", t.album)
a = f.audioProperties()
instrk(arid, alid, t.title, a.length, path)
except:
write("Error adding: "+path)
#pass
def scan(dir,func):
files = ls(dir)
for file in files:
path = join(dir,file)
if isdir(path) == True:
scan(path,func)
else:
if testPath(path) == True:
func(path)
def go(name):
global total
global added
global scanned
global root
global libid
total = 0
added = 0
scanned = 0
sel = sql.Select("id,path","library","name='"+name+"'")
result = sel.execute().fetchall()
if result == []:
return
libid = str(result[0][0])
path = result[0][1]
root = path
ocarina.events.start("ocarina-scanlib-start")
# Start a thread to count the total number of files to scan
#totthr = needle.Needle(scan,(path,incr))
#totthr.start()
scan(path,incr)
#print "Done scanning"
#print total, added
scan(path,addtrk)
ocarina.events.start("ocarina-scanlib-stop")
# Start a thread to actually add tracks to the db
#scthr = needle.Needle(scan,(path,addtrk))
#scthr.start()
def prcnt():
global total
global scanned
global added
write( str(scanned) + " / " + str(total) )
write( "Added " + str(added) + " tracks." )
def progress():
global total
global added
return (added,total)

View File

@ -8,13 +8,13 @@ __author__="bjschuma"
__date__ ="$Jan 23, 2010 8:40:03 PM$" __date__ ="$Jan 23, 2010 8:40:03 PM$"
import sqlite3 import sqlite3
import settings #import settings
from ct.path import * from ct.path import *
import ocarina import ocarina
def getdb(): def getdb():
return join(ocarina.vars["$ocarina"]+"ocarina.db") return join(ocarina.vars["$ocarina"],"ocarina.db")
def dbexists(): def dbexists():

View File

@ -8,7 +8,9 @@ __date__ ="$Mar 15, 2010 9:56:53 PM$"
from ocarina import vars from ocarina import vars
vars["$theme"] = "simple.xml" import coredefaults
#vars["$theme"] = "themes/simple.xml"
vars["$theme"] = "themes/classic.xml"
vars["$artist"] = "" vars["$artist"] = ""
vars["$album"] = "" vars["$album"] = ""
vars["$title"] = "" vars["$title"] = ""

View File

@ -20,6 +20,32 @@ parts = dict()
global buildFunc global buildFunc
buildFunc = None buildFunc = None
global window
window = None
def buildTabs(node,tabs):
global buildFunc
for child in xm.children(node):
if child.nodeName=="tab":
label = None
content = None
for gchild in xm.children(child):
if gchild.nodeName == "tablabel":
for ggchild in xm.children(gchild):
item = buildFunc(ggchild)
if item != None:
label = item
elif gchild.nodeName == "tabcontent":
for ggchild in xm.children(gchild):
item = buildFunc(ggchild)
if item != None:
content = item
if content != None:
tabs.append_page(content,label)
def buildMenu(node,menu): def buildMenu(node,menu):
global buildFunc global buildFunc
@ -83,13 +109,18 @@ def build(node):
fill(node,part) fill(node,part)
elif (tag=="menubar") or (tag=="menuitem"): elif (tag=="menubar") or (tag=="menuitem"):
buildMenu(node,part) buildMenu(node,part)
elif (tag=="tabs"):
buildTabs(node,part)
return part return part
def init(): def init():
write("Building gui",1) global window
if window != None:
window.hide()
write("Building gui from file: "+ocarina.vars["$theme"],1)
doc = xm.load(ocarina.vars["$theme"]) doc = xm.load(ocarina.vars["$theme"])
build( xm.child(doc) ) window = build( xm.child(doc) )
buildFunc = build buildFunc = build

View File

@ -2,5 +2,5 @@ __author__="bjschuma"
__date__ ="$Mar 14, 2010 10:21:40 PM$" __date__ ="$Mar 14, 2010 10:21:40 PM$"
__all__ = ["box", "button", "label", "label", "menu", __all__ = ["box", "button", "dialog", "label", "label", "list", "menu",
"progbar", "songInfo", "window"] "progbar", "songInfo", "tabs", "window"]

73
src/extra/oGtk/dialog.py Normal file
View File

@ -0,0 +1,73 @@
#! /usr/bin/python
# To change this template, choose Tools | Templates
# and open the template in the editor.
__author__="bjschuma"
__date__ ="$Mar 18, 2010 11:48:15 AM$"
import gtk
import db
import ocarina
import scripting
from oGtk import progbar
class FileChooser(gtk.FileChooserDialog):
def __init__(self,title,seldir=False):
buttons = (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)
action=gtk.FILE_CHOOSER_ACTION_OPEN
gtk.FileChooserDialog.__init__(self,title,None,action=action,buttons=buttons)
if seldir == True:
self.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
def choose(self):
response = self.run()
self.hide()
file = ""
#print response
if response == gtk.RESPONSE_OK:
file = self.get_filename()
if response != gtk.RESPONSE_OK:
return None
return file
class NewLibrary(gtk.Dialog):
def __init__(self):
buttons = (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,"Scan",gtk.RESPONSE_OK)
gtk.Dialog.__init__(self,"New Library",None,gtk.DIALOG_NO_SEPARATOR,buttons=buttons)
self.table = gtk.Table(2,3,False)
name = gtk.Label("Name: ")
dir = gtk.Label("Directory: ")
self.libname = gtk.Entry()
self.libname.set_text("New Library")
self.dir = gtk.Entry()
button = gtk.Button(None,gtk.STOCK_OPEN)
button.connect("clicked",self.onclick)
self.table.attach(name,0,1,0,1)
self.table.attach(self.libname,1,2,0,1)
self.table.attach(dir,0,1,1,2)
self.table.attach(self.dir,1,2,1,2)
self.table.attach(button,2,3,1,2)
self.table.show_all()
self.get_children()[0].pack_start(self.table,False,False,0)
def choose(self):
response = self.run()
self.hide()
if response == -5:
return (self.libname.get_text(), self.dir.get_text())
return (None,None)
def onclick(self,button):
dirresult = FileChooser("Select a directory",True).choose()
if dirresult != "":
self.dir.set_text(dirresult)

72
src/extra/oGtk/list.py Normal file
View File

@ -0,0 +1,72 @@
#! /usr/bin/python
# To change this template, choose Tools | Templates
# and open the template in the editor.
__author__="bjschuma"
__date__ ="$Mar 21, 2010 1:06:27 PM$"
import gtk
import guibuilder
import db
class SongList(gtk.ScrolledWindow):
def __init__(self):
gtk.ScrolledWindow.__init__(self)
self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
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","Play 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)
col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
col.set_min_width(2)
col.set_max_width(700)
col.set_fixed_width(150)
col.set_sort_indicator(True)
if cols[i] != "Id":
self.tree.append_column(col)
self.tree.set_rules_hint(True)
#self.tree.connect("row-activated",self.selectSong,"clicked",list)
#self.tree.connect("button_release_event",self.clicked)
self.sel = self.tree.get_selection()
self.sel.set_mode(gtk.SELECTION_MULTIPLE)
#self.list.set_sort_column_id(self.data.sortedCol,gtk.SORT_ASCENDING)
self.cols = self.tree.get_columns()
#self.loadCols()
#self.tree.show()
self.add(self.tree)
self.show_all()
# Add a row to the list
def insert(self,file):
self.list.insert(self.count,[file.id,file.title,file.length,file.artist,file.album,file.count])
self.count+=1
self.seconds+=file.duration
class LibraryList(SongList):
def __init__(self):
SongList.__init__(self)
libid = db.libid("Music")
#print db.listlib()
def make_songlist(attrs=None):return SongList()
def make_librarylist(attrs=None):return LibraryList()
guibuilder.parts["songlist"] = make_songlist
guibuilder.parts["librarylist"] = make_librarylist

View File

@ -11,6 +11,11 @@ import gtk
import ocarina import ocarina
import guibuilder import guibuilder
from ct import cmd from ct import cmd
from oGtk import dialog
from oGtk import window
from et import scanlib
from et import needle
import db
class MenuBar(gtk.MenuBar): class MenuBar(gtk.MenuBar):
@ -88,23 +93,45 @@ class MenuStop(gtk.ImageMenuItem):
class MenuSongSelect(gtk.MenuItem): class MenuSongSelect(gtk.MenuItem):
def __init__(self): def __init__(self):
gtk.MenuItem.__init__(self,"Play File") gtk.MenuItem.__init__(self,"Select song")
self.connect("activate",self.onclick) self.connect("activate",self.onclick)
self.show() self.show()
def onclick(self,menu): def onclick(self,menu):
buttons = (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK) file = dialog.FileChooser("Select a song").choose()
chooser = gtk.FileChooserDialog("Select a song",None,action=gtk.FILE_CHOOSER_ACTION_OPEN,buttons=buttons) if file!=None:
response = chooser.run() cmd.run("load " + file)
chooser.hide()
file = ""
if response == gtk.RESPONSE_OK:
file = chooser.get_filename()
#chooser.hide()
if response != gtk.RESPONSE_OK:
return
cmd.run("load "+file)
class MenuLibNew(gtk.MenuItem):
def __init__(self):
gtk.MenuItem.__init__(self,"New Library")
self.connect("activate",self.onclick)
self.show()
def onclick(self,menu):
choice = dialog.NewLibrary()
(name,path) = choice.choose()
del choice
if name != None:
db.newlib(name,path)
thread = needle.Needle(scanlib.go,name)
thread.start()
class MenuTheme(gtk.MenuItem):
def __init__(self):
gtk.MenuItem.__init__(self,"Change Theme")
self.connect("activate", self.onclick)
self.show()
def onclick(self,menu):
file = dialog.FileChooser("Select a theme file").choose()
if file!=None:
print file
ocarina.vars["$theme"] = str(file)
guibuilder.init()
@ -114,10 +141,14 @@ def make_menuplay(attrs=None):return MenuPlay()
def make_menupause(attrs=None):return MenuPause() def make_menupause(attrs=None):return MenuPause()
def make_menustop(attrs=None):return MenuStop() def make_menustop(attrs=None):return MenuStop()
def make_menusongsel(attrs=None):return MenuSongSelect() def make_menusongsel(attrs=None):return MenuSongSelect()
def make_menulibnew(attrs=None):return MenuLibNew()
def make_menutheme(attrs=None):return MenuTheme()
guibuilder.parts["menubar"] = make_menubar guibuilder.parts["menubar"] = make_menubar
guibuilder.parts["menuitem"] = make_menuitem guibuilder.parts["menuitem"] = make_menuitem
guibuilder.parts["menuplay"] = make_menuplay guibuilder.parts["menuplay"] = make_menuplay
guibuilder.parts["menupause"] = make_menupause guibuilder.parts["menupause"] = make_menupause
guibuilder.parts["menustop"] = make_menustop guibuilder.parts["menustop"] = make_menustop
guibuilder.parts["menusongsel"] = make_menusongsel guibuilder.parts["menusongsel"] = make_menusongsel
guibuilder.parts["menulibnew"] = make_menulibnew
guibuilder.parts["menutheme"] = make_menutheme

View File

@ -12,7 +12,11 @@ import gobject
import guibuilder import guibuilder
import gstreamer import gstreamer
import ocarina
from et import times from et import times
from et import scanlib
class ProgressBar(gtk.EventBox): class ProgressBar(gtk.EventBox):
def __init__(self): def __init__(self):
@ -36,12 +40,37 @@ class ProgressBar(gtk.EventBox):
def updatebar(self): def updatebar(self):
self.bar.set_fraction(gstreamer.getProgress()) try:
current = times.ftime(gstreamer.currentpos()) self.bar.set_fraction(gstreamer.getProgress())
duration = times.ftime(gstreamer.duration()) current = times.ftime(gstreamer.currentpos())
self.bar.set_text(current + " / " + duration) duration = times.ftime(gstreamer.duration())
self.bar.set_text(current + " / " + duration)
except:
pass
return True
class LibScanBar(gtk.ProgressBar):
def __init__(self):
gtk.ProgressBar.__init__(self)
gobject.timeout_add(500,self.updatebar)
ocarina.events.invite("ocarina-scanlib-start",self.show)
ocarina.events.invite("ocarina-scanlib-stop",self.hide)
def updatebar(self):
(cur,tot) = scanlib.progress()
if cur > 0:
self.set_text(str(cur) + " / " + str(tot))
self.set_fraction(float(cur) / float(tot))
else:
self.set_text(str(tot))
self.set_fraction(0)
return True return True
def make_progbar(attrs):return ProgressBar() def make_progbar(attrs):return ProgressBar()
guibuilder.parts["progbar"] = make_progbar def make_libscanbar(attrs):return LibScanBar()
guibuilder.parts["progbar"] = make_progbar
guibuilder.parts["scanlibbar"] = make_libscanbar

20
src/extra/oGtk/tabs.py Normal file
View File

@ -0,0 +1,20 @@
#! /usr/bin/python
# To change this template, choose Tools | Templates
# and open the template in the editor.
__author__="bjschuma"
__date__ ="$Mar 21, 2010 12:47:11 PM$"
import gtk
import guibuilder
class Tabs(gtk.Notebook):
def __init__(self):
gtk.Notebook.__init__(self)
self.show()
def make_tabs(attrs=None):return Tabs()
guibuilder.parts["tabs"] = make_tabs

View File

@ -10,6 +10,7 @@ import gtk
import guibuilder import guibuilder
import ocarina import ocarina
from oGtk import progbar
class Window(gtk.Window): class Window(gtk.Window):
def __init__(self, attrs): def __init__(self, attrs):
@ -36,5 +37,14 @@ class Window(gtk.Window):
ocarina.events.start(self.quitEvent) ocarina.events.start(self.quitEvent)
class LibScanWin(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.bar = progbar.LibScanBar()
self.add(self.bar)
self.bar.show()
self.show()
def make_window(attrs):return Window(attrs) def make_window(attrs):return Window(attrs)
guibuilder.parts["window"] = make_window guibuilder.parts["window"] = make_window

View File

@ -8,13 +8,15 @@ sys.path.append("core")
import ocarina import ocarina
import extradefaults
ocarina.init()
from ct.message import write from ct.message import write
import scripting import scripting
import manager import manager
#import cli #import cli
import gstreamer import gstreamer
import coredefaults
import extradefaults
import guibuilder import guibuilder
from oGtk import * from oGtk import *
@ -25,7 +27,7 @@ gobject.threads_init()
def main(): def main():
ocarina.init() #ocarina.init()
# Potentially the first thing printed # Potentially the first thing printed
write("Welcome to Ocarina (extra)", 1) write("Welcome to Ocarina (extra)", 1)

View File

@ -1,136 +0,0 @@
import os.path
#! /usr/bin/python
# To change this template, choose Tools | Templates
# and open the template in the editor.
__author__="bjschuma"
__date__ ="$Jan 23, 2010 8:40:03 PM$"
from bt.file import checkPath
import sqlite3
import settings
from bt.file import *
def getdb():
return join(settings.get("appdir"), settings.get("appname")+".db")
def dbexists():
return checkPath(getdb())
def connect():
path = getdb()
con = sqlite3.connect(path)
con.text_factory = str
return con
def disconnect(con):
con.commit()
con.close()
class Statement():
def __init__(self):
self.statement = ""
self.con = connect()
self.commit = True
def __del__(self):
self.con.close()
def commitdb(self):
self.con.commit()
def execute(self,vals=None):
if self.statement == "":
return
if vals==None:
result = self.con.execute(self.statement)
else:
result = self.con.execute(self.statement,vals)
if self.commit == True:
self.commitdb()
return result
class CTable(Statement):
def __init__(self,name):
Statement.__init__(self)
self.name = name
self.cols = []
def addcol(self,name,type,params=""):
self.cols += [(name,type,params)]
def execute(self):
self.statement = "CREATE TABLE "+self.name + " ("
for index,col in enumerate(self.cols):
if not index == 0:
self.statement += ", "
self.statement += " " + col[0] + " " + col[1] + " " + col[2]
self.statement += " );"
return Statement.execute(self)
class Select(Statement):
def __init__(self,What,From,Where=None):
Statement.__init__(self)
self.commit = False
self.What = What
self.From = From
self.Where = Where
def execute(self):
self.statement = "SELECT " + self.What
self.statement += " FROM " + self.From
if not self.Where==None:
self.statement += " WHERE " + self.Where
return Statement.execute(self)
class Insert(Statement):
def __init__(self,table,values=[]):
Statement.__init__(self)
self.table = table
self.values = values
def addval(self,val):
self.values += [val]
def execute(self):
self.statement = "INSERT INTO "+ self.table + " VALUES("
qs = ""
for i in range(len(self.values)):
if not i == 0:
qs+=","
qs+="?"
#self.values[i] = str(self.values[i])
self.statement+=qs + ")"
Statement.execute(self, self.values)
class Remove(Statement):
def __init__(self,table,where=""):
Statement.__init__(self)
self.table = table
self.where = where
def execute(self):
self.statement = "DELETE FROM " + self.table
if not self.where=="":
self.statement += " WHERE "+self.where
Statement.execute(self)

32
src/themes/classic.xml Normal file
View File

@ -0,0 +1,32 @@
<?xml version="1.0" ?>
<window width="900" height="600" close="ocarina-stop" title="Ocarina 3.0">
<add>
<vbox>
<menubar>
<menuitem name="Library">
<menulibnew/>
</menuitem>
<menuitem name="Playback">
<menuplay/>
<menupause/>
<menustop/>
<menusongsel/>
</menuitem>
<menuitem name="Theme">
<menutheme/>
</menuitem>
</menubar>
<songinfo/>
<tabs>
<tab>
<tablabel>
<label text="Library"/>
</tablabel>
<tabcontent>
<librarylist/>
</tabcontent>
</tab>
</tabs>
</vbox>
</add>
</window>

View File

@ -3,18 +3,15 @@
<add> <add>
<vbox> <vbox>
<menubar> <menubar>
<menuitem name="Library">
<menuitem name="New Library"/>
<!--<menuitem name="Select Library">
<menuitem name="Library 1"/>
</menuitem>-->
</menuitem>
<menuitem name="Playback"> <menuitem name="Playback">
<menuplay/> <menuplay/>
<menupause/> <menupause/>
<menustop/> <menustop/>
<menusongsel/> <menusongsel/>
</menuitem> </menuitem>
<menuitem name="Theme">
<menutheme/>
</menuitem>
</menubar> </menubar>
<songinfo/> <songinfo/>
<hbox> <hbox>