1 package org.simantics.scl.ui.issues;
\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
31 public class SCLIssuesView extends ViewPart {
\r
33 private static final int COLUMN1_DEFAULT_WIDTH = 300;
\r
34 private static final int COLUMN2_MIN_WIDTH = 100;
\r
37 TableViewer tableViewer;
\r
38 TableViewerColumn column1;
\r
39 TableViewerColumn column2;
\r
41 ImageRegistry imageRegistry;
\r
43 public SCLIssuesView() {
\r
45 imageRegistry = Activator.getInstance().getImageRegistry();
\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
55 SCLOsgi.MODULE_REPOSITORY.getSourceRepository().checkUpdates();
\r
58 action.setImageDescriptor(imageRegistry.getDescriptor("arrow_refresh"));
\r
59 site.getActionBars().getToolBarManager().add(action);
\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
71 Table table = tableViewer.getTable();
\r
72 table.setHeaderVisible(true);
\r
73 table.setLinesVisible(true);
\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
81 public String getText(Object element) {
\r
82 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
\r
83 return entry.moduleName;
\r
86 public Image getImage(Object element) {
\r
87 return imageRegistry.get("error");
\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
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
101 return description;
\r
103 return description.substring(0, p);
\r
106 public String getToolTipText(Object element) {
\r
107 SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element;
\r
108 return entry.error.description;
\r
111 public int getToolTipTimeDisplayed(Object object) {
\r
115 public int getToolTipDisplayDelayTime(Object object) {
\r
119 public Point getToolTipShift(Object object) {
\r
120 return new Point(0, 0);
\r
124 ControlAdapter resizeListener = new ControlAdapter() {
\r
126 public void controlResized(ControlEvent e) {
\r
130 parent.addControlListener(resizeListener);
\r
131 column1.getColumn().addControlListener(resizeListener);
\r
133 tableViewer.setInput(SCLOsgi.MODULE_REPOSITORY);
\r
134 tableViewer.addDoubleClickListener(new IDoubleClickListener() {
\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
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
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
159 table.setSize(area.width, area.height);
\r
160 column2.getColumn().setWidth(Math.max(COLUMN2_MIN_WIDTH, width - column1.getColumn().getWidth()));
\r
165 public void setFocus() {
\r
166 tableViewer.getControl().setFocus();
\r