Implement drains and small fixes

This commit is contained in:
Christopher Schnick committed 2022-11-01 08:01:33 +01:00
1 parent a0c008ab3b
commit 3c72078d2b
14 files changed
+250 -36

No files matched your search

@@ -2,6 +2,7 @@ package io.xpipe.extension;
import io.xpipe.core.store.DataStore;
import io.xpipe.extension.event.ErrorEvent;
import javafx.beans.value.ObservableValue;
import javafx.scene.layout.Region;
import java.util.ArrayList;
@@ -40,7 +41,7 @@ public interface DataStoreActionProvider<T extends DataStore> {
default void applyToRegion(T store, Region region) {}
String getName(T store);
ObservableValue<String> getName(T store);
String getIcon(T store);
@@ -4,6 +4,7 @@ import io.xpipe.core.store.DataFlow;
import io.xpipe.extension.I18n;
import io.xpipe.fxcomps.SimpleComp;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.scene.layout.Region;
import lombok.EqualsAndHashCode;
@@ -24,7 +25,7 @@ public class DataStoreFlowChoiceComp extends SimpleComp {
map.put(DataFlow.INPUT, I18n.observable("extension.input"));
map.put(DataFlow.OUTPUT, I18n.observable("extension.output"));
map.put(DataFlow.INPUT_OUTPUT, I18n.observable("extension.inout"));
return new ToggleGroupComp<>(selected, map)
return new ToggleGroupComp<>(selected, new SimpleObjectProperty<>(map))
.apply(struc -> {
new FancyTooltipAugment<>("extension.inputDescription")
.augment(struc.get().getChildren().get(0));
@@ -4,6 +4,7 @@ import io.xpipe.fxcomps.Comp;
import io.xpipe.fxcomps.CompStructure;
import io.xpipe.fxcomps.SimpleCompStructure;
import io.xpipe.fxcomps.util.PlatformThread;
import io.xpipe.fxcomps.util.SimpleChangeListener;
import javafx.beans.property.Property;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.ToggleButton;
@@ -15,9 +16,9 @@ import java.util.Map;
public class ToggleGroupComp<T> extends Comp<CompStructure<HBox>> {
private final Property<T> value;
private final Map<T, ObservableValue<String>> range;
private final ObservableValue<Map<T, ObservableValue<String>>> range;
public ToggleGroupComp(Property<T> value, Map<T, ObservableValue<String>> range) {
public ToggleGroupComp(Property<T> value, ObservableValue<Map<T, ObservableValue<String>>> range) {
this.value = value;
this.range = range;
}
@@ -27,29 +28,36 @@ public class ToggleGroupComp<T> extends Comp<CompStructure<HBox>> {
var box = new HBox();
box.getStyleClass().add("toggle-group-comp");
ToggleGroup group = new ToggleGroup();
for (var entry : range.entrySet()) {
var b = new ToggleButton(entry.getValue().getValue());
b.setOnAction(e -> {
value.setValue(entry.getKey());
e.consume();
});
box.getChildren().add(b);
b.setToggleGroup(group);
value.addListener((c, o, n) -> {
PlatformThread.runLaterIfNeeded(() -> b.setSelected(entry.equals(n)));
});
if (entry.getKey().equals(value.getValue())) {
b.setSelected(true);
SimpleChangeListener.apply(PlatformThread.sync(range), val -> {
if (!val.containsKey(value.getValue())) {
this.value.setValue(null);
}
}
if (box.getChildren().size() > 0) {
box.getChildren().get(0).getStyleClass().add("first");
for (int i = 1; i < box.getChildren().size() - 1; i++) {
box.getChildren().get(i).getStyleClass().add("center");
box.getChildren().clear();
for (var entry : val.entrySet()) {
var b = new ToggleButton(entry.getValue().getValue());
b.setOnAction(e -> {
value.setValue(entry.getKey());
e.consume();
});
box.getChildren().add(b);
b.setToggleGroup(group);
value.addListener((c, o, n) -> {
PlatformThread.runLaterIfNeeded(() -> b.setSelected(entry.equals(n)));
});
if (entry.getKey().equals(value.getValue())) {
b.setSelected(true);
}
}
box.getChildren().get(box.getChildren().size() - 1).getStyleClass().add("last");
}
if (box.getChildren().size() > 0) {
box.getChildren().get(0).getStyleClass().add("first");
for (int i = 1; i < box.getChildren().size() - 1; i++) {
box.getChildren().get(i).getStyleClass().add("center");
}
box.getChildren().get(box.getChildren().size() - 1).getStyleClass().add("last");
}
});
group.selectedToggleProperty().addListener((obsVal, oldVal, newVal) -> {
if (newVal == null) oldVal.setSelected(true);
@@ -7,26 +7,30 @@ import io.xpipe.extension.util.Validatable;
import io.xpipe.extension.util.Validator;
import io.xpipe.extension.util.Validators;
import io.xpipe.fxcomps.SimpleComp;
import io.xpipe.fxcomps.util.PlatformThread;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.layout.Region;
import lombok.EqualsAndHashCode;
import lombok.Value;
import net.synedra.validatorfx.Check;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Value
@EqualsAndHashCode(callSuper = true)
public class WriteModeChoiceComp extends SimpleComp implements Validatable {
Property<WriteMode> selected;
List<WriteMode> available;
ObservableList<WriteMode> available;
Validator validator = new SimpleValidator();
Check check;
public WriteModeChoiceComp(Property<WriteMode> selected, List<WriteMode> available) {
public WriteModeChoiceComp(Property<WriteMode> selected, ObservableList<WriteMode> available) {
this.selected = selected;
this.available = available;
if (available.size() == 1) {
@@ -38,11 +42,19 @@ public class WriteModeChoiceComp extends SimpleComp implements Validatable {
@Override
protected Region createSimple() {
var a = available;
var map = new LinkedHashMap<WriteMode, ObservableValue<String>>();
Property<Map<WriteMode, ObservableValue<String>>> map = new SimpleObjectProperty<>(new LinkedHashMap<WriteMode, ObservableValue<String>>());
for (WriteMode writeMode : a) {
map.put(writeMode,I18n.observable(writeMode.getId()));
map.getValue().put(writeMode,I18n.observable(writeMode.getId()));
}
PlatformThread.sync(available).addListener((ListChangeListener<? super WriteMode>) c -> {
var newMap = new LinkedHashMap<WriteMode, ObservableValue<String>>();
for (WriteMode writeMode : a) {
newMap.put(writeMode,I18n.observable(writeMode.getId()));
}
map.setValue(newMap);
});
return new ToggleGroupComp<>(selected, map)
.apply(struc -> {
for (int i = 0; i < a.size(); i++) {
@@ -8,6 +8,7 @@ import io.xpipe.extension.comp.*;
import io.xpipe.fxcomps.Comp;
import io.xpipe.fxcomps.CompStructure;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.Label;
import javafx.scene.layout.Region;
@@ -95,7 +96,7 @@ public class DynamicOptionsBuilder {
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, new SimpleObjectProperty<>(names));
entries.add(new DynamicOptionsComp.Entry(name, comp));
props.add(prop);
return this;
@@ -32,6 +32,7 @@ public class ExpectHelper {
return String.format("""
echo(false)
if spawn(%s) then
expect(":")
sendln("%s")
echo(true)
end