Play / Pause / Close tabs

I am using tabs in the info pane to act as buttons when the pane is
expanded.  Eventually I want to move this over to an action widget, but
pygtk doesn't support action widgets for notebooks yet.  Hopefully this
will be fixed by the next release.
This commit is contained in:
Bryan Schumaker 2010-09-13 19:32:13 -04:00
parent 4a5085d973
commit 6609e48d5c
7 changed files with 133 additions and 14 deletions

View File

@ -3,11 +3,11 @@
__all__ = ["collection"] __all__ = ["collection"]
import libsaria import libsaria
#import tagpy import tagpy
call = libsaria.event.call call = libsaria.event.call
exists = libsaria.path.exists exists = libsaria.path.exists
expand = libsaria.path.expand expand = libsaria.path.expand
#FileRef = tagpy.FileRef FileRef = tagpy.FileRef
LIBRARY = 0 LIBRARY = 0
PLAYLIST = 1 PLAYLIST = 1

View File

@ -38,6 +38,8 @@ def universal_open(file):
global plugin global plugin
split = file.rsplit('.', 1) split = file.rsplit('.', 1)
ext = split[len(split)-1] ext = split[len(split)-1]
if path.is_dir(file):
print "Is a dir! Scan it!"
# Install and start a plugin # Install and start a plugin
if ext == "py": if ext == "py":
if plugin == None: if plugin == None:

View File

@ -3,6 +3,7 @@
import os import os
exists = os.path.exists exists = os.path.exists
is_dir = os.path.isdir
expand = os.path.expanduser expand = os.path.expanduser
splitext = os.path.splitext splitext = os.path.splitext
join = os.path.join join = os.path.join

View File

@ -16,6 +16,7 @@ class Button(gtk.Button):
self.click_id = self.connect("clicked", self.clicked) self.click_id = self.connect("clicked", self.clicked)
if show == True: if show == True:
self.show() self.show()
self.set_alignment(0,0)
def clicked(self, button): def clicked(self, button):
self.func() self.func()
@ -54,3 +55,18 @@ class OpenButton(Button):
from ocarina import fsselect from ocarina import fsselect
fsselect.run_chooser2(LS.data.universal_open) fsselect.run_chooser2(LS.data.universal_open)
print "OpenButton clicked" print "OpenButton clicked"
class UpButton(Button):
def __init__(self, callback):
Button.__init__(self, gtk.STOCK_ADD)
self.callback = callback
def clicked(self, button):
self.callback()
class DownButton(Button):
def __init__(self, callback):
Button.__init__(self, gtk.STOCK_REMOVE)
self.callback = callback
def clicked(self, button):
self.callback()

View File

@ -39,8 +39,9 @@ def make_chooser2(title, callback):
size = close_button.size_request() size = close_button.size_request()
open_button.set_size_request(size[0], size[1]) open_button.set_size_request(size[0], size[1])
close_button.connect("clicked", hide_chooser) chooser_widget.connect("file-activated", select_path, callback)
open_button.connect("clicked", select_path, callback) open_button.connect("clicked", select_path, callback)
close_button.connect("clicked", hide_chooser)
chooser_window.add(chooser_box) chooser_window.add(chooser_box)
chooser_window.resize(800, 600) chooser_window.resize(800, 600)
@ -50,19 +51,18 @@ def hide_chooser(button):
global chooser_window global chooser_window
chooser_window.hide() chooser_window.hide()
def select_path(button, callback): def select_path(widget, callback):
global chooser_widget global chooser_widget
global chooser_window global chooser_window
chooser_window.hide() chooser_window.hide()
callback( chooser_widget.get_uri() ) uri = chooser_widget.get_uri()
if uri[:7] == "file://":
uri = uri[7:]
callback(uri)
def run_chooser2(callback): def run_chooser2(callback):
make_chooser2("title", callback) make_chooser2("title", callback)
def response(*args):
print "here?"
print args
def run_chooser(chooser): def run_chooser(chooser):
file = None file = None

View File

@ -40,7 +40,7 @@ class FilterBar(Bar):
class InfoBar(Bar): class InfoBar(Bar):
def __init__(self): def __init__(self, up_button):
Bar.__init__(self, True) Bar.__init__(self, True)
global button global button
global libsaria global libsaria
@ -50,6 +50,7 @@ class InfoBar(Bar):
self.pack(self.title, True, True) self.pack(self.title, True, True)
self.pack(button.PlayButton()) self.pack(button.PlayButton())
self.pack(button.PauseButton()) self.pack(button.PauseButton())
self.pack(button.UpButton(up_button))
libsaria.event.invite("POSTLOAD", self.change_title) libsaria.event.invite("POSTLOAD", self.change_title)
@ -60,21 +61,121 @@ class InfoBar(Bar):
self.title.set_text("%s by %s" % (title,artist)) self.title.set_text("%s by %s" % (title,artist))
class ControlTab(gtk.Label):
def __init__(self, stock, func):
gtk.Label.__init__(self)
self.img = gtk.Image()
self.img.set_from_stock(stock, gtk.ICON_SIZE_MENU)
self.set_text("You should never see this text")
self.show()
self.img.show()
self.img.connect("button_press_event", self.clicked)
self.func = func
def is_control_tab(self):
return True
def hide(self, arg=None):
gtk.Label.hide(self)
def show(self, arg=None):
gtk.Label.show(self)
def clicked(self, *args):
print args
class CloseTab(ControlTab):
def __init__(self, close):
ControlTab.__init__(self,gtk.STOCK_REMOVE, close)
class PlayTab(ControlTab):
def __init__(self):
ControlTab.__init__(self, gtk.STOCK_MEDIA_PLAY, self.play)
libsaria.event.invite("POSTPLAY", self.hide)
libsaria.event.invite("POSTPAUSE", self.show)
libsaria.event.invite("POSTSTOP", self.show)
def play(self):
libsaria.music.play()
class PauseTab(ControlTab):
def __init__(self):
ControlTab.__init__(self, gtk.STOCK_MEDIA_PAUSE, self.pause)
libsaria.event.invite("POSTPLAY", self.show)
libsaria.event.invite("POSTPAUSE", self.hide)
libsaria.event.invite("POSTSTOP", self.hide)
self.hide()
def pause(self):
libsaria.music.pause()
class InfoTab(gtk.Notebook):
def __init__(self, down_button):
gtk.Notebook.__init__(self)
self.add_control_tab(CloseTab(down_button))
self.add_control_tab(PlayTab())
self.add_control_tab(PauseTab())
self.down_button = down_button
self.cur_page = 0
self.connect("switch_page", self.switched_pages)
def add_control_tab(self, contents):
self.append_page(contents, contents.img)
self.set_tab_label_packing(contents, False, False, gtk.PACK_END)
def add_controls(self, controls):
self.append_page(controls.page, controls)
self.set_tab_label_packing(controls.page, False, False, gtk.PACK_END)
def add_page(self, content, label):
self.prepend_page(content, label)
self.set_current_page(0)
def switched_pages(self, notebook, page, page_num):
new_page = self.get_nth_page(page_num)
if isinstance(new_page, ControlTab):
new_page.func()
self.stop_emission("switch-page")
else:
self.cur_page = page_num
return True
class TwoWayPane(InfoBar):
def __init__(self):
InfoBar.__init__(self, self.up_button)
self.bar = self.contents
self.tab = InfoTab(self.down_button)
self.pack_start(self.tab)
def up_button(self):
self.bar.hide()
self.tab.show()
def down_button(self):
self.bar.show()
self.tab.hide()
def init(): def init():
global info global info
global filter global filter
global button global button
import button import button
info = InfoBar() info = TwoWayPane()
filter = FilterBar() filter = FilterBar()
add_info_page("Test", gtk.Label("test label!"))
def get_info(): def get_info():
global info global info
return info return info
def get_filter(): def get_filter():
global filter global filter
return filter return filter
def add_info_page(label, content):
global info
if label.__class__ == str:
label = gtk.Label(label)
label.show()
content.show()
info.tab.add_page(content, label)

View File

@ -6,7 +6,6 @@ libsaria = ocarina.libsaria
gtk = ocarina.gtk gtk = ocarina.gtk
Label = gtk.Label Label = gtk.Label
tabs = None tabs = None
contents = dict() contents = dict()
cur_page = 0 cur_page = 0