1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.uruma.renderer.impl;
17
18 import java.util.List;
19
20 import org.eclipse.jface.viewers.IBaseLabelProvider;
21 import org.eclipse.jface.viewers.IContentProvider;
22 import org.eclipse.jface.viewers.TreeNodeContentProvider;
23 import org.eclipse.jface.viewers.TreeViewer;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.widgets.Tree;
26 import org.eclipse.swt.widgets.TreeItem;
27 import org.seasar.uruma.component.UIComponent;
28 import org.seasar.uruma.component.UICompositeComponent;
29 import org.seasar.uruma.component.UIElement;
30 import org.seasar.uruma.component.jface.TreeComponent;
31 import org.seasar.uruma.component.jface.TreeItemComponent;
32 import org.seasar.uruma.context.PartContext;
33 import org.seasar.uruma.context.WidgetHandle;
34 import org.seasar.uruma.viewer.GenericLabelProvider;
35 import org.seasar.uruma.viewer.UrumaTreeViewer;
36
37
38
39
40
41
42 public class TreeViewerRenderer extends
43 AbstractViewerRenderer<TreeComponent, UrumaTreeViewer, Tree> {
44
45 @Override
46 protected Class<Tree> getWidgetType() {
47 return Tree.class;
48 }
49
50
51
52
53 @Override
54 protected boolean canCreateViewer(final UICompositeComponent component) {
55
56 List<UIElement> children = component.getChildren();
57 for (UIElement child : children) {
58 if (child instanceof TreeItemComponent) {
59 return false;
60 }
61 }
62 return true;
63 }
64
65
66
67
68
69
70
71 @Override
72 public void renderAfter(final WidgetHandle handle,
73 final UIComponent uiComponent, final WidgetHandle parent,
74 final PartContext context) {
75 if (handle.instanceOf(Tree.class)) {
76 TreeComponent component = (TreeComponent) uiComponent;
77 Tree tree = handle.<Tree> getCastWidget();
78 int autoExpandLevel = Integer.parseInt(component.autoExpandLevel);
79 if (autoExpandLevel >= 1) {
80 expandTree(tree.getItems(), 1, autoExpandLevel);
81 }
82 }
83 super.renderAfter(handle, uiComponent, parent, context);
84 }
85
86 protected void expandTree(final TreeItem[] items, final int currentLevel,
87 final int maxLevel) {
88 if (currentLevel >= maxLevel) {
89 return;
90 }
91
92 for (TreeItem treeItem : items) {
93 treeItem.setExpanded(true);
94 }
95
96 for (TreeItem treeItem : items) {
97 expandTree(treeItem.getItems(), currentLevel + 1, maxLevel);
98 }
99 }
100
101
102
103
104
105 @Override
106 protected void doRenderViewer(final TreeComponent uiComponent,
107 final UrumaTreeViewer viewer) {
108 int autoExpandLevel = Integer.parseInt(uiComponent.autoExpandLevel);
109 viewer.setAutoExpandLevel(autoExpandLevel);
110 }
111
112
113
114
115 @Override
116 protected int getDefaultStyle() {
117 return SWT.BORDER;
118 }
119
120
121
122
123 @Override
124 protected IBaseLabelProvider getDefaultLabelProvider() {
125 return new GenericLabelProvider();
126 }
127
128
129
130
131 @Override
132 protected Class<UrumaTreeViewer> getViewerType() {
133 return UrumaTreeViewer.class;
134 }
135
136
137
138
139 @Override
140 protected IContentProvider getDefaultContentProvider() {
141 return new TreeNodeContentProvider();
142 }
143 }