From 76acc90c1b4f82d8aa300205a6c5b0c7ea861a29 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Tue, 29 Mar 2011 09:23:43 +0000 Subject: [PATCH] [LMS-2061] automatically limit number of columns SVN: 20528 --- .../client/web/client/application/Dict.java | 8 +- .../client/application/ui/TypedTableGrid.java | 8 -- .../ui/grid/AbstractBrowserGrid.java | 81 ++++++++----------- .../cisd/openbis/public/common-dictionary.js | 9 +-- 4 files changed, 43 insertions(+), 63 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index a53549e31c7..440127ca756 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -826,6 +826,10 @@ public abstract class Dict public static final String GRID_COLUMN_HAS_FILTER_HEADER = "GRID_COLUMN_HAS_FILTER_HEADER"; + public static final String VISIBLE_COLUMNS_LIMITED_TITLE = "VISIBLE_COLUMNS_LIMITED_TITLE"; + + public static final String VISIBLE_COLUMNS_LIMITED_MSG = "VISIBLE_COLUMNS_LIMITED_MSG"; + public static final String TOO_MANY_VISIBLE_COLUMNS_TITLE = "TOO_MANY_VISIBLE_COLUMNS_TITLE"; public static final String TOO_MANY_VISIBLE_COLUMNS_MSG = "TOO_MANY_VISIBLE_COLUMNS_MSG"; @@ -870,9 +874,9 @@ public abstract class Dict public static final String REOPEN_LAST_TAB_ON_LOGIN_INFO = "reopen_last_tab_on_login_info"; public static final String SHOW_LAST_VISITS_LABEL = "show_last_visits_label"; - + public static final String SHOW_LAST_VISITS_INFO = "show_last_visits_info"; - + // // Help Info // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java index fcb4c744595..b502a7fc8b1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java @@ -411,16 +411,8 @@ public abstract class TypedTableGrid<T extends ISerializable> @Override protected void refresh() { - ignoreVisibleColumnsLimit = true; // WORKAROUND don't check limit of visible columns twice String gridDisplayTypeID = getGridDisplayTypeID(); refresh(gridDisplayTypeID.equals(currentGridDisplayTypeID) == false); - ignoreVisibleColumnsLimit = false; - } - - @Override - protected boolean isLimitVisibleColumnsEnabled() - { - return ignoreVisibleColumnsLimit == false; } @Override 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 a4707b493f7..a97ef58c1a1 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,7 +40,6 @@ 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.MessageBoxEvent; import com.extjs.gxt.ui.client.event.SelectionChangedEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; @@ -48,6 +47,8 @@ import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.Container; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.Info; +import com.extjs.gxt.ui.client.widget.InfoConfig; 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; @@ -223,8 +224,6 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod private ColumnModel fullColumnModel; - private boolean settingsDialogAlreadyOpen; - protected AbstractBrowserGrid(final IViewContext<ICommonClientServiceAsync> viewContext, String gridId, IDisplayTypeIDGenerator displayTypeIDGenerator) { @@ -1294,65 +1293,52 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod { fullColumnModel = columnModel; - int maxVisibleColumns = getWebClientConfiguration().getMaxVisibleColumns(); - int visibleColumnsCount = fullColumnModel.getColumnCount(true); - if (isLimitVisibleColumnsEnabled() && visibleColumnsCount > maxVisibleColumns) - { - limitVisibleColumns(maxVisibleColumns, visibleColumnsCount); - } else - { - int logId = log("grid reconfigure"); - ColumnModel columnModelOfVisible = trimToVisibleColumns(columnModel); - - grid.reconfigure(grid.getStore(), columnModelOfVisible); - viewContext.logStop(logId); - registerGridSettingsChangesListener(); - // add listeners of full column model to trimmed model - List<Listener<? extends BaseEvent>> listeners = - fullColumnModel.getListeners(Events.WidthChange); - for (Listener<? extends BaseEvent> listener : listeners) - { - columnModelOfVisible.addListener(Events.WidthChange, listener); - } - } - } - - protected boolean isLimitVisibleColumnsEnabled() - { - return true; - } + int logId = log("grid reconfigure"); + ColumnModel columnModelOfVisible = trimToVisibleColumns(columnModel); - private void limitVisibleColumns(int maxVisibleColumns, int visibleColumnsCount) - { - String title = viewContext.getMessage(Dict.TOO_MANY_VISIBLE_COLUMNS_TITLE); - String msg = - viewContext.getMessage(Dict.TOO_MANY_VISIBLE_COLUMNS_MSG, maxVisibleColumns, - visibleColumnsCount); - if (settingsDialogAlreadyOpen) + grid.reconfigure(grid.getStore(), columnModelOfVisible); + viewContext.logStop(logId); + registerGridSettingsChangesListener(); + // add listeners of full column model to trimmed model + List<Listener<? extends BaseEvent>> listeners = + fullColumnModel.getListeners(Events.WidthChange); + for (Listener<? extends BaseEvent> listener : listeners) { - return; + columnModelOfVisible.addListener(Events.WidthChange, listener); } - settingsDialogAlreadyOpen = true; - MessageBox.alert(title, msg, new Listener<MessageBoxEvent>() - { - public void handleEvent(MessageBoxEvent be) - { - configureColumnSettings(); - } - }); } private ColumnModel trimToVisibleColumns(ColumnModel columnModel) { + int maxVisibleColumns = getWebClientConfiguration().getMaxVisibleColumns(); + int counter = 0; List<ColumnConfig> columns = new ArrayList<ColumnConfig>(); for (int i = 0, n = columnModel.getColumnCount(); i < n; i++) { ColumnConfig column = columnModel.getColumn(i); if (column.isHidden() == false) { - columns.add(column); + counter++; + if (counter <= maxVisibleColumns) + { + columns.add(column); + } else + { + column.setHidden(true); + } } } + if (counter > maxVisibleColumns) + { + saveColumnDisplaySettings(); // save changes made to full model + InfoConfig infoConfig = + new InfoConfig(viewContext.getMessage(Dict.VISIBLE_COLUMNS_LIMITED_TITLE), + viewContext.getMessage(Dict.VISIBLE_COLUMNS_LIMITED_MSG, + maxVisibleColumns, counter)); + infoConfig.height = 100; // a bit higher + infoConfig.display = 5000; // 5s + Info.display(infoConfig); + } ColumnModel trimmedModel = createColumnModel(columns); return trimmedModel; } @@ -1533,7 +1519,6 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod customColumnsMetadataProvider, resultSetKeyOrNull, pendingFetchManager.tryTopPendingFetchConfig()); columnSettingsConfigurer.showDialog(); - settingsDialogAlreadyOpen = false; } // Default visibility so that friend classes can use -- should otherwise be considered private diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index f92207acf02..e67ba45b1a9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -114,8 +114,8 @@ var common = { export_all_columns: "All Columns", export_visible_columns: "Visible Columns", - tooltip_export_all_columns: "Export the table with all (visible and hidden) columns to an Excel file", - tooltip_export_visible_columns: "Export the table with visible columns to an Excel file", + tooltip_export_all_columns: "Export the table with all (visible and hidden) columns to an Excel file", + tooltip_export_visible_columns: "Export the table with visible columns to an Excel file", // // LoginWidget @@ -126,7 +126,6 @@ var common = { login_passwordLabel: "Password", login_buttonLabel: "Login", login_failed: "Sorry, you entered an invalid username or password. Please try again.", - anonymous_login_failed: "Anonymous login is not possible.", // // AbstractAsyncCallback @@ -680,8 +679,8 @@ incorrect_experiment_syntax: "Incorrect experiment specification. Please provide GRID_COLUMN_NAME_HEADER: "Column", GRID_IS_COLUMN_VISIBLE_HEADER: "Visible?", GRID_COLUMN_HAS_FILTER_HEADER: "Has Filter?", - TOO_MANY_VISIBLE_COLUMNS_TITLE: "Too many columns visible", - TOO_MANY_VISIBLE_COLUMNS_MSG: "Limit the number of visible columns to {0} (from {1}).", + VISIBLE_COLUMNS_LIMITED_TITLE: "Number of visible columns was limited", + VISIBLE_COLUMNS_LIMITED_MSG: "Only {0} out of {1} requested columns are displayed. You might want to change table settings.", VISIBLE_COLUMNS_LIMIT_REACHED_MSG: "Limit of {0} visible columns has been reached.", VISIBLE_COLUMNS_LIMIT_EXCEEDED_MSG: "Limit of {0} visible columns can't be exceeded.", -- GitLab