summaryrefslogtreecommitdiff
path: root/indra/newview/llenvmanager.h
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2016-12-20 09:33:40 -0500
committerNat Goodspeed <nat@lindenlab.com>2016-12-20 09:33:40 -0500
commit42b8895c54a1ab9aa019d4e60b5cf432506aff44 (patch)
tree784121134b5e3f7e0879d566afa35a63547278e1 /indra/newview/llenvmanager.h
parentc992a6df9f5c8751c6f4811009e3b1ada09f208e (diff)
DRTVWR-418: Untangle LLWLParamKey, LLWLAnimator circularity.
LLWLAnimator stores a std::map<F32, LLWLParamKey>. But llwlanimator.h only forward-declared LLWLParamKey, begging the question of how this ever compiled on any previous platform. LLWLParamKey was declared for real in llwlparammanager.h, so the obvious fix is to #include "llwlparammanager.h" in llwlanimator.h. Unfortunately this doesn't work because llwlparammanager.h already #includes "llwlanimator.h". As the dependency is specifically on LLWLParamKey, which isa LLEnvKey, which is declared in llenvmanager.h, move LLWLParamKey to llenvmanager.h. Then we can #include "llenvmanager.h" in llwlanimator.h instead of merely forward- declaring LLWLParamKey. This migration compiles LLWLParamKey in a context in which LLTrans isn't visible. It's not really clear why all LLWLParamKey's methods are inline, but toString() -- the method that requires LLTrans -- isn't going to be fast in any case. Break toString() out to llenvmanager.cpp, and #include "lltrans.h" there.
Diffstat (limited to 'indra/newview/llenvmanager.h')
-rw-r--r--indra/newview/llenvmanager.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h
index c7877303fc..2e1b06dceb 100644
--- a/indra/newview/llenvmanager.h
+++ b/indra/newview/llenvmanager.h
@@ -48,6 +48,87 @@ public:
} EScope;
};
+struct LLWLParamKey : LLEnvKey
+{
+public:
+ // scope and source of a param set (WL sky preset)
+ std::string name;
+ EScope scope;
+
+ // for conversion from LLSD
+ static const int NAME_IDX = 0;
+ static const int SCOPE_IDX = 1;
+
+ inline LLWLParamKey(const std::string& n, EScope s)
+ : name(n), scope(s)
+ {
+ }
+
+ inline LLWLParamKey(LLSD llsd)
+ : name(llsd[NAME_IDX].asString()), scope(EScope(llsd[SCOPE_IDX].asInteger()))
+ {
+ }
+
+ inline LLWLParamKey() // NOT really valid, just so std::maps can return a default of some sort
+ : name(""), scope(SCOPE_LOCAL)
+ {
+ }
+
+ inline LLWLParamKey(std::string& stringVal)
+ {
+ size_t len = stringVal.length();
+ if (len > 0)
+ {
+ name = stringVal.substr(0, len - 1);
+ scope = (EScope) atoi(stringVal.substr(len - 1, len).c_str());
+ }
+ }
+
+ inline std::string toStringVal() const
+ {
+ std::stringstream str;
+ str << name << scope;
+ return str.str();
+ }
+
+ inline LLSD toLLSD() const
+ {
+ LLSD llsd = LLSD::emptyArray();
+ llsd.append(LLSD(name));
+ llsd.append(LLSD(scope));
+ return llsd;
+ }
+
+ inline void fromLLSD(const LLSD& llsd)
+ {
+ name = llsd[NAME_IDX].asString();
+ scope = EScope(llsd[SCOPE_IDX].asInteger());
+ }
+
+ inline bool operator <(const LLWLParamKey other) const
+ {
+ if (name < other.name)
+ {
+ return true;
+ }
+ else if (name > other.name)
+ {
+ return false;
+ }
+ else
+ {
+ return scope < other.scope;
+ }
+ }
+
+ inline bool operator ==(const LLWLParamKey other) const
+ {
+ return (name == other.name) && (scope == other.scope);
+ }
+
+ std::string toString() const;
+};
+
class LLEnvironmentSettings
{
public: