org.rstudio.studio.client.common.satellite.SatelliteApplication.java Source code

Java tutorial

Introduction

Here is the source code for org.rstudio.studio.client.common.satellite.SatelliteApplication.java

Source

/*
 * SatelliteApplication.java
 *
 * Copyright (C) 2009-12 by RStudio, Inc.
 *
 * Unless you have received this program directly from RStudio pursuant
 * to the terms of a commercial license agreement with RStudio, then
 * this program is licensed to you under the terms of version 3 of the
 * GNU Affero General Public License. This program is distributed WITHOUT
 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
 *
 */
package org.rstudio.studio.client.common.satellite;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Style;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Provider;
import org.rstudio.core.client.CommandWithArg;
import org.rstudio.studio.client.application.ApplicationUncaughtExceptionHandler;
import org.rstudio.studio.client.workbench.views.source.editors.text.themes.AceThemes;

public class SatelliteApplication {
    public SatelliteApplication(String name, SatelliteApplicationView view, Satellite satellite,
            Provider<AceThemes> pAceThemes, ApplicationUncaughtExceptionHandler uncaughtExHandler) {
        name_ = name;
        view_ = view;
        satellite_ = satellite;
        pAceThemes_ = pAceThemes;
        uncaughtExHandler_ = uncaughtExHandler;
    }

    /**
     * Have subclasses override and return true if the satellite application is
     * not ready to process remote server events until some time after the
     * satellite window is created.
     * @return
     */
    protected boolean manuallyFlushPendingEvents() {
        return false;
    }

    public void go(RootLayoutPanel rootPanel, final Command dismissLoadingProgress) {
        // indicate that we are a satellite window
        satellite_.initialize(name_, new CommandWithArg<JavaScriptObject>() {
            @Override
            public void execute(JavaScriptObject params) {
                view_.reactivate(params);
            }
        });

        if (!manuallyFlushPendingEvents()) {
            flushPendingEvents();
        }

        // inject ace themes
        pAceThemes_.get();

        // register for uncaught exceptions (do this after calling 
        // initSatelliteWindow b/c it depends on Server)
        uncaughtExHandler_.register();

        // create the widget
        Widget w = view_.getWidget();
        rootPanel.add(w);
        rootPanel.setWidgetTopBottom(w, 0, Style.Unit.PX, 0, Style.Unit.PX);
        rootPanel.setWidgetLeftRight(w, 0, Style.Unit.PX, 0, Style.Unit.PX);

        // show the view
        view_.show(satellite_.getParams());

        // dismiss loading progress
        dismissLoadingProgress.execute();
    }

    protected void flushPendingEvents() {
        satellite_.flushPendingEvents(name_);
    }

    private final String name_;
    private final SatelliteApplicationView view_;
    private final Satellite satellite_;
    private final Provider<AceThemes> pAceThemes_;
    private final ApplicationUncaughtExceptionHandler uncaughtExHandler_;
}