]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/ui/IssuesViewPart.java
d9e7b6d5329da132a81b9c3c9eb4be3a88d6074b
[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                 @Override\r
111                 public Object[] getElements(Object inputElement) {\r
112                         Collection<Issue> issues = (Collection<Issue>)inputElement;\r
113                         return issues.toArray();\r
114                 }\r
115                 \r
116                 @Override\r
117                 public void dispose() {\r
118                         IssueReporter.getInstance().removeListener(listener);\r
119                 }\r
120                 \r
121                 @Override\r
122                 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
123                         this.viewer = viewer;\r
124                 }\r
125         }\r
126         \r
127         private class IssueLabelProvider implements ITableLabelProvider {\r
128                 \r
129                 private List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>();\r
130                 \r
131                 @Override\r
132                 public Image getColumnImage(Object element, int columnIndex) {\r
133                         return null;\r
134                 }\r
135                 \r
136                 @Override\r
137                 public String getColumnText(Object element, int columnIndex) {\r
138                         Issue issue = (Issue)element;\r
139                         if (columnIndex == 0)\r
140                                 return issue.getDescription();\r
141                         return null;\r
142                 }\r
143                 \r
144                 @Override\r
145                 public boolean isLabelProperty(Object element, String property) {\r
146                         return true;\r
147                 }\r
148                 \r
149                 @Override\r
150                 public void addListener(ILabelProviderListener listener) {\r
151                         listeners.add(listener);\r
152                 }\r
153                 \r
154                 @Override\r
155                 public void removeListener(ILabelProviderListener listener) {\r
156                         listeners.remove(listener);\r
157                 }\r
158                 \r
159                 @Override\r
160                 public void dispose() {\r
161                         \r
162                 }\r
163         }\r
164 \r
165 }\r