1 /*******************************************************************************
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.charts.ui;
14 import org.eclipse.swt.widgets.Display;
15 import org.eclipse.swt.widgets.Shell;
16 import org.simantics.Simantics;
17 import org.simantics.charts.ontology.ChartResource;
18 import org.simantics.charts.query.ChartAndSubscriptionItemData;
19 import org.simantics.charts.query.ChartAndSubscriptionItemReadQuery;
20 import org.simantics.charts.query.ChartAndSubscriptionItemWriteAction;
21 import org.simantics.charts.query.ChartDataQuery;
22 import org.simantics.charts.query.ChartDataWrite;
23 import org.simantics.db.ReadGraph;
24 import org.simantics.db.Resource;
25 import org.simantics.db.Session;
26 import org.simantics.db.exception.DatabaseException;
27 import org.simantics.ui.DoubleClickEvent;
28 import org.simantics.ui.IDoubleClickAction;
29 import org.simantics.ui.utils.ResourceAdaptionUtils;
30 import org.simantics.utils.ui.dialogs.ShowError;
32 public class ChartDoubleClickHandler implements IDoubleClickAction {
35 public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException {
36 ReadGraph g = e.getGraph();
37 final Resource resource = ResourceAdaptionUtils.toSingleResource(e.getResource());
41 ChartResource CHART = ChartResource.getInstance(g);
43 // Handle double-click on Chart Item.
44 if (g.isInstanceOf(resource, CHART.Chart_Item)) {
45 Display display = Display.getDefault();
46 openChartItemPropertiesDialog(g, resource, display);
50 if (g.isInstanceOf(resource, CHART.Chart)) {
51 Display display = Display.getDefault();
52 openChartPropertiesDialog(g, resource, display);
58 public static void openChartItemPropertiesDialog(ReadGraph g, final Resource chartItem, final Display display) throws DatabaseException
60 final ChartAndSubscriptionItemData data = g.sync( new ChartAndSubscriptionItemReadQuery(chartItem) );
61 display.asyncExec(new Runnable() {
64 openChartItemPropertiesDialog(display.getActiveShell(), chartItem, data, true);
69 public static ChartAndSubscriptionItemDialog openChartItemPropertiesDialog(
71 final Resource chartItem,
72 final ChartAndSubscriptionItemData data,
75 Runnable applyAction = new Runnable() {
79 Session s = Simantics.getSession();
81 s.sync( new ChartAndSubscriptionItemWriteAction(chartItem, data) );
82 } catch (DatabaseException e) {
83 ShowError.showError(e.getClass().getName(), e.getLocalizedMessage(), e);
87 ChartAndSubscriptionItemDialog d = new ChartAndSubscriptionItemDialog( parentShell, data, true, applyAction );
88 d.setBlockOnOpen(shouldBlock);
98 public static void openChartPropertiesDialog(ReadGraph g, final Resource chart, final Display display) throws DatabaseException
100 final ChartData data = g.sync( new ChartDataQuery(chart) );
102 display.asyncExec( new Runnable() {
105 Display display = Display.getCurrent();
106 Runnable applyAction = new Runnable() {
110 Session s = Simantics.getSession();
112 s.sync( new ChartDataWrite(chart, data) );
113 } catch (DatabaseException e) {
114 ShowError.showError(e.getClass().getName(), e.getLocalizedMessage(), e);
118 ChartDialog d = new ChartDialog( display.getActiveShell(), data, applyAction );