PATH-245: Fixing an issue with character selection.

meow-7.2.2
Todd Stinson 2012-02-09 10:16:24 -08:00
parent 537749509d
commit bf7ef74f1e
2 changed files with 38 additions and 10 deletions

View File

@ -45,6 +45,7 @@
#include "lluuid.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "llviewermenu.h"
#include "llselectmgr.h"
//---------------------------------------------------------------------------
@ -81,7 +82,6 @@ BOOL LLFloaterPathfindingCharacters::postBuild()
mCharactersScrollList = findChild<LLScrollListCtrl>("pathfinding_characters");
llassert(mCharactersScrollList != NULL);
mCharactersScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingCharacters::onCharactersSelectionChange, this));
mCharactersScrollList->setCommitOnSelectionChange(true);
mCharactersScrollList->sortByColumnIndex(0, true);
mCharactersStatus = findChild<LLTextBase>("characters_status");
@ -123,6 +123,35 @@ BOOL LLFloaterPathfindingCharacters::postBuild()
void LLFloaterPathfindingCharacters::onOpen(const LLSD& pKey)
{
sendCharactersDataGetRequest();
selectNoneCharacters();
mCharactersScrollList->setCommitOnSelectionChange(true);
}
void LLFloaterPathfindingCharacters::onClose(bool app_quitting)
{
mCharactersScrollList->setCommitOnSelectionChange(false);
selectNoneCharacters();
if (mCharacterSelection.notNull())
{
std::vector<LLViewerObject *> selectedObjects;
LLObjectSelection *charactersSelected = mCharacterSelection.get();
for (LLObjectSelection::valid_iterator characterIter = charactersSelected->valid_begin();
characterIter != charactersSelected->valid_end(); ++characterIter)
{
LLSelectNode *characterNode = *characterIter;
selectedObjects.push_back(characterNode->getObject());
}
for (std::vector<LLViewerObject *>::const_iterator selectedObjectIter = selectedObjects.begin();
selectedObjectIter != selectedObjects.end(); ++selectedObjectIter)
{
LLViewerObject *selectedObject = *selectedObjectIter;
LLSelectMgr::getInstance()->deselectObjectAndFamily(selectedObject);
}
mCharacterSelection.clear();
}
}
LLFloaterPathfindingCharacters::EMessagingState LLFloaterPathfindingCharacters::getMessagingState() const
@ -163,7 +192,7 @@ LLFloaterPathfindingCharacters::LLFloaterPathfindingCharacters(const LLSD& pSeed
mReturnBtn(NULL),
mDeleteBtn(NULL),
mTeleportBtn(NULL),
mSelection()
mCharacterSelection()
{
mSelfHandle.bind(this);
}
@ -171,7 +200,7 @@ LLFloaterPathfindingCharacters::LLFloaterPathfindingCharacters(const LLSD& pSeed
LLFloaterPathfindingCharacters::~LLFloaterPathfindingCharacters()
{
mPathfindingCharacters.clear();
mSelection.clear();
mCharacterSelection.clear();
}
void LLFloaterPathfindingCharacters::sendCharactersDataGetRequest()
@ -268,10 +297,10 @@ void LLFloaterPathfindingCharacters::setMessagingState(EMessagingState pMessagin
void LLFloaterPathfindingCharacters::onCharactersSelectionChange()
{
#if 0
std::vector<LLScrollListItem*> selectedItems = mCharactersScrollList->getAllSelected();
mCharacterSelection.clear();
LLSelectMgr::getInstance()->deselectAll();
std::vector<LLScrollListItem*> selectedItems = mCharactersScrollList->getAllSelected();
if (!selectedItems.empty())
{
int numSelectedItems = selectedItems.size();
@ -287,17 +316,15 @@ void LLFloaterPathfindingCharacters::onCharactersSelectionChange()
LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID());
if (viewerObject != NULL)
{
viewerObject->setSelected(true);
viewerObjects.push_back(viewerObject);
}
}
if (!viewerObjects.empty())
{
mSelection = LLSelectMgr::getInstance()->selectObjectAndFamily(viewerObjects);
mCharacterSelection = LLSelectMgr::getInstance()->selectObjectAndFamily(viewerObjects);
}
}
#endif
updateCharactersStatusMessage();
updateActionFields();

View File

@ -64,6 +64,7 @@ public:
virtual BOOL postBuild();
virtual void onOpen(const LLSD& pKey);
virtual void onClose(bool app_quitting);
EMessagingState getMessagingState() const;
BOOL isMessagingInProgress() const;
@ -85,7 +86,7 @@ private:
LLButton *mReturnBtn;
LLButton *mDeleteBtn;
LLButton *mTeleportBtn;
LLObjectSelectionHandle mSelection;
LLObjectSelectionHandle mCharacterSelection;
// Does its own instance management, so clients not allowed
// to allocate or destroy.