]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop/src/org/simantics/interop/ui/IssuesViewPart.java
Issues implementation
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / ui / IssuesViewPart.java
diff --git a/org.simantics.interop/src/org/simantics/interop/ui/IssuesViewPart.java b/org.simantics.interop/src/org/simantics/interop/ui/IssuesViewPart.java
new file mode 100644 (file)
index 0000000..d9e7b6d
--- /dev/null
@@ -0,0 +1,165 @@
+package org.simantics.interop.ui;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import org.eclipse.jface.viewers.ILabelProviderListener;\r
+import org.eclipse.jface.viewers.IStructuredContentProvider;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.ITableLabelProvider;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.graphics.Image;\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.ui.part.ViewPart;\r
+import org.simantics.interop.issues.Issue;\r
+import org.simantics.interop.issues.IssueReporter;\r
+import org.simantics.interop.issues.IssueReporterListener;\r
+\r
+public class IssuesViewPart extends ViewPart {\r
+\r
+       private Composite parent;\r
+       private TableViewer viewer;\r
+       \r
+       \r
+       public IssuesViewPart() {\r
+               // TODO Auto-generated constructor stub\r
+       }\r
+\r
+       @Override\r
+       public void createPartControl(Composite parent) {\r
+               this.parent = parent;\r
+               this.parent.setLayout(new GridLayout(1,false));\r
+               viewer = new TableViewer(parent);\r
+               viewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+               viewer.setContentProvider(new IssueContentProvider());\r
+               viewer.setLabelProvider(new IssueLabelProvider());\r
+               \r
+               viewer.setInput(IssueReporter.getInstance().getIssues());\r
+               \r
+               Composite buttonComposite = new Composite(parent, SWT.BORDER);\r
+               buttonComposite.setLayout(new FillLayout(SWT.HORIZONTAL));\r
+               Button clearButton = new Button(buttonComposite, SWT.PUSH);\r
+               clearButton.setText("Clear all");\r
+               clearButton.addSelectionListener(new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               Collection<Issue> issues = IssueReporter.getInstance().getIssues();\r
+                               for (Issue i : issues)\r
+                                       i.dispose();\r
+                       }\r
+               });\r
+               \r
+               Button showButton = new Button(buttonComposite, SWT.PUSH);\r
+               showButton.setText("Show in editor");\r
+               showButton.addSelectionListener(new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               IStructuredSelection sel = (IStructuredSelection)viewer.getSelection();\r
+                               if (sel.isEmpty())\r
+                                       return;\r
+                               Issue i = (Issue)sel.getFirstElement();\r
+                               if (i.supportsEditor())\r
+                                       i.showInEditor();\r
+                       }\r
+               });\r
+               \r
+               \r
+       }\r
+\r
+       @Override\r
+       public void setFocus() {\r
+               parent.setFocus();\r
+       }\r
+       \r
+       \r
+       private class IssueContentProvider implements IStructuredContentProvider {\r
+               private IssueReporterListener listener;\r
+               private Viewer viewer;\r
+               \r
+               public IssueContentProvider() {\r
+                       listener = new IssueReporterListener() {\r
+                       \r
+                               @Override\r
+                               public void updated(Issue issue) {\r
+                                       viewer.refresh();\r
+                               }\r
+                       \r
+                               @Override\r
+                               public void removed(Issue issue) {\r
+                                       viewer.setInput(IssueReporter.getInstance().getIssues());\r
+                               }\r
+                       \r
+                               @Override\r
+                               public void added(Issue issue) {\r
+                                       viewer.setInput(IssueReporter.getInstance().getIssues());\r
+                               }\r
+                       };\r
+                       IssueReporter.getInstance().addListener(listener);\r
+               }\r
+               \r
+               \r
+               @Override\r
+               public Object[] getElements(Object inputElement) {\r
+                       Collection<Issue> issues = (Collection<Issue>)inputElement;\r
+                       return issues.toArray();\r
+               }\r
+               \r
+               @Override\r
+               public void dispose() {\r
+                       IssueReporter.getInstance().removeListener(listener);\r
+               }\r
+               \r
+               @Override\r
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+                       this.viewer = viewer;\r
+               }\r
+       }\r
+       \r
+       private class IssueLabelProvider implements ITableLabelProvider {\r
+               \r
+               private List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>();\r
+               \r
+               @Override\r
+               public Image getColumnImage(Object element, int columnIndex) {\r
+                       return null;\r
+               }\r
+               \r
+               @Override\r
+               public String getColumnText(Object element, int columnIndex) {\r
+                       Issue issue = (Issue)element;\r
+                       if (columnIndex == 0)\r
+                               return issue.getDescription();\r
+                       return null;\r
+               }\r
+               \r
+               @Override\r
+               public boolean isLabelProperty(Object element, String property) {\r
+                       return true;\r
+               }\r
+               \r
+               @Override\r
+               public void addListener(ILabelProviderListener listener) {\r
+                       listeners.add(listener);\r
+               }\r
+               \r
+               @Override\r
+               public void removeListener(ILabelProviderListener listener) {\r
+                       listeners.remove(listener);\r
+               }\r
+               \r
+               @Override\r
+               public void dispose() {\r
+                       \r
+               }\r
+       }\r
+\r
+}\r