]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java
Merge commit 'd1a82fe'
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / issues / SCLIssuesView.java
1 package org.simantics.scl.ui.issues;\r
2 \r
3 import org.eclipse.jface.action.Action;\r
4 import org.eclipse.jface.action.IAction;\r
5 import org.eclipse.jface.resource.ImageRegistry;\r
6 import org.eclipse.jface.viewers.ColumnLabelProvider;\r
7 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;\r
8 import org.eclipse.jface.viewers.DoubleClickEvent;\r
9 import org.eclipse.jface.viewers.IDoubleClickListener;\r
10 import org.eclipse.jface.viewers.IStructuredSelection;\r
11 import org.eclipse.jface.viewers.TableViewer;\r
12 import org.eclipse.jface.viewers.TableViewerColumn;\r
13 import org.eclipse.swt.SWT;\r
14 import org.eclipse.swt.events.ControlAdapter;\r
15 import org.eclipse.swt.events.ControlEvent;\r
16 import org.eclipse.swt.graphics.Image;\r
17 import org.eclipse.swt.graphics.Point;\r
18 import org.eclipse.swt.graphics.Rectangle;\r
19 import org.eclipse.swt.layout.FillLayout;\r
20 import org.eclipse.swt.widgets.Composite;\r
21 import org.eclipse.swt.widgets.ScrollBar;\r
22 import org.eclipse.swt.widgets.Table;\r
23 import org.eclipse.ui.IMemento;\r
24 import org.eclipse.ui.IViewSite;\r
25 import org.eclipse.ui.PartInitException;\r
26 import org.eclipse.ui.part.ViewPart;\r
27 import org.simantics.scl.osgi.SCLOsgi;\r
28 import org.simantics.scl.ui.Activator;\r
29 import org.simantics.scl.ui.editor2.OpenSCLDefinition;\r
30 \r
31 public class SCLIssuesView extends ViewPart {\r
32 \r
33     private static final int COLUMN1_DEFAULT_WIDTH = 300;\r
34     private static final int COLUMN2_MIN_WIDTH = 100;\r
35     \r
36     Composite parent;\r
37     TableViewer tableViewer;\r
38     TableViewerColumn column1;\r
39     TableViewerColumn column2;\r
40 \r
41     ImageRegistry imageRegistry;\r
42     \r
43     public SCLIssuesView() {\r
44         super();\r
45         imageRegistry = Activator.getInstance().getImageRegistry();\r
46     }\r
47     \r
48     @Override\r
49     public void init(IViewSite site, IMemento memento)\r
50             throws PartInitException {\r
51         super.init(site, memento);\r
52         IAction action = new Action("Refresh") {\r
53             @Override\r
54             public void run() {\r
55                 SCLOsgi.MODULE_REPOSITORY.getSourceRepository().checkUpdates();\r
56             }\r
57         };\r
58         action.setImageDescriptor(imageRegistry.getDescriptor("arrow_refresh"));\r
59         site.getActionBars().getToolBarManager().add(action);\r
60     }\r
61     \r
62     @Override\r
63     public void createPartControl(Composite parent) {\r
64         this.parent = parent;\r
65         parent.setLayout(new FillLayout());\r
66         tableViewer = new TableViewer(parent,\r
67                 SWT.FULL_SELECTION | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);\r
68         ColumnViewerToolTipSupport.enableFor(tableViewer);\r
69         tableViewer.setContentProvider(new SCLIssuesContentProvider());\r
70 \r
71         Table table = tableViewer.getTable();\r
72         table.setHeaderVisible(true);\r
73         table.setLinesVisible(true);\r
74 \r
75         column1 = new TableViewerColumn(tableViewer, SWT.NONE);\r
76         column1.getColumn().setText("Module");\r
77         column1.getColumn().setWidth(COLUMN1_DEFAULT_WIDTH);\r
78         column1.getColumn().setResizable(true);\r
79         column1.setLabelProvider(new ColumnLabelProvider() {\r
80             @Override\r
81             public String getText(Object element) {\r
82                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;\r
83                 return entry.moduleName;\r
84             }\r
85             @Override\r
86             public Image getImage(Object element) {\r
87                 return imageRegistry.get("error");\r
88             }\r
89         });\r
90         \r
91         column2 = new TableViewerColumn(tableViewer, SWT.NONE);\r
92         column2.getColumn().setText("Description");\r
93         column2.getColumn().setResizable(false);\r
94         column2.setLabelProvider(new ColumnLabelProvider() {\r
95             @Override\r
96             public String getText(Object element) {\r
97                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;\r
98                 String description = entry.error.description; \r
99                 int p = description.indexOf('\n');\r
100                 if(p == -1)\r
101                     return description;\r
102                 else\r
103                     return description.substring(0, p);\r
104             }\r
105             @Override\r
106             public String getToolTipText(Object element) {\r
107                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;\r
108                 return entry.error.description;\r
109             }\r
110             @Override\r
111             public int getToolTipTimeDisplayed(Object object) {\r
112                 return 15000;\r
113             }\r
114             @Override\r
115             public int getToolTipDisplayDelayTime(Object object) {\r
116                 return 500;\r
117             }\r
118             @Override\r
119             public Point getToolTipShift(Object object) {\r
120                 return new Point(0, 0);\r
121             }\r
122         });\r
123         \r
124         ControlAdapter resizeListener = new ControlAdapter() {\r
125             @Override\r
126             public void controlResized(ControlEvent e) {\r
127                 resizeColumns();\r
128             }\r
129         };\r
130         parent.addControlListener(resizeListener);\r
131         column1.getColumn().addControlListener(resizeListener);\r
132 \r
133         tableViewer.setInput(SCLOsgi.MODULE_REPOSITORY);\r
134         tableViewer.addDoubleClickListener(new IDoubleClickListener() {\r
135             @Override\r
136             public void doubleClick(DoubleClickEvent event) {\r
137                 IStructuredSelection selection = (IStructuredSelection)event.getSelection();\r
138                 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)selection.getFirstElement();\r
139                 OpenSCLDefinition.openDefinition(entry.moduleName, entry.error.location);\r
140             }\r
141         });\r
142     }\r
143 \r
144     private void resizeColumns() {\r
145         Table table = tableViewer.getTable();\r
146         Rectangle area = parent.getClientArea();\r
147         Point size = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);\r
148         ScrollBar vBar = table.getVerticalBar();\r
149         int width = area.width;\r
150         if (size.y > area.height + table.getHeaderHeight()) {\r
151             Point vBarSize = vBar.getSize();\r
152             width -= vBarSize.x;\r
153         }\r
154         Point oldSize = table.getSize();\r
155         if (oldSize.x > area.width) {\r
156             column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));\r
157             table.setSize(area.width, area.height);\r
158         } else {\r
159             table.setSize(area.width, area.height);\r
160             column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));\r
161         }\r
162     }\r
163 \r
164     @Override\r
165     public void setFocus() {\r
166         tableViewer.getControl().setFocus();\r
167     }\r
168 \r
169 }\r