Skip to content

Commit 5d460fe

Browse files
committed
feat(devti): add result panel for displaying responses in McpPreviewEditor #371
1 parent 5e0243f commit 5d460fe

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

core/src/main/kotlin/cc/unitmesh/devti/mcp/editor/McpPreviewEditor.kt

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ import java.beans.PropertyChangeListener
4444
import javax.swing.*
4545
import javax.swing.border.CompoundBorder
4646

47-
/**
48-
* Display shire file render prompt and have a sample file as view
49-
*/
5047
open class McpPreviewEditor(
5148
val project: Project,
5249
val virtualFile: VirtualFile,
@@ -64,6 +61,8 @@ open class McpPreviewEditor(
6461
private lateinit var chatInput: JBTextField
6562
private lateinit var sendButton: ActionButton
6663
private lateinit var configButton: JButton
64+
private lateinit var resultLabel: JLabel
65+
private lateinit var resultPanel: JPanel
6766
private val config = McpLlmConfig()
6867
private val borderColor = JBColor(0xE5E7EB, 0x3C3F41) // Equivalent to Tailwind gray-200
6968
private val textGray = JBColor(0x6B7280, 0x9DA0A8) // Equivalent to Tailwind gray-500
@@ -129,6 +128,27 @@ open class McpPreviewEditor(
129128
background = UIUtil.getPanelBackground()
130129
}
131130

131+
resultPanel = JPanel(BorderLayout()).apply {
132+
background = UIUtil.getPanelBackground()
133+
border = CompoundBorder(
134+
BorderFactory.createMatteBorder(1, 0, 1, 0, borderColor),
135+
JBUI.Borders.empty(16)
136+
)
137+
isVisible = false
138+
}
139+
140+
resultLabel = JLabel().apply {
141+
font = JBUI.Fonts.label(14.0f)
142+
border = JBUI.Borders.empty(10)
143+
}
144+
145+
val resultScrollPane = JBScrollPane(resultLabel).apply {
146+
border = BorderFactory.createEmptyBorder()
147+
background = UIUtil.getPanelBackground()
148+
}
149+
150+
resultPanel.add(resultScrollPane, BorderLayout.CENTER)
151+
132152
toolsWrapper.add(toolsScrollPane, BorderLayout.CENTER)
133153

134154
// Redesigned bottom panel using BorderLayoutPanel for better layout management
@@ -225,6 +245,7 @@ open class McpPreviewEditor(
225245

226246
mainPanel.add(headerPanel, BorderLayout.NORTH)
227247
mainPanel.add(toolsWrapper, BorderLayout.CENTER)
248+
mainPanel.add(resultPanel, BorderLayout.CENTER)
228249
mainPanel.add(bottomPanel, BorderLayout.SOUTH)
229250
}
230251

@@ -267,12 +288,20 @@ open class McpPreviewEditor(
267288
val message = chatInput.text.trim()
268289
val result = StringBuilder()
269290
val stream: Flow<String> = llmProvider.stream(message, systemPrompt = config.systemPrompt)
270-
/// create a result panel to save stream text
291+
292+
resultLabel.text = "Loading response..."
293+
resultPanel.isVisible = true
294+
mainPanel.revalidate()
295+
mainPanel.repaint()
271296

272297
AutoDevCoroutineScope.scope(project).launch {
273298
stream.cancellable().collect { chunk ->
274299
result.append(chunk)
275-
/// update result panel in here ?
300+
SwingUtilities.invokeLater {
301+
resultLabel.text = result.toString()
302+
mainPanel.revalidate()
303+
mainPanel.repaint()
304+
}
276305
}
277306
}
278307
}

0 commit comments

Comments
 (0)