You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ks...@apache.org on 2012/04/30 14:01:13 UTC

svn commit: r1332169 - in /cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne: modeler/undo/JComboBoxUndoListener.java swing/ComboSelectionBinding.java

Author: kseniak
Date: Mon Apr 30 12:01:12 2012
New Revision: 1332169

URL: http://svn.apache.org/viewvc?rev=1332169&view=rev
Log:
Cayenne Internal(CAY-3) fixed excessive events added to undo list

Modified:
    cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JComboBoxUndoListener.java
    cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ComboSelectionBinding.java

Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JComboBoxUndoListener.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JComboBoxUndoListener.java?rev=1332169&r1=1332168&r2=1332169&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JComboBoxUndoListener.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JComboBoxUndoListener.java Mon Apr 30 12:01:12 2012
@@ -29,6 +29,7 @@ import org.apache.cayenne.modeler.Applic
 public class JComboBoxUndoListener implements ItemListener {
 
     private Object deselectedItem;
+    private boolean isUserAction = true;
 
     public void itemStateChanged(ItemEvent e) {
         int stateChange = e.getStateChange();
@@ -38,16 +39,22 @@ public class JComboBoxUndoListener imple
                 deselectedItem = e.getItem();
                 break;
             case ItemEvent.SELECTED:
-
-                UndoManager undoManager = Application.getInstance().getUndoManager();
-                undoManager.addEdit(new JComboBoxUndoableEdit(
-                        (JComboBox) e.getSource(),
-                        deselectedItem,
-                        e.getItem(),
-                        this));
-
+                // don't add event to undo list, if it was just the default setting
+                if (isUserAction) {
+                    UndoManager undoManager = Application.getInstance().getUndoManager();
+                    undoManager.addEdit(new JComboBoxUndoableEdit((JComboBox) e
+                            .getSource(), deselectedItem, e.getItem(), this));
+                    
+                }
+                //set back to default value after the selecting new option
+                isUserAction = true;
                 break;
+
         }
 
     }
+
+    public void setIsUserAction(boolean isUserAction) {
+        this.isUserAction = isUserAction;
+    }
 }

Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ComboSelectionBinding.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ComboSelectionBinding.java?rev=1332169&r1=1332168&r2=1332169&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ComboSelectionBinding.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ComboSelectionBinding.java Mon Apr 30 12:01:12 2012
@@ -23,11 +23,13 @@ import java.awt.Color;
 import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.ItemListener;
 
 import javax.swing.JComboBox;
 import javax.swing.JComponent;
 
 import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
+import org.apache.cayenne.modeler.undo.JComboBoxUndoListener;
 import org.apache.cayenne.validation.ValidationException;
 
 /**
@@ -90,6 +92,13 @@ public class ComboSelectionBinding exten
         modelUpdateDisabled = true;
         try {
             clear();
+            ItemListener[] listeners = comboBox.getItemListeners();
+            for (ItemListener itemListener : listeners) {
+                if (itemListener instanceof JComboBoxUndoListener) {
+                    //in order not to add event to undo list
+                    ((JComboBoxUndoListener) itemListener).setIsUserAction(false);
+                }
+            }
             if (value != null) {
                 this.comboBox.setSelectedItem(value.toString());
             }