67 lines
2.9 KiB
C++
67 lines
2.9 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// NoesisGUI - http://www.noesisengine.com
|
|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#ifndef __CORE_IMULTIVALUECONVERTER_H__
|
|
#define __CORE_IMULTIVALUECONVERTER_H__
|
|
|
|
|
|
#include <NsCore/Noesis.h>
|
|
#include <NsCore/Interface.h>
|
|
|
|
|
|
namespace Noesis
|
|
{
|
|
|
|
class BaseComponent;
|
|
template<class T> class Ptr;
|
|
template<class T> class ArrayRef;
|
|
template<class T> class BaseVector;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/// Provides a way to apply custom logic to a MultiBinding.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
NS_INTERFACE IMultiValueConverter: public Interface
|
|
{
|
|
/// Converts source values to a value for the binding target. The data binding engine calls
|
|
/// this method when it propagates the values from source bindings to the binding target.
|
|
///
|
|
/// Return *DependencyProperty.UnsetValue* to indicate that the converter produced no value and
|
|
/// that the fallback (if available) or default value should be used instead.
|
|
///
|
|
/// Return *Binding.DoNothing* to indicate that the binding should not transfer the value to the
|
|
/// target property or use the fallback or default value.
|
|
virtual bool TryConvert(ArrayRef<BaseComponent*> values, const Type* targetType,
|
|
BaseComponent* parameter, Ptr<BaseComponent>& result) = 0;
|
|
|
|
/// Converts a binding target value to the source binding values. The data binding engine calls
|
|
/// this method when it propagates a value from the binding to the sources.
|
|
///
|
|
/// If there are more return values than source bindings, the excess portion of return values
|
|
/// will be ignored. If there are more source bindings than return values, the remaining source
|
|
/// bindings will not have any value set to them.
|
|
///
|
|
/// Types of return values are not verified against targetTypes; the values will be set to
|
|
/// source bindings directly.
|
|
///
|
|
/// Returning *Binding.DoNothing* in position i indicates that no value should be set on the
|
|
/// source binding at index i.
|
|
///
|
|
/// Returning *DependencyProperty.UnsetValue* in position i indicates that the converter is
|
|
/// unable to provide a value to the source binding at index i, and no value will be set to it.
|
|
///
|
|
/// Returning *null* indicates that the conversion could not be performed at all, or that the
|
|
/// backward conversion direction is not supported by the converter.
|
|
virtual bool TryConvertBack(BaseComponent* value, ArrayRef<const Type*> targetTypes,
|
|
BaseComponent* parameter, BaseVector<Ptr<BaseComponent>>& results) = 0;
|
|
|
|
NS_IMPLEMENT_INLINE_REFLECTION_(IMultiValueConverter, Interface)
|
|
};
|
|
|
|
}
|
|
|
|
|
|
#endif
|