[Editor] Create sourceDirectory property in Project object

This commit is contained in:
2021-02-09 13:39:35 +01:00
parent ca662b9f4e
commit 728930add9
4 changed files with 65 additions and 6 deletions

View File

@@ -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"
}
}

View File

@@ -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
}
val sourceDirectoryProperty = SimpleObjectProperty<File>()
val sourceDirectory by sourceDirectoryProperty
}

View File

@@ -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<ProjectVM>(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 {

View File

@@ -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>(project) {
val nameProperty = bind(Project::nameProperty)
var name by nameProperty
val name by nameProperty
val sourceDirectoryProperty = bind(Project::sourceDirectoryProperty)
val sourceDirectory by sourceDirectoryProperty
}