]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.databoard/examples/org/simantics/databoard/example/DataboardFormDialogExample.java b/bundles/org.simantics.databoard/examples/org/simantics/databoard/example/DataboardFormDialogExample.java
new file mode 100644 (file)
index 0000000..f3c467f
--- /dev/null
@@ -0,0 +1,244 @@
+package org.simantics.databoard.example;\r
+\r
+import java.util.List;\r
+import java.util.Random;\r
+\r
+import org.eclipse.jface.window.Window;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.ScrolledComposite;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.layout.FillLayout;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.swt.widgets.MessageBox;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.Datatypes;\r
+import org.simantics.databoard.accessor.error.AccessorConstructionException;\r
+import org.simantics.databoard.accessor.error.AccessorException;\r
+import org.simantics.databoard.binding.RecordBinding;\r
+import org.simantics.databoard.binding.error.BindingException;\r
+import org.simantics.databoard.forms.DataboardDialog;\r
+import org.simantics.databoard.forms.DataboardForm;\r
+import org.simantics.databoard.forms.DataboardForm.Problem;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.databoard.type.DoubleType;\r
+import org.simantics.databoard.type.RecordType;\r
+import org.simantics.databoard.type.StringType;\r
+import org.simantics.databoard.type.UnionType;\r
+\r
+\r
+public class DataboardFormDialogExample {\r
+\r
+       public static void main(String [] args) throws BindingException, AccessorConstructionException, AccessorException {\r
+           final Display display = new Display ();\r
+           final Shell shell = new Shell (display);\r
+           shell.setLayout(new FillLayout());\r
+\r
+           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
+           //UnionType mergeType = UnionType.newEnum("One file", "Many files");\r
+           \r
+           \r
+           //mergeType = UnionType.newEnum("Merge to one file", "Separate files");\r
+\r
+           Datatype second = new DoubleType("s");\r
+           \r
+           // Diagram layers\r
+           RecordType diagramOptions = new RecordType();\r
+           \r
+           RecordType layers = new RecordType();\r
+           layers.metadata.put("style", "Dialog");\r
+           layers.addComponent("Layer 1", Datatypes.BOOLEAN);\r
+           layers.addComponent("Layer 2", Datatypes.BOOLEAN);\r
+           layers.addComponent("Layer 3", Datatypes.BOOLEAN);\r
+           diagramOptions.addComponent("Layers", layers);\r
+           \r
+           // Dialog\r
+           {\r
+               RecordBinding b = Bindings.getMutableBinding(layers);\r
+               Object o = b.createDefault();\r
+                   DataboardDialog dialog = new DataboardDialog(\r
+                               display.getActiveShell(),\r
+                               "Layer Selection",\r
+                               b, \r
+                               o);\r
+                   int code = dialog.open();\r
+                   if ( code == Window.OK ) {\r
+                       Object result = dialog.getResult();\r
+                       System.out.println( b.toString(result, true) );\r
+                   }\r
+           }\r
+           \r
+           // Diagram PDF Export Format options\r
+           diagramOptions.addComponent("Fit to content", Datatypes.BOOLEAN);\r
+\r
+           // Experiment options\r
+           RecordType experimentOptions = new RecordType();        \r
+           experimentOptions.addComponent("Start Time", second);           \r
+           experimentOptions.addComponent("End Time", second);     \r
+           experimentOptions.addComponent("Experiment", experiments);      \r
+           \r
+           // CSV Export\r
+           RecordType csvOptions = new RecordType();       \r
+           csvOptions.addComponent("Step Size", second);\r
+\r
+           // Chart options\r
+           RecordType chartOptions = new RecordType();     \r
+           chartOptions.addComponent("Autoscale", UnionType.newEnum("Stacked", "Overlapping"));\r
+           chartOptions.addComponent("TimeFormat", UnionType.newEnum("Decimal", "Time"));\r
+           chartOptions.addComponent("ValueFormat", UnionType.newEnum("Currency", "Scientific", "Engineering", "Default"));\r
+           \r
+           // PDF options\r
+           RecordType pdfOptions = new RecordType();\r
+           // PDF metadata         \r
+           pdfOptions.addComponent("Title", Datatypes.STRING );\r
+           pdfOptions.addComponent("Author", Datatypes.STRING );\r
+           pdfOptions.addComponent("Subject", Datatypes.STRING );\r
+           pdfOptions.addComponent("Keywords", DataboardForm.TEXTBOX );            \r
+           // PDF Encryption\r
+           StringType privatekeys = DataboardForm.fileOpenDialog("PKCS#12 keystore (.p12)", ".p12", "PFX (.pfx)", ".pfx"); \r
+           pdfOptions.addComponent("Private Key", privatekeys);\r
+           pdfOptions.addComponent("Keystore Password", DataboardForm.PASSWORD);\r
+           pdfOptions.addComponent("Private Key Password", DataboardForm.PASSWORD);        \r
+           // Formatter options \r
+           pdfOptions.addComponent("Compression", UnionType.newEnum("0 (No compression)", "1", "2", "3", "4", "5", "6", "7", "8", "9 (Best)"));\r
+\r
+           // Output format\r
+           RecordType outputOptions = new RecordType(); \r
+           UnionType mergeType = new UnionType();\r
+           mergeType.metadata.put("style", "no-border");\r
+           mergeType.addComponent("One file", DataboardForm.fileSaveDialog("Comma Separated Value (.csv)", ".csv"));\r
+           mergeType.addComponent("Separate files", DataboardForm.directoryDialog());\r
+           outputOptions.addComponent("Output", mergeType);\r
+\r
+           \r
+           ScrolledComposite scroll = new ScrolledComposite(shell, SWT.V_SCROLL);\r
+           final Composite composite = new Composite(scroll, 0);\r
+        scroll.setContent(composite);\r
+        scroll.setExpandHorizontal(true);\r
+        scroll.setExpandVertical(false);\r
+           final DataboardForm form = new DataboardForm();\r
+           form.setFirstColumnWidth(150);          \r
+           \r
+               composite.setLayout( new GridLayout(3, false) );                        \r
+               composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));                   \r
+           \r
+               form.addField(composite, "Diagram", diagramOptions);\r
+               form.addField(composite, "Experiment", experimentOptions);\r
+               form.addField(composite, "Comma Separated Value (CSV)", csvOptions);\r
+               form.addField(composite, "Chart", chartOptions);\r
+               form.addField(composite, "Portable Document Format (PDF)", pdfOptions);\r
+               form.addField(composite, "Output Options", outputOptions);\r
+               \r
+               form.addListener(composite, form.type(), new Listener() {\r
+                       public void handleEvent(Event event) {\r
+                               System.out.println(event);\r
+                       } } );\r
+               \r
+               // Button that validates all fields\r
+               Button validate = new Button(composite, SWT.DEFAULT);\r
+               validate.setText( "Validate" );\r
+               validate.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               List<Problem> problems = form.validate(composite);\r
+                               StringBuilder sb = new StringBuilder();\r
+                               if ( problems.isEmpty() ) {\r
+                                       sb.append("No problemo!");\r
+                               } else {\r
+                                       for (Problem problem : problems) {\r
+                                               sb.append(problem.fieldReference+": "+problem.error);\r
+                                               sb.append("\n");\r
+                                       }\r
+                               }\r
+                                       \r
+                               MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);\r
+                               dialog.setText("Form");\r
+                               dialog.setMessage( sb.toString() );\r
+                               dialog.open();                                                                          \r
+                       }\r
+               });\r
+               \r
+               \r
+               // Button that reads all fields\r
+               Button read = new Button(composite, SWT.DEFAULT);\r
+               read.setText( "Read" );\r
+               read.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                           // Read result values\r
+                               try {\r
+                                   RecordBinding binding = (RecordBinding) Bindings.getBinding( form.type() );\r
+                                   Object formValues = binding.createDefault();\r
+                                       form.readFields(composite, binding, formValues);\r
+                                       String txt = binding.toString(formValues, false);\r
+                                       \r
+                                       MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);\r
+                                       dialog.setText("Form");\r
+                                       dialog.setMessage(txt);\r
+                                       dialog.open();                                  \r
+                                       \r
+                               } catch (AccessorConstructionException e1) {\r
+                                       e1.printStackTrace();\r
+                               } catch (AccessorException e1) {\r
+                                       e1.printStackTrace();\r
+                               } catch (BindingException e1) {\r
+                                       e1.printStackTrace();\r
+                               }\r
+                       }\r
+               });\r
+\r
+               // Button that writes fields\r
+               Button write = new Button(composite, SWT.DEFAULT);\r
+               write.setText( "Write" );\r
+               write.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               try {\r
+                                       RecordType type = form.type();\r
+                                   RecordBinding binding = (RecordBinding) Bindings.getBinding( type );                                    \r
+                                   Object values = binding.createRandom( new Random() );\r
+                                       form.writeFields(composite, binding, values);\r
+                               } catch (AccessorConstructionException e1) {\r
+                                       e1.printStackTrace();\r
+                               } catch (AccessorException e1) {\r
+                                       e1.printStackTrace();\r
+                               } catch (BindingException e1) {\r
+                                       e1.printStackTrace();\r
+                               }\r
+                               \r
+                       }\r
+               });\r
+               \r
+               Button modal = new Button(composite, SWT.DEFAULT);\r
+               modal.setText("Modal");\r
+               modal.addSelectionListener( new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               Shell dialogShell = new Shell(display, SWT.DIALOG_TRIM);\r
+                               // populate dialogShell\r
+                               dialogShell.open();\r
+                               while (!dialogShell.isDisposed()) {\r
+                                   if (!display.readAndDispatch()) {\r
+                                       display.sleep();\r
+                                   }\r
+                               }\r
+                       }\r
+               });\r
+                                       \r
+           composite.pack();\r
+           \r
+           shell.setSize(800,400);\r
+           //shell.layout();\r
+           shell.open ();\r
+           while (!shell.isDisposed()) {\r
+               if (!display.readAndDispatch ()) display.sleep ();\r
+           }\r
+           \r
+           display.dispose ();\r
+       }\r
+               \r
+}\r