Package org.rstudio.studio.client.workbench.views.viewer

Source Code of org.rstudio.studio.client.workbench.views.viewer.ViewerPane

/*
* ViewerPane.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* 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.workbench.views.viewer;

import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;

import org.rstudio.core.client.Size;
import org.rstudio.core.client.URIUtils;
import org.rstudio.core.client.widget.RStudioFrame;
import org.rstudio.core.client.widget.Toolbar;
import org.rstudio.core.client.widget.ToolbarButton;
import org.rstudio.core.client.widget.ToolbarPopupMenu;
import org.rstudio.studio.client.application.events.EventBus;
import org.rstudio.studio.client.common.AutoGlassPanel;
import org.rstudio.studio.client.common.GlobalDisplay;
import org.rstudio.studio.client.common.icons.StandardIcons;
import org.rstudio.studio.client.rmarkdown.model.RmdPreviewParams;
import org.rstudio.studio.client.workbench.commands.Commands;
import org.rstudio.studio.client.workbench.ui.WorkbenchPane;
import org.rstudio.studio.client.workbench.views.viewer.events.ViewerNavigatedEvent;

public class ViewerPane extends WorkbenchPane implements ViewerPresenter.Display
{
   @Inject
   public ViewerPane(Commands commands, GlobalDisplay globalDisplay, EventBus events)
   {
      super("Viewer");
      commands_ = commands;
      globalDisplay_ = globalDisplay;
      events_ = events;
      ensureWidget();
   }
  
   @Override
   protected Toolbar createMainToolbar()
   {
      toolbar_ = new Toolbar();
     
      // add html widget buttons
      toolbar_.addLeftWidget(commands_.viewerBack().createToolbarButton());
      toolbar_.addLeftWidget(commands_.viewerForward().createToolbarButton());
      toolbar_.addLeftSeparator();
      toolbar_.addLeftWidget(commands_.viewerZoom().createToolbarButton());
     
      // export commands
      exportButtonSeparator_ = toolbar_.addLeftSeparator();
      ToolbarPopupMenu exportMenu = new ToolbarPopupMenu();
      exportMenu.addItem(commands_.viewerSaveAsImage().createMenuItem(false));
      exportMenu.addItem(commands_.viewerCopyToClipboard().createMenuItem(false));
      exportMenu.addSeparator();
      exportMenu.addItem(commands_.viewerSaveAsWebPage().createMenuItem(false));
      exportMenu.addSeparator();
      exportMenu.addItem(commands_.viewerPublishToRPubs().createMenuItem(false));
     
      exportButton_ = new ToolbarButton(
            "Export", StandardIcons.INSTANCE.export_menu(),
            exportMenu);
      toolbar_.addLeftWidget(exportButton_)
      exportButton_.setVisible(false);
      exportButtonSeparator_.setVisible(false);
     
      // add publish button
      publishButtonSeparator_ = toolbar_.addLeftSeparator();
      publishButton_ = commands_.publishHTML().createToolbarButton(false);
      toolbar_.addLeftWidget(publishButton_);
      publishButtonSeparator_.setVisible(false);
      publishButton_.setVisible(false);
    
      toolbar_.addLeftSeparator();
      toolbar_.addLeftWidget(commands_.viewerClear().createToolbarButton());
      toolbar_.addLeftSeparator();
      toolbar_.addLeftWidget(commands_.viewerClearAll().createToolbarButton());
     
      toolbar_.addRightWidget(commands_.viewerStop().createToolbarButton());
      toolbar_.addRightSeparator();
      toolbar_.addRightWidget(commands_.viewerPopout().createToolbarButton());
      toolbar_.addRightSeparator();
      toolbar_.addRightWidget(commands_.viewerRefresh().createToolbarButton());
      return toolbar_;
   }
  
   @Override
   protected Widget createMainWidget()
   {
      frame_ = new RStudioFrame() ;
      frame_.setSize("100%", "100%");
      navigate(ABOUT_BLANK, false);
      return new AutoGlassPanel(frame_);
   }
  
   @Override
   public void navigate(String url)
   {
      navigate(url, false);
      publishButton_.setVisible(false);
      publishButtonSeparator_.setVisible(false);
      rmdPreviewParams_ = null;
   }

   @Override
   public void previewRmd(RmdPreviewParams params)
   {
      navigate(params.getOutputUrl(), true);
      publishButton_.setVisible(!params.isShinyDocument());
      publishButtonSeparator_.setVisible(!params.isShinyDocument());
      if (!params.isShinyDocument())
         publishButton_.setText(params.getResult().getRpubsPublished() ?
               "Republish" : "Publish");
      rmdPreviewParams_ = params;
      toolbar_.invalidateSeparators();
   }
  
   @Override
   public void setExportEnabled(boolean exportEnabled)
   {
      exportButton_.setVisible(exportEnabled);
      exportButtonSeparator_.setVisible(exportEnabled);
      toolbar_.invalidateSeparators();
   }
  
   @Override
   public String getUrl()
   {
      return frame_.getUrl();
   }
  
   @Override
   public String getTitle()
   {
      return frame_.getTitle();
   }
  
   @Override
   public void popout()
   {
      if (rmdPreviewParams_ != null &&
          !rmdPreviewParams_.isShinyDocument())
      {
         globalDisplay_.showHtmlFile(rmdPreviewParams_.getOutputFile());
      }
      else if (unmodifiedUrl_ != null)
      {
         globalDisplay_.openWindow(unmodifiedUrl_);
      }
   }

   @Override
   public void refresh()
   {
      String url = frame_.getUrl();
      if (url != null)
         frame_.setUrl(url);
   }
  
   @Override
   public Size getViewerFrameSize()
   {
      return new Size(frame_.getOffsetWidth(), frame_.getOffsetHeight());
   }
  
   private void navigate(String url, boolean useRawURL)
   {
      // save the unmodified URL for pop-out
      unmodifiedUrl_ = url;
     
      // append the viewer_pane query parameter
      if ((unmodifiedUrl_ != null) &&
          !unmodifiedUrl_.equals(ABOUT_BLANK) &&
          !useRawURL)
      {
         String viewerUrl = URIUtils.addQueryParam(unmodifiedUrl_,
                                                   "viewer_pane",
                                                   "1");
         frame_.setUrl(viewerUrl);
      }
      else
      {
         frame_.setUrl(unmodifiedUrl_);
      }
     
      events_.fireEvent(new ViewerNavigatedEvent(url, frame_));
   }

   private RStudioFrame frame_;
   private String unmodifiedUrl_;
   private RmdPreviewParams rmdPreviewParams_;
   private final Commands commands_;
   private final GlobalDisplay globalDisplay_;
   private final EventBus events_;
  
   private Toolbar toolbar_;
  
   private ToolbarButton publishButton_;
   private Widget publishButtonSeparator_;
  
   private ToolbarButton exportButton_;
   private Widget exportButtonSeparator_;

   public static final String ABOUT_BLANK = "about:blank";
}
TOP

Related Classes of org.rstudio.studio.client.workbench.views.viewer.ViewerPane

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.