1 package org.vaadin.jonatan.contexthelp;
2
3 import com.vaadin.event.ShortcutAction;
4 import com.vaadin.server.AbstractExtension;
5 import com.vaadin.v7.ui.AbstractField;
6 import com.vaadin.ui.Component;
7 import com.vaadin.ui.UI;
8 import org.vaadin.jonatan.contexthelp.widgetset.client.ui.ContextHelpServerRpc;
9 import org.vaadin.jonatan.contexthelp.widgetset.client.ui.ContextHelpState;
10 import org.vaadin.jonatan.contexthelp.widgetset.client.ui.Placement;
11
12
13
14
15
16
17
18
19
20
21 public class ContextHelp extends AbstractExtension {
22 private static final long serialVersionUID = 3852216539762314709L;
23
24 private static int helpComponentIdCounter = 0;
25
26 private HelpProvider helpProvider;
27
28 private ContextHelpServerRpct/client/ui/ContextHelpServerRpc.html#ContextHelpServerRpc">ContextHelpServerRpc rpc = new ContextHelpServerRpc() {
29
30 @Override
31 public void selectComponent(String id) {
32 getState().selectedComponentId = id;
33 String helpHTML = helpProvider.getHtmlForId(id);
34 if (id != null && !id.equals("") && helpHTML != null) {
35 getState().helpHTML = helpHTML;
36 Placement placement = helpProvider.getPlacementForId(id);
37 getState().placement = placement == null ? Placement.AUTO : placement;
38 getState().hidden = false;
39 } else {
40 getState().hidden = true;
41 }
42 }
43
44 @Override
45 public void setHidden(boolean hidden) {
46 getState().hidden = hidden;
47 }
48 };
49
50
51 public ContextHelp() {
52 helpProvider = new DefaultHelpProvider();
53 registerRpc(rpc);
54 }
55
56 @Override
57 public ContextHelpState getState() {
58 return (ContextHelpState) super.getState();
59 }
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 public void addHelpForComponent(Component component, String help) {
76 if (helpProvider instanceof DefaultHelpProvider) {
77 if (component.getId() == null) {
78 component.setId(generateComponentId());
79 }
80 ((DefaultHelpProvider) helpProvider).addHelpForId(
81 component.getId(), help);
82 }
83 }
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 public void addHelpForComponent(Component component, String help,
102 Placement placement) {
103 addHelpForComponent(component, help);
104 setPlacement(component, placement);
105 }
106
107 private String generateComponentId() {
108 return "help_" + helpComponentIdCounter++;
109 }
110
111
112
113
114
115
116
117 public void showHelpFor(Component component) {
118 if (component.getId() != null) {
119 if (component instanceof AbstractField) {
120 ((AbstractField)component).focus();
121 }
122 getState().selectedComponentId = component.getId();
123 String helpHTML = helpProvider.getHtmlForId(component.getId());
124 if (helpHTML != null) {
125 getState().helpHTML = helpHTML;
126 }
127 Placement placement = helpProvider.getPlacementForId(component.getId());
128 getState().placement = placement == null ? Placement.AUTO : placement;
129 getState().hidden = false;
130 }
131 }
132
133
134
135
136 public void hideHelp() {
137 getState().selectedComponentId = null;
138 getState().hidden = true;
139 }
140
141
142
143
144
145
146
147
148
149 public void setFollowFocus(boolean followFocus) {
150 getState().followFocus = followFocus;
151 getState().selectedComponentId = "";
152 }
153
154
155
156
157
158 public boolean isFollowFocus() {
159 return getState().followFocus;
160 }
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178 public void setPlacement(Component component, Placement placement) {
179 if (helpProvider instanceof DefaultHelpProvider) {
180 ((DefaultHelpProvider) helpProvider).setPlacementOfId(
181 component.getId(), placement);
182 }
183 }
184
185
186
187
188
189
190
191
192 public void setHelpKey(int helpKey) {
193 getState().helpKey = helpKey;
194 }
195
196
197
198
199 public int getHelpKey() {
200 return getState().helpKey;
201 }
202
203
204
205
206
207 public boolean isHideOnBlur() {
208 return getState().hideOnBlur;
209 }
210
211
212
213
214
215
216
217
218
219
220
221 public void setHideOnBlur(boolean hideOnBlur) {
222 getState().hideOnBlur = hideOnBlur;
223 }
224
225
226
227
228
229
230
231
232 public void setHelpProvider(HelpProvider helpProvider) {
233 this.helpProvider = helpProvider;
234 }
235
236
237
238
239
240 public HelpProvider getHelpProvider() {
241 return helpProvider;
242 }
243
244
245
246
247
248
249
250 public void extend(UI ui) {
251 super.extend(ui);
252 }
253 }