]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/src/org/simantics/databoard/forms/DataboardDialog.java
Improved Bindings.getBinding(Class) caching for Datatype.class
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / forms / DataboardDialog.java
1 package org.simantics.databoard.forms;
2
3 import org.eclipse.jface.dialogs.Dialog;
4 import org.eclipse.jface.dialogs.IDialogConstants;
5 import org.eclipse.swt.SWT;
6 import org.eclipse.swt.custom.ScrolledComposite;
7 import org.eclipse.swt.layout.GridData;
8 import org.eclipse.swt.layout.GridLayout;
9 import org.eclipse.swt.widgets.Composite;
10 import org.eclipse.swt.widgets.Control;
11 import org.eclipse.swt.widgets.Shell;
12 import org.simantics.databoard.accessor.error.AccessorConstructionException;
13 import org.simantics.databoard.accessor.error.AccessorException;
14 import org.simantics.databoard.binding.RecordBinding;
15 import org.simantics.databoard.binding.error.BindingException;
16
17 public class DataboardDialog extends Dialog {
18         
19         RecordBinding formBinding;
20         Object initialValues;
21         String title;
22         Object result;
23     DataboardForm form;
24     Composite composite;
25     
26     /**
27      * Create dialog window
28      * 
29      * @param parentShell
30      * @param title
31      * @param formBinding
32      * @param initialValues values according to formBinding or null
33      */
34         public DataboardDialog(Shell parentShell, String title, RecordBinding formBinding, Object initialValues) {              
35                 super(parentShell);
36                 this.formBinding = formBinding;
37                 this.initialValues = initialValues;
38                 this.title = title;
39                 
40                 setBlockOnOpen(true);
41                 setShellStyle(SWT.RESIZE | SWT.TITLE | SWT.CLOSE | SWT.BORDER);
42         }
43
44         @Override
45         protected void createButtonsForButtonBar(Composite parent) {
46                 createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
47                 createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
48         }
49
50         @Override
51         protected Control createDialogArea(Composite parent) {
52             ScrolledComposite scroll = new ScrolledComposite(parent, SWT.V_SCROLL);
53             composite = new Composite(scroll, 0);
54         scroll.setContent(composite);
55         scroll.setExpandHorizontal(true);
56         scroll.setExpandVertical(false);
57                 form = new DataboardForm();
58             form.setFirstColumnWidth(0);
59             form.addFields(composite, formBinding.type());
60             
61                 composite.setLayout( new GridLayout(3, false) );                        
62                 composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
63                 
64                 if ( initialValues != null ) {
65                         try {
66                                 form.writeFields(composite, formBinding, initialValues);
67                         } catch (AccessorException e) {
68                                 e.printStackTrace();
69                         } catch (BindingException e) {
70                                 e.printStackTrace();
71                         } catch (AccessorConstructionException e) {
72                                 e.printStackTrace();
73                         }                       
74                 }
75                 
76             composite.pack();
77                 
78                 return scroll;
79         }
80
81     protected void configureShell(Shell newShell) {
82         super.configureShell(newShell);
83         newShell.setText(title);
84     }
85     
86         @Override
87         protected void okPressed() {
88                 try {
89                         result = formBinding.createDefault();
90                         form.readFields(composite, formBinding, result);
91                 } catch (BindingException e) {
92                         e.printStackTrace();
93                         result = null;
94                 } catch (AccessorConstructionException e) {
95                         e.printStackTrace();
96                         result = null;
97                 } catch (AccessorException e) {
98                         e.printStackTrace();
99                         result = null;
100                 }
101                 super.okPressed();
102         }
103         
104         @Override
105         protected void cancelPressed() {
106                 result = null;
107                 super.cancelPressed();
108         }
109
110         public Object getResult() {
111                 return result;
112         }
113         
114 }