--- /dev/null
+package org.simantics.databoard.forms;\r
+\r
+import org.eclipse.jface.dialogs.Dialog;\r
+import org.eclipse.jface.dialogs.IDialogConstants;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.ScrolledComposite;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Shell;\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
+\r
+public class DataboardDialog extends Dialog {\r
+ \r
+ RecordBinding formBinding;\r
+ Object initialValues;\r
+ String title;\r
+ Object result;\r
+ DataboardForm form;\r
+ Composite composite;\r
+ \r
+ /**\r
+ * Create dialog window\r
+ * \r
+ * @param parentShell\r
+ * @param title\r
+ * @param formBinding\r
+ * @param initialValues values according to formBinding or null\r
+ */\r
+ public DataboardDialog(Shell parentShell, String title, RecordBinding formBinding, Object initialValues) { \r
+ super(parentShell);\r
+ this.formBinding = formBinding;\r
+ this.initialValues = initialValues;\r
+ this.title = title;\r
+ \r
+ setBlockOnOpen(true);\r
+ setShellStyle(SWT.RESIZE | SWT.TITLE | SWT.CLOSE | SWT.BORDER);\r
+ }\r
+\r
+ @Override\r
+ protected void createButtonsForButtonBar(Composite parent) {\r
+ createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);\r
+ createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);\r
+ }\r
+\r
+ @Override\r
+ protected Control createDialogArea(Composite parent) {\r
+ ScrolledComposite scroll = new ScrolledComposite(parent, SWT.V_SCROLL);\r
+ composite = new Composite(scroll, 0);\r
+ scroll.setContent(composite);\r
+ scroll.setExpandHorizontal(true);\r
+ scroll.setExpandVertical(false);\r
+ form = new DataboardForm();\r
+ form.setFirstColumnWidth(0);\r
+ form.addFields(composite, formBinding.type());\r
+ \r
+ composite.setLayout( new GridLayout(3, false) ); \r
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));\r
+ \r
+ if ( initialValues != null ) {\r
+ try {\r
+ form.writeFields(composite, formBinding, initialValues);\r
+ } catch (AccessorException e) {\r
+ e.printStackTrace();\r
+ } catch (BindingException e) {\r
+ e.printStackTrace();\r
+ } catch (AccessorConstructionException e) {\r
+ e.printStackTrace();\r
+ } \r
+ }\r
+ \r
+ composite.pack();\r
+ \r
+ return scroll;\r
+ }\r
+\r
+ protected void configureShell(Shell newShell) {\r
+ super.configureShell(newShell);\r
+ newShell.setText(title);\r
+ }\r
+ \r
+ @Override\r
+ protected void okPressed() {\r
+ try {\r
+ result = formBinding.createDefault();\r
+ form.readFields(composite, formBinding, result);\r
+ } catch (BindingException e) {\r
+ e.printStackTrace();\r
+ result = null;\r
+ } catch (AccessorConstructionException e) {\r
+ e.printStackTrace();\r
+ result = null;\r
+ } catch (AccessorException e) {\r
+ e.printStackTrace();\r
+ result = null;\r
+ }\r
+ super.okPressed();\r
+ }\r
+ \r
+ @Override\r
+ protected void cancelPressed() {\r
+ result = null;\r
+ super.cancelPressed();\r
+ }\r
+\r
+ public Object getResult() {\r
+ return result;\r
+ }\r
+ \r
+}
\ No newline at end of file