restored API of CheckboxTreeBase

This commit is contained in:
nik
2014-08-03 17:01:42 +04:00
parent bb8c124ab7
commit 91db954d35
2 changed files with 41 additions and 17 deletions
@@ -28,6 +28,9 @@ import javax.swing.tree.TreeNode;
import java.awt.*;
public class CheckboxTreeBase extends Tree {
private final CheckboxTreeHelper myHelper;
private final EventDispatcher<CheckboxTreeListener> 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<CheckboxTreeListener> 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) {
}
@@ -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();