Revision: 3292
Author: ferguson.sebastian
Date: Fri Feb 12 09:08:50 2010
Log: Panel is now more responsive to user. Buttons get disabled when they cannot be used. Projects list gets greyed out and displays information regarding the server connection.
http://code.google.com/p/power-architect/source/detail?r=3292

Modified:
/trunk/src/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java

=======================================
--- /trunk/src/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java Wed Feb 10 11:19:11 2010 +++ /trunk/src/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java Fri Feb 12 09:08:50 2010
@@ -157,6 +157,12 @@
         }
     };

+    private JButton newButton = new JButton(newAction);
+    private JButton openButton = new JButton(openAction);
+    private JButton deleteButton = new JButton(deleteAction);
+
+    private boolean connected = false;
+
     public ServerProjectsManagerPanel(ArchitectSessionContext context,
             Component dialogOwner, Action closeAction) {
         this.dialogOwner = dialogOwner;
@@ -191,6 +197,7 @@
         projects.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
+                refreshPanel();
if (e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton(e)) {
                     openAction.actionPerformed(null);
                 }
@@ -213,9 +220,9 @@

DefaultFormBuilder buttonBarBuilder = new DefaultFormBuilder(new FormLayout("pref"));
         buttonBarBuilder.append(new JButton(refreshAction));
-        buttonBarBuilder.append(new JButton(newAction));
-        buttonBarBuilder.append(new JButton(openAction));
-        buttonBarBuilder.append(new JButton(deleteAction));
+        buttonBarBuilder.append(newButton);
+        buttonBarBuilder.append(openButton);
+        buttonBarBuilder.append(deleteButton);
         buttonBarBuilder.append(new JButton(closeAction));
         builder.add(buttonBarBuilder.getPanel(), cc.xy(5, 2));
         builder.setDefaultDialogBorder();
@@ -225,6 +232,30 @@
     public JPanel getPanel() {
         return panel;
     }
+
+    private void refreshPanel() {
+        // Update the status of buttons and lists .
+        if (connected) {
+
+            newButton.setEnabled(true);
+
+            if (projects.isSelectionEmpty()) {
+                openButton.setEnabled(false);
+                deleteButton.setEnabled(false);
+            } else {
+                openButton.setEnabled(true);
+                deleteButton.setEnabled(true);
+            }
+
+            projects.setEnabled(true);
+        } else {
+            newButton.setEnabled(false);
+            openButton.setEnabled(false);
+            deleteButton.setEnabled(false);
+
+            projects.setEnabled(false);
+        }
+    }

     private void refreshInfoList() {
         DefaultListModel model = (DefaultListModel) projects.getModel();
@@ -235,14 +266,25 @@
             try {
for (ProjectLocation pl : ArchitectClientSideSession.getWorkspaceNames(serviceInfo)) {
                     model.addElement(pl);
+                    connected = true;
                 }
             } catch (Exception ex) {
                 model.removeAllElements();
- model.addElement("There has been a problem retrieving projects from the selected server"); - throw new RuntimeException("There has been a problem retrieving projects from the selected server", ex);
-            }
+                model.addElement("Unable to get projects from server");
+
+                connected = false;
+
+ // XXX: Having an exception thrown whenever the server cannot be found seems a little
+                //      extreme, but it can be useful for debugging.
+
+ //throw new RuntimeException("There has been a problem retrieving projects from the selected server", ex);
+            }
+
+            refreshPanel();
         } else {
             model.addElement("No Server Selected");
+            connected = false;
+            refreshPanel();
         }
     }

Reply via email to