1 package org.simantics.proconf.g3d.views;
\r
3 import org.eclipse.jface.viewers.ISelection;
\r
4 import org.eclipse.swt.layout.GridData;
\r
5 import org.eclipse.swt.layout.GridLayout;
\r
6 import org.eclipse.swt.widgets.Composite;
\r
7 import org.eclipse.swt.widgets.Control;
\r
8 import org.eclipse.ui.ISelectionListener;
\r
9 import org.eclipse.ui.IWorkbenchPart;
\r
10 import org.eclipse.ui.forms.events.ExpansionAdapter;
\r
11 import org.eclipse.ui.forms.events.ExpansionEvent;
\r
12 import org.eclipse.ui.forms.widgets.FormToolkit;
\r
13 import org.eclipse.ui.forms.widgets.ScrolledForm;
\r
14 import org.eclipse.ui.forms.widgets.Section;
\r
15 import org.simantics.proconf.ui.workbench.GraphAccessViewPart;
\r
16 import org.simantics.utils.ui.jface.BaseSelectionProvider;
\r
18 public abstract class SinglePageResourceView extends GraphAccessViewPart{
\r
19 protected Composite parent;
\r
20 private ScrolledForm form;
\r
21 private BaseSelectionProvider defaultInputSelectionProvider = new BaseSelectionProvider();
\r
22 protected FormToolkit toolkit;
\r
23 protected ISelectionListener pageSelectionListener;
\r
26 public void createPartControl(Composite parent) {
\r
27 super.createPartControl(parent);
\r
28 this.parent = parent;
\r
30 toolkit = new FormToolkit(parent.getDisplay());
\r
31 form = getToolkit().createScrolledForm(parent);
\r
33 GridLayout layout = new GridLayout(2, false);
\r
34 form.getBody().setLayout(layout);
\r
35 form.getBody().setLayoutData(
\r
36 new GridData(GridData.FILL, GridData.FILL, true, true));
\r
38 getViewSite().setSelectionProvider(defaultInputSelectionProvider);
\r
42 form.setText(getFormText());
\r
44 hookPageSelection();
\r
50 * Receives selection changes
\r
55 protected void pageSelectionChanged(IWorkbenchPart part, ISelection selection) {
\r
63 protected abstract String getFormText();
\r
65 protected abstract void createWidgets();
\r
68 public void setFocus() {
\r
69 //System.out.println("FormTypeEditorBase.setFocus(): Input = " + getInput());
\r
70 ScrolledForm form = getActiveForm();
\r
76 public FormToolkit getToolkit() {
\r
80 public ScrolledForm getActiveForm() {
\r
84 public void clearForm() {
\r
85 for (Control c : form.getBody().getChildren())
\r
90 protected Composite getBody() {
\r
91 return form.getBody();
\r
94 public Composite newGridSection(
\r
98 boolean grabVertical,
\r
100 String description)
\r
102 return newGridSection(getBody(), formColumns, childColumns, equalWidth, grabVertical, text, description);
\r
105 public Composite newGridSection(
\r
109 boolean equalWidth,
\r
110 boolean grabVertical,
\r
112 String description)
\r
114 FormToolkit toolkit = getToolkit();
\r
116 Section section = toolkit.createSection(parent,
\r
117 Section.DESCRIPTION | Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED);
\r
118 section.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, grabVertical, formColumns, 1));
\r
119 section.addExpansionListener(new ExpansionAdapter() {
\r
120 public void expansionStateChanged(ExpansionEvent e) {
\r
121 //System.out.println("SinglePageTypeEditor: expansionStateChanged " + e);
\r
125 section.setText(text);
\r
126 section.setDescription(description);
\r
127 Composite sectionClient = toolkit.createComposite(section);
\r
128 sectionClient.setLayout(new GridLayout(childColumns, equalWidth));
\r
129 sectionClient.setLayoutData(new GridData());
\r
130 section.setClient(sectionClient);
\r
131 return sectionClient;
\r
134 public void dispose() {
\r
135 if (pageSelectionListener != null)
\r
136 getSite().getPage().removePostSelectionListener(pageSelectionListener);
\r
141 private void hookPageSelection() {
\r
142 pageSelectionListener = new ISelectionListener() {
\r
143 public void selectionChanged(IWorkbenchPart part, ISelection selection) {
\r
144 if (part == SinglePageResourceView.this)
\r
146 pageSelectionChanged(part, selection);
\r
149 getSite().getPage().addPostSelectionListener(pageSelectionListener);
\r
150 ISelection sel = getSite().getPage().getSelection();
\r
151 IWorkbenchPart wb = getSite().getPage().getActivePart();
\r
152 pageSelectionChanged(wb, sel);
\r