io.qt.core.QFloatProperty Maven / Gradle / Ivy
Show all versions of qtjambi Show documentation
/****************************************************************************
**
** Copyright (C) 2009-2024 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved.
**
** This file is part of Qt Jambi.
**
** ** $BEGIN_LICENSE$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
** $END_LICENSE$
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
package io.qt.core;
import io.qt.*;
/**
* QFloatProperty is primitive-typed version of QProperty<Float>.
* @see QProperty
*/
public final class QFloatProperty extends QFloatPropertyData {
static boolean checkType(QMetaType metaType){
return metaType!=null
&& (metaType.id()==QMetaType.Type.Float.value()
|| metaType.id()==QMetaType.Type.Double.value()
|| metaType.id()==QMetaType.Type.QVariant.value());
}
/**
* Constructs a float
-typed property.
*/
public QFloatProperty() {
super();
}
/**
* Constructs a float
-typed property with the provided initialValue.
* @param initialValue
*/
public QFloatProperty(float initialValue) {
super(initialValue);
}
/**
* Constructs a float
-typed property with the provided binding.
* @param binding
*/
public QFloatProperty(@StrictNonNull QFloatPropertyBinding binding) {
super();
d.setBinding(binding, this);
}
/**
* Constructs a float
-typed property with the provided binding.
* @param binding
*/
public QFloatProperty(@StrictNonNull QPropertyBinding<@NonNull@QtPrimitiveType Float> binding) {
super();
if(checkType(binding.valueMetaType()))
d.setBinding(binding, this);
}
/**
* Constructs a float
-typed property bound to the provided functor
.
* @param functor
*/
public QFloatProperty(io.qt.QtUtilities.@StrictNonNull FloatSupplier functor) {
this(new QFloatPropertyBinding(functor));
}
/**
* Returns the value of the property. This may evaluate a binding expression that is tied to this property, before returning the value.
* @return value
*/
@QtUninvokable
public float value()
{
if (d.hasBinding())
d.evaluateIfDirty(this);
d.registerWithCurrentlyEvaluatingBinding();
return this.getValueBypassingBindings();
}
/**
* Assigns newValue to this property and removes the property's associated binding, if present.
* @param newValue
*/
@QtUninvokable
public void setValue(float newValue)
{
d.removeBinding();
if (this.setValueBypassingBindings(newValue))
d.notifyObservers(this);
}
/**
* Associates the value of this property with the provided newBinding
expression and returns the previously associated binding.
* The first time the property value is read, the binding is evaluated.
* Whenever a dependency of the binding changes, the binding will be re-evaluated the next time the value of this property is read.
* @param newBinding
* @return oldBinding
*/
@QtUninvokable
public @NonNull QFloatPropertyBinding setBinding(@StrictNonNull QFloatPropertyBinding newBinding)
{
QUntypedPropertyBinding oldBinding = d.setBinding(newBinding, this);
d.notifyObservers(this);
if(oldBinding instanceof QFloatPropertyBinding)
return (QFloatPropertyBinding)oldBinding;
else
return new QFloatPropertyBinding(oldBinding);
}
/**
* Associates the value of this property with the provided newBinding
expression and returns the previously associated binding.
* The binding's value type ({@link QUntypedPropertyBinding#valueMetaType()}) has to be float
,
* otherwise the property remains unchanged.
* The first time the property value is read, the binding is evaluated.
* Whenever a dependency of the binding changes, the binding will be re-evaluated the next time the value of this property is read.
* @param newBinding
* @return oldBinding
*/
@QtUninvokable
public @NonNull QFloatPropertyBinding setBinding(@StrictNonNull QPropertyBinding<@NonNull@QtPrimitiveType Float> newBinding)
{
if(!io.qt.core.QFloatProperty.checkType(newBinding.valueMetaType()))
return new QFloatPropertyBinding();
QUntypedPropertyBinding oldBinding = d.setBinding(newBinding, this);
d.notifyObservers(this);
if(oldBinding instanceof QFloatPropertyBinding)
return (QFloatPropertyBinding)oldBinding;
else
return new QFloatPropertyBinding(oldBinding);
}
/**
* Associates the value of this property with the provided newBinding
expression.
* The binding's value type ({@link QUntypedPropertyBinding#valueMetaType()}) has to be float
,
* otherwise the property remains unchanged and the method returns false
.
* The first time the property value is read, the binding is evaluated.
* Whenever a dependency of the binding changes, the binding will be re-evaluated the next time the value of this property is read.
* Returns true if the type of this property is the same as the type the binding function returns; false otherwise.
* @param newBinding
* @return true if types match, false otherwise.
*/
@QtUninvokable
public boolean setBinding(@StrictNonNull QUntypedPropertyBinding newBinding)
{
if(io.qt.core.QFloatProperty.checkType(newBinding.valueMetaType())) {
d.setBinding(newBinding, this);
d.notifyObservers(this);
return true;
}else {
return false;
}
}
/**
* Associates the value of this property with the provided functor
and returns the previously associated binding.
* The first time the property value is read, the binding is evaluated by invoking {@link io.qt.QtUtilities.FloatSupplier#getAsFloat()} of functor
.
* Whenever a dependency of the binding changes, the binding will be re-evaluated the next time the value of this property is read.
* @param functor
* @return oldBinding
*/
@QtUninvokable
public @NonNull QFloatPropertyBinding setBinding(io.qt.QtUtilities.@StrictNonNull FloatSupplier functor)
{
return setBinding(new QFloatPropertyBinding(functor));
}
@QtUninvokable
private @NonNull QFloatPropertyBinding makeBinding()
{
return new QFloatPropertyBinding(this::value);
}
/**
* Disassociates the binding expression from this property and returns it.
* After calling this function, the value of the property will only change if you assign a new value to it, or when a new binding is set.
* @return the removed binding
*/
@QtUninvokable
public boolean hasBinding() { return d.hasBinding(); }
/**
* Returns the binding expression that is associated with this property.
* A default constructed {@link QFloatPropertyBinding} will be returned if no such association exists.
* @return binding
*/
@QtUninvokable
public @NonNull QFloatPropertyBinding binding()
{
return new QFloatPropertyBinding(this);
}
/**
* Disassociates the binding expression from this property and returns it.
* After calling this function, the value of the property will only change if you assign a new value to it, or when a new binding is set.
* @return the removed binding
*/
@QtUninvokable
public @NonNull QFloatPropertyBinding takeBinding()
{
return new QFloatPropertyBinding(d.setBinding(new QFloatPropertyBinding(), this));
}
/**
* Registers the given functor f as a callback that shall be called whenever the value of the property changes.
* The returned property change handler object keeps track of the registration.
* As long as the change handler is alive i.e. as long as a reference to the {@link QPropertyChangeHandler} instance exists,
* the callback remains installed. When the garbage collection deletes the instance, the callback is de-registered.
* @param f
* @return property change handler
* @see QPropertyChangeHandler
*/
@QtUninvokable
public @NonNull QPropertyChangeHandler onValueChanged(@StrictNonNull Runnable f)
{
return new QPropertyChangeHandler(d, f);
}
/**
* Subscribes the given functor f as a callback that is called immediately and whenever the value of the property changes in the future.
* @param f
* @return property change handler
* @see QPropertyChangeHandler
* @see #onValueChanged(Runnable)
*/
@QtUninvokable
public @NonNull QPropertyChangeHandler subscribe(@StrictNonNull Runnable f)
{
f.run();
return onValueChanged(f);
}
/**
* Registers the given functor f as a callback that shall be called whenever the value of the bindable changes.
* The returned property notifier object keeps track of the registration.
* As long as the notifier is alive i.e. as long as a reference to the {@link QPropertyNotifier} instance exists,
* the callback remains installed. When the garbage collection deletes the instance, the callback is de-registered.
* @param f
* @return property notifier
* @see QPropertyNotifier
*/
@io.qt.QtUninvokable
public @NonNull QPropertyNotifier addNotifier(@StrictNonNull Runnable f)
{
return new QPropertyNotifier(d, f);
}
@QtUninvokable
QPropertyBindingData bindingData() { return d; }
private final QPropertyBindingData d = new QPropertyBindingData();
}