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/10/05 19:09:49 UTC

svn commit: r821923 - in /incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk: ListView.java ListViewListener.java skin/terra/TerraListViewSkin.java skin/terra/TerraTreeViewSkin.java

Author: tvolkert
Date: Mon Oct  5 17:09:49 2009
New Revision: 821923

URL: http://svn.apache.org/viewvc?rev=821923&view=rev
Log:
PIVOT-303 :: Add disabled checkmark filter to list view

Modified:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTreeViewSkin.java

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java?rev=821923&r1=821922&r2=821923&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListView.java Mon Oct  5 17:09:49 2009
@@ -390,13 +390,22 @@
         }
 
         @Override
-        public void disabledItemFilterChanged(ListView listView, Filter<?> previousDisabledItemFilter) {
+        public void disabledItemFilterChanged(ListView listView,
+            Filter<?> previousDisabledItemFilter) {
             for (ListViewListener listener : this) {
                 listener.disabledItemFilterChanged(listView, previousDisabledItemFilter);
             }
         }
 
         @Override
+        public void disabledCheckmarkFilterChanged(ListView listView,
+            Filter<?> previousDisabledCheckmarkFilter) {
+            for (ListViewListener listener : this) {
+                listener.disabledCheckmarkFilterChanged(listView, previousDisabledCheckmarkFilter);
+            }
+        }
+
+        @Override
         public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
             for (ListViewListener listener : this) {
                 listener.selectedItemKeyChanged(listView, previousSelectedItemKey);
@@ -587,6 +596,7 @@
     private ArrayList<Integer> checkedIndexes = new ArrayList<Integer>();
 
     private Filter<?> disabledItemFilter = null;
+    private Filter<?> disabledCheckmarkFilter = null;
 
     private String selectedItemKey = null;
     private String selectedItemsKey = null;
@@ -1273,6 +1283,70 @@
     }
 
     /**
+     * Tells whether or not an item's checkmark is disabled.
+     *
+     * @param index
+     * The index of the item whose disabled checkmark state is to be tested.
+     *
+     * @return
+     * <tt>true</tt> if the item's checkmark is disabled; <tt>false</tt>
+     * otherwise.
+     */
+    @SuppressWarnings("unchecked")
+    public boolean isCheckmarkDisabled(int index) {
+        boolean disabled = false;
+
+        if (disabledCheckmarkFilter != null) {
+            Object item = listData.get(index);
+            disabled = ((Filter<Object>)disabledCheckmarkFilter).include(item);
+        }
+
+        return disabled;
+    }
+
+    /**
+     * Returns the disabled checkmark filter, which determines which checkboxes
+     * are interactive and which are not. Note that this filter only affects
+     * user interaction; items 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 checkmark filter, which determines which checkboxes
+     * are interactive and which are not. Note that this filter only affects
+     * user interaction; items 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.
+     * enabled.
+     *
+     * @param disabledCheckmarkFilter
+     * The disabled checkmark filter, or <tt>null</tt> for no disabled
+     * checkmark filter
+     */
+    public void setDisabledCheckmarkFilter(Filter<?> disabledCheckmarkFilter) {
+        Filter<?> previousDisabledCheckmarkFilter = this.disabledCheckmarkFilter;
+
+        if (previousDisabledCheckmarkFilter !=disabledCheckmarkFilter ) {
+            this.disabledCheckmarkFilter = disabledCheckmarkFilter;
+            listViewListeners.disabledCheckmarkFilterChanged(this, previousDisabledCheckmarkFilter);
+        }
+    }
+
+    /**
      * Returns an item's disabled state.
      *
      * @param index

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java?rev=821923&r1=821922&r2=821923&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ListViewListener.java Mon Oct  5 17:09:49 2009
@@ -48,7 +48,13 @@
         }
 
         @Override
-        public void disabledItemFilterChanged(ListView listView, Filter<?> previousDisabledItemFilter) {
+        public void disabledItemFilterChanged(ListView listView,
+            Filter<?> previousDisabledItemFilter) {
+        }
+
+        @Override
+        public void disabledCheckmarkFilterChanged(ListView listView,
+            Filter<?> previousDisabledCheckmarkFilter) {
         }
 
         @Override
@@ -108,6 +114,15 @@
     public void disabledItemFilterChanged(ListView listView, Filter<?> previousDisabledItemFilter);
 
     /**
+     * Called when a list view's disabled checkmark filter has changed.
+     *
+     * @param listView
+     * @param previousDisabledCheckmarkFilter
+     */
+    public void disabledCheckmarkFilterChanged(ListView listView,
+        Filter<?> previousDisabledCheckmarkFilter);
+
+    /**
      * Called when a list view's selected item key has changed.
      *
      * @param listView

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java?rev=821923&r1=821922&r2=821923&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java Mon Oct  5 17:09:49 2009
@@ -206,7 +206,7 @@
                     itemY + checkboxY, CHECKBOX.getWidth(), CHECKBOX.getHeight());
 
                 CHECKBOX.setSelected(checked);
-                CHECKBOX.setEnabled(!disabled);
+                CHECKBOX.setEnabled(!disabled && !listView.isCheckmarkDisabled(itemIndex));
                 CHECKBOX.paint(checkboxGraphics);
                 checkboxGraphics.dispose();
 
@@ -673,6 +673,7 @@
             int itemY = itemIndex * itemHeight;
 
             if (listView.getCheckmarksEnabled()
+                && !listView.isCheckmarkDisabled(itemIndex)
                 && x > checkboxPadding.left
                 && x < checkboxPadding.left + CHECKBOX.getWidth()
                 && y > itemY + checkboxPadding.top
@@ -790,8 +791,12 @@
                 if (listView.getCheckmarksEnabled()
                     && listView.getSelectMode() == ListView.SelectMode.SINGLE) {
                     int selectedIndex = listView.getSelectedIndex();
-                    listView.setItemChecked(selectedIndex, !listView.isItemChecked(selectedIndex));
-                    consumed = true;
+
+                    if (!listView.isCheckmarkDisabled(selectedIndex)) {
+                        listView.setItemChecked(selectedIndex,
+                            !listView.isItemChecked(selectedIndex));
+                        consumed = true;
+                    }
                 }
 
                 break;
@@ -848,6 +853,12 @@
     }
 
     @Override
+    public void disabledCheckmarkFilterChanged(ListView listView,
+        Filter<?> previousDisabledCheckmarkFilter) {
+        repaintComponent();
+    }
+
+    @Override
     public void selectedItemKeyChanged(ListView listView, String previousSelectedItemKey) {
         // No-op
     }

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=821923&r1=821922&r2=821923&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 Oct  5 17:09:49 2009
@@ -660,7 +660,7 @@
                 }
 
                 CHECKBOX.setState(state);
-                CHECKBOX.setEnabled(!nodeInfo.isCheckmarkDisabled());
+                CHECKBOX.setEnabled(!disabled && !nodeInfo.isCheckmarkDisabled());
                 CHECKBOX.paint(checkboxGraphics);
                 checkboxGraphics.dispose();