[Editor] Create sourceDirectory property in Project object
This commit is contained in:
@@ -13,7 +13,7 @@ class MainView : View("BASE Game Editor") {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
mainController.openProject.addListener { _, _, project ->
|
mainController.openProject.addListener { _, _, project ->
|
||||||
val projectName = project?.let { " :: ${it.name}" } ?: ""
|
val projectName = project?.let { " :: ${it.name} (${it.sourceDirectory.absolutePath})" } ?: ""
|
||||||
title = "BASE Game Editor$projectName"
|
title = "BASE Game Editor$projectName"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
package com.bartlomiejpluta.base.editor.project.model
|
package com.bartlomiejpluta.base.editor.project.model
|
||||||
|
|
||||||
|
import javafx.beans.property.SimpleObjectProperty
|
||||||
import javafx.beans.property.SimpleStringProperty
|
import javafx.beans.property.SimpleStringProperty
|
||||||
import tornadofx.*
|
import tornadofx.*
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class Project {
|
class Project {
|
||||||
val nameProperty = SimpleStringProperty()
|
val nameProperty = SimpleStringProperty()
|
||||||
var name by nameProperty
|
var name by nameProperty
|
||||||
|
|
||||||
|
val sourceDirectoryProperty = SimpleObjectProperty<File>()
|
||||||
|
val sourceDirectory by sourceDirectoryProperty
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,25 @@
|
|||||||
package com.bartlomiejpluta.base.editor.project.view
|
package com.bartlomiejpluta.base.editor.project.view
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.editor.project.viewmodel.ProjectVM
|
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 tornadofx.*
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class ProjectSettingsFragment : Fragment("Project Settings") {
|
class ProjectSettingsFragment : Fragment("Project Settings") {
|
||||||
private val projectVM = find<ProjectVM>(FX.defaultScope)
|
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
|
var result = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@@ -14,9 +28,48 @@ class ProjectSettingsFragment : Fragment("Project Settings") {
|
|||||||
field("Project Name") {
|
field("Project Name") {
|
||||||
textfield(projectVM.nameProperty) {
|
textfield(projectVM.nameProperty) {
|
||||||
required()
|
required()
|
||||||
|
trimWhitespace()
|
||||||
whenDocked { requestFocus() }
|
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 {
|
buttonbar {
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package com.bartlomiejpluta.base.editor.project.viewmodel
|
package com.bartlomiejpluta.base.editor.project.viewmodel
|
||||||
|
|
||||||
import com.bartlomiejpluta.base.editor.project.model.Project
|
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||||
import tornadofx.ItemViewModel
|
import tornadofx.*
|
||||||
import tornadofx.getValue
|
|
||||||
import tornadofx.setValue
|
|
||||||
|
|
||||||
class ProjectVM(project: Project) : ItemViewModel<Project>(project) {
|
class ProjectVM(project: Project) : ItemViewModel<Project>(project) {
|
||||||
val nameProperty = bind(Project::nameProperty)
|
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