From 728930add951895717b4114cf43fe117fd107169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 9 Feb 2021 13:39:35 +0100 Subject: [PATCH] [Editor] Create sourceDirectory property in Project object --- .../base/editor/main/view/MainView.kt | 2 +- .../base/editor/project/model/Project.kt | 7 ++- .../project/view/ProjectSettingsFragment.kt | 53 +++++++++++++++++++ .../editor/project/viewmodel/ProjectVM.kt | 9 ++-- 4 files changed, 65 insertions(+), 6 deletions(-) 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 35bbc738..29ce7dab 100755 --- 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 @@ -13,7 +13,7 @@ class MainView : View("BASE Game Editor") { init { mainController.openProject.addListener { _, _, project -> - val projectName = project?.let { " :: ${it.name}" } ?: "" + 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/model/Project.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt index 2b9e4145..5f5ca03d 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt @@ -1,9 +1,14 @@ package com.bartlomiejpluta.base.editor.project.model +import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleStringProperty import tornadofx.* +import java.io.File class Project { val nameProperty = SimpleStringProperty() var name by nameProperty -} \ No newline at end of file + + val sourceDirectoryProperty = SimpleObjectProperty() + val sourceDirectory by sourceDirectoryProperty +} diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/view/ProjectSettingsFragment.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/view/ProjectSettingsFragment.kt index 8c68a2f5..bf880a8e 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/view/ProjectSettingsFragment.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/view/ProjectSettingsFragment.kt @@ -1,11 +1,25 @@ package com.bartlomiejpluta.base.editor.project.view import com.bartlomiejpluta.base.editor.project.viewmodel.ProjectVM +import javafx.beans.binding.Bindings +import javafx.beans.binding.Bindings.createStringBinding +import javafx.beans.property.SimpleStringProperty import tornadofx.* +import java.io.File class ProjectSettingsFragment : Fragment("Project Settings") { private val projectVM = find(FX.defaultScope) + private val rootDirectory = SimpleStringProperty("") + private val projectDirectory = SimpleStringProperty("") + private val directory = createStringBinding({ + File(rootDirectory.value, projectDirectory.value).absolutePath + }, rootDirectory, projectDirectory) + + init { + directory.addListener { _, _, path -> projectVM.sourceDirectoryProperty.value = File(path) } + } + var result = false private set @@ -14,9 +28,48 @@ class ProjectSettingsFragment : Fragment("Project Settings") { field("Project Name") { textfield(projectVM.nameProperty) { required() + trimWhitespace() whenDocked { requestFocus() } } } + + field("Project Location") { + hbox { + textfield(rootDirectory) { + trimWhitespace() + + projectVM.validationContext.addValidator(this, rootDirectory) { + when { + it.isNullOrBlank() -> error("Field is required") + !File(it).exists() -> error("Provide valid path to the direction") + else -> null + } + } + } + + button("Choose") { + action { + rootDirectory.value = chooseDirectory("Project Location")?.absolutePath + } + } + } + } + + field("Project Directory Name") { + textfield(projectDirectory) { + trimWhitespace() + + projectVM.validationContext.addValidator(this, projectDirectory) { + when { + it.isNullOrBlank() -> error("Field is required") + File(directory.value).exists() -> error("The directory ${directory.value} already exists") + else -> null + } + } + } + } + + label(Bindings.format("Directory:\n%s", directory)) } buttonbar { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/viewmodel/ProjectVM.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/viewmodel/ProjectVM.kt index 95aa26ad..54036763 100755 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/viewmodel/ProjectVM.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/viewmodel/ProjectVM.kt @@ -1,11 +1,12 @@ package com.bartlomiejpluta.base.editor.project.viewmodel import com.bartlomiejpluta.base.editor.project.model.Project -import tornadofx.ItemViewModel -import tornadofx.getValue -import tornadofx.setValue +import tornadofx.* class ProjectVM(project: Project) : ItemViewModel(project) { val nameProperty = bind(Project::nameProperty) - var name by nameProperty + val name by nameProperty + + val sourceDirectoryProperty = bind(Project::sourceDirectoryProperty) + val sourceDirectory by sourceDirectoryProperty } \ No newline at end of file