package org.rstudio.studio.client.rmarkdown.ui;
import org.rstudio.core.client.BrowseCap;
import org.rstudio.core.client.dom.WindowEx;
import org.rstudio.studio.client.application.Desktop;
import org.rstudio.studio.client.common.satellite.SatelliteManager;
import org.rstudio.studio.client.rmarkdown.RmdOutput;
import org.rstudio.studio.client.rmarkdown.RmdOutputSatellite;
import org.rstudio.studio.client.rmarkdown.model.RmdPreviewParams;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.inject.Inject;
public class RmdOutputFrameSatellite extends RmdOutputFrameBase
{
@Inject
public RmdOutputFrameSatellite (SatelliteManager satelliteManager)
{
satelliteManager_ = satelliteManager;
}
@Override
public void closeOutputFrame(boolean forReopen)
{
if (forReopen)
SatelliteManager.callNotifyPendingReactivate(getWindowObject());
satelliteManager_.closeSatelliteWindow(RmdOutputSatellite.NAME);
}
@Override
public WindowEx getWindowObject()
{
return satelliteManager_.getSatelliteWindowObject(RmdOutputSatellite.NAME);
}
@Override
public void showRmdPreview(RmdPreviewParams params, boolean activate)
{
super.showRmdPreview(params);
WindowEx win = getWindowObject();
if (activate && win != null && !Desktop.isDesktop() && BrowseCap.isChrome())
{
satelliteManager_.forceReopenSatellite(RmdOutputSatellite.NAME,
params,
activate);
}
else
{
satelliteManager_.openSatellite(RmdOutputSatellite.NAME,
params,
params.getPreferredSize(),
activate);
}
}
@Override
public int getViewerType()
{
return RmdOutput.RMD_VIEWER_TYPE_WINDOW;
}
@Override
public int getScrollPosition()
{
return getScrollPositionNative(getWindowObject());
}
@Override
public String getAnchor()
{
return getAnchorNative(getWindowObject());
}
private final native int getScrollPositionNative(JavaScriptObject win) /*-{
var scrollPosition;
try {
scrollPosition = win.getRstudioFrameScrollPosition();
}
catch (e) {
// fail gracefully with top of document
}
if (typeof(scrollPosition) === "undefined")
scrollPosition = 0;
return scrollPosition;
}-*/;
private final native String getAnchorNative(JavaScriptObject win) /*-{
var anchor;
try {
anchor = win.getRstudioFrameAnchor();
}
catch (e) {
// fail gracefully with no anchor
}
if (typeof(anchor) === "undefined")
anchor = "";
return anchor;
}-*/;
private final SatelliteManager satelliteManager_;
}