@@ -21,9 +21,11 @@ import com.intellij.openapi.project.Project
21
21
import com.intellij.openapi.ui.DialogPanel
22
22
import com.intellij.ui.components.JBPanel
23
23
import com.intellij.ui.components.panels.VerticalLayout
24
+ import com.intellij.ui.components.panels.Wrapper
24
25
import com.intellij.ui.dsl.builder.panel
25
26
import com.intellij.util.ui.JBFont
26
27
import com.intellij.util.ui.JBUI
28
+ import com.intellij.util.ui.UIUtil
27
29
import java.awt.BorderLayout
28
30
import java.awt.Toolkit
29
31
import java.awt.datatransfer.StringSelection
@@ -50,30 +52,20 @@ class MessageView(val project: Project, val message: String, val role: ChatRole,
50
52
isDoubleBuffered = true
51
53
isOpaque = true
52
54
53
- val authorLabel = JLabel ()
54
- authorLabel.setFont(JBFont .h4())
55
- authorLabel.setText(
56
- when (role) {
57
- ChatRole .System -> " System"
58
- ChatRole .Assistant -> " Assistant"
59
- ChatRole .User -> " User"
60
- }
61
- )
55
+ layout = BorderLayout (0 , 0 )
62
56
63
- layout = BorderLayout (JBUI .scale( 4 ), 0 )
57
+ val centerPanel = JPanel ( BorderLayout () )
64
58
65
- val centerPanel = JPanel ( VerticalLayout ( JBUI .scale( 4 )) )
66
- centerPanel.add(authorLabel )
59
+ val toolbarPanel = createToolbar( )
60
+ centerPanel.add(toolbarPanel, BorderLayout . NORTH )
67
61
68
- val toolbar = createViewActionGroup().component
69
62
runInEdt {
70
- centerPanel.add(toolbar)
71
63
if (role == ChatRole .User ) {
72
64
myList.add(createSingleTextView(project, message))
73
65
}
74
66
}
75
67
76
- centerPanel.add(myList)
68
+ centerPanel.add(myList, BorderLayout . CENTER )
77
69
add(centerPanel, BorderLayout .CENTER )
78
70
79
71
ApplicationManager .getApplication().invokeLater {
@@ -82,6 +74,44 @@ class MessageView(val project: Project, val message: String, val role: ChatRole,
82
74
}
83
75
}
84
76
77
+ private fun createToolbar (): JPanel {
78
+ val authorLabel = JLabel ().apply {
79
+ font = JBFont .h4()
80
+ text = when (role) {
81
+ ChatRole .System -> " System"
82
+ ChatRole .Assistant -> " Assistant"
83
+ ChatRole .User -> " User"
84
+ }
85
+ border = JBUI .Borders .empty(0 , 10 )
86
+ }
87
+
88
+ val actionGroup = DefaultActionGroup (createToolbarActions())
89
+ val toolbar = ActionManager .getInstance()
90
+ .createActionToolbar(" MessageViewToolbar" , actionGroup, true ).apply {
91
+ this .targetComponent = this @MessageView
92
+ }
93
+
94
+ val toolbarPanel = JPanel (BorderLayout ()).apply {
95
+ add(authorLabel, BorderLayout .WEST )
96
+ add(toolbar.component, BorderLayout .EAST )
97
+ }
98
+
99
+ toolbarPanel.border = JBUI .Borders .customLine(UIUtil .getBoundsColor(), 0 , 0 , 1 , 0 )
100
+ return toolbarPanel
101
+ }
102
+
103
+ private fun createToolbarActions (): List <AnAction > {
104
+ val copyAction = object : AnAction (" Copy" , " Copy text" , AllIcons .Actions .Copy ) {
105
+ override fun actionPerformed (e : AnActionEvent ) {
106
+ val clipboard = Toolkit .getDefaultToolkit().systemClipboard
107
+ val selection = StringSelection (displayText)
108
+ clipboard.setContents(selection, null )
109
+ }
110
+ }
111
+
112
+ return listOf (copyAction)
113
+ }
114
+
85
115
fun onFinish (text : String ) {
86
116
displayText = text
87
117
runInEdt {
@@ -148,24 +178,6 @@ class MessageView(val project: Project, val message: String, val role: ChatRole,
148
178
}
149
179
}
150
180
151
-
152
- fun createViewActionGroup (): ActionToolbar {
153
- val copyAction = object : AnAction (" Copy" , " Copy text" , AllIcons .Actions .Copy ) {
154
- override fun actionPerformed (e : AnActionEvent ) {
155
- val clipboard = Toolkit .getDefaultToolkit().systemClipboard
156
- val selection = StringSelection (displayText)
157
- clipboard.setContents(selection, null )
158
- }
159
- }
160
-
161
- val actionGroup = DefaultActionGroup (listOf (copyAction))
162
- val rightToolbar = ActionManager .getInstance()
163
- .createActionToolbar(" AutoDevCopyView" , actionGroup, true )
164
-
165
- rightToolbar.targetComponent = this
166
- return rightToolbar
167
- }
168
-
169
181
companion object {
170
182
fun createSingleTextView (project : Project , text : String , language : String = "markdown"): DialogPanel {
171
183
val codeBlockViewer = CodeHighlightSketch (project, text, CodeFence .findLanguage(language)).apply {
0 commit comments