]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/ui/IssuesViewPart.java
a4816237a9f70c372c1e13c22b07a500d968c8c6
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / ui / IssuesViewPart.java
1 package org.simantics.interop.ui;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.List;\r
6 \r
7 import org.eclipse.jface.viewers.ILabelProviderListener;\r
8 import org.eclipse.jface.viewers.IStructuredContentProvider;\r
9 import org.eclipse.jface.viewers.IStructuredSelection;\r
10 import org.eclipse.jface.viewers.ITableLabelProvider;\r
11 import org.eclipse.jface.viewers.TableViewer;\r
12 import org.eclipse.jface.viewers.Viewer;\r
13 import org.eclipse.swt.SWT;\r
14 import org.eclipse.swt.events.SelectionAdapter;\r
15 import org.eclipse.swt.events.SelectionEvent;\r
16 import org.eclipse.swt.graphics.Image;\r
17 import org.eclipse.swt.layout.FillLayout;\r
18 import org.eclipse.swt.layout.GridData;\r
19 import org.eclipse.swt.layout.GridLayout;\r
20 import org.eclipse.swt.widgets.Button;\r
21 import org.eclipse.swt.widgets.Composite;\r
22 import org.eclipse.ui.part.ViewPart;\r
23 import org.simantics.interop.issues.Issue;\r
24 import org.simantics.interop.issues.IssueReporter;\r
25 import org.simantics.interop.issues.IssueReporterListener;\r
26 \r
27 public class IssuesViewPart extends ViewPart {\r
28 \r
29         private Composite parent;\r
30         private TableViewer viewer;\r
31         \r
32         \r
33         public IssuesViewPart() {\r
34                 // TODO Auto-generated constructor stub\r
35         }\r
36 \r
37         @Override\r
38         public void createPartControl(Composite parent) {\r
39                 this.parent = parent;\r
40                 this.parent.setLayout(new GridLayout(1,false));\r
41                 viewer = new TableViewer(parent);\r
42                 viewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
43                 viewer.setContentProvider(new IssueContentProvider());\r
44                 viewer.setLabelProvider(new IssueLabelProvider());\r
45                 \r
46                 viewer.setInput(IssueReporter.getInstance().getIssues());\r
47                 \r
48                 Composite buttonComposite = new Composite(parent, SWT.BORDER);\r
49                 buttonComposite.setLayout(new FillLayout(SWT.HORIZONTAL));\r
50                 Button clearButton = new Button(buttonComposite, SWT.PUSH);\r
51                 clearButton.setText("Clear all");\r
52                 clearButton.addSelectionListener(new SelectionAdapter() {\r
53                         @Override\r
54                         public void widgetSelected(SelectionEvent e) {\r
55                                 Collection<Issue> issues = IssueReporter.getInstance().getIssues();\r
56                                 for (Issue i : issues)\r
57                                         i.dispose();\r
58                         }\r
59                 });\r
60                 \r
61                 Button showButton = new Button(buttonComposite, SWT.PUSH);\r
62                 showButton.setText("Show in editor");\r
63                 showButton.addSelectionListener(new SelectionAdapter() {\r
64                         @Override\r
65                         public void widgetSelected(SelectionEvent e) {\r
66                                 IStructuredSelection sel = (IStructuredSelection)viewer.getSelection();\r
67                                 if (sel.isEmpty())\r
68                                         return;\r
69                                 Issue i = (Issue)sel.getFirstElement();\r
70                                 if (i.supportsEditor())\r
71                                         i.showInEditor();\r
72                         }\r
73                 });\r
74                 \r
75                 \r
76         }\r
77 \r
78         @Override\r
79         public void setFocus() {\r
80                 parent.setFocus();\r
81         }\r
82         \r
83         \r
84         private class IssueContentProvider implements IStructuredContentProvider {\r
85                 private IssueReporterListener listener;\r
86                 private Viewer viewer;\r
87                 \r
88                 public IssueContentProvider() {\r
89                         listener = new IssueReporterListener() {\r
90                         \r
91                                 @Override\r
92                                 public void updated(Issue issue) {\r
93                                         viewer.refresh();\r
94                                 }\r
95                         \r
96                                 @Override\r
97                                 public void removed(Issue issue) {\r
98                                         viewer.setInput(IssueReporter.getInstance().getIssues());\r
99                                 }\r
100                         \r
101                                 @Override\r
102                                 public void added(Issue issue) {\r
103                                         viewer.setInput(IssueReporter.getInstance().getIssues());\r
104                                 }\r
105                         };\r
106                         IssueReporter.getInstance().addListener(listener);\r
107                 }\r
108                 \r
109                 \r
110                 @SuppressWarnings("unchecked")\r
111                 @Override\r
112                 public Object[] getElements(Object inputElement) {\r
113                         Collection<Issue> issues = (Collection<Issue>)inputElement;\r
114                         return issues.toArray();\r
115                 }\r
116                 \r
117                 @Override\r
118                 public void dispose() {\r
119                         IssueReporter.getInstance().removeListener(listener);\r
120                 }\r
121                 \r
122                 @Override\r
123                 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
124                         this.viewer = viewer;\r
125                 }\r
126         }\r
127         \r
128         private class IssueLabelProvider implements ITableLabelProvider {\r
129                 \r
130                 private List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>();\r
131                 \r
132                 @Override\r
133                 public Image getColumnImage(Object element, int columnIndex) {\r
134                         return null;\r
135                 }\r
136                 \r
137                 @Override\r
138                 public String getColumnText(Object element, int columnIndex) {\r
139                         Issue issue = (Issue)element;\r
140                         if (columnIndex == 0)\r
141                                 return issue.getDescription();\r
142                         return null;\r
143                 }\r
144                 \r
145                 @Override\r
146                 public boolean isLabelProperty(Object element, String property) {\r
147                         return true;\r
148                 }\r
149                 \r
150                 @Override\r
151                 public void addListener(ILabelProviderListener listener) {\r
152                         listeners.add(listener);\r
153                 }\r
154                 \r
155                 @Override\r
156                 public void removeListener(ILabelProviderListener listener) {\r
157                         listeners.remove(listener);\r
158                 }\r
159                 \r
160                 @Override\r
161                 public void dispose() {\r
162                         \r
163                 }\r
164         }\r
165 \r
166 }\r