1
1
package cc.unitmesh.devti.sketch
2
2
3
3
import cc.unitmesh.devti.alignRight
4
- import cc.unitmesh.devti.gui.chat.*
4
+ import cc.unitmesh.devti.gui.chat.ChatCodingService
5
5
import cc.unitmesh.devti.gui.chat.message.ChatActionType
6
6
import cc.unitmesh.devti.gui.chat.ui.AutoDevInputSection
7
7
import cc.unitmesh.devti.inline.AutoDevInlineChatService
8
8
import cc.unitmesh.devti.inline.fullHeight
9
9
import cc.unitmesh.devti.inline.fullWidth
10
+ import cc.unitmesh.devti.provider.RunService
10
11
import cc.unitmesh.devti.sketch.ui.ExtensionLangSketch
11
- import cc.unitmesh.devti.util.parser.CodeFence
12
- import cc.unitmesh.devti.sketch.ui.highlight.CodeHighlightSketch
13
12
import cc.unitmesh.devti.sketch.ui.LangSketch
14
13
import cc.unitmesh.devti.sketch.ui.LanguageSketchProvider
14
+ import cc.unitmesh.devti.sketch.ui.highlight.CodeHighlightSketch
15
+ import cc.unitmesh.devti.util.parser.CodeFence
15
16
import com.intellij.icons.AllIcons
17
+ import com.intellij.ide.scratch.ScratchRootType
16
18
import com.intellij.openapi.Disposable
17
19
import com.intellij.openapi.application.runInEdt
18
20
import com.intellij.openapi.editor.Editor
@@ -21,12 +23,12 @@ import com.intellij.openapi.project.Project
21
23
import com.intellij.openapi.ui.DialogPanel
22
24
import com.intellij.openapi.ui.NullableComponent
23
25
import com.intellij.openapi.ui.SimpleToolWindowPanel
26
+ import com.intellij.psi.PsiManager
24
27
import com.intellij.ui.components.JBLabel
25
28
import com.intellij.ui.components.JBScrollPane
26
29
import com.intellij.ui.components.panels.VerticalLayout
27
30
import com.intellij.ui.dsl.builder.panel
28
31
import com.intellij.util.ui.JBUI
29
- import com.sun.java.accessibility.util.AWTEventMonitor.addActionListener
30
32
import java.awt.BorderLayout
31
33
import java.awt.Dimension
32
34
import java.awt.Toolkit
@@ -35,12 +37,7 @@ import java.awt.event.KeyAdapter
35
37
import java.awt.event.KeyEvent
36
38
import java.awt.event.MouseAdapter
37
39
import java.awt.event.MouseEvent
38
- import javax.swing.BorderFactory
39
- import javax.swing.JButton
40
- import javax.swing.JPanel
41
- import javax.swing.JProgressBar
42
- import javax.swing.ScrollPaneConstants
43
- import javax.swing.SwingUtilities
40
+ import javax.swing.*
44
41
45
42
class SketchToolWindow (val project : Project , val editor : Editor ? , private val showInput : Boolean = false ) :
46
43
SimpleToolWindowPanel (true , true ),
@@ -79,12 +76,9 @@ class SketchToolWindow(val project: Project, val editor: Editor?, private val sh
79
76
80
77
private var panelContent: DialogPanel = panel {
81
78
if (showInput) {
82
- // 开启 AI 降临模式(全自动化) with toggle
83
79
row {
84
80
checkBox(" AI 降临模式(全自动化)" ).apply {
85
- addActionListener {
86
- // /
87
- }
81
+ AutoSketchMode .getInstance(project).isEnable = this .component.isSelected
88
82
}
89
83
}
90
84
}
@@ -246,6 +240,28 @@ class SketchToolWindow(val project: Project, val editor: Editor?, private val sh
246
240
progressBar.isIndeterminate = false
247
241
progressBar.isVisible = false
248
242
scrollToBottom()
243
+
244
+ if (AutoSketchMode .getInstance(project).isEnable) {
245
+ startAutoSketchMode(text)
246
+ }
247
+ }
248
+
249
+
250
+ fun startAutoSketchMode (text : String ) {
251
+ val codeFenceList = CodeFence .parseAll(text)
252
+ val devinCodeFence = codeFenceList.filter { it.language.displayName == " DevIn" }
253
+
254
+ devinCodeFence.forEach {
255
+ val scratchFile = ScratchRootType .getInstance()
256
+ .createScratchFile(project, " sketch.shire" , it.language, it.text)
257
+ ? : return
258
+
259
+ val psiFile = PsiManager .getInstance(project).findFile(scratchFile)
260
+ ? : return
261
+
262
+ RunService .provider(project, scratchFile)
263
+ ?.runFile(project, scratchFile, psiFile, isFromToolAction = true )
264
+ }
249
265
}
250
266
251
267
private fun scrollToBottom () {
0 commit comments