Skip to content

Commit

Permalink
feat(code-highlight): enhance setupActionBar and add Mermaid support #…
Browse files Browse the repository at this point in the history
…153

- Refactor `setupActionBar` to accept `project` and `editor` parameters.
- Add Mermaid diagram support in `ShireMarketplaceTableView`.
- Update `MermaidSketchProvider` to handle Mermaid and MMD languages.
- Add Mermaid plugin dependency in `gradle-241.properties`.
- Extend `PlantUmlSketchProvider` to support specific UML file extensions.
  • Loading branch information
phodal committed Dec 10, 2024
1 parent 2447864 commit f8f69a2
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<EditorColorsListener> = EditorColorsManager.TOPIC
connect.subscribe(topic, EditorColorsListener {
toolbar.component.setBackground(editor.backgroundColor)
})
}

override fun getViewText(): String {
return editorFragment?.editor?.document?.text ?: ""
}
Expand Down
42 changes: 40 additions & 2 deletions core/src/main/kotlin/com/phodal/shirecore/ui/viewer/LangSketch.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<EditorColorsListener> = 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
}
}
2 changes: 1 addition & 1 deletion gradle-241.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit f8f69a2

Please sign in to comment.