[Editor] Create Parameters Table Fragment

This commit is contained in:
2021-02-18 12:39:11 +01:00
parent 973b0ada58
commit 4dd6c791b6
6 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
package com.bartlomiejpluta.base.editor.common.parameter.component
import com.bartlomiejpluta.base.editor.common.parameter.model.Parameter
import javafx.scene.control.TableCell
class ParameterValueEditingCell : TableCell<Parameter<*>, Any>() {
override fun updateItem(item: Any?, empty: Boolean) {
super.updateItem(item, empty)
when {
empty || item == null -> {
text = null
graphic = null
}
isEditing -> {
text = null
graphic = tableView.items[index].editor
}
else -> {
text = tableView.items[index].valueString
graphic = null
}
}
}
override fun startEdit() {
if (index < 0 || index >= tableView.items.size) {
return
}
if (!tableView.items[index].editable) {
return
}
super.startEdit()
text = null
graphic = tableView.items[index].editor
}
override fun cancelEdit() {
super.cancelEdit()
text = tableView.items[index]?.valueString
graphic = null
}
}

View File

@@ -0,0 +1,14 @@
package com.bartlomiejpluta.base.editor.common.parameter.model
import javafx.scene.control.ComboBox
class EnumParameter<E : Enum<E>>(
key: String,
initialValue: E,
editable: Boolean = true
) : Parameter<E>(key, initialValue, editable) {
override val editor = ComboBox<E>().apply {
items.setAll(initialValue.javaClass.enumConstants.toList())
valueProperty().bindBidirectional(valueProperty)
}
}

View File

@@ -0,0 +1,16 @@
package com.bartlomiejpluta.base.editor.common.parameter.model
import javafx.scene.control.Spinner
class IntegerParameter(
key: String,
initialValue: Int,
minValue: Int,
maxValue: Int,
editable: Boolean = true,
) : Parameter<Int>(key, initialValue, editable) {
override val editor = Spinner<Int>(minValue, maxValue, initialValue).apply {
isEditable = true
valueFactory.valueProperty().bindBidirectional(valueProperty)
}
}

View File

@@ -0,0 +1,22 @@
package com.bartlomiejpluta.base.editor.common.parameter.model
import javafx.beans.property.*
import javafx.scene.Node
import tornadofx.getValue
import tornadofx.setValue
abstract class Parameter<T>(key: String, initialValue: T? = null, editable: Boolean = true) {
val keyProperty = ReadOnlyStringWrapper(key)
val key by keyProperty
val editableProperty: BooleanProperty = SimpleBooleanProperty(editable)
var editable by editableProperty
val valueProperty: ObjectProperty<T> = SimpleObjectProperty(initialValue)
var value by valueProperty
abstract val editor: Node
open val valueString: String
get() = value.toString()
}

View File

@@ -0,0 +1,8 @@
package com.bartlomiejpluta.base.editor.common.parameter.model
import javafx.scene.control.TextField
class StringParameter(key: String, initialValue: String? = null, editable: Boolean = true) :
Parameter<String>(key, initialValue, editable) {
override val editor = TextField().apply { textProperty().bind(valueProperty) }
}

View File

@@ -0,0 +1,24 @@
package com.bartlomiejpluta.base.editor.common.parameter.view
import com.bartlomiejpluta.base.editor.common.parameter.component.ParameterValueEditingCell
import com.bartlomiejpluta.base.editor.common.parameter.model.Parameter
import javafx.beans.value.ObservableValue
import javafx.collections.ObservableList
import javafx.scene.control.TableColumn
import javafx.scene.control.TableView
import tornadofx.*
class ParametersTableFragment : Fragment() {
val parameters: ObservableList<Parameter<*>> by param()
override val root = tableview(parameters) {
isEditable = true
columnResizePolicy = TableView.CONSTRAINED_RESIZE_POLICY
column("Key", Parameter<*>::keyProperty)
TableColumn<Parameter<*>, Any>("Value").apply {
setCellValueFactory { it.value.valueProperty as ObservableValue<Any> }
setCellFactory { ParameterValueEditingCell() }
}.let { addColumnInternal(it) }
}
}