mirror of
https://github.com/aNNiMON/HotaruFX.git
synced 2024-09-19 14:14:21 +03:00
Add enum to string property converter
This commit is contained in:
parent
112af1df83
commit
5e403681a2
@ -1,13 +1,21 @@
|
|||||||
package com.annimon.hotarufx.visual.objects;
|
package com.annimon.hotarufx.visual.objects;
|
||||||
|
|
||||||
|
import com.annimon.hotarufx.exceptions.HotaruRuntimeException;
|
||||||
import com.annimon.hotarufx.visual.PropertyBindings;
|
import com.annimon.hotarufx.visual.PropertyBindings;
|
||||||
import com.annimon.hotarufx.visual.PropertyTimeline;
|
import com.annimon.hotarufx.visual.PropertyTimeline;
|
||||||
import com.annimon.hotarufx.visual.PropertyTimelineHolder;
|
import com.annimon.hotarufx.visual.PropertyTimelineHolder;
|
||||||
import com.annimon.hotarufx.visual.TimeLine;
|
import com.annimon.hotarufx.visual.TimeLine;
|
||||||
import com.annimon.hotarufx.visual.visitors.NodeVisitor;
|
import com.annimon.hotarufx.visual.visitors.NodeVisitor;
|
||||||
|
import java.util.EnumSet;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import javafx.beans.property.ObjectProperty;
|
||||||
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
import javafx.beans.value.WritableValue;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
|
import javafx.util.StringConverter;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import lombok.val;
|
||||||
import static com.annimon.hotarufx.visual.PropertyType.*;
|
import static com.annimon.hotarufx.visual.PropertyType.*;
|
||||||
|
|
||||||
public abstract class ObjectNode {
|
public abstract class ObjectNode {
|
||||||
@ -136,5 +144,33 @@ public abstract class ObjectNode {
|
|||||||
.add("layoutY", NUMBER, this::layoutYProperty);
|
.add("layoutY", NUMBER, this::layoutYProperty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected <T extends Enum<T>> Supplier<WritableValue<String>> enumToString(Class<T> enumClass, ObjectProperty<T> property) {
|
||||||
|
return () -> {
|
||||||
|
val stringProperty = new SimpleStringProperty();
|
||||||
|
stringProperty.bindBidirectional(property, new StringConverter<T>() {
|
||||||
|
@Override
|
||||||
|
public String toString(T object) {
|
||||||
|
return object.name();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T fromString(String string) {
|
||||||
|
try {
|
||||||
|
return Enum.valueOf(enumClass, string);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
try {
|
||||||
|
val number = (int) Double.parseDouble(string);
|
||||||
|
return enumClass.cast(EnumSet.allOf(enumClass).toArray()[number]);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new HotaruRuntimeException("No constant " + string
|
||||||
|
+ " for type " + enumClass.getSimpleName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return stringProperty;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public abstract <R, T> R accept(NodeVisitor<R, T> visitor, T input);
|
public abstract <R, T> R accept(NodeVisitor<R, T> visitor, T input);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user