implement node selection in project
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Tue, 3 Jun 2008 21:21:22 +0000 (23:21 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Tue, 3 Jun 2008 21:21:22 +0000 (23:21 +0200)
src/net/pterodactylus/jsite/gui/MainWindow.java
src/net/pterodactylus/jsite/gui/ProjectPanel.java

index 6d8df0a..2e2e082 100644 (file)
@@ -64,7 +64,7 @@ import net.pterodactylus.util.swing.SwingUtils;
 
 /**
  * Defines the main window of the application.
- *
+ * 
  * @author David ‘Bombe’ Roden &lt;bombe@freenetproject.org&gt;
  */
 public class MainWindow extends JFrame implements WindowListener, I18nable, PropertyChangeListener {
@@ -127,7 +127,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
        /**
         * Creates a new main window that redirects all actions to the given swing
         * interface.
-        *
+        * 
         * @param swingInterface
         *            The swing interface to receive all actions
         */
@@ -149,7 +149,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Sets the text of the status bar.
-        *
+        * 
         * @param text
         *            The text of the status bar
         */
@@ -174,7 +174,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Returns the status bar clear delay (in milliseconds).
-        *
+        * 
         * @return The status bar clear delay
         */
        public int getStatusBarClearDelay() {
@@ -183,7 +183,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Sets the status bar clear delay (in milliseconds).
-        *
+        * 
         * @param statusBarClearDelay
         *            The status bar clear delay
         */
@@ -193,7 +193,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Sets whether the advanced mode is activated.
-        *
+        * 
         * @param advancedMode
         *            <code>true</code> if the advanced mode is activated,
         *            <code>false</code> if the simple mode is activated
@@ -212,7 +212,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Returns the currently selected project.
-        *
+        * 
         * @return The currently selected project
         */
        public Project getSelectedProject() {
@@ -221,7 +221,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Sets the given node to the “online” state.
-        *
+        * 
         * @param node
         *            The node to set online
         */
@@ -231,7 +231,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Sets the given node to the “offline” state in the status bar.
-        *
+        * 
         * @param node
         *            The node to set offline
         */
@@ -241,7 +241,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Sets the given node to the “error” state in the status bar.
-        *
+        * 
         * @param node
         *            The node to set the error state for
         */
@@ -255,7 +255,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Adds a node to the menu.
-        *
+        * 
         * @param node
         *            The node to add
         */
@@ -271,24 +271,38 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
                NodeLabel nodeLabel = new NodeLabel(swingInterface, node, onlineIcon, offlineIcon, errorIcon);
                nodeLabels.put(node, nodeLabel);
                statusBar.addSideComponent(nodeLabel);
+               for (int tabIndex = 0, tabCount = projectPane.getTabCount(); tabIndex < tabCount; tabIndex++) {
+                       Component tabComponent = projectPane.getComponentAt(tabIndex);
+                       if (!(tabComponent instanceof ProjectPanel)) {
+                               continue;
+                       }
+                       ((ProjectPanel) tabComponent).addNode(node);
+               }
                node.addPropertyChangeListener(this);
        }
 
        /**
         * Removes a node from the menu.
-        *
+        * 
         * @param node
         *            The node to remove
         */
        void removeNode(Node node) {
                nodeMenu.remove(nodeMenus.remove(node));
                statusBar.removeSideComponent(nodeLabels.remove(node));
+               for (int tabIndex = 0, tabCount = projectPane.getTabCount(); tabIndex < tabCount; tabIndex++) {
+                       Component tabComponent = projectPane.getComponentAt(tabIndex);
+                       if (!(tabComponent instanceof ProjectPanel)) {
+                               continue;
+                       }
+                       ((ProjectPanel) tabComponent).addNode(node);
+               }
                node.removePropertyChangeListener(this);
        }
 
        /**
         * Adds a project to the project pane.
-        *
+        * 
         * @param project
         *            The project to add
         * @param switchToProject
@@ -312,7 +326,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Removes the pane containing the given project.
-        *
+        * 
         * @param project
         *            The project whose pane to remove
         */
@@ -374,7 +388,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
 
        /**
         * Returns the index of the project panel that contains the given project.
-        *
+        * 
         * @param project
         *            The wanted project
         * @return The index of {@link #projectPane}’s tab that contains the given
@@ -421,7 +435,7 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
                languageMenu = new I18nMenu("mainWindow.menu.language");
                menuBar.add(languageMenu);
 
-               for (I18nAction languageAction: swingInterface.getLanguageActions()) {
+               for (I18nAction languageAction : swingInterface.getLanguageActions()) {
                        languageMenu.add(new FixedJMenuItem(languageAction));
                }
 
@@ -493,17 +507,17 @@ public class MainWindow extends JFrame implements WindowListener, I18nable, Prop
                jSiteMenu.updateI18n();
                nodeMenu.updateI18n();
                languageMenu.updateI18n();
-               for (Node node: swingInterface.getNodes()) {
+               for (Node node : swingInterface.getNodes()) {
                        swingInterface.getNodeConnectAction(node).updateI18n();
                        swingInterface.getNodeDisconnectAction(node).updateI18n();
                        swingInterface.getNodeEditAction(node).updateI18n();
                        swingInterface.getNodeDeleteAction(node).updateI18n();
                }
-               for (Project project: swingInterface.getProjects()) {
+               for (Project project : swingInterface.getProjects()) {
                        swingInterface.getCloneProjectAction(project).updateI18n();
                        swingInterface.getDeleteProjectAction(project).updateI18n();
                }
-               for (I18nAction languageAction: swingInterface.getLanguageActions()) {
+               for (I18nAction languageAction : swingInterface.getLanguageActions()) {
                        languageAction.updateI18n();
                }
                helpMenu.updateI18n();
index c3b9a78..187e057 100644 (file)
@@ -31,6 +31,7 @@ import java.util.logging.Logger;
 import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
 import javax.swing.JButton;
 import javax.swing.JComboBox;
 import javax.swing.JFileChooser;
@@ -40,6 +41,7 @@ import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.Document;
 
+import net.pterodactylus.jsite.core.Node;
 import net.pterodactylus.jsite.core.Project;
 import net.pterodactylus.jsite.i18n.I18n;
 import net.pterodactylus.jsite.i18n.I18nable;
@@ -129,6 +131,31 @@ public class ProjectPanel extends JPanel implements DocumentListener, I18nable {
        }
 
        //
+       // ACTIONS
+       //
+
+       /**
+        * Adds the given node to the node combo boxes in all {@link ProjectPanel}s.
+        * 
+        * @param node
+        *            The node to add
+        */
+       public void addNode(Node node) {
+               ((DefaultComboBoxModel) nodeComboBox.getModel()).addElement(node);
+       }
+
+       /**
+        * Removes the given node from the node combo boxes in all
+        * {@link ProjectPanel}s.
+        * 
+        * @param node
+        *            The node to remove
+        */
+       public void removeNode(Node node) {
+               ((DefaultComboBoxModel) nodeComboBox.getModel()).removeElement(node);
+       }
+
+       //
        // PRIVATE METHODS
        //
 
@@ -161,8 +188,10 @@ public class ProjectPanel extends JPanel implements DocumentListener, I18nable {
                        /**
                         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
                         */
+                       @SuppressWarnings("synthetic-access")
                        public void actionPerformed(ActionEvent actionEvent) {
-                               /* TODO */
+                               Node node = (Node) nodeComboBox.getSelectedItem();
+                               project.setNode(node);
                        }
                };
        }
@@ -210,7 +239,12 @@ public class ProjectPanel extends JPanel implements DocumentListener, I18nable {
                propertiesPanel.add(changeBasePathButton, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
                propertiesPanel.add(editFilesButton, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
 
-               nodeComboBox = new JComboBox();
+               nodeComboBox = new JComboBox(new DefaultComboBoxModel());
+               ((DefaultComboBoxModel) nodeComboBox.getModel()).addElement(null);
+               for (Node node : swingInterface.getNodes()) {
+                       ((DefaultComboBoxModel) nodeComboBox.getModel()).addElement(node);
+               }
+               nodeComboBox.setSelectedItem(project.getNode());
                nodeComboBox.addActionListener(nodeAction);
                nodeLabel = new I18nLabel("projectPanel.label.node", nodeComboBox);
                propertiesPanel.add(nodeLabel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 0, 0, 0), 0, 0));