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
							 |