summaryrefslogtreecommitdiff
path: root/indra/llui/lluistring.h
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/llui/lluistring.h
Print done when done.
Diffstat (limited to 'indra/llui/lluistring.h')
-rwxr-xr-xindra/llui/lluistring.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
new file mode 100755
index 0000000000..8c2e3c481c
--- /dev/null
+++ b/indra/llui/lluistring.h
@@ -0,0 +1,87 @@
+/**
+ * @file lluistring.h
+ * @author: Steve Bennetts
+ * @brief LLUIString base class
+ *
+ * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLUISTRING_H
+#define LL_LLUISTRING_H
+
+// lluistring.h
+//
+// Copyright 2006, Linden Research, Inc.
+// Original aurthor: Steve
+
+#include "stdtypes.h"
+#include "llstring.h"
+#include <string>
+
+// Use this class to store translated text that may have arguments
+// e.g. "Welcome [USERNAME] to [SECONDLIFE]!"
+
+// Adding or changing an argument will update the result string, preserving the origianl
+// Thus, subsequent changes to arguments or even the original string will produce
+// the correct result
+
+// Example Usage:
+// LLUIString mMessage("Welcome [USERNAME] to [SECONDLIFE]!");
+// mMessage.setArg("[USERNAME]", "Steve");
+// mMessage.setArg("[SECONDLIFE]", "Second Life");
+// llinfos << mMessage.getString().c_str() << llendl; // outputs "Welcome Steve to Second Life"
+// mMessage.setArg("[USERNAME]", "Joe");
+// llinfos << mMessage.getString().c_str() << llendl; // outputs "Welcome Joe to Second Life"
+// mMessage = "Recepción a la [SECONDLIFE] [USERNAME]"
+// mMessage.setArg("[SECONDLIFE]", "Segunda Vida");
+// llinfos << mMessage.getString().c_str() << llendl; // outputs "Recepción a la Segunda Vida Joe"
+
+// Implementation Notes:
+// Attempting to have operator[](const LLString& s) return mArgs[s] fails because we have
+// to call format() after the assignment happens.
+
+class LLUIString
+{
+public:
+ // These methods all perform appropriate argument substitution
+ // and modify mOrig where appropriate
+ LLUIString() {}
+ LLUIString(const LLString& instring, const LLString::format_map_t& args);
+ LLUIString(const LLString& instring) { assign(instring); }
+
+ void assign(const LLString& instring);
+ LLUIString& operator=(const LLString& s) { assign(s); return *this; }
+
+ void setArgList(const LLString::format_map_t& args);
+ void setArg(const LLString& key, const LLString& replacement);
+
+ const LLString& getString() const { return mResult; }
+ operator LLString() const { return mResult; }
+
+ const LLWString& getWString() const { return mWResult; }
+ operator LLWString() const { return mWResult; }
+
+ bool empty() const { return mWResult.empty(); }
+ S32 length() const { return mWResult.size(); }
+
+ void clear();
+ void clearArgs();
+
+ // These utuilty functions are included for text editing.
+ // They do not affect mOrig and do not perform argument substitution
+ void truncate(S32 maxchars);
+ void erase(S32 charidx, S32 len);
+ void insert(S32 charidx, const LLWString& wchars);
+ void replace(S32 charidx, llwchar wc);
+
+private:
+ void format();
+
+ LLString mOrig;
+ LLString mResult;
+ LLWString mWResult; // for displaying
+ LLString::format_map_t mArgs;
+};
+
+#endif // LL_LLUISTRING_H