Lines 85-98
Link Here
|
85 |
* @param source source {@link TreeModel} - the data to show will be gathered from this model |
85 |
* @param source source {@link TreeModel} - the data to show will be gathered from this model |
86 |
* @param acceptor acceptor specifying whether the given original tree node should or should not |
86 |
* @param acceptor acceptor specifying whether the given original tree node should or should not |
87 |
* be visible for given user's filter |
87 |
* be visible for given user's filter |
|
|
88 |
* @param params params[0] is allowing to delegate tree model listeners to tree |
88 |
*/ |
89 |
*/ |
89 |
public void installFilteringModel(JTree tree, TreeModel source, Acceptor acceptor) { |
90 |
public void installFilteringModel(JTree tree, TreeModel source, Acceptor acceptor, Boolean... params) { |
90 |
if (!SwingUtilities.isEventDispatchThread()) { |
91 |
if (!SwingUtilities.isEventDispatchThread()) { |
91 |
throw new IllegalStateException("Not in AWT Event Dispatch Thread"); |
92 |
throw new IllegalStateException("Not in AWT Event Dispatch Thread"); |
92 |
} |
93 |
} |
93 |
|
94 |
|
94 |
usedCallback.run(); |
95 |
usedCallback.run(); |
95 |
tree.setModel(new FilteringTreeModel(source, doc, acceptor)); |
96 |
boolean delegatingTreeModelListeners = params.length > 0 ? params[0] : false; |
|
|
97 |
tree.setModel(new FilteringTreeModel(source, doc, acceptor, delegatingTreeModelListeners)); |
96 |
} |
98 |
} |
97 |
|
99 |
|
98 |
public interface Acceptor { |
100 |
public interface Acceptor { |
Lines 105-115
Link Here
|
105 |
private final Document filter; |
107 |
private final Document filter; |
106 |
private final Acceptor acceptor; |
108 |
private final Acceptor acceptor; |
107 |
private final Map<Object, List<Object>> category2Nodes = new HashMap<Object, List<Object>>(); |
109 |
private final Map<Object, List<Object>> category2Nodes = new HashMap<Object, List<Object>>(); |
|
|
110 |
private final boolean delegatingTreeModelListener; |
108 |
|
111 |
|
109 |
public FilteringTreeModel(TreeModel delegate, Document filter, Acceptor acceptor) { |
112 |
public FilteringTreeModel(TreeModel delegate, Document filter, Acceptor acceptor, boolean delegatingTreeModelListeners) { |
110 |
this.delegate = delegate; |
113 |
this.delegate = delegate; |
111 |
this.filter = filter; |
114 |
this.filter = filter; |
112 |
this.acceptor = acceptor; |
115 |
this.acceptor = acceptor; |
|
|
116 |
this.delegatingTreeModelListener = delegatingTreeModelListeners; |
113 |
|
117 |
|
114 |
this.delegate.addTreeModelListener(this); |
118 |
this.delegate.addTreeModelListener(this); |
115 |
this.filter.addDocumentListener(this); |
119 |
this.filter.addDocumentListener(this); |
Lines 156-168
Link Here
|
156 |
@Override |
160 |
@Override |
157 |
public synchronized void addTreeModelListener(TreeModelListener l) { |
161 |
public synchronized void addTreeModelListener(TreeModelListener l) { |
158 |
listeners.add(l); |
162 |
listeners.add(l); |
159 |
delegate.addTreeModelListener(l); |
163 |
if (delegatingTreeModelListener) { |
|
|
164 |
delegate.addTreeModelListener(l); |
165 |
} |
160 |
} |
166 |
} |
161 |
|
167 |
|
162 |
@Override |
168 |
@Override |
163 |
public synchronized void removeTreeModelListener(TreeModelListener l) { |
169 |
public synchronized void removeTreeModelListener(TreeModelListener l) { |
164 |
listeners.remove(l); |
170 |
listeners.remove(l); |
165 |
delegate.removeTreeModelListener(l); |
171 |
if (delegatingTreeModelListener) { |
|
|
172 |
delegate.removeTreeModelListener(l); |
173 |
} |
166 |
} |
174 |
} |
167 |
|
175 |
|
168 |
private synchronized Iterable<? extends TreeModelListener> getListeners() { |
176 |
private synchronized Iterable<? extends TreeModelListener> getListeners() { |