[Editor] Create Project Context object which holds current project model
This commit is contained in:
@@ -4,11 +4,10 @@ import com.bartlomiejpluta.base.editor.command.context.UndoableScope
|
||||
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
||||
import com.bartlomiejpluta.base.editor.map.view.wizard.MapCreationWizard
|
||||
import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapBuilderVM
|
||||
import com.bartlomiejpluta.base.editor.project.manager.ProjectManager
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||
import com.bartlomiejpluta.base.editor.project.view.ProjectSettingsFragment
|
||||
import com.bartlomiejpluta.base.editor.project.viewmodel.ProjectVM
|
||||
import javafx.beans.property.SimpleObjectProperty
|
||||
import javafx.stage.FileChooser
|
||||
import org.springframework.stereotype.Component
|
||||
import tornadofx.*
|
||||
@@ -16,9 +15,8 @@ import kotlin.collections.set
|
||||
|
||||
@Component
|
||||
class MainController : Controller() {
|
||||
private val projectManager: ProjectManager by di()
|
||||
private val projectContext: ProjectContext by di()
|
||||
|
||||
val openProject = SimpleObjectProperty<Project?>()
|
||||
val openMaps = observableMapOf<Scope, GameMap>()
|
||||
|
||||
fun createEmptyProject() {
|
||||
@@ -29,8 +27,8 @@ class MainController : Controller() {
|
||||
val modal = find<ProjectSettingsFragment>().apply { openModal(block = true, resizable = false) }
|
||||
|
||||
if(modal.result) {
|
||||
openProject.value = project
|
||||
projectManager.saveProject(project)
|
||||
projectContext.project = project
|
||||
projectContext.save()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +50,6 @@ class MainController : Controller() {
|
||||
chooseFile(
|
||||
title = "Load Project",
|
||||
filters = arrayOf(FileChooser.ExtensionFilter("BASE Editor Project (*.bep)", "*.bep")),
|
||||
).getOrNull(0)?.let { openProject.value = projectManager.openProject(it) }
|
||||
).getOrNull(0)?.let { projectContext.open(it) }
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.bartlomiejpluta.base.editor.main.view
|
||||
|
||||
import com.bartlomiejpluta.base.editor.main.controller.MainController
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
import tornadofx.*
|
||||
|
||||
class MainMenuView : View() {
|
||||
private val mainController: MainController by di()
|
||||
private val projectContext: ProjectContext by di()
|
||||
|
||||
override val root = menubar {
|
||||
menu("File") {
|
||||
@@ -16,7 +18,7 @@ class MainMenuView : View() {
|
||||
}
|
||||
|
||||
item("Map...") {
|
||||
enableWhen(mainController.openProject.isNotNull)
|
||||
enableWhen(projectContext.projectProperty.isNotNull)
|
||||
action {
|
||||
mainController.createEmptyMap()
|
||||
}
|
||||
|
||||
@@ -3,17 +3,19 @@ package com.bartlomiejpluta.base.editor.main.view
|
||||
import com.bartlomiejpluta.base.editor.main.controller.MainController
|
||||
import com.bartlomiejpluta.base.editor.map.view.editor.MapFragment
|
||||
import com.bartlomiejpluta.base.editor.map.viewmodel.GameMapVM
|
||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||
import javafx.scene.control.Tab
|
||||
import tornadofx.*
|
||||
|
||||
|
||||
class MainView : View("BASE Game Editor") {
|
||||
private val mainController: MainController by di()
|
||||
private val projectContext: ProjectContext by di()
|
||||
|
||||
private val mainMenuView = find<MainMenuView>()
|
||||
|
||||
init {
|
||||
mainController.openProject.addListener { _, _, project ->
|
||||
projectContext.projectProperty.addListener { _, _, project ->
|
||||
val projectName = project?.let { " :: ${it.name} (${it.sourceDirectory.absolutePath})" } ?: ""
|
||||
title = "BASE Game Editor$projectName"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.bartlomiejpluta.base.editor.project.context
|
||||
|
||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||
import com.bartlomiejpluta.base.editor.project.serial.ProjectDeserializer
|
||||
import com.bartlomiejpluta.base.editor.project.serial.ProjectSerializer
|
||||
import javafx.beans.property.ObjectProperty
|
||||
import javafx.beans.property.SimpleObjectProperty
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.stereotype.Component
|
||||
import tornadofx.getValue
|
||||
import tornadofx.setValue
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
|
||||
@Component
|
||||
class DefaultProjectContext: ProjectContext {
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectSerializer: ProjectSerializer
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectDeserializer: ProjectDeserializer
|
||||
|
||||
override val projectProperty = SimpleObjectProperty<Project?>() as ObjectProperty<Project?>
|
||||
override var project by projectProperty
|
||||
|
||||
override fun save() {
|
||||
project?.let {
|
||||
it.sourceDirectory.mkdirs()
|
||||
|
||||
FileOutputStream(File(it.sourceDirectory, "project.bep")).use { fos ->
|
||||
projectSerializer.serialize(it, fos)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun open(file: File) {
|
||||
FileInputStream(file)
|
||||
.use { projectDeserializer.deserialize(it) }
|
||||
.apply { sourceDirectoryProperty.value = file.parentFile }
|
||||
.let { project = it }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.bartlomiejpluta.base.editor.project.context
|
||||
|
||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||
import javafx.beans.property.ObjectProperty
|
||||
import java.io.File
|
||||
|
||||
interface ProjectContext {
|
||||
val projectProperty: ObjectProperty<Project?>
|
||||
var project: Project?
|
||||
|
||||
fun save()
|
||||
fun open(file: File)
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package com.bartlomiejpluta.base.editor.project.manager
|
||||
|
||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||
import com.bartlomiejpluta.base.editor.project.serial.ProjectDeserializer
|
||||
import com.bartlomiejpluta.base.editor.project.serial.ProjectSerializer
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.stereotype.Component
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
|
||||
@Component
|
||||
class DefaultProjectManager : ProjectManager {
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectSerializer: ProjectSerializer
|
||||
|
||||
@Autowired
|
||||
private lateinit var projectDeserializer: ProjectDeserializer
|
||||
|
||||
override fun saveProject(project: Project) {
|
||||
project.sourceDirectory.mkdirs()
|
||||
|
||||
FileOutputStream(File(project.sourceDirectory, "project.bep")).use {
|
||||
projectSerializer.serialize(project, it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun openProject(file: File) = FileInputStream(file)
|
||||
.use { projectDeserializer.deserialize(it) }
|
||||
.apply { sourceDirectoryProperty.value = file.parentFile }
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
package com.bartlomiejpluta.base.editor.project.manager
|
||||
|
||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||
import java.io.File
|
||||
|
||||
interface ProjectManager {
|
||||
fun saveProject(project: Project)
|
||||
fun openProject(file: File): Project
|
||||
}
|
||||
Reference in New Issue
Block a user