PATH-142: Refined the linksets status messaging functionlity.

meow-7.2.2
Todd Stinson 2012-01-09 18:15:32 -08:00
parent 1eea77add2
commit ebeddd7fd9
3 changed files with 123 additions and 72 deletions

View File

@ -75,7 +75,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
mLinksetsStatus = findChild<LLTextBase>("linksets_status");
llassert(mLinksetsStatus != NULL);
updateLinksetsStatus();
setFetchState(kFetchInitial);
return LLFloater::postBuild();
}
@ -90,27 +90,54 @@ void LLFloaterPathfindingLinksets::openLinksetsEditor()
LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets");
}
LLFloaterPathfindingLinksets::EFetchState LLFloaterPathfindingLinksets::getFetchState() const
{
return mFetchState;
}
BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const
{
BOOL retVal;
switch (getFetchState())
{
case kFetchStarting :
case kFetchInProgress :
case kFetchInProgress_MultiRequested :
case kFetchReceived :
retVal = true;
break;
default :
retVal = false;
break;
}
return retVal;
}
LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed)
: LLFloater(pSeed),
mFetchState(kFetchInitial),
mLinksetsScrollList(NULL),
mLinksetsStatus(NULL),
mNavmeshDataGetResponder(NULL)
mLinksetsStatus(NULL)
{
}
LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets()
{
clearNavmeshDataResponder();
}
void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest()
{
if (mNavmeshDataGetResponder != NULL)
if (isFetchInProgress())
{
updateLinksetsStatusForFetchInProgress();
if (getFetchState() == kFetchInProgress)
{
setFetchState(kFetchInProgress_MultiRequested);
}
}
else
{
setFetchState(kFetchStarting);
clearLinksetsList();
LLViewerRegion* region = gAgent.getRegion();
@ -119,13 +146,13 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest()
std::string navmeshDataURL = region->getCapability("ObjectNavmesh");
if (navmeshDataURL.empty())
{
llinfos << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl;
setFetchState(kFetchComplete);
llwarns << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl;
}
else
{
updateLinksetsStatusForFetch();
mNavmeshDataGetResponder = new NavmeshDataGetResponder(navmeshDataURL, this);
LLHTTPClient::get(navmeshDataURL, mNavmeshDataGetResponder);
setFetchState(kFetchInProgress);
LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this));
}
}
}
@ -133,7 +160,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest()
void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData)
{
clearNavmeshDataResponder();
setFetchState(kFetchReceived);
clearLinksetsList();
const LLVector3& avatarPosition = gAgent.getPositionAgent();
@ -212,25 +239,25 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes
mLinksetsScrollList->addElement(element);
}
updateLinksetsStatus();
setFetchState(kFetchComplete);
}
void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason)
{
clearNavmeshDataResponder();
setFetchState(kFetchError);
clearLinksetsList();
updateLinksetsStatusForFetchError();
llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl;
}
void LLFloaterPathfindingLinksets::clearNavmeshDataResponder()
void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState)
{
mNavmeshDataGetResponder = NULL;
mFetchState = pFetchState;
updateLinksetsStatusMessage();
}
void LLFloaterPathfindingLinksets::onLinksetsSelectionChange()
{
updateLinksetsStatus();
updateLinksetsStatusMessage();
}
void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked()
@ -251,7 +278,7 @@ void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked()
void LLFloaterPathfindingLinksets::clearLinksetsList()
{
mLinksetsScrollList->deleteAllItems();
updateLinksetsStatus();
updateLinksetsStatusMessage();
}
void LLFloaterPathfindingLinksets::selectAllLinksets()
@ -264,53 +291,63 @@ void LLFloaterPathfindingLinksets::selectNoneLinksets()
mLinksetsScrollList->deselectAllItems();
}
void LLFloaterPathfindingLinksets::updateLinksetsStatus()
void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage()
{
static const LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow");
std::string statusText("");
if (mLinksetsScrollList->isEmpty())
{
statusText = getString("linksets_none_found");
}
else
{
S32 numItems = mLinksetsScrollList->getItemCount();
S32 numSelectedItems = mLinksetsScrollList->getNumSelected();
LLLocale locale(LLStringUtil::getLocale());
std::string numItemsString;
LLResMgr::getInstance()->getIntegerString(numItemsString, numItems);
std::string numSelectedItemsString;
LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems);
LLStringUtil::format_map_t string_args;
string_args["[NUM_SELECTED]"] = numSelectedItemsString;
string_args["[NUM_TOTAL]"] = numItemsString;
statusText = getString("linksets_available", string_args);
}
mLinksetsStatus->setText((LLStringExplicit)statusText);
}
void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetch()
{
mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching"));
}
void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetchInProgress()
{
mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching_inprogress"));
}
void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetchError()
{
LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow");
LLStyle::Params styleParams;
styleParams.color = warningColor;
mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching_error"), styleParams);
}
switch (getFetchState())
{
case kFetchStarting :
statusText = getString("linksets_fetching_starting");
break;
case kFetchInProgress :
statusText = getString("linksets_fetching_inprogress");
break;
case kFetchInProgress_MultiRequested :
statusText = getString("linksets_fetching_inprogress_multi_request");
break;
case kFetchReceived :
statusText = getString("linksets_fetching_received");
break;
case kFetchError :
statusText = getString("linksets_fetching_error");
styleParams.color = warningColor;
break;
case kFetchComplete :
if (mLinksetsScrollList->isEmpty())
{
statusText = getString("linksets_fetching_done_none_found");
}
else
{
S32 numItems = mLinksetsScrollList->getItemCount();
S32 numSelectedItems = mLinksetsScrollList->getNumSelected();
LLLocale locale(LLStringUtil::getLocale());
std::string numItemsString;
LLResMgr::getInstance()->getIntegerString(numItemsString, numItems);
std::string numSelectedItemsString;
LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems);
LLStringUtil::format_map_t string_args;
string_args["[NUM_SELECTED]"] = numSelectedItemsString;
string_args["[NUM_TOTAL]"] = numItemsString;
statusText = getString("linksets_fetching_done_available", string_args);
}
break;
case kFetchInitial:
default:
statusText = getString("linksets_fetching_initial");
break;
}
mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams);
}
NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater)
: mNavmeshDataGetURL(pNavmeshDataGetURL),
mLinksetsFloater(pLinksetsFloater)

View File

@ -33,7 +33,6 @@
class LLSD;
class LLTextBase;
class LLScrollListCtrl;
class NavmeshDataGetResponder;
class LLFloaterPathfindingLinksets
: public LLFloater
@ -41,18 +40,32 @@ class LLFloaterPathfindingLinksets
friend class LLFloaterReg;
friend class NavmeshDataGetResponder;
typedef enum
{
kFetchInitial,
kFetchStarting,
kFetchInProgress,
kFetchInProgress_MultiRequested,
kFetchReceived,
kFetchError,
kFetchComplete
} EFetchState;
public:
virtual BOOL postBuild();
virtual void onOpen(const LLSD& pKey);
static void openLinksetsEditor();
EFetchState getFetchState() const;
BOOL isFetchInProgress() const;
protected:
private:
EFetchState mFetchState;
LLScrollListCtrl *mLinksetsScrollList;
LLTextBase *mLinksetsStatus;
NavmeshDataGetResponder *mNavmeshDataGetResponder;
// Does its own instance management, so clients not allowed
// to allocate or destroy.
@ -62,7 +75,8 @@ private:
void sendNavmeshDataGetRequest();
void handleNavmeshDataGetReply(const LLSD& pNavmeshData);
void handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason);
void clearNavmeshDataResponder();
void setFetchState(EFetchState pFetchState);
void onLinksetsSelectionChange();
void onRefreshLinksetsClicked();
@ -73,10 +87,7 @@ private:
void selectAllLinksets();
void selectNoneLinksets();
void updateLinksetsStatus();
void updateLinksetsStatusForFetch();
void updateLinksetsStatusForFetchInProgress();
void updateLinksetsStatusForFetchError();
void updateLinksetsStatusMessage();
};
#endif // LL_LLFLOATERPATHFINDINGLINKSETS_H

View File

@ -11,11 +11,14 @@
single_instance="true"
title="Pathfinding linksets"
width="950">
<floater.string name="linksets_fetching">Querying for pathfinding linksets ...</floater.string>
<floater.string name="linksets_fetching_inprogress">Querying for pathfinding linksets (already in progress) ...</floater.string>
<floater.string name="linksets_fetching_initial"></floater.string>
<floater.string name="linksets_fetching_starting">Building query for pathfinding linksets ...</floater.string>
<floater.string name="linksets_fetching_inprogress">Querying for pathfinding linksets ...</floater.string>
<floater.string name="linksets_fetching_inprogress_multi_request">Querying for pathfinding linksets (already in progress) ...</floater.string>
<floater.string name="linksets_fetching_received">Loading pathfinding linksets data from response ...</floater.string>
<floater.string name="linksets_fetching_error">Error detected while querying for pathfinding linksets</floater.string>
<floater.string name="linksets_none_found">No pathfinding linksets</floater.string>
<floater.string name="linksets_available">[NUM_SELECTED] linksets selected out of [NUM_TOTAL]</floater.string>
<floater.string name="linksets_fetching_done_none_found">No pathfinding linksets</floater.string>
<floater.string name="linksets_fetching_done_available">[NUM_SELECTED] linksets selected out of [NUM_TOTAL]</floater.string>
<floater.string name="linkset_is_fixed">Fixed</floater.string>
<floater.string name="linkset_is_not_fixed">Not fixed</floater.string>
<floater.string name="linkset_is_walkable">Walkable</floater.string>