diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 43 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 3 | ||||
| -rw-r--r-- | indra/newview/llsidepanelappearance.cpp | 76 | ||||
| -rw-r--r-- | indra/newview/llsidepanelappearance.h | 7 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/sidepanel_appearance.xml | 35 | 
5 files changed, 112 insertions, 52 deletions
| diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d6265a85f6..1050deaa27 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -363,6 +363,35 @@ LLUUID LLAppearanceManager::getCOF()  	return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);  } + +const LLViewerInventoryItem* LLAppearanceManager::getCurrentOutfitLink() +{ +	const LLUUID& current_outfit_cat = getCOF(); +	LLInventoryModel::cat_array_t cat_array; +	LLInventoryModel::item_array_t item_array; +	// Can't search on FT_OUTFIT since links to categories return FT_CATEGORY for type since they don't +	// return preferred type. +	LLIsType is_category( LLAssetType::AT_CATEGORY );  +	gInventory.collectDescendentsIf(current_outfit_cat, +									cat_array, +									item_array, +									false, +									is_category, +									false); +	for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin(); +		 iter != item_array.end(); +		 iter++) +	{ +		const LLViewerInventoryItem *item = (*iter); +		const LLViewerInventoryCategory *cat = item->getLinkedCategory(); +		if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) +		{ +			return item; +		} +	} +	return NULL; +} +  // Update appearance from outfit folder.  void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, bool append)  { @@ -531,20 +560,28 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)  	linkAll(cof, gest_items, link_waiter);  	// Add link to outfit if category is an outfit.  -	LLViewerInventoryCategory* catp = gInventory.getCategory(category); +	const LLViewerInventoryCategory* catp = gInventory.getCategory(category); +	LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance *>(LLSideTray::getInstance()->getPanel("sidepanel_appearance")); +	  	if (!append && catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)  	{  		link_inventory_item(gAgent.getID(), category, cof, catp->getName(),  							LLAssetType::AT_LINK_FOLDER, link_waiter);  		// Update the current outfit name of the appearance sidepanel. -		LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance *>(LLSideTray::getInstance()->getPanel("sidepanel_appearance"));  		if (panel_appearance)  		{  			panel_appearance->refreshCurrentOutfitName(catp->getName());  		}  	} -							   +	else +	{ +		// Update the current outfit name of the appearance sidepanel. +		if (panel_appearance) +		{ +			panel_appearance->refreshCurrentOutfitName(); +		} +	}  }  void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, bool append) diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 5daa6d067b..7038d1a35b 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -61,6 +61,9 @@ public:  	// Find the Current Outfit folder.  	LLUUID getCOF(); +	// Finds the folder link to the currently worn outfit +	const LLViewerInventoryItem *getCurrentOutfitLink(); +  	void updateAgentWearables(LLWearableHoldingPattern* holder, bool append);  	// For debugging - could be moved elsewhere. diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index aeab3e2876..0f8e86cb3c 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -34,9 +34,12 @@  #include "llagent.h"  #include "llagentwearables.h" +#include "llappearancemgr.h" +#include "llinventorypanel.h"  #include "llfiltereditor.h"  #include "llfloaterreg.h"  #include "llfloaterworldmap.h" +#include "llfoldervieweventlistener.h"  #include "llpaneleditwearable.h"  #include "llpaneloutfitsinventory.h"  #include "lltextbox.h" @@ -68,7 +71,7 @@ LLSidepanelAppearance::LLSidepanelAppearance() :  	mFilterSubString(LLStringUtil::null),  	mFilterEditor(NULL),  	mLookInfo(NULL), -	mCurrLookPanel(NULL) +	mCurrOutfitPanel(NULL)  {  	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_appearance.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()  	mFetchWorn = new LLCurrentlyWornFetchObserver(this); @@ -81,6 +84,9 @@ LLSidepanelAppearance::~LLSidepanelAppearance()  // virtual  BOOL LLSidepanelAppearance::postBuild()  { +	mOpenOutfitBtn = getChild<LLButton>("openoutfit_btn"); +	mOpenOutfitBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onOpenOutfitButtonClicked, this)); +  	mEditAppearanceBtn = getChild<LLButton>("editappearance_btn");  	mEditAppearanceBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditAppearanceButtonClicked, this)); @@ -90,11 +96,9 @@ BOOL LLSidepanelAppearance::postBuild()  	mEditBtn = getChild<LLButton>("edit_btn");  	mEditBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditButtonClicked, this)); -	mNewLookBtn = getChild<LLButton>("newlook_btn"); -	mNewLookBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onNewOutfitButtonClicked, this)); -	mNewLookBtn->setEnabled(false); - -	mOverflowBtn = getChild<LLButton>("overflow_btn"); +	mNewOutfitBtn = getChild<LLButton>("newlook_btn"); +	mNewOutfitBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onNewOutfitButtonClicked, this)); +	mNewOutfitBtn->setEnabled(false);  	mFilterEditor = getChild<LLFilterEditor>("Filter");  	if (mFilterEditor) @@ -114,8 +118,6 @@ BOOL LLSidepanelAppearance::postBuild()  			back_btn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onBackButtonClicked, this));  		} -		// *TODO: Assign the action to an appropriate event. -		// mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::toggleMediaPanel, this));  	}  	mEditWearable = dynamic_cast<LLPanelEditWearable*>(getChild<LLPanel>("panel_edit_wearable")); @@ -130,7 +132,7 @@ BOOL LLSidepanelAppearance::postBuild()  	mCurrentLookName = getChild<LLTextBox>("currentlook_name"); -	mCurrLookPanel = getChild<LLPanel>("panel_currentlook"); +	mCurrOutfitPanel = getChild<LLPanel>("panel_currentlook");  	return TRUE;  } @@ -179,6 +181,27 @@ void LLSidepanelAppearance::onWearButtonClicked()  	}  } +void LLSidepanelAppearance::onOpenOutfitButtonClicked() +{ +	const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getCurrentOutfitLink(); +	if (!outfit_link) +		return; +	if (!outfit_link->getIsLinkType()) +		return; +	LLInventoryPanel *inventory_panel = mPanelOutfitsInventory->getActivePanel(); +	if (inventory_panel) +	{ +		LLFolderView *folder = inventory_panel->getRootFolder(); +		LLFolderViewItem *outfit_folder = folder->getItemByID(outfit_link->getLinkedUUID()); +		if (outfit_folder) +		{ +			outfit_folder->setOpen(!outfit_folder->isOpen()); +			folder->setSelectionFromRoot(outfit_folder,TRUE); +			folder->scrollToShowSelection(); +		} +	} +} +  void LLSidepanelAppearance::onEditAppearanceButtonClicked()  {  	if (gAgentWearables.areWearablesLoaded()) @@ -231,9 +254,8 @@ void LLSidepanelAppearance::toggleLookInfoPanel(BOOL visible)  	mFilterEditor->setVisible(!visible);  	mWearBtn->setVisible(!visible);  	mEditBtn->setVisible(!visible); -	mNewLookBtn->setVisible(!visible); -	mOverflowBtn->setVisible(!visible); -	mCurrLookPanel->setVisible(!visible); +	mNewOutfitBtn->setVisible(!visible); +	mCurrOutfitPanel->setVisible(!visible);  }  void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *wearable) @@ -255,7 +277,6 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we  void LLSidepanelAppearance::updateVerbs()  {  	bool is_look_info_visible = mLookInfo->getVisible(); -	mOverflowBtn->setEnabled(false);  	if (!is_look_info_visible)  	{ @@ -274,35 +295,24 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string name)  {  	if (name == "")  	{ -		const LLUUID current_outfit_cat = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); -		LLInventoryModel::cat_array_t cat_array; -		LLInventoryModel::item_array_t item_array; -		// Can't search on AT_OUTFIT since links to categories return AT_CATEGORY for type since they don't -		// return preferred type. -		LLIsType is_category( LLAssetType::AT_CATEGORY );  -		gInventory.collectDescendentsIf(current_outfit_cat, -										cat_array, -										item_array, -										false, -										is_category, -										false); -		for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin(); -			 iter != item_array.end(); -			 iter++) +		const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getCurrentOutfitLink(); +		if (outfit_link)  		{ -			const LLViewerInventoryItem *item = (*iter); -			const LLViewerInventoryCategory *cat = item->getLinkedCategory(); +			const LLViewerInventoryCategory *cat = outfit_link->getLinkedCategory();  			if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)  			{  				mCurrentLookName->setText(cat->getName());  				return;  			}  		} -		mCurrentLookName->setText(std::string("")); +		mCurrentLookName->setText(getString("No Outfit")); +		mOpenOutfitBtn->setEnabled(FALSE);  	}  	else  	{  		mCurrentLookName->setText(name); +		// Can't just call update verbs since the folder link may not have been created yet. +		mOpenOutfitBtn->setEnabled(TRUE);  	}  } @@ -319,7 +329,7 @@ void LLSidepanelAppearance::editWearable(LLWearable *wearable, void *data)  void LLSidepanelAppearance::fetchInventory()  { -	mNewLookBtn->setEnabled(false); +	mNewOutfitBtn->setEnabled(false);  	LLInventoryFetchObserver::item_ref_t ids;  	LLUUID item_id;  	for(S32 type = (S32)WT_SHAPE; type < (S32)WT_COUNT; ++type) @@ -368,5 +378,5 @@ void LLSidepanelAppearance::fetchInventory()  void LLSidepanelAppearance::inventoryFetched()  { -	mNewLookBtn->setEnabled(true); +	mNewOutfitBtn->setEnabled(true);  } diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index 496a1fef72..b335fd910d 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -64,6 +64,7 @@ public:  private:  	void onFilterEdit(const std::string& search_string); +	void onOpenOutfitButtonClicked();  	void onEditAppearanceButtonClicked();  	void onWearButtonClicked();  	void onEditButtonClicked(); @@ -78,12 +79,12 @@ private:  	LLPanelLookInfo*		mLookInfo;  	LLPanelEditWearable*	mEditWearable; +	LLButton*					mOpenOutfitBtn;  	LLButton*					mEditAppearanceBtn;  	LLButton*					mWearBtn;  	LLButton*					mEditBtn; -	LLButton*					mNewLookBtn; -	LLButton*					mOverflowBtn; -	LLPanel*					mCurrLookPanel; +	LLButton*					mNewOutfitBtn; +	LLPanel*					mCurrOutfitPanel;  	LLTextBox*					mCurrentLookName; diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 2ce156cfda..14530518d8 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -9,9 +9,9 @@  	  min_width="240"  	  name="appearance panel"  	  width="333"> -     <string -		 name="looks_tab_title" -		 value="Outfits" /> +	 <string +      name="No Outfit" +	  value="No Outfit" />       <panel  		 left="5" width="320" height="55"  		 background_visible="true" @@ -19,25 +19,34 @@  		 bg_alpha_color="0.2 0.2 0.2 1.0"  		 name="panel_currentlook"  		 follows="left|top|right"> +  	    <button +  	     	 follows="left|right|top" +  	     	 font="SansSerif" +  	     	 top="28" right="-10" width="60" height="20" +  	     	 layout="topleft" +  		 	 label="Edit" +  	     	 name="editappearance_btn"/> +        <button +	     follows="left|right|top" +		 top="28" left="5" width="25" height="22" +	     image_overlay="Inv_LookFolderOpen" +	     layout="topleft" +		 name="openoutfit_btn" +	     picture_style="true" />  		<text -			 top="-5" width="200" left="5" height="10" follows="left|right|top" +			 top="10" width="150" left="5" height="15" follows="left|right|top" +			 layout="topleft"          	 font="SansSerif" text_color="LtGray" word_wrap="true"          	 mouse_opaque="false" name="currentlook_title"> -					Current Outfit +					Current Outfit:      	</text>    		<text -			 top="-30" left="8" height="10" follows="left|right|top" +			 top="32" width="150" left="32" height="15" follows="left|right|top" +			 layout="topleft"        		 font="SansSerifBold" text_color="white" word_wrap="true"        		 mouse_opaque="false" name="currentlook_name" >  					MyOutfit    		</text> -  	    <button -  	     	 follows="left|right|top" -  	     	 font="SansSerif" -  	     	 top="28" right="-105" width="60" height="20" -  	     	 layout="topleft" -  		 	 label="Edit" -  	     	 name="editappearance_btn"/>  	</panel>      <filter_editor | 
