Disabling main controls while busy
This commit is contained in:
parent
0cb82f3e4e
commit
389fd0480b
|
@ -1,5 +1,7 @@
|
|||
package com.rhubarb_lip_sync.rhubarb_for_spine
|
||||
|
||||
import javafx.beans.binding.BooleanBinding
|
||||
import javafx.beans.property.SimpleBooleanProperty
|
||||
import javafx.beans.property.SimpleListProperty
|
||||
import javafx.beans.property.SimpleObjectProperty
|
||||
import javafx.beans.property.SimpleStringProperty
|
||||
|
@ -57,6 +59,21 @@ class AnimationFileModel(animationFilePath: Path, private val executor: Executor
|
|||
}
|
||||
.observable()
|
||||
)
|
||||
val audioFileModels by audioFileModelsProperty
|
||||
|
||||
val busyProperty = SimpleBooleanProperty().apply {
|
||||
bind(object : BooleanBinding() {
|
||||
init {
|
||||
for (audioFileModel in audioFileModels) {
|
||||
super.bind(audioFileModel.busyProperty)
|
||||
}
|
||||
}
|
||||
override fun computeValue(): Boolean {
|
||||
return audioFileModels.any { it.busy }
|
||||
}
|
||||
})
|
||||
}
|
||||
val busy by busyProperty
|
||||
|
||||
private fun saveAnimation(mouthCues: List<MouthCue>, audioEventName: String) {
|
||||
val animationName = getAnimationName(audioEventName)
|
||||
|
@ -66,8 +83,6 @@ class AnimationFileModel(animationFilePath: Path, private val executor: Executor
|
|||
|
||||
private fun getAnimationName(audioEventName: String): String = "say_$audioEventName"
|
||||
|
||||
val audioFileModels by audioFileModelsProperty
|
||||
|
||||
init {
|
||||
slots = spineJson.slots.observable()
|
||||
mouthSlot = spineJson.guessMouthSlot()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.rhubarb_lip_sync.rhubarb_for_spine
|
||||
|
||||
import javafx.application.Platform
|
||||
import javafx.beans.binding.BooleanBinding
|
||||
import javafx.beans.binding.ObjectBinding
|
||||
import javafx.beans.binding.StringBinding
|
||||
import javafx.beans.property.SimpleBooleanProperty
|
||||
|
@ -66,6 +67,19 @@ class AudioFileModel(
|
|||
}
|
||||
private val audioFileState by audioFileStateProperty
|
||||
|
||||
val busyProperty = SimpleBooleanProperty().apply {
|
||||
bind(object : BooleanBinding() {
|
||||
init {
|
||||
super.bind(futureProperty)
|
||||
}
|
||||
override fun computeValue(): Boolean {
|
||||
return future != null
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
val busy by busyProperty
|
||||
|
||||
val statusLabelProperty = SimpleStringProperty().apply {
|
||||
bind(object : StringBinding() {
|
||||
init {
|
||||
|
|
|
@ -35,6 +35,7 @@ class MainView : View() {
|
|||
minWidth = 800.0
|
||||
prefWidth = 1000.0
|
||||
fieldset("Settings") {
|
||||
disableProperty().bind(fileModelProperty.select { it!!.busyProperty })
|
||||
field("Spine JSON file") {
|
||||
filePathTextField = textfield {
|
||||
textProperty().bindBidirectional(mainModel.filePathStringProperty)
|
||||
|
@ -123,13 +124,13 @@ class MainView : View() {
|
|||
}
|
||||
|
||||
onDragOver = EventHandler<DragEvent> { event ->
|
||||
if (event.dragboard.hasFiles()) {
|
||||
if (event.dragboard.hasFiles() && mainModel.animationFileModel?.busy != true) {
|
||||
event.acceptTransferModes(TransferMode.COPY)
|
||||
event.consume()
|
||||
}
|
||||
}
|
||||
onDragDropped = EventHandler<DragEvent> { event ->
|
||||
if (event.dragboard.hasFiles()) {
|
||||
if (event.dragboard.hasFiles() && mainModel.animationFileModel?.busy != true) {
|
||||
filePathTextField!!.text = event.dragboard.files.firstOrNull()?.path
|
||||
event.isDropCompleted = true
|
||||
event.consume()
|
||||
|
|
Loading…
Reference in New Issue