]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.proconf.g3d/src/org/simantics/proconf/g3d/views/SinglePageResourceView.java
latest release (0.41), third attempt
[simantics/3d.git] / org.simantics.proconf.g3d / src / org / simantics / proconf / g3d / views / SinglePageResourceView.java
1 package org.simantics.proconf.g3d.views;\r
2 \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
17 \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
24         \r
25         @Override\r
26         public void createPartControl(Composite parent) {\r
27                 super.createPartControl(parent);\r
28                 this.parent = parent;\r
29 \r
30                 toolkit = new FormToolkit(parent.getDisplay());\r
31                 form = getToolkit().createScrolledForm(parent);\r
32 \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
37 \r
38                 getViewSite().setSelectionProvider(defaultInputSelectionProvider);\r
39 \r
40                 // createWidgets();\r
41 \r
42                 form.setText(getFormText());\r
43 \r
44                 hookPageSelection();\r
45 \r
46         }\r
47         \r
48         \r
49     /**\r
50      * Receives selection changes\r
51      * \r
52      * @param part\r
53      * @param selection\r
54      */\r
55     protected void pageSelectionChanged(IWorkbenchPart part, ISelection selection) {\r
56         \r
57     }\r
58         \r
59         \r
60         \r
61         \r
62         \r
63         protected abstract String getFormText();\r
64         \r
65         protected abstract void createWidgets();\r
66         \r
67         @Override\r
68         public void setFocus() {\r
69                 //System.out.println("FormTypeEditorBase.setFocus(): Input = " + getInput());\r
70                 ScrolledForm form = getActiveForm();\r
71                 if (form != null) {\r
72                         form.setFocus();\r
73                 }\r
74         }\r
75         \r
76         public FormToolkit getToolkit() {\r
77                 return toolkit;\r
78         }\r
79         \r
80         public ScrolledForm getActiveForm() {\r
81                 return form;\r
82         }\r
83         \r
84         public void clearForm() {\r
85                 for (Control c : form.getBody().getChildren())\r
86                         c.dispose();\r
87                 \r
88         }\r
89         \r
90         protected Composite getBody() {\r
91         return form.getBody();\r
92     }\r
93         \r
94         public Composite newGridSection(\r
95             int formColumns,\r
96             int childColumns,\r
97             boolean equalWidth,\r
98             boolean grabVertical,\r
99             String text,\r
100             String description) \r
101     {\r
102         return newGridSection(getBody(), formColumns, childColumns, equalWidth, grabVertical, text, description);\r
103     }\r
104 \r
105     public Composite newGridSection(\r
106             Composite parent,\r
107             int formColumns,\r
108             int childColumns,\r
109             boolean equalWidth,\r
110             boolean grabVertical,\r
111             String text,\r
112             String description)\r
113     {\r
114         FormToolkit toolkit = getToolkit();\r
115         \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
122                 //reflow(true);\r
123             }\r
124         });\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
132     }\r
133     \r
134     public void dispose() {\r
135         if (pageSelectionListener != null)\r
136             getSite().getPage().removePostSelectionListener(pageSelectionListener);\r
137     \r
138         super.dispose();\r
139     }\r
140     \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
145                     return;\r
146                 pageSelectionChanged(part, selection);\r
147             }\r
148         };\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
153     }\r
154     \r
155 }\r