Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Leicht2011-11-30 10:39:53 +0000
committerStephan Leicht2011-11-30 10:39:53 +0000
commit037b7f1ffe81aa8d41bacc255d9b70dbb5413003 (patch)
tree9391a18d8ef343d1fc4d1fe08d9c44ef082f0347
parent3dbf880fcf174480e7b1360ed020aaa8a00206b2 (diff)
downloadorg.eclipse.scout.rt-037b7f1ffe81aa8d41bacc255d9b70dbb5413003.tar.gz
org.eclipse.scout.rt-037b7f1ffe81aa8d41bacc255d9b70dbb5413003.tar.xz
org.eclipse.scout.rt-037b7f1ffe81aa8d41bacc255d9b70dbb5413003.zip
RESOLVED - bug 363828: Improved Table Column Management
https://bugs.eclipse.org/bugs/show_bug.cgi?id=363828
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/services/common/bookmark/internal/BookmarkUtility.java14
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/ClientUIPreferences.java29
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractSortOrderColumn.java21
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java10
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/ISortOrderColumn.java20
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/OrganizeColumnsForm.java107
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/BooleanColumnFilter.java4
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ColumnFilterForm.java97
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ComparableColumnFilter.java4
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/DefaultTableColumnFilterManager.java85
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ITableColumnFilterManager.java11
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/SmartColumnFilter.java4
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/StringColumnFilter.java4
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/customizer/RemoveAllCustomColumnsMenu.java66
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/menus/ResetColumnsMenu.java76
-rw-r--r--org.eclipse.scout.rt.shared/resources/texts/ScoutTexts.properties5
-rw-r--r--org.eclipse.scout.rt.shared/resources/texts/ScoutTexts_de.properties7
-rw-r--r--org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/services/common/bookmark/TableColumnState.java10
-rw-r--r--org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_custom_column.pngbin507 -> 213 bytes
-rw-r--r--org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_asc.pngbin180 -> 180 bytes
-rw-r--r--org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_desc.pngbin176 -> 176 bytes
-rw-r--r--org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SortIconUtility.java88
-rw-r--r--org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingScoutTable.java9
-rw-r--r--org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingTableHeaderCellRenderer.java7
24 files changed, 400 insertions, 278 deletions
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/services/common/bookmark/internal/BookmarkUtility.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/services/common/bookmark/internal/BookmarkUtility.java
index 0711a2d58a..2af5bb9289 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/services/common/bookmark/internal/BookmarkUtility.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/services/common/bookmark/internal/BookmarkUtility.java
@@ -438,6 +438,17 @@ public final class BookmarkUtility {
if (!existingVisibleCols.equals(visibleColumns)) {
cs.setVisibleColumns(visibleColumns.toArray(new IColumn[0]));
}
+ // filters
+ if (tablePage.getTable().getColumnFilterManager() != null) {
+ for (TableColumnState colState : allColumns) {
+ if (colState.getColumnFilterData() != null) {
+ IColumn col = BookmarkUtility.resolveColumn(cs.getColumns(), colState.getClassName());
+ if (col != null) {
+ tablePage.getTable().getColumnFilterManager().setSerializedFilter(colState.getColumnFilterData(), col);
+ }
+ }
+ }
+ }
//sort order (only respect visible and user-sort columns)
boolean userSortValid = true;
TreeMap<Integer, IColumn> sortColMap = new TreeMap<Integer, IColumn>();
@@ -596,6 +607,9 @@ public final class BookmarkUtility {
colState.setSortOrder(-1);
}
}
+ if (page.getTable().getColumnFilterManager() != null && c.isColumnFilterActive()) {
+ colState.setColumnFilterData(page.getTable().getColumnFilterManager().getSerializedFilter(c));
+ }
allColumns.add(colState);
}
state.setAvailableColumns(allColumns);
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/ClientUIPreferences.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/ClientUIPreferences.java
index 46d78b267d..f8179389f2 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/ClientUIPreferences.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/ClientUIPreferences.java
@@ -59,6 +59,7 @@ public class ClientUIPreferences {
private static final String TABLE_COLUMN_SORT_INDEX = "table.column.sortIndex.";
private static final String TABLE_COLUMN_SORT_ASC = "table.column.sortAsc.";
private static final String TABLE_COLUMN_SORT_EXPLICIT = "table.column.sortExplicit.";
+ private static final String TABLE_COLUMN_FILTER = "table.column.filter.";
private static final String APPLICATION_WINDOW_MAXIMIZED = "application.window.maximized";
private static final String APPLICATION_WINDOW_BOUNDS = "application.window.bounds";
private static final String CALENDAR_DISPLAY_MODE = "calendar.display.mode";
@@ -222,6 +223,7 @@ public class ClientUIPreferences {
int sortIndex = col.getSortIndex();
boolean sortUp = col.isSortAscending();
boolean sortExplicit = col.isSortExplicit();
+ boolean filterActive = col.isColumnFilterActive();
//
if (viewIndex >= 0) {
m_env.put(key, "" + viewIndex);
@@ -269,12 +271,39 @@ public class ClientUIPreferences {
else {
m_env.put(key, "false");
}
+ //
+ key = TABLE_COLUMN_FILTER + keySuffix;
+ if (filterActive) {
+ if (col.getTable().getColumnFilterManager() != null) {
+ byte[] filterData = col.getTable().getColumnFilterManager().getSerializedFilter(col);
+ m_env.putByteArray(key, filterData);
+ }
+ }
+ else {
+ m_env.remove(key);
+ }
if (flush) {
flush();
}
}
+ public void updateTableColumnFilter(IColumn column) {
+ if (column.getTable() != null && column.getTable().getColumnFilterManager() != null) {
+ String keySuffix = getColumnKey(column);
+ String key = TABLE_COLUMN_FILTER + keySuffix;
+ byte[] value = m_env.getByteArray(key, null);
+ if (value != null) {
+ try {
+ column.getTable().getColumnFilterManager().setSerializedFilter(value, column);
+ }
+ catch (Exception e) {
+ LOG.warn("value=" + value, e);
+ }
+ }
+ }
+ }
+
public void updateTableColumnOrder(List<IColumn<?>> columnList, int[] visibleColumnIndexHints) {
if (columnList.size() != visibleColumnIndexHints.length) {
throw new IllegalArgumentException("columnList.size=" + columnList.size() + " hints.length=" + visibleColumnIndexHints.length);
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractSortOrderColumn.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractSortOrderColumn.java
new file mode 100644
index 0000000000..1c7c03ba41
--- /dev/null
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractSortOrderColumn.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.rt.client.ui.basic.table;
+
+import org.eclipse.scout.rt.client.ui.basic.table.columns.AbstractColumn;
+import org.eclipse.scout.rt.client.ui.basic.table.columns.IColumn;
+
+/**
+ *
+ */
+public class AbstractSortOrderColumn extends AbstractColumn<IColumn> implements ISortOrderColumn {
+
+}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java
index ba140c3728..f7d584f01b 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java
@@ -64,7 +64,6 @@ import org.eclipse.scout.rt.client.ui.basic.table.columns.ISmartColumn;
import org.eclipse.scout.rt.client.ui.basic.table.customizer.AddCustomColumnMenu;
import org.eclipse.scout.rt.client.ui.basic.table.customizer.ITableCustomizer;
import org.eclipse.scout.rt.client.ui.basic.table.customizer.ModifyCustomColumnMenu;
-import org.eclipse.scout.rt.client.ui.basic.table.customizer.RemoveAllCustomColumnsMenu;
import org.eclipse.scout.rt.client.ui.basic.table.customizer.RemoveCustomColumnMenu;
import org.eclipse.scout.rt.client.ui.basic.table.internal.InternalTableRow;
import org.eclipse.scout.rt.client.ui.basic.table.menus.CopyWidthsOfColumnsMenu;
@@ -364,7 +363,7 @@ public abstract class AbstractTable extends AbstractPropertyObserver implements
if (patternHtmlCheck.matcher(text).matches()) {
// ensure proper HTML and extract body content
Matcher matcher = patternBodyContent.matcher(HTMLUtility.cleanupHtml(text, false, false, null));
- if (matcher.find()) {
+ if (matcher.find()) {
html = matcher.group(1);
}
}
@@ -374,7 +373,6 @@ public abstract class AbstractTable extends AbstractPropertyObserver implements
htmlText.append("<td>");
htmlText.append(html);
htmlText.append("</td>");
-
firstColumn = false;
}
htmlText.append("</tr>");
@@ -735,6 +733,10 @@ public abstract class AbstractTable extends AbstractPropertyObserver implements
initColumnsInternal();
if (getColumnFilterManager() == null) {
setColumnFilterManager(createColumnFilterManager());
+ ClientUIPreferences env = ClientUIPreferences.getInstance();
+ for (IColumn col : getColumns()) {
+ env.updateTableColumnFilter(col);
+ }
}
}
@@ -3466,7 +3468,7 @@ public abstract class AbstractTable extends AbstractPropertyObserver implements
if (e.getPopupMenuCount() > 0) {
e.addPopupMenu(new MenuSeparator());
}
- for (IMenu m : new IMenu[]{new AddCustomColumnMenu(this), new ModifyCustomColumnMenu(this), new RemoveCustomColumnMenu(this), new RemoveAllCustomColumnsMenu(this)}) {
+ for (IMenu m : new IMenu[]{new AddCustomColumnMenu(this), new ModifyCustomColumnMenu(this), new RemoveCustomColumnMenu(this)}) {
m.prepareAction();
if (m.isVisible()) {
e.addPopupMenu(m);
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/ISortOrderColumn.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/ISortOrderColumn.java
new file mode 100644
index 0000000000..828dccb6c6
--- /dev/null
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/ISortOrderColumn.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.rt.client.ui.basic.table;
+
+import org.eclipse.scout.rt.client.ui.basic.table.columns.IColumn;
+
+/**
+ * The sort state of the column is displayed as icon in each cell. Usage in {@link OrganizeColumnsForm}
+ */
+public interface ISortOrderColumn extends IColumn<IColumn> {
+
+}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/OrganizeColumnsForm.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/OrganizeColumnsForm.java
index a0d9f37126..19d0f4b967 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/OrganizeColumnsForm.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/OrganizeColumnsForm.java
@@ -3,6 +3,7 @@ package org.eclipse.scout.rt.client.ui.basic.table;
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.scout.commons.BooleanUtility;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.commons.dnd.JavaTransferObject;
@@ -22,6 +23,7 @@ import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.Gr
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.ColumnsTableField;
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.FilterBox;
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.FilterBox.EditFilterButton;
+import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.FilterBox.RemoveFilterButton;
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.ResetBox;
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.ResetBox.ResetAllButton;
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.ResetBox.ResetColumnFiltersButton;
@@ -36,6 +38,7 @@ import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.Gr
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.ViewBox.RemoveCustomColumnButton;
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.GroupBox.ViewBox.SelectAllButton;
import org.eclipse.scout.rt.client.ui.basic.table.OrganizeColumnsForm.MainBox.OkButton;
+import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ITableColumnFilter;
import org.eclipse.scout.rt.client.ui.basic.table.columns.AbstractBooleanColumn;
import org.eclipse.scout.rt.client.ui.basic.table.columns.AbstractColumn;
import org.eclipse.scout.rt.client.ui.basic.table.columns.AbstractStringColumn;
@@ -55,7 +58,6 @@ import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
import org.eclipse.scout.rt.client.ui.form.fields.tablefield.AbstractTableField;
import org.eclipse.scout.rt.shared.AbstractIcons;
import org.eclipse.scout.rt.shared.TEXTS;
-import org.eclipse.scout.rt.shared.data.basic.FontSpec;
import org.eclipse.scout.rt.shared.services.common.bookmark.Bookmark;
public class OrganizeColumnsForm extends AbstractForm {
@@ -109,6 +111,10 @@ public class OrganizeColumnsForm extends AbstractForm {
return getFieldByClass(EditFilterButton.class);
}
+ public RemoveFilterButton getRemoveFilterButton() {
+ return getFieldByClass(RemoveFilterButton.class);
+ }
+
public FilterBox getFilterBox() {
return getFieldByClass(FilterBox.class);
}
@@ -186,6 +192,11 @@ public class OrganizeColumnsForm extends AbstractForm {
return 2;
}
+ @Override
+ protected int getConfiguredWidthInPixel() {
+ return 520;
+ }
+
@Order(10.0)
public class GroupBox extends AbstractGroupBox {
@@ -199,7 +210,7 @@ public class OrganizeColumnsForm extends AbstractForm {
@Override
protected int getConfiguredGridH() {
- return 15;
+ return 5;
}
@Override
@@ -234,6 +245,9 @@ public class OrganizeColumnsForm extends AbstractForm {
// Column Title
getTable().getTitleColumn().setValue(row, headerCell.getText());
+ if (Platform.inDevelopmentMode() && col.isSortActive()) {
+ getTable().getTitleColumn().setValue(row, headerCell.getText() + " (" + col.getSortIndex() + ")");
+ }
// Custom Column
if (col instanceof ICustomColumn<?>) {
@@ -241,17 +255,7 @@ public class OrganizeColumnsForm extends AbstractForm {
}
// Sorting
- if (col.isSortActive()) {
- if (col.isSortAscending()) {
- row.getCellForUpdate(getTable().getSortingColumn().getColumnIndex()).setIconId(AbstractIcons.TableSortAsc);
- }
- else {
- row.getCellForUpdate(getTable().getSortingColumn().getColumnIndex()).setIconId(AbstractIcons.TableSortDesc);
- }
- }
- else {
- row.getCellForUpdate(getTable().getSortingColumn().getColumnIndex()).setIconId(null);
- }
+ getTable().getSortingColumn().setValue(row, col);
// Filter
if (col.isColumnFilterActive()) {
@@ -276,16 +280,6 @@ public class OrganizeColumnsForm extends AbstractForm {
public class Table extends AbstractTable {
@Override
- protected void execDecorateRow(ITableRow row) throws ProcessingException {
- if (BooleanUtility.nvl(getVisibleColumn().getValue(row))) {
- row.setFont(new FontSpec(null, FontSpec.STYLE_BOLD, 0));
- }
- else {
- row.setFont(null);
- }
- }
-
- @Override
protected int getConfiguredDragType() {
return IDNDSupport.TYPE_JAVA_ELEMENT_TRANSFER;
}
@@ -429,7 +423,7 @@ public class OrganizeColumnsForm extends AbstractForm {
}
}
- @Order(5.0)
+ @Order(10.0)
public class KeyColumn extends AbstractColumn<IColumn<?>> {
@Override
@@ -443,7 +437,7 @@ public class OrganizeColumnsForm extends AbstractForm {
}
}
- @Order(10.0)
+ @Order(20.0)
public class VisibleColumn extends AbstractBooleanColumn {
@Override
@@ -458,7 +452,7 @@ public class OrganizeColumnsForm extends AbstractForm {
}
- @Order(20.0)
+ @Order(30.0)
public class TitleColumn extends AbstractStringColumn {
@Override
@@ -473,8 +467,8 @@ public class OrganizeColumnsForm extends AbstractForm {
}
- @Order(30.0)
- public class SortingColumn extends AbstractStringColumn {
+ @Order(40.0)
+ public class SortingColumn extends AbstractSortOrderColumn {
@Override
protected String getConfiguredHeaderText() {
@@ -488,7 +482,7 @@ public class OrganizeColumnsForm extends AbstractForm {
}
- @Order(40.0)
+ @Order(50.0)
public class FilterColumn extends AbstractStringColumn {
@Override
@@ -503,7 +497,7 @@ public class OrganizeColumnsForm extends AbstractForm {
}
- @Order(50.0)
+ @Order(60.0)
public class CustomColumnColumn extends AbstractStringColumn {
@Override
@@ -531,7 +525,7 @@ public class OrganizeColumnsForm extends AbstractForm {
@Override
protected String getConfiguredLabel() {
- return TEXTS.get("View");
+ return TEXTS.get("ResetTableColumnsVisibility");
}
@Order(10.0)
@@ -852,7 +846,7 @@ public class OrganizeColumnsForm extends AbstractForm {
@Override
protected String getConfiguredLabel() {
- return TEXTS.get("Edit_");
+ return TEXTS.get("EditFilterMenu");
}
@Override
@@ -879,6 +873,42 @@ public class OrganizeColumnsForm extends AbstractForm {
}
}
+
+ @Order(20.0)
+ public class RemoveFilterButton extends AbstractLinkButton {
+
+ @Override
+ protected String getConfiguredLabel() {
+ return TEXTS.get("Remove");
+ }
+
+ @Override
+ protected boolean getConfiguredProcessButton() {
+ return false;
+ }
+
+ @Override
+ protected void execClickAction() throws ProcessingException {
+ Integer selectedIndex = null;
+ if (m_table != null && getColumnsTableField().getTable().getSelectedRow() != null) {
+ selectedIndex = getColumnsTableField().getTable().getSelectedRow().getRowIndex();
+ if (m_table.getColumnFilterManager() != null) {
+ IColumn<?> col = getColumnsTableField().getTable().getKeyColumn().getValue(getColumnsTableField().getTable().getSelectedRow());
+ if (col != null) {
+ ITableColumnFilter<?> filter = m_table.getColumnFilterManager().getFilter(col);
+ m_table.getColumnFilterManager().getFilters().remove(filter);
+ m_table.applyRowFilters();
+ }
+ }
+ }
+ getColumnsTableField().reloadTableData();
+ if (selectedIndex != null) {
+ getColumnsTableField().getTable().selectRow(selectedIndex);
+ }
+ }
+
+ }
+
}
@Order(50.0)
@@ -924,7 +954,7 @@ public class OrganizeColumnsForm extends AbstractForm {
@Override
protected String getConfiguredLabel() {
- return TEXTS.get("View");
+ return TEXTS.get("ResetTableColumnsVisibility");
}
@Override
@@ -1023,6 +1053,7 @@ public class OrganizeColumnsForm extends AbstractForm {
ITableRow selectedRow = getColumnsTableField().getTable().getSelectedRow();
boolean selectedRowExists = selectedRow != null;
boolean isCustomColumn = selectedRow != null && getColumnsTableField().getTable().getKeyColumn().getValue(selectedRow) instanceof ICustomColumn<?>;
+ boolean selectedRowHasFilter = selectedRowExists && getColumnsTableField().getTable().getKeyColumn().getValue(selectedRow).isColumnFilterActive();
getModifyCustomColumnButton().setEnabled(isCustomColumn);
getRemoveCustomColumnButton().setEnabled(isCustomColumn);
@@ -1035,6 +1066,7 @@ public class OrganizeColumnsForm extends AbstractForm {
getWithoutButton().setEnabled(selectedRowExists);
getEditFilterButton().setEnabled(selectedRowExists);
+ getRemoveFilterButton().setEnabled(selectedRowHasFilter);
}
private void doResetAction(Class<? extends IMenu> action) throws ProcessingException {
@@ -1056,12 +1088,17 @@ public class OrganizeColumnsForm extends AbstractForm {
try {
getColumnsTableField().getTable().setTableChanging(true);
- IColumn<?> selectedCol = getColumnsTableField().getTable().getKeyColumn().getValue(row);
+ IColumn selectedCol = getColumnsTableField().getTable().getKeyColumn().getValue(row);
if (ascending == null) {
m_table.getColumnSet().removeSortColumn(selectedCol);
}
else {
- m_table.getColumnSet().addSortColumn(selectedCol, ascending);
+ if (m_table.getColumnSet().isSortColumn(selectedCol)) {
+ m_table.getColumnSet().handleSortEvent(selectedCol, true);
+ }
+ else {
+ m_table.getColumnSet().addSortColumn(selectedCol, ascending);
+ }
}
m_table.sort();
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/BooleanColumnFilter.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/BooleanColumnFilter.java
index 81cfea09fd..e8ee6cf0a1 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/BooleanColumnFilter.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/BooleanColumnFilter.java
@@ -10,6 +10,7 @@
******************************************************************************/
package org.eclipse.scout.rt.client.ui.basic.table.columnfilter;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -26,7 +27,8 @@ import org.eclipse.scout.rt.shared.services.lookup.LookupRow;
/**
* Checkboxes, Boolean values
*/
-public class BooleanColumnFilter<T extends Comparable<Boolean>> implements ITableColumnFilter<Boolean> {
+public class BooleanColumnFilter<T extends Comparable<Boolean>> implements ITableColumnFilter<Boolean>, Serializable {
+ private static final long serialVersionUID = 1L;
private IColumn<Boolean> m_column;
private Set<Boolean> m_selectedValues;
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ColumnFilterForm.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ColumnFilterForm.java
index 8e415a7abf..0c1e46361e 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ColumnFilterForm.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ColumnFilterForm.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
@@ -20,19 +20,18 @@ import java.util.Set;
import org.eclipse.scout.commons.TypeCastUtility;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.commons.exception.ProcessingException;
-import org.eclipse.scout.rt.client.ui.ClientUIPreferences;
import org.eclipse.scout.rt.client.ui.basic.table.AbstractTable;
import org.eclipse.scout.rt.client.ui.basic.table.ITableRow;
import org.eclipse.scout.rt.client.ui.basic.table.TableRow;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.CloseButton;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.DateDetailBox;
-import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.NumberDetailBox;
-import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.OkButton;
-import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.StringDetailBox;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.DateDetailBox.DateSequenceBox.DateFromField;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.DateDetailBox.DateSequenceBox.DateToField;
+import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.NumberDetailBox;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.NumberDetailBox.NumberSequenceBox.NumberFromField;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.NumberDetailBox.NumberSequenceBox.NumberToField;
+import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.OkButton;
+import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.StringDetailBox;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.StringDetailBox.PatternField;
import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.ValuesBox.ValuesTableField;
import org.eclipse.scout.rt.client.ui.basic.table.columns.AbstractObjectColumn;
@@ -179,94 +178,6 @@ public class ColumnFilterForm extends AbstractForm {
return 1;
}
- @Order(10)
- public class SortBox extends AbstractGroupBox {
-
- @Override
- protected int getConfiguredGridColumnCount() {
- return 1;
- }
-
- @Override
- protected String getConfiguredLabel() {
- return ScoutTexts.get("ColumnSorting");
- }
-
- @Override
- protected boolean getConfiguredGridUseUiHeight() {
- return true;
- }
-
- @Order(10)
- public class SortUpButton extends AbstractLinkButton {
-
- @Override
- protected String getConfiguredLabel() {
- return ScoutTexts.get("ColumnSortAscending");
- }
-
- @Override
- protected boolean getConfiguredProcessButton() {
- return false;
- }
-
- @Override
- protected void execClickAction() throws ProcessingException {
- IColumn<?> col = getColumnFilter().getColumn();
- col.getTable().getColumnSet().addSortColumn(col, true);
- ClientUIPreferences.getInstance().setAllTableColumnPreferences(col.getTable());
- col.getTable().sort();
- doOk();
- }
- }
-
- @Order(20)
- public class SortDownButton extends AbstractLinkButton {
-
- @Override
- protected String getConfiguredLabel() {
- return ScoutTexts.get("SortDescending");
- }
-
- @Override
- protected boolean getConfiguredProcessButton() {
- return false;
- }
-
- @Override
- protected void execClickAction() throws ProcessingException {
- IColumn<?> col = getColumnFilter().getColumn();
- col.getTable().getColumnSet().addSortColumn(col, false);
- ClientUIPreferences.getInstance().setAllTableColumnPreferences(col.getTable());
- col.getTable().sort();
- doOk();
- }
- }
-
- @Order(30)
- public class SortNoneButton extends AbstractLinkButton {
-
- @Override
- protected String getConfiguredLabel() {
- return ScoutTexts.get("ClearColumnSorting");
- }
-
- @Override
- protected boolean getConfiguredProcessButton() {
- return false;
- }
-
- @Override
- protected void execClickAction() throws ProcessingException {
- IColumn<?> col = getColumnFilter().getColumn();
- col.getTable().getColumnSet().removeSortColumn(col);
- ClientUIPreferences.getInstance().setAllTableColumnPreferences(col.getTable());
- col.getTable().sort();
- doOk();
- }
- }
- }
-
@Order(20)
public class ValuesBox extends AbstractGroupBox {
@Override
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ComparableColumnFilter.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ComparableColumnFilter.java
index 5136c35f8b..3f07e68f35 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ComparableColumnFilter.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ComparableColumnFilter.java
@@ -10,6 +10,7 @@
******************************************************************************/
package org.eclipse.scout.rt.client.ui.basic.table.columnfilter;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -26,7 +27,8 @@ import org.eclipse.scout.rt.shared.services.lookup.LookupRow;
/**
*
*/
-public class ComparableColumnFilter<T extends Comparable<T>> implements ITableColumnFilter<T> {
+public class ComparableColumnFilter<T extends Comparable<T>> implements ITableColumnFilter<T>, Serializable {
+ private static final long serialVersionUID = 1L;
private IColumn<T> m_column;
private Set<T> m_selectedValues;
private T m_minimumValue;
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/DefaultTableColumnFilterManager.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/DefaultTableColumnFilterManager.java
index 91d6d2db9e..a970a43233 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/DefaultTableColumnFilterManager.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/DefaultTableColumnFilterManager.java
@@ -10,6 +10,10 @@
******************************************************************************/
package org.eclipse.scout.rt.client.ui.basic.table.columnfilter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -18,19 +22,27 @@ import java.util.List;
import java.util.Map;
import org.eclipse.scout.commons.exception.ProcessingException;
+import org.eclipse.scout.commons.logger.IScoutLogger;
+import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.commons.osgi.BundleObjectInputStream;
+import org.eclipse.scout.commons.osgi.BundleObjectOutputStream;
+import org.eclipse.scout.rt.client.Activator;
+import org.eclipse.scout.rt.client.ui.ClientUIPreferences;
import org.eclipse.scout.rt.client.ui.basic.table.ITable;
import org.eclipse.scout.rt.client.ui.basic.table.ITableRow;
import org.eclipse.scout.rt.client.ui.basic.table.ITableRowFilter;
-import org.eclipse.scout.rt.client.ui.basic.table.columnfilter.ColumnFilterForm.MainBox.SortBox;
import org.eclipse.scout.rt.client.ui.basic.table.columns.IColumn;
import org.eclipse.scout.rt.client.ui.basic.table.columns.ISmartColumn;
import org.eclipse.scout.rt.client.ui.form.IForm;
import org.eclipse.scout.rt.shared.ScoutTexts;
+import org.osgi.framework.Bundle;
/**
* Default implementation for {@link ITableColumnFilterManager}
*/
public class DefaultTableColumnFilterManager implements ITableColumnFilterManager, ITableRowFilter {
+ private static final IScoutLogger LOG = ScoutLogManager.getLogger(DefaultTableColumnFilterManager.class);
+
private final ITable m_table;
private final Map<IColumn, ITableColumnFilter> m_filterMap;
private boolean m_enabled;
@@ -81,7 +93,7 @@ public class DefaultTableColumnFilterManager implements ITableColumnFilterManage
@Override
@SuppressWarnings("unchecked")
- public void showFilterForm(IColumn col, boolean fullForm) throws ProcessingException {
+ public void showFilterForm(IColumn col, boolean showAsPopupDialog) throws ProcessingException {
ITableColumnFilter<?> filter = m_filterMap.get(col);
if (filter == null) {
if (col instanceof ISmartColumn<?>) {
@@ -99,12 +111,9 @@ public class DefaultTableColumnFilterManager implements ITableColumnFilterManage
}
if (filter != null) {
ColumnFilterForm f = new ColumnFilterForm();
- if (fullForm) {
+ if (showAsPopupDialog) {
f.setDisplayHint(IForm.DISPLAY_HINT_POPUP_DIALOG);
}
- else {
- f.getFieldByClass(SortBox.class).setVisible(false);
- }
f.setModal(true);
f.setColumnFilter(filter);
f.startModify();
@@ -118,6 +127,7 @@ public class DefaultTableColumnFilterManager implements ITableColumnFilterManage
}
m_table.getColumnSet().updateColumn(col);
m_table.applyRowFilters();
+ ClientUIPreferences.getInstance().setTableColumnPreferences(col);
}
}
}
@@ -159,4 +169,67 @@ public class DefaultTableColumnFilterManager implements ITableColumnFilterManage
}
m_table.applyRowFilters();
}
+
+ @Override
+ public byte[] getSerializedFilter(IColumn col) {
+ ITableColumnFilter filter = m_filterMap.get(col);
+ if (filter != null) {
+ ObjectOutputStream out = null;
+ ByteArrayOutputStream serialData = new ByteArrayOutputStream();
+ try {
+ out = new BundleObjectOutputStream(serialData);
+ filter.setColumn(null);
+ out.writeObject(filter);
+ out.close();
+ out = null;
+ }
+ catch (Throwable t) {
+ LOG.error("Failed storing filter data for " + t);
+ }
+ finally {
+ if (out != null) {
+ try {
+ out.close();
+ }
+ catch (Throwable t) {
+ LOG.error("Failed closing ObjectOutputStream");
+ }
+ }
+ filter.setColumn(col);
+ }
+ return serialData.toByteArray();
+ }
+ return null;
+ }
+
+ @Override
+ public void setSerializedFilter(byte[] filterData, IColumn col) {
+ ObjectInputStream in = null;
+ try {
+ in = new BundleObjectInputStream(new ByteArrayInputStream(filterData), new Bundle[]{Activator.getDefault().getBundle()});
+ Object customizerData = in.readObject();
+ in.close();
+ in = null;
+ ITableColumnFilter filter = (ITableColumnFilter) customizerData;
+ if (col != null) {
+ filter.setColumn(col);
+ this.m_filterMap.put(col, filter);
+ }
+ m_table.applyRowFilters();
+ }
+ catch (Throwable t) {
+ LOG.error("Failed reading filter data: " + t);
+ }
+ finally {
+ if (in != null) {
+ try {
+ in.close();
+ }
+ catch (Throwable t) {
+ LOG.error("Failed closing ObjectInputStream");
+ }
+ }
+ }
+ }
+
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ITableColumnFilterManager.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ITableColumnFilterManager.java
index c804ebce76..1dacff0e10 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ITableColumnFilterManager.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/ITableColumnFilterManager.java
@@ -29,6 +29,10 @@ public interface ITableColumnFilterManager {
<T> ITableColumnFilter<T> getFilter(IColumn<T> col);
+ byte[] getSerializedFilter(IColumn col);
+
+ void setSerializedFilter(byte[] filterData, IColumn col);
+
/**
* @return a collection of all filters of all rows
*/
@@ -49,12 +53,11 @@ public interface ITableColumnFilterManager {
*
* @param col
* the filtered column
- * @param fullForm
- * true: {@link IForm.DISPLAY_HINT_POPUP_DIALOG} will be used for display of the form and the sort options
- * will be shown
+ * @param showAsPopupDialog
+ * true: {@link IForm.DISPLAY_HINT_POPUP_DIALOG} will be used for display of the form
* @throws ProcessingException
*/
- void showFilterForm(IColumn col, boolean fullForm) throws ProcessingException;
+ void showFilterForm(IColumn col, boolean showAsPopupDialog) throws ProcessingException;
void reset() throws ProcessingException;
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/SmartColumnFilter.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/SmartColumnFilter.java
index f1fb210819..6c3a42efdf 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/SmartColumnFilter.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/SmartColumnFilter.java
@@ -10,6 +10,7 @@
******************************************************************************/
package org.eclipse.scout.rt.client.ui.basic.table.columnfilter;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -29,7 +30,8 @@ import org.eclipse.scout.rt.shared.services.lookup.LookupRow;
*/
@Deprecated
@SuppressWarnings("deprecation")
-public class SmartColumnFilter<T> implements ITableColumnFilter<T> {
+public class SmartColumnFilter<T> implements ITableColumnFilter<T>, Serializable {
+ private static final long serialVersionUID = 1L;
private ISmartColumn<T> m_column;
private Set<T> m_selectedValues;
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/StringColumnFilter.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/StringColumnFilter.java
index 112bbc560f..09b5a3aab9 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/StringColumnFilter.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/columnfilter/StringColumnFilter.java
@@ -10,6 +10,7 @@
******************************************************************************/
package org.eclipse.scout.rt.client.ui.basic.table.columnfilter;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -28,7 +29,8 @@ import org.eclipse.scout.rt.shared.services.lookup.LookupRow;
/**
*
*/
-public class StringColumnFilter implements ITableColumnFilter<String> {
+public class StringColumnFilter implements ITableColumnFilter<String>, Serializable {
+ private static final long serialVersionUID = 1L;
private IColumn<String> m_column;
private Set<String> m_selectedValues;
private String m_pattern;
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/customizer/RemoveAllCustomColumnsMenu.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/customizer/RemoveAllCustomColumnsMenu.java
deleted file mode 100644
index b7eb603b22..0000000000
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/customizer/RemoveAllCustomColumnsMenu.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 BSI Business Systems Integration AG.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * BSI Business Systems Integration AG - initial API and implementation
- ******************************************************************************/
-package org.eclipse.scout.rt.client.ui.basic.table.customizer;
-
-import java.util.ArrayList;
-
-import org.eclipse.scout.commons.exception.ProcessingException;
-import org.eclipse.scout.rt.client.ui.action.menu.AbstractMenu;
-import org.eclipse.scout.rt.client.ui.basic.table.ITable;
-import org.eclipse.scout.rt.client.ui.basic.table.columns.IColumn;
-import org.eclipse.scout.rt.client.ui.messagebox.MessageBox;
-import org.eclipse.scout.rt.shared.ScoutTexts;
-import org.eclipse.scout.rt.shared.TEXTS;
-
-public class RemoveAllCustomColumnsMenu extends AbstractMenu {
- private final ITable m_table;
-
- public RemoveAllCustomColumnsMenu(ITable table) {
- m_table = table;
- }
-
- @Override
- protected String getConfiguredText() {
- return ScoutTexts.get("RemoveAllCustomColumnsMenu");
- }
-
- @Override
- protected void execPrepareAction() throws ProcessingException {
- boolean visible = false;
- if (m_table.getTableCustomizer() != null) {
- for (IColumn<?> col : m_table.getColumns()) {
- if (col instanceof ICustomColumn<?>) {
- visible = true;
- break;
- }
- }
- }
- setVisible(visible);
- }
-
- @Override
- protected void execAction() throws ProcessingException {
- if (m_table != null) {
- if (m_table.getTableCustomizer() != null) {
- ArrayList<String> names = new ArrayList<String>();
- for (IColumn column : m_table.getColumns()) {
- if (column instanceof ICustomColumn<?>) {
- names.add(column.getHeaderCell().getText());
- }
- }
- if (!MessageBox.showDeleteConfirmationMessage(TEXTS.get("Columns"), names.toArray(new String[names.size()]))) {
- return;
- }
- m_table.getTableCustomizer().removeAllColumns();
- }
- }
- }
-}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/menus/ResetColumnsMenu.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/menus/ResetColumnsMenu.java
index b42afd9c6a..1254a94c04 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/menus/ResetColumnsMenu.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/menus/ResetColumnsMenu.java
@@ -31,7 +31,7 @@ public class ResetColumnsMenu extends AbstractMenu {
return ScoutTexts.get("ResetTableColumns");
}
- @Order(0)
+ @Order(10.0)
public class ResetAllMenu extends AbstractMenu {
@Override
@@ -60,45 +60,16 @@ public class ResetColumnsMenu extends AbstractMenu {
}
}
- @Order(5)
+ @Order(20.0)
public class Separator1Menu extends MenuSeparator {
}
- @Order(10)
- public class ResetColumnFiltersMenu extends AbstractMenu {
-
- @Override
- protected String getConfiguredText() {
- return ScoutTexts.get("ResetTableColumnFilter");
- }
-
- @Override
- protected void execPrepareAction() throws ProcessingException {
- setVisible(m_table.getColumnFilterManager() != null);
- }
-
- @Override
- protected void execAction() throws ProcessingException {
- try {
- m_table.setTableChanging(true);
- //
- ITableColumnFilterManager m = m_table.getColumnFilterManager();
- if (m != null) {
- m.reset();
- }
- }
- finally {
- m_table.setTableChanging(false);
- }
- }
- }
-
- @Order(20)
- public class ResetWidthsMenu extends AbstractMenu {
+ @Order(30.0)
+ public class ResetVisibilityMenu extends AbstractMenu {
@Override
protected String getConfiguredText() {
- return ScoutTexts.get("ResetTableColumnsWidth");
+ return ScoutTexts.get("ResetTableColumnsVisibility");
}
@Override
@@ -106,7 +77,7 @@ public class ResetColumnsMenu extends AbstractMenu {
try {
m_table.setTableChanging(true);
//
- m_table.resetColumnWidths();
+ m_table.resetColumnVisibilities();
}
finally {
m_table.setTableChanging(false);
@@ -114,7 +85,7 @@ public class ResetColumnsMenu extends AbstractMenu {
}
}
- @Order(30)
+ @Order(40.0)
public class ResetSortingMenu extends AbstractMenu {
@Override
@@ -135,41 +106,28 @@ public class ResetColumnsMenu extends AbstractMenu {
}
}
- @Order(40)
- public class ResetOrderMenu extends AbstractMenu {
+ @Order(50.0)
+ public class ResetColumnFiltersMenu extends AbstractMenu {
@Override
protected String getConfiguredText() {
- return ScoutTexts.get("ResetTableColumnsOrder");
+ return ScoutTexts.get("ResetTableColumnFilter");
}
@Override
- protected void execAction() {
- try {
- m_table.setTableChanging(true);
- //
- m_table.resetColumnOrder();
- }
- finally {
- m_table.setTableChanging(false);
- }
- }
- }
-
- @Order(50)
- public class ResetVisibilityMenu extends AbstractMenu {
-
- @Override
- protected String getConfiguredText() {
- return ScoutTexts.get("ResetTableColumnsVisibility");
+ protected void execPrepareAction() throws ProcessingException {
+ setVisible(m_table.getColumnFilterManager() != null);
}
@Override
- protected void execAction() {
+ protected void execAction() throws ProcessingException {
try {
m_table.setTableChanging(true);
//
- m_table.resetColumnVisibilities();
+ ITableColumnFilterManager m = m_table.getColumnFilterManager();
+ if (m != null) {
+ m.reset();
+ }
}
finally {
m_table.setTableChanging(false);
diff --git a/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts.properties b/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts.properties
index bef1fea489..38fe65a2e5 100644
--- a/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts.properties
+++ b/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts.properties
@@ -5,6 +5,7 @@ AddCustomColumnMenu=Add column...
All=All
AllStates=All
Apply=Apply
+Ascending=Ascending
ApplyBookmarkToSearchFailedMessage=This bookmark is not applicable on the current search.
Attribute=Attribute
Bookmark=Favorite
@@ -77,6 +78,8 @@ DeleteMenu=Delete
Detail=Detail
DetailedVersion=Detailed version
Details=Details
+Descending=Descending
+EditFilterMenu=Edit...
EditBookmarkMenu=Edit bookmark...
EmailCc=CC
EmailFrom=From
@@ -348,6 +351,7 @@ PrivateBookmarks=Private Bookmarks
Properties=Properties
Redo=Redo
Refresh=Refresh
+Remove=Remove
RemoveAllCustomColumnsMenu=Remove my columns
RemoveCustomColumnMenu=Remove column
RenameBookmarkFolderMenu=Rename Folder...
@@ -463,6 +467,7 @@ VersionMismatchTitle=Update required
VetoErrorText=At least one search field must be filled in.
Week=Week
WeekShort=CW
+Without=Without
WizardBackButton=&Back
WizardBackButtonTooltip=Back to previous step
WizardCancelButton=Cancel
diff --git a/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts_de.properties b/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts_de.properties
index 0a1d21027a..c4164f581a 100644
--- a/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts_de.properties
+++ b/org.eclipse.scout.rt.shared/resources/texts/ScoutTexts_de.properties
@@ -7,6 +7,7 @@ AllStates=Alle
Apply=\u00DCbernehmen
ApplyBookmarkToSearchFailedMessage=Dieser Favorit ist auf der aktuellen Suche nicht anwendbar.
Attribute=Attribut
+Ascending=Aufsteigend
Bookmark=Favorit
BookmarkFolder=Ordner
Bookmarks=Favoriten
@@ -77,6 +78,8 @@ DeleteMenu=L\u00F6schen
Detail=Detail
DetailedVersion=Detailversion
Details=Details
+Descending=Absteigend
+EditFilterMenu=Bearbeiten...
EditBookmarkMenu=Favorit bearbeiten...
EmailCc=CC
EmailFrom=Von
@@ -346,6 +349,7 @@ PrivateBookmarks=Private Favoriten
Properties=Eigenschaften
Redo=Wiederherstellen
Refresh=Aktualisieren
+Remove=Entfernen
RemoveAllCustomColumnsMenu=Eigene Spalten entfernen
RemoveCustomColumnMenu=Spalte entfernen
RenameBookmarkFolderMenu=Ordner umbenennen...
@@ -362,7 +366,7 @@ ResetTableColumns=Spalten zur\u00FCcksetzen
ResetTableColumnsAll=Alles
ResetTableColumnsOrder=Reihenfolge
ResetTableColumnsSorting=Sortierung
-ResetTableColumnsVisibility=Sichtbarkeit
+ResetTableColumnsVisibility=Ansicht
ResetTableColumnsWidth=Breite
SC_Copyright=Sentry Spelling-Checker Engine und Bibliotheken sind gesch\u00FCtzte Marken von Wintertree Software, Inc.
SC_DialogTitle=Rechtschreibepr\u00FCfung
@@ -460,6 +464,7 @@ VersionMismatchTitle=Aktualisierung notwendig
VetoErrorText=Mindestens ein Suchfeld muss ausgef\u00FCllt sein.
Week=Woche
WeekShort=KW
+Without=Ohne
WizardBackButton=&Zur\u00FCck
WizardBackButtonTooltip=Zur\u00FCck zu vorherigem Schritt
WizardCancelButton=Abbrechen
diff --git a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/services/common/bookmark/TableColumnState.java b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/services/common/bookmark/TableColumnState.java
index 1d8349a3d1..5cbbb28410 100644
--- a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/services/common/bookmark/TableColumnState.java
+++ b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/services/common/bookmark/TableColumnState.java
@@ -21,6 +21,7 @@ public class TableColumnState implements Serializable, Cloneable {
private boolean m_sortAscending;
private Boolean m_displayable;
private Boolean m_visible;
+ private byte[] m_columnFilterData;
public TableColumnState() {
}
@@ -32,6 +33,7 @@ public class TableColumnState implements Serializable, Cloneable {
this.m_sortAscending = state.m_sortAscending;
this.m_displayable = state.m_displayable;
this.m_visible = state.m_visible;
+ this.m_columnFilterData = state.m_columnFilterData;
}
public String getClassName() {
@@ -87,4 +89,12 @@ public class TableColumnState implements Serializable, Cloneable {
return new TableColumnState(this);
}
+ public byte[] getColumnFilterData() {
+ return m_columnFilterData;
+ }
+
+ public void setColumnFilterData(byte[] columnFilterData) {
+ m_columnFilterData = columnFilterData;
+ }
+
}
diff --git a/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_custom_column.png b/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_custom_column.png
index 000e497d7c..54cd2652c9 100644
--- a/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_custom_column.png
+++ b/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_custom_column.png
Binary files differ
diff --git a/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_asc.png b/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_asc.png
index ead1e6964e..ca7bc8bf8d 100644
--- a/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_asc.png
+++ b/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_asc.png
Binary files differ
diff --git a/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_desc.png b/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_desc.png
index 01e7db0a14..8911ea7f89 100644
--- a/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_desc.png
+++ b/org.eclipse.scout.rt.ui.swing/resources/icons/internal/table_sort_desc.png
Binary files differ
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SortIconUtility.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SortIconUtility.java
new file mode 100644
index 0000000000..ccb0f74aeb
--- /dev/null
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SortIconUtility.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2010 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.rt.ui.swing.basic.table;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.RescaleOp;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.eclipse.scout.rt.client.ui.basic.table.columns.IColumn;
+import org.eclipse.scout.rt.ui.swing.Activator;
+import org.eclipse.scout.rt.ui.swing.SwingIcons;
+
+/**
+ *
+ */
+public class SortIconUtility {
+
+ private static final float BRIGHTEN_FACTOR = 1.6f;
+ private static final Icon m_sortUpIcon = Activator.getIcon(SwingIcons.TableSortAsc);
+ private static final Icon m_sortDownIcon = Activator.getIcon(SwingIcons.TableSortDesc);
+
+ private SortIconUtility() {
+ }
+
+ /**
+ * Brightens icons of type {@link ImageIcon} by a factor
+ *
+ * @param icon
+ * the ImageIcon to brighten
+ * @param factor
+ * the factor to adjust brightness
+ * @return the brightened icon, if icon is not instance of {@link ImageIcon}, the input icon is returned.
+ */
+ private static Icon changeBrightness(Icon icon, float factor) {
+ if (icon == null || !(icon instanceof ImageIcon)) {
+ return icon;
+ }
+ ImageIcon imageIcon = (ImageIcon) icon;
+
+ ImageIcon ret = new ImageIcon();
+
+ BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
+ image.getGraphics().drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver());
+
+ RescaleOp op = new RescaleOp(factor, 0, null);
+ image = op.filter(image, image);
+
+ ret.setImage(image);
+ return ret;
+ }
+
+ /**
+ * Create a sort icon with gray scales according sort order
+ *
+ * @param column
+ * the column the icon is intended for
+ * @param sortColumns
+ * all sortco
+ * @param ascending
+ * @return
+ */
+ public static Icon createSortIcon(IColumn column, IColumn[] sortColumns, boolean ascending) {
+ if (column == null || sortColumns == null) {
+ return null;
+ }
+
+ float count = sortColumns.length;
+ float factor = 1 + (column.getSortIndex() / count) * BRIGHTEN_FACTOR;
+
+ Icon icon = m_sortDownIcon;
+ if (ascending) {
+ icon = m_sortUpIcon;
+ }
+
+ return changeBrightness(icon, factor);
+ }
+
+}
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingScoutTable.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingScoutTable.java
index 77a3d6a1be..3223021e39 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingScoutTable.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingScoutTable.java
@@ -76,6 +76,7 @@ import org.eclipse.scout.rt.client.ui.action.IAction;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.basic.cell.ICell;
+import org.eclipse.scout.rt.client.ui.basic.table.ISortOrderColumn;
import org.eclipse.scout.rt.client.ui.basic.table.ITable;
import org.eclipse.scout.rt.client.ui.basic.table.ITableRow;
import org.eclipse.scout.rt.client.ui.basic.table.TableEvent;
@@ -1186,6 +1187,14 @@ public class SwingScoutTable extends SwingScoutComposite<ITable> implements ISwi
}
label.setIcon(icon);
label.setDisabledIcon(icon);
+
+ // Sort Order Column
+ if (scoutCol instanceof ISortOrderColumn) {
+ IColumn sortCol = (IColumn) cell.getValue();
+ if (sortCol != null && sortCol.isSortActive() && sortCol.isSortExplicit()) {
+ label.setIcon(SortIconUtility.createSortIcon(sortCol, sortCol.getTable().getColumnSet().getSortColumns(), sortCol.isSortAscending()));
+ }
+ }
}
// foreground
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingTableHeaderCellRenderer.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingTableHeaderCellRenderer.java
index f0fb7fc96d..bf4ddf37ea 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingTableHeaderCellRenderer.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/basic/table/SwingTableHeaderCellRenderer.java
@@ -98,12 +98,7 @@ public class SwingTableHeaderCellRenderer implements TableCellRenderer {
// icon
Icon sortIcon = null;
if (cell.isSortActive() && cell.isSortExplicit()) {
- if (cell.isSortAscending()) {
- sortIcon = m_sortUpIcon;
- }
- else {
- sortIcon = m_sortDownIcon;
- }
+ sortIcon = SortIconUtility.createSortIcon(scoutCol, scoutTable.getColumnSet().getSortColumns(), cell.isSortAscending());
}
Icon filterIcon = null;
if (scoutCol.isColumnFilterActive()) {

Back to the top