import javax.swing.BorderFactory;
import javax.swing.JButton;
-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.JScrollPane;
+import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
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.project.Project;
-import net.pterodactylus.util.io.MimeTypes;
import net.pterodactylus.util.logging.Logging;
import net.pterodactylus.util.swing.SortableTreeNode;
import net.pterodactylus.util.swing.SwingUtils;
/** The scroll pane that holds the file tree. */
private JScrollPane fileScrollPane;
- /** The “insert” action. */
- private I18nAction insertAction;
+ /** The “file properties” label. */
+ private I18nLabel filePropertiesLabel;
- /** The “insert” checkbox. */
- private JCheckBox insertCheckBox;
+ /** The “file path” label. */
+ private I18nLabel filePathLabel;
- /** The “use custom mime type” action. */
- private I18nAction useCustomMimeTypeAction;
+ /** The “file path” textfield. */
+ private JTextField filePathTextField;
- /** The “use custom mime type” checkbox. */
- private JCheckBox useCustomMimeTypeCheckBox;
+ /** The “file name” label. */
+ private I18nLabel fileNameLabel;
- /** The “mime type” combo box. */
- private JComboBox mimeTypeComboBox;
+ /** The “file name” textfield. */
+ private JTextField fileNameTextField;
+
+ /** The “file size” label. */
+ private I18nLabel fileSizeLabel;
+
+ /** The “file size” text field. */
+ private JTextField fileSizeTextField;
/**
* Creates a new file manager.
initiateFileScan();
}
};
- insertAction = new I18nAction("fileManager.checkbox.insertFile") {
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("synthetic-access")
- public void actionPerformed(ActionEvent actionEvent) {
- /* TODO */
- }
- };
- insertAction.setEnabled(false);
- useCustomMimeTypeAction = new I18nAction("fileManager.checkbox.useCustomMimeType") {
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("synthetic-access")
- public void actionPerformed(ActionEvent actionEvent) {
- /* TODO */
- }
- };
- useCustomMimeTypeAction.setEnabled(false);
}
/**
rightPanel.add(propertiesPanel, BorderLayout.CENTER);
propertiesPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(12, 12, 12, 12)));
- insertCheckBox = new JCheckBox(insertAction);
- propertiesPanel.add(insertCheckBox, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
+ 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));
- useCustomMimeTypeCheckBox = new JCheckBox(useCustomMimeTypeAction);
- List<String> allMimeTypes = MimeTypes.getAllMimeTypes();
- mimeTypeComboBox = new JComboBox(allMimeTypes.toArray(new String[0]));
- mimeTypeComboBox.setEnabled(false);
- mimeTypeComboBox.addActionListener(this);
- propertiesPanel.add(useCustomMimeTypeCheckBox, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(6, 0, 0, 0), 0, 0));
- propertiesPanel.add(mimeTypeComboBox, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(6, 6, 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(new JPanel(), new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 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));
+
+ 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));
+
+ /* glue panel. */
+ propertiesPanel.add(new JPanel(), new GridBagConstraints(0, 3, 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));
});
}
+ /**
+ * Returns the complete path for the given node.
+ *
+ * @param treeNode
+ * The node
+ * @return The complete path for the node, or the empty string (“”) for the
+ * root node
+ */
+ private String getPathForNode(TreeNode treeNode) {
+ TreeNode[] pathToNode = fileTreeModel.getPathToRoot(treeNode);
+ StringBuilder completePathBuilder = new StringBuilder();
+ boolean first = true;
+ for (TreeNode nodePathNode : pathToNode) {
+ if (first) {
+ first = false;
+ continue;
+ }
+ if (!(nodePathNode instanceof SortableTreeNode)) {
+ logger.log(Level.WARNING, "nodePathNode is not a SortableTreeNode!");
+ continue;
+ }
+ completePathBuilder.append(File.separatorChar).append(((SortableTreeNode) nodePathNode).getUserObject());
+ }
+ String completePath = (completePathBuilder.length() == 0) ? "" : completePathBuilder.substring(1);
+ return completePath;
+ }
+
//
// INTERFACE I18nable
//
*/
public void updateI18n() {
setTitle(I18n.get("fileManager.title", project.getName()));
+ projectFilesLabel.updateI18n();
+ filePropertiesLabel.updateI18n();
+ filePathLabel.updateI18n();
}
//
* {@inheritDoc}
*/
public void valueChanged(TreeSelectionEvent treeSelectionEvent) {
- /* TODO */
+ TreePath[] selectedPaths = fileTree.getSelectionPaths();
+ if ((selectedPaths != null) && (selectedPaths.length == 1)) {
+ Object lastPathComponent = selectedPaths[0].getLastPathComponent();
+ if (!(lastPathComponent instanceof SortableTreeNode)) {
+ logger.log(Level.WARNING, "lastPathComponent is not a SortableTreeNode!");
+ return;
+ }
+ SortableTreeNode node = (SortableTreeNode) lastPathComponent;
+ String completePath = getPathForNode(node);
+ int lastSeparator = completePath.lastIndexOf(File.separatorChar);
+ String filePath = "";
+ String fileName;
+ if (lastSeparator == -1) {
+ fileName = completePath;
+ } else {
+ filePath = completePath.substring(0, lastSeparator);
+ fileName = completePath.substring(lastSeparator + 1);
+ }
+ filePathTextField.setText(filePath);
+ fileNameTextField.setText(fileName);
+ return;
+ }
+ filePathTextField.setText("");
+ fileNameTextField.setText("");
}
//
SortableTreeNode node = (SortableTreeNode) value;
TreeNode[] pathToRoot = fileTreeModel.getPathToRoot(node);
if (pathToRoot.length > 1) {
- StringBuilder completePathBuilder = new StringBuilder();
- boolean first = true;
- for (TreeNode rootPathNode : pathToRoot) {
- if (first) {
- first = false;
- continue;
- }
- if (!(rootPathNode instanceof SortableTreeNode)) {
- logger.log(Level.WARNING, "rootPathNode is not a SortableTreeNode!");
- continue;
- }
- completePathBuilder.append(File.separatorChar).append(((SortableTreeNode) rootPathNode).getUserObject());
- }
- String completePath = completePathBuilder.substring(1);
+ String completePath = getPathForNode(node);
if (project.getDefaultFile().equals(completePath)) {
superCellRenderer.setFont(superCellRenderer.getFont().deriveFont(Font.BOLD));
} else {