diff options
Diffstat (limited to 'indra/llappearance')
| -rw-r--r-- | indra/llappearance/llwearabletype.cpp | 37 | ||||
| -rw-r--r-- | indra/llappearance/llwearabletype.h | 18 | 
2 files changed, 34 insertions, 21 deletions
diff --git a/indra/llappearance/llwearabletype.cpp b/indra/llappearance/llwearabletype.cpp index 0e29bbe783..6b7dc41ffd 100644 --- a/indra/llappearance/llwearabletype.cpp +++ b/indra/llappearance/llwearabletype.cpp @@ -29,18 +29,6 @@  #include "llinventorytype.h"  #include "llinventorydefines.h" -static LLTranslationBridge* sTrans = NULL; - -// static -void LLWearableType::initClass(LLTranslationBridge* trans) -{ -	sTrans = trans; -} - -void LLWearableType::cleanupClass() -{ -	delete sTrans; -}  struct WearableEntry : public LLDictionaryEntry  { @@ -53,7 +41,7 @@ struct WearableEntry : public LLDictionaryEntry  		LLDictionaryEntry(name),  		mAssetType(assetType),  		mDefaultNewName(default_new_name), -		mLabel(sTrans->getString(name)), +		mLabel(LLWearableType::getInstance()->mTrans->getString(name)),  		mIconName(iconName),  		mDisableCameraSwitch(disable_camera_switch),  		mAllowMultiwear(allow_multiwear) @@ -68,7 +56,7 @@ struct WearableEntry : public LLDictionaryEntry  	BOOL mAllowMultiwear;  }; -class LLWearableDictionary : public LLSingleton<LLWearableDictionary>, +class LLWearableDictionary : public LLParamSingleton<LLWearableDictionary>,  							 public LLDictionary<LLWearableType::EType, WearableEntry>  {  	LLSINGLETON(LLWearableDictionary); @@ -99,6 +87,27 @@ LLWearableDictionary::LLWearableDictionary()  	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryType::ICONNAME_NONE, FALSE, FALSE));  } + +// class LLWearableType + +LLWearableType::LLWearableType(LLTranslationBridge* trans) +{ +    mTrans = trans; +} + +LLWearableType::~LLWearableType() +{ +    delete mTrans; +} + +void LLWearableType::initSingleton() +{ +    // To make sure all wrapping functions will crash without initing LLWearableType; +    LLWearableDictionary::initParamSingleton(); + +    // Todo: consider merging LLWearableType and LLWearableDictionary +} +  // static  LLWearableType::EType LLWearableType::typeNameToType(const std::string& type_name)  { diff --git a/indra/llappearance/llwearabletype.h b/indra/llappearance/llwearabletype.h index ac81376538..80bb9a10b4 100644 --- a/indra/llappearance/llwearabletype.h +++ b/indra/llappearance/llwearabletype.h @@ -42,8 +42,12 @@ public:  }; -class LLWearableType +class LLWearableType : public LLParamSingleton<LLWearableType>  { +	LLSINGLETON(LLWearableType, LLTranslationBridge* trans); +	~LLWearableType(); +	friend struct WearableEntry; +	void initSingleton();  public:   	enum EType  	{ @@ -70,9 +74,8 @@ public:  		WT_NONE		  = -1,  	}; -	static void			initClass(LLTranslationBridge* trans); // initializes static members -	static void			cleanupClass(); // initializes static members - +	// Most methods are wrappers for dictionary, but if LLWearableType is not initialized, +	// they will crash. Whole LLWearableType is just wrapper for convinient calls.  	static const std::string& 			getTypeName(EType type);  	static const std::string& 			getTypeDefaultNewName(EType type);  	static const std::string& 			getTypeLabel(EType type); @@ -81,11 +84,12 @@ public:  	static LLInventoryType::EIconName 	getIconName(EType type);  	static BOOL 						getDisableCameraSwitch(EType type);  	static BOOL 						getAllowMultiwear(EType type); -    static EType						inventoryFlagsToWearableType(U32 flags); + +	static EType						inventoryFlagsToWearableType(U32 flags);  protected: -	LLWearableType() {} -	~LLWearableType() {} + +	LLTranslationBridge* mTrans;  };  #endif  // LL_LLWEARABLETYPE_H  | 
