/******************************************************************************* * Copyright (c) 2016 Frank Becker and others. * 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: * 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)); } }