1 package org.simantics.spreadsheet.ui.editor;
\r
3 import java.util.Collection;
\r
4 import java.util.Collections;
\r
5 import java.util.TreeMap;
\r
7 import org.eclipse.swt.SWT;
\r
8 import org.eclipse.swt.layout.GridData;
\r
9 import org.eclipse.swt.widgets.Composite;
\r
10 import org.eclipse.ui.contexts.IContextService;
\r
11 import org.simantics.databoard.Bindings;
\r
12 import org.simantics.db.ReadGraph;
\r
13 import org.simantics.db.Resource;
\r
14 import org.simantics.db.common.request.UnaryRead;
\r
15 import org.simantics.db.exception.DatabaseException;
\r
16 import org.simantics.db.layer0.request.VariableName;
\r
17 import org.simantics.db.layer0.request.VariableRead;
\r
18 import org.simantics.db.layer0.request.VariableRepresents;
\r
19 import org.simantics.db.layer0.request.VariableURI;
\r
20 import org.simantics.db.layer0.variable.Variable;
\r
21 import org.simantics.db.request.Read;
\r
22 import org.simantics.layer0.Layer0;
\r
23 import org.simantics.selectionview.StandardPropertyPage;
\r
24 import org.simantics.spreadsheet.graph.GraphUI;
\r
25 import org.simantics.spreadsheet.graph.SpreadsheetGraphUtils;
\r
26 import org.simantics.spreadsheet.resource.SpreadsheetResource;
\r
27 import org.simantics.spreadsheet.ui.Spreadsheet;
\r
28 import org.simantics.spreadsheet.util.SpreadsheetUtils;
\r
29 import org.simantics.ui.workbench.IPropertyPage;
\r
30 import org.simantics.ui.workbench.ResourceEditorPart2;
\r
31 import org.simantics.utils.ui.LayoutUtils;
\r
32 import org.simantics.utils.ui.jface.ActiveSelectionProvider;
\r
34 public class SpreadsheetEditor2 extends ResourceEditorPart2 {
\r
36 public static final boolean EXCEL = false;
\r
37 public static final String EDITOR_ID = "org.simantics.spreadsheet.ui.editor2";
\r
39 private Spreadsheet spreadsheet;
\r
40 private final ActiveSelectionProvider selectionProvider = new ActiveSelectionProvider();
\r
41 private ExcelLink excelLink;
\r
44 public Spreadsheet getSpreadsheet() {
\r
49 public void createPartControl(Composite parent) {
\r
52 parent.setLayout(LayoutUtils.createNoBorderGridLayout(1));
\r
53 parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
\r
55 ui = new GraphUI(getSession());
\r
59 Variable bookVariable = getSession().syncRequest(new Read<Variable>() {
\r
62 public Variable perform(ReadGraph graph) throws DatabaseException {
\r
64 Resource book = getResourceInput2().getResource();
\r
65 Variable withContext = SpreadsheetUtils.getBookVariable(graph, book);
\r
66 return withContext;
\r
72 // getSession().syncRequest(new VariableRead<Variable>(bookVariable) {
\r
75 // public Variable perform(ReadGraph graph) throws DatabaseException {
\r
76 // SpreadsheetGraphUtils.fullSynchronization(graph, variable);
\r
82 Variable sheetVariable = getSession().syncRequest(new VariableRead<Variable>(bookVariable) {
\r
85 public Variable perform(ReadGraph graph) throws DatabaseException {
\r
87 SpreadsheetResource SR = SpreadsheetResource.getInstance(graph);
\r
88 Collection<Variable> children = variable.getChildren(graph);
\r
89 if(children.isEmpty()) return null;
\r
91 TreeMap<String,Variable> names = new TreeMap<String,Variable>();
\r
92 for(Variable child : children) {
\r
93 Resource type = child.getPossibleType(graph, SR.Spreadsheet);
\r
95 names.put(child.getName(graph), child);
\r
98 return names.firstEntry().getValue();
\r
104 String uri = getSession().syncRequest(new VariableURI(sheetVariable));
\r
106 Resource book = getSession().syncRequest(new VariableRepresents(bookVariable));
\r
107 Resource sheet = getSession().syncRequest(new VariableRepresents(sheetVariable));
\r
108 String sheetName = getSession().syncRequest(new VariableName(sheetVariable));
\r
109 String bookName = getSession().syncRequest(new VariableName(bookVariable));
\r
111 spreadsheet = new Spreadsheet(parent, SWT.NONE, ui, selectionProvider);
\r
112 spreadsheet.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
\r
114 excelLink = new ExcelLink(getSession(), sheet, spreadsheet.getClientModel(), book, bookName, sheetName, uri);
\r
117 System.out.println("Opening SpreadsheetEditor2 with uri: " + uri);
\r
118 ui.load(sheetVariable, spreadsheet.getClientInterface());
\r
120 } catch (DatabaseException e) {
\r
122 e.printStackTrace();
\r
127 spreadsheet.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
\r
128 spreadsheet.defaultInitializeUI();
\r
130 getSite().setSelectionProvider(selectionProvider);
\r
132 // Start tracking editor input validity.
\r
133 activateValidation();
\r
135 IContextService contexts = (IContextService)getSite().getService(IContextService.class);
\r
136 contexts.activateContext("org.simantics.spreadsheet.ui.context");
\r
141 public void setFocus() {
\r
142 if (spreadsheet != null)
\r
143 spreadsheet.setFocus();
\r
147 public Object getAdapter(Class adapter) {
\r
148 if (adapter == IPropertyPage.class)
\r
149 return new StandardPropertyPage(getSite(), Collections.singleton(SpreadsheetResource.URIs.BrowseContext));
\r
150 if (adapter == GraphUI.class)
\r
152 if (adapter == Spreadsheet.class)
\r
153 return getSpreadsheet();
\r
158 public void dispose() {
\r
161 excelLink.dispose();
\r
163 // backend.dispose();
\r
165 // tableModel.dispose();
\r