diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2016-12-20 09:33:40 -0500 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2016-12-20 09:33:40 -0500 | 
| commit | 42b8895c54a1ab9aa019d4e60b5cf432506aff44 (patch) | |
| tree | 784121134b5e3f7e0879d566afa35a63547278e1 | |
| parent | c992a6df9f5c8751c6f4811009e3b1ada09f208e (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.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llenvmanager.h | 81 | ||||
| -rw-r--r-- | indra/newview/llwlanimator.h | 3 | ||||
| -rw-r--r-- | indra/newview/llwlparammanager.h | 94 | 
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>  { | 
