You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by km...@apache.org on 2008/03/22 22:31:31 UTC

svn commit: r640085 - in /cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne: modeler/action/ modeler/dialog/ modeler/dialog/pref/ modeler/util/ swing/

Author: kmenard
Date: Sat Mar 22 14:31:30 2008
New Revision: 640085

URL: http://svn.apache.org/viewvc?rev=640085&view=rev
Log:
Fixed CAY-1011: Add confirmation dialog for delete actions.

Added:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ConfirmDeleteDialog.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java
Modified:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AbstractRemoveCallbackMethodAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAttributeAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerForDataMapAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveProcedureParameterAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveRelationshipAction.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferencesView.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AbstractRemoveCallbackMethodAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AbstractRemoveCallbackMethodAction.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AbstractRemoveCallbackMethodAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/AbstractRemoveCallbackMethodAction.java Sat Mar 22 14:31:30 2008
@@ -24,6 +24,7 @@
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.ConfirmDeleteDialog;
 import org.apache.cayenne.modeler.editor.CallbackType;
 import org.apache.cayenne.modeler.event.CallbackMethodEvent;
 import org.apache.cayenne.modeler.util.CayenneAction;
@@ -34,7 +35,7 @@
  * @author Vasil Tarasevich
  * @version 1.0 Oct 28, 2007
  */
-public abstract class AbstractRemoveCallbackMethodAction extends CayenneAction {
+public abstract class AbstractRemoveCallbackMethodAction extends RemoveAction {
 
     /**
      * Constructor.
@@ -63,8 +64,13 @@
      * @param e event
      */
     public final void performAction(ActionEvent e) {
+        ConfirmDeleteDialog dialog = getConfirmDeleteDialog();        
+
         if (getProjectController().getCurrentCallbackMethod() != null) {
-            removeCallbackMethod(e);
+            if (dialog.shouldDelete("callback method", getProjectController()
+                    .getCurrentCallbackMethod())) {
+                removeCallbackMethod(e);
+            }
         }
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAction.java Sat Mar 22 14:31:30 2008
@@ -47,6 +47,7 @@
 import org.apache.cayenne.map.event.QueryEvent;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.ConfirmDeleteDialog;
 import org.apache.cayenne.modeler.util.CayenneAction;
 import org.apache.cayenne.project.ApplicationProject;
 import org.apache.cayenne.project.ProjectPath;
@@ -79,37 +80,58 @@
         return KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
     }
 
+    public ConfirmDeleteDialog getConfirmDeleteDialog() {
+        return new ConfirmDeleteDialog();
+    }
+
     public void performAction(ActionEvent e) {
 
         ProjectController mediator = getProjectController();
 
+        ConfirmDeleteDialog dialog = getConfirmDeleteDialog();
+
         if (mediator.getCurrentObjEntity() != null) {
-            removeObjEntity();
+            if (dialog.shouldDelete("ObjEntity", mediator.getCurrentObjEntity().getName())) {
+                removeObjEntity();
+            }
         }
         else if (mediator.getCurrentDbEntity() != null) {
-            removeDbEntity();
+            if (dialog.shouldDelete("DbEntity", mediator.getCurrentDbEntity().getName())) {
+                removeDbEntity();
+            }
         }
         else if (mediator.getCurrentQuery() != null) {
-            removeQuery();
+            if (dialog.shouldDelete("query", mediator.getCurrentQuery().getName())) {
+                removeQuery();
+            }
         }
         else if (mediator.getCurrentProcedure() != null) {
-            removeProcedure();
+            if (dialog.shouldDelete("procedure", mediator.getCurrentProcedure().getName())) {
+                removeProcedure();
+            }
         }
         else if (mediator.getCurrentDataMap() != null) {
-            // In context of Data node just remove from Data Node
-            if (mediator.getCurrentDataNode() != null) {
-                removeDataMapFromDataNode();
-            }
-            else {
-                // Not under Data Node, remove completely
-                removeDataMap();
+            if (dialog.shouldDelete("data map", mediator.getCurrentDataMap().getName())) {
+
+                // In context of Data node just remove from Data Node
+                if (mediator.getCurrentDataNode() != null) {
+                    removeDataMapFromDataNode();
+                }
+                else {
+                    // Not under Data Node, remove completely
+                    removeDataMap();
+                }
             }
         }
         else if (mediator.getCurrentDataNode() != null) {
-            removeDataNode();
+            if (dialog.shouldDelete("data node", mediator.getCurrentDataNode().getName())) {
+                removeDataNode();
+            }
         }
         else if (mediator.getCurrentDataDomain() != null) {
-            removeDomain();
+            if (dialog.shouldDelete("data domain", mediator.getCurrentDataDomain().getName())) {
+                removeDomain();
+            }
         }
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAttributeAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAttributeAction.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAttributeAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveAttributeAction.java Sat Mar 22 14:31:30 2008
@@ -31,6 +31,7 @@
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.ConfirmDeleteDialog;
 import org.apache.cayenne.modeler.util.ProjectUtil;
 import org.apache.cayenne.project.ProjectPath;
 
@@ -64,11 +65,19 @@
     }
 
     public void performAction(ActionEvent e) {
+        ConfirmDeleteDialog dialog = getConfirmDeleteDialog();
+
         if (getProjectController().getCurrentObjAttribute() != null) {
-            removeObjAttribute();
+            if (dialog.shouldDelete("ObjAttribute", getProjectController()
+                    .getCurrentObjAttribute().getName())) {
+                removeObjAttribute();
+            }
         }
         else if (getProjectController().getCurrentDbAttribute() != null) {
-            removeDbAttribute();
+            if (dialog.shouldDelete("DbAttribute", getProjectController()
+                    .getCurrentDbAttribute().getName())) {
+                removeDbAttribute();
+            }
         }
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerAction.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerAction.java Sat Mar 22 14:31:30 2008
@@ -23,6 +23,7 @@
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.ConfirmDeleteDialog;
 import org.apache.cayenne.modeler.event.EntityListenerEvent;
 import org.apache.cayenne.modeler.util.CayenneAction;
 
@@ -33,7 +34,7 @@
  * @author Vasil Tarasevich
  * @version 1.0 Oct 30, 2007
  */
-public class RemoveEntityListenerAction extends CayenneAction {
+public class RemoveEntityListenerAction extends RemoveAction {
     /**
      * unique action name
      */
@@ -67,6 +68,19 @@
      * @param e event
      */
     public void performAction(ActionEvent e) {
+        ConfirmDeleteDialog dialog = getConfirmDeleteDialog();
+
+        if ((getProjectController().getCurrentObjEntity() != null) &&
+            (getProjectController().getCurrentListenerClass() != null)) {
+
+            if (dialog.shouldDelete("entity listener", getProjectController()
+                    .getCurrentListenerClass())) {
+                removeEntityListener();
+            }
+        }
+    }
+
+    protected void removeEntityListener() {
         ObjEntity objEnt = getProjectController().getCurrentObjEntity();
         String listenerClass = getProjectController().getCurrentListenerClass();
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerForDataMapAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerForDataMapAction.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerForDataMapAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveEntityListenerForDataMapAction.java Sat Mar 22 14:31:30 2008
@@ -22,6 +22,7 @@
 
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.ConfirmDeleteDialog;
 import org.apache.cayenne.modeler.event.EntityListenerEvent;
 import org.apache.cayenne.modeler.util.CayenneAction;
 
@@ -32,7 +33,7 @@
  * @author Vasil Tarasevich
  * @version 1.0 Oct 30, 2007
  */
-public class RemoveEntityListenerForDataMapAction extends CayenneAction {
+public class RemoveEntityListenerForDataMapAction extends RemoveAction {
     /**
      * unique action name
      */
@@ -66,6 +67,17 @@
      * @param e event
      */
     public void performAction(ActionEvent e) {
+        ConfirmDeleteDialog dialog = getConfirmDeleteDialog();
+
+        if (getProjectController().getCurrentListenerClass() != null) {
+            if (dialog.shouldDelete("entity listener", getProjectController()
+                    .getCurrentListenerClass())) {
+                removeDefaultEntityListener();
+            }
+        }
+    }
+
+    protected void removeDefaultEntityListener() {
         String listenerClass = getProjectController().getCurrentListenerClass();
         if (listenerClass != null) {
             getProjectController().getCurrentDataMap().removeDefaultEntityListener(listenerClass);

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveProcedureParameterAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveProcedureParameterAction.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveProcedureParameterAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveProcedureParameterAction.java Sat Mar 22 14:31:30 2008
@@ -27,6 +27,7 @@
 import org.apache.cayenne.map.event.ProcedureParameterEvent;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.ConfirmDeleteDialog;
 import org.apache.cayenne.project.ProjectPath;
 
 /**
@@ -59,8 +60,13 @@
     }
 
     public void performAction(ActionEvent e) {
-        if (getProjectController().getCurrentProcedure() != null) {
-            removeProcedureParameter();
+        ConfirmDeleteDialog dialog = getConfirmDeleteDialog();
+
+        if (getProjectController().getCurrentProcedureParameter() != null) {
+            if (dialog.shouldDelete("procedure parameter", getProjectController()
+                    .getCurrentProcedureParameter().getName())) {
+                removeProcedureParameter();
+            }
         }
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveRelationshipAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveRelationshipAction.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveRelationshipAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/RemoveRelationshipAction.java Sat Mar 22 14:31:30 2008
@@ -31,6 +31,7 @@
 import org.apache.cayenne.map.event.RelationshipEvent;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.ConfirmDeleteDialog;
 import org.apache.cayenne.modeler.util.ProjectUtil;
 import org.apache.cayenne.project.ProjectPath;
 
@@ -64,11 +65,19 @@
     }
 
     public void performAction(ActionEvent e) {
+        ConfirmDeleteDialog dialog = getConfirmDeleteDialog();
+
         if (getProjectController().getCurrentObjRelationship() != null) {
-            removeObjRelationship();
+            if (dialog.shouldDelete("ObjRelationship", getProjectController()
+                    .getCurrentObjRelationship().getName())) {
+                removeObjRelationship();
+            }
         }
         else if (getProjectController().getCurrentDbRelationship() != null) {
-            removeDbRelationship();
+            if (dialog.shouldDelete("DbRelationship", getProjectController()
+                    .getCurrentDbRelationship().getName())) {
+                removeDbRelationship();
+            }
         }
     }
 

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ConfirmDeleteDialog.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ConfirmDeleteDialog.java?rev=640085&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ConfirmDeleteDialog.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/ConfirmDeleteDialog.java Sat Mar 22 14:31:30 2008
@@ -0,0 +1,59 @@
+package org.apache.cayenne.modeler.dialog;
+
+import org.apache.cayenne.modeler.util.CayenneDialog;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.action.ConfigurePreferencesAction;
+import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
+import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
+import org.apache.cayenne.pref.PreferenceDetail;
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+ * Used to confirm deleting items in the model.
+ *
+ * @author Kevin Menard
+ */
+public class ConfirmDeleteDialog extends CayenneDialog {
+    private String type;
+    private String name;
+    private boolean shouldDelete = true;
+
+    public void show() {
+
+        PreferenceDetail pref = Application.getInstance().getPreferenceDomain().getDetail(GeneralPreferences.DELETE_PROMPT_PREFERENCE, true);
+
+        // See if the user has opted not to show the delete dialog.
+        if ((pref == null) || (false == pref.getBooleanProperty(GeneralPreferences.DELETE_PROMPT_PREFERENCE))) {
+            JCheckBox neverPromptAgainBox = new JCheckBox("Always delete without prompt.");
+
+            Object message[] = {String.format("Are you sure you would like to delete the %s named '%s'?", type, name), neverPromptAgainBox};
+
+            JOptionPane pane =
+                    new JOptionPane(message,
+                            JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);
+
+            JDialog dialog = pane.createDialog(Application.getFrame(), "File exists");
+            dialog.setVisible(true);
+
+            Object selectedValue = pane.getValue();
+            shouldDelete = selectedValue.equals(JOptionPane.YES_OPTION);
+
+            // If the user clicks "no", we'll just ignore whatever's in the checkbox because it's non-sensical.
+            if (shouldDelete) {
+                pref.setBooleanProperty(GeneralPreferences.DELETE_PROMPT_PREFERENCE, neverPromptAgainBox.isSelected());
+                Application.getInstance().getPreferenceService().savePreferences();
+            }
+        }
+    }
+
+    public boolean shouldDelete(String type, String name) {
+        this.type = type;
+        this.name = name;
+
+        show();
+
+        return shouldDelete;
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java Sat Mar 22 14:31:30 2008
@@ -23,6 +23,7 @@
 
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.pref.CayennePreferenceEditor;
 import org.apache.cayenne.pref.CayennePreferenceService;
 import org.apache.cayenne.pref.Domain;
@@ -37,14 +38,17 @@
  */
 public class GeneralPreferences extends CayenneController {
 
+    public static final String DELETE_PROMPT_PREFERENCE = "deletePrompt";
     public static final String ENCODING_PREFERENCE = "encoding";
 
     protected GeneralPreferencesView view;
     protected CayennePreferenceEditor editor;
     protected PreferenceDetail classGeneratorPreferences;
+    protected PreferenceDetail deletePromptPreference;
 
     protected ObjectBinding saveIntervalBinding;
     protected ObjectBinding encodingBinding;
+    protected ObjectBinding deletePromptBinding;
 
     public GeneralPreferences(PreferenceDialog parentController) {
         super(parentController);
@@ -58,6 +62,7 @@
 
             saveIntervalBinding.updateView();
             encodingBinding.updateView();
+            deletePromptBinding.updateView();
         }
         else {
             this.view.setEnabled(false);
@@ -75,6 +80,10 @@
         this.classGeneratorPreferences = classGeneratorDomain
                 .getDetail(ENCODING_PREFERENCE, true);
 
+        this.deletePromptPreference = editor.editableInstance(getApplication().getPreferenceDomain())
+                .getDetail(DELETE_PROMPT_PREFERENCE, true);
+
+
         // build child controllers...
         EncodingSelector encodingSelector = new EncodingSelector(this, view
                 .getEncodingSelector());
@@ -90,6 +99,9 @@
         this.encodingBinding = builder.bindToProperty(encodingSelector,
                 "classGeneratorPreferences.property[\"encoding\"]",
                 EncodingSelector.ENCODING_PROPERTY_BINDING);
+
+        this.deletePromptBinding = builder.bindToCheckBox(view.getDeletePrompt(),
+                "deletePrompt");
     }
 
     public double getTimeInterval() {
@@ -105,6 +117,14 @@
         }
 
         this.editor.setSaveInterval(ms);
+    }
+
+    public boolean getDeletePrompt() {
+        return deletePromptPreference.getBooleanProperty(GeneralPreferences.DELETE_PROMPT_PREFERENCE);
+    }
+
+    public void setDeletePrompt(boolean deletePrompt) {
+        deletePromptPreference.setBooleanProperty(GeneralPreferences.DELETE_PROMPT_PREFERENCE, deletePrompt);
     }
 
     public PreferenceDetail getClassGeneratorPreferences() {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferencesView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferencesView.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferencesView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferencesView.java Sat Mar 22 14:31:30 2008
@@ -21,9 +21,7 @@
 
 import java.awt.BorderLayout;
 
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
+import javax.swing.*;
 
 import com.jgoodies.forms.builder.PanelBuilder;
 import com.jgoodies.forms.layout.CellConstraints;
@@ -38,16 +36,18 @@
     protected JLabel saveIntervalLabel;
     protected EncodingSelectorView encodingSelector;
     protected JLabel encodingSelectorLabel;
+    protected JCheckBox deletePromptBox;
 
     public GeneralPreferencesView() {
         this.saveInterval = new JTextField();
         this.encodingSelector = new EncodingSelectorView();
         this.saveIntervalLabel = new JLabel("Preferences Save Interval (sec):");
         this.encodingSelectorLabel = new JLabel("File Encoding:");
+        this.deletePromptBox = new JCheckBox("Always delete items without prompt.");
 
         FormLayout layout = new FormLayout(
                 "right:pref, 3dlu, 30dlu, 3dlu, fill:70dlu",
-                "p, 3dlu, p, 12dlu, p, 3dlu, fill:40dlu:grow");
+                "p, 3dlu, p, 12dlu, p, 40dlu, p, 3dlu, p, 3dlu, fill:40dlu:grow");
 
         CellConstraints cc = new CellConstraints();
         PanelBuilder builder = new PanelBuilder(layout);
@@ -58,6 +58,9 @@
         builder.add(encodingSelectorLabel, cc.xy(1, 5));
         builder.add(encodingSelector, cc.xywh(3, 5, 3, 3));
 
+        builder.addSeparator("Editor Preferences", cc.xywh(1, 7, 5, 1));
+        builder.add(deletePromptBox, cc.xy(1, 9));
+
         this.setLayout(new BorderLayout());
         this.add(builder.getPanel(), BorderLayout.CENTER);
     }
@@ -76,5 +79,9 @@
 
     public EncodingSelectorView getEncodingSelector() {
         return encodingSelector;
+    }
+
+    public JCheckBox getDeletePrompt() {
+        return deletePromptBox;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneController.java Sat Mar 22 14:31:30 2008
@@ -99,7 +99,7 @@
     }
 
     /**
-     * Returns preference domaing for this component view.
+     * Returns preference domain for this component view.
      */
     protected Domain getViewDomain() {
         return getApplication().getPreferenceDomain().getSubdomain(getView().getClass());

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingBuilder.java Sat Mar 22 14:31:30 2008
@@ -23,10 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.swing.AbstractButton;
-import javax.swing.JComboBox;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
+import javax.swing.*;
 
 /**
  * A builder for component bindings that delegates the creation of the binding to the
@@ -158,6 +155,11 @@
 
     public ObjectBinding bindToTextField(JTextField component, String property) {
         ObjectBinding binding = factory.bindToTextField(component, property);
+        return initBinding(binding, delegate);
+    }
+
+    public ObjectBinding bindToCheckBox(JCheckBox component, String property) {
+        ObjectBinding binding = factory.bindToCheckBox(component, property);
         return initBinding(binding, delegate);
     }
 

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/BindingFactory.java Sat Mar 22 14:31:30 2008
@@ -21,11 +21,7 @@
 
 import java.awt.Component;
 
-import javax.swing.AbstractButton;
-import javax.swing.JComboBox;
-import javax.swing.JTable;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
+import javax.swing.*;
 
 /**
  * A factory for a number of common bindings.
@@ -128,6 +124,11 @@
      */
     public ObjectBinding bindToTextField(JTextField component, String property) {
         TextBinding binding = new TextBinding(component, property);
+        return prepareBinding(binding);
+    }
+
+    public ObjectBinding bindToCheckBox(JCheckBox component, String property) {
+        CheckBoxBinding binding = new CheckBoxBinding(component, property);
         return prepareBinding(binding);
     }
 

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java?rev=640085&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/CheckBoxBinding.java Sat Mar 22 14:31:30 2008
@@ -0,0 +1,52 @@
+package org.apache.cayenne.swing;
+
+import org.apache.cayenne.validation.ValidationException;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+/**
+ * A generic adapter that binds a check box to a bean property.
+ *
+ * @author Kevin Menard
+ */
+public class CheckBoxBinding extends BindingBase {
+
+    protected JCheckBox checkBox;
+
+    public CheckBoxBinding(JCheckBox checkBox, String propertyExpression) {
+        super(propertyExpression);
+        this.checkBox = checkBox;
+
+        this.checkBox.addActionListener(new ActionListener()
+        {
+            public void actionPerformed(final ActionEvent event) {
+                if (!modelUpdateDisabled) {
+                    updateModel();
+                }
+            }
+        });
+    }
+
+    public Component getView() {
+        return checkBox;
+    }
+
+    public void updateView() {
+        Boolean value = (Boolean) getValue();
+
+        modelUpdateDisabled = true;
+        try {
+            checkBox.setSelected(value.booleanValue());
+        }
+        finally {
+            modelUpdateDisabled = false;
+        }
+    }
+
+    protected void updateModel() {
+        setValue(Boolean.valueOf(checkBox.isSelected()));
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java?rev=640085&r1=640084&r2=640085&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/swing/TextBinding.java Sat Mar 22 14:31:30 2008
@@ -55,7 +55,9 @@
         textField.addActionListener(new ActionListener() {
 
             public void actionPerformed(ActionEvent e) {
-                updateModel();
+                if (!modelUpdateDisabled) {
+                    updateModel();
+                }
             }
         });