/* * NewDirectoryPage.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.newproject; import org.rstudio.core.client.files.FileSystemItem; import org.rstudio.core.client.resources.ImageResource2x; import org.rstudio.core.client.widget.DirectoryChooserTextBox; import org.rstudio.core.client.widget.MessageDialog; import org.rstudio.studio.client.RStudioGinjector; import org.rstudio.studio.client.common.vcs.VCSConstants; import org.rstudio.studio.client.projects.model.NewPackageOptions; import org.rstudio.studio.client.projects.model.NewProjectInput; import org.rstudio.studio.client.projects.model.NewProjectResult; import org.rstudio.studio.client.projects.model.NewShinyAppOptions; import org.rstudio.studio.client.projects.model.ProjectTemplateOptions; import org.rstudio.studio.client.workbench.model.SessionInfo; import org.rstudio.studio.client.workbench.prefs.model.UIPrefs; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; public class NewDirectoryPage extends NewProjectWizardPage { public NewDirectoryPage() { this("New Project", "Create a new project in an empty directory", "Create New Project", new ImageResource2x(NewProjectResources.INSTANCE.newProjectDirectoryIcon2x()), new ImageResource2x(NewProjectResources.INSTANCE.newProjectDirectoryIconLarge2x())); } public NewDirectoryPage(String title, String subTitle, String pageCaption, ImageResource image, ImageResource largeImage) { super(title, subTitle, pageCaption, image, largeImage); } @Override protected void onAddWidgets() { NewProjectResources.Styles styles = NewProjectResources.INSTANCE.styles(); HorizontalPanel panel = new HorizontalPanel(); panel.addStyleName(styles.wizardMainColumn()); // create the dir name label dirNameLabel_ = new Label("Directory name:"); dirNameLabel_.addStyleName(styles.wizardTextEntryLabel()); // top panel widgets onAddTopPanelWidgets(panel); // dir name VerticalPanel namePanel = new VerticalPanel(); namePanel.addStyleName(styles.newProjectDirectoryName()); namePanel.add(dirNameLabel_); txtProjectName_ = new TextBox(); txtProjectName_.setWidth("100%"); txtProjectName_.getElement().setAttribute("spellcheck", "false"); namePanel.add(txtProjectName_); panel.add(namePanel); addWidget(panel); onAddBodyWidgets(); addSpacer(); // project dir newProjectParent_ = new DirectoryChooserTextBox( "Create project as subdirectory of:", txtProjectName_); addWidget(newProjectParent_); // if git is available then add git init UIPrefs uiPrefs = RStudioGinjector.INSTANCE.getUIPrefs(); SessionInfo sessionInfo = RStudioGinjector.INSTANCE.getSession().getSessionInfo(); HorizontalPanel optionsPanel = null; if (getOptionsSideBySide()) optionsPanel = new HorizontalPanel(); chkGitInit_ = new CheckBox("Create a git repository"); chkGitInit_.addStyleName(styles.wizardCheckbox()); if (sessionInfo.isVcsAvailable(VCSConstants.GIT_ID)) { chkGitInit_.setValue(uiPrefs.newProjGitInit().getValue()); chkGitInit_.getElement().getStyle().setMarginRight(7, Unit.PX); if (optionsPanel != null) { optionsPanel.add(chkGitInit_); } else { addSpacer(); addWidget(chkGitInit_); } } // Initialize project with packrat chkPackratInit_ = new CheckBox("Use packrat with this project"); chkPackratInit_.setValue(uiPrefs.newProjUsePackrat().getValue()); if (!sessionInfo.getPackratAvailable()) { chkPackratInit_.setValue(false); chkPackratInit_.setVisible(false); } if (optionsPanel != null) { optionsPanel.add(chkPackratInit_); } else { addSpacer(); addWidget(chkPackratInit_); } if (optionsPanel != null) { addSpacer(); addWidget(optionsPanel); } } protected boolean getOptionsSideBySide() { return false; } protected void onAddTopPanelWidgets(HorizontalPanel panel) { } protected void onAddBodyWidgets() { } protected NewPackageOptions getNewPackageOptions() { return null; } protected NewShinyAppOptions getNewShinyAppOptions() { return null; } protected ProjectTemplateOptions getProjectTemplateOptions() { return null; } @Override protected void initialize(NewProjectInput input) { super.initialize(input); newProjectParent_.setText(input.getDefaultNewProjectLocation().getPath()); if (!input.getContext().isPackratAvailable()) { chkPackratInit_.setValue(false); chkPackratInit_.setVisible(false); } } @Override protected boolean validate(NewProjectResult input) { if (input == null) { globalDisplay_.showMessage( MessageDialog.WARNING, "Error", "You must specify a name for the new project directory.", txtProjectName_); return false; } else { return true; } } @Override protected NewProjectResult collectInput() { String name = txtProjectName_.getText().trim(); String dir = newProjectParent_.getText(); if (name.length() > 0 && dir.length() > 0) { String projDir = FileSystemItem.createDir(dir).completePath(name); String projFile = projFileFromDir(projDir); String newDefaultLocation = null; if (!dir.equals(defaultNewProjectLocation_)) newDefaultLocation = dir; return new NewProjectResult(projFile, chkGitInit_.getValue(), chkPackratInit_.getValue(), newDefaultLocation, null, getNewPackageOptions(), getNewShinyAppOptions(), getProjectTemplateOptions()); } else { return null; } } @Override public void focus() { txtProjectName_.setFocus(true); } public String getProjectName() { return txtProjectName_.getText().trim(); } protected Label dirNameLabel_; protected TextBox txtProjectName_; protected CheckBox chkGitInit_; protected CheckBox chkPackratInit_; private DirectoryChooserTextBox newProjectParent_; }