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); } @SuppressWarnings("unchecked") @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() { } } }