1 package org.simantics.databoard.example;
\r
3 import java.util.List;
\r
4 import java.util.Random;
\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
37 public class DataboardFormDialogExample {
\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
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
48 //mergeType = UnionType.newEnum("Merge to one file", "Separate files");
\r
50 Datatype second = new DoubleType("s");
\r
53 RecordType diagramOptions = new RecordType();
\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
64 RecordBinding b = Bindings.getMutableBinding(layers);
\r
65 Object o = b.createDefault();
\r
66 DataboardDialog dialog = new DataboardDialog(
\r
67 display.getActiveShell(),
\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
78 // Diagram PDF Export Format options
\r
79 diagramOptions.addComponent("Fit to content", Datatypes.BOOLEAN);
\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
88 RecordType csvOptions = new RecordType();
\r
89 csvOptions.addComponent("Step Size", second);
\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
98 RecordType pdfOptions = new RecordType();
\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
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
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
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
129 composite.setLayout( new GridLayout(3, false) );
\r
130 composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
\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
139 form.addListener(composite, form.type(), new Listener() {
\r
140 public void handleEvent(Event event) {
\r
141 System.out.println(event);
\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
154 for (Problem problem : problems) {
\r
155 sb.append(problem.fieldReference+": "+problem.error);
\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
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
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
180 MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);
\r
181 dialog.setText("Form");
\r
182 dialog.setMessage(txt);
\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
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
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
216 Button modal = new Button(composite, SWT.DEFAULT);
\r
217 modal.setText("Modal");
\r
218 modal.addSelectionListener( new SelectionAdapter() {
\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
234 shell.setSize(800,400);
\r
237 while (!shell.isDisposed()) {
\r
238 if (!display.readAndDispatch ()) display.sleep ();
\r
241 display.dispose ();
\r