]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.charts/src/org/simantics/charts/ui/ChartDoubleClickHandler.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.charts / src / org / simantics / charts / ui / ChartDoubleClickHandler.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.charts.ui;\r
13 \r
14 import org.eclipse.swt.widgets.Display;\r
15 import org.eclipse.swt.widgets.Shell;\r
16 import org.simantics.Simantics;\r
17 import org.simantics.charts.ontology.ChartResource;\r
18 import org.simantics.charts.query.ChartAndSubscriptionItemData;\r
19 import org.simantics.charts.query.ChartAndSubscriptionItemReadQuery;\r
20 import org.simantics.charts.query.ChartAndSubscriptionItemWriteAction;\r
21 import org.simantics.charts.query.ChartDataQuery;\r
22 import org.simantics.charts.query.ChartDataWrite;\r
23 import org.simantics.db.ReadGraph;\r
24 import org.simantics.db.Resource;\r
25 import org.simantics.db.Session;\r
26 import org.simantics.db.exception.DatabaseException;\r
27 import org.simantics.ui.DoubleClickEvent;\r
28 import org.simantics.ui.IDoubleClickAction;\r
29 import org.simantics.ui.utils.ResourceAdaptionUtils;\r
30 import org.simantics.utils.ui.dialogs.ShowError;\r
31 \r
32 public class ChartDoubleClickHandler implements IDoubleClickAction {\r
33 \r
34     @Override\r
35     public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException {\r
36         ReadGraph g = e.getGraph();\r
37         final Resource resource = ResourceAdaptionUtils.toSingleResource(e.getResource());\r
38         if (resource == null)\r
39             return;\r
40 \r
41         ChartResource CHART = ChartResource.getInstance(g);\r
42         \r
43         // Handle double-click on Chart Item.\r
44         if (g.isInstanceOf(resource, CHART.Chart_Item)) {\r
45             Display display = Display.getDefault();\r
46                 openChartItemPropertiesDialog(g, resource, display);\r
47                 e.consume();\r
48         }\r
49         /*\r
50         if (g.isInstanceOf(resource, CHART.Chart)) {\r
51             Display display = Display.getDefault();\r
52                 openChartPropertiesDialog(g, resource, display);\r
53                 e.consume();\r
54         }\r
55         */\r
56     }\r
57 \r
58     public static void openChartItemPropertiesDialog(ReadGraph g, final Resource chartItem, final Display display) throws DatabaseException\r
59     {\r
60         final ChartAndSubscriptionItemData data = g.sync( new ChartAndSubscriptionItemReadQuery(chartItem) );\r
61         display.asyncExec(new Runnable() {\r
62             @Override\r
63             public void run() {\r
64                 openChartItemPropertiesDialog(display.getActiveShell(), chartItem, data, true);\r
65             }\r
66         });\r
67     }\r
68 \r
69     public static ChartAndSubscriptionItemDialog openChartItemPropertiesDialog(\r
70             Shell parentShell,\r
71             final Resource chartItem,\r
72             final ChartAndSubscriptionItemData data,\r
73             boolean shouldBlock)\r
74     {\r
75         Runnable applyAction = new Runnable() {\r
76             @Override\r
77             public void run() {\r
78                 try {\r
79                     Session s = Simantics.getSession();\r
80                     s.markUndoPoint();\r
81                     s.sync( new ChartAndSubscriptionItemWriteAction(chartItem, data) );\r
82                 } catch (DatabaseException e) {\r
83                     ShowError.showError(e.getClass().getName(), e.getLocalizedMessage(), e);\r
84                 }\r
85             }\r
86         };\r
87         ChartAndSubscriptionItemDialog d =  new ChartAndSubscriptionItemDialog( parentShell, data, true, applyAction );\r
88         d.setBlockOnOpen(shouldBlock);\r
89         if (shouldBlock) {\r
90             d.open();\r
91             return null;\r
92         } else {\r
93             d.open();\r
94             return d;\r
95         }\r
96     }\r
97 \r
98     public static void openChartPropertiesDialog(ReadGraph g, final Resource chart, final Display display) throws DatabaseException\r
99     {\r
100         final ChartData data = g.sync( new ChartDataQuery(chart) );\r
101 \r
102         display.asyncExec( new Runnable() {\r
103             @Override\r
104             public void run() {\r
105                 Display display = Display.getCurrent();\r
106                 Runnable applyAction = new Runnable() {\r
107                     @Override\r
108                     public void run() {\r
109                         try {\r
110                             Session s = Simantics.getSession();\r
111                             s.markUndoPoint();\r
112                             s.sync( new ChartDataWrite(chart, data) );\r
113                         } catch (DatabaseException e) {\r
114                             ShowError.showError(e.getClass().getName(), e.getLocalizedMessage(), e);\r
115                         }\r
116                     }\r
117                 };\r
118                 ChartDialog d =  new ChartDialog( display.getActiveShell(), data, applyAction );\r
119                 d.open();\r
120             }\r
121         });\r
122     }\r
123 \r
124 }\r