From 588dc1b020315ca2c62eb8adc0db48af61e55c4e Mon Sep 17 00:00:00 2001 From: Todd Stinson <stinson@lindenlab.com> Date: Mon, 30 Jan 2012 11:10:53 -0800 Subject: PATH-187: Using handles instead of pointers for safer implementation. --- indra/newview/llfloaterpathfindinglinksets.cpp | 58 +++++++++++++++++--------- indra/newview/llfloaterpathfindinglinksets.h | 53 +++++++++++------------ 2 files changed, 66 insertions(+), 45 deletions(-) diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index e2846d36f3..571c4a8427 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -32,7 +32,7 @@ #include "v3math.h" #include "lltextvalidate.h" #include "llagent.h" -#include "llfloater.h" +#include "llhandle.h" #include "llfloaterreg.h" #include "lltextbase.h" #include "lllineeditor.h" @@ -59,7 +59,8 @@ class NavMeshDataGetResponder : public LLHTTPClient::Responder { public: - NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, + const LLHandle<LLFloaterPathfindingLinksets> &pLinksetsHandle); virtual ~NavMeshDataGetResponder(); virtual void result(const LLSD& pContent); @@ -68,8 +69,8 @@ public: private: NavMeshDataGetResponder(const NavMeshDataGetResponder& pOther); - std::string mNavMeshDataGetURL; - LLFloaterPathfindingLinksets *mLinksetsFloater; + std::string mNavMeshDataGetURL; + LLHandle<LLFloaterPathfindingLinksets> mLinksetsFloaterHandle; }; //--------------------------------------------------------------------------- @@ -79,7 +80,8 @@ private: class NavMeshDataPutResponder : public LLHTTPClient::Responder { public: - NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, + const LLHandle<LLFloaterPathfindingLinksets> &pLinksetsHandle); virtual ~NavMeshDataPutResponder(); virtual void result(const LLSD& pContent); @@ -88,8 +90,8 @@ public: private: NavMeshDataPutResponder(const NavMeshDataPutResponder& pOther); - std::string mNavMeshDataPutURL; - LLFloaterPathfindingLinksets *mLinksetsFloater; + std::string mNavMeshDataPutURL; + LLHandle<LLFloaterPathfindingLinksets> mLinksetsFloaterHandle; }; //--------------------------------------------------------------------------- @@ -232,6 +234,7 @@ BOOL LLFloaterPathfindingLinksets::isMessagingInProgress() const LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), + mSelfHandle(), mPathfindingLinksets(), mMessagingState(kMessagingInitial), mLinksetsScrollList(NULL), @@ -257,6 +260,7 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mEditPhantom(NULL), mApplyEdits(NULL) { + mSelfHandle.bind(this); } LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() @@ -287,7 +291,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() else { setMessagingState(kMessagingFetchRequestSent); - LLHTTPClient::get(navMeshDataURL, new NavMeshDataGetResponder(navMeshDataURL, this)); + LLHTTPClient::get(navMeshDataURL, new NavMeshDataGetResponder(navMeshDataURL, mSelfHandle)); } } } @@ -303,7 +307,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostDa } else { - LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, this)); + LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, mSelfHandle)); } } } @@ -756,48 +760,64 @@ void LLFloaterPathfindingLinksets::setPathState(LLPathfindingLinkset::EPathState // NavMeshDataGetResponder //--------------------------------------------------------------------------- -NavMeshDataGetResponder::NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) +NavMeshDataGetResponder::NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, + const LLHandle<LLFloaterPathfindingLinksets> &pLinksetsHandle) : mNavMeshDataGetURL(pNavMeshDataGetURL), - mLinksetsFloater(pLinksetsFloater) + mLinksetsFloaterHandle(pLinksetsHandle) { } NavMeshDataGetResponder::~NavMeshDataGetResponder() { - mLinksetsFloater = NULL; } void NavMeshDataGetResponder::result(const LLSD& pContent) { - mLinksetsFloater->handleNavMeshDataGetReply(pContent); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataGetReply(pContent); + } } void NavMeshDataGetResponder::error(U32 status, const std::string& reason) { - mLinksetsFloater->handleNavMeshDataGetError(mNavMeshDataGetURL, reason); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataGetError(mNavMeshDataGetURL, reason); + } } //--------------------------------------------------------------------------- // NavMeshDataPutResponder //--------------------------------------------------------------------------- -NavMeshDataPutResponder::NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater) +NavMeshDataPutResponder::NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, + const LLHandle<LLFloaterPathfindingLinksets> &pLinksetsHandle) : mNavMeshDataPutURL(pNavMeshDataPutURL), - mLinksetsFloater(pLinksetsFloater) + mLinksetsFloaterHandle(pLinksetsHandle) { } NavMeshDataPutResponder::~NavMeshDataPutResponder() { - mLinksetsFloater = NULL; } void NavMeshDataPutResponder::result(const LLSD& pContent) { - mLinksetsFloater->handleNavMeshDataPutReply(pContent); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataPutReply(pContent); + } } void NavMeshDataPutResponder::error(U32 status, const std::string& reason) { - mLinksetsFloater->handleNavMeshDataPutError(mNavMeshDataPutURL, reason); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataPutError(mNavMeshDataPutURL, reason); + } } diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index bb37987160..250625c72a 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -28,13 +28,13 @@ #ifndef LL_LLFLOATERPATHFINDINGLINKSETS_H #define LL_LLFLOATERPATHFINDINGLINKSETS_H -#include "llsd.h" -#include "v3math.h" +#include "llhandle.h" #include "llfloater.h" #include "lluuid.h" #include "llpathfindinglinkset.h" #include "llfilteredpathfindinglinksets.h" +class LLSD; class LLTextBase; class LLScrollListCtrl; class LLLineEditor; @@ -76,30 +76,31 @@ public: protected: private: - LLFilteredPathfindingLinksets mPathfindingLinksets; - EMessagingState mMessagingState; - LLScrollListCtrl *mLinksetsScrollList; - LLTextBase *mLinksetsStatus; - LLLineEditor *mFilterByName; - LLLineEditor *mFilterByDescription; - LLCheckBoxCtrl *mFilterByWalkable; - LLCheckBoxCtrl *mFilterByObstacle; - LLCheckBoxCtrl *mFilterByIgnored; - LLRadioGroup *mEditPathState; - LLUICtrl *mEditPathStateWalkable; - LLUICtrl *mEditPathStateObstacle; - LLUICtrl *mEditPathStateIgnored; - LLTextBase *mLabelWalkabilityCoefficients; - LLTextBase *mLabelEditA; - LLTextBase *mLabelEditB; - LLTextBase *mLabelEditC; - LLTextBase *mLabelEditD; - LLLineEditor *mEditA; - LLLineEditor *mEditB; - LLLineEditor *mEditC; - LLLineEditor *mEditD; - LLCheckBoxCtrl *mEditPhantom; - LLButton *mApplyEdits; + LLRootHandle<LLFloaterPathfindingLinksets> mSelfHandle; + LLFilteredPathfindingLinksets mPathfindingLinksets; + EMessagingState mMessagingState; + LLScrollListCtrl *mLinksetsScrollList; + LLTextBase *mLinksetsStatus; + LLLineEditor *mFilterByName; + LLLineEditor *mFilterByDescription; + LLCheckBoxCtrl *mFilterByWalkable; + LLCheckBoxCtrl *mFilterByObstacle; + LLCheckBoxCtrl *mFilterByIgnored; + LLRadioGroup *mEditPathState; + LLUICtrl *mEditPathStateWalkable; + LLUICtrl *mEditPathStateObstacle; + LLUICtrl *mEditPathStateIgnored; + LLTextBase *mLabelWalkabilityCoefficients; + LLTextBase *mLabelEditA; + LLTextBase *mLabelEditB; + LLTextBase *mLabelEditC; + LLTextBase *mLabelEditD; + LLLineEditor *mEditA; + LLLineEditor *mEditB; + LLLineEditor *mEditC; + LLLineEditor *mEditD; + LLCheckBoxCtrl *mEditPhantom; + LLButton *mApplyEdits; // Does its own instance management, so clients not allowed // to allocate or destroy. -- cgit v1.2.3