public static async Task ShowDialog(
            PythonProjectNode project,
            IInterpreterRegistryService service,
            string requirementsPath,
            bool browseForExisting = false
            )
        {
            using (var view = new AddVirtualEnvironmentView(project, service, project.ActiveInterpreter.Configuration.Id, requirementsPath)) {
                var wnd = new AddVirtualEnvironment(project.Site, view);

                if (browseForExisting)
                {
                    var path = project.Site.BrowseForDirectory(IntPtr.Zero, project.ProjectHome);
                    if (string.IsNullOrEmpty(path))
                    {
                        throw new OperationCanceledException();
                    }
                    view.VirtualEnvName             = path;
                    view.WillInstallRequirementsTxt = false;
                    await view.WaitForReady();

                    if (view.WillAddVirtualEnv)
                    {
                        await view.Create().HandleAllExceptions(project.Site, typeof(AddVirtualEnvironment));

                        return;
                    }

                    view.ShowBrowsePathError = true;
                    view.BrowseOrigPrefix    = VirtualEnv.GetOrigPrefixPath(path);
                }

                wnd.VirtualEnvPathTextBox.ScrollToEnd();
                wnd.VirtualEnvPathTextBox.SelectAll();
                wnd.VirtualEnvPathTextBox.Focus();

                wnd.ShowModal();
                var op = wnd._currentOperation;
                if (op != null)
                {
                    await op;
                }
            }
        }
        private void RefreshCanCreateVirtualEnv(string path)
        {
            if (!Dispatcher.CheckAccess())
            {
                Dispatcher.BeginInvoke((Action)(() => RefreshCanCreateVirtualEnv(path)));
                return;
            }

            if (Interpreters.Count == 0)
            {
                WillCreateVirtualEnv    = false;
                WillAddVirtualEnv       = false;
                CannotCreateVirtualEnv  = false;
                NoInterpretersInstalled = true;
                return;
            }

            if (!IsValidVirtualEnvPath(path) || BaseInterpreter == null)
            {
                WillCreateVirtualEnv    = false;
                WillAddVirtualEnv       = false;
                CannotCreateVirtualEnv  = true;
                NoInterpretersInstalled = false;
                return;
            }


            if (Directory.Exists(path) && Directory.EnumerateFileSystemEntries(path).Any())
            {
                WillCreateVirtualEnv = false;

                var options = VirtualEnv.FindInterpreterOptions(path, _interpreterService);
                if (options != null && File.Exists(options.InterpreterPath))
                {
                    var             baseInterp = _interpreterService.FindInterpreter(options.Id, options.LanguageVersion);
                    InterpreterView baseInterpView;
                    if (baseInterp != null &&
                        (baseInterpView = Interpreters.FirstOrDefault(iv => iv.Interpreter == baseInterp)) != null)
                    {
                        if (_lastUserSelectedBaseInterpreter == null)
                        {
                            _lastUserSelectedBaseInterpreter = BaseInterpreter;
                        }
                        BaseInterpreter   = baseInterpView;
                        WillAddVirtualEnv = true;
                    }
                    else
                    {
                        WillAddVirtualEnv = false;
                    }
                }
                else
                {
                    WillAddVirtualEnv = false;
                }
                CannotCreateVirtualEnv  = !WillAddVirtualEnv;
                NoInterpretersInstalled = false;
            }
            else
            {
                WillCreateVirtualEnv    = true;
                WillAddVirtualEnv       = false;
                CannotCreateVirtualEnv  = false;
                NoInterpretersInstalled = false;
                if (_lastUserSelectedBaseInterpreter != null)
                {
                    BaseInterpreter = _lastUserSelectedBaseInterpreter;
                    _lastUserSelectedBaseInterpreter = null;
                }
            }
        }
Exemple #3
0
        private void RefreshCanCreateVirtualEnv(string path)
        {
            if (!Dispatcher.CheckAccess())
            {
                Dispatcher.BeginInvoke((Action)(() => RefreshCanCreateVirtualEnv(path)));
                return;
            }

            if (Interpreters.Count == 0)
            {
                WillCreateVirtualEnv    = false;
                WillAddVirtualEnv       = false;
                CannotCreateVirtualEnv  = false;
                NoInterpretersInstalled = true;
                return;
            }

            if (!IsValidVirtualEnvPath(path) || BaseInterpreter == null)
            {
                WillCreateVirtualEnv    = false;
                WillAddVirtualEnv       = false;
                CannotCreateVirtualEnv  = true;
                NoInterpretersInstalled = false;
                return;
            }


            if (Directory.Exists(path) && Directory.EnumerateFileSystemEntries(path).Any())
            {
                WillCreateVirtualEnv = false;

                var config = VirtualEnv.FindInterpreterConfiguration(null, path, _interpreterService);
                if (config != null && File.Exists(config.InterpreterPath))
                {
                    var baseInterpView = Interpreters.FirstOrDefault(v => v.Id == config.Id);
                    if (baseInterpView != null)
                    {
                        if (_lastUserSelectedBaseInterpreter == null)
                        {
                            _lastUserSelectedBaseInterpreter = BaseInterpreter;
                        }
                        BaseInterpreter   = baseInterpView;
                        WillAddVirtualEnv = true;
                    }
                    else
                    {
                        WillAddVirtualEnv = false;
                    }
                }
                else
                {
                    WillAddVirtualEnv = false;
                }
                CannotCreateVirtualEnv  = !WillAddVirtualEnv;
                NoInterpretersInstalled = false;
            }
            else
            {
                WillCreateVirtualEnv    = true;
                WillAddVirtualEnv       = false;
                CannotCreateVirtualEnv  = false;
                NoInterpretersInstalled = false;
                if (_lastUserSelectedBaseInterpreter != null)
                {
                    BaseInterpreter = _lastUserSelectedBaseInterpreter;
                    _lastUserSelectedBaseInterpreter = null;
                }
            }
        }