[Editor] Create sourceDirectory property in Project object
This commit is contained in:
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user