From eab997aaed2817cd0b4de319cba267d74dfd2296 Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Fri, 4 Apr 2025 17:44:14 +0100 Subject: [PATCH] fix: UI issues when image in context --- .../chat/ChatToolWindowTabPanel.java | 4 -- .../toolwindow/chat/ui/ImageAccordion.java | 5 ++- .../chat/ui/SelectedFilesAccordion.java | 4 +- .../codegpt/toolwindow/ui/UserMessagePanel.kt | 43 ++++++++----------- 4 files changed, 24 insertions(+), 32 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java index 1a68b0ce..93950dae 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java @@ -455,10 +455,6 @@ public class ChatToolWindowTabPanel implements Disposable { .build(), userMessagePanel)); userMessagePanel.addDeleteAction(() -> removeMessage(message.getId(), conversation)); - var imageFilePath = message.getImageFilePath(); - if (imageFilePath != null && !imageFilePath.isEmpty()) { - userMessagePanel.displayImage(imageFilePath); - } return userMessagePanel; } diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ImageAccordion.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ImageAccordion.java index 250be68e..96f4d627 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ImageAccordion.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ImageAccordion.java @@ -65,8 +65,9 @@ public class ImageAccordion extends JPanel { accordionToggle.setSelectedIcon(General.ArrowUp); accordionToggle.setBorder(null); accordionToggle.setSelected(true); - accordionToggle.setHorizontalAlignment(SwingConstants.LEADING); - accordionToggle.setHorizontalTextPosition(SwingConstants.LEADING); + accordionToggle.setHorizontalAlignment(SwingConstants.LEFT); + accordionToggle.setHorizontalTextPosition(SwingConstants.RIGHT); + accordionToggle.setIconTextGap(4); accordionToggle.addItemListener(e -> contentPane.setVisible(e.getStateChange() == ItemEvent.SELECTED)); return accordionToggle; diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java index fa394996..8dfd9473 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/SelectedFilesAccordion.java @@ -41,11 +41,11 @@ public class SelectedFilesAccordion extends JPanel { private JToggleButton createToggleButton(JPanel contentPane, int fileCount) { var accordionToggle = new JToggleButton( - format("Referenced files (+%d)", fileCount), General.ArrowUp); + format("Referenced files (+%d)", fileCount), General.ArrowDown); accordionToggle.setFocusPainted(false); accordionToggle.setContentAreaFilled(false); accordionToggle.setBackground(getBackground()); - accordionToggle.setSelectedIcon(General.ArrowDown); + accordionToggle.setSelectedIcon(General.ArrowUp); accordionToggle.setBorder(null); accordionToggle.setSelected(true); accordionToggle.setHorizontalAlignment(SwingConstants.LEFT); diff --git a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt index 4daa73a9..0f437189 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/toolwindow/ui/UserMessagePanel.kt @@ -47,7 +47,6 @@ class UserMessagePanel( background = ColorUtil.brighter(getBackground(), 2) setupAdditionalContext() - setupImageIfPresent() setupResponseBody() } @@ -117,21 +116,6 @@ class UserMessagePanel( ) } - fun displayImage(imageFilePath: String) { - try { - val path = Paths.get(imageFilePath) - body.addToTop(ImageAccordion(path.fileName.toString(), Files.readAllBytes(path))) - } catch (e: IOException) { - body.addToTop( - JBLabel( - "Unable to load image $imageFilePath", - AllIcons.General.Error, - SwingConstants.LEFT - ) - ) - } - } - private fun setupAdditionalContext() { val additionalContextPanel = getAdditionalContextPanel(project, message) if (additionalContextPanel != null) { @@ -139,14 +123,6 @@ class UserMessagePanel( } } - private fun setupImageIfPresent() { - message.imageFilePath?.let { imageFilePath -> - if (imageFilePath.isNotEmpty()) { - displayImage(imageFilePath) - } - } - } - private fun setupResponseBody() { addContent( ChatMessageResponseBody(project, true, false, false, parentDisposable) @@ -217,6 +193,25 @@ class UserMessagePanel( } } } + + message.imageFilePath?.let { imageFilePath -> + if (imageFilePath.isNotEmpty()) { + try { + val path = Paths.get(imageFilePath) + additionalContextPanel.add( + ImageAccordion(path.fileName.toString(), Files.readAllBytes(path)) + ) + } catch (e: IOException) { + additionalContextPanel.add( + JBLabel( + "Unable to load image $imageFilePath", + AllIcons.General.Error, + SwingConstants.LEFT + ) + ) + } + } + } } }