From 05a49dd4252930fbfbb61a7e88ef5ef253cceca6 Mon Sep 17 00:00:00 2001 From: Todd Stinson <stinson@lindenlab.com> Date: Thu, 23 Feb 2012 17:12:44 -0800 Subject: PATH-292: Fixing the post-modify update handler to update the linkset list rather than overwrite it. --- indra/newview/llfloaterpathfindinglinksets.cpp | 22 +++++++++++++++++++++- indra/newview/llfloaterpathfindinglinksets.h | 1 + indra/newview/llpathfindinglinksetlist.cpp | 19 +++++++++---------- indra/newview/llpathfindinglinksetlist.h | 2 +- 4 files changed, 32 insertions(+), 12 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 73ab01a89f..2b3007b435 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -320,7 +320,7 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPt llassert(!isMessagingInProgress()); if (!isMessagingInProgress()) { - switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2))) + switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2))) { case LLPathfindingManager::kLinksetsRequestStarted : setMessagingState(kMessagingSetRequestSent); @@ -359,6 +359,26 @@ void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ELink } } +void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) +{ + mLinksetsListPtr->update(*pLinksetsListPtr); + updateScrollList(); + + switch (pLinksetsRequestStatus) + { + case LLPathfindingManager::kLinksetsRequestCompleted : + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kLinksetsRequestError : + setMessagingState(kMessagingSetError); + break; + default : + setMessagingState(kMessagingSetError); + llassert(0); + break; + } +} + void LLFloaterPathfindingLinksets::onApplyAllFilters() { applyFilters(); diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index f4758e2335..abbc355f46 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -113,6 +113,7 @@ private: void requestGetLinksets(); void requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD); void handleNewLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr); + void handleUpdateLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr); void onApplyAllFilters(); void onClearFiltersClicked(); diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp index e67b7b800c..7facf88c40 100644 --- a/indra/newview/llpathfindinglinksetlist.cpp +++ b/indra/newview/llpathfindinglinksetlist.cpp @@ -62,24 +62,23 @@ LLPathfindingLinksetList::~LLPathfindingLinksetList() clear(); } -void LLPathfindingLinksetList::update(const LLSD& pLinksetItems) +void LLPathfindingLinksetList::update(const LLPathfindingLinksetList &pUpdateLinksetList) { - for (LLSD::map_const_iterator linksetItemIter = pLinksetItems.beginMap(); - linksetItemIter != pLinksetItems.endMap(); ++linksetItemIter) + for (LLPathfindingLinksetList::const_iterator updateLinksetIter = pUpdateLinksetList.begin(); + updateLinksetIter != pUpdateLinksetList.end(); ++updateLinksetIter) { - const std::string& uuid(linksetItemIter->first); - const LLSD& linksetData = linksetItemIter->second; - LLPathfindingLinksetMap::iterator linksetIter = this->find(uuid); + const std::string &uuid = updateLinksetIter->first; + const LLPathfindingLinksetPtr updateLinksetPtr = updateLinksetIter->second; + + LLPathfindingLinksetList::iterator linksetIter = find(uuid); if (linksetIter == end()) { - LLPathfindingLinksetPtr linkset(new LLPathfindingLinkset(uuid, linksetData)); - insert(std::pair<std::string, LLPathfindingLinksetPtr>(uuid, linkset)); + insert(std::pair<std::string, LLPathfindingLinksetPtr>(uuid, updateLinksetPtr)); } else { LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - const LLPathfindingLinkset newLinkset(uuid, linksetData); - *linksetPtr = newLinkset; + *linksetPtr = *updateLinksetPtr; } } } diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h index 9ec36c2431..443f331770 100644 --- a/indra/newview/llpathfindinglinksetlist.h +++ b/indra/newview/llpathfindinglinksetlist.h @@ -47,7 +47,7 @@ public: LLPathfindingLinksetList(const LLSD& pLinksetItems); virtual ~LLPathfindingLinksetList(); - void update(const LLSD& pLinksetItems); + void update(const LLPathfindingLinksetList &pUpdateLinksetList); LLSD encodeAlteredFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const; -- cgit v1.2.3