diff options
author | Ethan Yonker <dees_troy@teamw.in> | 2015-10-28 18:44:49 +0100 |
---|---|---|
committer | Ethan Yonker <dees_troy@teamw.in> | 2015-12-19 15:31:01 +0100 |
commit | 74db157b9406594a549a70415668dd6cbe17d1d3 (patch) | |
tree | d47451181a77cc1b03a55d63d49a9fecc98eb044 /gui/twmsg.h | |
parent | gui: stock theme rework (diff) | |
download | android_bootable_recovery-74db157b9406594a549a70415668dd6cbe17d1d3.tar android_bootable_recovery-74db157b9406594a549a70415668dd6cbe17d1d3.tar.gz android_bootable_recovery-74db157b9406594a549a70415668dd6cbe17d1d3.tar.bz2 android_bootable_recovery-74db157b9406594a549a70415668dd6cbe17d1d3.tar.lz android_bootable_recovery-74db157b9406594a549a70415668dd6cbe17d1d3.tar.xz android_bootable_recovery-74db157b9406594a549a70415668dd6cbe17d1d3.tar.zst android_bootable_recovery-74db157b9406594a549a70415668dd6cbe17d1d3.zip |
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 |