diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 112 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.h | 17 | 
2 files changed, 39 insertions, 90 deletions
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index daa41e1467..43c2f01da5 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -77,11 +77,16 @@ const U64 ALL_ITEMS_MASK = WEARABLE_MASK | ATTACHMENT_MASK;  static const std::string SAVE_BTN("save_btn");  static const std::string REVERT_BTN("revert_btn"); -class LLInventoryLookObserver : public LLInventoryObserver +class LLCOFObserver : public LLInventoryObserver  {  public: -	LLInventoryLookObserver(LLPanelOutfitEdit *panel) : mPanel(panel) {} -	virtual ~LLInventoryLookObserver()  +	LLCOFObserver(LLPanelOutfitEdit *panel) : mPanel(panel),  +		mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN) +	{ +		gInventory.addObserver(this); +	} + +	virtual ~LLCOFObserver()  	{  		if (gInventory.containsObserver(this))  		{ @@ -91,51 +96,43 @@ public:  	virtual void changed(U32 mask)  	{ -		if (mask & (LLInventoryObserver::ADD | LLInventoryObserver::REMOVE)) -		{ -			mPanel->updateLookInfo(); -		} +		if (!gInventory.isInventoryUsable()) return; +	 +		LLUUID cof = LLAppearanceMgr::getInstance()->getCOF(); +		if (cof.isNull()) return; + +		LLViewerInventoryCategory* cat = gInventory.getCategory(cof); +		if (!cat) return; + +		S32 cof_version = cat->getVersion(); + +		if (cof_version == mCOFLastVersion) return; + +		mCOFLastVersion = cof_version; + +		mPanel->update();  	} +  protected:  	LLPanelOutfitEdit *mPanel; -}; -class LLLookFetchObserver : public LLInventoryFetchDescendentsObserver -{ -public: -	LLLookFetchObserver(LLPanelOutfitEdit *panel) : -	mPanel(panel) -	{} -	LLLookFetchObserver() {} -	virtual void done() -	{ -		mPanel->lookFetched(); -		if(gInventory.containsObserver(this)) -		{ -			gInventory.removeObserver(this); -		} -	} -private: -	LLPanelOutfitEdit *mPanel; +	//last version number of a COF category +	S32 mCOFLastVersion;  };  LLPanelOutfitEdit::LLPanelOutfitEdit()  :	LLPanel(),  -	mCurrentOutfitID(), -	mFetchLook(NULL),  	mSearchFilter(NULL),  	mCOFWearables(NULL),  	mInventoryItemsPanel(NULL), -	mLookObserver(NULL) +	mCOFObserver(NULL)  {  	mSavedFolderState = new LLSaveFolderState();  	mSavedFolderState->setApply(FALSE); -	mFetchLook = new LLLookFetchObserver(this); -	mLookObserver = new LLInventoryLookObserver(this); -	gInventory.addObserver(mLookObserver); +	mCOFObserver = new LLCOFObserver(this);  	mLookItemTypes.reserve(NUM_LOOK_ITEM_TYPES);  	for (U32 i = 0; i < NUM_LOOK_ITEM_TYPES; i++) @@ -149,17 +146,8 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()  LLPanelOutfitEdit::~LLPanelOutfitEdit()  {  	delete mSavedFolderState; -	if (gInventory.containsObserver(mFetchLook)) -	{ -		gInventory.removeObserver(mFetchLook); -	} -	delete mFetchLook; -	 -	if (gInventory.containsObserver(mLookObserver)) -	{ -		gInventory.removeObserver(mLookObserver); -	} -	delete mLookObserver; + +	delete mCOFObserver;  }  BOOL LLPanelOutfitEdit::postBuild() @@ -242,9 +230,6 @@ void LLPanelOutfitEdit::moveWearable(bool closer_to_body)  	LLViewerInventoryItem* wearable_to_move = gInventory.getItem(item_id);  	LLAppearanceMgr::getInstance()->moveWearable(wearable_to_move, closer_to_body); - -	//*TODO why not to listen to inventory? -	updateLookInfo();  }  void LLPanelOutfitEdit::toggleAddWearablesPanel() @@ -360,10 +345,7 @@ void LLPanelOutfitEdit::onAddToOutfitClicked(void)  	LLFolderViewEventListener* listenerp  = curr_item->getListener();  	if (!listenerp) return; -	if (LLAppearanceMgr::getInstance()->wearItemOnAvatar(listenerp->getUUID())) -	{ -		updateLookInfo(); -	} +	LLAppearanceMgr::getInstance()->wearItemOnAvatar(listenerp->getUUID());  } @@ -372,8 +354,6 @@ void LLPanelOutfitEdit::onRemoveFromOutfitClicked(void)  	LLUUID id_to_remove = mCOFWearables->getSelectedUUID();  	LLAppearanceMgr::getInstance()->removeItemFromAvatar(id_to_remove); - -	updateLookInfo();  } @@ -465,34 +445,13 @@ void LLPanelOutfitEdit::onOutfitItemSelectionChange(void)  	}  } -void LLPanelOutfitEdit::changed(U32 mask) -{ -} - -void LLPanelOutfitEdit::lookFetched(void) +void LLPanelOutfitEdit::update()  {  	mCOFWearables->refresh();  	updateVerbs();  } -void LLPanelOutfitEdit::updateLookInfo() -{	 -	if (getVisible()) -	{ -		mFetchLook->setFetchID(mCurrentOutfitID); -		mFetchLook->startFetch(); -		if (mFetchLook->isFinished()) -		{ -			mFetchLook->done(); -		} -		else -		{ -			gInventory.addObserver(mFetchLook); -		} -	} -} -  void LLPanelOutfitEdit::displayCurrentOutfit()  {  	if (!getVisible()) @@ -500,8 +459,6 @@ void LLPanelOutfitEdit::displayCurrentOutfit()  		setVisible(TRUE);  	} -	mCurrentOutfitID = LLAppearanceMgr::getInstance()->getCOF(); -  	std::string current_outfit_name;  	if (LLAppearanceMgr::getInstance()->getBaseOutfitName(current_outfit_name))  	{ @@ -512,12 +469,15 @@ void LLPanelOutfitEdit::displayCurrentOutfit()  		mCurrentOutfitName->setText(getString("No Outfit"));  	} -	updateLookInfo(); +	update();  }  //private  void LLPanelOutfitEdit::updateVerbs()  { +	//*TODO implement better handling of COF dirtiness +	LLAppearanceMgr::getInstance()->updateIsDirty(); +  	bool outfit_is_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty();  	childSetEnabled(SAVE_BTN, outfit_is_dirty); diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 0074cd517b..3cdfed14b9 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -48,13 +48,12 @@ class LLButton;  class LLCOFWearables;  class LLTextBox;  class LLInventoryCategory; -class LLInventoryLookObserver; +class LLCOFObserver;  class LLInventoryPanel;  class LLSaveFolderState;  class LLFolderViewItem;  class LLScrollListCtrl;  class LLToggleableMenu; -class LLLookFetchObserver;  class LLFilterEditor;  class LLFilteredWearableListManager; @@ -82,11 +81,6 @@ public:  	/*virtual*/ ~LLPanelOutfitEdit();  	/*virtual*/ BOOL postBuild(); -	/*virtual*/ void changed(U32 mask); - -	/*virtual*/ void setParcelID(const LLUUID& parcel_id); -		// Sends a request for data about the given parcel, which will -		// only update the location if there is none already available.  	void moveWearable(bool closer_to_body); @@ -106,16 +100,12 @@ public:  	void displayCurrentOutfit(); -	void lookFetched(void); -	 -	void updateLookInfo(void); +	void update();  private:  	void updateVerbs(); -	//*TODO got rid of mCurrentOutfitID -	LLUUID				mCurrentOutfitID;  	LLTextBox*			mCurrentOutfitName;  	LLInventoryPanel*	mInventoryItemsPanel; @@ -127,8 +117,7 @@ private:  	LLFilteredWearableListManager* mWearableListManager; -	LLLookFetchObserver*		mFetchLook; -	LLInventoryLookObserver*	mLookObserver; +	LLCOFObserver*	mCOFObserver;  	std::vector<LLLookItemType> mLookItemTypes;  	LLCOFWearables*		mCOFWearables;  | 
