2 * Copyright (C) 2010, 2011 Openismus GmbH
4 * This file is part of GWT-Glom.
6 * GWT-Glom is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version.
11 * GWT-Glom is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with GWT-Glom. If not, see <http://www.gnu.org/licenses/>.
20 package org.glom.web.client;
22 import org.glom.web.client.mvp.AppPlaceHistoryMapper;
23 import org.glom.web.client.mvp.DataActivityMapper;
24 import org.glom.web.client.mvp.DocumentSelectionActivityMapper;
25 import org.glom.web.client.mvp.TableSelectionActivityMapper;
26 import org.glom.web.client.place.DocumentSelectionPlace;
28 import com.google.gwt.activity.shared.ActivityManager;
29 import com.google.gwt.activity.shared.ActivityMapper;
30 import com.google.gwt.core.client.EntryPoint;
31 import com.google.gwt.core.client.GWT;
32 import com.google.gwt.dom.client.Style.Overflow;
33 import com.google.gwt.dom.client.Style.Unit;
34 import com.google.gwt.event.shared.EventBus;
35 import com.google.gwt.place.shared.Place;
36 import com.google.gwt.place.shared.PlaceController;
37 import com.google.gwt.place.shared.PlaceHistoryHandler;
38 import com.google.gwt.user.client.ui.AcceptsOneWidget;
39 import com.google.gwt.user.client.ui.IsWidget;
40 import com.google.gwt.user.client.ui.LayoutPanel;
41 import com.google.gwt.user.client.ui.RootLayoutPanel;
42 import com.google.gwt.user.client.ui.SimplePanel;
43 import com.google.gwt.user.client.ui.Widget;
46 * Entry point classes define <code>onModuleLoad()</code>.
48 public class OnlineGlom implements EntryPoint {
49 private Place defaultPlace = new DocumentSelectionPlace();
50 private LayoutPanel layoutPanel = RootLayoutPanel.get();
51 private SimplePanel docSelectionPanel = new SimplePanel();
52 private SimplePanel dataPanel = new SimplePanel();
53 private SimplePanel tableSelectionPanel = new SimplePanel();
55 AcceptsOneWidget docSelectionDisplay = new AcceptsOneWidget() {
57 public void setWidget(IsWidget activityWidget) {
58 Widget widget = Widget.asWidgetOrNull(activityWidget);
59 layoutPanel.setWidgetVisible(docSelectionPanel, widget != null);
60 docSelectionPanel.setWidget(widget);
64 AcceptsOneWidget dataDisplay = new AcceptsOneWidget() {
66 public void setWidget(IsWidget activityWidget) {
67 Widget widget = Widget.asWidgetOrNull(activityWidget);
68 layoutPanel.setWidgetVisible(dataPanel, widget != null);
69 dataPanel.setWidget(widget);
73 AcceptsOneWidget tableSelectionDisplay = new AcceptsOneWidget() {
75 public void setWidget(IsWidget activityWidget) {
76 Widget widget = Widget.asWidgetOrNull(activityWidget);
77 layoutPanel.setWidgetVisible(tableSelectionPanel, widget != null);
78 tableSelectionPanel.setWidget(widget);
83 * This is the entry point method.
86 public void onModuleLoad() {
88 // TODO This value should really come from the css for the body tag but reading the value using
89 // RootPanel.getBodyElement().getStyle().getMargin() doesn't seem to be working.
90 layoutPanel.getElement().getStyle().setMargin(1, Unit.EM);
92 // add the display regions to the main layout panel
93 layoutPanel.add(docSelectionPanel);
94 layoutPanel.add(tableSelectionPanel);
95 layoutPanel.add(dataPanel);
97 // set some properties for the display regions
98 // The 'overflow: visible' adds a horizontal scrollbar when the list view table is larger than the browser
100 layoutPanel.getWidgetContainerElement(dataPanel).getStyle().setOverflow(Overflow.VISIBLE);
102 // set the layout for the list and details places
103 layoutPanel.setWidgetTopHeight(tableSelectionPanel, 0, Unit.PCT, 2.1, Unit.EM);
104 layoutPanel.setWidgetTopHeight(dataPanel, 2.1, Unit.EM, 100, Unit.PCT);
106 // hide the display regions for the list and details places because they are not shown by default
107 layoutPanel.setWidgetVisible(tableSelectionPanel, false);
108 layoutPanel.setWidgetVisible(dataPanel, false);
110 ClientFactory clientFactory = GWT.create(ClientFactory.class);
111 EventBus eventBus = clientFactory.getEventBus();
112 PlaceController placeController = clientFactory.getPlaceController();
114 // Activity manager for the data display region (list or details view).
115 ActivityMapper dataActivityMapper = new DataActivityMapper(clientFactory);
116 ActivityManager dataActivityManager = new ActivityManager(dataActivityMapper, eventBus);
117 dataActivityManager.setDisplay(dataDisplay);
119 // Activity manager for the document selection display region.
120 ActivityMapper docSelectionActivityMapper = new DocumentSelectionActivityMapper(clientFactory);
121 ActivityManager docSelectionActivityManager = new ActivityManager(docSelectionActivityMapper, eventBus);
122 docSelectionActivityManager.setDisplay(docSelectionDisplay);
124 // Activity manager for the table selection display region.
125 ActivityMapper tableSelectionActivityMapper = new TableSelectionActivityMapper(clientFactory);
126 ActivityManager tableSelectionActivityManager = new ActivityManager(tableSelectionActivityMapper, eventBus);
127 tableSelectionActivityManager.setDisplay(tableSelectionDisplay);
129 // Start PlaceHistoryHandler with our PlaceHistoryMapper.
130 AppPlaceHistoryMapper historyMapper = GWT.create(AppPlaceHistoryMapper.class);
131 PlaceHistoryHandler historyHandler = new PlaceHistoryHandler(historyMapper);
132 historyHandler.register(placeController, eventBus, defaultPlace);
134 // Goes to the place represented on the URL or the default place.
135 historyHandler.handleCurrentHistory();