--- /dev/null
+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