]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/examples/org/simantics/databoard/example/DataboardFormDialogExample.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / examples / org / simantics / databoard / example / DataboardFormDialogExample.java
1 package org.simantics.databoard.example;\r
2 \r
3 import java.util.List;\r
4 import java.util.Random;\r
5 \r
6 import org.eclipse.jface.window.Window;\r
7 import org.eclipse.swt.SWT;\r
8 import org.eclipse.swt.custom.ScrolledComposite;\r
9 import org.eclipse.swt.events.SelectionAdapter;\r
10 import org.eclipse.swt.events.SelectionEvent;\r
11 import org.eclipse.swt.layout.FillLayout;\r
12 import org.eclipse.swt.layout.GridData;\r
13 import org.eclipse.swt.layout.GridLayout;\r
14 import org.eclipse.swt.widgets.Button;\r
15 import org.eclipse.swt.widgets.Composite;\r
16 import org.eclipse.swt.widgets.Display;\r
17 import org.eclipse.swt.widgets.Event;\r
18 import org.eclipse.swt.widgets.Listener;\r
19 import org.eclipse.swt.widgets.MessageBox;\r
20 import org.eclipse.swt.widgets.Shell;\r
21 import org.simantics.databoard.Bindings;\r
22 import org.simantics.databoard.Datatypes;\r
23 import org.simantics.databoard.accessor.error.AccessorConstructionException;\r
24 import org.simantics.databoard.accessor.error.AccessorException;\r
25 import org.simantics.databoard.binding.RecordBinding;\r
26 import org.simantics.databoard.binding.error.BindingException;\r
27 import org.simantics.databoard.forms.DataboardDialog;\r
28 import org.simantics.databoard.forms.DataboardForm;\r
29 import org.simantics.databoard.forms.DataboardForm.Problem;\r
30 import org.simantics.databoard.type.Datatype;\r
31 import org.simantics.databoard.type.DoubleType;\r
32 import org.simantics.databoard.type.RecordType;\r
33 import org.simantics.databoard.type.StringType;\r
34 import org.simantics.databoard.type.UnionType;\r
35 \r
36 \r
37 public class DataboardFormDialogExample {\r
38 \r
39         public static void main(String [] args) throws BindingException, AccessorConstructionException, AccessorException {\r
40             final Display display = new Display ();\r
41             final Shell shell = new Shell (display);\r
42             shell.setLayout(new FillLayout());\r
43 \r
44             UnionType experiments = UnionType.newEnum("Result 1 - 5.11.2011 12:50",     "Result 2 - 5.11.2011 13:40", "Result 3 - 5.11.2011 15:40" ); \r
45             //UnionType mergeType = UnionType.newEnum("One file", "Many files");\r
46             \r
47             \r
48             //mergeType = UnionType.newEnum("Merge to one file", "Separate files");\r
49 \r
50             Datatype second = new DoubleType("s");\r
51             \r
52             // Diagram layers\r
53             RecordType diagramOptions = new RecordType();\r
54             \r
55             RecordType layers = new RecordType();\r
56             layers.metadata.put("style", "Dialog");\r
57             layers.addComponent("Layer 1", Datatypes.BOOLEAN);\r
58             layers.addComponent("Layer 2", Datatypes.BOOLEAN);\r
59             layers.addComponent("Layer 3", Datatypes.BOOLEAN);\r
60             diagramOptions.addComponent("Layers", layers);\r
61             \r
62             // Dialog\r
63             {\r
64                 RecordBinding b = Bindings.getMutableBinding(layers);\r
65                 Object o = b.createDefault();\r
66                     DataboardDialog dialog = new DataboardDialog(\r
67                                 display.getActiveShell(),\r
68                                 "Layer Selection",\r
69                                 b, \r
70                                 o);\r
71                     int code = dialog.open();\r
72                     if ( code == Window.OK ) {\r
73                         Object result = dialog.getResult();\r
74                         System.out.println( b.toString(result, true) );\r
75                     }\r
76             }\r
77             \r
78             // Diagram PDF Export Format options\r
79             diagramOptions.addComponent("Fit to content", Datatypes.BOOLEAN);\r
80 \r
81             // Experiment options\r
82             RecordType experimentOptions = new RecordType();        \r
83             experimentOptions.addComponent("Start Time", second);           \r
84             experimentOptions.addComponent("End Time", second);     \r
85             experimentOptions.addComponent("Experiment", experiments);      \r
86             \r
87             // CSV Export\r
88             RecordType csvOptions = new RecordType();       \r
89             csvOptions.addComponent("Step Size", second);\r
90 \r
91             // Chart options\r
92             RecordType chartOptions = new RecordType();     \r
93             chartOptions.addComponent("Autoscale", UnionType.newEnum("Stacked", "Overlapping"));\r
94             chartOptions.addComponent("TimeFormat", UnionType.newEnum("Decimal", "Time"));\r
95             chartOptions.addComponent("ValueFormat", UnionType.newEnum("Currency", "Scientific", "Engineering", "Default"));\r
96             \r
97             // PDF options\r
98             RecordType pdfOptions = new RecordType();\r
99             // PDF metadata         \r
100             pdfOptions.addComponent("Title", Datatypes.STRING );\r
101             pdfOptions.addComponent("Author", Datatypes.STRING );\r
102             pdfOptions.addComponent("Subject", Datatypes.STRING );\r
103             pdfOptions.addComponent("Keywords", DataboardForm.TEXTBOX );            \r
104             // PDF Encryption\r
105             StringType privatekeys = DataboardForm.fileOpenDialog("PKCS#12 keystore (.p12)", ".p12", "PFX (.pfx)", ".pfx"); \r
106             pdfOptions.addComponent("Private Key", privatekeys);\r
107             pdfOptions.addComponent("Keystore Password", DataboardForm.PASSWORD);\r
108             pdfOptions.addComponent("Private Key Password", DataboardForm.PASSWORD);        \r
109             // Formatter options \r
110             pdfOptions.addComponent("Compression", UnionType.newEnum("0 (No compression)", "1", "2", "3", "4", "5", "6", "7", "8", "9 (Best)"));\r
111 \r
112             // Output format\r
113             RecordType outputOptions = new RecordType(); \r
114             UnionType mergeType = new UnionType();\r
115             mergeType.metadata.put("style", "no-border");\r
116             mergeType.addComponent("One file", DataboardForm.fileSaveDialog("Comma Separated Value (.csv)", ".csv"));\r
117             mergeType.addComponent("Separate files", DataboardForm.directoryDialog());\r
118             outputOptions.addComponent("Output", mergeType);\r
119 \r
120             \r
121             ScrolledComposite scroll = new ScrolledComposite(shell, SWT.V_SCROLL);\r
122             final Composite composite = new Composite(scroll, 0);\r
123         scroll.setContent(composite);\r
124         scroll.setExpandHorizontal(true);\r
125         scroll.setExpandVertical(false);\r
126             final DataboardForm form = new DataboardForm();\r
127             form.setFirstColumnWidth(150);          \r
128             \r
129                 composite.setLayout( new GridLayout(3, false) );                        \r
130                 composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));                   \r
131             \r
132                 form.addField(composite, "Diagram", diagramOptions);\r
133                 form.addField(composite, "Experiment", experimentOptions);\r
134                 form.addField(composite, "Comma Separated Value (CSV)", csvOptions);\r
135                 form.addField(composite, "Chart", chartOptions);\r
136                 form.addField(composite, "Portable Document Format (PDF)", pdfOptions);\r
137                 form.addField(composite, "Output Options", outputOptions);\r
138                 \r
139                 form.addListener(composite, form.type(), new Listener() {\r
140                         public void handleEvent(Event event) {\r
141                                 System.out.println(event);\r
142                         } } );\r
143                 \r
144                 // Button that validates all fields\r
145                 Button validate = new Button(composite, SWT.DEFAULT);\r
146                 validate.setText( "Validate" );\r
147                 validate.addSelectionListener(new SelectionAdapter() {\r
148                         public void widgetSelected(SelectionEvent e) {\r
149                                 List<Problem> problems = form.validate(composite);\r
150                                 StringBuilder sb = new StringBuilder();\r
151                                 if ( problems.isEmpty() ) {\r
152                                         sb.append("No problemo!");\r
153                                 } else {\r
154                                         for (Problem problem : problems) {\r
155                                                 sb.append(problem.fieldReference+": "+problem.error);\r
156                                                 sb.append("\n");\r
157                                         }\r
158                                 }\r
159                                         \r
160                                 MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);\r
161                                 dialog.setText("Form");\r
162                                 dialog.setMessage( sb.toString() );\r
163                                 dialog.open();                                                                          \r
164                         }\r
165                 });\r
166                 \r
167                 \r
168                 // Button that reads all fields\r
169                 Button read = new Button(composite, SWT.DEFAULT);\r
170                 read.setText( "Read" );\r
171                 read.addSelectionListener(new SelectionAdapter() {\r
172                         public void widgetSelected(SelectionEvent e) {\r
173                             // Read result values\r
174                                 try {\r
175                                     RecordBinding binding = (RecordBinding) Bindings.getBinding( form.type() );\r
176                                     Object formValues = binding.createDefault();\r
177                                         form.readFields(composite, binding, formValues);\r
178                                         String txt = binding.toString(formValues, false);\r
179                                         \r
180                                         MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);\r
181                                         dialog.setText("Form");\r
182                                         dialog.setMessage(txt);\r
183                                         dialog.open();                                  \r
184                                         \r
185                                 } catch (AccessorConstructionException e1) {\r
186                                         e1.printStackTrace();\r
187                                 } catch (AccessorException e1) {\r
188                                         e1.printStackTrace();\r
189                                 } catch (BindingException e1) {\r
190                                         e1.printStackTrace();\r
191                                 }\r
192                         }\r
193                 });\r
194 \r
195                 // Button that writes fields\r
196                 Button write = new Button(composite, SWT.DEFAULT);\r
197                 write.setText( "Write" );\r
198                 write.addSelectionListener(new SelectionAdapter() {\r
199                         public void widgetSelected(SelectionEvent e) {\r
200                                 try {\r
201                                         RecordType type = form.type();\r
202                                     RecordBinding binding = (RecordBinding) Bindings.getBinding( type );                                    \r
203                                     Object values = binding.createRandom( new Random() );\r
204                                         form.writeFields(composite, binding, values);\r
205                                 } catch (AccessorConstructionException e1) {\r
206                                         e1.printStackTrace();\r
207                                 } catch (AccessorException e1) {\r
208                                         e1.printStackTrace();\r
209                                 } catch (BindingException e1) {\r
210                                         e1.printStackTrace();\r
211                                 }\r
212                                 \r
213                         }\r
214                 });\r
215                 \r
216                 Button modal = new Button(composite, SWT.DEFAULT);\r
217                 modal.setText("Modal");\r
218                 modal.addSelectionListener( new SelectionAdapter() {\r
219                         @Override\r
220                         public void widgetSelected(SelectionEvent e) {\r
221                                 Shell dialogShell = new Shell(display, SWT.DIALOG_TRIM);\r
222                                 // populate dialogShell\r
223                                 dialogShell.open();\r
224                                 while (!dialogShell.isDisposed()) {\r
225                                     if (!display.readAndDispatch()) {\r
226                                         display.sleep();\r
227                                     }\r
228                                 }\r
229                         }\r
230                 });\r
231                                         \r
232             composite.pack();\r
233             \r
234             shell.setSize(800,400);\r
235             //shell.layout();\r
236             shell.open ();\r
237             while (!shell.isDisposed()) {\r
238                 if (!display.readAndDispatch ()) display.sleep ();\r
239             }\r
240             \r
241             display.dispose ();\r
242         }\r
243                 \r
244 }\r