diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt index b6f3183f..72e25ad5 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt @@ -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() val openMaps = observableMapOf() fun createEmptyProject() { @@ -29,8 +27,8 @@ class MainController : Controller() { val modal = find().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) } } } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt index ee35d9af..38281b42 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainMenuView.kt @@ -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() } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt index 030c8d9e..efdba799 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/view/MainView.kt @@ -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() init { - mainController.openProject.addListener { _, _, project -> + projectContext.projectProperty.addListener { _, _, project -> val projectName = project?.let { " :: ${it.name} (${it.sourceDirectory.absolutePath})" } ?: "" title = "BASE Game Editor$projectName" } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt new file mode 100644 index 00000000..637fc6de --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt @@ -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() as ObjectProperty + 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 } + } +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/ProjectContext.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/ProjectContext.kt new file mode 100644 index 00000000..89ea1cce --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/ProjectContext.kt @@ -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 + var project: Project? + + fun save() + fun open(file: File) +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/manager/DefaultProjectManager.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/manager/DefaultProjectManager.kt deleted file mode 100644 index b0f2c40d..00000000 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/manager/DefaultProjectManager.kt +++ /dev/null @@ -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 } -} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/manager/ProjectManager.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/manager/ProjectManager.kt deleted file mode 100644 index 1e122c80..00000000 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/manager/ProjectManager.kt +++ /dev/null @@ -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 -} \ No newline at end of file