All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fxmisc.wellbehaved.event.EventSourceHelper Maven / Gradle / Ivy

package org.fxmisc.wellbehaved.event;

import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Node;
import javafx.scene.Scene;

public abstract class EventSourceHelper {

    public static 
    EventSourceHelper forNode(T node, EventType eventType) {
        return new NodeHelper<>(node, eventType);
    }

    public static 
    EventSourceHelper forScene(Scene scene, EventType eventType) {
        return new SceneHelper<>(scene, eventType);
    }

    private final ObjectProperty> onEvent
            = new SimpleObjectProperty<>(EventHandlerHelper.empty());

    private final T source;

    EventSourceHelper(T eventSource, EventType eventType) {
        this.source = eventSource;
        onEvent.addListener((obs, oldHandler, newHandler) -> {
            if(oldHandler != EventHandlerHelper.empty()) {
                removeEventHandler(source, eventType, oldHandler);
            }

            if(newHandler != EventHandlerHelper.empty()) {
                addEventHandler(source, eventType, newHandler);
            }
        });
    }

    abstract  void addEventHandler(T source, EventType eventType, EventHandler handler);
    abstract  void removeEventHandler(T source, EventType eventType, EventHandler handler);

    public final ObjectProperty> onEventProperty() {
        return onEvent;
    }

    public final T getEventSource() {
        return source;
    }

    public final void dispose() {
        onEvent.set(EventHandlerHelper.empty());
    }
}

class NodeHelper extends EventSourceHelper {

    NodeHelper(T node, EventType eventType) {
        super(node, eventType);
    }

    @Override
     void addEventHandler(T node, EventType eventType,
            EventHandler handler) {
        node.addEventHandler(eventType, handler);
    }

    @Override
     void removeEventHandler(T node, EventType eventType,
            EventHandler handler) {
        node.removeEventHandler(eventType, handler);
    }
}

class SceneHelper extends EventSourceHelper {

    SceneHelper(Scene scene, EventType eventType) {
        super(scene, eventType);
    }

    @Override
     void addEventHandler(Scene scene,
            EventType eventType, EventHandler handler) {
        scene.addEventHandler(eventType, handler);
    }

    @Override
     void removeEventHandler(Scene scene,
            EventType eventType, EventHandler handler) {
        scene.removeEventHandler(eventType, handler);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy