Author: rwhitcomb
Date: Wed Jun 22 14:53:20 2011
New Revision: 1138493

URL: http://svn.apache.org/viewvc?rev=1138493&view=rev
Log:
Adds a trivial extension to the possible cell editors for a TableView to 
support tri-state checkboxes. 

This is logged as JIRA PIVOT-763.

Basically this makes some generalizations to TableViewBooleanCellRenderer, 
renames it to
TableViewCheckboxCellRenderer and then creates two trivial subclasses:
TableViewBooleanCellRenderer (which does nothing beyond what the base class 
does) and
TableViewTriStateCellRenderer (which simply makes the Checkbox of the base 
class into
a tristate checkbox).


Added:
    
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCheckboxCellRenderer.java
    
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTriStateCellRenderer.java
Modified:
    
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java

Modified: 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java?rev=1138493&r1=1138492&r2=1138493&view=diff
==============================================================================
--- 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java
 (original)
+++ 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewBooleanCellRenderer.java
 Wed Jun 22 14:53:20 2011
@@ -16,76 +16,13 @@
  */
 package org.apache.pivot.wtk.content;
 
-import org.apache.pivot.json.JSON;
-import org.apache.pivot.wtk.Checkbox;
-import org.apache.pivot.wtk.BoxPane;
-import org.apache.pivot.wtk.HorizontalAlignment;
-import org.apache.pivot.wtk.TableView;
-import org.apache.pivot.wtk.VerticalAlignment;
-
 /**
  * Default renderer for table view cells that contain boolean data. Renders
  * cell contents as a checkbox.
  */
-public class TableViewBooleanCellRenderer extends BoxPane
-    implements TableView.CellRenderer {
-    private Checkbox checkbox = new Checkbox();
-    private boolean checkboxDisabled = false;
-
+public class TableViewBooleanCellRenderer extends TableViewCheckboxCellRenderer
+{
     public TableViewBooleanCellRenderer() {
-        add(checkbox);
-
-        getStyles().put("padding", 3);
-        getStyles().put("verticalAlignment", VerticalAlignment.CENTER);
-        getStyles().put("horizontalAlignment", HorizontalAlignment.CENTER);
-    }
-
-    @Override
-    public void setSize(int width, int height) {
-        super.setSize(width, height);
-
-        // Since this component doesn't have a parent, it won't be validated
-        // via layout; ensure that it is valid here
-        validate();
-    }
-
-    @Override
-    public void render(Object row, int rowIndex, int columnIndex,
-        TableView tableView, String columnName,
-        boolean selected, boolean highlighted, boolean disabled) {
-        if (row != null) {
-            boolean checkboxSelected = false;
-
-            // Get the row and cell data
-            if (columnName != null) {
-                Object cellData = JSON.get(row, columnName);
-
-                if (cellData instanceof String) {
-                    cellData = Boolean.parseBoolean((String)cellData);
-                }
-
-                if (cellData instanceof Boolean) {
-                    checkboxSelected = (Boolean)cellData;
-                } else {
-                    System.err.println("Data for \"" + columnName + "\" is not 
an instance of "
-                        + Boolean.class.getName());
-                }
-            }
-
-            checkbox.setSelected(checkboxSelected);
-            checkbox.setEnabled(!checkboxDisabled && tableView.isEnabled() && 
!disabled);
-        }
-    }
-
-    public String toString(Object row, String columnName) {
-        return null;
-    }
-
-    public boolean isCheckboxDisabled() {
-        return checkboxDisabled;
-    }
-
-    public void setCheckboxDisabled(boolean checkboxDisabled) {
-        this.checkboxDisabled = checkboxDisabled;
+        super();
     }
 }

Added: 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCheckboxCellRenderer.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCheckboxCellRenderer.java?rev=1138493&view=auto
==============================================================================
--- 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCheckboxCellRenderer.java
 (added)
+++ 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewCheckboxCellRenderer.java
 Wed Jun 22 14:53:20 2011
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.wtk.content;
+
+import org.apache.pivot.wtk.Button;
+import org.apache.pivot.wtk.Checkbox;
+import org.apache.pivot.wtk.BoxPane;
+import org.apache.pivot.wtk.HorizontalAlignment;
+import org.apache.pivot.wtk.TableView;
+import org.apache.pivot.wtk.VerticalAlignment;
+
+/**
+ * Default renderer for table view cells that contain boolean data. Renders
+ * cell contents as a checkbox.
+ */
+public class TableViewCheckboxCellRenderer extends BoxPane
+    implements TableView.CellRenderer {
+    protected Checkbox checkbox = new Checkbox();
+    private boolean checkboxDisabled = false;
+
+    public TableViewCheckboxCellRenderer() {
+        add(checkbox);
+
+        getStyles().put("padding", 3);
+        getStyles().put("verticalAlignment", VerticalAlignment.CENTER);
+        getStyles().put("horizontalAlignment", HorizontalAlignment.CENTER);
+    }
+
+    @Override
+    public void setSize(int width, int height) {
+        super.setSize(width, height);
+
+        // Since this component doesn't have a parent, it won't be validated
+        // via layout; ensure that it is valid here
+        validate();
+    }
+
+    @Override
+    public void render(Object row, int rowIndex, int columnIndex,
+        TableView tableView, String columnName,
+        boolean selected, boolean highlighted, boolean disabled) {
+        if (row != null) {
+            // Get the row and cell data
+            if (columnName != null) {
+                if (checkbox.isTriState()) {
+                    checkbox.setStateKey(columnName);
+                } else {
+                    checkbox.setSelectedKey(columnName);
+                }
+                checkbox.load(row);
+            } else {
+                checkbox.setState(Button.State.UNSELECTED);
+            }
+            checkbox.setEnabled(!checkboxDisabled && tableView.isEnabled() && 
!disabled);
+        }
+    }
+
+    public String toString(Object row, String columnName) {
+        return null;
+    }
+
+    public boolean isCheckboxDisabled() {
+        return checkboxDisabled;
+    }
+
+    public void setCheckboxDisabled(boolean checkboxDisabled) {
+        this.checkboxDisabled = checkboxDisabled;
+    }
+}

Added: 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTriStateCellRenderer.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTriStateCellRenderer.java?rev=1138493&view=auto
==============================================================================
--- 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTriStateCellRenderer.java
 (added)
+++ 
pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TableViewTriStateCellRenderer.java
 Wed Jun 22 14:53:20 2011
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.wtk.content;
+
+/**
+ * Default renderer for table view cells that contain tri-state data. Renders
+ * cell contents as a tri-state checkbox.
+ */
+public class TableViewTriStateCellRenderer extends 
TableViewCheckboxCellRenderer
+{
+    public TableViewTriStateCellRenderer() {
+        super();
+        checkbox.setTriState(true);
+    }
+}


Reply via email to