/*******************************************************************************
* Copyright (c) 2013 BREDEX GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.rc.javafx.components;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.value.WeakChangeListener;
import javafx.collections.ObservableList;
import javafx.event.EventTarget;
import javafx.scene.Node;
import org.eclipse.jubula.rc.common.components.AUTComponent;
/**
* Wrapper for concrete JavaFX components.
*
* @author BREDEX GmbH
* @created 10.10.2013
*/
public class JavaFXComponent extends AUTComponent<EventTarget> {
/**
* create an instance from a JavaFX component. This constructor is used when
* working with real instances.
*
* @param component
* the JavaFX component
*/
public JavaFXComponent(EventTarget component) {
super(component);
addChangeListener(component);
}
/**
* Add a change Listener
*
* @param component
* the component
*/
public void addChangeListener(EventTarget component) {
if (component instanceof Node) {
((Node)component).visibleProperty()
.addListener(new WeakChangeListener<Boolean>(
VisibleChangeHandler.INSTACE));
}
Object children = ChildrenGetter.getAsRealType(component);
if (children instanceof ReadOnlyObjectProperty) {
ChildrenListenerHelper.addListener(
(ReadOnlyObjectProperty<? extends EventTarget>) children);
} else if (children instanceof ObservableList) {
ChildrenListenerHelper.addListener(
(ObservableList<? extends EventTarget>) children);
}
}
/**
* Remove a change Listener
*/
public void removeChangeListener() {
Object children = ChildrenGetter.getAsRealType(getComponent());
EventTarget component = getComponent();
if (component instanceof Node) {
((Node)component).visibleProperty()
.removeListener(VisibleChangeHandler.INSTACE);
}
if (children instanceof ObjectProperty) {
ChildrenListenerHelper.removeListener(
(ObjectProperty<? extends EventTarget>) children);
} else if (children instanceof ObservableList) {
ChildrenListenerHelper.removeListener(
(ObservableList<? extends EventTarget>) children);
}
}
}