1 package org.simantics.scl.ui.issues;
3 import org.eclipse.jface.action.Action;
4 import org.eclipse.jface.action.IAction;
5 import org.eclipse.jface.resource.ImageRegistry;
6 import org.eclipse.jface.viewers.ColumnLabelProvider;
7 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
8 import org.eclipse.jface.viewers.DoubleClickEvent;
9 import org.eclipse.jface.viewers.IDoubleClickListener;
10 import org.eclipse.jface.viewers.IStructuredSelection;
11 import org.eclipse.jface.viewers.TableViewer;
12 import org.eclipse.jface.viewers.TableViewerColumn;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.events.ControlAdapter;
15 import org.eclipse.swt.events.ControlEvent;
16 import org.eclipse.swt.graphics.Image;
17 import org.eclipse.swt.graphics.Point;
18 import org.eclipse.swt.graphics.Rectangle;
19 import org.eclipse.swt.layout.FillLayout;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.swt.widgets.ScrollBar;
22 import org.eclipse.swt.widgets.Table;
23 import org.eclipse.ui.IMemento;
24 import org.eclipse.ui.IViewSite;
25 import org.eclipse.ui.PartInitException;
26 import org.eclipse.ui.part.ViewPart;
27 import org.simantics.scl.compiler.errors.ErrorSeverity;
28 import org.simantics.scl.osgi.SCLOsgi;
29 import org.simantics.scl.ui.Activator;
30 import org.simantics.scl.ui.editor2.OpenSCLDefinition;
32 public class SCLIssuesView extends ViewPart {
34 private static final int COLUMN1_DEFAULT_WIDTH = 300;
35 private static final int COLUMN2_MIN_WIDTH = 100;
38 TableViewer tableViewer;
39 TableViewerColumn column1;
40 TableViewerColumn column2;
42 ImageRegistry imageRegistry;
44 SCLIssuesContentProvider issuesContentProvider = new SCLIssuesContentProvider();
46 public SCLIssuesView() {
48 imageRegistry = Activator.getInstance().getImageRegistry();
52 public void init(IViewSite site, IMemento memento)
53 throws PartInitException {
54 super.init(site, memento);
55 IAction action = new Action("Refresh") {
58 SCLOsgi.MODULE_REPOSITORY.getSourceRepository().checkUpdates();
61 action.setImageDescriptor(imageRegistry.getDescriptor("arrow_refresh"));
62 site.getActionBars().getToolBarManager().add(action);
66 public void createPartControl(Composite parent) {
68 parent.setLayout(new FillLayout());
69 tableViewer = new TableViewer(parent,
70 SWT.FULL_SELECTION | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
71 ColumnViewerToolTipSupport.enableFor(tableViewer);
72 tableViewer.setContentProvider(issuesContentProvider);
74 Table table = tableViewer.getTable();
75 table.setHeaderVisible(true);
76 table.setLinesVisible(true);
78 column1 = new TableViewerColumn(tableViewer, SWT.NONE);
79 column1.getColumn().setText("Module");
80 column1.getColumn().setWidth(COLUMN1_DEFAULT_WIDTH);
81 column1.getColumn().setResizable(true);
82 column1.setLabelProvider(new ColumnLabelProvider() {
84 public String getText(Object element) {
85 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
86 return entry.moduleName;
89 public Image getImage(Object element) {
90 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
91 return entry.error.severity == ErrorSeverity.ERROR
92 ? imageRegistry.get("error")
93 : entry.error.severity == ErrorSeverity.IMPORT_ERROR
94 ? imageRegistry.get("import_error")
95 : imageRegistry.get("warning");
99 column2 = new TableViewerColumn(tableViewer, SWT.NONE);
100 column2.getColumn().setText("Description");
101 column2.getColumn().setResizable(false);
102 column2.setLabelProvider(new ColumnLabelProvider() {
104 public String getText(Object element) {
105 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
106 String description = entry.error.description;
107 int p = description.indexOf('\n');
111 return description.substring(0, p);
114 public String getToolTipText(Object element) {
115 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
116 return entry.error.description;
119 public int getToolTipTimeDisplayed(Object object) {
123 public int getToolTipDisplayDelayTime(Object object) {
127 public Point getToolTipShift(Object object) {
128 return new Point(0, 0);
132 ControlAdapter resizeListener = new ControlAdapter() {
134 public void controlResized(ControlEvent e) {
138 parent.addControlListener(resizeListener);
139 column1.getColumn().addControlListener(resizeListener);
141 tableViewer.setInput(SCLOsgi.MODULE_REPOSITORY);
142 tableViewer.addDoubleClickListener(new IDoubleClickListener() {
144 public void doubleClick(DoubleClickEvent event) {
145 IStructuredSelection selection = (IStructuredSelection)event.getSelection();
146 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)selection.getFirstElement();
147 OpenSCLDefinition.openDefinition(entry.moduleName, entry.error.location);
152 private void resizeColumns() {
153 Table table = tableViewer.getTable();
154 Rectangle area = parent.getClientArea();
155 Point size = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
156 ScrollBar vBar = table.getVerticalBar();
157 int width = area.width;
158 if (size.y > area.height + table.getHeaderHeight()) {
159 Point vBarSize = vBar.getSize();
162 Point oldSize = table.getSize();
163 if (oldSize.x > area.width) {
164 column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));
165 table.setSize(area.width, area.height);
167 table.setSize(area.width, area.height);
168 column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));
173 public void setFocus() {
174 tableViewer.getControl().setFocus();
178 public void dispose() {
180 issuesContentProvider.dispose();