From d87b90a195cced81f64a9075ab1822bf54b6cb1b Mon Sep 17 00:00:00 2001 From: Aleksei Kniazev Date: Wed, 15 Nov 2023 13:02:08 +0000 Subject: [PATCH] [python] saving/restoring preferred interpreter in NPW (PY-60214) GitOrigin-RevId: 43cdc3315672c9d5332596ba1a701cdb9fd2c58b --- .../add/v2/PythonAddNewEnvironmentPanel.kt | 7 ++- .../jetbrains/python/sdk/add/v2/uiUtils.kt | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/sdk/add/v2/PythonAddNewEnvironmentPanel.kt b/python/src/com/jetbrains/python/sdk/add/v2/PythonAddNewEnvironmentPanel.kt index d6654b6288ce..9456331e4641 100644 --- a/python/src/com/jetbrains/python/sdk/add/v2/PythonAddNewEnvironmentPanel.kt +++ b/python/src/com/jetbrains/python/sdk/add/v2/PythonAddNewEnvironmentPanel.kt @@ -128,11 +128,13 @@ class PythonAddNewEnvironmentPanel(val projectPath: ObservableProperty) } custom.onShown() + presenter.navigator.restoreLastState() } } - fun getSdk(): Sdk? = - when (selectedMode.get()) { + fun getSdk(): Sdk? { + presenter.navigator.saveLastState() + return when (selectedMode.get()) { PROJECT_VENV -> { val venvPath = Path.of(projectPath.get(), ".venv") val venvPathOnTarget = presenter.getPathOnTarget(venvPath) @@ -148,6 +150,7 @@ class PythonAddNewEnvironmentPanel(val projectPath: ObservableProperty) } CUSTOM -> custom.getSdk() } + } fun createStatisticsInfo(): InterpreterStatisticsInfo = when (selectedMode.get()) { diff --git a/python/src/com/jetbrains/python/sdk/add/v2/uiUtils.kt b/python/src/com/jetbrains/python/sdk/add/v2/uiUtils.kt index d54a327a5dc7..b581603b5858 100644 --- a/python/src/com/jetbrains/python/sdk/add/v2/uiUtils.kt +++ b/python/src/com/jetbrains/python/sdk/add/v2/uiUtils.kt @@ -2,6 +2,7 @@ package com.jetbrains.python.sdk.add.v2 import com.intellij.icons.AllIcons +import com.intellij.ide.util.PropertiesComponent import com.intellij.openapi.fileChooser.FileChooser import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory import com.intellij.openapi.observable.properties.ObservableMutableProperty @@ -34,6 +35,8 @@ import com.jetbrains.python.PyBundle.message import com.jetbrains.python.sdk.PyDetectedSdk import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMethod.CREATE_NEW import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMethod.SELECT_EXISTING +import com.jetbrains.python.sdk.add.v2.PythonInterpreterSelectionMode.CUSTOM +import com.jetbrains.python.sdk.add.v2.PythonSupportedEnvironmentManagers.VIRTUALENV import com.jetbrains.python.sdk.flavors.conda.PyCondaEnv import com.jetbrains.python.sdk.flavors.conda.PyCondaEnvIdentity import kotlinx.coroutines.CoroutineScope @@ -78,6 +81,47 @@ class PythonNewEnvironmentDialogNavigator { } } } + + fun saveLastState() { + val properties = PropertiesComponent.getInstance() + + val mode = selectionMode.get() + properties.setValue(FAV_MODE, mode.toString()) + if (mode == CUSTOM) { + val method = selectionMethod.get() + val manager = if (method == CREATE_NEW) newEnvManager.get() else existingEnvManager.get() + properties.setValue(FAV_METHOD, method.toString()) + properties.setValue(FAV_MANAGER, manager.toString()) + } + else { + // restore defaults + properties.setValue(FAV_METHOD, CREATE_NEW.toString()) + properties.setValue(FAV_MANAGER, VIRTUALENV.toString()) + } + } + + + fun restoreLastState() { + val properties = PropertiesComponent.getInstance() + + val modeString = properties.getValue(FAV_MODE) ?: return + val mode = PythonInterpreterSelectionMode.valueOf(modeString) + selectionMode.set(mode) + + if (mode == CUSTOM) { + val method = PythonInterpreterSelectionMethod.valueOf(properties.getValue(FAV_METHOD) ?: return) + selectionMethod.set(method) + + val manager = PythonSupportedEnvironmentManagers.valueOf(properties.getValue(FAV_MANAGER) ?: return) + if (method == CREATE_NEW) newEnvManager.set(manager) else existingEnvManager.set(manager) + } + } + + companion object { + const val FAV_MODE = "python.new.interpreter.fav.mode" + const val FAV_METHOD = "python.new.interpreter.fav.method" + const val FAV_MANAGER = "python.new.interpreter.fav.manager" + } }