[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