1 /* 2 * OpenProjectDialog.java 3 * 4 * Copyright (C) 2021 by RStudio, PBC 5 * 6 * Unless you have received this program directly from RStudio pursuant 7 * to the terms of a commercial license agreement with RStudio, then 8 * this program is licensed to you under the terms of version 3 of the 9 * GNU Affero General Public License. This program is distributed WITHOUT 10 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, 11 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the 12 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. 13 * 14 */ 15 package org.rstudio.core.client.files.filedialog; 16 17 import com.google.gwt.aria.client.Roles; 18 19 import org.rstudio.core.client.Debug; 20 import org.rstudio.core.client.ElementIds; 21 import org.rstudio.core.client.files.FileSystemContext; 22 import org.rstudio.core.client.files.FileSystemItem; 23 import org.rstudio.core.client.widget.FormCheckBox; 24 import org.rstudio.core.client.widget.ProgressIndicator; 25 import org.rstudio.core.client.widget.ProgressOperationWithInput; 26 import org.rstudio.core.client.widget.ThemedButton; 27 import org.rstudio.studio.client.RStudioGinjector; 28 import org.rstudio.studio.client.projects.model.OpenProjectParams; 29 import org.rstudio.studio.client.projects.model.ProjectsServerOperations; 30 import org.rstudio.studio.client.server.ServerError; 31 import org.rstudio.studio.client.server.ServerRequestCallback; 32 33 import com.google.gwt.event.dom.client.ClickEvent; 34 import com.google.gwt.event.dom.client.ClickHandler; 35 import com.google.gwt.event.logical.shared.ValueChangeEvent; 36 import com.google.gwt.event.logical.shared.ValueChangeHandler; 37 import com.google.gwt.user.client.ui.CheckBox; 38 import com.google.inject.Inject; 39 40 public class OpenProjectDialog extends FileDialog 41 { OpenProjectDialog(FileSystemContext context, int defaultType, boolean newSessionOption, final ProgressOperationWithInput<OpenProjectParams> operation)42 public OpenProjectDialog(FileSystemContext context, 43 int defaultType, 44 boolean newSessionOption, 45 final ProgressOperationWithInput<OpenProjectParams> operation) 46 { 47 super("Open Project", null, Roles.getDialogRole(), "Open", false, false, false, context, 48 "R Projects (*.RProj)", 49 new ProgressOperationWithInput<FileSystemItem>() 50 { 51 @Override 52 public void execute(FileSystemItem input, 53 ProgressIndicator indicator) 54 { 55 // NOTE: we currently do not expose R version selection 56 // for the open project dialog since projects already 57 // have a pinned R version by default 58 operation.execute(new OpenProjectParams(input, 59 null, 60 inNewSession_), 61 indicator); 62 } 63 }); 64 65 RStudioGinjector.INSTANCE.injectMembers(this); 66 67 // Used to create a project in an existing directory which 68 // does not already have a .Rproj file. 69 ThemedButton createButton = new ThemedButton("Create", new ClickHandler() 70 { 71 @Override 72 public void onClick(ClickEvent event) 73 { 74 server_.createProjectFile( 75 browser_.getCurrentDirectory().getPath(), 76 new ServerRequestCallback<String>() 77 { 78 @Override 79 public void onResponseReceived(String response) 80 { 81 accept(FileSystemItem.createFile(response)); 82 } 83 84 @Override 85 public void onError(ServerError error) 86 { 87 Debug.logError(error); 88 accept(); 89 } 90 }); 91 } 92 }); 93 addButton(createButton, ElementIds.CREATE_BUTTON); 94 95 newSessionCheck_ = new FormCheckBox("Open in new session", ElementIds.OP_NEW_SESSION); 96 newSessionCheck_.addValueChangeHandler(new ValueChangeHandler<Boolean>() 97 { 98 @Override 99 public void onValueChange(ValueChangeEvent<Boolean> event) 100 { 101 inNewSession_ = event.getValue(); 102 } 103 }); 104 if (newSessionOption) 105 addLeftWidget(newSessionCheck_); 106 } 107 108 @Inject initialize(ProjectsServerOperations server)109 private void initialize(ProjectsServerOperations server) 110 { 111 server_ = server; 112 } 113 114 private CheckBox newSessionCheck_; 115 private static boolean inNewSession_ = false; 116 117 // Injected ---- 118 private ProjectsServerOperations server_; 119 } 120