Revision: 3563
Author: [email protected]
Date: Thu May 27 14:28:27 2010
Log: Added tree selection listeners to the DataMoverPanel so that the OK button is enabled only when a source table and any target is selected.
http://code.google.com/p/power-architect/source/detail?r=3563

Modified:
 /trunk/src/main/java/ca/sqlpower/architect/swingui/DataMoverPanel.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/DataMoverPanel.java Tue May 25 13:03:30 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/DataMoverPanel.java Thu May 27 14:28:27 2010
@@ -37,6 +37,8 @@
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTree;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
 import javax.swing.tree.TreePath;

 import ca.sqlpower.architect.ArchitectProject;
@@ -103,17 +105,53 @@
      */
     private ArchitectSwingSession session;

+ private final TreeSelectionListener sourceListener = new TreeSelectionListener() {
+        public void valueChanged(TreeSelectionEvent e) {
+            JTree tree = (JTree) e.getSource();
+            boolean containsNonTable = false;
+
+            if (tree.isSelectionEmpty()) {
+                containsNonTable = true;
+            } else {
+                for (TreePath path : tree.getSelectionPaths()) {
+ if (!(path.getLastPathComponent() instanceof SQLTable)) {
+                        containsNonTable = true;
+                        break;
+                    }
+                }
+            }
+ // If the source selection contains an item which is not SQLTable,
+            // or if nothing is selected, disable the OK button to prevent
+ // the user from copying data from it. Otherwise, enable the button.
+            if (okAction.isEnabled() == containsNonTable) {
+                okAction.setEnabled(!containsNonTable);
+            }
+        }
+    };
+
+ private final TreeSelectionListener destListener = new TreeSelectionListener() {
+        public void valueChanged(TreeSelectionEvent e) {
+            JTree tree = (JTree) e.getSource();
+            if (tree.isSelectionEmpty() == okAction.isEnabled()) {
+                okAction.setEnabled(!tree.isSelectionEmpty());
+            }
+        }
+    };
+
public DataMoverPanel(ArchitectSwingSession session) throws SQLObjectException {
         this.session = session;

         setupDBTrees();

+        okAction.setEnabled(false);
+
         sourceTree = new JTree();
final DBTreeModel sourceTreeModel = new DBTreeModel(treeRoot, sourceTree);
         sourceTree.setModel(sourceTreeModel);
         sourceTree.setRootVisible(false);
         sourceTree.setShowsRootHandles(true);
         sourceTree.setCellRenderer(new DBTreeCellRenderer());
+        sourceTree.addTreeSelectionListener(sourceListener);

         destTree = new JTree();
final DBTreeModel destTreeModel = new DBTreeModel(treeRoot, sourceTree);
@@ -121,6 +159,7 @@
         destTree.setRootVisible(false);
         destTree.setShowsRootHandles(true);
         destTree.setCellRenderer(new DBTreeCellRenderer());
+        destTree.addTreeSelectionListener(destListener);

         PanelBuilder pb = new PanelBuilder(
                 new FormLayout(
@@ -252,7 +291,7 @@
     /**
      * Moves the data from the table identified by
      * @param sourcePath
- * @return The number of rows moved, or -1 if the user canceled the operation. + * @return The number of rows moved, or -1 if the user cancelled the operation.
      * @throws SQLException
      * @throws SQLObjectException
      */
@@ -293,7 +332,7 @@
                 destTable.getPrimaryKeyIndex().addIndexColumn(destCol);
             }

-            // TODO indexes and foriegn keys
+            // TODO indexes and foreign keys
         }

         Connection sourceCon = null;

Reply via email to