--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.modeling.ui.chart.property;\r
+\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.IInputValidator;\r
+import org.eclipse.jface.layout.GridDataFactory;\r
+import org.eclipse.jface.layout.GridLayoutFactory;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.ui.IWorkbenchSite;\r
+import org.simantics.NameLabelUtil;\r
+import org.simantics.Simantics;\r
+import org.simantics.browsing.ui.swt.widgets.Button;\r
+import org.simantics.browsing.ui.swt.widgets.Combo;\r
+import org.simantics.browsing.ui.swt.widgets.Label;\r
+import org.simantics.browsing.ui.swt.widgets.Scale;\r
+import org.simantics.browsing.ui.swt.widgets.TrackedText;\r
+import org.simantics.browsing.ui.swt.widgets.impl.SelectionListenerImpl;\r
+import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
+import org.simantics.charts.ontology.ChartResource;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.management.ISessionContext;\r
+import org.simantics.db.request.Read;\r
+import org.simantics.modeling.ui.Activator;\r
+import org.simantics.selectionview.ConfigurationComposite;\r
+import org.simantics.ui.utils.ResourceAdaptionUtils;\r
+import org.simantics.utils.ui.ISelectionUtils;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class ChartComposite extends ConfigurationComposite {\r
+\r
+ public static final TimeInputValidator LENGTH_VALIDATOR = new TimeInputValidator(1.0);\r
+ public static final TimeInputValidator START_VALIDATOR = new TimeInputValidator(-Double.MAX_VALUE); \r
+\r
+ public static Read<String> getPartTitleRequest(final ISelection selection) {\r
+ return new Read<String>() {\r
+ @Override\r
+ public String perform(ReadGraph graph) throws DatabaseException {\r
+ Resource r = ResourceAdaptionUtils.toSingleResource(selection);\r
+ if (r == null)\r
+ return "Selection";\r
+ return NameLabelUtil.modalName(graph, r);\r
+ }\r
+ };\r
+ }\r
+\r
+ @Override\r
+ public Read<String> getPartNameReadRequest(ISelection forSelection) {\r
+ return getPartTitleRequest(forSelection);\r
+ }\r
+\r
+ public void create(final Composite body, IWorkbenchSite site, final ISessionContext context, final WidgetSupport support) {\r
+ final Display display = body.getDisplay();\r
+\r
+ body.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+\r
+/* Composite buttonComposite = new Composite(body, SWT.NONE);\r
+ buttonComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(buttonComposite);\r
+ GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(4).extendedMargins(5,5,5,5).applyTo(buttonComposite);\r
+ \r
+ Label nameHeader = new Label(buttonComposite, support, 0);\r
+ nameHeader.setText("Name");\r
+ //nameHeader.setFont(smallFont);\r
+ nameHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(nameHeader.getWidget());\r
+\r
+ TrackedText nameText = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
+ nameText.setTextFactory(new StringPropertyFactory(Layer0.URIs.HasName, ""));\r
+ nameText.addModifyListener(new StringPropertyModifier(context, Layer0.URIs.HasName));\r
+ GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(nameText.getWidget());\r
+*/\r
+ Label autoscrollLabel = new Label(body, support, 0);\r
+ autoscrollLabel.setText("Auto-scroll settings:");\r
+ autoscrollLabel.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(autoscrollLabel.getControl());\r
+ \r
+ Composite templateComposite = new Composite(body, SWT.NONE);\r
+ templateComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(templateComposite);\r
+ GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(3).extendedMargins(5,5,5,5).applyTo(templateComposite);\r
+\r
+ Label templateHeader = new Label(templateComposite, support, 0);\r
+ templateHeader.setText("Template");\r
+ //templateHeader.setFont(smallFont);\r
+ templateHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(templateHeader.getWidget());\r
+\r
+ Combo templateCombo = new Combo(templateComposite, support, SWT.NONE | SWT.READ_ONLY);\r
+ templateCombo.setItemFactory(new AvailableTemplateFactory());\r
+ templateCombo.setSelectionFactory(new CurrentTemplateFactory());\r
+ templateCombo.addModifyListener(new TemplateModifier());\r
+ GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(templateCombo.getWidget());\r
+\r
+ Button resetButton = new Button(templateComposite, support, SWT.NONE | SWT.READ_ONLY);\r
+ resetButton.setText("Apply");\r
+ resetButton.addSelectionListener(new SelectionListenerImpl<Resource>(context) {\r
+ @Override\r
+ public void apply(WriteGraph graph, Resource monitor) throws DatabaseException {\r
+ graph.markUndoPoint();\r
+ ChartResource CHART = ChartResource.getInstance(graph);\r
+ if (graph.hasStatement(monitor, CHART.Chart_TimeWindowStart))\r
+ graph.deny(monitor, CHART.Chart_TimeWindowStart);\r
+ if (graph.hasStatement(monitor, CHART.Chart_TimeWindowLength))\r
+ graph.deny(monitor, CHART.Chart_TimeWindowLength);\r
+ if (graph.hasStatement(monitor, CHART.Chart_TimeWindowIncrement))\r
+ graph.deny(monitor, CHART.Chart_TimeWindowIncrement);\r
+ }\r
+ });\r
+ GridDataFactory.fillDefaults().grab(false, false).span(1, 1).applyTo(resetButton.getWidget());\r
+\r
+ Composite buttonComposite = new Composite(body, SWT.NONE);\r
+ buttonComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(buttonComposite);\r
+ GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(4).extendedMargins(5,5,5,5).applyTo(buttonComposite);\r
+\r
+ Label startHeader = new Label(buttonComposite, support, 0);\r
+ startHeader.setText("Start time");\r
+ //startHeader.setFont(smallFont);\r
+ startHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(startHeader.getWidget());\r
+\r
+ TrackedText timeWindowStart = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
+ timeWindowStart.getWidget().setToolTipText("Chart Window Fixed Start Time in Seconds or Yy Dd HH:mm:ss.ddd");\r
+ timeWindowStart.setTextFactory(new TimePropertyFactory(ChartResource.URIs.Chart_TimeWindowStart));\r
+ timeWindowStart.addModifyListener(new TimePropertyModifier(context, ChartResource.URIs.Chart_TimeWindowStart, START_VALIDATOR));\r
+ timeWindowStart.setInputValidator( START_VALIDATOR );\r
+ GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(timeWindowStart.getWidget());\r
+\r
+// Label l1 = new Label(buttonComposite, support, 0);\r
+// l1.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+// l1.setText("seconds");\r
+\r
+ Label sizeHeader = new Label(buttonComposite, support, 0);\r
+ sizeHeader.setText("Length");\r
+ //sizeHeader.setFont(smallFont);\r
+ sizeHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(sizeHeader.getWidget());\r
+\r
+ TrackedText timeWindowLength = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
+ timeWindowLength.getWidget().setToolTipText("Chart Window Fixed Time Axis Length in Seconds or Yy Dd HH:mm:ss.ddd");\r
+ timeWindowLength.setTextFactory(new TimePropertyFactory(ChartResource.URIs.Chart_TimeWindowLength));\r
+ timeWindowLength.addModifyListener(new TimePropertyModifier(context, ChartResource.URIs.Chart_TimeWindowLength, LENGTH_VALIDATOR));\r
+ timeWindowLength.setInputValidator( LENGTH_VALIDATOR );\r
+ GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(timeWindowLength.getWidget());\r
+\r
+// Label l2 = new Label(buttonComposite, support, 0);\r
+// l2.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+// l2.setText("seconds");\r
+\r
+ Label incrementHeader = new Label(buttonComposite, support, 0);\r
+ incrementHeader.setText("Scroll increment");\r
+ //incrementHeader.setFont(smallFont);\r
+ incrementHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(incrementHeader.getWidget());\r
+\r
+ Scale timeWindowIncrement = new Scale(buttonComposite, support, SWT.READ_ONLY);\r
+ timeWindowIncrement.getWidget().setMinimum(1);\r
+ timeWindowIncrement.getWidget().setMaximum(100);\r
+ timeWindowIncrement.getWidget().setIncrement(10);\r
+ timeWindowIncrement.getWidget().setPageIncrement(10);\r
+ timeWindowIncrement.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ timeWindowIncrement.setSelectionFactory(new DoubleToIntegerPropertyFactory(ChartResource.URIs.Chart_TimeWindowIncrement));\r
+ timeWindowIncrement.addSelectionListener(new DelayedIntegerToDoublePropertyModifier(timeWindowIncrement, context, ChartResource.URIs.Chart_TimeWindowIncrement));\r
+ GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(timeWindowIncrement.getWidget());\r
+\r
+ TrackedText timeWindowIncrementText = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
+ timeWindowIncrementText.setTextFactory(new DoublePropertyFactory(ChartResource.URIs.Chart_TimeWindowIncrement));\r
+ timeWindowIncrementText.addModifyListener(new DoublePropertyModifier(context, ChartResource.URIs.Chart_TimeWindowIncrement));\r
+ timeWindowIncrementText.setInputValidator(new IInputValidator() {\r
+ @Override\r
+ public String isValid(String newText) {\r
+ if (newText.trim().isEmpty())\r
+ return null;\r
+ try {\r
+ Double d = Double.parseDouble(newText);\r
+ if (d < 1 || d > 100)\r
+ return "Increment must be between 1..100";\r
+ return null;\r
+ } catch (NumberFormatException e) {\r
+ return e.getMessage();\r
+ }\r
+ }\r
+ });\r
+ GridDataFactory.fillDefaults().grab(false, false).align(SWT.LEAD, SWT.CENTER).span(1, 1).applyTo(timeWindowIncrementText.getWidget());\r
+\r
+ Label l3 = new Label(buttonComposite, support, 0);\r
+ l3.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ l3.setText("%");\r
+\r
+ Composite checkboxComposite = new Composite(buttonComposite, SWT.NONE);\r
+ checkboxComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(checkboxComposite);\r
+ GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(2).applyTo(checkboxComposite);\r
+\r
+ final Button showMilestones = new Button(checkboxComposite, support, SWT.CHECK);\r
+ showMilestones.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ showMilestones.setText("Show &Milestones");\r
+ GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(showMilestones.getWidget());\r
+ showMilestones.setSelectionFactory(new BooleanPropertyFactory(ChartResource.URIs.Chart_ShowMilestones));\r
+ showMilestones.addSelectionListener(new SelectionAdapter() {\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ try {\r
+ final Resource r = ISelectionUtils.filterSingleSelection(support.getInput(), Resource.class);\r
+ if (r == null)\r
+ return;\r
+ final Boolean show = showMilestones.getWidget().getSelection();\r
+ Simantics.getSession().syncRequest(new WriteRequest() {\r
+ @Override\r
+ public void perform(WriteGraph graph) throws DatabaseException {\r
+ graph.markUndoPoint();\r
+ graph.claimLiteral(r, ChartResource.getInstance(graph).Chart_ShowMilestones, show, Bindings.BOOLEAN);\r
+ }\r
+ });\r
+ } catch (DatabaseException e1) {\r
+ Activator.getDefault().getLog().log(\r
+ new Status(IStatus.ERROR, Activator.PLUGIN_ID,\r
+ "Failed to set Show Milestones", e1));\r
+ }\r
+ }\r
+ });\r
+\r
+ final Button trackExperimentTime = new Button(checkboxComposite, support, SWT.CHECK);\r
+ trackExperimentTime.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
+ trackExperimentTime.setText("Hairline &Tracks Experiment Time");\r
+ trackExperimentTime.setTooltipText("Value Tip Hairline Tracks Experiment Time During Simulation");\r
+ GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(trackExperimentTime.getWidget());\r
+ trackExperimentTime.setSelectionFactory(new BooleanPropertyFactory(ChartResource.URIs.Chart_trackExperimentTime));\r
+ trackExperimentTime.addSelectionListener(new SelectionAdapter() {\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ try {\r
+ final Resource r = ISelectionUtils.filterSingleSelection(support.getInput(), Resource.class);\r
+ if (r == null)\r
+ return;\r
+ final Boolean track = trackExperimentTime.getWidget().getSelection();\r
+ Simantics.getSession().syncRequest(new WriteRequest() {\r
+ @Override\r
+ public void perform(WriteGraph graph) throws DatabaseException {\r
+ graph.markUndoPoint();\r
+ graph.claimLiteral(r, ChartResource.getInstance(graph).Chart_trackExperimentTime, track, Bindings.BOOLEAN);\r
+ }\r
+ });\r
+ } catch (DatabaseException e1) {\r
+ Activator.getDefault().getLog().log(\r
+ new Status(IStatus.ERROR, Activator.PLUGIN_ID,\r
+ "Failed to set Track Experiment Time", e1));\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+}\r