Removed command line class
git-svn-id: file:///home/anna/Desktop/ocarina-legacy/mithos/ocarina@18 1daee41c-8060-4895-b1f0-2197c00d777a
This commit is contained in:
parent
f712855a9b
commit
93f2dacf83
150
trunk/cline.py
150
trunk/cline.py
|
@ -1,150 +0,0 @@
|
||||||
import threading
|
|
||||||
import curses
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Command line class, will run in its own thread #
|
|
||||||
# Does not contain any actual commands, this just takes user input #
|
|
||||||
# Commands must be registered before they can be used #
|
|
||||||
# When registering a command: pass the key, a poiner to the function, and #
|
|
||||||
# a help message #
|
|
||||||
# This does have a built-in help function, which displays the help messages #
|
|
||||||
# for registered commands. The help function can be overridden if needed #
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
class CLine(threading.Thread):
|
|
||||||
# Initialize ncurses stuff
|
|
||||||
def __init__(self):
|
|
||||||
threading.Thread.__init__(self)
|
|
||||||
self.stdscr = curses.initscr()
|
|
||||||
self.maxSize = self.stdscr.getmaxyx()
|
|
||||||
curses.cbreak()
|
|
||||||
curses.noecho()
|
|
||||||
self.stdscr.keypad(1)
|
|
||||||
self.input = ""
|
|
||||||
self.pos = (0,0) # REMEMBER: (y,x)
|
|
||||||
self.start()
|
|
||||||
self.cmnds = dict()
|
|
||||||
|
|
||||||
|
|
||||||
# Reverse ncurses stuff (returns screen to normal)
|
|
||||||
# THIS MUST BE CALLED BEFORE EXITING!!!
|
|
||||||
def quit(self):
|
|
||||||
curses.nocbreak()
|
|
||||||
curses.echo()
|
|
||||||
self.stdscr.keypad(0)
|
|
||||||
curses.endwin()
|
|
||||||
|
|
||||||
|
|
||||||
# Print the prompt
|
|
||||||
def prompt(self):
|
|
||||||
(y,x) = self.stdscr.getyx()
|
|
||||||
self.stdscr.addstr(y,0,">>> ")
|
|
||||||
self.stdscr.refresh()
|
|
||||||
|
|
||||||
|
|
||||||
# Run the command line
|
|
||||||
def run(self):
|
|
||||||
try:
|
|
||||||
self.prompt()
|
|
||||||
while(True):
|
|
||||||
# Enter key pressed
|
|
||||||
c = self.stdscr.getch()
|
|
||||||
if c==10:
|
|
||||||
self.enter()
|
|
||||||
elif c==127:
|
|
||||||
self.backspace()
|
|
||||||
else:
|
|
||||||
self.input+=curses.keyname(c)
|
|
||||||
self.changeline()
|
|
||||||
finally:
|
|
||||||
self.quit()
|
|
||||||
|
|
||||||
|
|
||||||
# Enter key pressed
|
|
||||||
# Returns true if we keep going
|
|
||||||
def enter(self):
|
|
||||||
args = self.input.strip().split(' ',1)
|
|
||||||
self.input = args[0].lower()
|
|
||||||
input = ""
|
|
||||||
if len(args) > 1:
|
|
||||||
input = args[1].strip()
|
|
||||||
#self.printLine(self.input+"\t"+input)
|
|
||||||
#self.input = self.input.strip().lower()
|
|
||||||
if self.input=="":
|
|
||||||
return
|
|
||||||
elif self.input in self.cmnds.keys():
|
|
||||||
self.cmnds[self.input][0](input)
|
|
||||||
self.advanceLine()
|
|
||||||
self.prompt()
|
|
||||||
self.input = ""
|
|
||||||
elif self.input == "help":
|
|
||||||
self.printHelp()
|
|
||||||
self.input = ""
|
|
||||||
|
|
||||||
|
|
||||||
# Backspace key pressed
|
|
||||||
def backspace(self):
|
|
||||||
(y,x) = self.stdscr.getyx()
|
|
||||||
if self.input != "":
|
|
||||||
self.stdscr.move(y,x-1)
|
|
||||||
self.stdscr.delch()
|
|
||||||
self.input=self.input[0:len(self.input)-1]
|
|
||||||
|
|
||||||
|
|
||||||
# Advance cursor to next line
|
|
||||||
def advanceLine(self):
|
|
||||||
(y,x) = self.stdscr.getyx()
|
|
||||||
if y==self.maxSize[0]-1:
|
|
||||||
self.stdscr.move(0,0)
|
|
||||||
self.stdscr.deleteln()
|
|
||||||
else:
|
|
||||||
y+=1
|
|
||||||
self.stdscr.move(y,0)
|
|
||||||
|
|
||||||
|
|
||||||
# Change the current line to reflect self.input
|
|
||||||
def changeline(self):
|
|
||||||
(y,x) = self.stdscr.getyx()
|
|
||||||
self.stdscr.deleteln()
|
|
||||||
self.stdscr.move(y,0)
|
|
||||||
self.prompt()
|
|
||||||
self.stdscr.addstr(self.input)
|
|
||||||
|
|
||||||
|
|
||||||
# Print lines to the screen
|
|
||||||
def printLines(self,lines):
|
|
||||||
#self.advanceLine()
|
|
||||||
for line in lines:
|
|
||||||
self.printLine(line)
|
|
||||||
self.advanceLine()
|
|
||||||
self.prompt()
|
|
||||||
|
|
||||||
|
|
||||||
# Print a single line on the screen
|
|
||||||
def printLine(self,line):
|
|
||||||
(y,x) = self.stdscr.getyx()
|
|
||||||
self.advanceLine()
|
|
||||||
(y,x) = self.stdscr.getyx()
|
|
||||||
if len(line) > (self.maxSize[1]-1):
|
|
||||||
self.stdscr.addstr(line[0:(self.maxSize[1]-1)])
|
|
||||||
self.printLine(line[self.maxSize[1]-1:len(line)])
|
|
||||||
else:
|
|
||||||
self.stdscr.addstr(line)
|
|
||||||
#self.stdscr.move(y+1,x)
|
|
||||||
self.stdscr.refresh()
|
|
||||||
|
|
||||||
|
|
||||||
# Associate a command with a function
|
|
||||||
def register(self,command,func,help):
|
|
||||||
self.cmnds[command]=(func,help)
|
|
||||||
|
|
||||||
|
|
||||||
# Scan through keys and print help messages
|
|
||||||
def printHelp(self):
|
|
||||||
lines = []
|
|
||||||
keys = self.cmnds.keys()
|
|
||||||
keys.sort()
|
|
||||||
for cmnd in keys:
|
|
||||||
lines+=[cmnd+"\t"+self.cmnds[cmnd][1]]
|
|
||||||
self.printLines(lines)
|
|
|
@ -1,2 +1,2 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
`which python` ocarina.py $?
|
`which python` ocarina.py $@
|
||||||
|
|
|
@ -29,6 +29,12 @@ class main:
|
||||||
self.ops.plist = self.plist
|
self.ops.plist = self.plist
|
||||||
self.ops.library = self.library
|
self.ops.library = self.library
|
||||||
|
|
||||||
|
#self.ops.plist.random = True
|
||||||
|
if self.ops.plist.random==True:
|
||||||
|
# Toggle random status because set_active toggles it back
|
||||||
|
self.ops.random(None,None)
|
||||||
|
self.randomButton.set_active(1)
|
||||||
|
|
||||||
song = None
|
song = None
|
||||||
# If we were given a song as input, check that it exists and begin playback
|
# If we were given a song as input, check that it exists and begin playback
|
||||||
if len(argv) > 0:
|
if len(argv) > 0:
|
||||||
|
@ -49,7 +55,6 @@ class main:
|
||||||
|
|
||||||
#gobject.idle_add(self.markProgress,self.pbar,"progress")
|
#gobject.idle_add(self.markProgress,self.pbar,"progress")
|
||||||
|
|
||||||
|
|
||||||
# Call gtk main
|
# Call gtk main
|
||||||
gtk.main()
|
gtk.main()
|
||||||
|
|
||||||
|
@ -64,9 +69,21 @@ class main:
|
||||||
self.window.set_icon_from_file("images/ocarina.png")
|
self.window.set_icon_from_file("images/ocarina.png")
|
||||||
# Make a control box for buttons
|
# Make a control box for buttons
|
||||||
self.control = gtk.VBox(False,0)
|
self.control = gtk.VBox(False,0)
|
||||||
|
|
||||||
|
self.infoFrame = gtk.Frame("Song Info Goes Here")
|
||||||
|
infoLabel = gtk.Label("test")
|
||||||
|
self.infoFrame.add(infoLabel)
|
||||||
|
infoLabel.show()
|
||||||
|
self.infoFrame.show()
|
||||||
|
|
||||||
|
|
||||||
self.inside = gtk.HBox(False,0)
|
self.inside = gtk.HBox(False,0)
|
||||||
self.window.add(self.control)
|
self.window.add(self.control)
|
||||||
# Make buttons
|
# Make buttons
|
||||||
|
self.randomButton = gtk.CheckButton(label="Random")
|
||||||
|
self.randomButton.connect("toggled",self.ops.random,"randomButton")
|
||||||
|
# Start with random enabled
|
||||||
|
self.randomButton.show()
|
||||||
self.playButton = self.makeButton("playButton","images/play.png",None,self.ops.play)
|
self.playButton = self.makeButton("playButton","images/play.png",None,self.ops.play)
|
||||||
self.pauseButton = self.makeButton("pauseButton","images/pause.png",None,self.ops.pause)
|
self.pauseButton = self.makeButton("pauseButton","images/pause.png",None,self.ops.pause)
|
||||||
self.nextButton = self.makeButton("nextButton","images/next.png",None,self.ops.next)
|
self.nextButton = self.makeButton("nextButton","images/next.png",None,self.ops.next)
|
||||||
|
@ -78,8 +95,10 @@ class main:
|
||||||
self.inside.pack_start(self.nextButton,False,False,0)
|
self.inside.pack_start(self.nextButton,False,False,0)
|
||||||
self.inside.pack_start(self.thisButton,False,False,0)
|
self.inside.pack_start(self.thisButton,False,False,0)
|
||||||
self.inside.pack_start(self.infoButton,False,False,0)
|
self.inside.pack_start(self.infoButton,False,False,0)
|
||||||
|
self.inside.pack_start(self.randomButton,False,False,0)
|
||||||
self.inside.show()
|
self.inside.show()
|
||||||
# Top row
|
# Top row
|
||||||
|
self.control.pack_start(self.infoFrame,False,False,0)
|
||||||
self.control.pack_start(self.inside,False,False,0)
|
self.control.pack_start(self.inside,False,False,0)
|
||||||
self.pbar = gtk.ProgressBar()
|
self.pbar = gtk.ProgressBar()
|
||||||
self.pbar.set_fraction(0)
|
self.pbar.set_fraction(0)
|
||||||
|
@ -89,9 +108,9 @@ class main:
|
||||||
self.control.pack_start(self.pbar,False,False,0)
|
self.control.pack_start(self.pbar,False,False,0)
|
||||||
|
|
||||||
# Tray
|
# Tray
|
||||||
self.statusIcon = gtk.StatusIcon()
|
#self.statusIcon = gtk.StatusIcon()
|
||||||
self.statusIcon.set_from_file("images/ocarina.png")
|
#self.statusIcon.set_from_file("images/ocarina.png")
|
||||||
self.statusIcon.set_tooltip("Ocarina")
|
#self.statusIcon.set_tooltip("Ocarina")
|
||||||
#self.statusIcon.show()
|
#self.statusIcon.show()
|
||||||
|
|
||||||
self.control.show()
|
self.control.show()
|
||||||
|
@ -127,31 +146,6 @@ class main:
|
||||||
return button
|
return button
|
||||||
|
|
||||||
|
|
||||||
# Show running time info
|
|
||||||
#def time(self,unused):
|
|
||||||
# if self.song == None:
|
|
||||||
# return
|
|
||||||
# cur = self.song.curTime()
|
|
||||||
# tot = self.song.info.length
|
|
||||||
# self.commands.printLine(cur.toStr()+" / "+tot.toStr())
|
|
||||||
|
|
||||||
|
|
||||||
# Show basic song info
|
|
||||||
#def this(self,unused):
|
|
||||||
#def this(self,widget,data):
|
|
||||||
# # Return if no song found
|
|
||||||
# if self.song == None:
|
|
||||||
# return
|
|
||||||
# # Return if no tags found
|
|
||||||
# if self.song.info.tags == None:
|
|
||||||
# print "Could not find any tags"
|
|
||||||
# return
|
|
||||||
# fields = ["title","artist","track-number","track-count","album"]
|
|
||||||
# for field in fields:
|
|
||||||
# if (field in self.song.info.tags.keys()) == True:
|
|
||||||
# print field+":",self.song.info.tags[field]
|
|
||||||
|
|
||||||
|
|
||||||
def scanLib(self,dir):
|
def scanLib(self,dir):
|
||||||
if dir == "":
|
if dir == "":
|
||||||
print "Please include a library directory"
|
print "Please include a library directory"
|
||||||
|
@ -159,8 +153,4 @@ class main:
|
||||||
self.library.scan(dir)
|
self.library.scan(dir)
|
||||||
|
|
||||||
|
|
||||||
def random(self,unused):
|
|
||||||
self.plist.random = not self.plist.random
|
|
||||||
|
|
||||||
|
|
||||||
if __name__=='__main__':main(sys.argv[1:])
|
if __name__=='__main__':main(sys.argv[1:])
|
||||||
|
|
|
@ -74,3 +74,8 @@ class Operations:
|
||||||
for tag in self.song.info.tags.keys():
|
for tag in self.song.info.tags.keys():
|
||||||
print tag+":",self.song.info.tags[tag]
|
print tag+":",self.song.info.tags[tag]
|
||||||
print self.song.info.filename
|
print self.song.info.filename
|
||||||
|
|
||||||
|
|
||||||
|
# Toggle random
|
||||||
|
def random(self,widget,data):
|
||||||
|
self.plist.random = not self.plist.random
|
||||||
|
|
|
@ -29,10 +29,12 @@ class Playlist:
|
||||||
return self.queue.get()
|
return self.queue.get()
|
||||||
if len(self.list) == 0:
|
if len(self.list) == 0:
|
||||||
return -2
|
return -2
|
||||||
|
|
||||||
if self.random==True:
|
if self.random==True:
|
||||||
self.curSong = random.randint(0,len(self.list)-1)
|
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]
|
song = self.list[self.curSong]
|
||||||
self.curSong += 1
|
|
||||||
if self.curSong > len(self.list):
|
|
||||||
self.curSong = 0
|
|
||||||
return song
|
return song
|
||||||
|
|
Loading…
Reference in New Issue