diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSBooleanHolderEditor.java b/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSBooleanHolderEditor.java index bfb2f96df..945c20597 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSBooleanHolderEditor.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSBooleanHolderEditor.java @@ -61,6 +61,10 @@ public static class GSBooleanHolderAdder extends GSBooleanHolderEditor { public GSBooleanHolderAdder(GSTag parent) { super(parent, GSCheckBoxWithValue::new); + checkbox.addPropertyChangeListener(ReactorStatics.VALUE, (model, nva) -> { + if (nva != null) + model.getGenerics()[1].addHolder(model.getGeneric(), nva); + }); new GSHyperLink(this) { { addStyle("justify-content", "center"); diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSHolderEditor.java b/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSHolderEditor.java index e668db197..30458d896 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSHolderEditor.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSHolderEditor.java @@ -54,6 +54,10 @@ public static class GSHolderAdder extends GSHolderEditor { public GSHolderAdder(GSTag parent) { super(parent, GSInputTextWithConversion::new); + input.addPropertyChangeListener(ReactorStatics.VALUE, (model, nva) -> { + if (nva != null) + model.getGenerics()[1].addHolder(model.getGeneric(), nva); + }); new GSHyperLink(this) { { addStyle("justify-content", "center"); diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSLinkEditor.java b/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSLinkEditor.java index e221f7782..b358229bf 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSLinkEditor.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/gs/GSLinkEditor.java @@ -14,8 +14,8 @@ import org.genericsystem.reactor.gstag.GSHyperLink; import org.genericsystem.reactor.model.GenericModel; -import javafx.beans.binding.Bindings; import javafx.beans.property.Property; +import javafx.beans.value.ChangeListener; public class GSLinkEditor extends GSSection { @@ -74,31 +74,21 @@ public static class GSLinkAdder extends GSLinkBuilder { public GSLinkAdder(GSTag parent) { super(parent, GSLinkComponentAdder::new); addStyle("height", "100%"); - new GSHyperLink(this) { - { - addStyle("justify-content", "center"); - addStyle("text-decoration", "none"); - addStyle("height", "100%"); - setText("+"); - bindStyle(ReactorStatics.DISPLAY, ReactorStatics.DISPLAY, model -> { - Property>> componentsList = getProperty(ReactorStatics.COMPONENTS, model); - return Bindings.createStringBinding(() -> { - List selectedGenerics = componentsList.getValue().stream().filter(obs -> obs.getValue() != null).map(obs -> obs.getValue().getGeneric()).filter(gen -> gen != null).collect(Collectors.toList()); - return selectedGenerics.size() + 1 == model.getGeneric().getComponents().size() ? "flex" : "none"; - }, componentsList.getValue().stream().toArray(Property[]::new)); - }); - bindAction(model -> { + addPostfixBinding(model -> { + Property>> selectedComponents = getProperty(ReactorStatics.COMPONENTS, model); + ChangeListener listener = (o, v, nva) -> { + List selectedGenerics = selectedComponents.getValue().stream().filter(obs -> obs.getValue() != null).map(obs -> obs.getValue().getGeneric()).filter(gen -> gen != null).collect(Collectors.toList()); + if (selectedGenerics.size() + 1 == model.getGeneric().getComponents().size()) { + selectedComponents.getValue().stream().forEach(sel -> sel.setValue(null)); try { - Property>> selectedComponents = getProperty(ReactorStatics.COMPONENTS, model); - List selectedGenerics = selectedComponents.getValue().stream().filter(obs -> obs.getValue() != null).map(obs -> obs.getValue().getGeneric()).filter(gen -> gen != null).collect(Collectors.toList()); - selectedComponents.getValue().stream().forEach(sel -> sel.setValue(null)); model.getGenerics()[1].setHolder(model.getGeneric(), null, selectedGenerics.stream().toArray(Generic[]::new)); } catch (RollbackException e) { e.printStackTrace(); } - }); - } - }; + } + }; + selectedComponents.getValue().forEach(component -> component.addListener(listener)); + }); } } } \ No newline at end of file