Skip to content

Commit fc236e8

Browse files
committed
Added a WorkbenchLabelProvider with WorkbenchAdapter adapter example
Change-Id: I85c09df4b79b1e6dc5d7cee7a12bce4dbda2ec64 Signed-off-by: Simon Scholz <[email protected]>
1 parent 51c14d4 commit fc236e8

File tree

9 files changed

+130
-33
lines changed

9 files changed

+130
-33
lines changed

de.vogella.plugin.adapter/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Require-Bundle: org.eclipse.core.runtime,
88
org.eclipse.e4.ui.services;bundle-version="1.2.100",
99
org.eclipse.e4.ui.workbench;bundle-version="1.4.0",
1010
org.eclipse.ui,
11-
org.eclipse.ui.views;bundle-version="3.4.1"
11+
org.eclipse.ui.views;bundle-version="3.4.1",
12+
org.eclipse.ui.workbench
1213
Bundle-ActivationPolicy: lazy
1314
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
source.. = src/
2-
output.. = bin/
3-
bin.includes = plugin.xml,\
4-
META-INF/,\
5-
.,\
6-
icons/,\
7-
contexts.xml
1+
output.. = bin/
2+
bin.includes = plugin.xml,\
3+
META-INF/,\
4+
.,\
5+
icons/,\
6+
fragment.e4xmi
7+
source.. = src/

de.vogella.plugin.adapter/fragment.e4xmi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,8 @@
44
<elements xsi:type="basic:PartDescriptor" xmi:id="_0UQb8D-JEeajyYChQoCgXA" elementId="de.vogella.plugin.adapter.partdescriptor.sampleview" label="Sample View" contributionURI="bundleclass://de.vogella.plugin.adapter/de.vogella.plugin.adapter.views.SampleView">
55
<tags>View</tags>
66
</elements>
7+
<elements xsi:type="basic:PartDescriptor" xmi:id="_Yl7FID-0EeajyYChQoCgXA" elementId="de.vogella.plugin.adapter.partdescriptor.workbenchadaptersample" label="WorkbenchAdapter Sample" contributionURI="bundleclass://de.vogella.plugin.adapter/de.vogella.plugin.adapter.views.SampleWorkbenchAdapterView">
8+
<tags>View</tags>
9+
</elements>
710
</fragments>
811
</fragment:ModelFragments>

de.vogella.plugin.adapter/plugin.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@
99
<adapter
1010
type="org.eclipse.ui.views.properties.IPropertySource">
1111
</adapter>
12+
<adapter
13+
type="org.eclipse.ui.model.IWorkbenchAdapter3">
14+
</adapter>
15+
<adapter
16+
type="org.eclipse.ui.model.IWorkbenchAdapter2">
17+
</adapter>
18+
<adapter
19+
type="org.eclipse.ui.model.IWorkbenchAdapter">
20+
</adapter>
1221
</factory>
1322
</extension>
1423
<extension
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
package de.vogella.plugin.adapter;
22

33
import org.eclipse.core.runtime.IAdapterFactory;
4+
import org.eclipse.ui.model.WorkbenchAdapter;
45
import org.eclipse.ui.views.properties.IPropertySource;
56

67
import de.vogella.plugin.adapter.model.Todo;
78

89
public class TodoAdapterFactory implements IAdapterFactory {
910

11+
private static final Class<?>[] adapterList = new Class<?>[] { IPropertySource.class, WorkbenchAdapter.class };
12+
1013
@Override
11-
public Object getAdapter(Object adaptableObject, Class adapterType) {
14+
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
1215
if (adapterType== IPropertySource.class && adaptableObject instanceof Todo){
13-
return new TodoPropertySource((Todo) adaptableObject);
16+
return adapterType.cast(new TodoPropertySource((Todo) adaptableObject));
17+
} else if (adapterType.isAssignableFrom(WorkbenchAdapter.class) && adaptableObject instanceof Todo) {
18+
return adapterType.cast(new TodoWorkbenchAdapter());
1419
}
1520
return null;
1621
}
1722

1823
@Override
19-
public Class[] getAdapterList() {
20-
return new Class[] { IPropertySource.class };
24+
public Class<?>[] getAdapterList() {
25+
return adapterList;
2126
}
2227

2328
}
Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,44 @@
11
package de.vogella.plugin.adapter;
22

33
import org.eclipse.jface.resource.ImageDescriptor;
4-
import org.eclipse.ui.model.IWorkbenchAdapter;
4+
import org.eclipse.jface.viewers.StyledString;
5+
import org.eclipse.jface.viewers.StyledString.Styler;
6+
import org.eclipse.swt.SWT;
7+
import org.eclipse.swt.graphics.TextStyle;
8+
import org.eclipse.swt.widgets.Display;
9+
import org.eclipse.ui.ISharedImages;
10+
import org.eclipse.ui.PlatformUI;
11+
import org.eclipse.ui.model.WorkbenchAdapter;
512

613
import de.vogella.plugin.adapter.model.Todo;
714

8-
public class TodoWorkbenchAdapter implements IWorkbenchAdapter {
9-
10-
11-
12-
@Override
13-
public Object[] getChildren(Object o) {
14-
String[] values = new String[2];
15-
Todo todo = (Todo) o;
16-
values[0]= todo.getSummary();
17-
values[1]= todo.getDescription();
18-
return values;
19-
}
15+
public class TodoWorkbenchAdapter extends WorkbenchAdapter {
2016

2117
@Override
2218
public ImageDescriptor getImageDescriptor(Object object) {
23-
return null;
24-
}
25-
26-
@Override
27-
public String getLabel(Object o) {
28-
return null;
19+
return PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_ELEMENT);
2920
}
3021

3122
@Override
32-
public Object getParent(Object o) {
33-
return null;
23+
public StyledString getStyledText(Object object) {
24+
if (object instanceof Todo) {
25+
Todo todo = (Todo) object;
26+
StyledString styledString = new StyledString(todo.getSummary());
27+
if (todo.isDone()) {
28+
Styler styler = new Styler() {
29+
30+
@Override
31+
public void applyStyles(TextStyle textStyle) {
32+
// Todos, which are done should have a green background
33+
textStyle.background = Display.getCurrent().getSystemColor(SWT.COLOR_GREEN);
34+
}
35+
};
36+
styledString.setStyle(0, todo.getSummary().length(), styler);
37+
38+
}
39+
return styledString;
40+
}
41+
return super.getStyledText(object);
3442
}
3543

3644
}

de.vogella.plugin.adapter/src/de/vogella/plugin/adapter/model/Todo.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public class Todo {
44

55
private String summary;
66
private String description;
7+
private boolean done;
78

89
public String getSummary() {
910
return summary;
@@ -21,4 +22,12 @@ public void setDescription(String description) {
2122
this.description = description;
2223
}
2324

25+
public boolean isDone() {
26+
return done;
27+
}
28+
29+
public void setDone(boolean done) {
30+
this.done = done;
31+
}
32+
2433
}

de.vogella.plugin.adapter/src/de/vogella/plugin/adapter/views/SampleView.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ private List<Todo> getElements() {
6565
Todo todo = new Todo();
6666
todo.setSummary("First Todo");
6767
todo.setDescription("A very good description");
68+
todo.setDone(true);
6869
todos.add(todo);
6970
todo = new Todo();
7071
todo.setSummary("Second Todo");
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package de.vogella.plugin.adapter.views;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import javax.annotation.PostConstruct;
7+
8+
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
9+
import org.eclipse.jface.viewers.ArrayContentProvider;
10+
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
11+
import org.eclipse.jface.viewers.ISelectionChangedListener;
12+
import org.eclipse.jface.viewers.SelectionChangedEvent;
13+
import org.eclipse.jface.viewers.TableViewer;
14+
import org.eclipse.swt.SWT;
15+
import org.eclipse.swt.widgets.Composite;
16+
import org.eclipse.ui.model.WorkbenchLabelProvider;
17+
18+
import de.vogella.plugin.adapter.model.Todo;
19+
20+
public class SampleWorkbenchAdapterView {
21+
22+
private TableViewer viewer;
23+
24+
/**
25+
* This is a callback that will allow us to create the viewer and initialize
26+
* it.
27+
*/
28+
@PostConstruct
29+
public void createPartControl(Composite parent, ESelectionService selectionService) {
30+
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
31+
viewer.setContentProvider(new ArrayContentProvider());
32+
33+
// make use of the DelegatingStyledCellLabelProvider with the WorkbenchLabelProvider as IStyledLabelProvider implementation
34+
viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(new WorkbenchLabelProvider()));
35+
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
36+
37+
@Override
38+
public void selectionChanged(SelectionChangedEvent event) {
39+
selectionService.setSelection(event.getSelection());
40+
}
41+
});
42+
43+
viewer.setInput(getElements());
44+
}
45+
46+
// Build up a simple data model
47+
private List<Todo> getElements() {
48+
List<Todo> todos = new ArrayList<>();
49+
Todo todo = new Todo();
50+
todo.setSummary("First Todo");
51+
todo.setDescription("A very good description");
52+
todo.setDone(true);
53+
todos.add(todo);
54+
todo = new Todo();
55+
todo.setSummary("Second Todo");
56+
todo.setDescription("Second super description");
57+
todos.add(todo);
58+
59+
return todos;
60+
}
61+
}

0 commit comments

Comments
 (0)