]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/chart/property/ChartComposite.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / chart / property / ChartComposite.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.modeling.ui.chart.property;\r
13 \r
14 import org.eclipse.core.runtime.IStatus;\r
15 import org.eclipse.core.runtime.Status;\r
16 import org.eclipse.jface.dialogs.IInputValidator;\r
17 import org.eclipse.jface.layout.GridDataFactory;\r
18 import org.eclipse.jface.layout.GridLayoutFactory;\r
19 import org.eclipse.jface.viewers.ISelection;\r
20 import org.eclipse.swt.SWT;\r
21 import org.eclipse.swt.events.SelectionAdapter;\r
22 import org.eclipse.swt.events.SelectionEvent;\r
23 import org.eclipse.swt.widgets.Composite;\r
24 import org.eclipse.swt.widgets.Display;\r
25 import org.eclipse.ui.IWorkbenchSite;\r
26 import org.simantics.NameLabelUtil;\r
27 import org.simantics.Simantics;\r
28 import org.simantics.browsing.ui.swt.widgets.Button;\r
29 import org.simantics.browsing.ui.swt.widgets.Combo;\r
30 import org.simantics.browsing.ui.swt.widgets.Label;\r
31 import org.simantics.browsing.ui.swt.widgets.Scale;\r
32 import org.simantics.browsing.ui.swt.widgets.TrackedText;\r
33 import org.simantics.browsing.ui.swt.widgets.impl.SelectionListenerImpl;\r
34 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
35 import org.simantics.charts.ontology.ChartResource;\r
36 import org.simantics.databoard.Bindings;\r
37 import org.simantics.db.ReadGraph;\r
38 import org.simantics.db.Resource;\r
39 import org.simantics.db.WriteGraph;\r
40 import org.simantics.db.common.request.WriteRequest;\r
41 import org.simantics.db.exception.DatabaseException;\r
42 import org.simantics.db.management.ISessionContext;\r
43 import org.simantics.db.request.Read;\r
44 import org.simantics.modeling.ui.Activator;\r
45 import org.simantics.selectionview.ConfigurationComposite;\r
46 import org.simantics.ui.utils.ResourceAdaptionUtils;\r
47 import org.simantics.utils.ui.ISelectionUtils;\r
48 \r
49 /**\r
50  * @author Tuukka Lehtonen\r
51  */\r
52 public class ChartComposite extends ConfigurationComposite {\r
53 \r
54     public static final TimeInputValidator LENGTH_VALIDATOR = new TimeInputValidator(1.0);\r
55     public static final TimeInputValidator START_VALIDATOR = new TimeInputValidator(-Double.MAX_VALUE); \r
56 \r
57     public static Read<String> getPartTitleRequest(final ISelection selection) {\r
58         return new Read<String>() {\r
59             @Override\r
60             public String perform(ReadGraph graph) throws DatabaseException {\r
61                 Resource r = ResourceAdaptionUtils.toSingleResource(selection);\r
62                 if (r == null)\r
63                     return "Selection";\r
64                 return NameLabelUtil.modalName(graph, r);\r
65             }\r
66         };\r
67     }\r
68 \r
69     @Override\r
70     public Read<String> getPartNameReadRequest(ISelection forSelection) {\r
71         return getPartTitleRequest(forSelection);\r
72     }\r
73 \r
74     public void create(final Composite body, IWorkbenchSite site, final ISessionContext context, final WidgetSupport support) {\r
75         final Display display = body.getDisplay();\r
76 \r
77         body.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
78 \r
79 /*        Composite buttonComposite = new Composite(body, SWT.NONE);\r
80         buttonComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
81         GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(buttonComposite);\r
82         GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(4).extendedMargins(5,5,5,5).applyTo(buttonComposite);\r
83         \r
84         Label nameHeader = new Label(buttonComposite, support, 0);\r
85         nameHeader.setText("Name");\r
86         //nameHeader.setFont(smallFont);\r
87         nameHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
88         GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(nameHeader.getWidget());\r
89 \r
90         TrackedText nameText = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
91         nameText.setTextFactory(new StringPropertyFactory(Layer0.URIs.HasName, ""));\r
92         nameText.addModifyListener(new StringPropertyModifier(context, Layer0.URIs.HasName));\r
93         GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(nameText.getWidget());\r
94 */\r
95         Label autoscrollLabel = new Label(body, support, 0);\r
96         autoscrollLabel.setText("Auto-scroll settings:");\r
97         autoscrollLabel.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
98         GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(autoscrollLabel.getControl());\r
99         \r
100         Composite templateComposite = new Composite(body, SWT.NONE);\r
101         templateComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
102         GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(templateComposite);\r
103         GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(3).extendedMargins(5,5,5,5).applyTo(templateComposite);\r
104 \r
105         Label templateHeader = new Label(templateComposite, support, 0);\r
106         templateHeader.setText("Template");\r
107         //templateHeader.setFont(smallFont);\r
108         templateHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
109         GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(templateHeader.getWidget());\r
110 \r
111         Combo templateCombo = new Combo(templateComposite, support, SWT.NONE | SWT.READ_ONLY);\r
112         templateCombo.setItemFactory(new AvailableTemplateFactory());\r
113         templateCombo.setSelectionFactory(new CurrentTemplateFactory());\r
114         templateCombo.addModifyListener(new TemplateModifier());\r
115         GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(templateCombo.getWidget());\r
116 \r
117         Button resetButton = new Button(templateComposite, support, SWT.NONE | SWT.READ_ONLY);\r
118         resetButton.setText("Apply");\r
119         resetButton.addSelectionListener(new SelectionListenerImpl<Resource>(context) {\r
120             @Override\r
121             public void apply(WriteGraph graph, Resource monitor) throws DatabaseException {\r
122                 graph.markUndoPoint();\r
123                 ChartResource CHART = ChartResource.getInstance(graph);\r
124                 if (graph.hasStatement(monitor, CHART.Chart_TimeWindowStart))\r
125                     graph.deny(monitor, CHART.Chart_TimeWindowStart);\r
126                 if (graph.hasStatement(monitor, CHART.Chart_TimeWindowLength))\r
127                     graph.deny(monitor, CHART.Chart_TimeWindowLength);\r
128                 if (graph.hasStatement(monitor, CHART.Chart_TimeWindowIncrement))\r
129                     graph.deny(monitor, CHART.Chart_TimeWindowIncrement);\r
130             }\r
131         });\r
132         GridDataFactory.fillDefaults().grab(false, false).span(1, 1).applyTo(resetButton.getWidget());\r
133 \r
134         Composite buttonComposite = new Composite(body, SWT.NONE);\r
135         buttonComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
136         GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(buttonComposite);\r
137         GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(4).extendedMargins(5,5,5,5).applyTo(buttonComposite);\r
138 \r
139         Label startHeader = new Label(buttonComposite, support, 0);\r
140         startHeader.setText("Start time");\r
141         //startHeader.setFont(smallFont);\r
142         startHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
143         GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(startHeader.getWidget());\r
144 \r
145         TrackedText timeWindowStart = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
146         timeWindowStart.getWidget().setToolTipText("Chart Window Fixed Start Time in Seconds or Yy Dd HH:mm:ss.ddd");\r
147         timeWindowStart.setTextFactory(new TimePropertyFactory(ChartResource.URIs.Chart_TimeWindowStart));\r
148         timeWindowStart.addModifyListener(new TimePropertyModifier(context, ChartResource.URIs.Chart_TimeWindowStart, START_VALIDATOR));\r
149         timeWindowStart.setInputValidator( START_VALIDATOR );\r
150         GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(timeWindowStart.getWidget());\r
151 \r
152 //        Label l1 = new Label(buttonComposite, support, 0);\r
153 //        l1.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
154 //        l1.setText("seconds");\r
155 \r
156         Label sizeHeader = new Label(buttonComposite, support, 0);\r
157         sizeHeader.setText("Length");\r
158         //sizeHeader.setFont(smallFont);\r
159         sizeHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
160         GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(sizeHeader.getWidget());\r
161 \r
162         TrackedText timeWindowLength = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
163         timeWindowLength.getWidget().setToolTipText("Chart Window Fixed Time Axis Length in Seconds or Yy Dd HH:mm:ss.ddd");\r
164         timeWindowLength.setTextFactory(new TimePropertyFactory(ChartResource.URIs.Chart_TimeWindowLength));\r
165         timeWindowLength.addModifyListener(new TimePropertyModifier(context, ChartResource.URIs.Chart_TimeWindowLength, LENGTH_VALIDATOR));\r
166         timeWindowLength.setInputValidator( LENGTH_VALIDATOR );\r
167         GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(timeWindowLength.getWidget());\r
168 \r
169 //        Label l2 = new Label(buttonComposite, support, 0);\r
170 //        l2.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
171 //        l2.setText("seconds");\r
172 \r
173         Label incrementHeader = new Label(buttonComposite, support, 0);\r
174         incrementHeader.setText("Scroll increment");\r
175         //incrementHeader.setFont(smallFont);\r
176         incrementHeader.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
177         GridDataFactory.fillDefaults().grab(false, false).span(1, 1).align(SWT.LEFT, SWT.CENTER).applyTo(incrementHeader.getWidget());\r
178 \r
179         Scale timeWindowIncrement = new Scale(buttonComposite, support, SWT.READ_ONLY);\r
180         timeWindowIncrement.getWidget().setMinimum(1);\r
181         timeWindowIncrement.getWidget().setMaximum(100);\r
182         timeWindowIncrement.getWidget().setIncrement(10);\r
183         timeWindowIncrement.getWidget().setPageIncrement(10);\r
184         timeWindowIncrement.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
185         timeWindowIncrement.setSelectionFactory(new DoubleToIntegerPropertyFactory(ChartResource.URIs.Chart_TimeWindowIncrement));\r
186         timeWindowIncrement.addSelectionListener(new DelayedIntegerToDoublePropertyModifier(timeWindowIncrement, context, ChartResource.URIs.Chart_TimeWindowIncrement));\r
187         GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(timeWindowIncrement.getWidget());\r
188 \r
189         TrackedText timeWindowIncrementText = new TrackedText(buttonComposite, support, SWT.BORDER | SWT.FLAT);\r
190         timeWindowIncrementText.setTextFactory(new DoublePropertyFactory(ChartResource.URIs.Chart_TimeWindowIncrement));\r
191         timeWindowIncrementText.addModifyListener(new DoublePropertyModifier(context, ChartResource.URIs.Chart_TimeWindowIncrement));\r
192         timeWindowIncrementText.setInputValidator(new IInputValidator() {\r
193             @Override\r
194             public String isValid(String newText) {\r
195                 if (newText.trim().isEmpty())\r
196                     return null;\r
197                 try {\r
198                     Double d = Double.parseDouble(newText);\r
199                     if (d < 1 || d > 100)\r
200                         return "Increment must be between 1..100";\r
201                     return null;\r
202                 } catch (NumberFormatException e) {\r
203                     return e.getMessage();\r
204                 }\r
205             }\r
206         });\r
207         GridDataFactory.fillDefaults().grab(false, false).align(SWT.LEAD, SWT.CENTER).span(1, 1).applyTo(timeWindowIncrementText.getWidget());\r
208 \r
209         Label l3 = new Label(buttonComposite, support, 0);\r
210         l3.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
211         l3.setText("%");\r
212 \r
213         Composite checkboxComposite = new Composite(buttonComposite, SWT.NONE);\r
214         checkboxComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
215         GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(checkboxComposite);\r
216         GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(2).applyTo(checkboxComposite);\r
217 \r
218         final Button showMilestones = new Button(checkboxComposite, support, SWT.CHECK);\r
219         showMilestones.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
220         showMilestones.setText("Show &Milestones");\r
221         GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(showMilestones.getWidget());\r
222         showMilestones.setSelectionFactory(new BooleanPropertyFactory(ChartResource.URIs.Chart_ShowMilestones));\r
223         showMilestones.addSelectionListener(new SelectionAdapter() {\r
224             @Override\r
225             public void widgetSelected(SelectionEvent e) {\r
226                 try {\r
227                     final Resource r = ISelectionUtils.filterSingleSelection(support.getInput(), Resource.class);\r
228                     if (r == null)\r
229                         return;\r
230                     final Boolean show = showMilestones.getWidget().getSelection();\r
231                     Simantics.getSession().syncRequest(new WriteRequest() {\r
232                         @Override\r
233                         public void perform(WriteGraph graph) throws DatabaseException {\r
234                             graph.markUndoPoint();\r
235                             graph.claimLiteral(r, ChartResource.getInstance(graph).Chart_ShowMilestones, show, Bindings.BOOLEAN);\r
236                         }\r
237                     });\r
238                 } catch (DatabaseException e1) {\r
239                     Activator.getDefault().getLog().log(\r
240                             new Status(IStatus.ERROR, Activator.PLUGIN_ID,\r
241                                     "Failed to set Show Milestones", e1));\r
242                 }\r
243             }\r
244         });\r
245 \r
246         final Button trackExperimentTime = new Button(checkboxComposite, support, SWT.CHECK);\r
247         trackExperimentTime.setBackground(display.getSystemColor(SWT.COLOR_WHITE));\r
248         trackExperimentTime.setText("Hairline &Tracks Experiment Time");\r
249         trackExperimentTime.setTooltipText("Value Tip Hairline Tracks Experiment Time During Simulation");\r
250         GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(trackExperimentTime.getWidget());\r
251         trackExperimentTime.setSelectionFactory(new BooleanPropertyFactory(ChartResource.URIs.Chart_trackExperimentTime));\r
252         trackExperimentTime.addSelectionListener(new SelectionAdapter() {\r
253             @Override\r
254             public void widgetSelected(SelectionEvent e) {\r
255                 try {\r
256                     final Resource r = ISelectionUtils.filterSingleSelection(support.getInput(), Resource.class);\r
257                     if (r == null)\r
258                         return;\r
259                     final Boolean track = trackExperimentTime.getWidget().getSelection();\r
260                     Simantics.getSession().syncRequest(new WriteRequest() {\r
261                         @Override\r
262                         public void perform(WriteGraph graph) throws DatabaseException {\r
263                             graph.markUndoPoint();\r
264                             graph.claimLiteral(r, ChartResource.getInstance(graph).Chart_trackExperimentTime, track, Bindings.BOOLEAN);\r
265                         }\r
266                     });\r
267                 } catch (DatabaseException e1) {\r
268                     Activator.getDefault().getLog().log(\r
269                             new Status(IStatus.ERROR, Activator.PLUGIN_ID,\r
270                                     "Failed to set Track Experiment Time", e1));\r
271                 }\r
272             }\r
273         });\r
274     }\r
275 \r
276 }\r