summaryrefslogtreecommitdiff
path: root/cmpcj/src/de/schwarzrot/control/support/TreeCellEditor.java
blob: b436207822616496f052642fc9d43a0a6b3ef4c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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;
}