From 509dcae57fd4cb1e5aaeeb725f1ad54daf35f0c3 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 24 May 2011 14:03:10 +0000
Subject: [PATCH] Table editing GUI suggestions

SVN: 21470
---
 .../application/IGenericImageBundle.java      |   3 ++
 .../web/client/application/editable.gif       | Bin 0 -> 952 bytes
 .../ui/grid/AbstractBrowserGrid.java          |  21 +++++++++
 .../ui/grid/ColumnDefsAndConfigs.java         |  40 +++++++++++++++++-
 .../application/ui/grid/ExtendedGridView.java |   2 -
 5 files changed, 63 insertions(+), 3 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/editable.gif

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IGenericImageBundle.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IGenericImageBundle.java
index 06713418a4a..10d99e1d660 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IGenericImageBundle.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/IGenericImageBundle.java
@@ -52,5 +52,8 @@ public interface IGenericImageBundle extends ClientBundle
      */
     @Source("home.png")
     public ImageResource getHomeIcon();
+    
+    @Source("editable.gif")
+    public ImageResource getEditableIcon();
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/editable.gif b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/editable.gif
new file mode 100644
index 0000000000000000000000000000000000000000..502700a4f5ea1da4c584239342415af6414cb6bd
GIT binary patch
literal 952
zcmV;p14sNvNk%w1VGsZi0QUd@0000G2oMkx5E~;MAQ&JZAP_J#5FsQZFElzZC?GH@
zG%+$WJUT}pIA9<&a5+IcDM4r=KyffgU_dx9T}B#EP%uM7L`h9kO;$`vQ&~_*Ku}0f
zQBqSvS8`KaWKDHTQDRV6a93VtYg}!0U|3*bepGO1P-SLiZg*&Qer|MhbRal@AV7d1
zNRTi{fHY8pF;kH+SfD^ykU&_VKwyAHVV6>Am`7%#KxME@aH3dttWa>UZFhuVaFB3!
zhG2N0V0f@VXuwc#z)*P5V0gegf;T_WcR+?bMT0_5oJdiWOi;X8SE+kokyvAkVPuJR
zYnf<gqgr6FR&1<gYrkN5rDk`oa(ujUO4Vmw(`-QhKx*4|bjE0Y%X4?uc3+5}On|LN
zg0NqyuXllldWM!}fUjqRw{D8Rb%msMjJapLyi=LRP=w%Jr^sHg(`1FhaEQQum&kmV
z(`lu_YqrU6!-8zlkaOOGan_n`#I#`8rhmn~deN_S$;+2*HIQ*PyLT~%YEu6I0FZ!S
zguQ;Iig2KqaI}|dpr}x=uuz7@b&<z<$dM_>mRr%5PS2%N*rr+Tw|W2n0KmXdz`$_o
z!f5o^Yxdz@;O21o<6-#acJT0UgNB8Uk&c9uo|cxDikPT@le3VRtCyyTnxUzerMIA<
zfUK>psJo}Vy}f{#z?G-Om#fm6ve})u=%cQ|sJ6+axYVM%;EKb9gV=$R%!!cGgqzlq
zoZFRz%e9KzyN&9doZ`Kt$cUlWiKW(+wcePl*QT%4y|BozwBDew*S(_Ro2T!wtnjtF
z;ia_iwT{8bi_6!L&D)sO*{i_csMpJ;+1Ihd*|gflwcggL?#a65!?)<v$f}9YxQWKK
zk<zY+*|dk)z=+t!lhD|Jz{sG&+ojORpv~v6&F8b$?6=(TzU|G8?8lno)tmOuru5pl
z@Zf;@=%WAdu*Js3&C=4@+RNA2*uc*2!O-Wx(D2IX(9`YC*Y4EX^26oy#`NIA{p{TE
z_`vAs=<)IKA^8LW003G5EC2ui01yBW000P;0JR7lNU)&6g9YO#T*y%2je&9gNt{S=
z-a~;A=UJ?GqaMeO7qw*U=#gYei2rWP^H{Q8j&0l^Vf?qTWxR9f_^oRslBUIt@6xry
zsg7IEl`P>2)no~h(VjP=-XOK~Ql&#EHP(CQt(_*T+d@W+N-A5ouayc}gvj#HK1Ylm
aVbds9>K}EH00oj7k{|^?jkFyM2mm`$_5v&b

literal 0
HcmV?d00001

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
index 2291b301327..a5643e9982d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
@@ -40,6 +40,7 @@ import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.Events;
 import com.extjs.gxt.ui.client.event.GridEvent;
 import com.extjs.gxt.ui.client.event.Listener;
+import com.extjs.gxt.ui.client.event.MenuEvent;
 import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
 import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.store.ListStore;
@@ -63,6 +64,7 @@ import com.extjs.gxt.ui.client.widget.layout.FitLayout;
 import com.extjs.gxt.ui.client.widget.layout.RowData;
 import com.extjs.gxt.ui.client.widget.layout.RowLayout;
 import com.extjs.gxt.ui.client.widget.menu.Menu;
+import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
 import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
 import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
@@ -289,6 +291,25 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                     {
                         menu.remove(menu.getItem(2));
                     }
+                    final int columnIndex = ge.getColIndex();
+                    ColumnConfig column = ge.getGrid().getColumnModel().getColumn(columnIndex);
+                    final String dataIndex = column.getDataIndex();
+                    if (column.getEditor() != null)
+                    {
+                        MenuItem item = new MenuItem("edit");
+                        item.addSelectionListener(new SelectionListener<MenuEvent>()
+                            {
+                                @Override
+                                public void componentSelected(MenuEvent ce)
+                                {
+                                    List<M> selectedItems =
+                                            grid.getSelectionModel().getSelectedItems();
+                                    MessageBox.info("edit", "edit column '" + dataIndex + "' "
+                                            + columnIndex + "\n" + selectedItems, null);
+                                }
+                            });
+                        menu.add(item);
+                    }
                 }
             });
         if (viewContext.getModel().isEmbeddedMode())
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
index b28d19015c9..718ea33e72c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
@@ -22,11 +22,24 @@ import java.util.List;
 import java.util.Set;
 
 import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
+import com.extjs.gxt.ui.client.event.ButtonEvent;
+import com.extjs.gxt.ui.client.event.SelectionListener;
+import com.extjs.gxt.ui.client.util.Margins;
+import com.extjs.gxt.ui.client.widget.Label;
+import com.extjs.gxt.ui.client.widget.LayoutContainer;
+import com.extjs.gxt.ui.client.widget.MessageBox;
+import com.extjs.gxt.ui.client.widget.button.Button;
 import com.extjs.gxt.ui.client.widget.form.TextField;
 import com.extjs.gxt.ui.client.widget.grid.CellEditor;
 import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
 import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
+import com.extjs.gxt.ui.client.widget.layout.HBoxLayout;
+import com.extjs.gxt.ui.client.widget.layout.HBoxLayout.HBoxLayoutAlign;
+import com.extjs.gxt.ui.client.widget.layout.HBoxLayoutData;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.AbstractImagePrototype;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IGenericImageBundle;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionUI;
@@ -38,6 +51,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
  */
 public class ColumnDefsAndConfigs<T>
 {
+    private static final IGenericImageBundle IMAGE_BUNDLE = GWT.<IGenericImageBundle> create(IGenericImageBundle.class);
+
     private final List<ColumnConfig> columnConfigs;
 
     private final Set<IColumnDefinition<T>> columnDefs;
@@ -102,7 +117,8 @@ public class ColumnDefsAndConfigs<T>
         final ColumnConfig columnConfig = new ColumnConfig();
         columnConfig.setSortable(true);
         columnConfig.setId(column.getIdentifier());
-        columnConfig.setHeader(column.getHeader());
+        final String headerTitle = column.getHeader();
+        columnConfig.setHeader(headerTitle);
         if (column.isNumeric())
         {
             columnConfig.setAlignment(HorizontalAlignment.RIGHT);
@@ -113,8 +129,11 @@ public class ColumnDefsAndConfigs<T>
         }
         columnConfig.setWidth(column.getWidth());
         columnConfig.setHidden(column.isHidden());
+        String toolTip = "[Click] to sort, [SHIFT+Click] to adjust the width, "
+            + "[Drag & Drop] to change order.";
         if (column.isEditable())
         {
+            toolTip += " This is an editibale column. Just double-click on a cell or on the header icon.";
             CellEditor editor = new CellEditor(new TextField<String>()
                 {
                     @Override
@@ -124,7 +143,26 @@ public class ColumnDefsAndConfigs<T>
                     }
                 });
             columnConfig.setEditor(editor);
+            LayoutContainer header = new LayoutContainer();
+            HBoxLayout layout = new HBoxLayout();  
+            layout.setHBoxLayoutAlign(HBoxLayoutAlign.TOP);  
+            header.setLayout(layout);  
+            AbstractImagePrototype editIcon =
+                AbstractImagePrototype.create(IMAGE_BUNDLE.getEditableIcon());
+            Button editButton = new Button("", editIcon);
+            editButton.addSelectionListener(new SelectionListener<ButtonEvent>()
+                {
+                    @Override
+                    public void componentSelected(ButtonEvent ce)
+                    {
+                        MessageBox.info("Edit", "Editing for column " + headerTitle + " not yet implemented.", null);
+                    }
+                });
+            header.add(new Label(headerTitle), new HBoxLayoutData(new Margins(0, 0, 0, 0)));
+            header.add(editButton, new HBoxLayoutData(new Margins(0, 0, 0, 3)));
+            columnConfig.setWidget(header, headerTitle);
         }
+        columnConfig.setToolTip(toolTip);
         return columnConfig;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java
index 5b306bdc335..65802c784f1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java
@@ -67,8 +67,6 @@ class ExtendedGridView extends GridView
             };
         header.setSplitterWidth(splitterWidth);
         header.setMinColumnWidth(grid.getMinColumnWidth());
-        header.setTitle("[Click] to sort, [SHIFT+Click] to adjust the width, "
-                + "[Drag & Drop] to change order");
         return header;
     }
 
-- 
GitLab