[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