diff options
Diffstat (limited to 'gui/twmsg.h')
-rw-r--r-- | gui/twmsg.h | 97 |
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 |