blob: 313e644ec3828430a56385f46d8a4197f4b074ec [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Frank Becker and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Frank Becker - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.commons.ui;
import java.io.File;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.mylyn.commons.core.XmlMemento;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.PlatformUI;
/**
* @author Frank Becker
* @since 3.22
*/
public class ConfigurableColumnTableViewerSupport extends TableViewerSupport {
private static final String xmlChildName = "TableColumnDescriptors"; //$NON-NLS-1$
private static final String xmlFieldAlignment = "alignment"; //$NON-NLS-1$
private static final String xmlFieldSortDirection = "sortDirection"; //$NON-NLS-1$
private static final String xmlFieldWidth = "width"; //$NON-NLS-1$
private static final String xmlFieldAutoSize = "autoSize"; //$NON-NLS-1$
private static final String xmlFieldDefaultSortColumn = "defaultSortColumn"; //$NON-NLS-1$
private final TableViewer viewer;
private final TableColumnDescriptor[] columnDescriptors;
public ConfigurableColumnTableViewerSupport(TableViewer viewer, TableColumnDescriptor[] columnDescriptors,
File stateFile) {
super(viewer, stateFile);
this.columnDescriptors = columnDescriptors;
this.viewer = viewer;
createConfigureColumnsAction(getHeaderMenu());
}
public ConfigurableColumnTableViewerSupport(TableViewer viewer, TableColumnDescriptor[] columnDescriptors,
File stateFile, boolean[] defaultVisibilities) {
super(viewer, stateFile, defaultVisibilities);
this.viewer = viewer;
this.columnDescriptors = columnDescriptors;
createConfigureColumnsAction(getHeaderMenu());
}
private void createConfigureColumnsAction(Menu parent) {
new MenuItem(parent, SWT.SEPARATOR);
MenuItem configureColumns = new MenuItem(parent, SWT.PUSH);
configureColumns.setText(Messages.ConfigurableColumnTableViewerSupport_Configure_Columns);
configureColumns.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableColumnDescriptor[] tempColumnDescriptors = new TableColumnDescriptor[columnDescriptors.length];
for (int i = tempColumnDescriptors.length - 1; i >= 0; --i) {
tempColumnDescriptors[i] = new TableColumnDescriptor(columnDescriptors[i]);
}
final TableColumnDescriptorDialog selectionDialog = new TableColumnDescriptorDialog(
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), tempColumnDescriptors);
selectionDialog.create();
int resultCode = selectionDialog.open();
if (resultCode == Window.OK) {
for (int i = 0; i < tempColumnDescriptors.length; i++) {
TableColumnDescriptor tempTableColumnDescriptor = tempColumnDescriptors[i];
TableColumnDescriptor orgTableColumnDescriptor = columnDescriptors[i];
if (!orgTableColumnDescriptor.equals(tempTableColumnDescriptor)) {
TableColumn tableColumn = viewer.getTable().getColumn(i);
orgTableColumnDescriptor.setAlignment(tempTableColumnDescriptor.getAlignment());
tableColumn.setAlignment(tempTableColumnDescriptor.getAlignment());
orgTableColumnDescriptor.setWidth(tempTableColumnDescriptor.getWidth());
tableColumn.setWidth(tempTableColumnDescriptor.getWidth());
orgTableColumnDescriptor.setSortDirection(tempTableColumnDescriptor.getSortDirection());
orgTableColumnDescriptor
.setDefaultSortColumn(tempTableColumnDescriptor.isDefaultSortColumn());
if (tempTableColumnDescriptor.isDefaultSortColumn()) {
viewer.getTable().setSortColumn(tableColumn);
viewer.getTable().setSortDirection(tempTableColumnDescriptor.getSortDirection());
}
orgTableColumnDescriptor.setAutoSize(tempTableColumnDescriptor.isAutoSize());
}
}
}
}
});
}
@Override
protected void saveAdditionalChildInfo(XmlMemento child, TableColumn column) {
TableColumnDescriptor desc = (TableColumnDescriptor) column
.getData(TableColumnDescriptor.TABLE_COLUMN_DESCRIPTOR_KEY);
XmlMemento descriptor = child.createChild(xmlChildName);
descriptor.putInteger(xmlFieldAlignment, desc.getAlignment());
descriptor.putInteger(xmlFieldSortDirection, desc.getSortDirection());
descriptor.putInteger(xmlFieldWidth, desc.getWidth());
descriptor.putBoolean(xmlFieldAutoSize, desc.isAutoSize());
descriptor.putBoolean(xmlFieldDefaultSortColumn, desc.isDefaultSortColumn());
}
@Override
protected void restoreAdditionalChildInfo(XmlMemento xmlMemento, TableColumn column) {
TableColumnDescriptor desc = (TableColumnDescriptor) column
.getData(TableColumnDescriptor.TABLE_COLUMN_DESCRIPTOR_KEY);
XmlMemento mementoDesc = xmlMemento.getChild(xmlChildName);
desc.setAlignment(mementoDesc.getInteger(xmlFieldAlignment));
desc.setSortDirection(mementoDesc.getInteger(xmlFieldSortDirection));
desc.setWidth(mementoDesc.getInteger(xmlFieldWidth));
desc.setAutoSize(mementoDesc.getBoolean(xmlFieldAutoSize));
desc.setDefaultSortColumn(mementoDesc.getBoolean(xmlFieldDefaultSortColumn));
}
}