From 91db954d35983e32cd44dbe1125d71bf54e85bd2 Mon Sep 17 00:00:00 2001 From: nik Date: Sun, 3 Aug 2014 17:01:42 +0400 Subject: [PATCH] restored API of CheckboxTreeBase --- .../src/com/intellij/ui/CheckboxTreeBase.java | 36 ++++++++++++++++--- .../com/intellij/ui/CheckboxTreeHelper.java | 22 +++++------- 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java b/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java index 2788f3e8a84e..88f433f7c62a 100644 --- a/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java +++ b/platform/platform-api/src/com/intellij/ui/CheckboxTreeBase.java @@ -28,6 +28,9 @@ import javax.swing.tree.TreeNode; import java.awt.*; public class CheckboxTreeBase extends Tree { + private final CheckboxTreeHelper myHelper; + private final EventDispatcher myEventDispatcher; + public CheckboxTreeBase() { this(new CheckboxTreeCellRendererBase(), null); } @@ -37,8 +40,8 @@ public class CheckboxTreeBase extends Tree { } public CheckboxTreeBase(CheckboxTreeCellRendererBase cellRenderer, @Nullable CheckedTreeNode root, CheckPolicy checkPolicy) { - EventDispatcher eventDispatcher = EventDispatcher.create(CheckboxTreeListener.class); - eventDispatcher.addListener(new CheckboxTreeListener() { + myEventDispatcher = EventDispatcher.create(CheckboxTreeListener.class); + myEventDispatcher.addListener(new CheckboxTreeListener() { @Override public void mouseDoubleClicked(@NotNull CheckedTreeNode node) { onDoubleClick(node); @@ -54,8 +57,8 @@ public class CheckboxTreeBase extends Tree { CheckboxTreeBase.this.nodeStateWillChange(node); } }); - CheckboxTreeHelper helper = new CheckboxTreeHelper(checkPolicy, eventDispatcher); - helper.initTree(this, this, cellRenderer); + myHelper = new CheckboxTreeHelper(checkPolicy, myEventDispatcher); + myHelper.initTree(this, this, cellRenderer); setSelectionRow(0); if (root != null) { @@ -68,6 +71,31 @@ public class CheckboxTreeBase extends Tree { setCellRenderer(cellRenderer); } + /** + * @deprecated use {@link #setNodeState} to change node state or subscribe to {@link #addCheckboxTreeListener} to get notifications about state changes + */ + @Deprecated + protected boolean toggleNode(CheckedTreeNode node) { + setNodeState(node, !node.isChecked()); + return node.isChecked(); + } + + /** + * @deprecated use {@link #setNodeState} to change node state or subscribe to {@link #addCheckboxTreeListener} to get notifications about state changes + */ + @Deprecated + protected void checkNode(CheckedTreeNode node, boolean checked) { + setNodeState(node, checked); + } + + public void setNodeState(@NotNull CheckedTreeNode node, boolean checked) { + myHelper.setNodeState(this, node, checked); + } + + public void addCheckboxTreeListener(@NotNull CheckboxTreeListener listener) { + myEventDispatcher.addListener(listener); + } + protected void onDoubleClick(final CheckedTreeNode node) { } diff --git a/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java b/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java index f0f703bcc414..3048d131caa7 100644 --- a/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java +++ b/platform/platform-api/src/com/intellij/ui/CheckboxTreeHelper.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; @@ -59,24 +58,21 @@ class CheckboxTreeHelper { setupMouseListener(tree, mainComponent, cellRenderer); } - private boolean toggleNode(Tree tree, CheckedTreeNode node) { - boolean checked = !node.isChecked(); - checkNode(tree, node, checked); + public void setNodeState(Tree tree, CheckedTreeNode node, boolean checked) { + changeNodeState(node, checked); + adjustParentsAndChildren(node, checked); + tree.repaint(); // notify model listeners about model change final TreeModel model = tree.getModel(); model.valueForPathChanged(new TreePath(node.getPath()), node.getUserObject()); - - return checked; } - private void checkNode(Tree tree, CheckedTreeNode node, boolean checked) { - adjustParentsAndChildren(node, checked); - tree.repaint(); + private void toggleNode(Tree tree, CheckedTreeNode node) { + setNodeState(tree, node, !node.isChecked()); } private void adjustParentsAndChildren(final CheckedTreeNode node, final boolean checked) { - changeNodeState(node, checked); if (!checked) { if (myCheckPolicy.uncheckParentWithUncheckedChild) { TreeNode parent = node.getParent(); @@ -147,7 +143,8 @@ class CheckboxTreeHelper { final Object o = treePath.getLastPathComponent(); if (!(o instanceof CheckedTreeNode)) return; CheckedTreeNode firstNode = (CheckedTreeNode)o; - boolean checked = toggleNode(tree, firstNode); + toggleNode(tree, firstNode); + boolean checked = firstNode.isChecked(); TreePath[] selectionPaths = tree.getSelectionPaths(); for (int i = 0; selectionPaths != null && i < selectionPaths.length; i++) { @@ -155,8 +152,7 @@ class CheckboxTreeHelper { final Object o1 = selectionPath.getLastPathComponent(); if (!(o1 instanceof CheckedTreeNode)) continue; CheckedTreeNode node = (CheckedTreeNode)o1; - checkNode(tree, node, checked); - ((DefaultTreeModel)tree.getModel()).nodeChanged(node); + setNodeState(tree, node, checked); } e.consume();