Use a LayoutPanel with multiple display areas for main layout.
[online-glom:gwt-glom.git] / src / main / java / org / glom / web / client / OnlineGlom.java
1 /*
2  * Copyright (C) 2010, 2011 Openismus GmbH
3  *
4  * This file is part of GWT-Glom.
5  *
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.
10  *
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
14  * for more details.
15  *
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/>.
18  */
19
20 package org.glom.web.client;
21
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;
27
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;
44
45 /**
46  * Entry point classes define <code>onModuleLoad()</code>.
47  */
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();
54
55         AcceptsOneWidget docSelectionDisplay = new AcceptsOneWidget() {
56                 @Override
57                 public void setWidget(IsWidget activityWidget) {
58                         Widget widget = Widget.asWidgetOrNull(activityWidget);
59                         layoutPanel.setWidgetVisible(docSelectionPanel, widget != null);
60                         docSelectionPanel.setWidget(widget);
61                 }
62         };
63
64         AcceptsOneWidget dataDisplay = new AcceptsOneWidget() {
65                 @Override
66                 public void setWidget(IsWidget activityWidget) {
67                         Widget widget = Widget.asWidgetOrNull(activityWidget);
68                         layoutPanel.setWidgetVisible(dataPanel, widget != null);
69                         dataPanel.setWidget(widget);
70                 }
71         };
72
73         AcceptsOneWidget tableSelectionDisplay = new AcceptsOneWidget() {
74                 @Override
75                 public void setWidget(IsWidget activityWidget) {
76                         Widget widget = Widget.asWidgetOrNull(activityWidget);
77                         layoutPanel.setWidgetVisible(tableSelectionPanel, widget != null);
78                         tableSelectionPanel.setWidget(widget);
79                 }
80         };
81
82         /**
83          * This is the entry point method.
84          */
85         @Override
86         public void onModuleLoad() {
87
88                 // add the display regions to the main layout panel
89                 layoutPanel.add(docSelectionPanel);
90                 layoutPanel.add(tableSelectionPanel);
91                 layoutPanel.add(dataPanel);
92
93                 // set some properties for the display regions
94                 // The 'overflow: visible' adds a horizontal scrollbar when the list view table is larger than the browser
95                 // window.
96                 layoutPanel.getWidgetContainerElement(dataPanel).getStyle().setOverflow(Overflow.VISIBLE);
97
98                 // set the layout for the list and details places
99                 layoutPanel.setWidgetTopHeight(tableSelectionPanel, 0, Unit.PCT, 10, Unit.PCT);
100                 layoutPanel.setWidgetTopHeight(dataPanel, 2, Unit.EM, 100, Unit.PCT);
101
102                 // hide the display regions for the list and details places because they are not shown by default
103                 layoutPanel.setWidgetVisible(tableSelectionPanel, false);
104                 layoutPanel.setWidgetVisible(dataPanel, false);
105
106                 ClientFactory clientFactory = GWT.create(ClientFactory.class);
107                 EventBus eventBus = clientFactory.getEventBus();
108                 PlaceController placeController = clientFactory.getPlaceController();
109
110                 // Activity manager for the data display region (list or details view).
111                 ActivityMapper dataActivityMapper = new DataActivityMapper(clientFactory);
112                 ActivityManager dataActivityManager = new ActivityManager(dataActivityMapper, eventBus);
113                 dataActivityManager.setDisplay(dataDisplay);
114
115                 // Activity manager for the document selection display region.
116                 ActivityMapper docSelectionActivityMapper = new DocumentSelectionActivityMapper(clientFactory);
117                 ActivityManager docSelectionActivityManager = new ActivityManager(docSelectionActivityMapper, eventBus);
118                 docSelectionActivityManager.setDisplay(docSelectionDisplay);
119
120                 // Activity manager for the table selection display region.
121                 ActivityMapper tableSelectionActivityMapper = new TableSelectionActivityMapper(clientFactory);
122                 ActivityManager tableSelectionActivityManager = new ActivityManager(tableSelectionActivityMapper, eventBus);
123                 tableSelectionActivityManager.setDisplay(tableSelectionDisplay);
124
125                 // Start PlaceHistoryHandler with our PlaceHistoryMapper.
126                 AppPlaceHistoryMapper historyMapper = GWT.create(AppPlaceHistoryMapper.class);
127                 PlaceHistoryHandler historyHandler = new PlaceHistoryHandler(historyMapper);
128                 historyHandler.register(placeController, eventBus, defaultPlace);
129
130                 // Goes to the place represented on the URL or the default place.
131                 historyHandler.handleCurrentHistory();
132         }
133 }