From 4f0d67aed4c0e9b958860cbb8dfa96fdf02732d7 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Tue, 17 Oct 2017 20:22:07 +0300 Subject: [PATCH] PY-26376 Persist last selected base virtualenv SDK --- python/src/com/jetbrains/python/sdk/PySdkSettings.kt | 9 +++++++++ .../python/sdk/add/PyAddNewVirtualEnvPanel.kt | 12 ++++++++++-- .../python/sdk/add/PySdkPathChoosingComboBox.kt | 9 +++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/python/src/com/jetbrains/python/sdk/PySdkSettings.kt b/python/src/com/jetbrains/python/sdk/PySdkSettings.kt index 24a1c23bbe3a..5c1d0faa9146 100644 --- a/python/src/com/jetbrains/python/sdk/PySdkSettings.kt +++ b/python/src/com/jetbrains/python/sdk/PySdkSettings.kt @@ -30,12 +30,19 @@ class PySdkSettings : PersistentStateComponent { set(value) { state.USE_NEW_ENVIRONMENT_FOR_NEW_PROJECT = value } + var preferredEnvironmentType: String? get() = state.PREFERRED_ENVIRONMENT_TYPE set(value) { state.PREFERRED_ENVIRONMENT_TYPE = value } + var preferredVirtualEnvBaseSdk: String? + get() = state.PREFERRED_VIRTUALENV_BASE_SDK + set(value) { + state.PREFERRED_VIRTUALENV_BASE_SDK = value + } + fun setPreferredVirtualEnvBasePath(value: @SystemIndependent String, projectPath: @SystemIndependent String) { val pathMap = ReplacePathToMacroMap().apply { addMacroReplacement(projectPath, PathMacroUtil.PROJECT_DIR_MACRO_NAME) @@ -79,6 +86,8 @@ class PySdkSettings : PersistentStateComponent { var PREFERRED_ENVIRONMENT_TYPE: String? = null @JvmField var PREFERRED_VIRTUALENV_BASE_PATH: String? = null + @JvmField + var PREFERRED_VIRTUALENV_BASE_SDK: String? = null } private val defaultVirtualEnvRoot: @SystemIndependent String diff --git a/python/src/com/jetbrains/python/sdk/add/PyAddNewVirtualEnvPanel.kt b/python/src/com/jetbrains/python/sdk/add/PyAddNewVirtualEnvPanel.kt index 30343413f664..959f9ff40c4a 100644 --- a/python/src/com/jetbrains/python/sdk/add/PyAddNewVirtualEnvPanel.kt +++ b/python/src/com/jetbrains/python/sdk/add/PyAddNewVirtualEnvPanel.kt @@ -66,7 +66,12 @@ class PyAddNewVirtualEnvPanel(private val project: Project?, override val panelName = "New environment" override val icon: Icon = PythonIcons.Python.Virtualenv - private val baseSdkField = PySdkPathChoosingComboBox(findBaseSdks(existingSdks), null) + private val baseSdkField = PySdkPathChoosingComboBox(findBaseSdks(existingSdks), null).apply { + val preferredSdkPath = PySdkSettings.instance.preferredVirtualEnvBaseSdk + items.find { it.homePath == preferredSdkPath }?.let { + selectedSdk = it + } + } private val pathField = TextFieldWithBrowseButton().apply { val defaultBasePath = FileUtil.toSystemDependentName(PySdkSettings.instance.getPreferredVirtualEnvBasePath(projectBasePath)) val parentPath = PathUtil.getParentPath(defaultBasePath) @@ -111,7 +116,10 @@ class PyAddNewVirtualEnvPanel(private val project: Project?, sdk.associateWithProject(project, newProjectPath != null) } excludeDirectoryFromProject(root, project) - PySdkSettings.instance.setPreferredVirtualEnvBasePath(FileUtil.toSystemIndependentName(pathField.text), projectBasePath) + with(PySdkSettings.instance) { + setPreferredVirtualEnvBasePath(FileUtil.toSystemIndependentName(pathField.text), projectBasePath) + preferredVirtualEnvBaseSdk = baseSdkField.selectedSdk?.homePath + } return sdk } diff --git a/python/src/com/jetbrains/python/sdk/add/PySdkPathChoosingComboBox.kt b/python/src/com/jetbrains/python/sdk/add/PySdkPathChoosingComboBox.kt index 7382264e9acf..87a06a270100 100644 --- a/python/src/com/jetbrains/python/sdk/add/PySdkPathChoosingComboBox.kt +++ b/python/src/com/jetbrains/python/sdk/add/PySdkPathChoosingComboBox.kt @@ -53,9 +53,14 @@ class PySdkPathChoosingComboBox(sdks: List, suggestedFile: VirtualFile?) : } } - val selectedSdk: Sdk? + var selectedSdk: Sdk? get() = childComponent.selectedItem as? Sdk? + set(value) { + if (value in items) { + childComponent.selectedItem = value + } + } - private val items: List + val items: List get() = (0 until childComponent.itemCount).map { childComponent.getItemAt(it) } } \ No newline at end of file