//////////////////////////////////////////////////////////////////////////////////////////////////// // NoesisGUI - http://www.noesisengine.com // Copyright (c) Noesis Technologies S.L. All Rights Reserved. //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __GUI_MULTIDATATRIGGER_H__ #define __GUI_MULTIDATATRIGGER_H__ #include #include #include #include namespace Noesis { class BaseSetter; class Condition; template class UICollection; typedef UICollection BaseSetterCollection; typedef UICollection ConditionCollection; NS_WARNING_PUSH NS_MSVC_WARNING_DISABLE(4251 4275) //////////////////////////////////////////////////////////////////////////////////////////////////// /// Represents a trigger that applies property values or performs actions when the bound data meets /// a set of conditions. /// /// A MultiDataTrigger object is similar to a MultiTrigger, except that the conditions of a /// MultiDataTrigger are based on property values of bound data instead of those of a UIElement. /// In a MultiDataTrigger, a condition is met when the property value of the data item matches the /// specified Value. You can then use setters or the *EnterActions* and *ExitActions* properties to /// apply changes or start actions when all of the conditions are met. /// /// http://msdn.microsoft.com/en-us/library/system.windows.multidatatrigger.aspx //////////////////////////////////////////////////////////////////////////////////////////////////// class NS_GUI_CORE_API MultiDataTrigger: public BaseTrigger { public: MultiDataTrigger(); ~MultiDataTrigger(); /// Gets a collection of Condition objects. Changes to property values are applied when all of /// the conditions in the collection are met. ConditionCollection* GetConditions() const; /// Gets a collection of Setter objects, which describe the property values to apply when all /// of the conditions of the MultiTrigger are met. BaseSetterCollection* GetSetters() const; /// From BaseTrigger //@{ void RegisterBindings(FrameworkElement* target, FrameworkElement* nameScope, bool skipTargetName, uint8_t priority) final; void UnregisterBindings(FrameworkElement* target) final; BaseComponent* FindValue(FrameworkElement* target, FrameworkElement* nameScope, DependencyObject* object, const DependencyProperty* dp, bool skipSourceName, bool skipTargetName) final; void Invalidate(FrameworkElement* target, FrameworkElement* nameScope, bool skipSourceName, bool skipTargetName, uint8_t priority) final; void Seal() override; //@} ConditionCollection* InternalGetConditions() const; // can return null BaseSetterCollection* InternalGetSetters() const; // can return null struct Listener; private: mutable Ptr mConditions; mutable Ptr mSetters; struct ListenerHashKeyInfo; typedef HashSet> Listeners; Listeners mListeners; NS_DECLARE_REFLECTION(MultiDataTrigger, BaseTrigger) }; NS_WARNING_POP } #endif