1 /*******************************************************************************
\r
2 * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.
\r
3 * All rights reserved. This program and the accompanying materials
\r
4 * are made available under the terms of the Eclipse Public License v1.0
\r
5 * which accompanies this distribution, and is available at
\r
6 * http://www.eclipse.org/legal/epl-v10.html
\r
9 * VTT Technical Research Centre of Finland - initial API and implementation
\r
10 *******************************************************************************/
\r
11 package org.simantics.proconf.g3d.views;
\r
13 import org.eclipse.jface.viewers.ISelection;
\r
14 import org.eclipse.swt.layout.GridData;
\r
15 import org.eclipse.swt.layout.GridLayout;
\r
16 import org.eclipse.swt.widgets.Composite;
\r
17 import org.eclipse.swt.widgets.Display;
\r
18 import org.eclipse.ui.IPartListener;
\r
19 import org.eclipse.ui.IWorkbenchPart;
\r
20 import org.eclipse.ui.forms.events.ExpansionAdapter;
\r
21 import org.eclipse.ui.forms.events.ExpansionEvent;
\r
22 import org.eclipse.ui.forms.widgets.FormToolkit;
\r
23 import org.eclipse.ui.forms.widgets.ScrolledForm;
\r
24 import org.eclipse.ui.forms.widgets.Section;
\r
25 import org.simantics.db.Graph;
\r
26 import org.simantics.db.GraphRequestAdapter;
\r
27 import org.simantics.db.GraphRequestStatus;
\r
28 import org.simantics.db.Session;
\r
29 import org.simantics.proconf.g3d.common.StructuredResourceSelection;
\r
30 import org.simantics.proconf.ui.workbench.ResourceEditorPart;
\r
31 import org.simantics.utils.ui.ErrorLogger;
\r
32 import org.simantics.utils.ui.ISelectionUtils;
\r
33 import org.simantics.utils.ui.jface.BaseSelectionProvider;
\r
37 public abstract class SinglePageResourceEditor extends ResourceEditorPart {
\r
38 private ScrolledForm form;
\r
39 private BaseSelectionProvider defaultInputSelectionProvider = new BaseSelectionProvider();
\r
40 protected FormToolkit toolkit;
\r
43 public void createPartControl(Composite parent) {
\r
44 this.getEditorSite().getPage().addPartListener(new IPartListener() {
\r
46 boolean opened = false;
\r
47 boolean activated = false;
\r
49 public void partOpened(IWorkbenchPart part) {
\r
50 if (part.equals(SinglePageResourceEditor.this.getEditorSite().getPart())) {
\r
55 public void partActivated(IWorkbenchPart part) {
\r
56 if (part.equals(SinglePageResourceEditor.this.getEditorSite().getPart())) {
\r
57 if (opened & !activated) {
\r
64 public void partBroughtToTop(IWorkbenchPart part) {}
\r
66 public void partClosed(IWorkbenchPart part) {}
\r
68 public void partDeactivated(IWorkbenchPart part) {}
\r
70 private void load() {
\r
71 Session ses = SinglePageResourceEditor.this.getSession();
\r
72 GraphRequestAdapter r = new GraphRequestAdapter() {
\r
74 public GraphRequestStatus perform(Graph g)
\r
77 return GraphRequestStatus.transactionComplete();
\r
84 toolkit = new FormToolkit(parent.getDisplay());
\r
85 form = getToolkit().createScrolledForm(parent);
\r
87 GridLayout layout = new GridLayout(2, false);
\r
88 form.getBody().setLayout(layout);
\r
89 form.getBody().setLayoutData(
\r
90 new GridData(GridData.FILL, GridData.FILL, true, true));
\r
92 // By default make this ViewPart use a default ISelectionProvider
\r
93 // that will offer the viewparts input resource as its selection.
\r
94 // The Resource is wrapped into a ResourceSelection object.
\r
95 // Any widgets created in createWidgets may override the default
\r
96 // selection provider.
\r
97 getEditorSite().setSelectionProvider(defaultInputSelectionProvider);
\r
99 beforeCreateWidgets();
\r
104 form.setText(getFormText());
\r
106 // Finally Set the default selection which will have an effect only
\r
107 // if nothing in createWidgets has overridden the default selection
\r
109 ISelection s = ISelectionUtils
\r
110 .createSelection(new StructuredResourceSelection(
\r
111 getInputResource()));
\r
112 defaultInputSelectionProvider.setSelection(s);
\r
114 } catch (Exception e) {
\r
115 Display d = getSite().getShell().getDisplay();
\r
116 d.asyncExec(new Runnable() {
\r
117 public void run() {
\r
118 getSite().getPage().closeEditor(
\r
119 SinglePageResourceEditor.this, false);
\r
123 ErrorLogger.defaultLogError("Single-page type editor failed to open, see exception for details",e);
\r
127 public ScrolledForm getActiveForm() {
\r
131 protected Composite getBody() {
\r
132 return form.getBody();
\r
135 public Composite newGridSection(int formColumns, int childColumns,
\r
136 boolean equalWidth, boolean grabVertical, String text,
\r
137 String description) {
\r
138 return newGridSection(getBody(), formColumns, childColumns, equalWidth,
\r
139 grabVertical, text, description);
\r
142 public Composite newGridSection(Composite parent, int formColumns,
\r
143 int childColumns, boolean equalWidth, boolean grabVertical,
\r
144 String text, String description) {
\r
145 FormToolkit toolkit = getToolkit();
\r
147 Section section = toolkit.createSection(parent, Section.DESCRIPTION
\r
148 | Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED);
\r
149 section.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true,
\r
150 grabVertical, formColumns, 1));
\r
151 section.addExpansionListener(new ExpansionAdapter() {
\r
152 public void expansionStateChanged(ExpansionEvent e) {
\r
153 //System.out.println("SinglePageTypeEditor: expansionStateChanged " + e);
\r
157 section.setText(text);
\r
158 section.setDescription(description);
\r
159 Composite sectionClient = toolkit.createComposite(section);
\r
160 sectionClient.setLayout(new GridLayout(childColumns, equalWidth));
\r
161 sectionClient.setLayoutData(new GridData());
\r
162 section.setClient(sectionClient);
\r
163 return sectionClient;
\r
168 //----------------------------------------------------------------------
\r
171 public FormToolkit getToolkit() {
\r
175 //----------------------------------------------------------------------
\r
178 public void reflow(boolean flushCache) {
\r
179 //System.out.println("FormTypeEditorBase.reflow(" + flushCache + ")");
\r
180 getActiveForm().reflow(flushCache);
\r
184 public void dispose() {
\r
185 if (toolkit != null) {
\r
192 public void setFocus() {
\r
193 //System.out.println("FormTypeEditorBase.setFocus(): Input = " + getInput());
\r
194 ScrolledForm form = getActiveForm();
\r
195 if (form != null) {
\r
200 protected abstract String getFormText();
\r
203 * Returns null by default which makes {@link #updateTitle()} not set the
\r
204 * part name programmatically, i.e. the plugin-defined view name will stay.
\r
208 protected String getTitleText() {
\r
213 * Return null by default which makes {@link #updateTitle()} clear the
\r
218 protected String getTitleTooltip() {
\r
223 * A method for performing initializations just before UI initialization.
\r
225 protected void beforeCreateWidgets() {
\r
229 * A method for initializing the UI of the view.
\r
231 protected void createWidgets() {
\r