--- /dev/null
+package org.simantics.scl.ui.issues;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.action.IAction;\r
+import org.eclipse.jface.resource.ImageRegistry;\r
+import org.eclipse.jface.viewers.ColumnLabelProvider;\r
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;\r
+import org.eclipse.jface.viewers.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.TableViewerColumn;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.ControlAdapter;\r
+import org.eclipse.swt.events.ControlEvent;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.graphics.Rectangle;\r
+import org.eclipse.swt.layout.FillLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.ScrollBar;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.ui.IMemento;\r
+import org.eclipse.ui.IViewSite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.part.ViewPart;\r
+import org.simantics.scl.osgi.SCLOsgi;\r
+import org.simantics.scl.ui.Activator;\r
+import org.simantics.scl.ui.editor2.OpenSCLDefinition;\r
+\r
+public class SCLIssuesView extends ViewPart {\r
+\r
+ private static final int COLUMN1_DEFAULT_WIDTH = 300;\r
+ private static final int COLUMN2_MIN_WIDTH = 100;\r
+ \r
+ Composite parent;\r
+ TableViewer tableViewer;\r
+ TableViewerColumn column1;\r
+ TableViewerColumn column2;\r
+\r
+ ImageRegistry imageRegistry;\r
+ \r
+ public SCLIssuesView() {\r
+ super();\r
+ imageRegistry = Activator.getInstance().getImageRegistry();\r
+ }\r
+ \r
+ @Override\r
+ public void init(IViewSite site, IMemento memento)\r
+ throws PartInitException {\r
+ super.init(site, memento);\r
+ IAction action = new Action("Refresh") {\r
+ @Override\r
+ public void run() {\r
+ SCLOsgi.MODULE_REPOSITORY.getSourceRepository().checkUpdates();\r
+ }\r
+ };\r
+ action.setImageDescriptor(imageRegistry.getDescriptor("arrow_refresh"));\r
+ site.getActionBars().getToolBarManager().add(action);\r
+ }\r
+ \r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ this.parent = parent;\r
+ parent.setLayout(new FillLayout());\r
+ tableViewer = new TableViewer(parent,\r
+ SWT.FULL_SELECTION | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);\r
+ ColumnViewerToolTipSupport.enableFor(tableViewer);\r
+ tableViewer.setContentProvider(new SCLIssuesContentProvider());\r
+\r
+ Table table = tableViewer.getTable();\r
+ table.setHeaderVisible(true);\r
+ table.setLinesVisible(true);\r
+\r
+ column1 = new TableViewerColumn(tableViewer, SWT.NONE);\r
+ column1.getColumn().setText("Module");\r
+ column1.getColumn().setWidth(COLUMN1_DEFAULT_WIDTH);\r
+ column1.getColumn().setResizable(true);\r
+ column1.setLabelProvider(new ColumnLabelProvider() {\r
+ @Override\r
+ public String getText(Object element) {\r
+ SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;\r
+ return entry.moduleName;\r
+ }\r
+ @Override\r
+ public Image getImage(Object element) {\r
+ return imageRegistry.get("error");\r
+ }\r
+ });\r
+ \r
+ column2 = new TableViewerColumn(tableViewer, SWT.NONE);\r
+ column2.getColumn().setText("Description");\r
+ column2.getColumn().setResizable(false);\r
+ column2.setLabelProvider(new ColumnLabelProvider() {\r
+ @Override\r
+ public String getText(Object element) {\r
+ SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;\r
+ String description = entry.error.description; \r
+ int p = description.indexOf('\n');\r
+ if(p == -1)\r
+ return description;\r
+ else\r
+ return description.substring(0, p);\r
+ }\r
+ @Override\r
+ public String getToolTipText(Object element) {\r
+ SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;\r
+ return entry.error.description;\r
+ }\r
+ @Override\r
+ public int getToolTipTimeDisplayed(Object object) {\r
+ return 15000;\r
+ }\r
+ @Override\r
+ public int getToolTipDisplayDelayTime(Object object) {\r
+ return 500;\r
+ }\r
+ @Override\r
+ public Point getToolTipShift(Object object) {\r
+ return new Point(0, 0);\r
+ }\r
+ });\r
+ \r
+ ControlAdapter resizeListener = new ControlAdapter() {\r
+ @Override\r
+ public void controlResized(ControlEvent e) {\r
+ resizeColumns();\r
+ }\r
+ };\r
+ parent.addControlListener(resizeListener);\r
+ column1.getColumn().addControlListener(resizeListener);\r
+\r
+ tableViewer.setInput(SCLOsgi.MODULE_REPOSITORY);\r
+ tableViewer.addDoubleClickListener(new IDoubleClickListener() {\r
+ @Override\r
+ public void doubleClick(DoubleClickEvent event) {\r
+ IStructuredSelection selection = (IStructuredSelection)event.getSelection();\r
+ SCLIssuesTableEntry entry = (SCLIssuesTableEntry)selection.getFirstElement();\r
+ OpenSCLDefinition.openDefinition(entry.moduleName, entry.error.location);\r
+ }\r
+ });\r
+ }\r
+\r
+ private void resizeColumns() {\r
+ Table table = tableViewer.getTable();\r
+ Rectangle area = parent.getClientArea();\r
+ Point size = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);\r
+ ScrollBar vBar = table.getVerticalBar();\r
+ int width = area.width;\r
+ if (size.y > area.height + table.getHeaderHeight()) {\r
+ Point vBarSize = vBar.getSize();\r
+ width -= vBarSize.x;\r
+ }\r
+ Point oldSize = table.getSize();\r
+ if (oldSize.x > area.width) {\r
+ column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));\r
+ table.setSize(area.width, area.height);\r
+ } else {\r
+ table.setSize(area.width, area.height);\r
+ column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void setFocus() {\r
+ tableViewer.getControl().setFocus();\r
+ }\r
+\r
+}\r