Skip to content

Commit 6571cc5

Browse files
committed
feat(ui): add copy action to message view toolbar
1 parent 705ed7f commit 6571cc5

File tree

4 files changed

+33
-18
lines changed

4 files changed

+33
-18
lines changed

core/src/main/kotlin/cc/unitmesh/devti/gui/chat/NewNormalChatPanel.kt

Lines changed: 0 additions & 14 deletions
This file was deleted.

core/src/main/kotlin/cc/unitmesh/devti/gui/chat/NormalChatCodingPanel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ class NormalChatCodingPanel(private val chatCodingService: ChatCodingService, va
243243
private suspend fun updateMessageInUi(content: Flow<String>): String {
244244
val messageView = MessageView(chatCodingService.project, "", ChatRole.Assistant, "")
245245
myList.add(messageView)
246+
246247
val startTime = System.currentTimeMillis()
247248
var text = ""
248249
val batchSize = 5

core/src/main/kotlin/cc/unitmesh/devti/gui/chat/view/MessageView.kt

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,25 @@ import cc.unitmesh.devti.sketch.ui.LanguageSketchProvider
88
import cc.unitmesh.devti.sketch.ui.MarkdownPreviewHighlightSketch
99
import cc.unitmesh.devti.sketch.ui.code.CodeHighlightSketch
1010
import cc.unitmesh.devti.util.parser.CodeFence
11+
import com.intellij.icons.AllIcons
12+
import com.intellij.openapi.actionSystem.ActionManager
13+
import com.intellij.openapi.actionSystem.ActionToolbar
14+
import com.intellij.openapi.actionSystem.AnAction
15+
import com.intellij.openapi.actionSystem.AnActionEvent
16+
import com.intellij.openapi.actionSystem.DefaultActionGroup
1117
import com.intellij.openapi.application.ApplicationManager
1218
import com.intellij.openapi.application.runInEdt
1319
import com.intellij.openapi.fileTypes.PlainTextLanguage
1420
import com.intellij.openapi.project.Project
1521
import com.intellij.openapi.ui.DialogPanel
16-
import com.intellij.ui.JBColor
1722
import com.intellij.ui.components.JBPanel
1823
import com.intellij.ui.components.panels.VerticalLayout
1924
import com.intellij.ui.dsl.builder.panel
2025
import com.intellij.util.ui.JBFont
2126
import com.intellij.util.ui.JBUI
2227
import java.awt.BorderLayout
28+
import java.awt.Toolkit
29+
import java.awt.datatransfer.StringSelection
2330
import javax.swing.JLabel
2431
import javax.swing.JPanel
2532

@@ -58,8 +65,10 @@ class MessageView(val project: Project, val message: String, val role: ChatRole,
5865
val centerPanel = JPanel(VerticalLayout(JBUI.scale(8)))
5966
centerPanel.add(authorLabel)
6067

61-
if (role == ChatRole.User) {
62-
runInEdt {
68+
val toolbar = createViewActionGroup().component
69+
runInEdt {
70+
centerPanel.add(toolbar)
71+
if (role == ChatRole.User) {
6372
myList.add(createSingleTextView(project, message))
6473
}
6574
}
@@ -139,6 +148,25 @@ class MessageView(val project: Project, val message: String, val role: ChatRole,
139148
}
140149
}
141150

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.setTargetComponent(this)
166+
167+
return rightToolbar
168+
}
169+
142170
companion object {
143171
fun createSingleTextView(project: Project, text: String, language: String = "markdown"): DialogPanel {
144172
val codeBlockViewer = CodeHighlightSketch(project, text, CodeFence.findLanguage(language)).apply {

javascript/src/main/kotlin/cc/unitmesh/ide/javascript/bridge/StylingViewFunctionProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class StylingViewFunctionProvider : ToolchainFunctionProvider {
2626
): Any {
2727
val searchScope: GlobalSearchScope = ProjectScope.getContentScope(project)
2828
val scssType = FileTypeManagerEx.getInstanceEx().getFileTypeByExtension("scss")
29-
var files = FileTypeIndex.getFiles(scssType, searchScope)
29+
var files = runReadAction { FileTypeIndex.getFiles(scssType, searchScope) }
3030
if (files.isEmpty()) {
3131
files = FileTypeIndex.getFiles(CssFileType.INSTANCE, searchScope)
3232
}

0 commit comments

Comments
 (0)