Package org.rstudio.studio.client.projects.ui.prefs.buildtools

Source Code of org.rstudio.studio.client.projects.ui.prefs.buildtools.BuildToolsPanel

/*
* BuildToolsPanel.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.projects.ui.prefs.buildtools;

import org.rstudio.core.client.files.FileSystemItem;
import org.rstudio.core.client.widget.ProgressIndicator;
import org.rstudio.core.client.widget.ProgressOperationWithInput;
import org.rstudio.core.client.widget.TextBoxWithButton;
import org.rstudio.studio.client.RStudioGinjector;
import org.rstudio.studio.client.projects.model.RProjectOptions;
import org.rstudio.studio.client.projects.ui.prefs.ProjectPreferencesDialogResources;

import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public abstract class BuildToolsPanel extends VerticalPanel
{
   public BuildToolsPanel()
   {
   }
  
   abstract void load(RProjectOptions options);
   abstract void save(RProjectOptions options);
  
   protected void provideDefaults()
   {
   }
  
   boolean validate()
   {
      return true;
   }
  
   protected abstract class PathSelector extends TextBoxWithButton
   {
      public PathSelector(String label,
                          final String emptyLabel)
      {
         super(label, emptyLabel, "Browse...", null);
      }
     
     
      protected String getProjectPath(FileSystemItem projDir,
                                      FileSystemItem path)
      {
         String proj = projDir.getPath();
         if (path.getPath().startsWith(proj + "/"))
         {
            return path.getPath().substring(proj.length() + 1);
         }
         else
         {
           return path.getPath();
         }
      }
   }
  
   protected class DirectorySelector extends PathSelector
   {
      public DirectorySelector(String label)
      {
         super(label, "(Project Root)");
        
         // allow user to clear out a value
         setReadOnly(false);
        
         getTextBox().addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent event)
            {
               if (getTextBox().getText().length() == 0)
                  getTextBox().setText("(Project Root)");
            }
           
         })
        
         addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event)
            {
               final FileSystemItem projDir = RStudioGinjector.INSTANCE.
                     getSession().getSessionInfo().getActiveProjectDir();
          
               RStudioGinjector.INSTANCE.getFileDialogs().chooseFolder(
                 "Choose Directory",
                 RStudioGinjector.INSTANCE.getRemoteFileSystemContext(),
                 projDir,
                 new ProgressOperationWithInput<FileSystemItem>()
                 {
                    public void execute(FileSystemItem input,
                                        ProgressIndicator indicator)
                    {
                       if (input == null)
                          return;

                       indicator.onCompleted();
                      
                       setText(getProjectPath(projDir, input));
                    }
                 });
            }
         });
      }
     
      // allow user to set the value to empty string
      @Override
      public String getText()
      {
         if (getTextBox().getText().trim().isEmpty())
            return "";
         else
            return super.getText();
      }
   }
  
   protected class FileSelector extends PathSelector
   {
      public FileSelector(String label)
      {
         super(label, "(None)");
        
         addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event)
            {
               final FileSystemItem projDir = RStudioGinjector.INSTANCE.
                     getSession().getSessionInfo().getActiveProjectDir();
          
               RStudioGinjector.INSTANCE.getFileDialogs().openFile(
                 "Choose File",
                 RStudioGinjector.INSTANCE.getRemoteFileSystemContext(),
                 projDir,
                 new ProgressOperationWithInput<FileSystemItem>()
                 {
                    public void execute(FileSystemItem input,
                                        ProgressIndicator indicator)
                    {
                       if (input == null)
                          return;

                       indicator.onCompleted();
                      
                       setText(getProjectPath(projDir, input));
                    }
                 });
            }
         });
      }
     
     
   }
  
   protected class AdditionalArguments extends Composite
   {
      AdditionalArguments(String label)
      {
         this(new Label(label));
      }
     
      AdditionalArguments(SafeHtml label)
      {
         this(new HTML(label));
      }
     
      AdditionalArguments(Widget captionWidget)
      {
         VerticalPanel panel = new VerticalPanel();
         panel.addStyleName(RES.styles().buildToolsAdditionalArguments());
        
    
         panel.add(captionWidget);
        
         textBox_ = new TextBox();
         textBox_.getElement().setAttribute("spellcheck", "false");
         panel.add(textBox_);
  
         initWidget(panel);
      }
     
      public void setText(String text)
      {
         textBox_.setText(text);
      }
     
      public String getText()
      {
         return textBox_.getText().trim();
      }
     
      private final TextBox textBox_;
   }
  
   protected CheckBox checkBox(String caption)
   {
      CheckBox chk = new CheckBox(caption);
      chk.addStyleName(RES.styles().buildToolsCheckBox());
      return chk;
   }
  
   protected static ProjectPreferencesDialogResources RES =
         ProjectPreferencesDialogResources.INSTANCE;
}
TOP

Related Classes of org.rstudio.studio.client.projects.ui.prefs.buildtools.BuildToolsPanel

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.