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();
}
}