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 06713418a4a6d6fb8317ac5423981d2f10c34f99..10d99e1d660cc1e5f647c2f9fadeac414fef6c7f 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 Binary files /dev/null and b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/editable.gif differ 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 2291b30132704663ddeb02a0cf8d6667cc98206c..a5643e9982d4cd012aa05deb1e15e1bd9e78f481 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 b28d19015c933ca3976963df76a6c8dfb4d365b1..718ea33e72c79dbed5f8c60dacc4dfd12df317e5 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 5b306bdc3351f2f3b4ec0041f29f9405ebddbcab..65802c784f1310930b82e5a758820f83dd3def39 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; }