summaryrefslogtreecommitdiff
path: root/indra/newview/llconfirmationmanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llconfirmationmanager.h')
-rw-r--r--indra/newview/llconfirmationmanager.h67
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