1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.vaadin.gwt.client.actionbar.connector;
35
36 import info.magnolia.ui.vaadin.actionbar.Actionbar;
37 import info.magnolia.ui.vaadin.gwt.client.actionbar.rpc.ActionbarServerRpc;
38 import info.magnolia.ui.vaadin.gwt.client.actionbar.shared.ActionbarSection;
39 import info.magnolia.ui.vaadin.gwt.client.actionbar.widget.ActionbarWidgetView;
40 import info.magnolia.ui.vaadin.gwt.client.actionbar.widget.ActionbarWidgetViewImpl;
41
42 import java.util.ArrayList;
43 import java.util.Collections;
44 import java.util.Comparator;
45 import java.util.List;
46
47 import com.google.gwt.core.client.Scheduler;
48 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
49 import com.google.gwt.event.shared.SimpleEventBus;
50 import com.google.gwt.user.client.Window;
51 import com.google.gwt.user.client.ui.Widget;
52 import com.google.web.bindery.event.shared.EventBus;
53 import com.googlecode.mgwt.ui.client.MGWT;
54 import com.vaadin.client.communication.RpcProxy;
55 import com.vaadin.client.communication.StateChangeEvent;
56 import com.vaadin.client.communication.StateChangeEvent.StateChangeHandler;
57 import com.vaadin.client.ui.AbstractComponentConnector;
58 import com.vaadin.shared.ui.Connect;
59
60
61
62
63 @Connect(Actionbar.class)
64 public class ActionbarConnector extends AbstractComponentConnector implements ActionbarWidgetView.Presenter {
65
66 private ActionbarWidgetView view;
67
68 private final EventBus eventBus = new SimpleEventBus();
69
70 private final ActionbarServerRpc rpc = RpcProxy.create(ActionbarServerRpc.class, this);
71
72 private final boolean isTablet = !(MGWT.getOsDetection().isDesktop() || Window.Location.getQueryString().indexOf("tablet=true") >= 0);
73
74 private final StateChangeHandler sectionRearrangementHandler = new StateChangeHandler() {
75 @Override
76 public void onStateChanged(StateChangeEvent stateChangeEvent) {
77 List<ActionbarSection> sections = new ArrayList<ActionbarSection>(getState().sections.values());
78 Collections.sort(sections, new Comparator<ActionbarSection>() {
79 @Override
80 public int compare(ActionbarSection o1, ActionbarSection o2) {
81 Integer idx1 = getState().sectionOrder.indexOf(o1.getName());
82 Integer idx2 = getState().sectionOrder.indexOf(o2.getName());
83 return idx1.compareTo(idx2);
84 }
85 });
86 view.setSections(sections);
87 view.setDisabledActions(getState().disabledActions);
88 view.setVisibleSections(getState().visibleSections);
89 }
90 };
91
92 private final StateChangeHandler previewChangeHandler = new StateChangeHandler() {
93 @Override
94 public void onStateChanged(StateChangeEvent stateChangeEvent) {
95 Scheduler.get().scheduleDeferred(new ScheduledCommand() {
96 @Override
97 public void execute() {
98 for (String sectionName : getState().sections.keySet()) {
99 String previewUrl = getResourceUrl(sectionName);
100 if (previewUrl != null) {
101 view.setSectionPreview(sectionName, previewUrl);
102 }
103 }
104 }
105 });
106 }
107 };
108
109 private final StateChangeHandler visibleSectionSetChangeHandler = new StateChangeHandler() {
110 @Override
111 public void onStateChanged(StateChangeEvent stateChangeEvent) {
112 Scheduler.get().scheduleDeferred(new ScheduledCommand() {
113 @Override
114 public void execute() {
115 view.setVisibleSections(getState().visibleSections);
116 }
117 });
118 }
119 };
120
121 private final StateChangeHandler enabledActionSetChangeHandler = new StateChangeHandler() {
122 @Override
123 public void onStateChanged(StateChangeEvent stateChangeEvent) {
124 Scheduler.get().scheduleDeferred(new ScheduledCommand() {
125 @Override
126 public void execute() {
127 view.setDisabledActions(getState().disabledActions);
128 }
129 });
130 }
131 };
132
133 private final StateChangeHandler collapseChangeHandler = new StateChangeHandler() {
134 @Override
135 public void onStateChanged(StateChangeEvent stateChangeEvent) {
136 view.setOpen(getState().isOpen);
137 }
138 };
139
140 @Override
141 protected void init() {
142 super.init();
143 addStateChangeHandler(previewChangeHandler);
144 addStateChangeHandler("sections", sectionRearrangementHandler);
145 addStateChangeHandler("visibleSections", visibleSectionSetChangeHandler);
146 addStateChangeHandler("disabledActions", enabledActionSetChangeHandler);
147 addStateChangeHandler("isOpen", collapseChangeHandler);
148 if (isDeviceTablet()) {
149 setOpened(true);
150 }
151 }
152
153 @Override
154 public Widget getWidget() {
155 return super.getWidget();
156 }
157
158 @Override
159 protected Widget createWidget() {
160 this.view = new ActionbarWidgetViewImpl(eventBus, this);
161 return this.view.asWidget();
162 }
163
164 @Override
165 public ActionbarState getState() {
166 return (ActionbarState) super.getState();
167 }
168
169 @Override
170 public void triggerAction(String actionToken) {
171 rpc.onActionTriggered(actionToken);
172 }
173
174 @Override
175 public void setOpened(boolean isOpen) {
176 rpc.setOpen(isOpen);
177 }
178
179 @Override
180 public void forceLayout() {
181 getLayoutManager().setNeedsMeasure(this);
182 }
183
184 @Override
185 public String getIconResourceURL(String actionName) {
186 return getResourceUrl(actionName);
187 }
188
189
190
191
192
193
194
195 @Override
196 public boolean isDeviceTablet() {
197 return isTablet;
198 }
199 }