From a5fe68cb77665c5ae84c472c6983690fab883d1a Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Wed, 4 Oct 2017 20:36:24 +0300 Subject: [PATCH] PY-22324 Refactored PySdkListCellRenderer to inherit from ColoredListCellRenderer We want to use colors and additional captions for invalid SDKs, additional SDK paths, and so on. --- .../python/sdk/PySdkListCellRenderer.kt | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/python/src/com/jetbrains/python/sdk/PySdkListCellRenderer.kt b/python/src/com/jetbrains/python/sdk/PySdkListCellRenderer.kt index fda89779fdd0..72003538539a 100644 --- a/python/src/com/jetbrains/python/sdk/PySdkListCellRenderer.kt +++ b/python/src/com/jetbrains/python/sdk/PySdkListCellRenderer.kt @@ -20,30 +20,39 @@ import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.SdkModificator import com.intellij.openapi.projectRoots.SdkType import com.intellij.openapi.util.IconLoader +import com.intellij.ui.ColoredListCellRenderer import com.intellij.ui.LayeredIcon import com.intellij.ui.ListCellRendererWrapper import com.jetbrains.python.sdk.flavors.PythonSdkFlavor +import java.awt.Component import javax.swing.Icon import javax.swing.JList /** * @author vlan */ -open class PySdkListCellRenderer(private val sdkModifiers: Map?) : ListCellRendererWrapper() { - override fun customize(list: JList<*>, item: Any?, index: Int, selected: Boolean, hasFocus: Boolean) { - when (item) { +open class PySdkListCellRenderer(private val sdkModifiers: Map?) : ColoredListCellRenderer() { + override fun getListCellRendererComponent(list: JList?, value: Any?, index: Int, selected: Boolean, + hasFocus: Boolean): Component = + when (value) { + SEPARATOR -> ListCellRendererWrapper.createSeparator(null) + else -> super.getListCellRendererComponent(list, value, index, selected, hasFocus) + } + + override fun customizeCellRenderer(list: JList, value: Any?, index: Int, selected: Boolean, hasFocus: Boolean) { + when (value) { is Sdk -> { - val flavor = PythonSdkFlavor.getPlatformIndependentFlavor(item.homePath) - val icon = if (flavor != null) flavor.icon else (item.sdkType as SdkType).icon + val flavor = PythonSdkFlavor.getPlatformIndependentFlavor(value.homePath) + val icon = if (flavor != null) flavor.icon else (value.sdkType as SdkType).icon icon?.let { - setIcon(customizeIcon(item, it)) + setIcon(customizeIcon(value, it)) } - val name = sdkModifiers?.get(item)?.name ?: item.name - setText(customizeName(item, name)) - setToolTipText(item.homePath) + val name = sdkModifiers?.get(value)?.name ?: value.name + append(customizeName(value, name)) + setToolTipText(value.homePath) } - SEPARATOR -> setSeparator() - null -> setText("") + is String -> append(value) + null -> append("") } }