Improved error handling
This commit is contained in:
parent
389fd0480b
commit
dd1884432c
|
@ -27,7 +27,7 @@ class AnimationFileModel(animationFilePath: Path, private val executor: Executor
|
||||||
mouthShapes = if (mouthSlot != null) {
|
mouthShapes = if (mouthSlot != null) {
|
||||||
val mouthNames = spineJson.getSlotAttachmentNames(mouthSlot)
|
val mouthNames = spineJson.getSlotAttachmentNames(mouthSlot)
|
||||||
MouthShape.values().filter { mouthNames.contains(mouthNaming.getName(it)) }
|
MouthShape.values().filter { mouthNames.contains(mouthNaming.getName(it)) }
|
||||||
} else null
|
} else listOf()
|
||||||
|
|
||||||
mouthSlotError = if (mouthSlot != null) null
|
mouthSlotError = if (mouthSlot != null) null
|
||||||
else "No slot with mouth drawings specified."
|
else "No slot with mouth drawings specified."
|
||||||
|
@ -75,6 +75,19 @@ class AnimationFileModel(animationFilePath: Path, private val executor: Executor
|
||||||
}
|
}
|
||||||
val busy by busyProperty
|
val busy by busyProperty
|
||||||
|
|
||||||
|
val validProperty = SimpleBooleanProperty().apply {
|
||||||
|
val errorProperties = arrayOf(mouthSlotErrorProperty, mouthShapesErrorProperty)
|
||||||
|
bind(object : BooleanBinding() {
|
||||||
|
init {
|
||||||
|
super.bind(*errorProperties)
|
||||||
|
}
|
||||||
|
override fun computeValue(): Boolean {
|
||||||
|
return errorProperties.all { it.value == null }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
val valid by validProperty
|
||||||
|
|
||||||
private fun saveAnimation(mouthCues: List<MouthCue>, audioEventName: String) {
|
private fun saveAnimation(mouthCues: List<MouthCue>, audioEventName: String) {
|
||||||
val animationName = getAnimationName(audioEventName)
|
val animationName = getAnimationName(audioEventName)
|
||||||
spineJson.createOrUpdateAnimation(mouthCues, audioEventName, animationName, mouthSlot, mouthNaming)
|
spineJson.createOrUpdateAnimation(mouthCues, audioEventName, animationName, mouthSlot, mouthNaming)
|
||||||
|
@ -94,8 +107,13 @@ class AnimationFileModel(animationFilePath: Path, private val executor: Executor
|
||||||
if (missingBasicShapes.isEmpty()) return null
|
if (missingBasicShapes.isEmpty()) return null
|
||||||
|
|
||||||
val result = StringBuilder()
|
val result = StringBuilder()
|
||||||
result.append("Mouth shapes ${missingBasicShapes.joinToString()}")
|
val missingShapesString = missingBasicShapes.joinToString()
|
||||||
result.appendln(if (missingBasicShapes.count() > 1) " are missing." else " is missing.")
|
result.appendln(
|
||||||
|
if (missingBasicShapes.count() > 1)
|
||||||
|
"Mouth shapes $missingShapesString are missing."
|
||||||
|
else
|
||||||
|
"Mouth shape $missingShapesString is missing."
|
||||||
|
)
|
||||||
|
|
||||||
val first = MouthShape.basicShapes.first()
|
val first = MouthShape.basicShapes.first()
|
||||||
val last = MouthShape.basicShapes.last()
|
val last = MouthShape.basicShapes.last()
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package com.rhubarb_lip_sync.rhubarb_for_spine
|
package com.rhubarb_lip_sync.rhubarb_for_spine
|
||||||
|
|
||||||
|
import javafx.beans.binding.Bindings
|
||||||
|
import javafx.beans.property.Property
|
||||||
|
import javafx.beans.property.SimpleBooleanProperty
|
||||||
import javafx.beans.property.SimpleStringProperty
|
import javafx.beans.property.SimpleStringProperty
|
||||||
import javafx.event.ActionEvent
|
import javafx.event.ActionEvent
|
||||||
import javafx.event.EventHandler
|
import javafx.event.EventHandler
|
||||||
|
@ -77,6 +80,7 @@ class MainView : View() {
|
||||||
}
|
}
|
||||||
fieldset("Audio events") {
|
fieldset("Audio events") {
|
||||||
tableview<AudioFileModel> {
|
tableview<AudioFileModel> {
|
||||||
|
placeholder = Label("There are no events with associated audio files.")
|
||||||
columnResizePolicy = SmartResize.POLICY
|
columnResizePolicy = SmartResize.POLICY
|
||||||
column("Event", AudioFileModel::eventNameProperty)
|
column("Event", AudioFileModel::eventNameProperty)
|
||||||
.weigthedWidth(1.0)
|
.weigthedWidth(1.0)
|
||||||
|
@ -112,6 +116,10 @@ class MainView : View() {
|
||||||
val audioFileModel = this@tableview.items[index]
|
val audioFileModel = this@tableview.items[index]
|
||||||
audioFileModel.performAction()
|
audioFileModel.performAction()
|
||||||
}
|
}
|
||||||
|
val invalidProperty: Property<Boolean> = fileModelProperty
|
||||||
|
.select { it!!.validProperty }
|
||||||
|
.select { SimpleBooleanProperty(!it) }
|
||||||
|
disableProperty().bind(invalidProperty)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
null
|
null
|
||||||
|
|
Loading…
Reference in New Issue