Skip to content

Commit 0b7a4a9

Browse files
committed
feat(gui): replace MarkdownLanguageField with EditorEx for plan editing
- Use EditorEx instead of MarkdownLanguageField for better integration with IntelliJ - Implement proper disposal of editor resources - Improve error handling when creating editor - Add support for Markdown language in editor
1 parent 08353c9 commit 0b7a4a9

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

core/src/main/kotlin/cc/unitmesh/devti/gui/planner/EditPlanViewPanel.kt

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
package cc.unitmesh.devti.gui.planner
22

3+
import cc.unitmesh.devti.AutoDevSnippetFile
4+
import cc.unitmesh.devti.sketch.ui.code.EditorUtil
5+
import cc.unitmesh.devti.sketch.ui.code.findDocument
6+
import cc.unitmesh.devti.util.parser.CodeFence
7+
import com.intellij.openapi.Disposable
8+
import com.intellij.openapi.editor.Document
9+
import com.intellij.openapi.editor.EditorFactory
10+
import com.intellij.openapi.editor.EditorKind
11+
import com.intellij.openapi.editor.ex.EditorEx
312
import com.intellij.openapi.project.Project
13+
import com.intellij.testFramework.LightVirtualFile
414
import com.intellij.ui.components.JBScrollPane
515
import com.intellij.util.ui.JBUI
616
import java.awt.BorderLayout
@@ -13,20 +23,29 @@ class EditPlanViewPanel(
1323
private val content: String,
1424
private val onSave: (String) -> Unit,
1525
private val onCancel: () -> Unit
16-
) : JPanel(BorderLayout()) {
17-
private var markdownEditor: MarkdownLanguageField? = null
26+
) : JPanel(BorderLayout()), Disposable {
27+
private var markdownEditor: EditorEx
1828

1929
init {
20-
markdownEditor = MarkdownLanguageField(project, content, "Edit your plan here...", "plan.md")
30+
val language = CodeFence.findLanguage("Markdown")
31+
val file = LightVirtualFile(AutoDevSnippetFile.naming("md"), language, content)
32+
markdownEditor = try {
33+
val document: Document = file.findDocument() ?: throw IllegalStateException("Document not found")
34+
EditorFactory.getInstance().createEditor(document, project, EditorKind.MAIN_EDITOR) as? EditorEx
35+
} catch (e: Throwable) {
36+
throw e
37+
} ?: throw IllegalStateException("Editor not found")
38+
39+
EditorUtil.configEditor(markdownEditor, project, file, false)
2140

2241
val buttonPanel = JPanel(BorderLayout()).apply {
23-
background = markdownEditor?.getEditor(true)?.backgroundColor
42+
background = markdownEditor.backgroundColor
2443
}
2544

2645
val buttonsBox = Box.createHorizontalBox().apply {
2746
add(JButton("Save").apply {
2847
addActionListener {
29-
val newContent = markdownEditor?.text ?: ""
48+
val newContent = markdownEditor.document.text
3049
onSave(newContent)
3150
}
3251
})
@@ -40,13 +59,13 @@ class EditPlanViewPanel(
4059
buttonPanel.add(buttonsBox, BorderLayout.EAST)
4160
buttonPanel.border = JBUI.Borders.empty(4)
4261

43-
add(JBScrollPane(markdownEditor), BorderLayout.CENTER)
62+
add(JBScrollPane(markdownEditor.component), BorderLayout.CENTER)
4463
add(buttonPanel, BorderLayout.SOUTH)
4564
}
4665

47-
fun getEditor(): MarkdownLanguageField? = markdownEditor
66+
fun getEditor(): EditorEx = markdownEditor
67+
68+
override fun dispose() {
4869

49-
fun dispose() {
50-
markdownEditor = null
5170
}
5271
}

0 commit comments

Comments
 (0)