[Editor] Enable saving script/code files
This commit is contained in:
@@ -5,22 +5,13 @@ import tornadofx.setValue
|
|||||||
import tornadofx.toProperty
|
import tornadofx.toProperty
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class Code(file: File) {
|
class Code(file: File, type: CodeType, code: String) {
|
||||||
val fileProperty = file.toProperty()
|
val fileProperty = file.toProperty()
|
||||||
val file by fileProperty
|
val file by fileProperty
|
||||||
|
|
||||||
val typeProperty = deduceCodeType(file).toProperty()
|
val typeProperty = type.toProperty()
|
||||||
val type by typeProperty
|
val type by typeProperty
|
||||||
|
|
||||||
val codeProperty = file.readText().toProperty()
|
val codeProperty = code.toProperty()
|
||||||
var code by codeProperty
|
var code by codeProperty
|
||||||
|
|
||||||
companion object {
|
|
||||||
private fun deduceCodeType(file: File): CodeType {
|
|
||||||
return when (file.extension.toLowerCase()) {
|
|
||||||
"java" -> CodeType.JAVA
|
|
||||||
else -> throw IllegalStateException("Unsupported script type")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ import com.bartlomiejpluta.base.editor.code.highlighting.JavaSyntaxHighlighter
|
|||||||
import com.bartlomiejpluta.base.editor.code.model.CodeType
|
import com.bartlomiejpluta.base.editor.code.model.CodeType
|
||||||
import com.bartlomiejpluta.base.editor.code.viewmodel.CodeVM
|
import com.bartlomiejpluta.base.editor.code.viewmodel.CodeVM
|
||||||
import com.bartlomiejpluta.base.editor.command.context.UndoableScope
|
import com.bartlomiejpluta.base.editor.command.context.UndoableScope
|
||||||
|
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||||
import javafx.beans.binding.Bindings
|
import javafx.beans.binding.Bindings
|
||||||
import org.kordamp.ikonli.javafx.FontIcon
|
import org.kordamp.ikonli.javafx.FontIcon
|
||||||
import tornadofx.*
|
import tornadofx.*
|
||||||
@@ -12,9 +13,11 @@ import tornadofx.*
|
|||||||
class CodeEditorView : View() {
|
class CodeEditorView : View() {
|
||||||
override val scope = super.scope as UndoableScope
|
override val scope = super.scope as UndoableScope
|
||||||
|
|
||||||
private val javaSyntaxHighlighter: JavaSyntaxHighlighter by di()
|
private val projectContext: ProjectContext by di()
|
||||||
private val codeVM = find<CodeVM>()
|
|
||||||
|
|
||||||
|
private val javaSyntaxHighlighter: JavaSyntaxHighlighter by di()
|
||||||
|
|
||||||
|
private val codeVM = find<CodeVM>()
|
||||||
|
|
||||||
private val highlighter = Bindings.createObjectBinding({
|
private val highlighter = Bindings.createObjectBinding({
|
||||||
when (codeVM.type!!) {
|
when (codeVM.type!!) {
|
||||||
@@ -28,6 +31,14 @@ class CodeEditorView : View() {
|
|||||||
top = toolbar {
|
top = toolbar {
|
||||||
button(graphic = FontIcon("fa-floppy-o")) {
|
button(graphic = FontIcon("fa-floppy-o")) {
|
||||||
shortcut("Ctrl+S")
|
shortcut("Ctrl+S")
|
||||||
|
enableWhen(codeVM.dirty)
|
||||||
|
|
||||||
|
action {
|
||||||
|
codeVM.item?.let {
|
||||||
|
codeVM.commit()
|
||||||
|
projectContext.saveScript(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
button(graphic = FontIcon("fa-undo")) {
|
button(graphic = FontIcon("fa-undo")) {
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ class MainController : Controller() {
|
|||||||
|
|
||||||
fun openScript(file: File) {
|
fun openScript(file: File) {
|
||||||
if (openItems.count { (_, item) -> item is Code && item.file.absolutePath == file.absolutePath } == 0) {
|
if (openItems.count { (_, item) -> item is Code && item.file.absolutePath == file.absolutePath } == 0) {
|
||||||
val code = Code(file)
|
val code = projectContext.loadScript(file)
|
||||||
val vm = CodeVM(code)
|
val vm = CodeVM(code)
|
||||||
val scope = UndoableScope()
|
val scope = UndoableScope()
|
||||||
setInScope(vm, scope)
|
setInScope(vm, scope)
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.bartlomiejpluta.base.editor.project.context
|
package com.bartlomiejpluta.base.editor.project.context
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.editor.asset.model.Asset
|
import com.bartlomiejpluta.base.editor.asset.model.Asset
|
||||||
|
import com.bartlomiejpluta.base.editor.code.model.Code
|
||||||
|
import com.bartlomiejpluta.base.editor.code.model.CodeType
|
||||||
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset
|
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset
|
||||||
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
|
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
|
||||||
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
|
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
|
||||||
@@ -154,4 +156,19 @@ class DefaultProjectContext : ProjectContext {
|
|||||||
asset.file.delete()
|
asset.file.delete()
|
||||||
} ?: throw IllegalStateException("There is no open project in the context")
|
} ?: throw IllegalStateException("There is no open project in the context")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun loadScript(file: File): Code {
|
||||||
|
val type = when (file.extension.toLowerCase()) {
|
||||||
|
"java" -> CodeType.JAVA
|
||||||
|
else -> throw IllegalStateException("Unsupported script type")
|
||||||
|
}
|
||||||
|
|
||||||
|
val code = file.readText()
|
||||||
|
|
||||||
|
return Code(file, type, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun saveScript(code: Code) {
|
||||||
|
code.file.writeText(code.code)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.bartlomiejpluta.base.editor.project.context
|
package com.bartlomiejpluta.base.editor.project.context
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.editor.asset.model.Asset
|
import com.bartlomiejpluta.base.editor.asset.model.Asset
|
||||||
|
import com.bartlomiejpluta.base.editor.code.model.Code
|
||||||
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset
|
import com.bartlomiejpluta.base.editor.image.asset.ImageAsset
|
||||||
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
|
import com.bartlomiejpluta.base.editor.image.asset.ImageAssetData
|
||||||
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
||||||
@@ -30,4 +31,7 @@ interface ProjectContext {
|
|||||||
fun loadImage(uid: String): Image
|
fun loadImage(uid: String): Image
|
||||||
|
|
||||||
fun deleteAsset(asset: Asset)
|
fun deleteAsset(asset: Asset)
|
||||||
|
|
||||||
|
fun loadScript(file: File): Code
|
||||||
|
fun saveScript(code: Code)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user