]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / issues / SCLIssuesView.java
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java
new file mode 100644 (file)
index 0000000..a3c9a33
--- /dev/null
@@ -0,0 +1,169 @@
+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