From b6eb98db91d42fd8d80fe1a80e2eb6cf93f1b131 Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Sat, 27 Jul 2024 15:27:13 +0300 Subject: [PATCH] fix: UI perf issues --- .../ui/textarea/SuggestionListCellRenderer.kt | 31 +++++++++++++++---- .../ui/textarea/SuggestionsPopupManager.kt | 28 ++++++++++------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionListCellRenderer.kt b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionListCellRenderer.kt index d8c9638a..903c4834 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionListCellRenderer.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionListCellRenderer.kt @@ -5,10 +5,12 @@ import com.intellij.openapi.components.service import com.intellij.openapi.fileTypes.FileTypeManager import com.intellij.ui.ColorUtil import com.intellij.ui.JBColor +import com.intellij.ui.components.JBLabel import com.intellij.ui.dsl.builder.AlignX import com.intellij.ui.dsl.builder.panel import com.intellij.util.ui.JBUI import ee.carlrobert.codegpt.settings.persona.PersonaSettings +import java.awt.BorderLayout import java.awt.Component import java.awt.Dimension import javax.swing.* @@ -85,12 +87,29 @@ class SuggestionListCellRenderer( } private fun renderPersonaItem(component: JLabel, item: SuggestionItem.PersonaItem): JPanel { - return createDefaultPanel( - component, - AllIcons.General.User, - item.personaDetails.name, - item.personaDetails.instructions, - ) + component.apply { + icon = AllIcons.General.User + iconTextGap = 4 + val searchText = getSearchText(textPane.text) + text = if (searchText != null) { + generateHighlightedHtml(item.personaDetails.name, searchText) + } else { + item.personaDetails.name + } + } + + return JPanel(BorderLayout()).apply { + add(component, BorderLayout.LINE_START) + add( + JBLabel(item.personaDetails.instructions) + .apply { + font = JBUI.Fonts.smallFont() + foreground = JBColor.gray + border = JBUI.Borders.emptyLeft(22) + }, + BorderLayout.SOUTH + ) + } } private fun getSearchText(text: String): String? { diff --git a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionsPopupManager.kt b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionsPopupManager.kt index c4e17c48..9de97c53 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionsPopupManager.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionsPopupManager.kt @@ -19,18 +19,14 @@ import ee.carlrobert.codegpt.CodeGPTBundle import ee.carlrobert.codegpt.settings.persona.PersonaDetails import ee.carlrobert.codegpt.settings.persona.PersonaSettings import ee.carlrobert.codegpt.settings.persona.PersonasConfigurable +import ee.carlrobert.codegpt.util.showAbove import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext -import ee.carlrobert.codegpt.util.showAbove -import java.awt.Dimension -import java.awt.Point +import java.awt.* import java.io.File import java.nio.file.Paths -import javax.swing.DefaultListModel -import javax.swing.Icon -import javax.swing.JComponent -import javax.swing.ScrollPaneConstants +import javax.swing.* import javax.swing.event.ListDataEvent import javax.swing.event.ListDataListener @@ -233,11 +229,19 @@ class SuggestionsPopupManager( val popupPanel = panel { row { cell(scrollPane) } row { - cell( - JBLabel(CodeGPTBundle.get("shared.escToCancel")) - .withFont(JBUI.Fonts.smallFont()) - .withBorder(JBUI.Borders.empty(0, 8)) - ) + cell(JPanel(GridBagLayout()).apply { + val gbc = GridBagConstraints() + gbc.anchor = GridBagConstraints.WEST + gbc.insets = Insets(0, 8, 0, 8) + gbc.weightx = 1.0 + gbc.fill = GridBagConstraints.HORIZONTAL + add( + JBLabel(CodeGPTBundle.get("shared.escToCancel")) + .withFont(JBUI.Fonts.smallFont()) + .withBorder(JBUI.Borders.empty()), gbc + ) + preferredSize = Dimension(480, 16) + }) } } return service()