You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by tv...@apache.org on 2009/10/31 03:26:01 UTC

svn commit: r831509 - in /incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk: EventLogger.java EventLoggerSkin.java

Author: tvolkert
Date: Sat Oct 31 02:26:01 2009
New Revision: 831509

URL: http://svn.apache.org/viewvc?rev=831509&view=rev
Log:
Fixes to event logger tool

Modified:
    incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLogger.java
    incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLoggerSkin.java

Modified: incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLogger.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLogger.java?rev=831509&r1=831508&r2=831509&view=diff
==============================================================================
--- incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLogger.java (original)
+++ incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLogger.java Sat Oct 31 02:26:01 2009
@@ -137,14 +137,17 @@
         Component previousSource = this.source;
 
         if (source != previousSource) {
-            this.source = source;
-
             if (previousSource != null) {
-                unregisterEventListeners(previousSource);
+                unregisterEventListeners();
             }
 
+            this.source = source;
+
+            declaredEvents.clear();
+            includeEvents.clear();
+
             if (source != null) {
-                registerEventListeners(source);
+                registerEventListeners();
             }
 
             eventLoggerListeners.sourceChanged(this, previousSource);
@@ -177,9 +180,7 @@
         return includeEvents.contains(event);
     }
 
-    private void registerEventListeners(Component source) {
-        declaredEvents.clear();
-
+    private void registerEventListeners() {
         Method[] methods = source.getClass().getMethods();
 
         for (int i = 0; i < methods.length; i++) {
@@ -244,10 +245,53 @@
         }
     }
 
-    private void unregisterEventListeners(Component source) {
-        declaredEvents.clear();
+    private void unregisterEventListeners() {
+        Method[] methods = source.getClass().getMethods();
+
+        for (int i = 0; i < methods.length; i++) {
+            Method method = methods[i];
+
+            if (ListenerList.class.isAssignableFrom(method.getReturnType())
+                && (method.getModifiers() & Modifier.STATIC) == 0) {
+                ParameterizedType genericType = (ParameterizedType)method.getGenericReturnType();
+                Type[] typeArguments = genericType.getActualTypeArguments();
+
+                if (typeArguments.length == 1) {
+                    Class<?> listenerInterface = (Class<?>)typeArguments[0];
 
-        // TODO
+                    // Get the listener list
+                    Object listenerList;
+                    try {
+                        listenerList = method.invoke(source);
+                    } catch (InvocationTargetException exception) {
+                        throw new RuntimeException(exception);
+                    } catch (IllegalAccessException exception) {
+                        throw new RuntimeException(exception);
+                    }
+
+                    // Get the listener for this interface
+                    Object listener = eventListenerProxies.get(listenerInterface);
+
+                    // Remove the listener
+                    Class<?> listenerListClass = listenerList.getClass();
+                    Method removeMethod;
+                    try {
+                        removeMethod = listenerListClass.getMethod("remove",
+                            new Class<?>[] {Object.class});
+                    } catch (NoSuchMethodException exception) {
+                        throw new RuntimeException(exception);
+                    }
+
+                    try {
+                        removeMethod.invoke(listenerList, new Object[] {listener});
+                    } catch (IllegalAccessException exception) {
+                        throw new RuntimeException(exception);
+                    } catch (InvocationTargetException exception) {
+                        throw new RuntimeException(exception);
+                    }
+                }
+            }
+        }
     }
 
     public ListenerList<EventLoggerListener> getEventLoggerListeners() {

Modified: incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLoggerSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLoggerSkin.java?rev=831509&r1=831508&r2=831509&view=diff
==============================================================================
--- incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLoggerSkin.java (original)
+++ incubator/pivot/trunk/tools/src/org/apache/pivot/tools/wtk/EventLoggerSkin.java Sat Oct 31 02:26:01 2009
@@ -66,6 +66,8 @@
     @WTKX private TreeView declaredEventsTreeView = null;
     @WTKX private TableView firedEventsTableView = null;
 
+    private boolean updating = false;
+
     private static TreeNodeComparator treeNodeComparator = new TreeNodeComparator();
 
     @Override
@@ -99,8 +101,6 @@
         wtkxSerializer.bind(this, EventLoggerSkin.class);
 
         declaredEventsTreeView.getTreeViewNodeStateListeners().add(new TreeViewNodeStateListener() {
-            private boolean updating = false;
-
             @Override
             public void nodeCheckStateChanged(TreeView treeView, Path path,
                 TreeView.NodeCheckState previousCheckState) {
@@ -231,17 +231,29 @@
 
         ArrayList<TreeNode> treeData = new ArrayList<TreeNode>(treeNodeComparator);
 
-        for (Class<?> listenerInterface : buckets) {
-            TreeBranch treeBranch = new TreeBranch(listenerInterface.getSimpleName());
-            treeBranch.setComparator(treeNodeComparator);
-            treeData.add(treeBranch);
+        updating = true;
+        try {
+            for (Class<?> listenerInterface : buckets) {
+                TreeBranch treeBranch = new TreeBranch(listenerInterface.getSimpleName());
+                treeBranch.setComparator(treeNodeComparator);
+                treeData.add(treeBranch);
+
+                for (Method event : buckets.get(listenerInterface)) {
+                    treeBranch.add(new EventNode(event));
+                    eventLogger.includeEvent(event);
+                }
+            }
+
+            declaredEventsTreeView.setTreeData(treeData);
 
-            for (Method event : buckets.get(listenerInterface)) {
-                treeBranch.add(new EventNode(event));
+            Sequence.Tree.ItemIterator<TreeNode> iter = Sequence.Tree.depthFirstIterator(treeData);
+            while (iter.hasNext()) {
+                iter.next();
+                declaredEventsTreeView.setNodeChecked(iter.getPath(), true);
             }
+        } finally {
+            updating = false;
         }
-
-        declaredEventsTreeView.setTreeData(treeData);
     }
 
     @Override