summaryrefslogtreecommitdiffstats
path: root/gui/twmsg.h
diff options
context:
space:
mode:
Diffstat (limited to 'gui/twmsg.h')
-rw-r--r--gui/twmsg.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/gui/twmsg.h b/gui/twmsg.h
new file mode 100644
index 000000000..cd035d1f5
--- /dev/null
+++ b/gui/twmsg.h
@@ -0,0 +1,97 @@
+/*
+ Copyright 2015 _that/TeamWin
+ This file is part of TWRP/TeamWin Recovery Project.
+
+ TWRP is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ TWRP is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with TWRP. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef twmsg_h
+#define twmsg_h
+
+#include <cstdlib>
+#include <cstring>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <errno.h>
+
+/*
+Abstract interface for something that can look up strings by name.
+*/
+class StringLookup
+{
+public:
+ virtual std::string operator()(const std::string& name) const = 0;
+ virtual ~StringLookup() {};
+};
+
+
+namespace msg
+{
+ // These get translated to colors in the GUI console
+ enum Kind
+ {
+ kNormal,
+ kHighlight,
+ kWarning,
+ kError
+ };
+
+
+ template<typename T> std::string to_string(const T& v)
+ {
+ std::ostringstream ss;
+ ss << v;
+ return ss.str();
+ }
+}
+
+
+/*
+Generic message formatting class.
+Designed to decouple message generation from actual resource string lookup and variable insertion,
+so that messages can be re-translated at any later time.
+*/
+class Message
+{
+ msg::Kind kind; // severity or similar message kind
+ std::string name; // the resource string name. may be of format "name=default value".
+ std::vector<std::string> variables; // collected insertion variables to replace {1}, {2}, ...
+ const StringLookup& resourceLookup; // object to resolve resource string name into a final format string
+ const StringLookup& varLookup; // object to resolve any non-numeric insertion strings
+
+ std::string GetFormatString(const std::string& name) const;
+
+public:
+ Message(msg::Kind kind, const char* name, const StringLookup& resourceLookup, const StringLookup& varLookup)
+ : kind(kind), name(name), resourceLookup(resourceLookup), varLookup(varLookup) {}
+
+ // Variable insertion.
+ template<typename T>
+ Message& operator()(const T& v) { variables.push_back(msg::to_string(v)); return *this; }
+
+ // conversion to final string
+ operator std::string() const;
+
+ // Get Message Kind
+ msg::Kind GetKind() {return kind;};
+};
+
+
+// Utility functions to create messages with standard resource and data manager lookups.
+// Short names to make usage convenient.
+Message Msg(const char* name);
+Message Msg(msg::Kind kind, const char* name);
+
+#endif