/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.widget.searchandfilter.gwt.example.client; import java.util.ArrayList; import java.util.List; import org.geomajas.gwt.client.Geomajas; import org.geomajas.gwt.client.util.WidgetLayout; import org.geomajas.gwt.client.widget.LayerTree; import org.geomajas.gwt.client.widget.Legend; import org.geomajas.gwt.client.widget.LoadingScreen; import org.geomajas.gwt.client.widget.LocaleSelect; import org.geomajas.gwt.client.widget.MapWidget; import org.geomajas.gwt.client.widget.OverviewMap; import org.geomajas.gwt.client.widget.Toolbar; import org.geomajas.plugin.staticsecurity.client.Authentication; import org.geomajas.widget.searchandfilter.client.widget.attributesearch.AttributeSearchCreator; import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.FreeDrawingSearch; import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.GeometricSearchCreator; import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.GeometricSearchPanel; import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.GeometricSearchPanelCreator; import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.SelectionSearch; import org.geomajas.widget.searchandfilter.client.widget.multifeaturelistgrid.MultiFeatureListGrid; import org.geomajas.widget.searchandfilter.client.widget.search.CombinedSearchCreator; import org.geomajas.widget.searchandfilter.client.widget.search.SearchEvent; import org.geomajas.widget.searchandfilter.client.widget.search.SearchHandler; import org.geomajas.widget.searchandfilter.client.widget.search.SearchWidgetRegistry; import org.geomajas.widget.searchandfilter.client.widget.searchfavourites.SearchFavouritesListCreator; import org.geomajas.widget.searchandfilter.gwt.example.client.i18n.ApplicationMessages; import org.geomajas.widget.searchandfilter.gwt.example.client.pages.AbstractTab; import org.geomajas.widget.searchandfilter.gwt.example.client.pages.MultiFeatureListGridPage; import org.geomajas.widget.searchandfilter.gwt.example.client.pages.SearchPage; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.smartgwt.client.types.Side; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.tab.TabSet; import com.smartgwt.client.widgets.toolbar.ToolStrip; /** * Entry point and main class for GWT application. This class defines the layout * and functionality of this application. * * @author geomajas-gwt-archetype */ public class Application implements EntryPoint { private OverviewMap overviewMap; private MapWidget mapWidget; private MultiFeatureListGrid featureListGrid; private Legend legend; private TabSet tabSet = new TabSet(); private List<AbstractTab> tabs = new ArrayList<AbstractTab>(); private ApplicationMessages messages = GWT.create(ApplicationMessages.class); private ToolStrip topBar; public Application() { } public void onModuleLoad() { VLayout mainLayout = new VLayout(); mainLayout.setWidth100(); mainLayout.setHeight100(); // --------------------------------------------------------------------- // Top bar: // --------------------------------------------------------------------- topBar = new ToolStrip(); topBar.setHeight(33); topBar.setWidth100(); topBar.addSpacer(6); Img icon = new Img("[ISOMORPHIC]/geomajas/geomajas_desktopicon_small.png"); icon.setSize(24); topBar.addMember(icon); topBar.addSpacer(6); Label title = new Label(messages.applicationTitle("hello world")); title.setStyleName("appTitle"); title.setWidth(300); topBar.addMember(title); topBar.addFill(); topBar.addMember(new LocaleSelect("English")); mainLayout.addMember(topBar); HLayout layout = new HLayout(); layout.setWidth100(); layout.setHeight100(); layout.setMembersMargin(5); layout.setMargin(5); // --------------------------------------------------------------------- // Create the left-side (map and tabs): // --------------------------------------------------------------------- mapWidget = new MapWidget("mapMain", "app"); final Toolbar toolbar = new Toolbar(mapWidget, WidgetLayout.toolbarLargeButtonSize); VLayout mapLayout = new VLayout(); mapLayout.setShowResizeBar(true); mapLayout.setResizeBarTarget("tabs"); mapLayout.addMember(toolbar); mapLayout.addMember(mapWidget); mapLayout.setHeight("65%"); tabSet.setTabBarPosition(Side.TOP); tabSet.setWidth100(); tabSet.setHeight("35%"); tabSet.setID("tabs"); VLayout leftLayout = new VLayout(); leftLayout.setShowEdges(true); leftLayout.addMember(mapLayout); leftLayout.addMember(tabSet); layout.addMember(leftLayout); // --------------------------------------------------------------------- // Create the right-side (overview map, layer-tree, legend): // --------------------------------------------------------------------- final SectionStack sectionStack = new SectionStack(); sectionStack.setShowEdges(true); sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE); sectionStack.setCanReorderSections(true); sectionStack.setCanResizeSections(false); sectionStack.setSize("250px", "100%"); // Overview map layout: SectionStackSection section1 = new SectionStackSection("Overview map"); section1.setExpanded(true); overviewMap = new OverviewMap("mapOverview", "app", mapWidget, false, true); section1.addItem(overviewMap); sectionStack.addSection(section1); // LayerTree layout: SectionStackSection section2 = new SectionStackSection("Layer tree"); section2.setExpanded(true); LayerTree layerTree = new LayerTree(mapWidget); section2.addItem(layerTree); sectionStack.addSection(section2); // Legend layout: SectionStackSection section3 = new SectionStackSection("Legend"); section3.setExpanded(true); legend = new Legend(mapWidget.getMapModel()); section3.addItem(legend); sectionStack.addSection(section3); // Putting the right side layouts together: layout.addMember(sectionStack); // --------------------------------------------------------------------- // Bottom left: Add tabs here: // --------------------------------------------------------------------- MultiFeatureListGridPage page1 = new MultiFeatureListGridPage(mapWidget); featureListGrid = page1.getTable(); SearchPage page2 = new SearchPage("Search features", mapWidget); addTab(page2); addTab(page1); // --------------------------------------------------------------------- // Finally draw everything: // --------------------------------------------------------------------- mainLayout.addMember(layout); mainLayout.draw(); // Install a loading screen // This only works if the application initially shows a map with at // least 1 vector layer: LoadingScreen loadScreen = new LoadingScreen(mapWidget, "Simple GWT application using Geomajas " + Geomajas.getVersion()); loadScreen.draw(); // Then initialize: Authentication.getInstance().login("luc", "luc", null); initialize(); } private void addTab(AbstractTab tab) { tabSet.addTab(tab); tabs.add(tab); } private void initialize() { legend.setHeight(200); overviewMap.setHeight(200); // --------------------------------------------------------------------- // Create Searchpanels // --------------------------------------------------------------------- SearchWidgetRegistry.initialize(mapWidget, featureListGrid); SearchWidgetRegistry.put(new AttributeSearchCreator()); SearchWidgetRegistry.put(new CombinedSearchCreator()); SearchWidgetRegistry.put(new SearchFavouritesListCreator()); SearchWidgetRegistry.put(new GeometricSearchCreator(new GeometricSearchPanelCreator() { public GeometricSearchPanel createInstance(MapWidget mapWidget) { GeometricSearchPanel gsp = new GeometricSearchPanel(mapWidget); gsp.addSearchMethod(new SelectionSearch()); gsp.addSearchMethod(new FreeDrawingSearch()); return gsp; } })); // -- Show the grid after new result has been retrieved SearchWidgetRegistry.addSearchHandler(new SearchHandler() { public void onSearchStart(SearchEvent event) { } public void onSearchDone(SearchEvent event) { // handled by featureListGrid, no need for us to do something } public void onSearchEnd(SearchEvent event) { if (!(featureListGrid.isShowDetailsOnSingleResult() && event.isSingleResult())) { tabSet.selectTab(1); } } }); for (AbstractTab tab : tabs) { tab.initialize(); } } }