mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-22 07:30:24 +00:00
Small fixes
This commit is contained in:
parent
e943acf081
commit
27843ae0fd
6 changed files with 65 additions and 39 deletions
|
@ -29,11 +29,15 @@ dependencies {
|
||||||
compileOnly 'net.synedra:validatorfx:0.3.1'
|
compileOnly 'net.synedra:validatorfx:0.3.1'
|
||||||
compileOnly 'org.junit.jupiter:junit-jupiter-api:5.9.0'
|
compileOnly 'org.junit.jupiter:junit-jupiter-api:5.9.0'
|
||||||
compileOnly 'com.jfoenix:jfoenix:9.0.10'
|
compileOnly 'com.jfoenix:jfoenix:9.0.10'
|
||||||
compileOnly 'io.xpipe:fxcomps:0.2.2'
|
|
||||||
compileOnly 'org.controlsfx:controlsfx:11.1.1'
|
compileOnly 'org.controlsfx:controlsfx:11.1.1'
|
||||||
compileOnly 'org.apache.commons:commons-lang3:3.12.0'
|
compileOnly 'org.apache.commons:commons-lang3:3.12.0'
|
||||||
}
|
|
||||||
|
|
||||||
|
if (project(':fxcomps') != null) {
|
||||||
|
compileOnly project(':fxcomps')
|
||||||
|
} else {
|
||||||
|
compileOnly 'io.xpipe:fxcomps:0.3.2'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
apply from: 'publish.gradle'
|
apply from: 'publish.gradle'
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class ChoiceComp<T> extends Comp<CompStructure<ComboBox<T>>> {
|
||||||
|
|
||||||
public ChoiceComp(Property<T> value, ObservableValue<Map<T, ObservableValue<String>>> range) {
|
public ChoiceComp(Property<T> value, ObservableValue<Map<T, ObservableValue<String>>> range) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.range = range;
|
this.range = PlatformThread.sync(range);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -60,15 +60,21 @@ public class ChoiceComp<T> extends Comp<CompStructure<ComboBox<T>>> {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
SimpleChangeListener.apply(PlatformThread.sync(range), c -> {
|
SimpleChangeListener.apply(range, c -> {
|
||||||
|
|
||||||
var list = FXCollections.observableArrayList(c.keySet());
|
var list = FXCollections.observableArrayList(c.keySet());
|
||||||
if (!list.contains(null)) {
|
if (!list.contains(null)) {
|
||||||
list.add(null);
|
list.add(null);
|
||||||
}
|
}
|
||||||
cb.setItems(list);
|
cb.setItems(list);
|
||||||
});
|
});
|
||||||
PlatformThread.connect(value, cb.valueProperty());
|
|
||||||
|
cb.valueProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
|
value.setValue(newValue);
|
||||||
|
});
|
||||||
|
SimpleChangeListener.apply(value, val -> {
|
||||||
|
PlatformThread.runLaterIfNeeded(() -> cb.valueProperty().set(val));
|
||||||
|
});
|
||||||
|
|
||||||
cb.getStyleClass().add("choice-comp");
|
cb.getStyleClass().add("choice-comp");
|
||||||
return new SimpleCompStructure<>(cb);
|
return new SimpleCompStructure<>(cb);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import io.xpipe.fxcomps.Comp;
|
||||||
import io.xpipe.fxcomps.CompStructure;
|
import io.xpipe.fxcomps.CompStructure;
|
||||||
import io.xpipe.fxcomps.SimpleCompStructure;
|
import io.xpipe.fxcomps.SimpleCompStructure;
|
||||||
import io.xpipe.fxcomps.util.PlatformThread;
|
import io.xpipe.fxcomps.util.PlatformThread;
|
||||||
|
import io.xpipe.fxcomps.util.SimpleChangeListener;
|
||||||
import javafx.beans.property.Property;
|
import javafx.beans.property.Property;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
|
@ -65,7 +66,13 @@ public class ChoicePaneComp extends Comp<CompStructure<VBox>> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
PlatformThread.connect(selected, cb.valueProperty());
|
cb.valueProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
|
selected.setValue(newValue);
|
||||||
|
});
|
||||||
|
SimpleChangeListener.apply(selected, val -> {
|
||||||
|
PlatformThread.runLaterIfNeeded(() -> cb.valueProperty().set(val));
|
||||||
|
});
|
||||||
|
|
||||||
vbox.getStyleClass().add("choice-pane-comp");
|
vbox.getStyleClass().add("choice-pane-comp");
|
||||||
|
|
||||||
return new SimpleCompStructure<>(vbox);
|
return new SimpleCompStructure<>(vbox);
|
||||||
|
|
|
@ -3,9 +3,9 @@ package io.xpipe.extension.comp;
|
||||||
import com.jfoenix.controls.JFXTooltip;
|
import com.jfoenix.controls.JFXTooltip;
|
||||||
import io.xpipe.extension.I18n;
|
import io.xpipe.extension.I18n;
|
||||||
import io.xpipe.fxcomps.CompStructure;
|
import io.xpipe.fxcomps.CompStructure;
|
||||||
import io.xpipe.fxcomps.Shortcuts;
|
|
||||||
import io.xpipe.fxcomps.augment.Augment;
|
import io.xpipe.fxcomps.augment.Augment;
|
||||||
import io.xpipe.fxcomps.util.PlatformThread;
|
import io.xpipe.fxcomps.util.PlatformThread;
|
||||||
|
import io.xpipe.fxcomps.util.Shortcuts;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.scene.layout.Region;
|
import javafx.scene.layout.Region;
|
||||||
|
|
|
@ -3,6 +3,7 @@ package io.xpipe.extension.comp;
|
||||||
import io.xpipe.fxcomps.Comp;
|
import io.xpipe.fxcomps.Comp;
|
||||||
import io.xpipe.fxcomps.CompStructure;
|
import io.xpipe.fxcomps.CompStructure;
|
||||||
import io.xpipe.fxcomps.util.PlatformThread;
|
import io.xpipe.fxcomps.util.PlatformThread;
|
||||||
|
import io.xpipe.fxcomps.util.SimpleChangeListener;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.property.Property;
|
import javafx.beans.property.Property;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
|
@ -41,7 +42,14 @@ public class FilterComp extends Comp<FilterComp.Structure> {
|
||||||
var bgLabel = new Label("Search ...", fi);
|
var bgLabel = new Label("Search ...", fi);
|
||||||
bgLabel.getStyleClass().add("background");
|
bgLabel.getStyleClass().add("background");
|
||||||
var filter = new TextField();
|
var filter = new TextField();
|
||||||
PlatformThread.connect(filterText, filter.textProperty());
|
|
||||||
|
SimpleChangeListener.apply(filterText, val -> {
|
||||||
|
PlatformThread.runLaterIfNeeded(() -> filter.setText(val));
|
||||||
|
});
|
||||||
|
filter.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
|
filterText.setValue(newValue);
|
||||||
|
});
|
||||||
|
|
||||||
bgLabel.visibleProperty().bind(Bindings.createBooleanBinding(() -> (filter.getText() == null || filter.getText().isEmpty()),
|
bgLabel.visibleProperty().bind(Bindings.createBooleanBinding(() -> (filter.getText() == null || filter.getText().isEmpty()),
|
||||||
filter.textProperty(), filter.focusedProperty()));
|
filter.textProperty(), filter.focusedProperty()));
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import io.xpipe.core.util.SecretValue;
|
||||||
import io.xpipe.extension.I18n;
|
import io.xpipe.extension.I18n;
|
||||||
import io.xpipe.extension.comp.*;
|
import io.xpipe.extension.comp.*;
|
||||||
import io.xpipe.fxcomps.Comp;
|
import io.xpipe.fxcomps.Comp;
|
||||||
|
import io.xpipe.fxcomps.CompStructure;
|
||||||
import javafx.beans.property.Property;
|
import javafx.beans.property.Property;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
|
@ -18,7 +19,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class DynamicOptionsBuilder<T> {
|
public class DynamicOptionsBuilder {
|
||||||
|
|
||||||
private final List<DynamicOptionsComp.Entry> entries = new ArrayList<>();
|
private final List<DynamicOptionsComp.Entry> entries = new ArrayList<>();
|
||||||
private final List<Property<?>> props = new ArrayList<>();
|
private final List<Property<?>> props = new ArrayList<>();
|
||||||
|
@ -41,35 +42,35 @@ public class DynamicOptionsBuilder<T> {
|
||||||
this.wrap = false;
|
this.wrap = false;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
public DynamicOptionsBuilder<T> addTitle(String titleKey) {
|
public DynamicOptionsBuilder addTitle(String titleKey) {
|
||||||
return addTitle(I18n.observable(titleKey));
|
return addTitle(I18n.observable(titleKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addTitle(ObservableValue<String> title) {
|
public DynamicOptionsBuilder addTitle(ObservableValue<String> title) {
|
||||||
entries.add(new DynamicOptionsComp.Entry(null, Comp.of(() -> new Label(title.getValue())).styleClass("title-header")));
|
entries.add(new DynamicOptionsComp.Entry(null, Comp.of(() -> new Label(title.getValue())).styleClass("title-header")));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> makeLazy() {
|
public DynamicOptionsBuilder makeLazy() {
|
||||||
var p = props.get(props.size() - 1);
|
var p = props.get(props.size() - 1);
|
||||||
props.remove(p);
|
props.remove(p);
|
||||||
lazyProperties.add(p);
|
lazyProperties.add(p);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> decorate(Check c) {
|
public DynamicOptionsBuilder decorate(Check c) {
|
||||||
|
|
||||||
entries.get(entries.size() - 1).comp().apply(s -> c.decorates(s.get()));
|
entries.get(entries.size() - 1).comp().apply(s -> c.decorates(s.get()));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> nonNull(Validator v) {
|
public DynamicOptionsBuilder nonNull(Validator v) {
|
||||||
var e = entries.get(entries.size() - 1);
|
var e = entries.get(entries.size() - 1);
|
||||||
var p = props.get(props.size() - 1);
|
var p = props.get(props.size() - 1);
|
||||||
return decorate(Validators.nonNull(v, e.name(), p));
|
return decorate(Validators.nonNull(v, e.name(), p));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addNewLine(Property<NewLine> prop) {
|
public DynamicOptionsBuilder addNewLine(Property<NewLine> prop) {
|
||||||
var map = new LinkedHashMap<NewLine, ObservableValue<String>>();
|
var map = new LinkedHashMap<NewLine, ObservableValue<String>>();
|
||||||
for (var e : NewLine.values()) {
|
for (var e : NewLine.values()) {
|
||||||
map.put(e, I18n.observable("extension." + e.getId()));
|
map.put(e, I18n.observable("extension." + e.getId()));
|
||||||
|
@ -80,63 +81,63 @@ public class DynamicOptionsBuilder<T> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addCharacter(Property<Character> prop, ObservableValue<String> name, Map<Character, ObservableValue<String>> names) {
|
public DynamicOptionsBuilder addCharacter(Property<Character> prop, ObservableValue<String> name, Map<Character, ObservableValue<String>> names) {
|
||||||
var comp = new CharChoiceComp(prop, names, null);
|
var comp = new CharChoiceComp(prop, names, null);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addCharacter(Property<Character> prop, ObservableValue<String> name, Map<Character, ObservableValue<String>> names, ObservableValue<String> customName) {
|
public DynamicOptionsBuilder addCharacter(Property<Character> prop, ObservableValue<String> name, Map<Character, ObservableValue<String>> names, ObservableValue<String> customName) {
|
||||||
var comp = new CharChoiceComp(prop, names, customName);
|
var comp = new CharChoiceComp(prop, names, customName);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <V> DynamicOptionsBuilder<T> addToggle(Property<V> prop, ObservableValue<String> name, Map<V, ObservableValue<String>> names) {
|
public <V> DynamicOptionsBuilder addToggle(Property<V> prop, ObservableValue<String> name, Map<V, ObservableValue<String>> names) {
|
||||||
var comp = new ToggleGroupComp<>(prop, names);
|
var comp = new ToggleGroupComp<>(prop, names);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <V> DynamicOptionsBuilder<T> addChoice(Property<V> prop, ObservableValue<String> name, Map<V, ObservableValue<String>> names) {
|
public <V> DynamicOptionsBuilder addChoice(Property<V> prop, ObservableValue<String> name, Map<V, ObservableValue<String>> names) {
|
||||||
var comp = new ChoiceComp<>(prop, names);
|
var comp = new ChoiceComp<>(prop, names);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <V> DynamicOptionsBuilder<T> addChoice(Property<V> prop, ObservableValue<String> name, ObservableValue<Map<V, ObservableValue<String>>> names) {
|
public <V> DynamicOptionsBuilder addChoice(Property<V> prop, ObservableValue<String> name, ObservableValue<Map<V, ObservableValue<String>>> names) {
|
||||||
var comp = new ChoiceComp<>(prop, names);
|
var comp = new ChoiceComp<>(prop, names);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addCharset(Property<StreamCharset> prop) {
|
public DynamicOptionsBuilder addCharset(Property<StreamCharset> prop) {
|
||||||
var comp = new CharsetChoiceComp(prop);
|
var comp = new CharsetChoiceComp(prop);
|
||||||
entries.add(new DynamicOptionsComp.Entry(I18n.observable("extension.charset"), comp));
|
entries.add(new DynamicOptionsComp.Entry(I18n.observable("extension.charset"), comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addStringArea(String nameKey, Property<String> prop) {
|
public DynamicOptionsBuilder addStringArea(String nameKey, Property<String> prop) {
|
||||||
var comp = new TextAreaComp(prop);
|
var comp = new TextAreaComp(prop);
|
||||||
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addString(String nameKey, Property<String> prop) {
|
public DynamicOptionsBuilder addString(String nameKey, Property<String> prop) {
|
||||||
var comp = new TextFieldComp(prop);
|
var comp = new TextFieldComp(prop);
|
||||||
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addLazyString(String nameKey, Property<String> prop, Property<String> lazy) {
|
public DynamicOptionsBuilder addLazyString(String nameKey, Property<String> prop, Property<String> lazy) {
|
||||||
var comp = new TextFieldComp(prop, lazy);
|
var comp = new TextFieldComp(prop, lazy);
|
||||||
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
|
@ -144,50 +145,50 @@ public class DynamicOptionsBuilder<T> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addString(ObservableValue<String> name, Property<String> prop) {
|
public DynamicOptionsBuilder addString(ObservableValue<String> name, Property<String> prop) {
|
||||||
var comp = new TextFieldComp(prop);
|
var comp = new TextFieldComp(prop);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addComp(Comp<?> comp) {
|
public DynamicOptionsBuilder addComp(Comp<?> comp) {
|
||||||
return addComp((ObservableValue<String>) null, comp, null);
|
return addComp((ObservableValue<String>) null, comp, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addComp(Comp<?> comp, Property<?> prop) {
|
public DynamicOptionsBuilder addComp(Comp<?> comp, Property<?> prop) {
|
||||||
return addComp((ObservableValue<String>) null, comp, prop);
|
return addComp((ObservableValue<String>) null, comp, prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addComp(String nameKey, Comp<?> comp, Property<?> prop) {
|
public DynamicOptionsBuilder addComp(String nameKey, Comp<?> comp, Property<?> prop) {
|
||||||
return addComp(I18n.observable(nameKey), comp, prop);
|
return addComp(I18n.observable(nameKey), comp, prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addComp(ObservableValue<String> name, Comp<?> comp, Property<?> prop) {
|
public DynamicOptionsBuilder addComp(ObservableValue<String> name, Comp<?> comp, Property<?> prop) {
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addSecret(String nameKey, Property<SecretValue> prop) {
|
public DynamicOptionsBuilder addSecret(String nameKey, Property<SecretValue> prop) {
|
||||||
return addSecret(I18n.observable(nameKey), prop);
|
return addSecret(I18n.observable(nameKey), prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addSecret(ObservableValue<String> name, Property<SecretValue> prop) {
|
public DynamicOptionsBuilder addSecret(ObservableValue<String> name, Property<SecretValue> prop) {
|
||||||
var comp = new SecretFieldComp(prop);
|
var comp = new SecretFieldComp(prop);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addInteger(ObservableValue<String> name, Property<Integer> prop) {
|
public DynamicOptionsBuilder addInteger(ObservableValue<String> name, Property<Integer> prop) {
|
||||||
var comp = new IntFieldComp(prop);
|
var comp = new IntFieldComp(prop);
|
||||||
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
entries.add(new DynamicOptionsComp.Entry(name, comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicOptionsBuilder<T> addInteger(String nameKey, Property<Integer> prop) {
|
public DynamicOptionsBuilder addInteger(String nameKey, Property<Integer> prop) {
|
||||||
var comp = new IntFieldComp(prop);
|
var comp = new IntFieldComp(prop);
|
||||||
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
entries.add(new DynamicOptionsComp.Entry(I18n.observable(nameKey), comp));
|
||||||
props.add(prop);
|
props.add(prop);
|
||||||
|
@ -195,7 +196,7 @@ public class DynamicOptionsBuilder<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final <V extends T> DynamicOptionsBuilder<T> bind(Supplier<V> creator, Property<T>... toSet) {
|
public final <T, V extends T> DynamicOptionsBuilder bind(Supplier<V> creator, Property<T>... toSet) {
|
||||||
props.forEach(prop -> {
|
props.forEach(prop -> {
|
||||||
prop.addListener((c, o, n) -> {
|
prop.addListener((c, o, n) -> {
|
||||||
for (Property<T> p : toSet) {
|
for (Property<T> p : toSet) {
|
||||||
|
@ -209,7 +210,7 @@ public class DynamicOptionsBuilder<T> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <V extends T> DynamicOptionsBuilder<T> bindLazy(Supplier<V> creator, Property<T> toLazySet) {
|
public <T, V extends T> DynamicOptionsBuilder bindLazy(Supplier<V> creator, Property<T> toLazySet) {
|
||||||
lazyProperties.forEach(prop -> {
|
lazyProperties.forEach(prop -> {
|
||||||
prop.addListener((c,o,n) -> {
|
prop.addListener((c,o,n) -> {
|
||||||
toLazySet.setValue(creator.get());
|
toLazySet.setValue(creator.get());
|
||||||
|
@ -220,7 +221,7 @@ public class DynamicOptionsBuilder<T> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final <V extends T> DynamicOptionsBuilder<T> bindChoice(Supplier<Property<? extends V>> creator, Property<T> toSet) {
|
public final <T, V extends T> DynamicOptionsBuilder bindChoice(Supplier<Property<? extends V>> creator, Property<T> toSet) {
|
||||||
props.forEach(prop -> {
|
props.forEach(prop -> {
|
||||||
prop.addListener((c,o,n) -> {
|
prop.addListener((c,o,n) -> {
|
||||||
toSet.unbind();
|
toSet.unbind();
|
||||||
|
@ -231,7 +232,7 @@ public class DynamicOptionsBuilder<T> {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Comp<?> buildComp() {
|
public Comp<? extends CompStructure<?>> buildComp() {
|
||||||
if (title != null) {
|
if (title != null) {
|
||||||
entries.add(0, new DynamicOptionsComp.Entry(null, Comp.of(() -> new Label(title.getValue())).styleClass("title-header")));
|
entries.add(0, new DynamicOptionsComp.Entry(null, Comp.of(() -> new Label(title.getValue())).styleClass("title-header")));
|
||||||
}
|
}
|
||||||
|
@ -239,7 +240,7 @@ public class DynamicOptionsBuilder<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public <V extends T> Region build() {
|
public Region build() {
|
||||||
return buildComp().createRegion();
|
return buildComp().createRegion();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue