private float leftColumnWidth, prefWidth, prefHeight;\r
private boolean sizeInvalid = true;\r
boolean multiSelect = true;\r
+ boolean toggleSelect;\r
private Node foundNode;\r
Node overNode;\r
private ClickListener clickListener;\r
selectNodes(rootNodes, high, low);\r
else\r
selectNodes(rootNodes, low, high);\r
- ChangeEvent changeEvent = Pools.obtain(ChangeEvent.class);\r
- fire(changeEvent);\r
- Pools.free(changeEvent);\r
+ fireChangeEvent();\r
return;\r
}\r
if (!multiSelect || (!Gdx.input.isKeyPressed(Keys.CONTROL_LEFT) && !Gdx.input.isKeyPressed(Keys.CONTROL_RIGHT))) {\r
}\r
}\r
if (!node.isSelectable()) return;\r
+ boolean unselect = toggleSelect && selectedNodes.size == 1 && selectedNodes.contains(node, true);\r
selectedNodes.clear();\r
+ if (unselect) {\r
+ fireChangeEvent();\r
+ return;\r
+ }\r
} else if (!node.isSelectable()) //\r
return;\r
// Select single (ctrl).\r
if (!selectedNodes.removeValue(node, true)) selectedNodes.add(node);\r
- ChangeEvent changeEvent = Pools.obtain(ChangeEvent.class);\r
- fire(changeEvent);\r
- Pools.free(changeEvent);\r
+ fireChangeEvent();\r
}\r
\r
public boolean mouseMoved (InputEvent event, float x, float y) {\r
rootNodes.clear();\r
selectedNodes.clear();\r
setOverNode(null);\r
+ fireChangeEvent();\r
+ }\r
+\r
+ void fireChangeEvent () {\r
+ ChangeEvent changeEvent = Pools.obtain(ChangeEvent.class);\r
+ fire(changeEvent);\r
+ Pools.free(changeEvent);\r
}\r
\r
public Array<Node> getNodes () {\r
public void setSelection (Node node) {\r
selectedNodes.clear();\r
selectedNodes.add(node);\r
+ fireChangeEvent();\r
}\r
\r
public void setSelection (Array<Node> nodes) {\r
selectedNodes.clear();\r
selectedNodes.addAll(nodes);\r
+ fireChangeEvent();\r
}\r
\r
public void addSelection (Node node) {\r
selectedNodes.add(node);\r
+ fireChangeEvent();\r
}\r
\r
public void clearSelection () {\r
selectedNodes.clear();\r
+ fireChangeEvent();\r
}\r
\r
public TreeStyle getStyle () {\r
return prefHeight;\r
}\r
\r
+ public void findExpandedObjects (Array objects) {\r
+ findExpandedObjects(rootNodes, objects);\r
+ }\r
+\r
+ public void restoreExpandedObjects (Array objects) {\r
+ for (int i = 0, n = objects.size; i < n; i++) {\r
+ Node node = findNode(objects.get(i));\r
+ if (node != null) {\r
+ node.setExpanded(true);\r
+ node.expandTo();\r
+ }\r
+ }\r
+ }\r
+\r
+ static boolean findExpandedObjects (Array<Node> nodes, Array objects) {\r
+ boolean expanded = false;\r
+ for (int i = 0, n = nodes.size; i < n; i++) {\r
+ Node node = nodes.get(i);\r
+ if (node.expanded && !findExpandedObjects(node.children, objects)) objects.add(node.object);\r
+ }\r
+ return expanded;\r
+ }\r
+\r
/** Returns the node with the specified object, or null. */\r
public Node findNode (Object object) {\r
if (object == null) throw new IllegalArgumentException("object cannot be null.");\r
this.multiSelect = multiSelect;\r
}\r
\r
+ public void setToggleSelect (boolean toggleSelect) {\r
+ this.toggleSelect = toggleSelect;\r
+ }\r
+\r
static public class Node {\r
Actor actor;\r
Node parent;\r