X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fgui%2FFileManager.java;h=cdfc9d1d6e2475efbfe9b0ee14c4b80ff52fcb11;hb=c60034ea2b17fcd3d835de8e854c460325baa031;hp=0c714c5897af6a2445d6a738579c5e30a934cc7e;hpb=d14c6006312ccb2e0b0376ee9b2ce9665ed15132;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/gui/FileManager.java b/src/net/pterodactylus/jsite/gui/FileManager.java index 0c714c5..cdfc9d1 100644 --- a/src/net/pterodactylus/jsite/gui/FileManager.java +++ b/src/net/pterodactylus/jsite/gui/FileManager.java @@ -28,11 +28,13 @@ import java.awt.Font; 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.awt.event.MouseListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -43,9 +45,11 @@ import java.util.logging.Logger; import javax.swing.BorderFactory; import javax.swing.JButton; -import javax.swing.JCheckBoxMenuItem; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; @@ -63,8 +67,11 @@ import net.pterodactylus.jsite.i18n.I18n; import net.pterodactylus.jsite.i18n.I18nable; import net.pterodactylus.jsite.i18n.gui.I18nAction; import net.pterodactylus.jsite.i18n.gui.I18nLabel; +import net.pterodactylus.jsite.i18n.gui.I18nMenu; +import net.pterodactylus.jsite.project.FileOverride; import net.pterodactylus.jsite.project.Project; import net.pterodactylus.jsite.project.ProjectFile; +import net.pterodactylus.util.io.MimeTypes; import net.pterodactylus.util.logging.Logging; import net.pterodactylus.util.swing.SwingUtils; @@ -99,9 +106,6 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** The “set default file” action. */ private I18nAction setDefaultFileAction; - /** The “insert” action. */ - private I18nAction insertAction; - /** The “project files” label. */ private I18nLabel projectFilesLabel; @@ -132,11 +136,23 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** The “file size” text field. */ private JTextField fileSizeTextField; + /** The “override” label. */ + private I18nLabel fileSettingsLabel; + /** The context menu for the tree. */ private JPopupMenu treeContextMenu; - /** The “insert” checkbox. */ - private JCheckBoxMenuItem insertCheckBoxMenuItem; + /** The “apply override” menu. */ + private I18nMenu overrideMenu; + + /** The “apply insert override” action. */ + private I18nAction applyInsertOverrideAction; + + /** The “apply mime type override” action. */ + private I18nAction applyMimeTypeOverrideAction; + + /** The “remove override” action. */ + private I18nAction removeOverrideAction; /** * Creates a new file manager. @@ -152,6 +168,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr this.swingInterface = swingInterface; this.project = project; fileTreeModel = new ProjectFileTreeModel(); + project.addPropertyChangeListener(fileTreeModel); fileCellRenderer = new FileCellRenderer(); initActions(); initComponents(); @@ -187,7 +204,19 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** * {@inheritDoc} */ + @SuppressWarnings("synthetic-access") public void actionPerformed(ActionEvent e) { + String defaultFile = project.getDefaultFile(); + if ((defaultFile == null) || (defaultFile.length() == 0)) { + /* TODO - i18n */ + JOptionPane.showMessageDialog(FileManager.this, I18n.get(""), I18n.get(""), JOptionPane.ERROR_MESSAGE); + return; + } + ProjectFile projectFile = project.getFile(defaultFile); + if (projectFile == null) { + JOptionPane.showMessageDialog(FileManager.this, I18n.get(""), I18n.get(""), JOptionPane.ERROR_MESSAGE); + return; + } setVisible(false); } }; @@ -206,17 +235,56 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** * {@inheritDoc} */ - public void actionPerformed(ActionEvent e) { - /* TODO */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + TreePath selectedPath = fileTree.getSelectionPath(); + if (selectedPath == null) { + logger.log(Level.WARNING, "nothing selected!"); + return; + } + ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) selectedPath.getLastPathComponent(); + if (isHidden(projectFileWrapper)) { + /* TODO - i18n */ + JOptionPane.showMessageDialog(FileManager.this, I18n.get(""), I18n.get(""), JOptionPane.ERROR_MESSAGE); + return; + } + if (projectFileWrapper.getProjectFile().isDirectory()) { + /* TODO - i18n */ + JOptionPane.showMessageDialog(FileManager.this, I18n.get(""), I18n.get(""), JOptionPane.ERROR_MESSAGE); + return; + } + String completePath = projectFileWrapper.getProjectFile().getCompletePath(); + 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(); + } + }; + applyMimeTypeOverrideAction = new I18nAction("fileManager.menu.item.applyMimeTypeOverride") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + applyMimeTypeOverride(); + } + }; + removeOverrideAction = new I18nAction("fileManager.menu.item.removeOverride") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + removeOverride(); } }; } @@ -227,8 +295,14 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr private void initComponents() { treeContextMenu = new JPopupMenu(); treeContextMenu.add(setDefaultFileAction); - insertCheckBoxMenuItem = new JCheckBoxMenuItem(insertAction); - treeContextMenu.add(insertCheckBoxMenuItem); + + overrideMenu = new I18nMenu("fileManager.menu.override"); + treeContextMenu.add(overrideMenu); + + overrideMenu.add(applyInsertOverrideAction); + overrideMenu.add(applyMimeTypeOverrideAction); + overrideMenu.addSeparator(); + overrideMenu.add(removeOverrideAction); JPanel contentPanel = new JPanel(new BorderLayout(12, 12)); contentPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); @@ -257,7 +331,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr fileTree.addMouseListener(this); fileTree.setCellRenderer(fileCellRenderer); fileTreePanel.add(fileScrollPane = new JScrollPane(fileTree), BorderLayout.CENTER); - fileScrollPane.setPreferredSize(new Dimension(250, 400)); + fileScrollPane.setPreferredSize(new Dimension(200, 350)); projectFilesLabel = new I18nLabel("fileManager.label.projectFiles", fileTree); JPanel projectFilesLabelPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); @@ -272,6 +346,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr JPanel propertiesPanel = new JPanel(new GridBagLayout()); rightPanel.add(propertiesPanel, BorderLayout.CENTER); propertiesPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(12, 12, 12, 12))); + propertiesPanel.setPreferredSize(new Dimension(400, 350)); filePropertiesLabel = new I18nLabel("fileManager.label.fileProperties"); filePropertiesLabel.setFont(filePropertiesLabel.getFont().deriveFont(Font.BOLD)); @@ -295,8 +370,13 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr 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. */ + 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)); + /* glue panel. */ - propertiesPanel.add(new JPanel(), new GridBagConstraints(0, 4, 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, 7, 2, 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)); @@ -361,13 +441,130 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr if (!mouseEvent.isPopupTrigger()) { return; } - Point eventLocation = mouseEvent.getPoint(); - TreePath clickedPath = fileTree.getPathForLocation(eventLocation.x, eventLocation.y); - if (clickedPath == null) { + List 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 (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); + } + overrideMenu.setVisible(selectedProjectFileWrappers.size() > 1); + treeContextMenu.show(fileTree, mouseEvent.getX(), mouseEvent.getY()); + } + + /** + * Finds whether the {@link ProjectFile} given by + * projectFileWrapper is hidden. + * + * @param projectFileWrapper + * The wrapped project file + * @return true if the file is hidden and should not be + * inserted, false otherwise + */ + private boolean isHidden(ProjectFileWrapper projectFileWrapper) { + 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()))); + } + + /** + * Opens the “apply insert override” dialog and lets the user apply an + * override for the “insert” setting for multiple files. + */ + private void applyInsertOverride() { + JCheckBox insertCheckBox = new JCheckBox(I18n.get("fileManager.checkbox.insertFile.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); + logger.log(Level.FINEST, "choice: " + choice); + if ((choice == JOptionPane.CLOSED_OPTION) || (choice == 1)) { return; } - fileTree.setSelectionPath(clickedPath); - treeContextMenu.show(fileTree, eventLocation.x, eventLocation.y); + logger.log(Level.INFO, "selected insert override: " + insertCheckBox.isSelected()); + List selectedProjectFileWrappers = getSelectedProjectFileWrappers(true); + for (ProjectFileWrapper selectedProjectFileWrapper : selectedProjectFileWrappers) { + ProjectFile projectFile = selectedProjectFileWrapper.getProjectFile(); + FileOverride fileOverride = project.getFileOverride(projectFile); + if (fileOverride == null) { + fileOverride = new FileOverride(); + project.addFileOverride(projectFile, fileOverride); + } + fileOverride.setInsert(insertCheckBox.isSelected()); + } + } + + /** + * Opens the “apply mime type override” dialog and lets the user apply an + * override for the “mime type” setting for multiple files. + */ + private void applyMimeTypeOverride() { + List allMimeTypes = MimeTypes.getAllMimeTypes(); + allMimeTypes.add(0, null); + JComboBox mimeTypeComboBox = new JComboBox(allMimeTypes.toArray()); + 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.mimeTypeOverride.message"), mimeTypeComboBox }, I18n.get("fileManager.dialog.mimeTypeOverride.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[] { okString, cancelString }, okString); + if ((choice == JOptionPane.CLOSED_OPTION) || (choice == 1)) { + return; + } + logger.log(Level.FINE, "selected mime type: " + mimeTypeComboBox.getSelectedItem()); + List selectedProjectFileWrappers = getSelectedProjectFileWrappers(true); + for (ProjectFileWrapper selectedProjectFileWrapper : selectedProjectFileWrappers) { + ProjectFile projectFile = selectedProjectFileWrapper.getProjectFile(); + FileOverride fileOverride = project.getFileOverride(projectFile); + if (fileOverride == null) { + fileOverride = new FileOverride(); + project.addFileOverride(projectFile, fileOverride); + } + fileOverride.setContentType((String) mimeTypeComboBox.getSelectedItem()); + } + } + + /** + * Removes the overrides of all selected files. + */ + private void removeOverride() { + String continueString = I18n.get("general.button.continue.name"); + String cancelString = I18n.get("general.button.cancel.name"); + List selectedProjectFileWrappers = getSelectedProjectFileWrappers(true); + int choice = JOptionPane.showOptionDialog(this, I18n.get("fileManager.dialog.removeOverride.message", selectedProjectFileWrappers.size()), I18n.get("fileManager.dialog.removeOverride.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, new Object[] { continueString, cancelString }, continueString); + if ((choice == JOptionPane.CLOSED_OPTION) || (choice == 1)) { + return; + } + for (ProjectFileWrapper selectedProjectFileWrapper : selectedProjectFileWrappers) { + project.removeFileOverride(selectedProjectFileWrapper.getProjectFile()); + } + } + + /** + * Returns all currently selected {@link ProjectFileWrapper}s. + * + * @param filesOnly + * true to return only selected files, + * false to include directories + * @return All selected project file wrappers + */ + private List getSelectedProjectFileWrappers(boolean filesOnly) { + List selectedProjectFileWrappers = new ArrayList(); + TreePath[] selectedPaths = fileTree.getSelectionPaths(); + if (selectedPaths != null) { + for (TreePath selectedPath : selectedPaths) { + ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) selectedPath.getLastPathComponent(); + if (filesOnly && !projectFileWrapper.getProjectFile().isFile()) { + continue; + } + selectedProjectFileWrappers.add(projectFileWrapper); + } + } + return selectedProjectFileWrappers; } // @@ -393,7 +590,10 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr */ public void valueChanged(TreeSelectionEvent treeSelectionEvent) { TreePath[] selectedPaths = fileTree.getSelectionPaths(); - if (selectedPaths.length == 1) { + 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!"); @@ -402,9 +602,18 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) lastPathComponent; 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)); + } fileNameTextField.setText(projectFile.getName()); fileSizeTextField.setText(String.valueOf(projectFile.getSize())); } + } else if ((selectedPaths != null) && (selectedPaths.length > 1)) { + /* TODO */ } } @@ -492,15 +701,26 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) value; ProjectFile projectFile = projectFileWrapper.getProjectFile(); String completePath = projectFile.getCompletePath(); - if (projectFile.isHidden()) { + boolean paintBold = false; + boolean paintHalfColor = false; + if (projectFile.isFile() && projectFile.isHidden()) { /* TODO - check override */ + paintHalfColor = true; + } else if (completePath.equals(project.getDefaultFile())) { + paintBold = true; + } else if (projectFile.getParents().size() == 1) { + paintBold = true; + } + if (paintHalfColor) { + /* TODO - cache colors */ Color foreground = superCellRenderer.getForeground(); Color background = selected ? getBackgroundSelectionColor() : getBackgroundNonSelectionColor(); Color averageColor = new Color((foreground.getRed() + background.getRed()) / 2, (foreground.getGreen() + background.getGreen()) / 2, (foreground.getBlue() + background.getBlue()) / 2); superCellRenderer.setForeground(averageColor); - } else if (completePath.equals(project.getDefaultFile())) { - superCellRenderer.setFont(superCellRenderer.getFont().deriveFont(Font.BOLD)); - } else if (projectFile.getParents().size() == 1) { + } else { + superCellRenderer.setForeground(selected ? getTextSelectionColor() : getTextNonSelectionColor()); + } + if (paintBold) { superCellRenderer.setFont(superCellRenderer.getFont().deriveFont(Font.BOLD)); } else { superCellRenderer.setFont(superCellRenderer.getFont().deriveFont(Font.PLAIN)); @@ -515,7 +735,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> */ - private class ProjectFileTreeModel implements TreeModel { + private class ProjectFileTreeModel implements TreeModel, PropertyChangeListener { /** Tree model listeners. */ private final List treeModelListeners = Collections.synchronizedList(new ArrayList()); @@ -523,6 +743,9 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /** The base project file. */ private ProjectFile baseProjectFile; + /** Maps path names to project files. */ + private final Map pathProjectFiles = Collections.synchronizedMap(new HashMap()); + /** Maps project files to wrappers. */ private final Map projectFileWrappers = Collections.synchronizedMap(new HashMap()); @@ -552,6 +775,27 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr } /** + * Notifies all listeners that a node has changed. + * + * @param changedProjectFileWrapper + * The wrapper around the changed project file + */ + protected void fireTreeNodesChanged(ProjectFileWrapper changedProjectFileWrapper) { + ProjectFile changedProjectFile = changedProjectFileWrapper.getProjectFile(); + ProjectFile changedProjectFileParent = changedProjectFile.getParent(); + ProjectFile currentProjectFileParent = changedProjectFile; + List parentProjectFileWrappers = new ArrayList(); + do { + parentProjectFileWrappers.add(0, projectFileWrappers.get(currentProjectFileParent)); + currentProjectFileParent = currentProjectFileParent.getParent(); + } while (currentProjectFileParent != null); + TreeModelEvent treeModelEvent = new TreeModelEvent(this, parentProjectFileWrappers.toArray(), new int[] { getIndexOfChild(projectFileWrappers.get(changedProjectFileParent), changedProjectFileWrapper) }, new Object[] { changedProjectFileWrapper }); + for (TreeModelListener treeModelListener : treeModelListeners) { + treeModelListener.treeNodesChanged(treeModelEvent); + } + } + + /** * Notifies all listeners that the tree structure has changed * significantly. * @@ -559,7 +803,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr * @param newRootNode */ protected void fireTreeStructureChanged(ProjectFileWrapper newRootNode) { - for (TreeModelListener treeModelListener: treeModelListeners) { + for (TreeModelListener treeModelListener : treeModelListeners) { treeModelListener.treeStructureChanged(new TreeModelEvent(this, new Object[] { newRootNode })); } } @@ -578,6 +822,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr public synchronized void setBaseProjectFile(ProjectFile baseProjectFile) { this.baseProjectFile = baseProjectFile; projectFileWrappers.clear(); + pathProjectFiles.clear(); createWrappers(baseProjectFile); projectFileWrappers.get(baseProjectFile).setNameOverride(project.getName()); fireTreeStructureChanged(projectFileWrappers.get(baseProjectFile)); @@ -597,11 +842,13 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr */ private void createWrappers(ProjectFile projectFile) { projectFileWrappers.put(projectFile, new ProjectFileWrapper(projectFile)); - for (ProjectFile projectFileChild: projectFile.getFiles()) { + pathProjectFiles.put(projectFile.getCompletePath(), projectFile); + for (ProjectFile projectFileChild : projectFile.getFiles()) { if (projectFileChild.isDirectory()) { createWrappers(projectFileChild); } projectFileWrappers.put(projectFileChild, new ProjectFileWrapper(projectFileChild)); + pathProjectFiles.put(projectFileChild.getCompletePath(), projectFileChild); } } @@ -672,8 +919,7 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr return true; } ProjectFileWrapper projectFileWrapper = (ProjectFileWrapper) node; - ProjectFile projectFile = projectFileWrapper.getProjectFile(); - return projectFile.getFiles().isEmpty(); + return projectFileWrapper.getProjectFile().isFile(); } /** @@ -683,6 +929,33 @@ public class FileManager extends JDialog implements I18nable, ActionListener, Tr /* ignore, items will not be modified in tree. */ } + // + // INTERFACE PropertyChangeListener + // + + /** + * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) + */ + @SuppressWarnings("synthetic-access") + public void propertyChange(PropertyChangeEvent propertyChangeEvent) { + if (Project.PROPERTY_DEFAULT_FILE.equals(propertyChangeEvent.getPropertyName())) { + if (propertyChangeEvent.getOldValue() != null) { + String oldCompletePath = (String) propertyChangeEvent.getOldValue(); + ProjectFile oldProjectFile = pathProjectFiles.get(oldCompletePath); + ProjectFileWrapper oldProjectFileWrapper = projectFileWrappers.get(oldProjectFile); + System.out.println("oldProjectFileWrapper: " + oldProjectFileWrapper); + fireTreeNodesChanged(oldProjectFileWrapper); + } + String newCompletePath = (String) propertyChangeEvent.getNewValue(); + ProjectFile newProjectFile = pathProjectFiles.get(newCompletePath); + ProjectFileWrapper newProjectFileWrapper = projectFileWrappers.get(newProjectFile); + System.out.println("newProjectFileWrapper: " + newProjectFileWrapper); + fireTreeNodesChanged(newProjectFileWrapper); + /* HACK - swing sucks a bit. */ + fileTree.setShowsRootHandles(false); + } + } + } /**