1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.charts.ui;
\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
32 public class ChartDoubleClickHandler implements IDoubleClickAction {
\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
41 ChartResource CHART = ChartResource.getInstance(g);
\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
50 if (g.isInstanceOf(resource, CHART.Chart)) {
\r
51 Display display = Display.getDefault();
\r
52 openChartPropertiesDialog(g, resource, display);
\r
58 public static void openChartItemPropertiesDialog(ReadGraph g, final Resource chartItem, final Display display) throws DatabaseException
\r
60 final ChartAndSubscriptionItemData data = g.sync( new ChartAndSubscriptionItemReadQuery(chartItem) );
\r
61 display.asyncExec(new Runnable() {
\r
64 openChartItemPropertiesDialog(display.getActiveShell(), chartItem, data, true);
\r
69 public static ChartAndSubscriptionItemDialog openChartItemPropertiesDialog(
\r
71 final Resource chartItem,
\r
72 final ChartAndSubscriptionItemData data,
\r
73 boolean shouldBlock)
\r
75 Runnable applyAction = new Runnable() {
\r
79 Session s = Simantics.getSession();
\r
81 s.sync( new ChartAndSubscriptionItemWriteAction(chartItem, data) );
\r
82 } catch (DatabaseException e) {
\r
83 ShowError.showError(e.getClass().getName(), e.getLocalizedMessage(), e);
\r
87 ChartAndSubscriptionItemDialog d = new ChartAndSubscriptionItemDialog( parentShell, data, true, applyAction );
\r
88 d.setBlockOnOpen(shouldBlock);
\r
98 public static void openChartPropertiesDialog(ReadGraph g, final Resource chart, final Display display) throws DatabaseException
\r
100 final ChartData data = g.sync( new ChartDataQuery(chart) );
\r
102 display.asyncExec( new Runnable() {
\r
104 public void run() {
\r
105 Display display = Display.getCurrent();
\r
106 Runnable applyAction = new Runnable() {
\r
108 public void run() {
\r
110 Session s = Simantics.getSession();
\r
112 s.sync( new ChartDataWrite(chart, data) );
\r
113 } catch (DatabaseException e) {
\r
114 ShowError.showError(e.getClass().getName(), e.getLocalizedMessage(), e);
\r
118 ChartDialog d = new ChartDialog( display.getActiveShell(), data, applyAction );
\r