[Editor] Create compiler logs drawer item

This commit is contained in:
2021-02-24 22:59:43 +01:00
parent c883ac656e
commit 049d75dc65
4 changed files with 55 additions and 3 deletions

View File

@@ -1,8 +1,11 @@
package com.bartlomiejpluta.base.editor.code.compiler
import com.bartlomiejpluta.base.editor.code.model.FileSystemNode
import com.bartlomiejpluta.base.editor.event.UpdateCompilationLogEvent
import org.codehaus.commons.compiler.CompileException
import org.codehaus.janino.CompilerFactory
import org.springframework.stereotype.Component
import tornadofx.FX
import java.io.File
@Component
@@ -13,6 +16,10 @@ class JavaCompiler : ScriptCompiler {
val files = sourceDirectory.allChildren.map(FileSystemNode::file).filter(File::isFile)
val compiler = compilerFactory.newCompiler()
try {
compiler.compile(files.toTypedArray())
} catch (e: CompileException) {
FX.eventbus.fire(UpdateCompilationLogEvent(e.message ?: "", e.location))
}
}
}

View File

@@ -0,0 +1,22 @@
package com.bartlomiejpluta.base.editor.code.view
import com.bartlomiejpluta.base.editor.event.UpdateCompilationLogEvent
import org.fxmisc.richtext.CodeArea
import tornadofx.View
import tornadofx.enableWhen
import tornadofx.toProperty
class CompilerLogsView : View() {
private val editor = CodeArea().apply {
enableWhen(false.toProperty())
}
init {
subscribe<UpdateCompilationLogEvent> {
editor.clear()
editor.replaceText(0, 0, it.message)
}
}
override val root = editor
}

View File

@@ -0,0 +1,8 @@
package com.bartlomiejpluta.base.editor.event
import org.codehaus.commons.compiler.Location
import tornadofx.EventBus
import tornadofx.FXEvent
data class UpdateCompilationLogEvent(val message: String, val location: Location) :
FXEvent(EventBus.RunOn.ApplicationThread)

View File

@@ -3,8 +3,10 @@ package com.bartlomiejpluta.base.editor.main.view
import com.bartlomiejpluta.base.editor.asset.view.list.AssetsListView
import com.bartlomiejpluta.base.editor.code.model.Code
import com.bartlomiejpluta.base.editor.code.view.CodeEditorFragment
import com.bartlomiejpluta.base.editor.code.view.CompilerLogsView
import com.bartlomiejpluta.base.editor.code.view.ScriptFilesView
import com.bartlomiejpluta.base.editor.code.viewmodel.CodeVM
import com.bartlomiejpluta.base.editor.event.UpdateCompilationLogEvent
import com.bartlomiejpluta.base.editor.main.controller.MainController
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
import com.bartlomiejpluta.base.editor.map.view.editor.MapFragment
@@ -24,14 +26,21 @@ class MainView : View("BASE Game Editor") {
private val mainMenuView = find<MainMenuView>()
private val assetsView = find<AssetsListView>()
private val scriptFilesView = find<ScriptFilesView>()
private val compilerLogsView = find<CompilerLogsView>()
private val openTabs = mutableMapOf<Scope, Tab>()
private var compilationLogItem: DrawerItem by singleAssign()
init {
projectContext.projectProperty.addListener { _, _, project ->
val projectName = project?.let { " :: ${it.name} (${it.sourceDirectory.absolutePath})" } ?: ""
title = "BASE Game Editor$projectName"
}
subscribe<UpdateCompilationLogEvent> {
compilationLogItem.expanded = true
}
}
override val root = borderpane {
@@ -77,14 +86,20 @@ class MainView : View("BASE Game Editor") {
}
left = drawer(multiselect = true) {
item("Code", expanded = true) {
item("Code", expanded = false) {
this += scriptFilesView
}
item("Assets", expanded = true) {
item("Assets", expanded = false) {
this += assetsView
}
}
bottom = drawer(multiselect = true) {
compilationLogItem = item("Compilation Log") {
this += compilerLogsView
}
}
}
private fun createTab(scope: Scope, item: Any) = when (item) {