summaryrefslogtreecommitdiff
path: root/cmpcj/src/de/schwarzrot/control/support
diff options
context:
space:
mode:
Diffstat (limited to 'cmpcj/src/de/schwarzrot/control/support')
-rw-r--r--cmpcj/src/de/schwarzrot/control/support/TreeCellEditor.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/cmpcj/src/de/schwarzrot/control/support/TreeCellEditor.java b/cmpcj/src/de/schwarzrot/control/support/TreeCellEditor.java
new file mode 100644
index 0000000..b436207
--- /dev/null
+++ b/cmpcj/src/de/schwarzrot/control/support/TreeCellEditor.java
@@ -0,0 +1,52 @@
+package de.schwarzrot.control.support;
+
+
+import java.util.List;
+import javax.swing.JTree;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellEditor;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import de.schwarzrot.media.domain.AbstractMediaNode;
+import de.schwarzrot.media.domain.Genre;
+
+
+public class TreeCellEditor extends DefaultTreeCellEditor implements CellEditorListener {
+ public TreeCellEditor(JTree tree, List<AbstractMediaNode> changes) {
+ super(tree, (DefaultTreeCellRenderer) tree.getCellRenderer());
+ this.changes = changes;
+ addCellEditorListener(this);
+ }
+
+
+ @Override
+ public void editingCanceled(ChangeEvent e) {
+ System.out.println("editing cancelled");
+ }
+
+
+ @Override
+ public void editingStopped(ChangeEvent e) {
+ System.out.println("editing stopped");
+ Genre genre = (Genre) editedNode.getUserObject();
+
+ genre.setName((String) editedValue);
+ if (!changes.contains(genre))
+ changes.add(genre);
+ }
+
+
+ @Override
+ public Object getCellEditorValue() {
+ editedValue = super.getCellEditorValue();
+ editedNode = (DefaultMutableTreeNode) lastPath.getLastPathComponent();
+ Genre genre = (Genre) editedNode.getUserObject();
+
+ return genre;
+ }
+
+ private Object editedValue;
+ private DefaultMutableTreeNode editedNode;
+ private List<AbstractMediaNode> changes;
+}