diff options
Diffstat (limited to 'indra')
24 files changed, 125 insertions, 139 deletions
diff --git a/indra/llappearance/llviewervisualparam.cpp b/indra/llappearance/llviewervisualparam.cpp index af8394b60c..fb0d12f0af 100644 --- a/indra/llappearance/llviewervisualparam.cpp +++ b/indra/llappearance/llviewervisualparam.cpp @@ -70,7 +70,7 @@ BOOL LLViewerVisualParamInfo::parseXml(LLXmlTreeNode *node)  	static LLStdStringHandle wearable_string = LLXmlTree::addAttributeString("wearable");  	if( node->getFastAttributeString( wearable_string, wearable) )  	{ -		mWearableType = LLWearableType::typeNameToType( wearable ); +		mWearableType = LLWearableType::getInstance()->typeNameToType( wearable );  	}  	static LLStdStringHandle edit_group_string = LLXmlTree::addAttributeString("edit_group"); diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp index 6079913a8e..e8df3d19f6 100644 --- a/indra/llappearance/llwearable.cpp +++ b/indra/llappearance/llwearable.cpp @@ -73,17 +73,17 @@ LLWearable::~LLWearable()  const std::string& LLWearable::getTypeLabel() const  { -	return LLWearableType::getTypeLabel(mType); +	return LLWearableType::getInstance()->getTypeLabel(mType);  }  const std::string& LLWearable::getTypeName() const  { -	return LLWearableType::getTypeName(mType); +	return LLWearableType::getInstance()->getTypeName(mType);  }  LLAssetType::EType LLWearable::getAssetType() const  { -	return LLWearableType::getAssetType(mType); +	return LLWearableType::getInstance()->getAssetType(mType);  }  BOOL LLWearable::exportFile(const std::string& filename) const diff --git a/indra/llappearance/llwearabledata.cpp b/indra/llappearance/llwearabledata.cpp index 2bf3b9085b..9cc65dc2ce 100644 --- a/indra/llappearance/llwearabledata.cpp +++ b/indra/llappearance/llwearabledata.cpp @@ -231,10 +231,11 @@ BOOL LLWearableData::getWearableIndex(const LLWearable *wearable, U32& index_fou  U32 LLWearableData::getClothingLayerCount() const  {  	U32 count = 0; +    LLWearableType *wr_inst = LLWearableType::getInstance();  	for (S32 i = 0; i < LLWearableType::WT_COUNT; i++)  	{  		LLWearableType::EType type = (LLWearableType::EType)i; -		if (LLWearableType::getAssetType(type)==LLAssetType::AT_CLOTHING) +		if (wr_inst->getAssetType(type)==LLAssetType::AT_CLOTHING)  		{  			count += getWearableCount(type);  		} @@ -244,7 +245,7 @@ U32 LLWearableData::getClothingLayerCount() const  BOOL LLWearableData::canAddWearable(const LLWearableType::EType type) const  { -	LLAssetType::EType a_type = LLWearableType::getAssetType(type); +    LLAssetType::EType a_type = LLWearableType::getInstance()->getAssetType(type);  	if (a_type==LLAssetType::AT_CLOTHING)  	{  		return (getClothingLayerCount() < MAX_CLOTHING_LAYERS); diff --git a/indra/llappearance/llwearabletype.cpp b/indra/llappearance/llwearabletype.cpp index 281060d01d..4ac611b1de 100644 --- a/indra/llappearance/llwearabletype.cpp +++ b/indra/llappearance/llwearabletype.cpp @@ -30,153 +30,98 @@  #include "llinventorydefines.h" -struct WearableEntry : public LLDictionaryEntry +LLWearableType::LLWearableDictionary::LLWearableDictionary(LLTranslationBridge::ptr_t& trans)  { -	WearableEntry(LLWearableType& wtype, -				  const std::string &name, -				  const std::string& default_new_name, -				  LLAssetType::EType assetType, -				  LLInventoryType::EIconName iconName, -				  BOOL disable_camera_switch = FALSE, -				  BOOL allow_multiwear = TRUE) : -		LLDictionaryEntry(name), -		mAssetType(assetType), -		mDefaultNewName(default_new_name), -		mLabel(wtype.mTrans->getString(name)), -		mIconName(iconName), -		mDisableCameraSwitch(disable_camera_switch), -		mAllowMultiwear(allow_multiwear) -	{ -		 -	} -	const LLAssetType::EType mAssetType; -	const std::string mLabel; -	const std::string mDefaultNewName; //keep mLabel for backward compatibility -	LLInventoryType::EIconName mIconName; -	BOOL mDisableCameraSwitch; -	BOOL mAllowMultiwear; -}; - -class LLWearableDictionary : public LLParamSingleton<LLWearableDictionary>, -							 public LLDictionary<LLWearableType::EType, WearableEntry> -{ -	LLSINGLETON(LLWearableDictionary, LLWearableType&); -}; - -LLWearableDictionary::LLWearableDictionary(LLWearableType& wtype) -{ -	addEntry(LLWearableType::WT_SHAPE,        new WearableEntry(wtype, "shape",       "New Shape",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_SHAPE, FALSE, FALSE)); -	addEntry(LLWearableType::WT_SKIN,         new WearableEntry(wtype, "skin",        "New Skin",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_SKIN, FALSE, FALSE)); -	addEntry(LLWearableType::WT_HAIR,         new WearableEntry(wtype, "hair",        "New Hair",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_HAIR, FALSE, FALSE)); -	addEntry(LLWearableType::WT_EYES,         new WearableEntry(wtype, "eyes",        "New Eyes",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_EYES, FALSE, FALSE)); -	addEntry(LLWearableType::WT_SHIRT,        new WearableEntry(wtype, "shirt",       "New Shirt",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SHIRT, FALSE, TRUE)); -	addEntry(LLWearableType::WT_PANTS,        new WearableEntry(wtype, "pants",       "New Pants",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_PANTS, FALSE, TRUE)); -	addEntry(LLWearableType::WT_SHOES,        new WearableEntry(wtype, "shoes",       "New Shoes",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SHOES, FALSE, TRUE)); -	addEntry(LLWearableType::WT_SOCKS,        new WearableEntry(wtype, "socks",       "New Socks",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SOCKS, FALSE, TRUE)); -	addEntry(LLWearableType::WT_JACKET,       new WearableEntry(wtype, "jacket",      "New Jacket",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_JACKET, FALSE, TRUE)); -	addEntry(LLWearableType::WT_GLOVES,       new WearableEntry(wtype, "gloves",      "New Gloves",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_GLOVES, FALSE, TRUE)); -	addEntry(LLWearableType::WT_UNDERSHIRT,   new WearableEntry(wtype, "undershirt",  "New Undershirt",	LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_UNDERSHIRT, FALSE, TRUE)); -	addEntry(LLWearableType::WT_UNDERPANTS,   new WearableEntry(wtype, "underpants",  "New Underpants",	LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_UNDERPANTS, FALSE, TRUE)); -	addEntry(LLWearableType::WT_SKIRT,        new WearableEntry(wtype, "skirt",       "New Skirt",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SKIRT, FALSE, TRUE)); -	addEntry(LLWearableType::WT_ALPHA,        new WearableEntry(wtype, "alpha",       "New Alpha",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_ALPHA, FALSE, TRUE)); -	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry(wtype, "tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_TATTOO, FALSE, TRUE)); -	addEntry(LLWearableType::WT_UNIVERSAL,    new WearableEntry(wtype, "universal",   "New Universal",     LLAssetType::AT_CLOTHING,   LLInventoryType::ICONNAME_CLOTHING_UNIVERSAL, FALSE, TRUE)); - -	addEntry(LLWearableType::WT_PHYSICS,      new WearableEntry(wtype, "physics",     "New Physics",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_PHYSICS, TRUE, TRUE)); - -	addEntry(LLWearableType::WT_INVALID,      new WearableEntry(wtype, "invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryType::ICONNAME_UNKNOWN, FALSE, FALSE)); -	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry(wtype, "none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryType::ICONNAME_NONE, FALSE, FALSE)); +	addEntry(LLWearableType::WT_SHAPE,        new WearableEntry(trans, "shape",       "New Shape",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_SHAPE, FALSE, FALSE)); +	addEntry(LLWearableType::WT_SKIN,         new WearableEntry(trans, "skin",        "New Skin",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_SKIN, FALSE, FALSE)); +	addEntry(LLWearableType::WT_HAIR,         new WearableEntry(trans, "hair",        "New Hair",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_HAIR, FALSE, FALSE)); +	addEntry(LLWearableType::WT_EYES,         new WearableEntry(trans, "eyes",        "New Eyes",			LLAssetType::AT_BODYPART, 	LLInventoryType::ICONNAME_BODYPART_EYES, FALSE, FALSE)); +	addEntry(LLWearableType::WT_SHIRT,        new WearableEntry(trans, "shirt",       "New Shirt",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SHIRT, FALSE, TRUE)); +	addEntry(LLWearableType::WT_PANTS,        new WearableEntry(trans, "pants",       "New Pants",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_PANTS, FALSE, TRUE)); +	addEntry(LLWearableType::WT_SHOES,        new WearableEntry(trans, "shoes",       "New Shoes",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SHOES, FALSE, TRUE)); +	addEntry(LLWearableType::WT_SOCKS,        new WearableEntry(trans, "socks",       "New Socks",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SOCKS, FALSE, TRUE)); +	addEntry(LLWearableType::WT_JACKET,       new WearableEntry(trans, "jacket",      "New Jacket",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_JACKET, FALSE, TRUE)); +	addEntry(LLWearableType::WT_GLOVES,       new WearableEntry(trans, "gloves",      "New Gloves",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_GLOVES, FALSE, TRUE)); +	addEntry(LLWearableType::WT_UNDERSHIRT,   new WearableEntry(trans, "undershirt",  "New Undershirt",	LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_UNDERSHIRT, FALSE, TRUE)); +	addEntry(LLWearableType::WT_UNDERPANTS,   new WearableEntry(trans, "underpants",  "New Underpants",	LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_UNDERPANTS, FALSE, TRUE)); +	addEntry(LLWearableType::WT_SKIRT,        new WearableEntry(trans, "skirt",       "New Skirt",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_SKIRT, FALSE, TRUE)); +	addEntry(LLWearableType::WT_ALPHA,        new WearableEntry(trans, "alpha",       "New Alpha",			LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_ALPHA, FALSE, TRUE)); +	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry(trans, "tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_TATTOO, FALSE, TRUE)); +	addEntry(LLWearableType::WT_UNIVERSAL,    new WearableEntry(trans, "universal",   "New Universal",     LLAssetType::AT_CLOTHING,   LLInventoryType::ICONNAME_CLOTHING_UNIVERSAL, FALSE, TRUE)); + +	addEntry(LLWearableType::WT_PHYSICS,      new WearableEntry(trans, "physics",     "New Physics",		LLAssetType::AT_CLOTHING, 	LLInventoryType::ICONNAME_CLOTHING_PHYSICS, TRUE, TRUE)); + +	addEntry(LLWearableType::WT_INVALID,      new WearableEntry(trans, "invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryType::ICONNAME_UNKNOWN, FALSE, FALSE)); +	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry(trans, "none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryType::ICONNAME_NONE, FALSE, FALSE));  }  // class LLWearableType -LLWearableType::LLWearableType(LLTranslationBridge* trans) +LLWearableType::LLWearableType(LLTranslationBridge::ptr_t &trans) +:   mDictionary(trans)  { -    // LLTranslationBridge exists, but is not ready at this point in time since strings.xml is not yet loaded -    mTrans = trans;  }  LLWearableType::~LLWearableType()  { -    delete mTrans;  }  void LLWearableType::initSingleton()  { -    // To make sure all wrapping functions will crash without initing LLWearableType; -    LLWearableDictionary::initParamSingleton(*this); - -    // Todo: consider merging LLWearableType and LLWearableDictionary  } -// static  LLWearableType::EType LLWearableType::typeNameToType(const std::string& type_name)  { -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const LLWearableType::EType wearable = dict->lookup(type_name); +	const LLWearableType::EType wearable = mDictionary.lookup(type_name);  	return wearable;  } -// static   const std::string& LLWearableType::getTypeName(LLWearableType::EType type)  {  -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const WearableEntry *entry = dict->lookup(type); +	const WearableEntry *entry = mDictionary.lookup(type);  	if (!entry) return getTypeName(WT_INVALID);  	return entry->mName;  } -//static   const std::string& LLWearableType::getTypeDefaultNewName(LLWearableType::EType type)  {  -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const WearableEntry *entry = dict->lookup(type); +	const WearableEntry *entry = mDictionary.lookup(type);  	if (!entry) return getTypeDefaultNewName(WT_INVALID);  	return entry->mDefaultNewName;  } -// static   const std::string& LLWearableType::getTypeLabel(LLWearableType::EType type)  {  -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const WearableEntry *entry = dict->lookup(type); +	const WearableEntry *entry = mDictionary.lookup(type);  	if (!entry) return getTypeLabel(WT_INVALID);  	return entry->mLabel;  } -// static   LLAssetType::EType LLWearableType::getAssetType(LLWearableType::EType type)  { -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const WearableEntry *entry = dict->lookup(type); +	const WearableEntry *entry = mDictionary.lookup(type);  	if (!entry) return getAssetType(WT_INVALID);  	return entry->mAssetType;  } -// static   LLInventoryType::EIconName LLWearableType::getIconName(LLWearableType::EType type)  { -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const WearableEntry *entry = dict->lookup(type); +	const WearableEntry *entry = mDictionary.lookup(type);  	if (!entry) return getIconName(WT_INVALID);  	return entry->mIconName;  }  -// static   BOOL LLWearableType::getDisableCameraSwitch(LLWearableType::EType type)  { -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const WearableEntry *entry = dict->lookup(type); +	const WearableEntry *entry = mDictionary.lookup(type);  	if (!entry) return FALSE;  	return entry->mDisableCameraSwitch;  } -// static  BOOL LLWearableType::getAllowMultiwear(LLWearableType::EType type)  { -	const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); -	const WearableEntry *entry = dict->lookup(type); +	const WearableEntry *entry = mDictionary.lookup(type);  	if (!entry) return FALSE;  	return entry->mAllowMultiwear;  } diff --git a/indra/llappearance/llwearabletype.h b/indra/llappearance/llwearabletype.h index 57f3ef160d..c83f03e621 100644 --- a/indra/llappearance/llwearabletype.h +++ b/indra/llappearance/llwearabletype.h @@ -35,10 +35,9 @@  class LLWearableType : public LLParamSingleton<LLWearableType>  { -	LLSINGLETON(LLWearableType, LLTranslationBridge* trans); +	LLSINGLETON(LLWearableType, LLTranslationBridge::ptr_t &trans);  	~LLWearableType();  	void initSingleton(); -	friend struct WearableEntry;  public:   	enum EType  	{ @@ -67,20 +66,53 @@ public:  	// 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); -	static LLAssetType::EType 			getAssetType(EType type); -	static EType 						typeNameToType(const std::string& type_name); -	static LLInventoryType::EIconName 	getIconName(EType type); -	static BOOL 						getDisableCameraSwitch(EType type); -	static BOOL 						getAllowMultiwear(EType type); +	const std::string& 					getTypeName(EType type); +	const std::string& 					getTypeDefaultNewName(EType type); +	const std::string& 					getTypeLabel(EType type); +	LLAssetType::EType 					getAssetType(EType type); +	EType 								typeNameToType(const std::string& type_name); +	LLInventoryType::EIconName 			getIconName(EType type); +	BOOL 								getDisableCameraSwitch(EType type); +	BOOL 								getAllowMultiwear(EType type);  	static EType						inventoryFlagsToWearableType(U32 flags); -protected: +private: +    struct WearableEntry : public LLDictionaryEntry +    { +        WearableEntry(LLTranslationBridge::ptr_t& trans, +            const std::string &name, +            const std::string& default_new_name, +            LLAssetType::EType assetType, +            LLInventoryType::EIconName iconName, +            BOOL disable_camera_switch = FALSE, +            BOOL allow_multiwear = TRUE) : +            LLDictionaryEntry(name), +            mAssetType(assetType), +            mDefaultNewName(default_new_name), +            mLabel(trans->getString(name)), +            mIconName(iconName), +            mDisableCameraSwitch(disable_camera_switch), +            mAllowMultiwear(allow_multiwear) +        { -	LLTranslationBridge* mTrans; +        } +        const LLAssetType::EType mAssetType; +        const std::string mLabel; +        const std::string mDefaultNewName; //keep mLabel for backward compatibility +        LLInventoryType::EIconName mIconName; +        BOOL mDisableCameraSwitch; +        BOOL mAllowMultiwear; +    }; + +    class LLWearableDictionary : public LLDictionary<LLWearableType::EType, WearableEntry> +    { +    public: +        LLWearableDictionary(LLTranslationBridge::ptr_t& trans); +        ~LLWearableDictionary() {} +    }; + +    LLWearableDictionary mDictionary;  };  #endif  // LL_LLWEARABLETYPE_H diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 2411f0f86d..45e76ff90b 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1056,13 +1056,14 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  	}  	// updating inventory +    LLWearableType* wearable_type_inst = LLWearableType::getInstance();  	// TODO: Removed check for ensuring that teens don't remove undershirt and underwear. Handle later  	// note: shirt is the first non-body part wearable item. Update if wearable order changes.  	// This loop should remove all clothing, but not any body parts  	for (S32 j = 0; j < (S32)LLWearableType::WT_COUNT; j++)  	{ -		if (LLWearableType::getAssetType((LLWearableType::EType)j) == LLAssetType::AT_CLOTHING) +		if (wearable_type_inst->getAssetType((LLWearableType::EType)j) == LLAssetType::AT_CLOTHING)  		{  			removeWearable((LLWearableType::EType)j, true, 0);  		} @@ -1082,7 +1083,7 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  			new_wearable->setName(new_item->getName());  			new_wearable->setItemID(new_item->getUUID()); -			if (LLWearableType::getAssetType(type) == LLAssetType::AT_BODYPART) +			if (wearable_type_inst->getAssetType(type) == LLAssetType::AT_BODYPART)  			{  				// exactly one wearable per body part  				setWearable(type,0,new_wearable); @@ -1169,7 +1170,7 @@ void LLAgentWearables::setWearableItem(LLInventoryItem* new_item, LLViewerWearab  			if ((old_wearable->getAssetID() == new_wearable->getAssetID()) &&  				(old_item_id == new_item->getUUID()))  			{ -				LL_DEBUGS() << "No change to wearable asset and item: " << LLWearableType::getTypeName(type) << LL_ENDL; +				LL_DEBUGS() << "No change to wearable asset and item: " << LLWearableType::getInstance()->getTypeName(type) << LL_ENDL;  				return;  			} @@ -1601,7 +1602,7 @@ void LLAgentWearables::editWearable(const LLUUID& item_id)  		return;  	} -	const BOOL disable_camera_switch = LLWearableType::getDisableCameraSwitch(wearable->getType()); +	const BOOL disable_camera_switch = LLWearableType::getInstance()->getDisableCameraSwitch(wearable->getType());  	LLPanel* panel = LLFloaterSidePanelContainer::getPanel("appearance");  	LLSidepanelAppearance::editWearable(wearable, panel, disable_camera_switch);  } diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 168b8eb47a..ef6c85b73b 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1021,7 +1021,7 @@ void LLWearableHoldingPattern::recoverMissingWearable(LLWearableType::EType type  		// Try to recover by replacing missing wearable with a new one.  	LLNotificationsUtil::add("ReplacedMissingWearable"); -	LL_DEBUGS() << "Wearable " << LLWearableType::getTypeLabel(type) +	LL_DEBUGS() << "Wearable " << LLWearableType::getInstance()->getTypeLabel(type)  				<< " could not be downloaded.  Replaced inventory item with default wearable." << LL_ENDL;  	LLViewerWearable* wearable = LLWearableList::instance().createNewWearable(type, gAgentAvatarp); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f61f0d9181..874482b9ec 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -775,10 +775,6 @@ bool LLAppViewer::init()  	// Start of the application  	// -	// initialize LLWearableType translation bridge. -	// Memory will be cleaned up in ::cleanupClass() -	LLWearableType::initParamSingleton(new LLUITranslationBridge()); -      // initialize the LLSettingsType translation bridge.      LLTranslationBridge::ptr_t trans = std::make_shared<LLUITranslationBridge>();      LLSettingsType::initClass(trans); @@ -800,9 +796,14 @@ bool LLAppViewer::init()  	//  	init_default_trans_args(); +    // inits from settings.xml and from strings.xml  	if (!initConfiguration())  		return false; +	// initialize LLWearableType translation bridge. +	// Will immediately use LLTranslationBridge to init LLWearableDictionary +	LLWearableType::initParamSingleton(trans); +  	LL_INFOS("InitInfo") << "Configuration initialized." << LL_ENDL ;  	//set the max heap size. diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 1caefd58ab..dc80eb4487 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -74,7 +74,7 @@ protected:  		}  		// Set proper label for the "Create new <WEARABLE_TYPE>" menu item. -		std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getTypeName(w_type)); +		std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getInstance()->getTypeName(w_type));  		menu_item->setLabel(new_label);  	} diff --git a/indra/newview/llfloaterlinkreplace.cpp b/indra/newview/llfloaterlinkreplace.cpp index 595d584799..8ee7a72055 100644 --- a/indra/newview/llfloaterlinkreplace.cpp +++ b/indra/newview/llfloaterlinkreplace.cpp @@ -162,7 +162,7 @@ void LLFloaterLinkReplace::onStartClicked()  		else  		{  			LLSD args; -			args["TYPE"] = LLWearableType::getTypeName(source_item->getWearableType()); +			args["TYPE"] = LLWearableType::getInstance()->getTypeName(source_item->getWearableType());  			params.substitutions(args);  			LLNotifications::instance().add(params);  		} diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 8fbc3c52ab..50fe88174b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -6825,7 +6825,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  						disabled_items.push_back(std::string("Wearable Edit"));  					} -					if (LLWearableType::getAllowMultiwear(mWearableType)) +					if (LLWearableType::getInstance()->getAllowMultiwear(mWearableType))  					{  						items.push_back(std::string("Wearable Add"));  						if (!gAgentWearables.canAddWearable(mWearableType)) diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp index 81c001b8bd..44e493fdf4 100644 --- a/indra/newview/llinventoryicon.cpp +++ b/indra/newview/llinventoryicon.cpp @@ -196,7 +196,7 @@ const std::string& LLInventoryIcon::getIconName(LLInventoryType::EIconName idx)  LLInventoryType::EIconName LLInventoryIcon::assignWearableIcon(U32 misc_flag)  {  	const LLWearableType::EType wearable_type = LLWearableType::inventoryFlagsToWearableType(misc_flag); -	return LLWearableType::getIconName(wearable_type); +	return LLWearableType::getInstance()->getIconName(wearable_type);  }  LLInventoryType::EIconName LLInventoryIcon::assignSettingsIcon(U32 misc_flag) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index 272e7ae351..ca7bd8cb2c 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -893,7 +893,7 @@ void LLOutfitGalleryContextMenu::onOutfitsRemovalConfirmation(const LLSD& notifi  void LLOutfitGalleryContextMenu::onCreate(const LLSD& data)  { -    LLWearableType::EType type = LLWearableType::typeNameToType(data.asString()); +    LLWearableType::EType type = LLWearableType::getInstance()->typeNameToType(data.asString());      if (type == LLWearableType::WT_NONE)      {          LL_WARNS() << "Invalid wearable type" << LL_ENDL; diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 71ab826e1c..a71432e314 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -1210,7 +1210,7 @@ void LLOutfitListGearMenuBase::onRename()  void LLOutfitListGearMenuBase::onCreate(const LLSD& data)  { -    LLWearableType::EType type = LLWearableType::typeNameToType(data.asString()); +    LLWearableType::EType type = LLWearableType::getInstance()->typeNameToType(data.asString());      if (type == LLWearableType::WT_NONE)      {          LL_WARNS() << "Invalid wearable type" << LL_ENDL; diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index c601a6c210..be11a4a9f3 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -1276,7 +1276,7 @@ void LLPanelEditWearable::changeCamera(U8 subpart)  {  	// Don't change the camera if this type doesn't have a camera switch.  	// Useful for wearables like physics that don't have an associated physical body part. -	if (LLWearableType::getDisableCameraSwitch(mWearablePtr->getType())) +	if (LLWearableType::getInstance()->getDisableCameraSwitch(mWearablePtr->getType()))  	{  		return;  	} diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 1d87aa6f5d..9828e14262 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -97,7 +97,7 @@ std::string LLShopURLDispatcher::resolveURL(LLWearableType::EType wearable_type,  {  	const std::string prefix = "MarketplaceURL";  	const std::string sex_str = (sex == SEX_MALE) ? "Male" : "Female"; -	const std::string type_str = LLWearableType::getTypeName(wearable_type); +	const std::string type_str = LLWearableType::getInstance()->getTypeName(wearable_type);  	std::string setting_name = prefix; @@ -173,7 +173,7 @@ public:  private:  	static void onCreate(const LLSD& param)  	{ -		LLWearableType::EType type = LLWearableType::typeNameToType(param.asString()); +		LLWearableType::EType type = LLWearableType::getInstance()->typeNameToType(param.asString());  		if (type == LLWearableType::WT_NONE)  		{  			LL_WARNS() << "Invalid wearable type" << LL_ENDL; @@ -188,19 +188,20 @@ private:  	{  		LLView* menu_clothes	= gMenuHolder->getChildView("COF.Gear.New_Clothes", FALSE);  		LLView* menu_bp			= gMenuHolder->getChildView("COF.Gear.New_Body_Parts", FALSE); +		LLWearableType * wearable_type_inst = LLWearableType::getInstance();  		for (U8 i = LLWearableType::WT_SHAPE; i != (U8) LLWearableType::WT_COUNT; ++i)  		{  			LLWearableType::EType type = (LLWearableType::EType) i; -			const std::string& type_name = LLWearableType::getTypeName(type); +			const std::string& type_name = wearable_type_inst->getTypeName(type);  			LLMenuItemCallGL::Params p;  			p.name = type_name; -			p.label = LLTrans::getString(LLWearableType::getTypeDefaultNewName(type)); +			p.label = LLTrans::getString(wearable_type_inst->getTypeDefaultNewName(type));  			p.on_click.function_name = "Wearable.Create";  			p.on_click.parameter = LLSD(type_name); -            LLView* parent = LLWearableType::getAssetType(type) == LLAssetType::AT_CLOTHING ? menu_clothes : menu_bp; +			LLView* parent = wearable_type_inst->getAssetType(type) == LLAssetType::AT_CLOTHING ? menu_clothes : menu_bp;  			LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent);  		}  	} diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 6e2b4a00fc..81b67134d2 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -204,7 +204,7 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)  			// when editing its physics.  			if (!gAgentCamera.cameraCustomizeAvatar())  			{ -				LLVOAvatarSelf::onCustomizeStart(LLWearableType::getDisableCameraSwitch(wearable_ptr->getType())); +				LLVOAvatarSelf::onCustomizeStart(LLWearableType::getInstance()->getDisableCameraSwitch(wearable_ptr->getType()));  			}  			if (is_wearable_edit_visible)  			{ diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index d0cbd1181b..b2ce9059ce 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1851,7 +1851,7 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLFolderBridge *bridge,  	else  	{  		// Use for all clothing and body parts.  Adding new wearable types requires updating LLWearableDictionary. -		LLWearableType::EType wearable_type = LLWearableType::typeNameToType(type_name); +		LLWearableType::EType wearable_type = LLWearableType::getInstance()->typeNameToType(type_name);  		if (wearable_type >= LLWearableType::WT_SHAPE && wearable_type < LLWearableType::WT_COUNT)  		{  			const LLUUID parent_id = bridge ? bridge->getUUID() : LLUUID::null; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index e6bd20b58f..efcf5b4730 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -8441,7 +8441,7 @@ class LLEditEnableTakeOff : public view_listener_t  	bool handleEvent(const LLSD& userdata)  	{  		std::string clothing = userdata.asString(); -		LLWearableType::EType type = LLWearableType::typeNameToType(clothing); +		LLWearableType::EType type = LLWearableType::getInstance()->typeNameToType(clothing);  		if (type >= LLWearableType::WT_SHAPE && type < LLWearableType::WT_COUNT)  			return LLAgentWearables::selfHasWearable(type);  		return false; @@ -8457,7 +8457,7 @@ class LLEditTakeOff : public view_listener_t  			LLAppearanceMgr::instance().removeAllClothesFromAvatar();  		else  		{ -			LLWearableType::EType type = LLWearableType::typeNameToType(clothing); +			LLWearableType::EType type = LLWearableType::getInstance()->typeNameToType(clothing);  			if (type >= LLWearableType::WT_SHAPE   				&& type < LLWearableType::WT_COUNT  				&& (gAgentWearables.getWearableCount(type) > 0)) diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp index 2d7a0f920f..ebb31f9453 100644 --- a/indra/newview/llviewerwearable.cpp +++ b/indra/newview/llviewerwearable.cpp @@ -563,7 +563,7 @@ void LLViewerWearable::saveNewAsset() const  void LLViewerWearable::onSaveNewAssetComplete(const LLUUID& new_asset_id, void* userdata, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed)  {  	LLWearableSaveData* data = (LLWearableSaveData*)userdata; -	const std::string& type_name = LLWearableType::getTypeName(data->mType); +	const std::string& type_name = LLWearableType::getInstance()->getTypeName(data->mType);  	if(0 == status)  	{  		// Success @@ -589,7 +589,7 @@ void LLViewerWearable::onSaveNewAssetComplete(const LLUUID& new_asset_id, void*  std::ostream& operator<<(std::ostream &s, const LLViewerWearable &w)  { -	s << "wearable " << LLWearableType::getTypeName(w.mType) << "\n"; +	s << "wearable " << LLWearableType::getInstance()->getTypeName(w.mType) << "\n";  	s << "    Name: " << w.mName << "\n";  	s << "    Desc: " << w.mDescription << "\n";  	//w.mPermissions diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 0aee4a3398..603af7e5cc 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -8734,7 +8734,7 @@ void dump_visual_param(apr_file_t* file, LLVisualParam* viewer_param, F32 value)  	S32 u8_value = F32_to_U8(value,viewer_param->getMinWeight(),viewer_param->getMaxWeight());  	apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" display=\"%s\" value=\"%.3f\" u8=\"%d\" type=\"%s\" wearable=\"%s\" group=\"%d\"/>\n",  					viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getDisplayName().c_str(), value, u8_value, type_string.c_str(), -					LLWearableType::getTypeName(LLWearableType::EType(wtype)).c_str(), +					LLWearableType::getInstance()->getTypeName(LLWearableType::EType(wtype)).c_str(),  					viewer_param->getGroup());  	} @@ -9508,6 +9508,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  	std::string outfilename = get_sequential_numbered_file_name(outprefix,".xml");  	LLAPRFile outfile; +    LLWearableType *wr_inst = LLWearableType::getInstance();  	std::string fullpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,outfilename);  	if (APR_SUCCESS == outfile.open(fullpath, LL_APR_WB ))  	{ @@ -9524,7 +9525,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara  		{  			for (S32 type = LLWearableType::WT_SHAPE; type < LLWearableType::WT_COUNT; type++)  			{ -				const std::string& wearable_name = LLWearableType::getTypeName((LLWearableType::EType)type); +				const std::string& wearable_name = wr_inst->getTypeName((LLWearableType::EType)type);  				apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() );  				for (LLVisualParam* param = getFirstVisualParam(); param; param = getNextVisualParam()) diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index aea12380e8..c0f063e54a 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -2030,6 +2030,7 @@ void LLVOAvatarSelf::debugBakedTextureUpload(EBakedTextureIndex index, BOOL fini  const std::string LLVOAvatarSelf::verboseDebugDumpLocalTextureDataInfo(const LLViewerTexLayerSet* layerset) const  {  	std::ostringstream outbuf; +    LLWearableType *wr_inst = LLWearableType::getInstance();  	for (LLAvatarAppearanceDictionary::BakedTextures::const_iterator baked_iter =  			 LLAvatarAppearanceDictionary::getInstance()->getBakedTextures().begin();  		 baked_iter != LLAvatarAppearanceDictionary::getInstance()->getBakedTextures().end(); @@ -2053,7 +2054,7 @@ const std::string LLVOAvatarSelf::verboseDebugDumpLocalTextureDataInfo(const LLV  				{  					for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)  					{ -						outbuf << "    " << LLWearableType::getTypeName(wearable_type) << " " << wearable_index << ":"; +						outbuf << "    " << wr_inst->getTypeName(wearable_type) << " " << wearable_index << ":";  						const LLLocalTextureObject *local_tex_obj = getLocalTextureObject(tex_index, wearable_index);  						if (local_tex_obj)  						{ @@ -2108,6 +2109,7 @@ void LLVOAvatarSelf::dumpAllTextures() const  const std::string LLVOAvatarSelf::debugDumpLocalTextureDataInfo(const LLViewerTexLayerSet* layerset) const  {  	std::string text=""; +    LLWearableType *wr_inst = LLWearableType::getInstance();  	text = llformat("[Final:%d Avail:%d] ",isLocalTextureDataFinal(layerset), isLocalTextureDataAvailable(layerset)); @@ -2131,7 +2133,7 @@ const std::string LLVOAvatarSelf::debugDumpLocalTextureDataInfo(const LLViewerTe  				const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);  				if (wearable_count > 0)  				{ -					text += LLWearableType::getTypeName(wearable_type) + ":"; +					text += wr_inst->getTypeName(wearable_type) + ":";  					for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)  					{  						const U32 discard_level = getLocalDiscardLevel(tex_index, wearable_index); @@ -2838,9 +2840,10 @@ void LLVOAvatarSelf::dumpWearableInfo(LLAPRFile& outfile)  	apr_file_printf( file, "\n<wearable_info>\n" );  	LLWearableData *wd = getWearableData(); +    LLWearableType *wr_inst = LLWearableType::getInstance();  	for (S32 type = 0; type < LLWearableType::WT_COUNT; type++)  	{ -		const std::string& type_name = LLWearableType::getTypeName((LLWearableType::EType)type); +		const std::string& type_name = wr_inst->getTypeName((LLWearableType::EType)type);  		for (U32 j=0; j< wd->getWearableCount((LLWearableType::EType)type); j++)  		{  			LLViewerWearable *wearable = gAgentWearables.getViewerWearable((LLWearableType::EType)type,j); diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index e7bbee5efd..0333765af2 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -949,7 +949,7 @@ void LLWearableItemsList::ContextMenu::updateItemsLabels(LLContextMenu* menu)  	if (!item || !item->isWearableType()) return;  	LLWearableType::EType w_type = item->getWearableType(); -	std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getTypeName(w_type)); +	std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getInstance()->getTypeName(w_type));  	LLMenuItemGL* menu_item = menu->getChild<LLMenuItemGL>("create_new");  	menu_item->setLabel(new_label); diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp index b61fbbd073..b07905629a 100644 --- a/indra/newview/llwearablelist.cpp +++ b/indra/newview/llwearablelist.cpp @@ -241,7 +241,8 @@ LLViewerWearable* LLWearableList::createNewWearable( LLWearableType::EType type,  	LLViewerWearable *wearable = generateNewWearable();  	wearable->setType( type, avatarp ); -	std::string name = LLTrans::getString( LLWearableType::getTypeDefaultNewName(wearable->getType()) ); +    // LLWearableType has pre-translated getTypeLabel(), but it uses default translation +	std::string name = LLTrans::getString( LLWearableType::getInstance()->getTypeDefaultNewName(wearable->getType()) );  	wearable->setName( name );  	LLPermissions perm;  | 
