1 | |
package org.jtheque.primary.view.impl.models.tree; |
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | |
|
19 | |
import org.jdesktop.swingx.event.WeakEventListenerList; |
20 | |
|
21 | |
import javax.swing.event.TreeModelEvent; |
22 | |
import javax.swing.event.TreeModelListener; |
23 | |
import javax.swing.tree.TreeModel; |
24 | |
import javax.swing.tree.TreePath; |
25 | |
|
26 | |
|
27 | |
|
28 | |
|
29 | |
|
30 | |
|
31 | 0 | public final class JThequeTreeModel implements TreeModel { |
32 | |
private TreeElement root; |
33 | |
private final WeakEventListenerList listeners; |
34 | |
|
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
|
40 | |
public JThequeTreeModel(TreeElement root){ |
41 | 0 | super(); |
42 | |
|
43 | 0 | this.root = root; |
44 | 0 | listeners = new WeakEventListenerList(); |
45 | 0 | } |
46 | |
|
47 | |
|
48 | |
|
49 | |
|
50 | |
|
51 | |
|
52 | |
public void setRootElement(TreeElement root){ |
53 | 0 | this.root = root; |
54 | |
|
55 | 0 | fireTreeStructureChanged(root); |
56 | 0 | } |
57 | |
|
58 | |
@Override |
59 | |
public Object getChild(Object parent, int index){ |
60 | 0 | TreeElement element = (TreeElement) parent; |
61 | |
|
62 | 0 | if (element.isRoot() || element.isCategory()){ |
63 | 0 | return element.getChild(index); |
64 | |
} else { |
65 | 0 | assert element.isLeaf() : "Element must be one of (root, category, tree"; |
66 | |
|
67 | 0 | return null; |
68 | |
} |
69 | |
} |
70 | |
|
71 | |
@Override |
72 | |
public int getChildCount(Object parent){ |
73 | 0 | TreeElement element = (TreeElement) parent; |
74 | |
|
75 | 0 | return element.getChildCount(); |
76 | |
} |
77 | |
|
78 | |
@Override |
79 | |
public int getIndexOfChild(Object parent, Object child){ |
80 | 0 | TreeElement element = (TreeElement) parent; |
81 | |
|
82 | 0 | return element.indexOf((TreeElement) child); |
83 | |
} |
84 | |
|
85 | |
@Override |
86 | |
public TreeElement getRoot(){ |
87 | 0 | return root; |
88 | |
} |
89 | |
|
90 | |
@Override |
91 | |
public boolean isLeaf(Object node){ |
92 | 0 | TreeElement element = (TreeElement) node; |
93 | |
|
94 | 0 | return element.isLeaf(); |
95 | |
} |
96 | |
|
97 | |
|
98 | |
|
99 | |
|
100 | |
|
101 | |
|
102 | |
void fireTreeStructureChanged(TreeElement root){ |
103 | 0 | TreeModelEvent event = new TreeModelEvent(this, new TreeElement[]{root}); |
104 | |
|
105 | 0 | for (TreeModelListener tml : listeners.getListeners(TreeModelListener.class)){ |
106 | 0 | tml.treeStructureChanged(event); |
107 | |
} |
108 | 0 | } |
109 | |
|
110 | |
@Override |
111 | |
public void addTreeModelListener(TreeModelListener listener){ |
112 | 0 | listeners.add(TreeModelListener.class, listener); |
113 | 0 | } |
114 | |
|
115 | |
@Override |
116 | |
public void removeTreeModelListener(TreeModelListener listener){ |
117 | 0 | listeners.remove(TreeModelListener.class, listener); |
118 | 0 | } |
119 | |
|
120 | |
@Override |
121 | |
public void valueForPathChanged(TreePath arg0, Object arg1){ |
122 | |
|
123 | 0 | } |
124 | |
} |