Hi Bob, et al.,

In my last commit, I added a property change listener to a Fig - see below.

In the code of GEF, I found some warnings that the property change listeners are limited in number:

In the Fig class:
    *  Since most Fig's will never have any listeners, and I want Figs
    *  to be fairly light-weight objects, listeners are kept in a
    *  global Hashtable, keyed by Fig.

And in the Globals class:
    *  A global dictionary of PropertyChangeListeners for Figs.  Most
    *  Figs will not have any listeners at any given moment, so I did
    *  not want to allocate an instance variable to hold
    *  listeners. Instead I use this global Hashtable with Figs ans
    *  keys and arrays of up to 4 listeners as values.

Now my question:
Is it true that we are limited to 4 listeners? Are we near this limit already?
Why this limit - I do not understand the reasoning.
Would it not be better to remove this limit?

Regards,
Michiel


----- Original Message ----- From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, July 31, 2007 11:00 PM
Subject: svn commit: r13195 - trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java


Author: mvw
Date: 2007-07-31 14:00:01-0700
New Revision: 13195

Modified:
  trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java

Log:
Make the path-visibility checkbox on the Presentation panel update when the value is changed by the pop-up menu.

Modified: trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java?view=diff&rev=13195&p1=trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java&p2=trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java&r1=13194&r2=13195
==============================================================================
--- trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java (original) +++ trunk/src_new/org/argouml/ui/StylePanelFigNodeModelElement.java 2007-07-31 14:00:01-0700
@@ -29,6 +29,8 @@
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
@@ -36,16 +38,18 @@

import org.argouml.i18n.Translator;
import org.argouml.uml.diagram.PathContainer;
+import org.tigris.gef.presentation.Fig;
import org.tigris.gef.ui.ColorRenderer;

/**
* Stylepanel which provides base style information for modelelements, e.g.
- * shadow width.
+ * shadow width, the path checkbox.
 *
 */
public class StylePanelFigNodeModelElement
    extends StylePanelFig
-    implements ItemListener, FocusListener, KeyListener {
+    implements ItemListener, FocusListener, KeyListener,
+    PropertyChangeListener {

    /**
     * Flag to indicate that a refresh is going on.
@@ -94,6 +98,19 @@
        displayPane.add(cb);
    }

+    @Override
+    public void setTarget(Object t) {
+        Fig oldTarget = getPanelTarget();
+        if (oldTarget != null) {
+            oldTarget.removePropertyChangeListener(this);
+        }
+        super.setTarget(t);
+        Fig newTarget = getPanelTarget();
+        if (newTarget != null) {
+            newTarget.addPropertyChangeListener(this);
+        }
+    }
+
    /*
     * @see org.argouml.ui.TabTarget#refresh()
     */
@@ -128,4 +145,28 @@
        }
    }

+    /**
+     * This function is called when the Fig property is changed from
+     * outside this Panel, e.g. when the Fig is relocated or when one of
+     * its properties change. <p>
+     *
+     * We currently only need to react on the property
+     * that indicates that the "pathVisible" is changed. See
+     * the FigNodeModelElement for when this event is triggered. <p>
+     *
+     * When the user toggles the visibility of the path in
+     * the Fig's pop-up menu, then this function
+     * updates the Presentation panel checkbox.
+     *
+     * @param evt the event
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+     */
+    public void propertyChange(PropertyChangeEvent evt) {
+        if ("pathVisible".equals(evt.getPropertyName())) {
+            refreshTransaction = true;
+            pathCheckBox.setSelected((Boolean) evt.getNewValue());
+            refreshTransaction = false;
+        }
+    }
+
} /* end class StylePanelFigNodeModelElement */

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.11.0/927 - Release Date: 30/07/2007 17:02


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to