orca r4244 - in branches/phase2/src/orca: . plugins



Author: wwalker
Date: Thu Sep 18 19:00:41 2008
New Revision: 4244
URL: http://svn.gnome.org/viewvc/orca?rev=4244&view=rev

Log:
More goofing with introspection.


Modified:
   branches/phase2/src/orca/default.py
   branches/phase2/src/orca/plugins/automatic.py
   branches/phase2/src/orca/script.py

Modified: branches/phase2/src/orca/default.py
==============================================================================
--- branches/phase2/src/orca/default.py	(original)
+++ branches/phase2/src/orca/default.py	Thu Sep 18 19:00:41 2008
@@ -321,104 +321,92 @@
 
     def _focusListener(self, event):
         """Called on AT-SPI focus events.
-
-        event: focus:
         """
         log.debug("_focusListener: %s" % str(event).replace("\n", " "))
+    _focusListener.events = ["focus:"]
 
     def _activeDescendantChangedListener(self, event):
         """Called on AT-SPI object:active-descendant-changed events.
-
-        event: object:active-descendant-changed
         """
         log.debug("_activeDescendantChangedListener: %s" \
                   % str(event).replace("\n", " "))
+    _activeDescendantChangedListener.events = \
+        ["object:active-descendant-changed"]
 
     def _mouseButtonListener(self, event):
         """Called on AT-SPI mouse:button events.
-
-        event: mouse:button
         """
         log.debug("_mouseButtonListener: %s" % str(event).replace("\n", " "))
+    _mouseButtonListener.events = ["mouse:button"]
 
     def _nameChangedListener(self, event):
         """Called on AT-SPI object:property-change:accessible-name events.
-
-        event: object:property-change:accessible-name
         """
         log.debug("_nameChangedListener: %s" % str(event).replace("\n", " "))
+    _nameChangedListener.events = ["object:property-change:accessible-name"]
 
     def _caretMovedListener(self, event):
         """Called on AT-SPI object:text-caret-moved events.
-
-        event: object:text-caret-moved
         """
         log.debug("_caretMovedListener: %s" % str(event).replace("\n", " "))
+    _caretMovedListener.events = ["object:text-caret-moved"]
 
     def _textDeletedListener(self, event):
         """Called on AT-SPI object:text-changed:delete events.
-
-        event: object:text-changed:delete
         """
         log.debug("_textDeletedListener: %s" % str(event).replace("\n", " "))
+    _textDeletedListener.events = ["object:text-changed:delete"]
 
     def _textInsertedListener(self, event):
         """Called on AT-SPI object:text-changed:insert events.
-       
-        event: object:text-changed:insert
         """
         log.debug("_textInsertedListener: %s" % str(event).replace("\n", " "))
+    _textInsertedListener.events = ["event: object:text-changed:insert"]
 
     def _textSelectionChangedListener(self, event):
         """Called on AT-SPI object:text-selection-changed events.
-
-        event: object:text-selection-changed
         """
         log.debug("_textSelectionChangedListener: %s" 
                   % str(event).replace("\n", " "))
+    _textSelectionChangedListener.events = ["object:text-selection-changed"]
 
     def _selectionChangedListener(self, event):
         """Called on AT-SPI object:selection-changed events.
-
-        event: object:selection-changed
         """
         log.debug("_selectionChangedListener: %s" % str(event).replace("\n", " "))
+    _selectionChangedListener.events = ["object:selection-changed"]
 
     def _linkSelectedListener(self, event):
         """Called on AT-SPI object:link-selected events.
-
-        event: object:link-selected
         """
         log.debug("_linkSelectedListener: %s" % str(event).replace("\n", " "))
+    _linkSelectedListener.events = ["object:link-selected"]
 
     def _stateChangedListener(self, event):
         """Called on AT-SPI object:state-changed events.
-
-        event: object:state-changed
         """
         log.debug("_stateChangedListener: %s" % str(event).replace("\n", " "))
+    _stateChangedListener.events = ["object:state-changed"]
 
     def _valueChangedListener(self, event):
         """Called on AT-SPI object:value-changed and
            object:property-change:accessible-value events.
-
-        event: object:value-changed, object:property-change:accessible-value
         """
         log.debug("_valueChangedListener: %s" % str(event).replace("\n", " "))
+    _valueChangedListener.events = \
+        ["object:value-changed", "object:property-change:accessible-value"]
 
     def _windowActivateListener(self, event):
         """Called on AT-SPI window:activate events.
-
-        event: window:activate
         """
         log.debug("_windowActivateListener: %s" % str(event).replace("\n", " "))
+    _windowActivateListener.events = ["window:activate"]
 
-    def _eindowDeactivatedListener(self, event):
+    def _windowDeactivatedListener(self, event):
         """Called on AT-SPI window:deactivate events.
-
-        event: window:deactivate
         """
         log.debug("_windowDeactivateListener: %s" % str(event).replace("\n", " "))
+    _windowDeactivatedListener.events = ["window:deactivate"]
 
     def _noOpListener(self, event):
         """Just here to capture events.

Modified: branches/phase2/src/orca/plugins/automatic.py
==============================================================================
--- branches/phase2/src/orca/plugins/automatic.py	(original)
+++ branches/phase2/src/orca/plugins/automatic.py	Thu Sep 18 19:00:41 2008
@@ -27,6 +27,7 @@
 import logging
 log = logging.getLogger('orca.plugins.automatic')
 
+import orca.input_event as input_event
 import orca.plugin as plugin
 
 try:
@@ -49,23 +50,24 @@
         - scriptSettings: the Settings for the script
         """
         plugin.Plugin.__init__(self, owner, scriptSettings)
-        self._introspectHandlers()
 
     def floopyDooHandler(self, inputEvent=None, modifiers=None):
         """The floopy doo handler.
-
-        keyboard: "a", input_event.defaultModifierMask, input_event.ORCA_CTRL_ALT_MODIFIER_MASK, 1
-        description: _("Floopy doo.")
         """
         log.debug("floopyDooHandler: %s" % inputEvent)
+    floopyDooHandler.keyboardBindings = [
+        ["a", input_event.defaultModifierMask, input_event.ORCA_CTRL_ALT_MODIFIER_MASK, 1]
+    ]
+    floopyDooHandler.description = _("Floopy doo.")
 
     def floopyDeeHandler(self, inputEvent=None, modifiers=None):
         """The floopy dee handler.
-
-        keyboard: "b", input_event.defaultModifierMask, input_event.ORCA_CTRL_ALT_MODIFIER_MASK, 1
-        description: _("Floopy dee.")
         """
         log.debug("floopyDeeHandler: %s" % inputEvent)
+    floopyDeeHandler.keyboardBindings = [
+        ["b", input_event.defaultModifierMask, input_event.ORCA_CTRL_ALT_MODIFIER_MASK, 1]
+    ]
+    floopyDeeHandler.description = _("Floopy dee.")
 
 if __name__ == "__main__":
     logging.basicConfig(format="%(name)s %(message)s")

Modified: branches/phase2/src/orca/script.py
==============================================================================
--- branches/phase2/src/orca/script.py	(original)
+++ branches/phase2/src/orca/script.py	Thu Sep 18 19:00:41 2008
@@ -84,6 +84,7 @@
             self._createKeyboardBindings(self._inputEventHandlers)
         self._brailleBindings = \
             self._createBrailleBindings(self._inputEventHandlers)
+        self._introspectInputEventBindings()
 
         # Load custom settings and also give the module a chance to
         # override our keyboard and braille bindings.
@@ -163,18 +164,6 @@
         """
         log.info("NEW SCRIPT: %s" % self)
 
-    def _parseObjectEventListenerDocString(self, docstring):
-        """Looks for an 'event:' line in the given docstring and
-        returns it if it exists."""
-        import re
-        EVENT = re.compile(r'(\sevent:\s*)(.*)\n')
-        match = EVENT.search(docstring)
-        try:
-            event = match.group(2).strip()
-        except:
-            event = None
-        return event
-
     def _introspectObjectEventListeners(self):
         """Find the AT-SPI listeners based upon their method name.
         """
@@ -186,60 +175,18 @@
             if symbol.endswith("Listener"):
                 method = getattr(self, symbol).__get__(self, self.__class__)
                 if callable(method):
-                    eventString = \
-                        self._parseObjectEventListenerDocString(method.__doc__)
                     try:
-                        events = eventString.split()
+                        events = method.events
                     except:
                         events = []
                     for event in events:
-                        listeners[event.strip(', ')] = method
+                        listeners[event] = method
         return listeners
 
-    def _parseHandlerDocString(self, docstring):
-        """Looks for 'keyboard:', 'braille:', and 'description:' lines in
-        the given docstring and returns them if they exist."""
-        import re
-        KEYBOARD = re.compile(r'(\skeyboard:\s*)(.*)\n')
-        BRAILLE = re.compile(r'(\sbraille:\s*)(.*)\n')
-        DESCRIPTION = re.compile(r'(\sdescription:\s*)(.*)\n')
-        match = KEYBOARD.search(docstring)
-        try:
-            keyboard = match.group(2).strip()
-        except:
-            keyboard = None
-
-        match = BRAILLE.search(docstring)
-        try:
-            braille = match.group(2).strip()
-        except:
-            braille = None
-
-        match = DESCRIPTION.search(docstring)
-        try:
-            description = match.group(2).strip()
-        except:
-            description = None
-
-        # TODO: need to allow for multiple bindings.
-        # TODO: need allow things to cross lines.
-        # TODO: possibly eval things here?
-        #
-        return (keyboard, braille, description)
-
-    def _introspectHandlers(self):
+    def _introspectInputEventBindings(self):
         """TODO: EXPERIMENTAL method to find the input event handlers for this
-        object based upon their method name.  The biggest issue is getting
-        the description to be marked for translation so intltool will pick
-        it up.
+        object based upon their method name.
         """
-        import input_event
-        from orca_i18n import _
-        try:
-            import brlapi
-        except:
-            log.exception("Not using braille bindings because of this exception:")
-
         # Find all the Handler methods and save them based upon their name
         # and their unbound (i.e., requires the plugin to be passed as the
         # first argument) form.
@@ -253,30 +200,27 @@
 
         # Create the handlers and bindings.
         #
-        # TODO: add gratuitous try/except clauses.
-        #
         for symbol, method in methodList:
-            (keyboard, braille, description) = \
-                self._parseHandlerDocString(method.__doc__)
-            self._inputEventHandlers[symbol] = input_bindings.Handler(
-                method, description)
-            if keyboard:
-                [keysym, mask, modifiers, repeat] = keyboard.split()
-                binding = input_bindings.KeyboardBinding(
-                    eval(keysym.strip(', ')), 
-                    eval(mask.strip(', ')),
-                    eval(modifiers.strip(', ')),
-                    symbol,
-                    eval(repeat))
-                self._keyboardBindings.append(binding)
-            if braille:
-                [cmd, mask, modifiers, repeat] = keyboard.split()
-                self._brailleBindings.append(input_bindings.BrailleBinding(
-                        eval(keysym.strip(',')), 
-                        eval(mask.strip(',')),
-                        eval(modifiers.strip(',')),
-                        symbol,
-                        eval(repeat)))
+            try:
+                self._inputEventHandlers[symbol] = input_bindings.Handler(
+                    method, method.description)
+            except:
+                log.warning("No description for %s.  Not registering." % symbol)
+                continue
+            try:
+                for keysym, mask, modifiers, clickCount in method.keyboardBindings:
+                    self._keyboardBindings.append(
+                        input_bindings.KeyboardBinding(
+                            keysym, mask, modifiers, symbol, clickCount))
+            except:
+                pass
+            try:
+                for command, mask, modifiers, clickCount in method.brailleBindings:
+                    self._brailleBindings.append(
+                        input_bindings.BrailleBinding(
+                            command, mask, modifiers, symbol, clickCount))
+            except:
+                pass
 
     def __str__(self):
         """Returns a human readable representation of the script.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]