]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/wizard/ReportSelectionPage.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / wizard / ReportSelectionPage.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/wizard/ReportSelectionPage.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/wizard/ReportSelectionPage.java
new file mode 100644 (file)
index 0000000..2fc3cde
--- /dev/null
@@ -0,0 +1,219 @@
+package org.simantics.document.linking.wizard;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.eclipse.jface.layout.GridDataFactory;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
+import org.eclipse.swt.layout.FillLayout;\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.FileDialog;\r
+import org.eclipse.swt.widgets.Group;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.document.linking.report.templates.CompleteStructureWriter;\r
+import org.simantics.document.linking.report.templates.DiagramStructureWithDependenciesWriter;\r
+import org.simantics.document.linking.report.templates.DiagramStructureWriter;\r
+import org.simantics.document.linking.report.templates.DocumentStructureWriter;\r
+import org.simantics.document.linking.report.templates.ModelDocumentWriter;\r
+import org.simantics.document.linking.report.templates.ReferredDocumentWriter;\r
+import org.simantics.document.linking.report.templates.ReportWriter;\r
+import org.simantics.document.linking.views.ModelRead;\r
+import org.simantics.document.linking.views.ModelToComboListener;\r
+import org.simantics.ui.SimanticsUI;\r
+\r
+\r
+/**\r
+ * Wizard page for selecting report type and file.\r
+ * \r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+public class ReportSelectionPage extends WizardPage{\r
+       \r
+       protected ReportSelectionPage(String pageName) {\r
+               super(pageName,pageName,null);\r
+               setPageComplete(false);\r
+       }\r
+\r
+       CCombo modelCombo;\r
+       Text filenameText;\r
+       Button browseButton;\r
+       \r
+       ModelToComboListener modelToComboListener;\r
+       \r
+       List<Button> reportSelectionButtons = new ArrayList<Button>();\r
+       List<ReportWriter<?>> reportWriters = new ArrayList<ReportWriter<?>>();\r
+       \r
+       ReportWriter<?> selectedWriter;\r
+       Resource selectedModel;\r
+       Resource input;\r
+       \r
+       @Override\r
+       public void createControl(Composite parent) {\r
+               \r
+               \r
+               Composite composite = new Composite(parent, SWT.NONE);\r
+               composite.setLayout(new GridLayout(3,false));\r
+               Label label = new Label(composite, SWT.NONE);\r
+               label.setText("Model:");\r
+               modelCombo = new CCombo(composite, SWT.BORDER|SWT.READ_ONLY);\r
+               \r
+               label = new Label(composite, SWT.NONE);\r
+               label.setText("File:");\r
+               filenameText = new Text(composite, SWT.BORDER|SWT.SINGLE);\r
+               browseButton = new Button(composite, SWT.PUSH);\r
+               browseButton.setText("Browse");\r
+               \r
+               reportWriters.add(new ModelDocumentWriter());\r
+               reportWriters.add(new ReferredDocumentWriter());\r
+               reportWriters.add(new DocumentStructureWriter());\r
+               reportWriters.add(new DiagramStructureWriter());\r
+               reportWriters.add(new DiagramStructureWithDependenciesWriter());\r
+               reportWriters.add(new CompleteStructureWriter());\r
+               \r
+               Group group = new Group(composite, SWT.NONE);\r
+               group.setText("Report templates");\r
+               group.setLayout(new FillLayout(SWT.VERTICAL));\r
+               \r
+               GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(filenameText);\r
+               GridDataFactory.fillDefaults().span(2, 1).applyTo(modelCombo);\r
+               GridDataFactory.fillDefaults().span(3, 1).applyTo(group);\r
+               \r
+               browseButton.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(),SWT.SAVE);\r
+                               dialog.setFilterExtensions(new String[]{"*.pdf","*.html"});\r
+                               dialog.setFilterNames(new String[]{"PDF Document","HTML Document"});\r
+                               String filename = dialog.open();\r
+                               if (filename == null)\r
+                                       filenameText.setText("");\r
+                               else\r
+                                       filenameText.setText(filename);\r
+                               validate();\r
+                       }\r
+               });\r
+               \r
+               \r
+               SelectionListener listener = new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               Button selected = (Button)e.widget;\r
+                               select(selected);\r
+                       }\r
+               };\r
+               \r
+               for (ReportWriter<?> rw : reportWriters) {\r
+                       Button b = new Button(group, SWT.RADIO);\r
+                       b.setText(rw.getName());\r
+                       b.setData(rw);\r
+                       b.addSelectionListener(listener);\r
+                       reportSelectionButtons.add(b);\r
+               }\r
+               \r
+               SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
+                       \r
+                       @Override\r
+                       public void run(ReadGraph graph) throws DatabaseException {\r
+                               Resource project = SimanticsUI.getProject().get();\r
+                               modelToComboListener = new ModelToComboListener(modelCombo) {\r
+                                       @Override\r
+                                       public Resource getCurrentModel() {\r
+                                               return selectedModel;\r
+                                       } \r
+                                       \r
+                                       @Override\r
+                                       public void loaded() {\r
+                                               preselectModel();\r
+                                       }\r
+                               };\r
+                               graph.syncRequest(new ModelRead(project),modelToComboListener);\r
+                               \r
+                       }\r
+               });\r
+               \r
+               modelCombo.addSelectionListener(new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               int index = modelCombo.getSelectionIndex();\r
+                               if (index == -1)\r
+                                       return;\r
+                               Resource model = (Resource)modelCombo.getData(Integer.toString(index));\r
+                               if (model != null)\r
+                                       selectedModel = model;\r
+                               validate();\r
+                       }\r
+               });\r
+               \r
+               select(reportSelectionButtons.get(0));\r
+               setControl(composite);\r
+       }\r
+       \r
+       public List<Button> getReportSelectionButtons() {\r
+               return reportSelectionButtons;\r
+       }\r
+       \r
+       private void select(Button selected) {\r
+               selected.setSelection(true);\r
+               for (Button b : reportSelectionButtons) {\r
+                       if (b != selected)\r
+                               b.setSelection(false);\r
+               }\r
+               selectedWriter = (ReportWriter<?>)selected.getData();\r
+               validate();\r
+       }\r
+       \r
+       private void validate() {\r
+               setPageComplete(selectedWriter!= null && selectedModel != null && filenameText.getText().length() > 0);\r
+       }\r
+       \r
+       public ReportWriter<?> getSelectedWriter() {\r
+               return selectedWriter;\r
+       }\r
+       \r
+       public String getFilename() {\r
+               return filenameText.getText();\r
+       }\r
+       \r
+       public Resource getSelectedModel() {\r
+               return selectedModel;\r
+       }\r
+       \r
+       public void setInput(Resource input) {\r
+               this.input = input;\r
+       }\r
+       \r
+       private void preselectModel() {\r
+               if (input != null) {\r
+                       for (int i = 0; i < modelCombo.getItemCount(); i++) {\r
+                               if (input.equals(modelCombo.getData(Integer.toString(i)))) {\r
+                                       modelCombo.select(i);\r
+                                       selectedModel = input;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void setVisible(boolean visible) {\r
+               if (visible) {\r
+                       preselectModel();\r
+               }\r
+               super.setVisible(visible);\r
+       }\r
+\r
+}\r