Refactoring

This commit is contained in:
Alessio Treglia 2012-03-20 13:34:07 +01:00
parent 068451c2ed
commit 54ec74b33f
5 changed files with 102 additions and 66 deletions

View File

@ -22,7 +22,6 @@
import os
import sys
import signal
import gettext
import argparse
@ -35,6 +34,7 @@ from laditools import LadishProxy
from laditools import LadishStatusType
from laditools import LadishProxyError
from laditools import JackConfigProxy
from laditools import LadiApp
from gi.repository import Gtk
from gi.repository import Gdk
@ -42,9 +42,6 @@ from gi.repository import GObject
from laditools.gtk import find_data_file
sig_handler = signal.getsignal(signal.SIGTERM)
signal.signal(signal.SIGINT, sig_handler)
tooltips_active = True
(COLUMN_NAME,
@ -637,53 +634,81 @@ class jack_internal_params_configure_command(jack_params_configure_command):
def get_description(self):
return _('JACK "%s"') % self.name
def show_panels(*args, **kwargs):
if not 'modules' in kwargs:
return None
mods = kwargs['modules']
window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
vbox = Gtk.VBox()
hbox = Gtk.HBox()
notebook = Gtk.Notebook()
class LadiControlCenter(LadiApp):
vbox.pack_start(hbox, True, True, 12)
hbox.pack_start(notebook, True, True, 2)
window.set_title("LADI Settings")
window.set_icon_name('preferences-system')
window.set_resizable(True)
notebook.set_tab_pos(Gtk.PositionType.LEFT)
_appname = 'ladi-control-center'
_appname_long = _("LADI Control Center")
_appid = 'org.linuxaudio.ladi.controlcenter'
if 'select' in kwargs:
selected = kwargs['select']
else:
selected = None
def quit(self, *args, **kwargs):
self.window.destroy()
Gtk.main_quit()
page_count = 0
@property
def modules(self): return self._modules
for mod in mods:
treeview = mods[mod].run({})
container = Gtk.ScrolledWindow()
container.set_min_content_width(400)
container.set_min_content_height(400)
container.set_policy(hscrollbar_policy=Gtk.PolicyType.AUTOMATIC,
vscrollbar_policy=Gtk.PolicyType.AUTOMATIC)
container.add(treeview)
container.show_all()
#vbox.show_all()
try:
tab_label = mods[mod].get_window_title()
except:
tab_label = mods[mod].get_description()
notebook.append_page(container, Gtk.Label(tab_label))
if selected and selected == mod:
notebook.set_current_page(page_count)
page_count += 1
def __init__(self):
window.add(vbox)
window.show_all()
window.connect('destroy', Gtk.main_quit)
Gtk.main()
LadiApp.__init__(self)
# Init modules list
modules = {'engine' : jack_engine_params_configure_command(),
'params' : jack_driver_params_configure_command()}
for internal in jack.read_container(['internals']):
modules[str(internal)] = jack_internal_params_configure_command(internal)
self._modules = modules
def _activate(self, **kwargs):
if 'select' in kwargs:
selected = kwargs['select']
else:
selected = None
# Init UI
self.window = window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
vbox = Gtk.VBox()
hbox = Gtk.HBox()
notebook = Gtk.Notebook()
vbox.pack_start(hbox, True, True, 12)
hbox.pack_start(notebook, True, True, 2)
window.set_title("LADI Settings")
window.set_icon_name('preferences-system')
window.set_resizable(True)
notebook.set_tab_pos(Gtk.PositionType.LEFT)
page_count = 0
modules = self.modules
for mod in modules:
treeview = modules[mod].run({})
container = Gtk.ScrolledWindow()
container.set_min_content_width(400)
container.set_min_content_height(400)
container.set_policy(hscrollbar_policy=Gtk.PolicyType.AUTOMATIC,
vscrollbar_policy=Gtk.PolicyType.AUTOMATIC)
container.add(treeview)
container.show_all()
#vbox.show_all()
try:
tab_label = modules[mod].get_window_title()
except:
tab_label = modules[mod].get_description()
notebook.append_page(container, Gtk.Label(tab_label))
if selected and selected == mod:
notebook.set_current_page(page_count)
page_count += 1
window.add(vbox)
window.connect('destroy', self.quit)
self.connect_signals_quit()
def run(self, **kwargs):
self._activate(**kwargs)
self.window.show_all()
Gtk.main()
if __name__ == "__main__":
global jack
@ -695,22 +720,29 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(description=_('Convenient graphical interface for configuring JACK'),
epilog=_('This program is part of the LADITools suite.'))
parser.add_argument('-m', '--module', nargs=1, metavar='MODULE', help=_('select the module to configure'))
parser.add_argument('-l', '--list-modules', action='store_true', help=_('list available modules'))
parser.add_argument('--version', action='version', version="%(prog)s " + get_version_string())
parser.add_argument('-m',
'--module',
nargs=1,
metavar='MODULE',
help=_('select the module to configure'))
parser.add_argument('-l',
'--list-modules',
action='store_true',
help=_('list available modules'))
parser.add_argument('--version',
action='version',
version="%(prog)s " + get_version_string())
options = parser.parse_args()
modules = {'engine' : jack_engine_params_configure_command(),
'params' : jack_driver_params_configure_command()}
for internal in jack.read_container(['internals']):
modules[str(internal)] = jack_internal_params_configure_command(internal)
app = LadiControlCenter()
if options.list_modules and options.module:
sys.stderr.write(_("Conflicting options, type %s --help for a list of options.") % sys.argv[0] + '\n')
sys.stderr.flush()
sys.exit(2)
modules = app.modules
if options.list_modules:
sys.stderr.write(_("Available modules: "))
sys.stderr.write(' '.join(modules) + '\n')
@ -722,8 +754,8 @@ if __name__ == "__main__":
sys.stderr.flush()
sys.exit(2)
else:
show_panels(modules=modules, select=module)
app.run(select=module)
else:
show_panels(modules=modules)
app.run()
sys.exit(0)

View File

@ -19,7 +19,6 @@
import os
import sys
import time
import signal
import gettext
import argparse
@ -308,8 +307,7 @@ class LadiPlayer(LadiManagerGtk, LadiApp):
LadiManagerGtk.__init__(self, autostart)
# Handle signals
signal.signal(signal.SIGTERM, self.quit)
signal.signal(signal.SIGINT, self.quit)
self.connect_signals_quit()
# Build the UI
builder = Gtk.Builder()

View File

@ -24,7 +24,6 @@ import sys
import signal
from subprocess import Popen, PIPE
import pty
from signal import SIGTERM
import termios
import tty
import gettext
@ -106,9 +105,7 @@ class LadiSystemLog(LadiApp):
self.global_config = LadiConfiguration (self.appname, self._default_config)
self.param_dict = self.global_config.get_config_section (self.appname)
# Handle signals
signal.signal(signal.SIGTERM, self.quit)
signal.signal(signal.SIGINT, self.quit)
self.connect_signals_quit()
for log in self.log_files[:]:
log['logfile_path'] = self.param_dict[log['config_name']]

View File

@ -20,13 +20,9 @@
import os
import sys
import signal
import gettext
import argparse
sig_handler = signal.getsignal(signal.SIGTERM)
signal.signal(signal.SIGINT, sig_handler)
from laditools import _gettext_domain
gettext.install(_gettext_domain)
@ -89,6 +85,8 @@ class LadiStatusIcon (LadiMenu, LadiApp):
LadiMenu.__init__(self,
autostart,
quit = self.quit)
LadiApp.__init__(self)
self.connect_signals_quit()
def menu_activate(self, status_icon, button, activate_time, user_data=None):
menu = self.create_menu()

View File

@ -28,5 +28,16 @@ class LadiApp(object):
@property
def appid(self): return self._appid
def connect_signals_quit(self, signals=[], sig_handler=None):
if not signals:
signals = [signal.SIGTERM,
signal.SIGINT]
if not sig_handler:
sig_handler = self.quit
for sig in signals:
signal.signal(sig, sig_handler)
signal.signal(sig, sig_handler)
def run(self): raise NotImplementedError
def quit(self): raise NotImplementedError