package org.insightech.er.editor.view.dialog.element; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.TableEditor; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.insightech.er.ResourceString; import org.insightech.er.common.dialog.AbstractDialog; import org.insightech.er.editor.model.diagram_contents.element.node.model_properties.ModelProperties; import org.insightech.er.util.Check; import org.insightech.er.util.Format; import org.insightech.er.util.NameValue; public class ModelPropertiesDialog extends AbstractDialog { private static final int BUTTON_WIDTH = 60; private Table table; private Button addButton; private Button deleteButton; private Button upButton; private Button downButton; private ModelProperties modelProperties; private TableEditor tableEditor; int targetColumn = -1; public ModelPropertiesDialog(Shell parentShell, ModelProperties modelProperties) { super(parentShell, 2); this.modelProperties = modelProperties; } /** * {@inheritDoc} */ @Override protected void initialize(Composite composite) { this.createTableComposite(composite); this.createButtonComposite(composite); } /** * This method initializes composite1 * */ private void createTableComposite(Composite parent) { GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 3; GridData gridData = new GridData(); gridData.heightHint = 320; GridData tableGridData = new GridData(); tableGridData.horizontalSpan = 3; tableGridData.heightHint = 185; Composite composite = new Composite(parent, SWT.BORDER); composite.setLayout(gridLayout); composite.setLayoutData(gridData); table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION); table.setHeaderVisible(true); table.setLayoutData(tableGridData); table.setLinesVisible(true); TableColumn tableColumn0 = new TableColumn(table, SWT.NONE); tableColumn0.setWidth(200); tableColumn0.setText(ResourceString .getResourceString("label.property.name")); TableColumn tableColumn1 = new TableColumn(table, SWT.NONE); tableColumn1.setWidth(200); tableColumn1.setText(ResourceString .getResourceString("label.property.value")); this.tableEditor = new TableEditor(table); this.tableEditor.grabHorizontal = true; this.table.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent event) { int index = table.getSelectionIndex(); if (index == -1) { return; } TableItem item = table.getItem(index); Point selectedPoint = new Point(event.x, event.y); targetColumn = -1; for (int i = 0; i < table.getColumnCount(); i++) { Rectangle rect = item.getBounds(i); if (rect.contains(selectedPoint)) { targetColumn = i; break; } } if (targetColumn == -1) { return; } edit(item, tableEditor); } }); } private void edit(final TableItem item, final TableEditor tableEditor) { final Text text = new Text(table, SWT.NONE); text.setText(item.getText(targetColumn)); text.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { item.setText(targetColumn, text.getText()); text.dispose(); } }); tableEditor.setEditor(text, item, targetColumn); text.setFocus(); text.selectAll(); } private void addRow() { TableItem item = new TableItem(table, SWT.NULL); item.setText(0, ""); item.setText(1, ""); this.targetColumn = 0; edit(item, tableEditor); } /** * This method initializes composite2 * */ private void createButtonComposite(Composite parent) { GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 6; GridData gridData = new GridData(); gridData.horizontalSpan = 2; Composite composite = new Composite(parent, SWT.NONE); composite.setLayoutData(gridData); composite.setLayout(gridLayout); GridData buttonGridData = new GridData(); buttonGridData.widthHint = BUTTON_WIDTH; this.addButton = new Button(composite, SWT.NONE); this.addButton.setText(ResourceString .getResourceString("label.button.add")); this.addButton.setLayoutData(buttonGridData); this.addButton.addSelectionListener(new SelectionAdapter() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { addRow(); } }); this.deleteButton = new Button(composite, SWT.NONE); this.deleteButton.setText(ResourceString .getResourceString("label.button.delete")); this.deleteButton.setLayoutData(buttonGridData); this.deleteButton.addSelectionListener(new SelectionAdapter() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { removeColumn(); } }); Label filler = new Label(composite, SWT.NONE); GridData fillerGridData = new GridData(); fillerGridData.widthHint = 30; filler.setLayoutData(fillerGridData); this.upButton = new Button(composite, SWT.NONE); this.upButton.setText(ResourceString .getResourceString("label.up.arrow")); this.upButton.setLayoutData(buttonGridData); this.upButton.addSelectionListener(new SelectionAdapter() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { upColumn(); } }); this.downButton = new Button(composite, SWT.NONE); this.downButton.setText(ResourceString .getResourceString("label.down.arrow")); this.downButton.setLayoutData(buttonGridData); this.downButton.addSelectionListener(new SelectionAdapter() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { downColumn(); } }); } private void removeColumn() { int index = this.table.getSelectionIndex(); if (index != -1) { this.table.remove(index); } this.validate(); } private void upColumn() { int index = this.table.getSelectionIndex(); if (index != -1 && index != 0) { this.changeColumn(index - 1, index); this.table.setSelection(index - 1); } } private void downColumn() { int index = this.table.getSelectionIndex(); if (index != -1 && index != table.getItemCount() - 1) { this.changeColumn(index, index + 1); table.setSelection(index + 1); } } private void changeColumn(int index1, int index2) { TableItem item1 = this.table.getItem(index1); TableItem item2 = this.table.getItem(index2); String name1 = item1.getText(0); String value1 = item1.getText(1); item1.setText(0, item2.getText(0)); item1.setText(1, item2.getText(1)); item2.setText(0, name1); item2.setText(1, value1); } /** * {@inheritDoc} */ @Override protected String getErrorMessage() { return null; } /** * {@inheritDoc} */ @Override protected void perfomeOK() { this.modelProperties.clear(); for (int i = 0; i < this.table.getItemCount(); i++) { TableItem item = this.table.getItem(i); if (Check.isEmpty(item.getText(0)) && Check.isEmpty(item.getText(1))) { continue; } NameValue property = new NameValue(item.getText(0), item.getText(1)); this.modelProperties.addProperty(property); } } @Override protected String getTitle() { return "label.search.range.model.property"; } @Override protected void setData() { for (NameValue property : this.modelProperties.getProperties()) { TableItem item = new TableItem(table, SWT.NULL); item.setText(0, Format.null2blank(property.getName())); item.setText(1, Format.null2blank(property.getValue())); } } }