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