--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007- VTT Technical Research Centre of Finland.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.proconf.g3d.views;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.ISelectionListener;\r
+import org.eclipse.ui.IWorkbenchPart;\r
+import org.eclipse.ui.forms.events.ExpansionAdapter;\r
+import org.eclipse.ui.forms.events.ExpansionEvent;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+import org.simantics.proconf.ui.workbench.GraphAccessViewPart;\r
+import org.simantics.utils.ui.jface.BaseSelectionProvider;\r
+\r
+public abstract class SinglePageResourceView extends GraphAccessViewPart{\r
+ protected Composite parent;\r
+ private ScrolledForm form;\r
+ private BaseSelectionProvider defaultInputSelectionProvider = new BaseSelectionProvider();\r
+ protected FormToolkit toolkit;\r
+ protected ISelectionListener pageSelectionListener;\r
+ \r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ super.createPartControl(parent);\r
+ this.parent = parent;\r
+\r
+ toolkit = new FormToolkit(parent.getDisplay());\r
+ form = getToolkit().createScrolledForm(parent);\r
+\r
+ GridLayout layout = new GridLayout(2, false);\r
+ form.getBody().setLayout(layout);\r
+ form.getBody().setLayoutData(\r
+ new GridData(GridData.FILL, GridData.FILL, true, true));\r
+\r
+ getViewSite().setSelectionProvider(defaultInputSelectionProvider);\r
+\r
+ // createWidgets();\r
+\r
+ form.setText(getFormText());\r
+\r
+ hookPageSelection();\r
+\r
+ }\r
+ \r
+ \r
+ /**\r
+ * Receives selection changes\r
+ * \r
+ * @param part\r
+ * @param selection\r
+ */\r
+ protected void pageSelectionChanged(IWorkbenchPart part, ISelection selection) {\r
+ \r
+ }\r
+ \r
+ \r
+ \r
+ \r
+ \r
+ protected abstract String getFormText();\r
+ \r
+ protected abstract void createWidgets();\r
+ \r
+ @Override\r
+ public void setFocus() {\r
+ //System.out.println("FormTypeEditorBase.setFocus(): Input = " + getInput());\r
+ ScrolledForm form = getActiveForm();\r
+ if (form != null) {\r
+ form.setFocus();\r
+ }\r
+ }\r
+ \r
+ public FormToolkit getToolkit() {\r
+ return toolkit;\r
+ }\r
+ \r
+ public ScrolledForm getActiveForm() {\r
+ return form;\r
+ }\r
+ \r
+ public void clearForm() {\r
+ for (Control c : form.getBody().getChildren())\r
+ c.dispose();\r
+ \r
+ }\r
+ \r
+ protected Composite getBody() {\r
+ return form.getBody();\r
+ }\r
+ \r
+ public Composite newGridSection(\r
+ int formColumns,\r
+ int childColumns,\r
+ boolean equalWidth,\r
+ boolean grabVertical,\r
+ String text,\r
+ String description) \r
+ {\r
+ return newGridSection(getBody(), formColumns, childColumns, equalWidth, grabVertical, text, description);\r
+ }\r
+\r
+ public Composite newGridSection(\r
+ Composite parent,\r
+ int formColumns,\r
+ int childColumns,\r
+ boolean equalWidth,\r
+ boolean grabVertical,\r
+ String text,\r
+ String description)\r
+ {\r
+ FormToolkit toolkit = getToolkit();\r
+ \r
+ Section section = toolkit.createSection(parent,\r
+ Section.DESCRIPTION | Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED);\r
+ section.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, grabVertical, formColumns, 1));\r
+ section.addExpansionListener(new ExpansionAdapter() {\r
+ public void expansionStateChanged(ExpansionEvent e) {\r
+ //System.out.println("SinglePageTypeEditor: expansionStateChanged " + e);\r
+ //reflow(true);\r
+ }\r
+ });\r
+ section.setText(text);\r
+ section.setDescription(description);\r
+ Composite sectionClient = toolkit.createComposite(section);\r
+ sectionClient.setLayout(new GridLayout(childColumns, equalWidth));\r
+ sectionClient.setLayoutData(new GridData());\r
+ section.setClient(sectionClient);\r
+ return sectionClient;\r
+ }\r
+ \r
+ public void dispose() {\r
+ if (pageSelectionListener != null)\r
+ getSite().getPage().removePostSelectionListener(pageSelectionListener);\r
+ \r
+ super.dispose();\r
+ }\r
+ \r
+ private void hookPageSelection() {\r
+ pageSelectionListener = new ISelectionListener() {\r
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
+ if (part == SinglePageResourceView.this)\r
+ return;\r
+ pageSelectionChanged(part, selection);\r
+ }\r
+ };\r
+ getSite().getPage().addPostSelectionListener(pageSelectionListener);\r
+ ISelection sel = getSite().getPage().getSelection();\r
+ IWorkbenchPart wb = getSite().getPage().getActivePart();\r
+ pageSelectionChanged(wb, sel);\r
+ }\r
+ \r
+}\r