[Editor] Enable opening code editor on compilation error location click

So far it only opens the tab if it is not already open and do nothing more about it.
It would be good if it focused the tab if it is already open and move caret with viewport to the given line and column.
This commit is contained in:
2021-02-25 09:15:24 +01:00
parent a139e31da8
commit 2974db269d
4 changed files with 18 additions and 6 deletions

View File

@@ -73,4 +73,6 @@ class FileSystemNode(file: File, val parent: FileSystemNode? = null) {
private fun findChild(file: File): FileSystemNode? { private fun findChild(file: File): FileSystemNode? {
return children.firstOrNull { it.file.name == file.name } return children.firstOrNull { it.file.name == file.name }
} }
fun findByFile(file: File) = allChildren.firstOrNull { it.file.equals(file) }
} }

View File

@@ -2,28 +2,34 @@ package com.bartlomiejpluta.base.editor.code.view
import com.bartlomiejpluta.base.editor.event.UpdateCompilationLogEvent import com.bartlomiejpluta.base.editor.event.UpdateCompilationLogEvent
import com.bartlomiejpluta.base.editor.main.controller.MainController import com.bartlomiejpluta.base.editor.main.controller.MainController
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
import javafx.scene.Cursor import javafx.scene.Cursor
import javafx.scene.paint.Color import javafx.scene.paint.Color
import javafx.scene.text.Text import javafx.scene.text.Text
import org.codehaus.commons.compiler.Location import org.codehaus.commons.compiler.Location
import org.fxmisc.richtext.StyledTextArea import org.fxmisc.richtext.StyledTextArea
import tornadofx.View import tornadofx.View
import java.io.File
class CompilerLogsView : View() { class CompilerLogsView : View() {
private val projectContext: ProjectContext by di()
private val mainController: MainController by di() private val mainController: MainController by di()
private val editor = StyledTextArea(null, { _, _ -> }, LocationRef.NO_LINK, { text, style -> style.apply(text) }) private val editor = StyledTextArea(null, { _, _ -> }, LocationRef.NO_LINK, { text, style -> style.apply(text) })
init { init {
subscribe<UpdateCompilationLogEvent> { subscribe<UpdateCompilationLogEvent> { event ->
editor.clear() editor.clear()
val locationRef = LocationRef(it.location) { loc -> val locationRef = LocationRef(event.location) { loc ->
// TODO(mainController.openScript(getFileSystemNodeFromSomewhere(loc))) projectContext.project?.codeFSNode?.findByFile(File(loc.fileName))?.let {
mainController.openScript(it)
}
} }
editor.insert(editor.length, it.location.toString(), locationRef) editor.insert(editor.length, event.location.toString(), locationRef)
editor.insert(editor.length, it.message, LocationRef.NO_LINK) editor.insert(editor.length, event.message, LocationRef.NO_LINK)
} }
} }

View File

@@ -21,7 +21,7 @@ class ScriptFilesView : View() {
init { init {
projectContext.projectProperty.addListener { _, _, project -> projectContext.projectProperty.addListener { _, _, project ->
project?.let { project?.let {
treeView.root = TreeItem(FileSystemNode(it.codeDirectory)) treeView.root = TreeItem(it.codeFSNode)
treeView.populate { item -> item.value?.children } treeView.populate { item -> item.value?.children }
root.root.expandAll() root.root.expandAll()
} }

View File

@@ -1,8 +1,10 @@
package com.bartlomiejpluta.base.editor.project.model package com.bartlomiejpluta.base.editor.project.model
import com.bartlomiejpluta.base.editor.code.model.FileSystemNode
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset import com.bartlomiejpluta.base.editor.image.asset.ImageAsset
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset import com.bartlomiejpluta.base.editor.tileset.asset.TileSetAsset
import javafx.beans.binding.Bindings
import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleObjectProperty
import javafx.beans.property.SimpleStringProperty import javafx.beans.property.SimpleStringProperty
import tornadofx.getValue import tornadofx.getValue
@@ -38,6 +40,8 @@ class Project {
val codeDirectoryProperty = SimpleObjectProperty<File>() val codeDirectoryProperty = SimpleObjectProperty<File>()
var codeDirectory by codeDirectoryProperty var codeDirectory by codeDirectoryProperty
private set private set
val codeFSNodeProperty = Bindings.createObjectBinding({ FileSystemNode(codeDirectory) }, codeDirectoryProperty)
val codeFSNode by codeFSNodeProperty
init { init {
sourceDirectoryProperty.addListener { _, _, dir -> sourceDirectoryProperty.addListener { _, _, dir ->