Skip to content

Commit

Permalink
merge
Browse files Browse the repository at this point in the history
  • Loading branch information
nfeybesse committed Aug 23, 2016
1 parent 7bfe565 commit 9a5af34
Show file tree
Hide file tree
Showing 9 changed files with 289 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.genericsystem.reactor.gs.GSEditor;
import org.genericsystem.reactor.gs.GSHeader;
import org.genericsystem.reactor.gs.GSLogo;
import org.genericsystem.reactor.gs.GSModal;
import org.genericsystem.reactor.gs.GSMonitor;
import org.genericsystem.reactor.gs.GSTable;
import org.genericsystem.reactor.gs.SelectionDefaults;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import org.genericsystem.common.Generic;
import org.genericsystem.reactor.ReactorStatics;
import org.genericsystem.reactor.Tag;
import org.genericsystem.reactor.HtmlDomNode;
import org.genericsystem.reactor.HtmlDomNode.ActionHtmlNode;
import org.genericsystem.reactor.gs.GSSection;
import org.genericsystem.reactor.gs.GSTag;
import org.genericsystem.reactor.model.GenericModel;
Expand All @@ -25,25 +27,13 @@ public GSModalButton(GSTag parent, GSSection gSection) {

}

@Override
protected Tag<GenericModel>.HtmlDomNode createNode(String parentId) {
return new ActionHtmlNode(parentId);
}

public void bindAction(Consumer<GenericModel> consumer) {
addActionBinding(ActionHtmlNode::getActionProperty, consumer);
}

public List<ObservableValue<Boolean>> getInvalidList(GenericModel model) {
return this.<List<ObservableValue<Boolean>>> getProperty(ReactorStatics.INVALID_LIST, model).getValue();
}

public Map<Generic, Property<Serializable>> getHoldersMap(GenericModel model) {
return this.<Map<Generic, Property<Serializable>>> getProperty(ReactorStatics.HOLDERS_MAP, model).getValue();
}

public Map<Generic, List<Property<GenericModel>>> getComponentsMap(GenericModel model) {
return this.<Map<Generic, List<Property<GenericModel>>>> getProperty(ReactorStatics.COMPONENTS_MAP, model).getValue();
@Override
protected HtmlDomNode createNode(String parentId) {
return new ActionHtmlNode(parentId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,10 @@ public GSUserGuide(GSTag parent) {
new GSSection(this, FlexDirection.ROW) {
{
addStyle("justify-content", "center");
new GSButton(this) {
new GSModalButton(this, gSection) {
{
setText("User Guide");

addStyle("flex", "0 1 auto");

bindAction(model -> {
gSection.getProperty(ReactorStatics.DISPLAY, model).setValue("flex");
});
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,24 @@ default T getHolder(T attribute, T... targets) {

@SuppressWarnings("unchecked")
default ObservableValue<T> getObservableHolder(T attribute, T... targets) {
return Bindings.valueAt(getObservableHolders(attribute, targets), 0);
return new ObjectBinding<T>() {
{
bind(getObservableHolders(attribute, targets));
}

@Override
protected T computeValue() {
return getHolders(attribute, targets).first();
}

@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println("FINALIZE");
}
};
// Bindings.createObjectBinding(() -> getHolders(attribute, targets).first(), getObservableHolders(attribute, targets));// Bindings.valueAt(getObservableHolders(attribute, targets), 0);
}

@SuppressWarnings("unchecked")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package org.genericsystem.defaults.tools;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

import com.sun.javafx.collections.ObservableListWrapper;

import javafx.beans.Observable;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.util.Callback;

public class ObservableListWrapperExtended<E> extends ObservableListWrapper<E> implements ListChangeListener<E> {

private final BiConsumer<Integer, E> addBiConsumer;
private final ObservableList<E> external;
private final Consumer<Integer> removeConsumer;
private BindingHelperObserver<E> observer;

public final void bind() {
if (observer == null)
observer = new BindingHelperObserver<>(this);
external.addListener(observer);
}

public final void unbind() {
if (observer != null)
external.removeListener(observer);
observer = null;
}

public BiConsumer<Integer, E> getAddBiConsumer() {
return addBiConsumer;
}

public Consumer<Integer> getRemoveConsumer() {
return removeConsumer;
}

public static class BindingHelperObserver<E> implements ListChangeListener<E> {

private final WeakReference<ObservableListWrapperExtended<E>> ref;

public BindingHelperObserver(ObservableListWrapperExtended<E> transformationList) {
if (transformationList == null) {
throw new NullPointerException("Binding has to be specified.");
}
ref = new WeakReference<ObservableListWrapperExtended<E>>(transformationList);
}

@Override
public void onChanged(Change<? extends E> change) {
final ObservableListWrapperExtended<E> binding = ref.get();
if (binding == null) {
change.getList().removeListener(this);
} else {
binding.onChanged(change);
}

}

}

public ObservableListWrapperExtended(ObservableList<E> external, Callback<E, Observable[]> extractor) {
super(new ArrayList<>(), extractor);
this.external = external; // prevents of listener garbage collection
this.addBiConsumer = (index, src) -> add(index, src);
this.removeConsumer = index -> remove(index.intValue());
bind();
int i = 0;
beginChange();
for (E element : external)
getAddBiConsumer().accept(i++, element);
endChange();
}

@Override
public void onChanged(Change<? extends E> change) {
System.out.println("------------- onChange dans ObservableListWrapperExtended");
while (change.next()) {
beginChange();
if (change.wasPermutated()) {
assert false;// Not tested after
for (int i = change.getFrom(); i < change.getTo(); i++)
getRemoveConsumer().accept(change.getFrom());
int index = change.getFrom();
for (E source : change.getList().subList(change.getFrom(), change.getTo()))
getAddBiConsumer().accept(index++, source);
} else {
if (change.wasRemoved()) {
for (int i = 0; i < change.getRemovedSize(); i++)
getRemoveConsumer().accept(change.getFrom());
}
if (change.wasAdded()) {
int index = change.getFrom();
for (E source : change.getAddedSubList())
getAddBiConsumer().accept(index++, source);
}
}
endChange();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
public class GSSection extends GSTag {
private final FlexDirection direction;

public GSSection(GSTag parent) {
this(parent, FlexDirection.COLUMN);
}

public GSSection(GSTag parent, FlexDirection direction) {
super(parent, "section");
this.direction = direction;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@
public interface TextPropertyDefaults<M extends Model> {

public static final String TEXT = "text";
public static final String TEXT_BINDING = "binding";

<T> void storePropertyWithoutCheck(String propertyName, M model, Function<M, ObservableValue<T>> applyOnModel);

<T> void storeProperty(String propertyName, Function<M, ObservableValue<T>> applyOnModel);

void addPrefixBinding(Consumer<M> consumer);

<T> Property<T> getProperty(String property, Model model);

<T> ObservableValue<T> getObservableValue(String property, Model model);

default Property<String> getTextProperty(M model) {
storePropertyWithoutCheck(TEXT, model, m -> new SimpleStringProperty());
Property<String> text = getProperty(TEXT, model);
Expand All @@ -33,6 +38,7 @@ default void setText(String value) {
}

default void bindText(Function<M, ObservableValue<String>> applyOnModel) {
addPrefixBinding(model -> getTextProperty(model).bind(applyOnModel.apply(model)));
storeProperty(TEXT_BINDING, applyOnModel);
addPrefixBinding(model -> getTextProperty(model).bind(getObservableValue(TEXT_BINDING, model)));
}
}
1 change: 1 addition & 0 deletions gs-reactor/src/main/resources/reactor.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
html, body,input,section,header,footer {
margin: 0;
padding: 0;
border: 0;
}

body {
Expand Down
Loading

0 comments on commit 9a5af34

Please sign in to comment.