Skip to content

Commit

Permalink
refactor(terminal): simplify UI and add message filter for local server
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Feb 6, 2025
1 parent 4ea9609 commit e3edc9c
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ open class CodeHighlightSketch(

if (panel == null) return

panel.border = JBEmptyBorder(8)
add(panel, BorderLayout.SOUTH)

editorFragment?.updateExpandCollapseLabel()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ class TerminalSketchProvider : LanguageSketchProvider {
return object : ExtensionLangSketch {
var terminalWidget: JBTerminalWidget? = null
var mainPanel: JPanel? = null

var additionalPanel: JPanel? = null
val buttonPanel = JPanel(HorizontalLayout(JBUI.scale(10)))

val actionGroup = DefaultActionGroup(createConsoleActions())
val toolbar = ActionManager.getInstance().createActionToolbar("TerminalSketch", actionGroup, false).apply {
Expand All @@ -73,40 +72,11 @@ class TerminalSketchProvider : LanguageSketchProvider {
it.preferredSize = Dimension(it.preferredSize.width, 120)
}

terminalWidget!!.addMessageFilter(object : Filter {
var isAlreadyStart = false
override fun applyFilter(line: String, entireLength: Int): Filter.Result? {
if (isAlreadyStart) return null

if (line.contains("Local:")) {
val regex = """Local:\s+(http://localhost:\d+)""".toRegex()
val matchResult = regex.find(line)
if (matchResult != null) {
val url = matchResult.groupValues[1]
AutoDevNotifications.notify(project, "Local server started at $url")
/// add webview to show the local server
val webViewWindow = WebViewWindow().apply {
loadURL(url)
}

additionalPanel = JPanel(BorderLayout()).apply {
add(webViewWindow.component, BorderLayout.CENTER)
}

mainPanel!!.add(additionalPanel!!, BorderLayout.SOUTH)
}
}

return null
}
})

mainPanel = object : JPanel(BorderLayout()) {
init {
add(toolbarWrapper, BorderLayout.NORTH)
add(terminalWidget!!.component, BorderLayout.CENTER)

val buttonPanel = JPanel(HorizontalLayout(JBUI.scale(10)))
val sendButton = JButton("Send").apply {
addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent?) {
Expand All @@ -130,12 +100,13 @@ class TerminalSketchProvider : LanguageSketchProvider {
add(buttonPanel, BorderLayout.SOUTH)
}
}

terminalWidget!!.addMessageFilter(FrontendWebViewServerFilter(project, mainPanel!!))
}

fun createConsoleActions(): List<AnAction> {
val clearAction = object : AnAction("Clear", "Clear Terminal", null) {
override fun actionPerformed(p0: AnActionEvent) {
Thread.sleep(2000)
terminalWidget?.terminalStarter?.sendString("clear\n", false)
}
}
Expand Down Expand Up @@ -188,6 +159,7 @@ class TerminalSketchProvider : LanguageSketchProvider {

ApplicationManager.getApplication().invokeLater {
terminalWidget!!.terminalStarter?.sendString(content, false)
terminalWidget!!.repaint()
}

isAlreadySent = true
Expand All @@ -211,3 +183,30 @@ class TerminalSketchProvider : LanguageSketchProvider {
}
}
}

class FrontendWebViewServerFilter(val project: Project, val mainPanel: JPanel) : Filter {
var isAlreadyStart = false
override fun applyFilter(line: String, entireLength: Int): Filter.Result? {
if (isAlreadyStart) return null

if (line.contains("Local:")) {
val regex = """Local:\s+(http://localhost:\d+)""".toRegex()
val matchResult = regex.find(line)
if (matchResult != null) {
val url = matchResult.groupValues[1]
AutoDevNotifications.notify(project, "Local server started at $url")
val webViewWindow = WebViewWindow().apply {
loadURL(url)
}

var additionalPanel = JPanel(BorderLayout()).apply {
add(webViewWindow.component, BorderLayout.CENTER)
}

mainPanel.add(additionalPanel, BorderLayout.SOUTH)
}
}

return null
}
}

0 comments on commit e3edc9c

Please sign in to comment.