| @@ -159,6 +159,15 @@ private: | |||||
| class ModalCallbackFunction | class ModalCallbackFunction | ||||
| { | { | ||||
| public: | public: | ||||
| /** This is a utility function to create a ModalComponentManager::Callback that will | |||||
| call a lambda function. | |||||
| The lambda that you supply must take an integer parameter, which is the result code that | |||||
| was returned when the modal component was dismissed. | |||||
| @see ModalComponentManager::Callback | |||||
| */ | |||||
| static ModalComponentManager::Callback* create (std::function<void(int)>); | |||||
| //============================================================================== | //============================================================================== | ||||
| /** This is a utility function to create a ModalComponentManager::Callback that will | /** This is a utility function to create a ModalComponentManager::Callback that will | ||||
| call a static function with a parameter. | call a static function with a parameter. | ||||
| @@ -185,18 +194,9 @@ public: | |||||
| static ModalComponentManager::Callback* create (void (*functionToCall) (int, ParamType), | static ModalComponentManager::Callback* create (void (*functionToCall) (int, ParamType), | ||||
| ParamType parameterValue) | ParamType parameterValue) | ||||
| { | { | ||||
| return new FunctionCaller1<ParamType> (functionToCall, parameterValue); | |||||
| return create ([=] (int r) { functionToCall (r, parameterValue); }); | |||||
| } | } | ||||
| /** This is a utility function to create a ModalComponentManager::Callback that will | |||||
| call a lambda function. | |||||
| The lambda that you supply must take an integer parameter, which is the result code that | |||||
| was returned when the modal component was dismissed. | |||||
| @see ModalComponentManager::Callback | |||||
| */ | |||||
| static ModalComponentManager::Callback* create (std::function<void(int)>); | |||||
| //============================================================================== | //============================================================================== | ||||
| /** This is a utility function to create a ModalComponentManager::Callback that will | /** This is a utility function to create a ModalComponentManager::Callback that will | ||||
| call a static function with two custom parameters. | call a static function with two custom parameters. | ||||
| @@ -224,7 +224,7 @@ public: | |||||
| ParamType1 parameterValue1, | ParamType1 parameterValue1, | ||||
| ParamType2 parameterValue2) | ParamType2 parameterValue2) | ||||
| { | { | ||||
| return new FunctionCaller2<ParamType1, ParamType2> (functionToCall, parameterValue1, parameterValue2); | |||||
| return create ([=] (int r) { functionToCall (r, parameterValue1, parameterValue2); }); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -254,7 +254,8 @@ public: | |||||
| static ModalComponentManager::Callback* forComponent (void (*functionToCall) (int, ComponentType*), | static ModalComponentManager::Callback* forComponent (void (*functionToCall) (int, ComponentType*), | ||||
| ComponentType* component) | ComponentType* component) | ||||
| { | { | ||||
| return new ComponentCaller1<ComponentType> (functionToCall, component); | |||||
| WeakReference<Component> comp (component); | |||||
| return create ([=] (int r) { functionToCall (r, static_cast<ComponentType*> (comp.get())); }); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -285,90 +286,13 @@ public: | |||||
| ComponentType* component, | ComponentType* component, | ||||
| ParamType param) | ParamType param) | ||||
| { | { | ||||
| return new ComponentCaller2<ComponentType, ParamType> (functionToCall, component, param); | |||||
| WeakReference<Component> comp (component); | |||||
| return create ([=] (int r) { functionToCall (r, static_cast<ComponentType*> (comp.get()), param); }); | |||||
| } | } | ||||
| private: | private: | ||||
| //============================================================================== | |||||
| template <typename ParamType> | |||||
| struct FunctionCaller1 : public ModalComponentManager::Callback | |||||
| { | |||||
| typedef void (*FunctionType) (int, ParamType); | |||||
| FunctionCaller1 (FunctionType& f, ParamType& p1) | |||||
| : function (f), param (p1) {} | |||||
| void modalStateFinished (int returnValue) override { function (returnValue, param); } | |||||
| private: | |||||
| const FunctionType function; | |||||
| ParamType param; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FunctionCaller1) | |||||
| }; | |||||
| template <typename ParamType1, typename ParamType2> | |||||
| struct FunctionCaller2 : public ModalComponentManager::Callback | |||||
| { | |||||
| typedef void (*FunctionType) (int, ParamType1, ParamType2); | |||||
| FunctionCaller2 (FunctionType& f, ParamType1& p1, ParamType2& p2) | |||||
| : function (f), param1 (p1), param2 (p2) {} | |||||
| void modalStateFinished (int returnValue) override { function (returnValue, param1, param2); } | |||||
| private: | |||||
| const FunctionType function; | |||||
| ParamType1 param1; | |||||
| ParamType2 param2; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FunctionCaller2) | |||||
| }; | |||||
| template <typename ComponentType> | |||||
| struct ComponentCaller1 : public ModalComponentManager::Callback | |||||
| { | |||||
| typedef void (*FunctionType) (int, ComponentType*); | |||||
| ComponentCaller1 (FunctionType& f, ComponentType* c) | |||||
| : function (f), comp (c) {} | |||||
| void modalStateFinished (int returnValue) override | |||||
| { | |||||
| function (returnValue, static_cast<ComponentType*> (comp.get())); | |||||
| } | |||||
| private: | |||||
| const FunctionType function; | |||||
| WeakReference<Component> comp; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComponentCaller1) | |||||
| }; | |||||
| template <typename ComponentType, typename ParamType1> | |||||
| struct ComponentCaller2 : public ModalComponentManager::Callback | |||||
| { | |||||
| typedef void (*FunctionType) (int, ComponentType*, ParamType1); | |||||
| ComponentCaller2 (FunctionType& f, ComponentType* c, ParamType1 p1) | |||||
| : function (f), comp (c), param1 (p1) {} | |||||
| void modalStateFinished (int returnValue) override | |||||
| { | |||||
| function (returnValue, static_cast<ComponentType*> (comp.get()), param1); | |||||
| } | |||||
| private: | |||||
| const FunctionType function; | |||||
| WeakReference<Component> comp; | |||||
| ParamType1 param1; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComponentCaller2) | |||||
| }; | |||||
| ModalCallbackFunction(); | |||||
| ~ModalCallbackFunction(); | |||||
| JUCE_DECLARE_NON_COPYABLE (ModalCallbackFunction) | |||||
| ModalCallbackFunction() = delete; | |||||
| ~ModalCallbackFunction() = delete; | |||||
| }; | }; | ||||
| } // namespace juce | } // namespace juce | ||||