//////////////////////////////////////////////////////////////////////////////////////////////////// // NoesisGUI - http://www.noesisengine.com // Copyright (c) Noesis Technologies S.L. All Rights Reserved. //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __GUI_VALUESTORAGEMANAGER_H__ #define __GUI_VALUESTORAGEMANAGER_H__ #include #include #include namespace Noesis { class Type; class TypeClass; class BaseComponent; class DependencyObject; class DependencyProperty; class DependencyData; class PropertyMetadata; template class Ptr; struct StoredValue; class Expression; //////////////////////////////////////////////////////////////////////////////////////////////////// typedef bool (*ValidateValueCallback)(const void* value); typedef void* ValueStorage; //////////////////////////////////////////////////////////////////////////////////////////////////// /// Creates, destroys and assigns values to a ValueStorage. //////////////////////////////////////////////////////////////////////////////////////////////////// class NS_GUI_DEPENDENCYSYSTEM_API ValueStorageManager { public: virtual ~ValueStorageManager(); virtual ValueStorageManager* Clone() const = 0; virtual uint32_t Size() const = 0; virtual bool CheckType(const Type* type) const = 0; virtual bool CheckType(const Type* type, BaseComponent* value) const = 0; virtual bool Validate(ValidateValueCallback validate, BaseComponent* value) const = 0; virtual void Construct(ValueStorage* storage, const void* value) const = 0; virtual void Destroy(ValueStorage* storage) const = 0; virtual void* ToValue(const ValueStorage* storage) const = 0; virtual void Copy(void* dst, const void* value) const = 0; virtual void Copy(void* dst, BaseComponent* value) const = 0; virtual Ptr Box(const void* value) const = 0; virtual const void* GetValue(const DependencyObject* dob, const DependencyProperty* dp) const = 0; virtual const void* GetBaseValue(const DependencyObject* dob, const DependencyProperty* dp) const = 0; virtual bool IsSame(const void* left, const void* right) const = 0; virtual bool IsSame(const void* left, BaseComponent* right) const = 0; virtual void SetValue(DependencyObject* dob, const DependencyProperty* dp, const void* value, uint8_t priority, Expression* expression, const PropertyMetadata* metadata, Value::Destination destination) const = 0; void SetValueObject(DependencyObject* dob, const DependencyProperty* dp, BaseComponent* value, uint8_t priority, Expression* expression, const PropertyMetadata* metadata, Value::Destination destination) const; virtual void ClearAnimation(DependencyObject* dob, const DependencyProperty* dp) const = 0; virtual void CoerceValue(DependencyObject* dob, const DependencyProperty* dp, StoredValue* storedValue, const void* defaultValue, const PropertyMetadata* metadata) const = 0; void OverrideMetadata(const DependencyProperty* dp, const TypeClass* forType, PropertyMetadata* metadata) const; protected: virtual void SetValue(DependencyObject* dob, const DependencyProperty* dp, BaseComponent* value, uint8_t priority, Expression* expression, const PropertyMetadata* metadata, Value::Destination destination) const = 0; }; } #endif