Deleting the selected node will now selected another node.
[jSite.git] / src / de / todesbaum / jsite / gui / NodeManagerPage.java
index e73ce26..23fafe6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * jSite-0.7 - 
+ * jSite-0.7 -
  * Copyright (C) 2006 David Roden
  *
  * This program is free software; you can redistribute it and/or modify
@@ -62,7 +62,7 @@ import de.todesbaum.util.swing.TWizardPage;
 
 /**
  * Wizard page that lets the user edit his nodes.
- * 
+ *
  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
  */
 public class NodeManagerPage extends TWizardPage implements ListSelectionListener, DocumentListener, ChangeListener {
@@ -93,7 +93,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Creates a new node manager wizard page.
-        * 
+        *
         * @param wizard
         *            The wizard this page belongs to
         */
@@ -113,7 +113,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Adds a listener for node manager events.
-        * 
+        *
         * @param nodeManagerListener
         *            The listener to add
         */
@@ -123,7 +123,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Removes a listener for node manager events.
-        * 
+        *
         * @param nodeManagerListener
         *            The listener to remove
         */
@@ -133,7 +133,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Notifies all listeners that the node configuration has changed.
-        * 
+        *
         * @param nodes
         *            The new list of nodes
         */
@@ -144,6 +144,18 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
        }
 
        /**
+        * Notifies all listeners that a new node was selected.
+        *
+        * @param node
+        *            The newly selected node
+        */
+       protected void fireNodeSelected(Node node) {
+               for (NodeManagerListener nodeManagerListener : nodeManagerListeners) {
+                       nodeManagerListener.nodeSelected(node);
+               }
+       }
+
+       /**
         * Creates all actions.
         */
        private void createActions() {
@@ -249,7 +261,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Sets the node list.
-        * 
+        *
         * @param nodes
         *            The list of nodes
         */
@@ -264,7 +276,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Returns the node list.
-        * 
+        *
         * @return The list of nodes
         */
        public Node[] getNodes() {
@@ -277,7 +289,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Returns the currently selected node.
-        * 
+        *
         * @return The selected node, or <code>null</code> if no node is selected
         */
        private Node getSelectedNode() {
@@ -286,7 +298,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
 
        /**
         * Updates node name or hostname when the user types into the textfields.
-        * 
+        *
         * @see #insertUpdate(DocumentEvent)
         * @see #removeUpdate(DocumentEvent)
         * @see #changedUpdate(DocumentEvent)
@@ -331,6 +343,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
        private void addNode() {
                Node node = new Node("localhost", 9481, I18n.getMessage("jsite.node-manager.new-node"));
                nodeListModel.addElement(node);
+               deleteNodeAction.setEnabled(nodeListModel.size() > 1);
                wizard.setNextEnabled(true);
                fireNodesUpdated(getNodes());
        }
@@ -346,9 +359,12 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
                if (JOptionPane.showConfirmDialog(wizard, I18n.getMessage("jsite.node-manager.delete-node.warning"), null, JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.CANCEL_OPTION) {
                        return;
                }
+               int nodeIndex = nodeListModel.indexOf(node);
                nodeListModel.removeElement(node);
                nodeList.repaint();
+               fireNodeSelected((Node) nodeListModel.get(Math.min(nodeIndex, nodeListModel.size() - 1)));
                fireNodesUpdated(getNodes());
+               deleteNodeAction.setEnabled(nodeListModel.size() > 1);
                wizard.setNextEnabled(nodeListModel.size() > 0);
        }
 
@@ -359,6 +375,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
        /**
         * {@inheritDoc}
         */
+       @SuppressWarnings("null")
        public void valueChanged(ListSelectionEvent e) {
                Object source = e.getSource();
                if (source instanceof JList) {
@@ -369,7 +386,7 @@ public class NodeManagerPage extends TWizardPage implements ListSelectionListene
                                nodeNameTextField.setEnabled(enabled);
                                nodeHostnameTextField.setEnabled(enabled);
                                nodePortSpinner.setEnabled(enabled);
-                               deleteNodeAction.setEnabled(enabled);
+                               deleteNodeAction.setEnabled(enabled && (nodeListModel.size() > 1));
                                if (enabled) {
                                        nodeNameTextField.setText(node.getName());
                                        nodeHostnameTextField.setText(node.getHostname());