org.activityinfo.ui.client.page.app.AppFrameSet.java Source code

Java tutorial

Introduction

Here is the source code for org.activityinfo.ui.client.page.app.AppFrameSet.java

Source

package org.activityinfo.ui.client.page.app;

/*
 * #%L
 * ActivityInfo Server
 * %%
 * Copyright (C) 2009 - 2013 UNICEF
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public 
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * #L%
 */

import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.activityinfo.legacy.client.AsyncMonitor;
import org.activityinfo.legacy.shared.Log;
import org.activityinfo.model.auth.AuthenticatedUser;
import org.activityinfo.ui.client.EventBus;
import org.activityinfo.ui.client.local.ui.SyncStatusBar;
import org.activityinfo.ui.client.page.*;
import org.activityinfo.ui.client.page.config.DbListPageState;
import org.activityinfo.ui.client.page.dashboard.DashboardPlace;
import org.activityinfo.ui.client.page.entry.place.DataEntryPlace;
import org.activityinfo.ui.client.page.report.ReportsPlace;
import org.activityinfo.ui.client.widget.legacy.LoadingPlaceHolder;

@Singleton
public class AppFrameSet implements Frame {

    private EventBus eventBus;
    private Viewport viewport;

    private Widget activeWidget;
    private Page activePage;
    private AppBar appBar;
    private SyncStatusBar statusBar;

    @Inject
    public AppFrameSet(EventBus eventBus, AuthenticatedUser auth, AppBar appBar, SyncStatusBar statusBar) {

        Log.trace("AppFrameSet constructor starting");

        this.eventBus = eventBus;
        this.appBar = appBar;
        this.statusBar = statusBar;

        viewport = new Viewport();
        viewport.setLayout(new BorderLayout());

        setupTabs();
        setupStatus();

        Log.trace("AppFrameSet constructor finished, about to add to RootPanel");

        RootPanel.get().add(viewport);

        Log.trace("AppFrameSet now added to RootPanel");

    }

    private void setupTabs() {
        appBar.getSectionTabStrip().addSelectionHandler(new SelectionHandler<Section>() {

            @Override
            public void onSelection(SelectionEvent<Section> event) {
                onSectionClicked(event.getSelectedItem());
            }
        });
        eventBus.addListener(NavigationHandler.NAVIGATION_AGREED, new Listener<NavigationEvent>() {

            @Override
            public void handleEvent(NavigationEvent event) {
                appBar.getSectionTabStrip().setSelection(event.getPlace().getSection());
            }

        });
        BorderLayoutData layout = new BorderLayoutData(LayoutRegion.NORTH);
        layout.setSize(AppBar.HEIGHT);

        viewport.add(appBar, layout);
    }

    private void setupStatus() {
        BorderLayoutData layout = new BorderLayoutData(LayoutRegion.SOUTH);
        layout.setSize(SyncStatusBar.HEIGHT);

        viewport.add(statusBar, layout);
    }

    private void onSectionClicked(Section selectedItem) {
        switch (selectedItem) {
        case HOME:
            eventBus.fireEvent(new NavigationEvent(NavigationHandler.NAVIGATION_REQUESTED, new DashboardPlace()));
            break;
        case DATA_ENTRY:
            eventBus.fireEvent(new NavigationEvent(NavigationHandler.NAVIGATION_REQUESTED, new DataEntryPlace()));
            break;
        case ANALYSIS:
            eventBus.fireEvent(new NavigationEvent(NavigationHandler.NAVIGATION_REQUESTED, new ReportsPlace()));
            break;
        case DESIGN:
            eventBus.fireEvent(new NavigationEvent(NavigationHandler.NAVIGATION_REQUESTED, new DbListPageState()));
            break;
        }

    }

    public void setWidget(Widget widget) {

        if (activeWidget != null) {
            viewport.remove(activeWidget);
        }

        viewport.add(widget, new BorderLayoutData(LayoutRegion.CENTER));
        activeWidget = widget;
        viewport.layout();
    }

    @Override
    public void setActivePage(Page page) {
        setWidget((Widget) page.getWidget());
        activePage = page;
    }

    @Override
    public Page getActivePage() {
        return activePage;
    }

    @Override
    public AsyncMonitor showLoadingPlaceHolder(PageId pageId, PageState loadingPlace) {
        activePage = null;
        LoadingPlaceHolder placeHolder = new LoadingPlaceHolder();
        setWidget(placeHolder);
        return placeHolder;
    }

    @Override
    public PageId getPageId() {
        return null;
    }

    @Override
    public Object getWidget() {
        return viewport;
    }

    @Override
    public void requestToNavigateAway(PageState place, NavigationCallback callback) {
        callback.onDecided(true);
    }

    @Override
    public String beforeWindowCloses() {
        return null;
    }

    @Override
    public boolean navigate(PageState place) {
        appBar.getSectionTabStrip().setSelection(place.getSection());
        return true;
    }

    @Override
    public void shutdown() {

    }

}