move method to correct place
[jSite2.git] / src / net / pterodactylus / jsite / gui / FileManager.java
index cdfc9d1..5bd52e8 100644 (file)
@@ -29,7 +29,6 @@ import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.beans.PropertyChangeEvent;
@@ -43,6 +42,9 @@ import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.swing.AbstractAction;
+import javax.swing.AbstractButton;
+import javax.swing.Action;
 import javax.swing.BorderFactory;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -80,7 +82,7 @@ import net.pterodactylus.util.swing.SwingUtils;
  * 
  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
  */
-public class FileManager extends JDialog implements I18nable, ActionListener, TreeSelectionListener, MouseListener {
+public class FileManager extends JDialog implements I18nable, TreeSelectionListener, MouseListener {
 
        /** Logger. */
        private static final Logger logger = Logging.getLogger(FileManager.class.getName());
@@ -139,6 +141,24 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
        /** The “override” label. */
        private I18nLabel fileSettingsLabel;
 
+       /** The “insert default” label. */
+       private I18nLabel insertDefaultLabel;
+
+       /** The “insert default” checkbox. */
+       private JCheckBox insertDefaultCheckBox;
+
+       /** The “override insert default” action. */
+       private I18nAction overrideInsertDefaultAction;
+
+       /** The “override insert default” checkbox. */
+       private JCheckBox overrideInsertDefaultCheckBox;
+
+       /** The “override insert” action. */
+       private Action insertOverrideAction;
+
+       /** The “override insert” checkbox. */
+       private JCheckBox insertOverrideCheckBox;
+
        /** The context menu for the tree. */
        private JPopupMenu treeContextMenu;
 
@@ -287,6 +307,51 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
                                removeOverride();
                        }
                };
+               overrideInsertDefaultAction = new I18nAction("fileManager.checkbox.overrideInsertDefault") {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @SuppressWarnings("synthetic-access")
+                       public void actionPerformed(ActionEvent actionEvent) {
+                               boolean overrideInsert = overrideInsertDefaultCheckBox.isSelected();
+                               insertOverrideAction.setEnabled(overrideInsert);
+                               List<ProjectFileWrapper> selectedProjectFileWrappers = getSelectedProjectFileWrappers(true);
+                               ProjectFileWrapper projectFileWrapper = selectedProjectFileWrappers.get(0);
+                               ProjectFile projectFile = projectFileWrapper.getProjectFile();
+                               FileOverride fileOverride = project.getFileOverride(projectFile);
+                               if (overrideInsert) {
+                                       if (fileOverride == null) {
+                                               fileOverride = new FileOverride();
+                                               project.addFileOverride(projectFile, fileOverride);
+                                               fileOverride.setInsert(!projectFile.isHidden());
+                                       }
+                               } else {
+                                       fileOverride.setInsert(null);
+                                       if (fileOverride.isEmpty()) {
+                                               project.removeFileOverride(projectFile);
+                                       }
+                               }
+                       }
+               };
+               overrideInsertDefaultAction.setEnabled(false);
+               insertOverrideAction = new AbstractAction() {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       public void actionPerformed(ActionEvent actionEvent) {
+                               boolean insertOverride = insertOverrideCheckBox.isSelected();
+                               List<ProjectFileWrapper> selectedProjectFileWrappers = getSelectedProjectFileWrappers(true);
+                               ProjectFileWrapper projectFileWrapper = selectedProjectFileWrappers.get(0);
+                               ProjectFile projectFile = projectFileWrapper.getProjectFile();
+                               FileOverride fileOverride = project.getFileOverride(projectFile);
+                               fileOverride.setInsert(insertOverride);
+                               fileTree.setShowsRootHandles(false);
+                               fileTree.repaint();
+                       }
+               };
+               insertOverrideAction.setEnabled(false);
        }
 
        /**
@@ -350,33 +415,43 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
 
                filePropertiesLabel = new I18nLabel("fileManager.label.fileProperties");
                filePropertiesLabel.setFont(filePropertiesLabel.getFont().deriveFont(Font.BOLD));
-               propertiesPanel.add(filePropertiesLabel, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
+               propertiesPanel.add(filePropertiesLabel, new GridBagConstraints(0, 0, 4, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
 
                filePathLabel = new I18nLabel("fileManager.label.filePath");
                filePathTextField = new JTextField();
                filePathTextField.setEditable(false);
                propertiesPanel.add(filePathLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 24, 0, 0), 0, 0));
-               propertiesPanel.add(filePathTextField, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
+               propertiesPanel.add(filePathTextField, new GridBagConstraints(1, 1, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
 
                fileNameLabel = new I18nLabel("fileManager.label.fileName");
                fileNameTextField = new JTextField();
                fileNameTextField.setEditable(false);
                propertiesPanel.add(fileNameLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 24, 0, 0), 0, 0));
-               propertiesPanel.add(fileNameTextField, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
+               propertiesPanel.add(fileNameTextField, new GridBagConstraints(1, 2, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
 
                fileSizeLabel = new I18nLabel("fileManager.label.fileSize");
                fileSizeTextField = new JTextField();
                fileSizeTextField.setEditable(false);
                propertiesPanel.add(fileSizeLabel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 24, 0, 0), 0, 0));
-               propertiesPanel.add(fileSizeTextField, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
+               propertiesPanel.add(fileSizeTextField, new GridBagConstraints(1, 3, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
 
-               /* override settings. */
+               /* file settings. */
                fileSettingsLabel = new I18nLabel("fileManager.label.fileSettings");
                fileSettingsLabel.setFont(fileSettingsLabel.getFont().deriveFont(Font.BOLD));
-               propertiesPanel.add(fileSettingsLabel, new GridBagConstraints(0, 4, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(24, 0, 0, 0), 0, 0));
+               propertiesPanel.add(fileSettingsLabel, new GridBagConstraints(0, 4, 4, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(24, 0, 0, 0), 0, 0));
+
+               insertDefaultLabel = new I18nLabel("fileManager.label.insertDefault");
+               propertiesPanel.add(insertDefaultLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 24, 0, 0), 0, 0));
+               insertDefaultCheckBox = new JCheckBox();
+               insertDefaultCheckBox.setEnabled(false);
+               propertiesPanel.add(insertDefaultCheckBox, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
+               overrideInsertDefaultCheckBox = new JCheckBox(overrideInsertDefaultAction);
+               propertiesPanel.add(overrideInsertDefaultCheckBox, new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
+               insertOverrideCheckBox = new JCheckBox(insertOverrideAction);
+               propertiesPanel.add(insertOverrideCheckBox, new GridBagConstraints(3, 5, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 12, 0, 0), 0, 0));
 
                /* glue panel. */
-               propertiesPanel.add(new JPanel(), new GridBagConstraints(0, 7, 2, 1, 1.0, 1.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
+               propertiesPanel.add(new JPanel(), new GridBagConstraints(0, 6, 4, 1, 1.0, 1.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
 
                /* action button panel */
                JPanel actionButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 12, 12));
@@ -448,6 +523,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
                        fileTree.setSelectionPath(clickedPath);
                        selectedProjectFileWrappers = getSelectedProjectFileWrappers(false);
                }
+               logger.log(Level.FINEST, "selectedProjectFileWrappers.size(): " + selectedProjectFileWrappers.size());
                if (selectedProjectFileWrappers.size() == 1) {
                        ProjectFileWrapper projectFileWrapper = selectedProjectFileWrappers.get(0);
                        ProjectFile projectFile = projectFileWrapper.getProjectFile();
@@ -472,7 +548,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
                ProjectFile projectFile = projectFileWrapper.getProjectFile();
                FileOverride fileOverride = project.getFileOverrides().get(projectFile.getCompletePath());
                logger.log(Level.FINEST, "fileOverride: " + fileOverride);
-               return ((fileOverride == null) && projectFile.isHidden()) || ((fileOverride != null) && (Boolean.TRUE.equals(fileOverride.isInsert())));
+               return ((fileOverride == null) && projectFile.isHidden()) || ((fileOverride != null) && (fileOverride.isInsert() == null) && projectFile.isHidden()) || ((fileOverride != null) && (fileOverride.isInsert() != null) && (Boolean.FALSE.equals(fileOverride.isInsert())));
        }
 
        /**
@@ -480,7 +556,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
         * override for the “insert” setting for multiple files.
         */
        private void applyInsertOverride() {
-               JCheckBox insertCheckBox = new JCheckBox(I18n.get("fileManager.checkbox.insertFile.name"));
+               JCheckBox insertCheckBox = new JCheckBox(I18n.get("fileManager.menu.item.insert.name"));
                String okString = I18n.get("general.button.okay.name");
                String cancelString = I18n.get("general.button.cancel.name");
                int choice = JOptionPane.showOptionDialog(this, new Object[] { I18n.get("fileManager.dialog.insertOverride.message"), insertCheckBox }, I18n.get("fileManager.dialog.insertOverride.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[] { okString, cancelString }, okString);
@@ -499,6 +575,8 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
                        }
                        fileOverride.setInsert(insertCheckBox.isSelected());
                }
+               /* HACK - Swing sucks a bit */
+               fileTree.setShowsRootHandles(false);
        }
 
        /**
@@ -567,6 +645,36 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
                return selectedProjectFileWrappers;
        }
 
+       /**
+        * Sets the given action’s enabled state to the given enabled state if the
+        * action’s current enabled state is not the given enabled state.
+        * 
+        * @param action
+        *            The action to set the enabled state on
+        * @param enabled
+        *            The new enabled state of the action
+        */
+       private void setEnabled(Action action, boolean enabled) {
+               if (action.isEnabled() != enabled) {
+                       action.setEnabled(enabled);
+               }
+       }
+
+       /**
+        * Sets the given button’s selected state to the given selected state if the
+        * button’s current selected state is not the given selected state.
+        * 
+        * @param button
+        *            The button to set the selected state on
+        * @param selected
+        *            The new selected state of the button
+        */
+       private void setSelected(AbstractButton button, boolean selected) {
+               if (button.isSelected() != selected) {
+                       button.setSelected(selected);
+               }
+       }
+
        //
        // INTERFACE I18nable
        //
@@ -589,43 +697,47 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
         * {@inheritDoc}
         */
        public void valueChanged(TreeSelectionEvent treeSelectionEvent) {
-               TreePath[] selectedPaths = fileTree.getSelectionPaths();
-               filePathTextField.setText("");
-               fileNameTextField.setText("");
-               fileSizeTextField.setText("");
-               if ((selectedPaths != null) && (selectedPaths.length == 1)) {
-                       Object lastPathComponent = selectedPaths[0].getLastPathComponent();
-                       if (!(lastPathComponent instanceof ProjectFileWrapper)) {
-                               logger.log(Level.SEVERE, "lastPathComponent is not a ProjectFileWrapper!");
-                               return;
-                       }
-                       ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) lastPathComponent;
+               List<ProjectFileWrapper> selectedProjectFileWrappers = getSelectedProjectFileWrappers(true);
+               String filePathText = "";
+               String fileNameText = "";
+               String fileSizeText = "";
+               boolean insertDefaultSelected = false;
+               boolean overrideInsertEnabled = false;
+               boolean overrideInsertSelected = false;
+               boolean insertOverrideEnabled = false;
+               boolean insertOverrideSelected = false;
+               if (selectedProjectFileWrappers.size() == 1) {
+                       ProjectFileWrapper projectFileWrapper = selectedProjectFileWrappers.get(0);
                        ProjectFile projectFile = projectFileWrapper.getProjectFile();
                        if (projectFile.isFile()) {
                                String completePath = projectFile.getCompletePath();
                                int lastSeparator = completePath.lastIndexOf(File.separatorChar);
-                               if (lastSeparator == -1) {
-                                       filePathTextField.setText("");
-                               } else {
-                                       filePathTextField.setText(completePath.substring(0, lastSeparator));
+                               if (lastSeparator != -1) {
+                                       filePathText = completePath.substring(0, lastSeparator);
+                               }
+                               fileNameText = projectFile.getName();
+                               fileSizeText = String.valueOf(projectFile.getSize());
+                               insertDefaultSelected = !projectFile.isHidden();
+                               overrideInsertEnabled = true;
+                               FileOverride fileOverride = project.getFileOverride(projectFile);
+                               if (fileOverride != null) {
+                                       Boolean overrideInsert = fileOverride.isInsert();
+                                       overrideInsertSelected = overrideInsert != null;
+                                       insertOverrideEnabled = overrideInsertSelected;
+                                       insertOverrideSelected = overrideInsertSelected ? overrideInsert : !projectFile.isHidden();
                                }
-                               fileNameTextField.setText(projectFile.getName());
-                               fileSizeTextField.setText(String.valueOf(projectFile.getSize()));
                        }
-               } else if ((selectedPaths != null) && (selectedPaths.length > 1)) {
+               } else if (selectedProjectFileWrappers.size() > 1) {
                        /* TODO */
                }
-       }
-
-       //
-       // INTERFACE ActionListener
-       //
-
-       /**
-        * {@inheritDoc}
-        */
-       public void actionPerformed(ActionEvent actionEvent) {
-               /* TODO */
+               filePathTextField.setText(filePathText);
+               fileNameTextField.setText(fileNameText);
+               fileSizeTextField.setText(fileSizeText);
+               setSelected(insertDefaultCheckBox, insertDefaultSelected);
+               setEnabled(overrideInsertDefaultAction, overrideInsertEnabled);
+               setSelected(overrideInsertDefaultCheckBox, overrideInsertSelected);
+               setEnabled(insertOverrideAction, insertOverrideEnabled);
+               setSelected(insertOverrideCheckBox, insertOverrideSelected);
        }
 
        //
@@ -700,11 +812,18 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
                        }
                        ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) value;
                        ProjectFile projectFile = projectFileWrapper.getProjectFile();
+                       FileOverride fileOverride = project.getFileOverride(projectFile);
                        String completePath = projectFile.getCompletePath();
                        boolean paintBold = false;
                        boolean paintHalfColor = false;
-                       if (projectFile.isFile() && projectFile.isHidden()) {
-                               /* TODO - check override */
+                       boolean showFile = !projectFile.isHidden();
+                       if (fileOverride != null) {
+                               Boolean insertOverride = fileOverride.isInsert();
+                               if (insertOverride != null) {
+                                       showFile = insertOverride;
+                               }
+                       }
+                       if (projectFile.isFile() && !showFile) {
                                paintHalfColor = true;
                        } else if (completePath.equals(project.getDefaultFile())) {
                                paintBold = true;
@@ -941,9 +1060,11 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr
                        if (Project.PROPERTY_DEFAULT_FILE.equals(propertyChangeEvent.getPropertyName())) {
                                if (propertyChangeEvent.getOldValue() != null) {
                                        String oldCompletePath = (String) propertyChangeEvent.getOldValue();
+                                       logger.log(Level.FINEST, "oldCompletePath: " + oldCompletePath);
                                        ProjectFile oldProjectFile = pathProjectFiles.get(oldCompletePath);
+                                       logger.log(Level.FINEST, "oldProjectFile: " + oldProjectFile);
                                        ProjectFileWrapper oldProjectFileWrapper = projectFileWrappers.get(oldProjectFile);
-                                       System.out.println("oldProjectFileWrapper: " + oldProjectFileWrapper);
+                                       logger.log(Level.FINEST, "oldProjectFileWrapper: " + oldProjectFileWrapper);
                                        fireTreeNodesChanged(oldProjectFileWrapper);
                                }
                                String newCompletePath = (String) propertyChangeEvent.getNewValue();