Mercurial > projects > dwt-addons
view dwtx/jface/internal/ConfigureColumnsDialog.d @ 90:7ffeace6c47f
Update 3.4M7 to 3.4
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 06 Jul 2008 23:30:07 +0200 |
parents | 5df4896124c7 |
children |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2008 IBM Corporation 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: * IBM Corporation - initial API and implementation * Port to the D programming language: * Frank Benoit <benoit@tionex.de> ******************************************************************************/ module dwtx.jface.internal.ConfigureColumnsDialog; import dwt.DWT; import dwt.graphics.Image; import dwt.widgets.Button; import dwt.widgets.Composite; import dwt.widgets.Control; import dwt.widgets.Event; import dwt.widgets.Item; import dwt.widgets.Label; import dwt.widgets.Listener; import dwt.widgets.Table; import dwt.widgets.TableColumn; import dwt.widgets.TableItem; import dwt.widgets.Text; import dwt.widgets.Tree; import dwt.widgets.TreeColumn; import dwtx.jface.dialogs.Dialog; import dwtx.jface.layout.GridDataFactory; import dwtx.jface.layout.GridLayoutFactory; import dwtx.jface.resource.JFaceResources; import dwtx.jface.window.IShellProvider; import dwt.dwthelper.utils; /** * NON-API - This class is internal and will be moved to another package in 3.5. * */ public class ConfigureColumnsDialog : Dialog { private Control targetControl; private ColumnObject[] columnObjects; private Table table; private Button upButton; private Button downButton; private Text text; private bool moveableColumnsFound; class ColumnObject { Item column; int index; String name; Image image; bool visible; int width; bool moveable; bool resizable; this(Item column, int index, String text, Image image, int width, bool moveable, bool resizable, bool visible) { this.column = column; this.index = index; this.name = text; this.image = image; this.width = width; this.moveable = moveable; this.resizable = resizable; this.visible = visible; } } /** * NON-API - This class is internal and will be moved to another package in * 3.5. Creates a new dialog for configuring columns of the given column * viewer. The column viewer must have an underlying {@link Tree} or {@link * Table}, other controls are not supported. * * @param shellProvider * @param table */ public this(IShellProvider shellProvider, Table table) { this(shellProvider, cast(Control) table); } /** * NON-API - This class is internal and will be moved to another package in * 3.5. Creates a new dialog for configuring columns of the given column * viewer. The column viewer must have an underlying {@link Tree} or {@link * Table}, other controls are not supported. * * @param shellProvider * @param tree */ public this(IShellProvider shellProvider, Tree tree) { this(shellProvider, cast(Control) tree); } /** * @param shellProvider * @param control */ private this(IShellProvider shellProvider, Control control) { super(shellProvider); this.targetControl = control; this.moveableColumnsFound = createColumnObjects(); } protected bool isResizable() { return true; } public void create() { super.create(); getShell().setText( JFaceResources.getString("ConfigureColumnsDialog_Title")); //$NON-NLS-1$ } protected void initializeBounds() { super.initializeBounds(); table.setSelection(0); handleSelectionChanged(0); } /** * Returns true if any of the columns is moveable (can be reordered). */ private bool createColumnObjects() { bool result = true; Item[] columns = getViewerColumns(); ColumnObject[] cObjects = new ColumnObject[columns.length]; for (int i = 0; i < columns.length; i++) { Item c = columns[i]; bool moveable = getMoveable(c); result = result && moveable; cObjects[i] = new ColumnObject(c, i, getColumnName(c), getColumnImage(c), getColumnWidth(c), moveable, getResizable(c), true); } int[] columnOrder = getColumnOrder(); columnObjects = new ColumnObject[columns.length]; for (int i = 0; i < columnOrder.length; i++) { columnObjects[i] = cObjects[columnOrder[i]]; } return result; } /** * @param c * @return */ private Image getColumnImage(Item item) { if (null !is cast(TableColumn)item ) { return (cast(TableColumn) item).getImage(); } else if (null !is cast(TreeColumn)item ) { return (cast(TreeColumn) item).getImage(); } return null; } /** * @return */ private int[] getColumnOrder() { if (null !is cast(Table)targetControl ) { return (cast(Table) targetControl).getColumnOrder(); } else if (null !is cast(Tree)targetControl ) { return (cast(Tree) targetControl).getColumnOrder(); } return new int[0]; } /** * @param c * @return */ private bool getMoveable(Item item) { if (null !is cast(TableColumn)item ) { return (cast(TableColumn) item).getMoveable(); } else if (null !is cast(TreeColumn)item ) { return (cast(TreeColumn) item).getMoveable(); } return false; } /** * @param c * @return */ private bool getResizable(Item item) { if (null !is cast(TableColumn)item ) { return (cast(TableColumn) item).getResizable(); } else if (null !is cast(TreeColumn)item ) { return (cast(TreeColumn) item).getResizable(); } return false; } protected Control createDialogArea(Composite parent) { Composite composite = cast(Composite) super.createDialogArea(parent); table = new Table(composite, DWT.BORDER | DWT.SINGLE | DWT.V_SCROLL | DWT.H_SCROLL /* * | DWT.CHECK */); for (int i = 0; i < columnObjects.length; i++) { TableItem tableItem = new TableItem(table, DWT.NONE); tableItem.setText(columnObjects[i].name); tableItem.setImage(columnObjects[i].image); tableItem.setData(columnObjects[i]); } GridDataFactory.defaultsFor(table) .span(1, moveableColumnsFound ? 3 : 1).applyTo(table); if (moveableColumnsFound) { upButton = new Button(composite, DWT.PUSH); upButton.setText(JFaceResources .getString("ConfigureColumnsDialog_up")); //$NON-NLS-1$ upButton.addListener(DWT.Selection, new class Listener { public void handleEvent(Event event) { handleMove(table, true); } }); setButtonLayoutData(upButton); downButton = new Button(composite, DWT.PUSH); downButton.setText(JFaceResources .getString("ConfigureColumnsDialog_down")); //$NON-NLS-1$ downButton.addListener(DWT.Selection, new class Listener { public void handleEvent(Event event) { handleMove(table, false); } }); setButtonLayoutData(downButton); // filler label createLabel(composite, ""); //$NON-NLS-1$ } Composite widthComposite = new Composite(composite, DWT.NONE); createLabel(widthComposite, JFaceResources .getString("ConfigureColumnsDialog_WidthOfSelectedColumn")); //$NON-NLS-1$ text = new Text(widthComposite, DWT.SINGLE | DWT.BORDER); // see #initializeBounds text.setText(Integer.toString(1000)); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(widthComposite); int numColumns = moveableColumnsFound ? 2 : 1; GridDataFactory.defaultsFor(widthComposite).grab(false, false).span( numColumns, 1).applyTo(widthComposite); GridLayoutFactory.swtDefaults().numColumns(numColumns).applyTo( composite); table.addListener(DWT.Selection, new class Listener { public void handleEvent(Event event) { handleSelectionChanged(table.indexOf(cast(TableItem) event.item)); } }); text.addListener(DWT.Modify, new class Listener { public void handleEvent(Event event) { ColumnObject columnObject = columnObjects[table .getSelectionIndex()]; if (!columnObject.resizable) { return; } try { int width = Integer.parseInt(text.getText()); columnObject.width = width; } catch (NumberFormatException ex) { // ignore for now } } }); Dialog.applyDialogFont(composite); return composite; } /** * @param table * @param up */ protected void handleMove(Table table, bool up) { int index = table.getSelectionIndex(); int newIndex = index + (up ? -1 : 1); if (index < 0 || index >= table.getItemCount()) { return; } ColumnObject columnObject = columnObjects[index]; columnObjects[index] = columnObjects[newIndex]; columnObjects[newIndex] = columnObject; table.getItem(index).dispose(); TableItem newItem = new TableItem(table, DWT.NONE, newIndex); newItem.setText(columnObject.name); newItem.setImage(columnObject.image); newItem.setData(columnObject); table.setSelection(newIndex); handleSelectionChanged(newIndex); } private void createLabel(Composite composite, String string) { Label label = new Label(composite, DWT.NONE); label.setText(string); } /** * @param item * @return */ private String getColumnName(Item item) { String result = ""; //$NON-NLS-1$ if (null !is cast(TableColumn)item ) { result = (cast(TableColumn) item).getText(); if (result.trim().equals("")) { //$NON-NLS-1$ result = (cast(TableColumn) item).getToolTipText(); } } else if (null !is cast(TreeColumn)item ) { result = (cast(TreeColumn) item).getText(); if (result.trim().equals("")) { //$NON-NLS-1$ result = (cast(TreeColumn) item).getToolTipText(); } } return result; } /** * @param item * @return */ private int getColumnWidth(Item item) { if (null !is cast(TableColumn)item ) { return (cast(TableColumn) item).getWidth(); } else if (null !is cast(TreeColumn)item ) { return (cast(TreeColumn) item).getWidth(); } return 0; } /** * @return */ private Item[] getViewerColumns() { if (null !is cast(Table)targetControl ) { return (cast(Table) targetControl).getColumns(); } else if (null !is cast(Tree)targetControl ) { return (cast(Tree) targetControl).getColumns(); } return new Item[0]; } private void handleSelectionChanged(int index) { ColumnObject c = columnObjects[index]; text.setText(Integer.toString(c.width)); text.setEnabled(c.resizable); if (moveableColumnsFound) { upButton.setEnabled(c.moveable && index > 0); downButton.setEnabled(c.moveable && index + 1 < table.getItemCount()); } } protected void okPressed() { int[] columnOrder = new int[columnObjects.length]; for (int i = 0; i < columnObjects.length; i++) { ColumnObject columnObject = columnObjects[i]; columnOrder[i] = columnObject.index; setColumnWidth(columnObject.column, columnObject.width); } setColumnOrder(columnOrder); super.okPressed(); } /** * @param column * @param width */ private void setColumnWidth(Item item, int width) { if (null !is cast(TableColumn)item ) { (cast(TableColumn) item).setWidth(width); } else if (null !is cast(TreeColumn)item ) { (cast(TreeColumn) item).setWidth(width); } } /** * @param columnOrder */ private void setColumnOrder(int[] order) { if (null !is cast(Table)targetControl ) { (cast(Table) targetControl).setColumnOrder(order); } else if (null !is cast(Tree)targetControl ) { (cast(Tree) targetControl).setColumnOrder(order); } } }