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); + } +}