[POS-commit] r5388 - stoqlib/trunk/stoqlib/gui

Johan Dahlin jdahlin at async.com.br
Tue Nov 28 15:31:58 BRST 2006


Author: jdahlin
Date: Tue Nov 28 15:31:57 2006
New Revision: 5388

Added:
   stoqlib/trunk/stoqlib/gui/introspection.py
   stoqlib/trunk/stoqlib/gui/keyboardhandler.py

Log:
Add introspection and global keyboard handling modules

Added: stoqlib/trunk/stoqlib/gui/introspection.py
==============================================================================
--- (empty file)
+++ stoqlib/trunk/stoqlib/gui/introspection.py	Tue Nov 28 15:31:57 2006
@@ -0,0 +1,51 @@
+# -*- Mode: Python; coding: iso-8859-1 -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+##
+## Copyright (C) 2006 Async Open Source <http://www.async.com.br>
+## All rights reserved
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., or visit: http://www.gnu.org/.
+##
+##  Author(s):      Johan Dahlin  <jdahlin at async.com.br>
+##
+
+import gtk
+
+def _foreach_child(widget, cb, lvl=0):
+    cb(widget, lvl)
+    if isinstance(widget, gtk.Container):
+        for child in widget.get_children():
+            _foreach_child(child, cb, lvl+1)
+
+def introspect_slaves(window):
+    """
+    Traverses all the children of window and prints out all the
+    kiwi slaves.
+    @param window: a gtk.Window subclass
+    """
+    print 'Analyzing', window
+    def _printone(slave, lvl=0):
+        filename = slave.gladefile + '.glade'
+        print ' ' * lvl, slave.__class__.__name__, filename
+
+    def _parse(widget, lvl):
+        if isinstance(widget, gtk.EventBox):
+            slave = widget.get_data('kiwi::slave')
+            if slave is not None:
+                _printone(slave, lvl)
+
+    _foreach_child(window, _parse)
+

Added: stoqlib/trunk/stoqlib/gui/keyboardhandler.py
==============================================================================
--- (empty file)
+++ stoqlib/trunk/stoqlib/gui/keyboardhandler.py	Tue Nov 28 15:31:57 2006
@@ -0,0 +1,65 @@
+# -*- Mode: Python; coding: iso-8859-1 -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+##
+## Copyright (C) 2006 Async Open Source <http://www.async.com.br>
+## All rights reserved
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., or visit: http://www.gnu.org/.
+##
+##  Author(s):      Johan Dahlin  <jdahlin at async.com.br>
+##
+
+"""Global keyboard handling.
+
+This module allows you to install a callback which will be called
+for all toplevel windows
+"""
+
+import gtk
+from kiwi.ui.test.recorder import add_emission_hook
+
+class _KeyboardHandler(object):
+    def __init__(self):
+        self._hooks = {}
+
+    def _on_window_key_press_event(self, window, event):
+        if isinstance(window, gtk.Window):
+            callback = self._hooks.get(event.keyval, None)
+            if callback:
+                callback(window)
+        return True
+
+    def add_hook(self, keyval, callback):
+        # Nothing to do if we can't add emission hooks
+        if not add_emission_hook:
+            return
+
+        if not self._hooks:
+            add_emission_hook(gtk.Window, 'key-press-event',
+                              self._on_window_key_press_event)
+
+        self._hooks[keyval] = callback
+
+_handler = _KeyboardHandler()
+
+def install_global_keyhandler(keyval, callback):
+    """
+    @param keyval:
+    @param callback:
+    """
+    global _handler
+
+    _handler.add_hook(keyval, callback)


More information about the POS-commit mailing list