]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java
SCL expressions to SCL Issues view
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / issues / SCLIssuesView.java
1 package org.simantics.scl.ui.issues;
2
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.osgi.issues.SCLIssuesTableEntry;
30 import org.simantics.scl.ui.Activator;
31
32 public class SCLIssuesView extends ViewPart {
33
34     private static final int COLUMN1_DEFAULT_WIDTH = 300;
35     private static final int COLUMN2_MIN_WIDTH = 100;
36     
37     Composite parent;
38     TableViewer tableViewer;
39     TableViewerColumn column1;
40     TableViewerColumn column2;
41
42     ImageRegistry imageRegistry;
43     
44     SCLIssuesContentProvider issuesContentProvider = new SCLIssuesContentProvider();
45     
46     public SCLIssuesView() {
47         super();
48         imageRegistry = Activator.getInstance().getImageRegistry();
49     }
50     
51     @Override
52     public void init(IViewSite site, IMemento memento)
53             throws PartInitException {
54         super.init(site, memento);
55         IAction action = new Action("Refresh") {
56             @Override
57             public void run() {
58                 tableViewer.setInput(SCLOsgi.MODULE_REPOSITORY);
59 //                issuesContentProvider.refresh()
60             }
61         };
62         action.setImageDescriptor(imageRegistry.getDescriptor("arrow_refresh"));
63         site.getActionBars().getToolBarManager().add(action);
64     }
65     
66     @Override
67     public void createPartControl(Composite parent) {
68         this.parent = parent;
69         parent.setLayout(new FillLayout());
70         tableViewer = new TableViewer(parent,
71                 SWT.FULL_SELECTION | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
72         ColumnViewerToolTipSupport.enableFor(tableViewer);
73         tableViewer.setContentProvider(issuesContentProvider);
74
75         Table table = tableViewer.getTable();
76         table.setHeaderVisible(true);
77         table.setLinesVisible(true);
78
79         column1 = new TableViewerColumn(tableViewer, SWT.NONE);
80         column1.getColumn().setText("Module");
81         column1.getColumn().setWidth(COLUMN1_DEFAULT_WIDTH);
82         column1.getColumn().setResizable(true);
83         column1.setLabelProvider(new ColumnLabelProvider() {
84             @Override
85             public String getText(Object element) {
86                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
87                 return entry.moduleName;
88             }
89             @Override
90             public Image getImage(Object element) {
91                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
92                 return entry.error.severity == ErrorSeverity.ERROR
93                         ? imageRegistry.get("error")
94                         : entry.error.severity == ErrorSeverity.IMPORT_ERROR
95                         ? imageRegistry.get("import_error")
96                         : imageRegistry.get("warning");
97             }
98         });
99         
100         column2 = new TableViewerColumn(tableViewer, SWT.NONE);
101         column2.getColumn().setText("Description");
102         column2.getColumn().setResizable(false);
103         column2.setLabelProvider(new ColumnLabelProvider() {
104             @Override
105             public String getText(Object element) {
106                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
107                 String description = entry.error.description; 
108                 int p = description.indexOf('\n');
109                 if(p == -1)
110                     return description;
111                 else
112                     return description.substring(0, p);
113             }
114             @Override
115             public String getToolTipText(Object element) {
116                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
117                 return entry.error.description;
118             }
119             @Override
120             public int getToolTipTimeDisplayed(Object object) {
121                 return 15000;
122             }
123             @Override
124             public int getToolTipDisplayDelayTime(Object object) {
125                 return 500;
126             }
127             @Override
128             public Point getToolTipShift(Object object) {
129                 return new Point(0, 0);
130             }
131         });
132         
133         ControlAdapter resizeListener = new ControlAdapter() {
134             @Override
135             public void controlResized(ControlEvent e) {
136                 resizeColumns();
137             }
138         };
139         parent.addControlListener(resizeListener);
140         column1.getColumn().addControlListener(resizeListener);
141
142         tableViewer.setInput(SCLOsgi.MODULE_REPOSITORY);
143         tableViewer.addDoubleClickListener(new IDoubleClickListener() {
144             @Override
145             public void doubleClick(DoubleClickEvent event) {
146                 IStructuredSelection selection = (IStructuredSelection)event.getSelection();
147                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)selection.getFirstElement();
148                 entry.openLocation();
149             }
150         });
151     }
152
153     private void resizeColumns() {
154         Table table = tableViewer.getTable();
155         Rectangle area = parent.getClientArea();
156         Point size = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
157         ScrollBar vBar = table.getVerticalBar();
158         int width = area.width;
159         if (size.y > area.height + table.getHeaderHeight()) {
160             Point vBarSize = vBar.getSize();
161             width -= vBarSize.x;
162         }
163         Point oldSize = table.getSize();
164         if (oldSize.x > area.width) {
165             column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));
166             table.setSize(area.width, area.height);
167         } else {
168             table.setSize(area.width, area.height);
169             column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));
170         }
171     }
172
173     @Override
174     public void setFocus() {
175         tableViewer.getControl().setFocus();
176     }
177     
178     @Override
179     public void dispose() {
180         super.dispose();
181         issuesContentProvider.dispose();
182     }
183
184 }