diff --git a/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/CodeHighlightSketch.kt b/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/CodeHighlightSketch.kt index 55b048574..a523e389f 100644 --- a/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/CodeHighlightSketch.kt +++ b/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/CodeHighlightSketch.kt @@ -57,30 +57,10 @@ class CodeHighlightSketch(val project: Project, val text: String, private var id add(editorFragment!!.getContent(), BorderLayout.CENTER) if (ideaLanguage?.displayName != "Markdown" && ideaLanguage != PlainTextLanguage.INSTANCE) { - setupActionBar() + setupActionBar(project, editor) } } - private fun setupActionBar() { - val toolbarActionGroup = ActionManager.getInstance().getAction("Shire.ToolWindow.Toolbar") as? ActionGroup - ?: return - - val toolbar = ActionManager.getInstance() - .createActionToolbar(ActionPlaces.MAIN_TOOLBAR, toolbarActionGroup, true) - - val editor = editorFragment?.editor - toolbar.component.setBackground(editor!!.backgroundColor) - toolbar.component.setOpaque(true) - toolbar.targetComponent = editor.contentComponent - editor.headerComponent = toolbar.component - - val connect = project.messageBus.connect(this) - val topic: Topic = EditorColorsManager.TOPIC - connect.subscribe(topic, EditorColorsListener { - toolbar.component.setBackground(editor.backgroundColor) - }) - } - override fun getViewText(): String { return editorFragment?.editor?.document?.text ?: "" } diff --git a/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/LangSketch.kt b/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/LangSketch.kt index 639c9c7cd..77fe4a856 100644 --- a/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/LangSketch.kt +++ b/core/src/main/kotlin/com/phodal/shirecore/ui/viewer/LangSketch.kt @@ -2,12 +2,50 @@ package com.phodal.shirecore.ui.viewer import com.intellij.lang.Language import com.intellij.openapi.Disposable +import com.intellij.openapi.actionSystem.ActionGroup +import com.intellij.openapi.actionSystem.ActionManager +import com.intellij.openapi.actionSystem.ActionPlaces +import com.intellij.openapi.actionSystem.ActionToolbar +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.editor.colors.EditorColorsListener +import com.intellij.openapi.editor.colors.EditorColorsManager +import com.intellij.openapi.editor.ex.EditorEx +import com.intellij.openapi.project.Project +import com.intellij.util.messages.Topic import javax.swing.JComponent -interface LangSketch: Disposable { +interface LangSketch : Disposable { fun getViewText(): String fun updateViewText(text: String) fun getComponent(): JComponent fun updateLanguage(language: Language?) - fun doneUpdateText(text: String) { } + fun doneUpdateText(text: String) {} + + fun setupActionBar(project: Project, editor: Editor) { + val toolbar = actionToolbar() ?: return + + if (editor is EditorEx) { + toolbar.component.setBackground(editor.backgroundColor) + } + toolbar.component.setOpaque(true) + toolbar.targetComponent = editor.contentComponent + editor.headerComponent = toolbar.component + + val connect = project.messageBus.connect(this) + val topic: Topic = EditorColorsManager.TOPIC + connect.subscribe(topic, EditorColorsListener { + if (editor is EditorEx) { + toolbar.component.setBackground(editor.backgroundColor) + } + }) + } + + fun actionToolbar(): ActionToolbar? { + val toolbarActionGroup = ActionManager.getInstance().getAction("Shire.ToolWindow.Toolbar") as? ActionGroup + ?: return null + + val toolbar = ActionManager.getInstance() + .createActionToolbar(ActionPlaces.MAIN_TOOLBAR, toolbarActionGroup, true) + return toolbar + } } diff --git a/gradle-241.properties b/gradle-241.properties index e254fa279..0d470c6c4 100644 --- a/gradle-241.properties +++ b/gradle-241.properties @@ -8,7 +8,7 @@ pluginUntilBuild = 243.* # 3rd party plugins # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html -platformPlugins = PythonCore:241.14494.240,PlantUML integration:7.10.1-IJ2023.2 +platformPlugins = PythonCore:241.14494.240,PlantUML integration:7.10.1-IJ2023.2,com.intellij.mermaid:0.0.22+IJ.232 pythonPlugins = PythonCore:241.14494.240 goPlugin=org.jetbrains.plugins.go:241.14494.240 plantUmlPlugin = PlantUML integration:7.10.1-IJ2023.2 diff --git a/src/main/kotlin/com/phodal/shire/marketplace/ShireToolWindowFactory.kt b/src/main/kotlin/com/phodal/shire/marketplace/ShireToolWindowFactory.kt index a6ecbde1b..45b2bdb69 100644 --- a/src/main/kotlin/com/phodal/shire/marketplace/ShireToolWindowFactory.kt +++ b/src/main/kotlin/com/phodal/shire/marketplace/ShireToolWindowFactory.kt @@ -8,11 +8,12 @@ import com.intellij.openapi.wm.ToolWindowManager import com.phodal.shire.marketplace.ui.MarketplaceView class ShireToolWindowFactory : ToolWindowFactory, DumbAware { - object Util { - const val id = "ShireToolWindow" - } override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) { project.getService(MarketplaceView::class.java).initToolWindow(toolWindow) } + + companion object { + const val id = "ShireToolWindow" + } } diff --git a/src/main/kotlin/com/phodal/shire/marketplace/ui/ShireMarketplaceTableView.kt b/src/main/kotlin/com/phodal/shire/marketplace/ui/ShireMarketplaceTableView.kt index c8b402177..bcb78c96c 100644 --- a/src/main/kotlin/com/phodal/shire/marketplace/ui/ShireMarketplaceTableView.kt +++ b/src/main/kotlin/com/phodal/shire/marketplace/ui/ShireMarketplaceTableView.kt @@ -14,8 +14,8 @@ import com.phodal.shire.ShireMainBundle import com.phodal.shire.marketplace.model.ShirePackage import com.phodal.shire.marketplace.util.ShireDownloader import com.phodal.shirecore.ShirelangNotifications -import com.phodal.shirecore.lookupFile -import com.phodal.shirecore.ui.viewer.DiffLangSketch +import com.phodal.shirecore.provider.sketch.LanguageSketchProvider +import com.phodal.shirecore.provider.sketch.LanguageSketchProvider.Companion import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response @@ -106,6 +106,17 @@ class ShireMarketplaceTableView(val project: Project) { row { cell(scrollPane).align(Align.FILL) }.resizableRow() + + + row { + val patchContent = """ + sequenceDiagram + Alice->>John: Hello John, how are you? + John-->>Alice: Great! + Alice-)John: See you later! + """.trimIndent() + cell(LanguageSketchProvider.provide("mermaid")!!.createSketch(project, patchContent).getComponent()).align(Align.FILL) + }.resizableRow() } tableModel.items = makeApiCall() diff --git a/toolsets/mermaid/src/main/kotlin/com/phodal/shire/mermaid/provider/MermaidSketchProvider.kt b/toolsets/mermaid/src/main/kotlin/com/phodal/shire/mermaid/provider/MermaidSketchProvider.kt index 1c57121b7..05686c9f4 100644 --- a/toolsets/mermaid/src/main/kotlin/com/phodal/shire/mermaid/provider/MermaidSketchProvider.kt +++ b/toolsets/mermaid/src/main/kotlin/com/phodal/shire/mermaid/provider/MermaidSketchProvider.kt @@ -1,46 +1,55 @@ package com.phodal.shire.mermaid.provider import com.intellij.lang.Language -import com.intellij.mermaid.preview.MermaidDiagramPreviewComponent +import com.intellij.openapi.fileEditor.FileEditorProvider +import com.intellij.openapi.fileEditor.TextEditorWithPreview +import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.vfs.readText +import com.intellij.testFramework.LightVirtualFile +import com.intellij.ui.dsl.builder.Align import com.intellij.ui.dsl.builder.panel import com.phodal.shirecore.provider.sketch.ExtensionLangSketch import com.phodal.shirecore.provider.sketch.LanguageSketchProvider -import com.phodal.shirecore.ui.viewer.LangSketch import javax.swing.JComponent import javax.swing.JPanel class MermaidSketchProvider : LanguageSketchProvider { override fun isSupported(lang: String): Boolean { - return lang == "mermaid" + return lang == "mermaid" || lang == "mmd" } override fun createSketch(project: Project, content: String): ExtensionLangSketch { - TODO("Not yet implemented") + val file = LightVirtualFile("mermaid.mermaid", content) + return MermaidSketch(project, file) } } -class MermaidSketch(private val project: Project, private val content: String) : ExtensionLangSketch { +class MermaidSketch(private val project: Project, private val virtualFile: VirtualFile) : ExtensionLangSketch { private var mainPanel: JPanel init { - val component = MermaidDiagramPreviewComponent(project) + val editor = getEditorProvider().createEditor(project, virtualFile) as TextEditorWithPreview + val previewEditor = editor.previewEditor mainPanel = panel { row { - component.also { - it.isVisible = true - it.setSize(800, 600) - } + cell(previewEditor.component).align(Align.FILL) } } } + private fun getEditorProvider(): FileEditorProvider = + FileEditorProvider.EP_FILE_EDITOR_PROVIDER.extensionList.filter { + it.javaClass.simpleName == "MermaidEditorWithPreviewProvider" + }.firstOrNull() ?: TextEditorProvider.getInstance() + override fun getExtensionName(): String { return "mermaid" } override fun getViewText(): String { - return content + return virtualFile.readText() } override fun updateViewText(text: String) { diff --git a/toolsets/plantuml/src/main/kotlin/com/phodal/shire/plantuml/PlantUmlSketchProvider.kt b/toolsets/plantuml/src/main/kotlin/com/phodal/shire/plantuml/PlantUmlSketchProvider.kt index 2dcb623fa..712213f68 100644 --- a/toolsets/plantuml/src/main/kotlin/com/phodal/shire/plantuml/PlantUmlSketchProvider.kt +++ b/toolsets/plantuml/src/main/kotlin/com/phodal/shire/plantuml/PlantUmlSketchProvider.kt @@ -21,7 +21,7 @@ import javax.swing.JPanel class PlantUmlSketchProvider : LanguageSketchProvider { override fun isSupported(lang: String): Boolean { - return true + return lang == "plantuml" || lang == "puml" || lang == "uml" } override fun createSketch(project: Project, content: String): ExtensionLangSketch {