From c8b5ab290e1bd96eb6fadac1708a2f14b7da4d70 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Sun, 30 Sep 2007 10:42:48 +0000 Subject: More work on the new console --- diff --git a/shell/console/__init__.py b/shell/console/__init__.py new file mode 100644 index 0000000..d6553b7 --- /dev/null +++ b/shell/console/__init__.py @@ -0,0 +1,20 @@ +from console import Console + +console = None + +def show(): + global console + if not console: + console = Console() + console.show() + +def hide(): + if console: + console.hide() + +def toggle_visibility(): + if not console or not console.props.visible: + show() + else: + hide() + diff --git a/shell/console/console.py b/shell/console/console.py new file mode 100644 index 0000000..1bdd5ce --- /dev/null +++ b/shell/console/console.py @@ -0,0 +1,45 @@ +import os + +import gtk +import hippo + +class Console(gtk.Window): + def __init__(self): + gtk.Window.__init__(self) + + self.set_default_size(gtk.gdk.screen_width() * 3 / 4, + gtk.gdk.screen_height() * 3 / 4) + self.set_decorated(False) + self.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.connect('realize', self._realize_cb) + + canvas = hippo.Canvas() + self.add(canvas) + canvas.show() + + box = hippo.CanvasBox(padding=20, border_color=0x000000FF, + border=3) + canvas.set_root(box) + + self.registry = Registry() + for module in self.registry.view_modules: + box.append(module.create_view('shell'), hippo.PACK_EXPAND) + + def _realize_cb(self, widget): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + +class Registry(object): + def __init__(self): + self.view_modules = [] + + base_extensions = [ 'console.logviewer' ] + for extension in base_extensions: + self.load_extension(extension) + + def load_extension(self, name): + module = __import__(name) + components = name.split('.') + for component in components[1:]: + module = getattr(module, component) + + self.view_modules.append(module) diff --git a/shell/console/logviewer.py b/shell/console/logviewer.py index 92b7c85..102552b 100644 --- a/shell/console/logviewer.py +++ b/shell/console/logviewer.py @@ -1,9 +1,12 @@ +import os + import gtk import hippo import gnomevfs from louie import dispatcher from sugar.graphics.roundbox import CanvasRoundBox +from sugar import env class LogEntry(object): def __init__(self, text): @@ -39,20 +42,20 @@ class LogModel(list): if event == gnomevfs.MONITOR_EVENT_CHANGED: self.read_lines() -class LogView(hippo.Canvas): - def __init__(self, model): - hippo.Canvas.__init__(self) +class LogView(hippo.CanvasBox): + def __init__(self, path): + hippo.CanvasBox.__init__(self) - self.model = model + self.model = LogModel(path) scrollbars = hippo.CanvasScrollbars() scrollbars.set_policy(hippo.ORIENTATION_HORIZONTAL, hippo.SCROLLBAR_NEVER) widget = scrollbars.props.widget widget.props.vadjustment.connect('changed', self._vadj_changed_cb) - self.set_root(scrollbars) + self.append(scrollbars, hippo.PACK_EXPAND) - self.box = hippo.CanvasBox(spacing=5, padding=20) + self.box = hippo.CanvasBox(spacing=5) scrollbars.set_root(self.box) for entry_model in self.model: @@ -74,18 +77,9 @@ class LogView(hippo.Canvas): def _vadj_changed_cb(self, adj): adj.props.value = adj.upper - adj.page_size -if __name__ == "__main__": - import sys - - window = gtk.Window() - window.set_default_size(800, 600) - - model = LogModel(sys.argv[1]) - - log_view = LogView(model) - window.add(log_view) - log_view.show() - - window.show() +def get_tags(): + return [ 'log' ] - gtk.main() +def create_view(context): + path = os.path.join(env.get_profile_path(), 'logs', context + '.log') + return LogView(path) diff --git a/shell/view/keyhandler.py b/shell/view/keyhandler.py index a463a75..373bceb 100644 --- a/shell/view/keyhandler.py +++ b/shell/view/keyhandler.py @@ -25,6 +25,7 @@ import gtk from hardware import hardwaremanager from model.shellmodel import ShellModel from sugar._sugaruiext import KeyGrabber +import console _BRIGHTNESS_STEP = 2 _VOLUME_STEP = 10 @@ -47,6 +48,7 @@ _actions_table = { '1' : 'screenshot', 'equal' : 'console', '0' : 'console', + '9' : 'new_console', 'f' : 'frame', '0x93' : 'frame', 'o' : 'overlay', @@ -145,6 +147,9 @@ class KeyHandler(object): def handle_console(self): gobject.idle_add(self._toggle_console_visibility_cb) + def handle_new_console(self): + console.toggle_visibility() + def handle_frame(self): self._shell.get_frame().notify_key_press() @@ -217,5 +222,5 @@ class KeyHandler(object): bus = dbus.SessionBus() proxy = bus.get_object('org.laptop.sugar.Console', '/org/laptop/sugar/Console') - console = dbus.Interface(proxy, 'org.laptop.sugar.Console') - console.ToggleVisibility() + console_service = dbus.Interface(proxy, 'org.laptop.sugar.Console') + console_service.ToggleVisibility() -- cgit v0.9.1