[jboss-svn-commits] JBL Code SVN: r35737 - labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Oct 26 09:29:38 EDT 2010
Author: ge0ffrey
Date: 2010-10-26 09:29:38 -0400 (Tue, 26 Oct 2010)
New Revision: 35737
Added:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/ColumnPicker.java
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java
Log:
columnpicker prototype for celltable
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/ColumnPicker.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/ColumnPicker.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/ColumnPicker.java 2010-10-26 13:29:38 UTC (rev 35737)
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed 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.drools.guvnor.client.table;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.user.cellview.client.CellTable;
+import com.google.gwt.user.cellview.client.TextColumn;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.CheckBox;
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.ToggleButton;
+import com.google.gwt.user.client.ui.VerticalPanel;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ColumnPicker<T> {
+
+ private final CellTable<T> cellTable;
+ private List<ColumnMeta<T>> columnMetaList = new ArrayList<ColumnMeta<T>>();
+
+ public ColumnPicker(CellTable<T> cellTable) {
+ this.cellTable = cellTable;
+ }
+
+ public void addColumn(TextColumn<T> column, SortableHeader<T, ?> header, boolean visible) {
+ addColumn(new ColumnMeta<T>(column, header, visible));
+ }
+
+ private void addColumn(ColumnMeta<T> columnMeta) {
+ columnMetaList.add(columnMeta);
+ if (columnMeta.isVisible()) {
+ cellTable.addColumn(columnMeta.getColumn(), columnMeta.getHeader());
+ }
+ }
+
+ public ToggleButton createToggleButton() {
+ final ToggleButton button = new ToggleButton("KP");
+ final PopupPanel popup = new PopupPanel(true);
+ popup.addCloseHandler(new CloseHandler<PopupPanel>() {
+ public void onClose(CloseEvent<PopupPanel> popupPanelCloseEvent) {
+ button.setDown(false);
+ }
+ });
+ VerticalPanel popupContent = new VerticalPanel();
+ for (final ColumnMeta<T> columnMeta : columnMetaList) {
+ final CheckBox checkBox = new CheckBox();
+ checkBox.setName(columnMeta.getHeader().getValue());
+ checkBox.setValue(columnMeta.isVisible());
+ checkBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
+ public void onValueChange(ValueChangeEvent<Boolean> booleanValueChangeEvent) {
+ boolean visible = booleanValueChangeEvent.getValue();
+ if (visible) {
+ // WORKAROUND because CellTable does not support insertColumn at this time
+ for (ColumnMeta<T> resettingColumnMeta : columnMetaList) {
+ if (resettingColumnMeta.isVisible()) {
+ cellTable.removeColumn(resettingColumnMeta.getColumn());
+ }
+ }
+ columnMeta.setVisible(visible);
+ for (ColumnMeta<T> resettingColumnMeta : columnMetaList) {
+ if (resettingColumnMeta.isVisible()) {
+ cellTable.addColumn(resettingColumnMeta.getColumn(), resettingColumnMeta.getHeader());
+ }
+ }
+ } else {
+ columnMeta.setVisible(visible);
+ cellTable.removeColumn(columnMeta.getColumn());
+ }
+ }
+ });
+ popupContent.add(checkBox);
+ }
+ popup.add(popupContent);
+ button.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ if (button.isDown()) {
+ popup.setPopupPosition(button.getAbsoluteLeft(), button.getAbsoluteTop() + button.getOffsetHeight());
+ popup.show();
+ }
+ // Note: no need to hide the popup when clicked when down,
+ // because clicking anywhere outside the popup will hide the popup
+ }
+ });
+ return button;
+ }
+
+ private static class ColumnMeta<T> {
+ private TextColumn<T> column;
+ private SortableHeader<T, ?> header;
+ private boolean visible;
+
+ private ColumnMeta(TextColumn<T> column, SortableHeader<T, ?> header, boolean visible) {
+ this.column = column;
+ this.header = header;
+ this.visible = visible;
+ }
+
+ public TextColumn<T> getColumn() {
+ return column;
+ }
+
+ public void setColumn(TextColumn<T> column) {
+ this.column = column;
+ }
+
+ public SortableHeader<T, ?> getHeader() {
+ return header;
+ }
+
+ public void setHeader(SortableHeader<T, ?> header) {
+ this.header = header;
+ }
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+ }
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java 2010-10-26 13:19:22 UTC (rev 35736)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java 2010-10-26 13:29:38 UTC (rev 35737)
@@ -11,24 +11,23 @@
/**
* @author Geoffrey De Smet
*/
-public class SortableHeaderGroup<R extends Comparable> {
+public class SortableHeaderGroup<T extends Comparable> {
- private final CellTable<R> cellTable;
+ private final CellTable<T> cellTable;
// TODO change List into Deque after upgrade to java 6
- private List<SortableHeader<R, ?>> sortOrderList = new LinkedList<SortableHeader<R, ?>>();
+ private List<SortableHeader<T, ?>> sortOrderList = new LinkedList<SortableHeader<T, ?>>();
- public SortableHeaderGroup(CellTable<R> cellTable) {
-
+ public SortableHeaderGroup(CellTable<T> cellTable) {
this.cellTable = cellTable;
}
- public void headerClicked(SortableHeader<R, ?> header) {
+ public void headerClicked(SortableHeader<T, ?> header) {
updateSortOrder(header);
cellTable.redrawHeaders();
updateData();
}
- private void updateSortOrder(SortableHeader<R, ?> header) {
+ private void updateSortOrder(SortableHeader<T, ?> header) {
int index = sortOrderList.indexOf(header);
if (index == 0) {
if (header.getSortDirection() != SortDirection.ASCENDING) {
@@ -46,7 +45,7 @@
sortOrderList.add(0, header);
// Update sortIndexes
int sortIndex = 0;
- for (SortableHeader<R, ?> sortableHeader : sortOrderList) {
+ for (SortableHeader<T, ?> sortableHeader : sortOrderList) {
sortableHeader.setSortIndex(sortIndex);
sortIndex++;
}
@@ -55,16 +54,16 @@
private void updateData() {
// TODO If paging is used, this should be a back-end call with a sorting meta data parameter
- List<R> displayedItems = new ArrayList(cellTable.getDisplayedItems());
- Collections.sort(displayedItems, new Comparator<R>() {
- public int compare(R left, R right) {
- for (SortableHeader<R, ?> sortableHeader : sortOrderList) {
- Comparable leftValue = sortableHeader.getColumn().getValue(left);
- Comparable rightValue = sortableHeader.getColumn().getValue(right);
- int comparison = (leftValue == rightValue) ? 0
- : (leftValue == null) ? -1
- : (rightValue == null) ? 1
- : leftValue.compareTo(rightValue);
+ List<T> displayedItems = new ArrayList<T>(cellTable.getDisplayedItems());
+ Collections.sort(displayedItems, new Comparator<T>() {
+ public int compare(T leftRow, T rightRow) {
+ for (SortableHeader<T, ?> sortableHeader : sortOrderList) {
+ Comparable leftColumnValue = sortableHeader.getColumn().getValue(leftRow);
+ Comparable rightColumnValue = sortableHeader.getColumn().getValue(rightRow);
+ int comparison = (leftColumnValue == rightColumnValue) ? 0
+ : (leftColumnValue == null) ? -1
+ : (rightColumnValue == null) ? 1
+ : leftColumnValue.compareTo(rightColumnValue);
if (comparison != 0) {
switch (sortableHeader.getSortDirection()) {
case ASCENDING:
@@ -79,7 +78,7 @@
return comparison;
}
}
- return left.compareTo(right);
+ return leftRow.compareTo(rightRow);
}
});
cellTable.setRowData(0, displayedItems);
More information about the jboss-svn-commits
mailing list