diff options
author | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
commit | 420b91db29485df39fd6e724e782c449158811cb (patch) | |
tree | b471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llconfirmationmanager.h |
Print done when done.
Diffstat (limited to 'indra/newview/llconfirmationmanager.h')
-rw-r--r-- | indra/newview/llconfirmationmanager.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/indra/newview/llconfirmationmanager.h b/indra/newview/llconfirmationmanager.h new file mode 100644 index 0000000000..3aa33774e5 --- /dev/null +++ b/indra/newview/llconfirmationmanager.h @@ -0,0 +1,67 @@ +/** + * @file llconfirmationmanager.h + * @brief LLConfirmationManager class definition + * + * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLCONFIRMATIONMANAGER_H +#define LL_LLCONFIRMATIONMANAGER_H + +class LLConfirmationManager +{ +public: + class ListenerBase + { + public: + virtual ~ListenerBase(); + virtual void confirmed(const std::string& password) = 0; + }; + + enum Type { TYPE_NONE, TYPE_CLICK, TYPE_PASSWORD }; + + static void confirm(Type type, + const std::string& purchase, ListenerBase* listener); + static void confirm(const std::string& type, + const std::string& purchase, ListenerBase* listener); + // note: these take control of, and delete the listener when done + + template <class T> + class Listener : public ListenerBase + { + public: + typedef void (T::*ConfirmationMemberFunction)(const std::string&); + + Listener(T& object, ConfirmationMemberFunction function) + : mObject(object), mFunction(function) + { } + + void confirmed(const std::string& password) + { + (mObject.*mFunction)(password); + } + + private: + T& mObject; + ConfirmationMemberFunction mFunction; + }; + + template <class T> + static void confirm(Type type, + const std::string& action, + T& obj, void(T::*func)(const std::string&)) + { + confirm(type, action, new Listener<T>(obj, func)); + } + + template <class T> + static void confirm(const std::string& type, + const std::string& action, + T& obj, void(T::*func)(const std::string&)) + { + confirm(type, action, new Listener<T>(obj, func)); + } +}; + +#endif |