PY-26376 Persist last selected base virtualenv SDK

This commit is contained in:
Andrey Vlasovskikh
2017-10-17 20:23:01 +03:00
parent 2eb95fc64f
commit 4f0d67aed4
3 changed files with 26 additions and 4 deletions
@@ -30,12 +30,19 @@ class PySdkSettings : PersistentStateComponent<PySdkSettings.State> {
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<PySdkSettings.State> {
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
@@ -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
}
@@ -53,9 +53,14 @@ class PySdkPathChoosingComboBox(sdks: List<Sdk>, 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<Sdk>
val items: List<Sdk>
get() = (0 until childComponent.itemCount).map { childComponent.getItemAt(it) }
}