-package org.simantics.modeling.adapters;\r
-\r
-import org.eclipse.jface.dialogs.IDialogConstants;\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.layout.GridLayoutFactory;\r
-import org.eclipse.jface.layout.TableColumnLayout;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.resource.JFaceResources;\r
-import org.eclipse.jface.resource.LocalResourceManager;\r
-import org.eclipse.jface.viewers.ColumnLabelProvider;\r
-import org.eclipse.jface.viewers.ColumnWeightData;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.IStructuredContentProvider;\r
-import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.jface.viewers.SelectionChangedEvent;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.jface.viewers.TableViewerColumn;\r
-import org.eclipse.jface.viewers.Viewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.Clipboard;\r
-import org.eclipse.swt.dnd.TextTransfer;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.graphics.Color;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.swt.widgets.Text;\r
-import org.simantics.utils.strings.EString;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class RemoveInstancesDialog extends MessageDialog {\r
-\r
- public static class Content {\r
- public String label;\r
- public ImageDescriptor image;\r
- public String details;\r
-\r
- public Content(String label) {\r
- assert label != null;\r
- this.label = label;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- if (details == null)\r
- return label;\r
- return label + "\nDetails: " + details;\r
- }\r
- }\r
-\r
- protected String message;\r
- protected boolean hasDetails; \r
-\r
- protected Content[] content;\r
-\r
- protected LocalResourceManager resourceManager;\r
- protected Composite tableAndButtons;\r
- protected Text messageText;\r
- protected Text detailsText;\r
- private GridData detailsGridData;\r
-\r
- public RemoveInstancesDialog(Shell parentShell, String dialogTitle, String dialogMessage, Content[] content) {\r
- this(parentShell,\r
- dialogTitle,\r
- dialogMessage,\r
- MessageDialog.QUESTION,\r
- new String[] {\r
- IDialogConstants.PROCEED_LABEL,\r
- IDialogConstants.CANCEL_LABEL\r
- },\r
- 1,\r
- content);\r
- }\r
-\r
- public RemoveInstancesDialog(Shell parentShell, String dialogTitle, String dialogMessage, int dialogType, String[] buttons, int defaultIndex, Content[] content) {\r
- super(parentShell,\r
- dialogTitle,\r
- null,\r
- null,\r
- dialogType,\r
- buttons,\r
- defaultIndex);\r
-\r
- this.message = dialogMessage;\r
- this.content = content;\r
- this.hasDetails = contentHasDetails(content);\r
- }\r
-\r
- private boolean contentHasDetails(Content[] content) {\r
- for (Content c : content) {\r
- if (c.details != null && !c.details.trim().isEmpty())\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
- @Override\r
- protected int getShellStyle() {\r
- return super.getShellStyle() | SWT.RESIZE;\r
- }\r
-\r
- @Override\r
- protected Control createDialogArea(Composite parent) {\r
- resourceManager = new LocalResourceManager(JFaceResources.getResources(), parent);\r
- Composite composite = (Composite) super.createDialogArea(parent);\r
- return composite;\r
- }\r
-\r
- @Override\r
- protected Control createMessageArea(Composite composite) {\r
- super.createMessageArea(composite);\r
- // create message\r
- if (message != null) {\r
- messageText = new Text(composite, getMessageLabelStyle());\r
- messageText.setText(message);\r
- messageText.setEditable(false);\r
- GridDataFactory\r
- .fillDefaults()\r
- .align(SWT.FILL, SWT.BEGINNING)\r
- .grab(true, false)\r
- .hint(\r
- convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH),\r
- SWT.DEFAULT).applyTo(messageText);\r
- }\r
- return composite;\r
- }\r
-\r
- @Override\r
- protected Control createCustomArea(Composite parent) {\r
- tableAndButtons = new Composite(parent, 0);\r
- GridDataFactory.fillDefaults().grab(true, true).applyTo(tableAndButtons);\r
- GridLayoutFactory.fillDefaults().numColumns(2).applyTo(tableAndButtons);\r
-\r
- Label uses = new Label(tableAndButtons, 0);\r
- uses.setText("Instances:");\r
- GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(uses);\r
-\r
- TableColumnLayout ad = new TableColumnLayout();\r
- Composite tableComposite = new Composite(tableAndButtons, SWT.NONE);\r
- GridDataFactory.fillDefaults().grab(true, true).minSize(300, 300).applyTo(tableComposite);\r
- tableComposite.setLayout(ad);\r
- TableViewer viewer = new TableViewer(tableComposite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);\r
- viewer.setContentProvider(new CP());\r
- TableViewerColumn c1 = new TableViewerColumn(viewer, SWT.LEFT);\r
- c1.setLabelProvider(new LP());\r
- ad.setColumnData(c1.getColumn(), new ColumnWeightData(100, 100, true));\r
-\r
- Composite buttons = new Composite(tableAndButtons, 0);\r
- GridDataFactory.fillDefaults().grab(false, true).applyTo(buttons);\r
- GridLayoutFactory.fillDefaults().numColumns(1).applyTo(buttons);\r
-\r
- Button copyButton = new Button(buttons, SWT.PUSH);\r
- copyButton.setText("&Copy to Clipboard");\r
- copyButton.setToolTipText("Copy List Contents to Clipboard");\r
- copyButton.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- String text = EString.implode(content, String.format("%n"));\r
- Clipboard cp = new Clipboard(e.display);\r
- cp.setContents(new Object[] { text }, new Transfer[] { TextTransfer.getInstance() });\r
- cp.dispose();\r
- }\r
- });\r
-\r
-// Button navigateButton = new Button(buttons, SWT.PUSH);\r
-// navigateButton.setText("Go To");\r
-// navigateButton.setToolTipText("Go To Selected Instances");\r
-\r
- detailsText = new Text(tableAndButtons, SWT.BORDER | SWT.WRAP | SWT.MULTI | SWT.V_SCROLL);\r
- Color bg = detailsText.getBackground();\r
- detailsText.setEditable(false);\r
- detailsText.setBackground(bg);\r
- detailsGridData = GridDataFactory.fillDefaults().grab(true, false).hint(SWT.DEFAULT, 100).span(2, 1).create();\r
- detailsText.setLayoutData(detailsGridData);\r
-\r
- viewer.addSelectionChangedListener(new ISelectionChangedListener() {\r
- @Override\r
- public void selectionChanged(SelectionChangedEvent event) {\r
- IStructuredSelection sel = (IStructuredSelection) event.getSelection();\r
- Content content = (Content)(sel.getFirstElement());\r
- showDetails(content);\r
- }\r
- });\r
- viewer.setInput(content);\r
-\r
- detailsText.getDisplay().asyncExec(new Runnable() {\r
- @Override\r
- public void run() {\r
- showDetails(null);\r
- }\r
- });\r
- return tableAndButtons;\r
- }\r
-\r
- protected void showDetails(Content content) {\r
- if (detailsText == null || detailsText.isDisposed())\r
- return;\r
- if (content != null && content.details != null) {\r
- detailsText.setText(content.details);\r
- if (detailsGridData.exclude) {\r
- detailsGridData.exclude = false;\r
- detailsGridData.heightHint = 100;\r
- tableAndButtons.layout(true, true);\r
- }\r
- } else {\r
- detailsText.setText("");\r
- if (!detailsGridData.exclude) {\r
- detailsGridData.exclude = true;\r
- detailsGridData.heightHint = 0;\r
- detailsText.setSize(0, 0);\r
- tableAndButtons.layout(true, true);\r
- }\r
- }\r
- }\r
-\r
- protected class CP implements IStructuredContentProvider {\r
-\r
- @Override\r
- public void dispose() {\r
- }\r
-\r
- @Override\r
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
- }\r
-\r
- @Override\r
- public Object[] getElements(Object inputElement) {\r
- return content;\r
- }\r
-\r
- }\r
-\r
- protected class LP extends ColumnLabelProvider {\r
- @Override\r
- public Image getImage(Object element) {\r
- Content content = (Content) element;\r
- return content.image != null ? (Image) resourceManager.get(content.image) : null;\r
- }\r
- @Override\r
- public String getText(Object element) {\r
- Content content = (Content) element;\r
- return content.label;\r
- }\r
- }\r
-\r
-}\r
+package org.simantics.modeling.adapters;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.layout.TableColumnLayout;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.simantics.utils.strings.EString;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class RemoveInstancesDialog extends MessageDialog {
+
+ public static class Content {
+ public String label;
+ public ImageDescriptor image;
+ public String details;
+
+ public Content(String label) {
+ assert label != null;
+ this.label = label;
+ }
+
+ @Override
+ public String toString() {
+ if (details == null)
+ return label;
+ return label + "\nDetails: " + details;
+ }
+ }
+
+ protected String message;
+ protected boolean hasDetails;
+
+ protected Content[] content;
+
+ protected LocalResourceManager resourceManager;
+ protected Composite tableAndButtons;
+ protected Text messageText;
+ protected Text detailsText;
+ private GridData detailsGridData;
+
+ public RemoveInstancesDialog(Shell parentShell, String dialogTitle, String dialogMessage, Content[] content) {
+ this(parentShell,
+ dialogTitle,
+ dialogMessage,
+ MessageDialog.QUESTION,
+ new String[] {
+ IDialogConstants.PROCEED_LABEL,
+ IDialogConstants.CANCEL_LABEL
+ },
+ 1,
+ content);
+ }
+
+ public RemoveInstancesDialog(Shell parentShell, String dialogTitle, String dialogMessage, int dialogType, String[] buttons, int defaultIndex, Content[] content) {
+ super(parentShell,
+ dialogTitle,
+ null,
+ null,
+ dialogType,
+ buttons,
+ defaultIndex);
+
+ this.message = dialogMessage;
+ this.content = content;
+ this.hasDetails = contentHasDetails(content);
+ }
+
+ private boolean contentHasDetails(Content[] content) {
+ for (Content c : content) {
+ if (c.details != null && !c.details.trim().isEmpty())
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ protected int getShellStyle() {
+ return super.getShellStyle() | SWT.RESIZE;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ resourceManager = new LocalResourceManager(JFaceResources.getResources(), parent);
+ Composite composite = (Composite) super.createDialogArea(parent);
+ return composite;
+ }
+
+ @Override
+ protected Control createMessageArea(Composite composite) {
+ super.createMessageArea(composite);
+ // create message
+ if (message != null) {
+ messageText = new Text(composite, getMessageLabelStyle());
+ messageText.setText(message);
+ messageText.setEditable(false);
+ GridDataFactory
+ .fillDefaults()
+ .align(SWT.FILL, SWT.BEGINNING)
+ .grab(true, false)
+ .hint(
+ convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH),
+ SWT.DEFAULT).applyTo(messageText);
+ }
+ return composite;
+ }
+
+ @Override
+ protected Control createCustomArea(Composite parent) {
+ tableAndButtons = new Composite(parent, 0);
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(tableAndButtons);
+ GridLayoutFactory.fillDefaults().numColumns(2).applyTo(tableAndButtons);
+
+ Label uses = new Label(tableAndButtons, 0);
+ uses.setText("Instances:");
+ GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(uses);
+
+ TableColumnLayout ad = new TableColumnLayout();
+ Composite tableComposite = new Composite(tableAndButtons, SWT.NONE);
+ GridDataFactory.fillDefaults().grab(true, true).minSize(300, 300).applyTo(tableComposite);
+ tableComposite.setLayout(ad);
+ TableViewer viewer = new TableViewer(tableComposite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
+ viewer.setContentProvider(new CP());
+ TableViewerColumn c1 = new TableViewerColumn(viewer, SWT.LEFT);
+ c1.setLabelProvider(new LP());
+ ad.setColumnData(c1.getColumn(), new ColumnWeightData(100, 100, true));
+
+ Composite buttons = new Composite(tableAndButtons, 0);
+ GridDataFactory.fillDefaults().grab(false, true).applyTo(buttons);
+ GridLayoutFactory.fillDefaults().numColumns(1).applyTo(buttons);
+
+ Button copyButton = new Button(buttons, SWT.PUSH);
+ copyButton.setText("&Copy to Clipboard");
+ copyButton.setToolTipText("Copy List Contents to Clipboard");
+ copyButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ String text = EString.implode(content, String.format("%n"));
+ Clipboard cp = new Clipboard(e.display);
+ cp.setContents(new Object[] { text }, new Transfer[] { TextTransfer.getInstance() });
+ cp.dispose();
+ }
+ });
+
+// Button navigateButton = new Button(buttons, SWT.PUSH);
+// navigateButton.setText("Go To");
+// navigateButton.setToolTipText("Go To Selected Instances");
+
+ detailsText = new Text(tableAndButtons, SWT.BORDER | SWT.WRAP | SWT.MULTI | SWT.V_SCROLL);
+ Color bg = detailsText.getBackground();
+ detailsText.setEditable(false);
+ detailsText.setBackground(bg);
+ detailsGridData = GridDataFactory.fillDefaults().grab(true, false).hint(SWT.DEFAULT, 100).span(2, 1).create();
+ detailsText.setLayoutData(detailsGridData);
+
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection sel = (IStructuredSelection) event.getSelection();
+ Content content = (Content)(sel.getFirstElement());
+ showDetails(content);
+ }
+ });
+ viewer.setInput(content);
+
+ detailsText.getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ showDetails(null);
+ }
+ });
+ return tableAndButtons;
+ }
+
+ protected void showDetails(Content content) {
+ if (detailsText == null || detailsText.isDisposed())
+ return;
+ if (content != null && content.details != null) {
+ detailsText.setText(content.details);
+ if (detailsGridData.exclude) {
+ detailsGridData.exclude = false;
+ detailsGridData.heightHint = 100;
+ tableAndButtons.layout(true, true);
+ }
+ } else {
+ detailsText.setText("");
+ if (!detailsGridData.exclude) {
+ detailsGridData.exclude = true;
+ detailsGridData.heightHint = 0;
+ detailsText.setSize(0, 0);
+ tableAndButtons.layout(true, true);
+ }
+ }
+ }
+
+ protected class CP implements IStructuredContentProvider {
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return content;
+ }
+
+ }
+
+ protected class LP extends ColumnLabelProvider {
+ @Override
+ public Image getImage(Object element) {
+ Content content = (Content) element;
+ return content.image != null ? (Image) resourceManager.get(content.image) : null;
+ }
+ @Override
+ public String getText(Object element) {
+ Content content = (Content) element;
+ return content.label;
+ }
+ }
+
+}