You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by tv...@apache.org on 2009/09/22 00:02:10 UTC
svn commit: r817432 - in /incubator/pivot/trunk:
tutorials/src/org/apache/pivot/tutorials/ wtk/src/org/apache/pivot/wtk/
wtk/src/org/apache/pivot/wtk/skin/terra/
Author: tvolkert
Date: Mon Sep 21 22:02:10 2009
New Revision: 817432
URL: http://svn.apache.org/viewvc?rev=817432&view=rev
Log:
PIVOT-303 :: Added disabled checkmark filter to tree view
Modified:
incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/KitchenSink.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeViewListener.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTreeViewSkin.java
Modified: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/KitchenSink.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/KitchenSink.java?rev=817432&r1=817431&r2=817432&view=diff
==============================================================================
--- incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/KitchenSink.java (original)
+++ incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/KitchenSink.java Mon Sep 21 22:02:10 2009
@@ -641,6 +641,13 @@
return include;
}
});
+
+ checkTreeView.setDisabledCheckmarkFilter(new Filter<TreeNode>() {
+ @Override
+ public boolean include(TreeNode treeNode) {
+ return (treeNode instanceof TreeBranch);
+ }
+ });
}
return Vote.APPROVE;
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java?rev=817432&r1=817431&r2=817432&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeView.java Mon Sep 21 22:02:10 2009
@@ -433,11 +433,20 @@
}
@Override
- public void disabledNodeFilterChanged(TreeView treeView, Filter<?> previousDisabledNodeFilter) {
+ public void disabledNodeFilterChanged(TreeView treeView,
+ Filter<?> previousDisabledNodeFilter) {
for (TreeViewListener listener : this) {
listener.disabledNodeFilterChanged(treeView, previousDisabledNodeFilter);
}
}
+
+ @Override
+ public void disabledCheckmarkFilterChanged(TreeView treeView,
+ Filter<?> previousDisabledCheckmarkFilter) {
+ for (TreeViewListener listener : this) {
+ listener.disabledCheckmarkFilterChanged(treeView, previousDisabledCheckmarkFilter);
+ }
+ }
}
/**
@@ -955,8 +964,9 @@
private boolean checkmarksEnabled = false;
private boolean showMixedCheckmarkState = false;
- // Disabled node filter
+ // Filters
private Filter<?> disabledNodeFilter = null;
+ private Filter<?> disabledCheckmarkFilter = null;
// Handlers
private BranchHandler rootBranchHandler;
@@ -1734,6 +1744,45 @@
}
/**
+ * Returns the disabled checkmark filter, which determines which checkboxes
+ * are interactive and which are not. Note that this filter only affects
+ * user interaction; nodes may still be checked programatically despite
+ * their inclusion in this filter. If this filter is set to <tt>null</tt>,
+ * all checkboxes will be interactive.
+ * <p>
+ * <b>Note:</b> this filter is only relavent if
+ * {@link #setCheckmarksEnabled(boolean) checkmarksEnabled} is set to true.
+ *
+ * @return
+ * The disabled checkmark filter, or <tt>null</tt> if no disabled checkmark
+ * filter is set
+ */
+ public Filter<?> getDisabledCheckmarkFilter() {
+ return disabledCheckmarkFilter;
+ }
+
+ /**
+ * Sets the disabled node filter, which determines the disabled state of
+ * all nodes. Disabled nodes are not interactive to the user. Note, however,
+ * that disabled nodes may still be expanded, selected, and checked
+ * <i>programatically</i>. A disabled node may have enabled children.
+ * <p>
+ * If the disabled node filter is set to <tt>null</tt>, all nodes are
+ * enabled.
+ *
+ * @param disabledNodeFilter
+ * The disabled node filter, or <tt>null</tt> for no disabled node filter
+ */
+ public void setDisabledCheckmarkFilter(Filter<?> disabledCheckmarkFilter) {
+ Filter<?> previousDisabledCheckmarkFilter = this.disabledCheckmarkFilter;
+
+ if (previousDisabledCheckmarkFilter !=disabledCheckmarkFilter ) {
+ this.disabledCheckmarkFilter = disabledCheckmarkFilter;
+ treeViewListeners.disabledCheckmarkFilterChanged(this, previousDisabledCheckmarkFilter);
+ }
+ }
+
+ /**
* Sets the expansion state of the specified branch. If the branch already
* has the specified expansion state, nothing happens.
*
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeViewListener.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeViewListener.java?rev=817432&r1=817431&r2=817432&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeViewListener.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/TreeViewListener.java Mon Sep 21 22:02:10 2009
@@ -32,7 +32,8 @@
}
@Override
- public void nodeRendererChanged(TreeView treeView, TreeView.NodeRenderer previousNodeRenderer) {
+ public void nodeRendererChanged(TreeView treeView,
+ TreeView.NodeRenderer previousNodeRenderer) {
}
@Override
@@ -52,7 +53,13 @@
}
@Override
- public void disabledNodeFilterChanged(TreeView treeView, Filter<?> previousDisabledNodeFilter) {
+ public void disabledNodeFilterChanged(TreeView treeView,
+ Filter<?> previousDisabledNodeFilter) {
+ }
+
+ @Override
+ public void disabledCheckmarkFilterChanged(TreeView treeView,
+ Filter<?> previousDisabledCheckmarkFilter) {
}
}
@@ -109,4 +116,13 @@
* @param previousDisabledNodeFilter
*/
public void disabledNodeFilterChanged(TreeView treeView, Filter<?> previousDisabledNodeFilter);
+
+ /**
+ * Called when a tree view's disabled checkmark filter has changed.
+ *
+ * @param treeView
+ * @param previousDisabledCheckmarkFilter
+ */
+ public void disabledCheckmarkFilterChanged(TreeView treeView,
+ Filter<?> previousDisabledCheckmarkFilter);
}
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTreeViewSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTreeViewSkin.java?rev=817432&r1=817431&r2=817432&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTreeViewSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTreeViewSkin.java Mon Sep 21 22:02:10 2009
@@ -54,16 +54,16 @@
TreeViewNodeStateListener, TreeViewSelectionListener{
/**
- * Callback that can be executed on a node info object.
+ * Node info visitor interface.
*/
- protected interface NodeInfoCallback {
+ protected interface NodeInfoVisitor {
/**
- * Called to execute this callback on the specified node info.
+ * Visits the specified node info.
*
* @param nodeInfo
- * The object on which to execute this callback
+ * The object to visit
*/
- public void run(NodeInfo nodeInfo);
+ public void visit(NodeInfo nodeInfo);
}
/**
@@ -95,10 +95,12 @@
public static final byte HIGHLIGHTED_MASK = 1 << 0;
public static final byte SELECTED_MASK = 1 << 1;
public static final byte DISABLED_MASK = 1 << 2;
- public static final byte CHECK_STATE_CHECKED_MASK = 1 << 3;
- public static final byte CHECK_STATE_MIXED_MASK = 1 << 4;
+ public static final byte CHECKMARK_DISABLED_MASK = 1 << 3;
+ public static final byte CHECK_STATE_CHECKED_MASK = 1 << 4;
+ public static final byte CHECK_STATE_MIXED_MASK = 1 << 5;
- public static final byte CHECK_STATE_MASK = CHECK_STATE_CHECKED_MASK | CHECK_STATE_MIXED_MASK;
+ public static final byte CHECK_STATE_MASK = CHECK_STATE_CHECKED_MASK
+ | CHECK_STATE_MIXED_MASK;
@SuppressWarnings("unchecked")
public NodeInfo(TreeView treeView, BranchInfo parent, Object data) {
@@ -109,11 +111,19 @@
depth = (parent == null) ? 0 : parent.depth + 1;
// Newly created nodes are guaranteed to not be selected or checked,
- // but they may be disabled, so we set that flag appropriately here
+ // but they may be disabled or have their checkmarks disabled, so
+ // we set those flags appropriately here.
+
Filter<Object> disabledNodeFilter = (Filter<Object>)treeView.getDisabledNodeFilter();
if (disabledNodeFilter != null) {
setDisabled(disabledNodeFilter.include(data));
}
+
+ Filter<Object> disabledCheckmarkFilter = (Filter<Object>)
+ treeView.getDisabledCheckmarkFilter();
+ if (disabledCheckmarkFilter != null) {
+ setCheckmarkDisabled(disabledCheckmarkFilter.include(data));
+ }
}
@SuppressWarnings("unchecked")
@@ -182,6 +192,18 @@
}
}
+ public boolean isCheckmarkDisabled() {
+ return ((fields & CHECKMARK_DISABLED_MASK) != 0);
+ }
+
+ public void setCheckmarkDisabled(boolean checkmarkDisabled) {
+ if (checkmarkDisabled) {
+ fields |= CHECKMARK_DISABLED_MASK;
+ } else {
+ fields &= ~CHECKMARK_DISABLED_MASK;
+ }
+ }
+
public TreeView.NodeCheckState getCheckState() {
TreeView.NodeCheckState checkState;
@@ -230,7 +252,7 @@
// Core skin metadata
protected List<NodeInfo> children = null;
- public static final byte EXPANDED_MASK = 1 << 5;
+ public static final byte EXPANDED_MASK = 1 << 6;
public BranchInfo(TreeView treeView, BranchInfo parent, List<Object> data) {
super(treeView, parent, data);
@@ -543,6 +565,7 @@
}
CHECKBOX.setState(state);
+ CHECKBOX.setEnabled(!nodeInfo.isCheckmarkDisabled());
CHECKBOX.paint(checkboxGraphics);
checkboxGraphics.dispose();
@@ -564,7 +587,8 @@
if (showGridLines) {
graphics.setPaint(gridColor);
- GraphicsUtilities.drawLine(graphics, 0, nodeY + nodeHeight, width, Orientation.HORIZONTAL);
+ GraphicsUtilities.drawLine(graphics, 0, nodeY + nodeHeight, width,
+ Orientation.HORIZONTAL);
}
nodeY += nodeHeight + VERTICAL_SPACING;
@@ -1107,10 +1131,10 @@
* Executes the specified callback on all node info objects that exist in
* this skin's node info hierarchy.
*
- * @param nodeInfoCallback
+ * @param visitor
* The callback to execute on each node info object
*/
- protected final void propagateNodeInfoCallback(NodeInfoCallback nodeInfoCallback) {
+ protected final void accept(NodeInfoVisitor visitor) {
Sequence<NodeInfo> nodes = new ArrayList<NodeInfo>();
nodes.add(rootBranchInfo);
@@ -1118,7 +1142,7 @@
NodeInfo nodeInfo = nodes.get(0);
nodes.remove(0, 1);
- nodeInfoCallback.run(nodeInfo);
+ visitor.visit(nodeInfo);
if (nodeInfo instanceof BranchInfo) {
BranchInfo branchInfo = (BranchInfo)nodeInfo;
@@ -1316,9 +1340,9 @@
* The bitmask specifying which field to clear.
*/
private void clearFields(final byte mask) {
- propagateNodeInfoCallback(new NodeInfoCallback() {
+ accept(new NodeInfoVisitor() {
@Override
- public void run(NodeInfo nodeInfo) {
+ public void visit(NodeInfo nodeInfo) {
nodeInfo.clearField(mask);
}
});
@@ -1383,6 +1407,7 @@
// Only proceed if the user DIDN'T click on a checkbox
if (!treeView.getCheckmarksEnabled()
+ || nodeInfo.isCheckmarkDisabled()
|| x < nodeX + checkboxX
|| x >= nodeX + checkboxX + checkboxWidth
|| y < nodeY + checkboxY
@@ -1468,6 +1493,7 @@
int checkboxY = (nodeHeight - checkboxHeight) / 2;
if (treeView.getCheckmarksEnabled()
+ && !nodeInfo.isCheckmarkDisabled()
&& x >= nodeX + checkboxX
&& x < nodeX + checkboxX + checkboxWidth
&& y >= nodeY + checkboxY
@@ -1646,7 +1672,12 @@
Path selectedPath = treeView.getSelectedPath();
if (selectedPath != null) {
- treeView.setNodeChecked(selectedPath, !treeView.isNodeChecked(selectedPath));
+ NodeInfo nodeInfo = getNodeInfoAt(selectedPath);
+
+ if (!nodeInfo.isCheckmarkDisabled()) {
+ treeView.setNodeChecked(selectedPath,
+ !treeView.isNodeChecked(selectedPath));
+ }
}
}
} else {
@@ -1801,9 +1832,9 @@
public void disabledNodeFilterChanged(TreeView treeView, Filter<?> previousDisabledNodeFilter) {
final Filter<Object> disabledNodeFilter = (Filter<Object>)treeView.getDisabledNodeFilter();
- propagateNodeInfoCallback(new NodeInfoCallback() {
+ accept(new NodeInfoVisitor() {
@Override
- public void run(NodeInfo nodeInfo) {
+ public void visit(NodeInfo nodeInfo) {
nodeInfo.setDisabled(disabledNodeFilter != null
&& disabledNodeFilter.include(nodeInfo.data));
}
@@ -1812,6 +1843,24 @@
repaintComponent();
}
+ @Override
+ @SuppressWarnings("unchecked")
+ public void disabledCheckmarkFilterChanged(TreeView treeView,
+ Filter<?> previousDisabledCheckmarkFilter) {
+ final Filter<Object> disabledCheckmarkFilter = (Filter<Object>)
+ treeView.getDisabledCheckmarkFilter();
+
+ accept(new NodeInfoVisitor() {
+ @Override
+ public void visit(NodeInfo nodeInfo) {
+ nodeInfo.setCheckmarkDisabled(disabledCheckmarkFilter != null
+ && disabledCheckmarkFilter.include(nodeInfo.data));
+ }
+ });
+
+ repaintComponent();
+ }
+
// TreeViewBranchListener methods
@Override