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.templating.editor.client;
35
36
37 import static info.magnolia.templating.editor.client.jsni.LegacyJavascript.getI18nMessage;
38 import static info.magnolia.templating.editor.client.jsni.LegacyJavascript.isPreviewMode;
39 import info.magnolia.templating.editor.client.PreviewChannelWidget.Orientation;
40 import info.magnolia.templating.editor.client.button.PreviewButtonWidget;
41 import info.magnolia.templating.editor.client.dom.CMSComment;
42 import info.magnolia.templating.editor.client.model.ModelStorage;
43
44 import java.util.ArrayList;
45 import java.util.List;
46
47 import com.google.gwt.dom.client.Document;
48 import com.google.gwt.dom.client.Style.Float;
49 import com.google.gwt.event.dom.client.ClickEvent;
50 import com.google.gwt.event.dom.client.ClickHandler;
51 import com.google.gwt.event.dom.client.MouseDownEvent;
52 import com.google.gwt.event.dom.client.MouseDownHandler;
53 import com.google.gwt.user.client.Command;
54 import com.google.gwt.user.client.ui.Button;
55 import com.google.gwt.user.client.ui.InlineLabel;
56 import com.google.gwt.user.client.ui.MenuItem;
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public class PageBarWidget extends AbstractBarWidget {
71
72 private PageEditor pageEditor;
73
74 private String workspace;
75 private String path;
76 private String dialog;
77 private boolean previewState = false;
78
79 public PageBarWidget(final PageEditor pageEditor, final CMSComment comment) {
80 super(null);
81 this.pageEditor = pageEditor;
82
83 String content = comment.getAttribute("content");
84 int i = content.indexOf(':');
85 this.workspace = content.substring(0, i);
86 this.path = content.substring(i + 1);
87 this.dialog = comment.getAttribute("dialog");
88
89 if(isPreviewMode()){
90 createPreviewModeBar();
91 } else {
92 createAuthoringModeBar();
93 }
94
95 addDomHandler(new MouseDownHandler() {
96 @Override
97 public void onMouseDown(MouseDownEvent event) {
98 ModelStorage.getInstance().getFocusModel().reset();
99 }
100 }, MouseDownEvent.getType());
101
102 }
103
104 private void createAuthoringModeBar() {
105 InlineLabel mainbarPlaceholder = new InlineLabel();
106 mainbarPlaceholder.getElement().setId("mgnlEditorMainbarPlaceholder");
107 mainbarPlaceholder.setStylePrimaryName("mgnlMainbarPlaceholder");
108
109 getElement().insertFirst(mainbarPlaceholder.getElement());
110
111 Button properties = new Button(getI18nMessage("buttons.properties.js"));
112 properties.addClickHandler(new ClickHandler() {
113 @Override
114 public void onClick(ClickEvent event) {
115 pageEditor.openDialog(dialog, workspace, path, null, null);
116 }
117 });
118 addButton(properties, Float.RIGHT);
119
120 MenuItem desktop = new MenuItem(getI18nMessage("buttons.preview.desktop.js"), true, new DesktopPreviewCommand());
121 MenuItem smartphone = new MenuItem(getI18nMessage("buttons.preview.smartphone.js"), true, new MobilePreviewCommand("smartphone", Orientation.PORTRAIT));
122 MenuItem tablet = new MenuItem(getI18nMessage("buttons.preview.tablet.js"), true, new MobilePreviewCommand("tablet", Orientation.LANDSCAPE));
123
124 List<MenuItem> options = new ArrayList<MenuItem>();
125 options.add(desktop);
126 options.add(smartphone);
127 options.add(tablet);
128
129 PreviewButtonWidget preview = new PreviewButtonWidget(getI18nMessage("buttons.preview.js"), new DesktopPreviewCommand(), options);
130 addButton(preview, Float.LEFT, "mgnlEditorPreviewButton");
131
132 Button adminCentral = new Button(getI18nMessage("buttons.admincentral.js"));
133 adminCentral.addClickHandler(new ClickHandler() {
134 @Override
135 public void onClick(ClickEvent event) {
136 pageEditor.showTree(workspace, path);
137 }
138 });
139 addButton(adminCentral, Float.LEFT);
140
141 setClassName("mgnlEditorMainbar mgnlEditorBar");
142
143 previewState = false;
144 }
145
146 private void createPreviewModeBar() {
147 Button preview = new Button(getI18nMessage("buttons.preview.hidden.js"));
148 preview.addClickHandler(new ClickHandler() {
149 @Override
150 public void onClick(ClickEvent event) {
151 pageEditor.preview(false);
152 }
153 });
154 addButton(preview, Float.LEFT);
155 setClassName("mgnlEditorMainbarPreview");
156
157 previewState = true;
158 }
159
160 public final boolean isPreviewState() {
161 return previewState;
162 }
163
164 private class MobilePreviewCommand implements Command {
165
166 private String deviceType;
167 private Orientation orientation;
168
169 public MobilePreviewCommand(final String deviceType, final Orientation orientation) {
170 this.deviceType = deviceType;
171 this.orientation = orientation;
172 }
173
174 @Override
175 public void execute() {
176 pageEditor.createChannelPreview("mobile", deviceType, orientation);
177 }
178 }
179
180 private class DesktopPreviewCommand implements Command {
181
182 @Override
183 public void execute() {
184 pageEditor.preview(true);
185 }
186 }
187
188 public void attach() {
189 Document.get().getBody().insertFirst(getElement());
190 onAttach();
191 }
192 }