import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
-import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
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;
/** The “set default file” action. */
private I18nAction setDefaultFileAction;
- /** The “insert” action. */
- private I18nAction insertAction;
-
/** The “project files” label. */
private I18nLabel projectFilesLabel;
private JTextField fileSizeTextField;
/** The “override” label. */
- private I18nLabel overrideLabel;
+ 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 active” action. */
- private I18nAction overrideAction;
+ /** The “override insert default” checkbox. */
+ private JCheckBox overrideInsertDefaultCheckBox;
- /** The “override action” checkbox. */
- private JCheckBox overrideCheckBox;
+ /** The “override insert” action. */
+ private Action insertOverrideAction;
+
+ /** The “override insert” checkbox. */
+ private JCheckBox insertOverrideCheckBox;
/** The context menu for the tree. */
private JPopupMenu treeContextMenu;
project.setDefaultFile(completePath);
}
};
- insertAction = new I18nAction("fileManager.menu.item.insert") {
+ applyInsertOverrideAction = new I18nAction("fileManager.menu.item.applyInsertOverride") {
/**
* {@inheritDoc}
*/
- public void actionPerformed(ActionEvent e) {
- /* TODO */
+ @SuppressWarnings("synthetic-access")
+ public void actionPerformed(ActionEvent actionEvent) {
+ applyInsertOverride();
}
};
- overrideAction = new I18nAction("fileManager.checkbox.overrideActive") {
+ applyMimeTypeOverrideAction = new I18nAction("fileManager.menu.item.applyMimeTypeOverride") {
/**
- * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+ * {@inheritDoc}
*/
+ @SuppressWarnings("synthetic-access")
public void actionPerformed(ActionEvent actionEvent) {
- /* TODO */
+ applyMimeTypeOverride();
}
};
- applyInsertOverrideAction = new I18nAction("fileManager.menu.item.applyInsertOverride") {
+ removeOverrideAction = new I18nAction("fileManager.menu.item.removeOverride") {
/**
* {@inheritDoc}
*/
@SuppressWarnings("synthetic-access")
public void actionPerformed(ActionEvent actionEvent) {
- applyInsertOverride();
+ removeOverride();
}
};
- applyMimeTypeOverrideAction = new I18nAction("fileManager.menu.item.applyMimeTypeOverride") {
+ overrideInsertDefaultAction = new I18nAction("fileManager.checkbox.overrideInsertDefault") {
/**
* {@inheritDoc}
*/
@SuppressWarnings("synthetic-access")
public void actionPerformed(ActionEvent actionEvent) {
- applyMimeTypeOverride();
+ 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);
+ }
+ }
}
};
- removeOverrideAction = new I18nAction("fileManager.menu.item.removeOverride") {
+ overrideInsertDefaultAction.setEnabled(false);
+ insertOverrideAction = new AbstractAction() {
/**
* {@inheritDoc}
*/
- @SuppressWarnings("synthetic-access")
public void actionPerformed(ActionEvent actionEvent) {
- removeOverride();
+ 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);
}
/**
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));
-
- /* override settings. */
- overrideLabel = new I18nLabel("fileManager.label.override");
- overrideLabel.setFont(overrideLabel.getFont().deriveFont(Font.BOLD));
- propertiesPanel.add(overrideLabel, new GridBagConstraints(0, 4, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(24, 0, 0, 0), 0, 0));
-
- overrideCheckBox = new JCheckBox(overrideAction);
- propertiesPanel.add(overrideCheckBox, new GridBagConstraints(0, 5, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(12, 24, 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));
+
+ /* file settings. */
+ fileSettingsLabel = new I18nLabel("fileManager.label.fileSettings");
+ fileSettingsLabel.setFont(fileSettingsLabel.getFont().deriveFont(Font.BOLD));
+ 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, 6, 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));
if (!mouseEvent.isPopupTrigger()) {
return;
}
- Point eventLocation = mouseEvent.getPoint();
- TreePath[] selectedPaths = fileTree.getSelectionPaths();
- if ((selectedPaths == null) || (selectedPaths.length == 0)) {
- /* try to find item under click. */
- TreePath clickedPath = fileTree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY());
- if (clickedPath != null) {
- fileTree.setSelectionPath(clickedPath);
- selectedPaths = new TreePath[] { clickedPath };
- } else {
- logger.log(Level.FINER, "nothing selected for context menu");
- return;
- }
+ List<ProjectFileWrapper> selectedProjectFileWrappers = getSelectedProjectFileWrappers(false);
+ TreePath clickedPath = fileTree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY());
+ ProjectFileWrapper clickedProjectFileWrapper = (ProjectFileWrapper) clickedPath.getLastPathComponent();
+ if (!selectedProjectFileWrappers.contains(clickedProjectFileWrapper)) {
+ fileTree.setSelectionPath(clickedPath);
+ selectedProjectFileWrappers = getSelectedProjectFileWrappers(false);
}
- if (selectedPaths.length == 1) {
- ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) selectedPaths[0].getLastPathComponent();
+ logger.log(Level.FINEST, "selectedProjectFileWrappers.size(): " + selectedProjectFileWrappers.size());
+ if (selectedProjectFileWrappers.size() == 1) {
+ ProjectFileWrapper projectFileWrapper = selectedProjectFileWrappers.get(0);
ProjectFile projectFile = projectFileWrapper.getProjectFile();
setDefaultFileAction.setEnabled(!isHidden(projectFileWrapper) && projectFile.isFile() && !projectFile.getCompletePath().equals(project.getDefaultFile()));
} else {
setDefaultFileAction.setEnabled(false);
}
- treeContextMenu.show(fileTree, eventLocation.x, eventLocation.y);
+ overrideMenu.setVisible(selectedProjectFileWrappers.size() > 1);
+ treeContextMenu.show(fileTree, mouseEvent.getX(), mouseEvent.getY());
}
/**
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())));
}
/**
* 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);
}
fileOverride.setInsert(insertCheckBox.isSelected());
}
+ /* HACK - Swing sucks a bit */
+ fileTree.setShowsRootHandles(false);
}
/**
private List<ProjectFileWrapper> getSelectedProjectFileWrappers(boolean filesOnly) {
List<ProjectFileWrapper> selectedProjectFileWrappers = new ArrayList<ProjectFileWrapper>();
TreePath[] selectedPaths = fileTree.getSelectionPaths();
- for (TreePath selectedPath : selectedPaths) {
- ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) selectedPath.getLastPathComponent();
- if (filesOnly && !projectFileWrapper.getProjectFile().isFile()) {
- continue;
+ if (selectedPaths != null) {
+ for (TreePath selectedPath : selectedPaths) {
+ ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) selectedPath.getLastPathComponent();
+ if (filesOnly && !projectFileWrapper.getProjectFile().isFile()) {
+ continue;
+ }
+ selectedProjectFileWrappers.add(projectFileWrapper);
}
- selectedProjectFileWrappers.add(projectFileWrapper);
}
return selectedProjectFileWrappers;
}
* {@inheritDoc}
*/
public void valueChanged(TreeSelectionEvent treeSelectionEvent) {
- TreePath[] selectedPaths = fileTree.getSelectionPaths();
- filePathTextField.setText("");
- fileNameTextField.setText("");
- fileSizeTextField.setText("");
- overrideAction.setEnabled(false);
- 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()));
}
- overrideAction.setEnabled(true);
- } else if ((selectedPaths != null) && (selectedPaths.length > 1)) {
+ } else if (selectedProjectFileWrappers.size() > 1) {
+ /* 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);
+ }
+
+ /**
+ * 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);
}
}
}
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;
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();