Ensuring that the scroll list is rebuilt after any missing avatar names are loaded into cache.
parent
fb7c7043a4
commit
ea23285f8b
|
|
@ -93,7 +93,7 @@ void LLFloaterPathfindingCharacters::requestGetObjects()
|
|||
LLPathfindingManager::getInstance()->requestGetCharacters(getNewRequestId(), boost::bind(&LLFloaterPathfindingCharacters::handleNewObjectList, this, _1, _2, _3));
|
||||
}
|
||||
|
||||
LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const
|
||||
LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr)
|
||||
{
|
||||
llassert(pObjectListPtr != NULL);
|
||||
llassert(!pObjectListPtr->isEmpty());
|
||||
|
|
@ -105,6 +105,11 @@ LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPa
|
|||
const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectIter->second.get());
|
||||
LLSD element = buildCharacterScrollListData(characterPtr);
|
||||
scrollListData.append(element);
|
||||
|
||||
if (characterPtr->hasOwner() && !characterPtr->hasOwnerName())
|
||||
{
|
||||
rebuildScrollListAfterAvatarNameLoads(characterPtr->getUUID());
|
||||
}
|
||||
}
|
||||
|
||||
return scrollListData;
|
||||
|
|
@ -139,7 +144,9 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi
|
|||
columns[1]["font"] = "SANSSERIF";
|
||||
|
||||
columns[2]["column"] = "owner";
|
||||
columns[2]["value"] = pCharacterPtr->getOwnerName();
|
||||
columns[2]["value"] = (pCharacterPtr->hasOwner() ?
|
||||
(pCharacterPtr->hasOwnerName() ? pCharacterPtr->getOwnerName() : getString("character_owner_loading")) :
|
||||
getString("character_owner_unknown"));
|
||||
columns[2]["font"] = "SANSSERIF";
|
||||
|
||||
S32 cpuTime = llround(pCharacterPtr->getCPUTime());
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ protected:
|
|||
|
||||
virtual void requestGetObjects();
|
||||
|
||||
virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const;
|
||||
virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr);
|
||||
|
||||
virtual S32 getNameColumnIndex() const;
|
||||
virtual const LLColor4 &getBeaconColor() const;
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects()
|
|||
LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3));
|
||||
}
|
||||
|
||||
LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const
|
||||
LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr)
|
||||
{
|
||||
llassert(pObjectListPtr != NULL);
|
||||
llassert(!pObjectListPtr->isEmpty());
|
||||
|
|
@ -245,6 +245,11 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath
|
|||
{
|
||||
LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition);
|
||||
scrollListData.append(element);
|
||||
|
||||
if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName())
|
||||
{
|
||||
rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -255,6 +260,11 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath
|
|||
const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get());
|
||||
LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition);
|
||||
scrollListData.append(element);
|
||||
|
||||
if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName())
|
||||
{
|
||||
rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -409,7 +419,9 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin
|
|||
columns[1]["font"] = "SANSSERIF";
|
||||
|
||||
columns[2]["column"] = "owner";
|
||||
columns[2]["value"] = (pLinksetPtr->hasOwnerName() ? pLinksetPtr->getOwnerName() : getString("linkset_owner_unknown"));
|
||||
columns[2]["value"] = (pLinksetPtr->hasOwner() ?
|
||||
(pLinksetPtr->hasOwnerName() ? pLinksetPtr->getOwnerName() : getString("linkset_owner_loading")) :
|
||||
getString("linkset_owner_unknown"));
|
||||
columns[2]["font"] = "SANSSERIF";
|
||||
|
||||
columns[3]["column"] = "land_impact";
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ protected:
|
|||
|
||||
virtual void requestGetObjects();
|
||||
|
||||
virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const;
|
||||
virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr);
|
||||
|
||||
virtual void updateControls();
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@
|
|||
#include <boost/signals2.hpp>
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llavatarname.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llenvmanager.h"
|
||||
|
|
@ -162,6 +164,7 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)
|
|||
mReturnButton(NULL),
|
||||
mDeleteButton(NULL),
|
||||
mTeleportButton(NULL),
|
||||
mLoadingAvatarNames(),
|
||||
mDefaultBeaconColor(),
|
||||
mDefaultBeaconTextColor(),
|
||||
mErrorTextColor(),
|
||||
|
|
@ -346,13 +349,23 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()
|
|||
updateControls();
|
||||
}
|
||||
|
||||
LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const
|
||||
LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr)
|
||||
{
|
||||
llassert(0);
|
||||
LLSD nullObjs = LLSD::emptyArray();
|
||||
return nullObjs;
|
||||
}
|
||||
|
||||
void LLFloaterPathfindingObjects::rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId)
|
||||
{
|
||||
std::set<LLUUID>::const_iterator iter = mLoadingAvatarNames.find(pAvatarId);
|
||||
if (iter == mLoadingAvatarNames.end())
|
||||
{
|
||||
mLoadingAvatarNames.insert(pAvatarId);
|
||||
LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2));
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterPathfindingObjects::updateControls()
|
||||
{
|
||||
updateMessagingStatus();
|
||||
|
|
@ -542,6 +555,16 @@ void LLFloaterPathfindingObjects::onGodLevelChange(U8 pGodLevel)
|
|||
requestGetObjects();
|
||||
}
|
||||
|
||||
void LLFloaterPathfindingObjects::handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName)
|
||||
{
|
||||
llassert(mLoadingAvatarNames.find(pAvatarId) != mLoadingAvatarNames.end());
|
||||
mLoadingAvatarNames.erase(pAvatarId);
|
||||
if (mLoadingAvatarNames.empty())
|
||||
{
|
||||
rebuildObjectsScrollList();
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterPathfindingObjects::updateMessagingStatus()
|
||||
{
|
||||
std::string statusText("");
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#ifndef LL_LLFLOATERPATHFINDINGOBJECTS_H
|
||||
#define LL_LLFLOATERPATHFINDINGOBJECTS_H
|
||||
|
||||
#include <set>
|
||||
#include <boost/signals2.hpp>
|
||||
|
||||
#include "llagent.h"
|
||||
|
|
@ -37,6 +38,7 @@
|
|||
#include "llselectmgr.h"
|
||||
#include "v4color.h"
|
||||
|
||||
class LLAvatarName;
|
||||
class LLButton;
|
||||
class LLCheckBoxCtrl;
|
||||
class LLScrollListCtrl;
|
||||
|
|
@ -77,7 +79,9 @@ protected:
|
|||
void handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);
|
||||
|
||||
void rebuildObjectsScrollList();
|
||||
virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const;
|
||||
virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr);
|
||||
|
||||
void rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId);
|
||||
|
||||
virtual void updateControls();
|
||||
|
||||
|
|
@ -102,24 +106,26 @@ protected:
|
|||
private:
|
||||
LLFloaterPathfindingObjects(const LLFloaterPathfindingObjects &pOther);
|
||||
|
||||
void setMessagingState(EMessagingState pMessagingState);
|
||||
void setMessagingState(EMessagingState pMessagingState);
|
||||
|
||||
void onRefreshObjectsClicked();
|
||||
void onSelectAllObjectsClicked();
|
||||
void onSelectNoneObjectsClicked();
|
||||
void onTakeClicked();
|
||||
void onTakeCopyClicked();
|
||||
void onReturnClicked();
|
||||
void onDeleteClicked();
|
||||
void onTeleportClicked();
|
||||
void onRefreshObjectsClicked();
|
||||
void onSelectAllObjectsClicked();
|
||||
void onSelectNoneObjectsClicked();
|
||||
void onTakeClicked();
|
||||
void onTakeCopyClicked();
|
||||
void onReturnClicked();
|
||||
void onDeleteClicked();
|
||||
void onTeleportClicked();
|
||||
|
||||
void onScrollListSelectionChanged();
|
||||
void onScrollListSelectionChanged();
|
||||
void onInWorldSelectionListChanged();
|
||||
void onRegionBoundaryCrossed();
|
||||
void onRegionBoundaryCrossed();
|
||||
void onGodLevelChange(U8 pGodLevel);
|
||||
|
||||
void updateMessagingStatus();
|
||||
void updateStateOnListActionControls();
|
||||
void handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName);
|
||||
|
||||
void updateMessagingStatus();
|
||||
void updateStateOnListActionControls();
|
||||
void updateOnScrollListChange();
|
||||
|
||||
LLPathfindingObjectPtr findObject(const LLScrollListItem *pListItem) const;
|
||||
|
|
@ -131,13 +137,15 @@ protected:
|
|||
LLButton *mSelectAllButton;
|
||||
LLButton *mSelectNoneButton;
|
||||
LLCheckBoxCtrl *mShowBeaconCheckBox;
|
||||
|
||||
|
||||
LLButton *mTakeButton;
|
||||
LLButton *mTakeCopyButton;
|
||||
LLButton *mReturnButton;
|
||||
LLButton *mDeleteButton;
|
||||
LLButton *mTeleportButton;
|
||||
|
||||
std::set<LLUUID> mLoadingAvatarNames;
|
||||
|
||||
LLColor4 mDefaultBeaconColor;
|
||||
LLColor4 mDefaultBeaconTextColor;
|
||||
LLColor4 mErrorTextColor;
|
||||
|
|
@ -153,7 +161,6 @@ protected:
|
|||
boost::signals2::connection mSelectionUpdateSlot;
|
||||
boost::signals2::connection mRegionBoundaryCrossingSlot;
|
||||
LLAgent::god_level_change_slot_t mGodLevelChangeSlot;
|
||||
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERPATHFINDINGOBJECTS_H
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ LLPathfindingObject::LLPathfindingObject()
|
|||
mName(),
|
||||
mDescription(),
|
||||
mOwnerUUID(),
|
||||
mHasOwnerName(false),
|
||||
mOwnerName(),
|
||||
mLocation()
|
||||
{
|
||||
|
|
@ -62,6 +63,7 @@ LLPathfindingObject::LLPathfindingObject(const std::string &pUUID, const LLSD &p
|
|||
mName(),
|
||||
mDescription(),
|
||||
mOwnerUUID(),
|
||||
mHasOwnerName(false),
|
||||
mOwnerName(),
|
||||
mLocation()
|
||||
{
|
||||
|
|
@ -73,9 +75,11 @@ LLPathfindingObject::LLPathfindingObject(const LLPathfindingObject& pOther)
|
|||
mName(pOther.mName),
|
||||
mDescription(pOther.mDescription),
|
||||
mOwnerUUID(pOther.mOwnerUUID),
|
||||
mOwnerName(pOther.mOwnerName),
|
||||
mHasOwnerName(false),
|
||||
mOwnerName(),
|
||||
mLocation(pOther.mLocation)
|
||||
{
|
||||
fetchOwnerName();
|
||||
}
|
||||
|
||||
LLPathfindingObject::~LLPathfindingObject()
|
||||
|
|
@ -88,7 +92,7 @@ LLPathfindingObject &LLPathfindingObject::operator =(const LLPathfindingObject&
|
|||
mName = pOther.mName;
|
||||
mDescription = pOther.mDescription;
|
||||
mOwnerUUID = pOther.mOwnerUUID;
|
||||
mOwnerName = pOther.mOwnerName;
|
||||
fetchOwnerName();
|
||||
mLocation = pOther.mLocation;
|
||||
|
||||
return *this;
|
||||
|
|
@ -98,7 +102,7 @@ std::string LLPathfindingObject::getOwnerName() const
|
|||
{
|
||||
std::string ownerName;
|
||||
|
||||
if (hasOwnerName())
|
||||
if (hasOwner())
|
||||
{
|
||||
ownerName = mOwnerName.getCompleteName();
|
||||
}
|
||||
|
|
@ -126,7 +130,7 @@ void LLPathfindingObject::parseObjectData(const LLSD &pObjectData)
|
|||
{
|
||||
llassert(pObjectData.get(PATHFINDING_OBJECT_OWNER_FIELD).isUUID());
|
||||
mOwnerUUID = pObjectData.get(PATHFINDING_OBJECT_OWNER_FIELD).asUUID();
|
||||
LLAvatarNameCache::get(mOwnerUUID, &mOwnerName);
|
||||
fetchOwnerName();
|
||||
}
|
||||
#endif // SERVER_SIDE_OWNER_ROLLOUT_COMPLETE
|
||||
|
||||
|
|
@ -134,3 +138,19 @@ void LLPathfindingObject::parseObjectData(const LLSD &pObjectData)
|
|||
llassert(pObjectData.get(PATHFINDING_OBJECT_POSITION_FIELD).isArray());
|
||||
mLocation.setValue(pObjectData.get(PATHFINDING_OBJECT_POSITION_FIELD));
|
||||
}
|
||||
|
||||
void LLPathfindingObject::fetchOwnerName()
|
||||
{
|
||||
mHasOwnerName = false;
|
||||
if (hasOwner())
|
||||
{
|
||||
LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));
|
||||
}
|
||||
}
|
||||
|
||||
void LLPathfindingObject::handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName)
|
||||
{
|
||||
llassert(mOwnerUUID == pOwnerUUID);
|
||||
mOwnerName = pAvatarName;
|
||||
mHasOwnerName = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,8 @@ public:
|
|||
inline const LLUUID& getUUID() const {return mUUID;};
|
||||
inline const std::string& getName() const {return mName;};
|
||||
inline const std::string& getDescription() const {return mDescription;};
|
||||
inline BOOL hasOwnerName() const {return mOwnerUUID.notNull();};
|
||||
inline BOOL hasOwner() const {return mOwnerUUID.notNull();};
|
||||
inline bool hasOwnerName() const {return mHasOwnerName;};
|
||||
std::string getOwnerName() const;
|
||||
inline const LLVector3& getLocation() const {return mLocation;};
|
||||
|
||||
|
|
@ -62,10 +63,14 @@ protected:
|
|||
private:
|
||||
void parseObjectData(const LLSD &pObjectData);
|
||||
|
||||
void fetchOwnerName();
|
||||
void handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName);
|
||||
|
||||
LLUUID mUUID;
|
||||
std::string mName;
|
||||
std::string mDescription;
|
||||
LLUUID mOwnerUUID;
|
||||
bool mHasOwnerName;
|
||||
LLAvatarName mOwnerName;
|
||||
LLVector3 mLocation;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
<floater.string name="messaging_complete_available">[NUM_SELECTED] characters selected out of [NUM_TOTAL].</floater.string>
|
||||
<floater.string name="messaging_not_enabled">This region is not enabled for pathfinding.</floater.string>
|
||||
<floater.string name="character_cpu_time">[CPU_TIME] µs</floater.string>
|
||||
<floater.string name="character_owner_loading">[Loading]</floater.string>
|
||||
<floater.string name="character_owner_unknown">Unknown</floater.string>
|
||||
<panel
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
<floater.string name="linkset_terrain_owner">--</floater.string>
|
||||
<floater.string name="linkset_terrain_land_impact">--</floater.string>
|
||||
<floater.string name="linkset_terrain_dist_from_you">--</floater.string>
|
||||
<floater.string name="linkset_owner_loading">[Loading]</floater.string>
|
||||
<floater.string name="linkset_owner_unknown">Unknown</floater.string>
|
||||
<floater.string name="linkset_use_walkable">Walkable</floater.string>
|
||||
<floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>
|
||||
|
|
|
|||
Loading…
Reference in New Issue