Skip to content
This repository has been archived by the owner on Mar 15, 2023. It is now read-only.

Commit

Permalink
Remember last selected node and last expanded nodes.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacob van Mourik committed Jul 22, 2015
1 parent 9eaa5f2 commit 67c2dbf
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 21 deletions.
58 changes: 46 additions & 12 deletions src/main/java/com/jvms/i18neditor/Editor.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
Expand All @@ -14,6 +15,7 @@
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import javax.swing.BorderFactory;
import javax.swing.Box;
Expand Down Expand Up @@ -368,10 +370,7 @@ private void setupResource(Resource resource) {
private void setup() {
setTitle(TITLE);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

setPreferredSize(new Dimension(
settings.getIntegerProperty("window_width", 1024),
settings.getIntegerProperty("window_height", 768)));
addWindowListener(new EditorWindowListener());

setIconImages(Lists.newArrayList(
getResourceImage("images/icon-512.png"),
Expand Down Expand Up @@ -405,28 +404,63 @@ private void setup() {
contentPane.add(editorMenu, BorderLayout.NORTH);
contentPane.add(contentPanel);

restoreEditorState();
}

private Image getResourceImage(String path) {
return new ImageIcon(getClass().getClassLoader().getResource(path)).getImage();
}

private void restoreEditorState() {
// Restore window bounds
setPreferredSize(new Dimension(
settings.getIntegerProperty("window_width", 1024),
settings.getIntegerProperty("window_height", 768)));
pack();

if (settings.containsKey("window_pos_x") && settings.containsKey("window_pos_y")) {
setLocation(settings.getIntegerProperty("window_pos_x"),
settings.getIntegerProperty("window_pos_y"));
} else {
setLocationRelativeTo(null);
}

addWindowListener(new EditorWindowListener());
}

private Image getResourceImage(String path) {
return new ImageIcon(getClass().getClassLoader().getResource(path)).getImage();
EventQueue.invokeLater(() -> {
List<String> expandedKeys = settings.getListProperty("last_expanded");
String selectedKey = settings.getProperty("last_selected");

// Restore last expanded nodes
List<TranslationTreeNode> expandedNodes = expandedKeys.stream()
.map(k -> translationTree.getNodeByKey(k))
.filter(n -> n != null)
.collect(Collectors.toList());
translationTree.expand(expandedNodes);

// Restore last selected node
TranslationTreeNode selectedNode = translationTree.getNodeByKey(selectedKey);
if (selectedNode != null) {
translationTree.setSelectedNode(selectedNode);
}
});
}

private void storeWindowState() {
private void storeEditorState() {
// Store window bounds
settings.setProperty("window_width", getWidth());
settings.setProperty("window_height", getHeight());
settings.setProperty("window_pos_x", getX());
settings.setProperty("window_pos_y", getY());
settings.setProperty("divider_pos", contentPanel.getDividerLocation());

// Store keys of expanded nodes
List<String> expandedNodeKeys = translationTree.getExpandedNodes().stream()
.map(n -> n.getKey())
.collect(Collectors.toList());
settings.setProperty("last_expanded", expandedNodeKeys);

// Store key of selected node
TranslationTreeNode selectedNode = translationTree.getSelectedNode();
settings.setProperty("last_selected", selectedNode == null ? "" : selectedNode.getKey());

settings.store(SETTINGS_PATH);
}

Expand Down Expand Up @@ -468,7 +502,7 @@ private class EditorWindowListener extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
if (closeCurrentSession()) {
storeWindowState();
storeEditorState();
System.exit(0);
}
}
Expand Down
35 changes: 26 additions & 9 deletions src/main/java/com/jvms/i18neditor/TranslationTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ public void expandAll() {
}
}

public void expand(List<TranslationTreeNode> nodes) {
nodes.forEach(n -> expandPath(new TreePath(n.getPath())));
}

public TranslationTreeNode addNodeByKey(String key) {
TranslationTreeModel model = (TranslationTreeModel) getModel();
TranslationTreeNode node = model.getNodeByKey(key);
Expand Down Expand Up @@ -87,20 +91,33 @@ public TranslationTreeNode getNodeByKey(String key) {
return model.getNodeByKey(key);
}

public void renameNodeByKey(String key, String newKey) {
TranslationTreeModel model = (TranslationTreeModel) getModel();
TranslationTreeNode oldNode = model.getNodeByKey(key);
TranslationTreeNode newNode = model.getNodeByKey(newKey);
// Store expansion state of old tree
public List<TranslationTreeNode> getExpandedNodes() {
TranslationTreeNode node = (TranslationTreeNode) getModel().getRoot();
return getExpandedNodes(node);
}

public List<TranslationTreeNode> getExpandedNodes(TranslationTreeNode node) {
List<TranslationTreeNode> expandedNodes = Lists.newLinkedList();
Enumeration<TreePath> expandedChilds = getExpandedDescendants(new TreePath(oldNode.getPath()));
Enumeration<TreePath> expandedChilds = getExpandedDescendants(new TreePath(node.getPath()));
if (expandedChilds != null) {
while (expandedChilds.hasMoreElements()) {
TreePath path = expandedChilds.nextElement();
expandedNodes.add((TranslationTreeNode) path.getLastPathComponent());
TranslationTreeNode expandedNode = (TranslationTreeNode) path.getLastPathComponent();
if (!expandedNode.isRoot()) { // do not return the root node
expandedNodes.add(expandedNode);
}
}
}
return expandedNodes;
}

public void renameNodeByKey(String key, String newKey) {
TranslationTreeModel model = (TranslationTreeModel) getModel();
TranslationTreeNode oldNode = model.getNodeByKey(key);
TranslationTreeNode newNode = model.getNodeByKey(newKey);

// Store expansion state of old tree
List<TranslationTreeNode> expandedNodes = getExpandedNodes(oldNode);

// Remove old and any existing new tree
model.removeNodeFromParent(oldNode);
Expand All @@ -114,7 +131,7 @@ public void renameNodeByKey(String key, String newKey) {
model.insertNodeInto(oldNode, parent);

// Restore expansion state
expandedNodes.forEach(n -> expandPath(new TreePath(n.getPath())));
expand(expandedNodes);

// Restore selected node
setSelectedNode(oldNode);
Expand Down

0 comments on commit 67c2dbf

Please sign in to comment.