From a7fd76a4f50ca9db36b829e1e7b93d15928cdf91 Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Thu, 18 Jul 2019 19:34:24 +0300 Subject: [PATCH] Minor generalization in widget configuration --- build.gradle.kts | 6 ++--- .../hep/dataforge/vis/common/valueWidget.kt | 16 +++++++++++++ .../dataforge/vis/fx/values/ValueChooser.kt | 23 ++++++++++++------- dataforge-vis-spatial-gdml/build.gradle.kts | 2 +- settings.gradle.kts | 1 - 5 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 dataforge-vis-common/src/commonMain/kotlin/hep/dataforge/vis/common/valueWidget.kt diff --git a/build.gradle.kts b/build.gradle.kts index 4d53a86b..6402a8f7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,9 +1,9 @@ val dataforgeVersion by extra("0.1.3-dev-9") plugins{ - kotlin("jvm") version "1.3.40" apply false - id("kotlin2js") version "1.3.40" apply false - id("kotlin-dce-js") version "1.3.40" apply false + kotlin("jvm") version "1.3.41" apply false + id("kotlin2js") version "1.3.41" apply false + id("kotlin-dce-js") version "1.3.41" apply false id("org.jetbrains.kotlin.frontend") version "0.0.45" apply false id("scientifik.mpp") version "0.1.3" apply false id("scientifik.publish") version "0.1.3" apply false diff --git a/dataforge-vis-common/src/commonMain/kotlin/hep/dataforge/vis/common/valueWidget.kt b/dataforge-vis-common/src/commonMain/kotlin/hep/dataforge/vis/common/valueWidget.kt new file mode 100644 index 00000000..fb4d5f32 --- /dev/null +++ b/dataforge-vis-common/src/commonMain/kotlin/hep/dataforge/vis/common/valueWidget.kt @@ -0,0 +1,16 @@ +package hep.dataforge.vis.common + +import hep.dataforge.descriptors.ValueDescriptor +import hep.dataforge.meta.* + +var ValueDescriptor.widget: Meta + get() = this.config["widget"].node?: EmptyMeta + set(value) { + this.config["widget"] = value + } + +var ValueDescriptor.widgetType: String? + get() = this["widget.type"].string + set(value) { + this.config["widget.type"] = value + } \ No newline at end of file diff --git a/dataforge-vis-fx/src/main/kotlin/hep/dataforge/vis/fx/values/ValueChooser.kt b/dataforge-vis-fx/src/main/kotlin/hep/dataforge/vis/fx/values/ValueChooser.kt index 4635e87c..77ec9f28 100644 --- a/dataforge-vis-fx/src/main/kotlin/hep/dataforge/vis/fx/values/ValueChooser.kt +++ b/dataforge-vis-fx/src/main/kotlin/hep/dataforge/vis/fx/values/ValueChooser.kt @@ -14,6 +14,8 @@ import hep.dataforge.provider.Type import hep.dataforge.provider.provideByType import hep.dataforge.values.Null import hep.dataforge.values.Value +import hep.dataforge.vis.common.widget +import hep.dataforge.vis.common.widgetType import javafx.beans.property.ObjectProperty import javafx.beans.value.ObservableValue import javafx.scene.Node @@ -62,29 +64,33 @@ interface ValueChooser { fun setCallback(callback: ValueCallback) @Type("hep.dataforge.vis.fx.valueChooserFactory") - interface Factory: Named { + interface Factory : Named { operator fun invoke(meta: Meta = EmptyMeta): ValueChooser } companion object { private fun findWidgetByType(context: Context, type: String): Factory? { - return when(type){ + return when (type) { TextValueChooser.name -> TextValueChooser ColorValueChooser.name -> ColorValueChooser ComboBoxValueChooser.name -> ComboBoxValueChooser - else-> context.provideByType(type)//Search for additional factories in the plugin + else -> context.provideByType(type)//Search for additional factories in the plugin } } - private fun build(descriptor: ValueDescriptor?): ValueChooser { + private fun build(context: Context, descriptor: ValueDescriptor?): ValueChooser { return if (descriptor == null) { TextValueChooser(); } else { - //val types = descriptor.type + val widgetType = descriptor.widgetType val chooser: ValueChooser = when { + widgetType != null -> { + findWidgetByType(context, widgetType)?.invoke( + descriptor.widget + ) ?: TextValueChooser() + } descriptor.allowedValues.isNotEmpty() -> ComboBoxValueChooser() - descriptor.tags.contains("widget:color") -> ColorValueChooser() else -> TextValueChooser() } chooser.descriptor = descriptor @@ -93,11 +99,12 @@ interface ValueChooser { } fun build( + context: Context, value: ObservableValue, descriptor: ValueDescriptor? = null, setter: (Value) -> Unit ): ValueChooser { - val chooser = build(descriptor) + val chooser = build(context, descriptor) chooser.setDisplayValue(value.value ?: Null) value.onChange { chooser.setDisplayValue(it ?: Null) @@ -113,4 +120,4 @@ interface ValueChooser { return chooser } } -} +} \ No newline at end of file diff --git a/dataforge-vis-spatial-gdml/build.gradle.kts b/dataforge-vis-spatial-gdml/build.gradle.kts index c66f1f0f..def32410 100644 --- a/dataforge-vis-spatial-gdml/build.gradle.kts +++ b/dataforge-vis-spatial-gdml/build.gradle.kts @@ -11,7 +11,7 @@ kotlin { val commonMain by getting { dependencies { api(project(":dataforge-vis-spatial")) - api("scientifik:gdml:0.1.1") + api("scientifik:gdml:0.1.2") } } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 76012be5..126d07e5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,7 +7,6 @@ pluginManagement { maven("https://dl.bintray.com/mipt-npm/scientifik") } - val kotlinVersion = "1.3.40" resolutionStrategy { eachPlugin { when (requested.id.id) {