168 lines
5.3 KiB
C++
168 lines
5.3 KiB
C++
/**
|
|
* @file llfloaterpathfindingbasic.cpp
|
|
* @author William Todd Stinson
|
|
* @brief "Pathfinding basic" floater, allowing for basic freezing and unfreezing of the pathfinding avatar mode.
|
|
*
|
|
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
|
* Second Life Viewer Source Code
|
|
* Copyright (C) 2010, Linden Research, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation;
|
|
* version 2.1 of the License only.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#include "llviewerprecompiledheaders.h"
|
|
#include "llfloaterpathfindingbasic.h"
|
|
#include "llsd.h"
|
|
#include "lltextbase.h"
|
|
#include "llbutton.h"
|
|
#include "llpathfindingmanager.h"
|
|
|
|
#include <boost/bind.hpp>
|
|
|
|
//---------------------------------------------------------------------------
|
|
// LLFloaterPathfindingBasic
|
|
//---------------------------------------------------------------------------
|
|
|
|
BOOL LLFloaterPathfindingBasic::postBuild()
|
|
{
|
|
mStatusText = findChild<LLTextBase>("status_label");
|
|
llassert(mStatusText != NULL);
|
|
|
|
mUnfreezeLabel = findChild<LLTextBase>("unfreeze_label");
|
|
llassert(mUnfreezeLabel != NULL);
|
|
|
|
mUnfreezeButton = findChild<LLButton>("enter_unfrozen_mode");
|
|
llassert(mUnfreezeButton != NULL);
|
|
mUnfreezeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingBasic::onUnfreezeClicked, this));
|
|
|
|
mFreezeLabel = findChild<LLTextBase>("freeze_label");
|
|
llassert(mFreezeLabel != NULL);
|
|
|
|
mFreezeButton = findChild<LLButton>("enter_frozen_mode");
|
|
llassert(mFreezeButton != NULL);
|
|
mFreezeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingBasic::onFreezeClicked, this));
|
|
|
|
return LLFloater::postBuild();
|
|
}
|
|
|
|
void LLFloaterPathfindingBasic::onOpen(const LLSD& pKey)
|
|
{
|
|
LLFloater::onOpen(pKey);
|
|
|
|
if (!mAgentStateSlot.connected())
|
|
{
|
|
mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingBasic::onAgentStateCB, this, _1));
|
|
}
|
|
setAgentState(LLPathfindingManager::getInstance()->getAgentState());
|
|
}
|
|
|
|
void LLFloaterPathfindingBasic::onClose(bool pIsAppQuitting)
|
|
{
|
|
if (mAgentStateSlot.connected())
|
|
{
|
|
mAgentStateSlot.disconnect();
|
|
}
|
|
|
|
LLFloater::onClose(pIsAppQuitting);
|
|
}
|
|
|
|
LLFloaterPathfindingBasic::LLFloaterPathfindingBasic(const LLSD& pSeed)
|
|
: LLFloater(pSeed),
|
|
mStatusText(NULL),
|
|
mUnfreezeLabel(NULL),
|
|
mUnfreezeButton(NULL),
|
|
mFreezeLabel(NULL),
|
|
mFreezeButton(NULL),
|
|
mAgentStateSlot()
|
|
{
|
|
}
|
|
|
|
LLFloaterPathfindingBasic::~LLFloaterPathfindingBasic()
|
|
{
|
|
}
|
|
|
|
void LLFloaterPathfindingBasic::onUnfreezeClicked()
|
|
{
|
|
mUnfreezeButton->setEnabled(FALSE);
|
|
LLPathfindingManager::getInstance()->requestSetAgentState(LLPathfindingManager::kAgentStateUnfrozen);
|
|
}
|
|
|
|
void LLFloaterPathfindingBasic::onFreezeClicked()
|
|
{
|
|
mUnfreezeButton->setEnabled(FALSE);
|
|
LLPathfindingManager::getInstance()->requestSetAgentState(LLPathfindingManager::kAgentStateFrozen);
|
|
}
|
|
|
|
void LLFloaterPathfindingBasic::onAgentStateCB(LLPathfindingManager::EAgentState pAgentState)
|
|
{
|
|
setAgentState(pAgentState);
|
|
}
|
|
|
|
void LLFloaterPathfindingBasic::setAgentState(LLPathfindingManager::EAgentState pAgentState)
|
|
{
|
|
static const LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow");
|
|
LLStyle::Params styleParams;
|
|
|
|
switch (pAgentState)
|
|
{
|
|
case LLPathfindingManager::kAgentStateUnknown :
|
|
mStatusText->setVisible(TRUE);
|
|
mStatusText->setText((LLStringExplicit)getString("status_querying_state"), styleParams);
|
|
break;
|
|
case LLPathfindingManager::kAgentStateNotEnabled :
|
|
mStatusText->setVisible(TRUE);
|
|
styleParams.color = warningColor;
|
|
mStatusText->setText((LLStringExplicit)getString("status_pathfinding_not_enabled"), styleParams);
|
|
break;
|
|
case LLPathfindingManager::kAgentStateError :
|
|
mStatusText->setVisible(TRUE);
|
|
styleParams.color = warningColor;
|
|
mStatusText->setText((LLStringExplicit)getString("status_unable_to_change_state"), styleParams);
|
|
break;
|
|
default :
|
|
mStatusText->setVisible(FALSE);
|
|
break;
|
|
}
|
|
|
|
switch (LLPathfindingManager::getInstance()->getLastKnownNonErrorAgentState())
|
|
{
|
|
case LLPathfindingManager::kAgentStateUnknown :
|
|
case LLPathfindingManager::kAgentStateNotEnabled :
|
|
mUnfreezeLabel->setEnabled(FALSE);
|
|
mUnfreezeButton->setEnabled(FALSE);
|
|
mFreezeLabel->setEnabled(FALSE);
|
|
mFreezeButton->setEnabled(FALSE);
|
|
break;
|
|
case LLPathfindingManager::kAgentStateFrozen :
|
|
mUnfreezeLabel->setEnabled(TRUE);
|
|
mUnfreezeButton->setEnabled(TRUE);
|
|
mFreezeLabel->setEnabled(FALSE);
|
|
mFreezeButton->setEnabled(FALSE);
|
|
break;
|
|
case LLPathfindingManager::kAgentStateUnfrozen :
|
|
mUnfreezeLabel->setEnabled(FALSE);
|
|
mUnfreezeButton->setEnabled(FALSE);
|
|
mFreezeLabel->setEnabled(TRUE);
|
|
mFreezeButton->setEnabled(TRUE);
|
|
break;
|
|
default :
|
|
llassert(0);
|
|
break;
|
|
}
|
|
}
|