Package org.rstudio.studio.client.workbench.ui

Source Code of org.rstudio.studio.client.workbench.ui.OptionsLoader$SweaveProjectOptionsNotifier

/*
* OptionsLoader.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.workbench.ui;

import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.rstudio.core.client.AsyncShim;
import org.rstudio.core.client.widget.MessageDialog;
import org.rstudio.core.client.widget.Operation;
import org.rstudio.core.client.widget.ProgressIndicator;
import org.rstudio.studio.client.application.Desktop;
import org.rstudio.studio.client.common.GlobalDisplay;
import org.rstudio.studio.client.common.SimpleRequestCallback;
import org.rstudio.studio.client.server.ServerError;
import org.rstudio.studio.client.workbench.commands.Commands;
import org.rstudio.studio.client.workbench.model.WorkbenchServerOperations;
import org.rstudio.studio.client.workbench.prefs.model.Prefs.PrefValue;
import org.rstudio.studio.client.workbench.prefs.model.RPrefs;
import org.rstudio.studio.client.workbench.prefs.model.UIPrefs;
import org.rstudio.studio.client.workbench.prefs.views.PreferencesDialog;

public class OptionsLoader
{
   public abstract static class Shim extends AsyncShim<OptionsLoader>
   {
      public abstract void showOptions();
      public abstract void showVersionControlOptions();
   }


   @Inject
   OptionsLoader(GlobalDisplay globalDisplay,
                 UIPrefs uiPrefs,
                 Commands commands,
                 WorkbenchServerOperations server,
                 Provider<PreferencesDialog> pPrefDialog)
   {
      globalDisplay_ = globalDisplay;
      uiPrefs_ = uiPrefs;
      commands_ = commands;
      server_ = server;
      pPrefDialog_ = pPrefDialog;
   }

   public void showOptions()
   {
      showOptions(false);
   }
  
   public void showVersionControlOptions()
   {
      showOptions(true);
   }
  
   private void showOptions(final boolean activateSourceControl)
   {
      final ProgressIndicator indicator = globalDisplay_.getProgressIndicator(
                                                      "Error Reading Options");
      indicator.onProgress("Reading options...");

      server_.getRPrefs(
         new SimpleRequestCallback<RPrefs>() {

            @Override
            public void onResponseReceived(RPrefs rPrefs)
            {
               indicator.onCompleted();
               PreferencesDialog prefDialog = pPrefDialog_.get();
               prefDialog.initialize(rPrefs);
               if (activateSourceControl)
                  prefDialog.activateSourceControl();
               prefDialog.showModal();
              
               // if the user changes global sweave or latex options notify
               // them if this results in the current project being out
               // of sync with the global settings
               new SweaveProjectOptionsNotifier(prefDialog);
              
               // activate main window if we are in desktop mode (because on
               // the mac you can actually show prefs from a satellite window)
               if (Desktop.isDesktop())
                  Desktop.getFrame().bringMainFrameToFront();
            }

            @Override
            public void onError(ServerError error)
            {
               indicator.onError(error.getUserMessage());
            }          
         });       
   }

  
   private class SweaveProjectOptionsNotifier
   {
      public SweaveProjectOptionsNotifier(PreferencesDialog prefsDialog)
      {
         previousRnwWeaveMethod_ =
                     uiPrefs_.defaultSweaveEngine().getGlobalValue();
         previousLatexProgram_ =
                     uiPrefs_.defaultLatexProgram().getGlobalValue();
        
         prefsDialog.addCloseHandler(new CloseHandler<PopupPanel>() {

            @Override
            public void onClose(CloseEvent<PopupPanel> event)
            {
               boolean notified = notifyIfNecessary(
                                    "weaving Rnw files",
                                    previousRnwWeaveMethod_,
                                    uiPrefs_.defaultSweaveEngine());
              
               if (!notified)
               {
                  notifyIfNecessary("LaTeX typesetting",
                                    previousLatexProgram_,
                                    uiPrefs_.defaultLatexProgram());
               }
            }
           
         });
      }
     
      private boolean notifyIfNecessary(String valueName,
                                        String previousValue,
                                        PrefValue<String> pref)
      {
         if (!previousValue.equals(pref.getGlobalValue()) &&
             !pref.getValue().equals(pref.getGlobalValue()))
         {
            globalDisplay_.showYesNoMessage(
                  MessageDialog.WARNING,
                  "Project Option Unchanged",
                  "You changed the global option for " + valueName  + " to " +
                  pref.getGlobalValue() + ", however the current project is " +
                  "still configured to use " + pref.getValue() + ".\n\n" +
                  "Do you want to edit the options for the current " +
                  "project as well?",
                  new Operation() {
                     @Override
                     public void execute()
                     {
                        commands_.projectSweaveOptions().execute();
                     }
                  },
                  true);
           
            return true;
         }
         else
         {
            return false;
         }
      }
     
      private final String previousRnwWeaveMethod_;
      private final String previousLatexProgram_;
   }
  
   private final GlobalDisplay globalDisplay_;
   private final WorkbenchServerOperations server_;
   private final Commands commands_;
   private final UIPrefs uiPrefs_;
   private final Provider<PreferencesDialog> pPrefDialog_;
}
TOP

Related Classes of org.rstudio.studio.client.workbench.ui.OptionsLoader$SweaveProjectOptionsNotifier

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.