summaryrefslogtreecommitdiff
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
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.
-rw-r--r--indra/newview/llenvmanager.cpp16
-rw-r--r--indra/newview/llenvmanager.h81
-rw-r--r--indra/newview/llwlanimator.h3
-rw-r--r--indra/newview/llwlparammanager.h94
4 files changed, 98 insertions, 96 deletions
diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
index a626ad1bff..4cbeba083b 100644
--- a/indra/newview/llenvmanager.cpp
+++ b/indra/newview/llenvmanager.cpp
@@ -35,6 +35,22 @@
#include "llwaterparammanager.h"
#include "llwlhandlers.h"
#include "llwlparammanager.h"
+#include "lltrans.h"
+
+std::string LLWLParamKey::toString() const
+{
+ switch (scope)
+ {
+ case SCOPE_LOCAL:
+ return name + std::string(" (") + LLTrans::getString("Local") + std::string(")");
+ break;
+ case SCOPE_REGION:
+ return name + std::string(" (") + LLTrans::getString("Region") + std::string(")");
+ break;
+ default:
+ return name + " (?)";
+ }
+}
std::string LLEnvPrefs::getWaterPresetName() const
{
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:
diff --git a/indra/newview/llwlanimator.h b/indra/newview/llwlanimator.h
index 810f4cf7e5..e2e49c7305 100644
--- a/indra/newview/llwlanimator.h
+++ b/indra/newview/llwlanimator.h
@@ -28,12 +28,11 @@
#define LL_WL_ANIMATOR_H
#include "llwlparamset.h"
+#include "llenvmanager.h"
#include "llwaterparamset.h"
#include <string>
#include <map>
-struct LLWLParamKey;
-
class LLWLAnimator {
public:
typedef enum e_time
diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h
index e13aed98ed..29826e32ba 100644
--- a/indra/newview/llwlparammanager.h
+++ b/indra/newview/llwlparammanager.h
@@ -116,100 +116,6 @@ struct WLFloatControl {
}
};
-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);
- }
-
- inline std::string toString() const
- {
- switch (scope)
- {
- case SCOPE_LOCAL:
- return name + std::string(" (") + LLTrans::getString("Local") + std::string(")");
- break;
- case SCOPE_REGION:
- return name + std::string(" (") + LLTrans::getString("Region") + std::string(")");
- break;
- default:
- return name + " (?)";
- }
- }
-};
-
/// WindLight parameter manager class - what controls all the wind light shaders
class LLWLParamManager : public LLSingleton<LLWLParamManager>
{