WIP for path-702.

master
prep 2012-06-13 10:50:46 -04:00
parent a45310e2af
commit de1e1db960
7 changed files with 286 additions and 4 deletions

View File

@ -383,6 +383,7 @@ set(viewer_SOURCE_FILES
llpanelmediasettingspermissions.cpp
llpanelmediasettingssecurity.cpp
llpanelme.cpp
llpanelnavmeshrebake.cpp
llpanelnearbymedia.cpp
llpanelobject.cpp
llpanelobjectinventory.cpp
@ -948,6 +949,7 @@ set(viewer_HEADER_FILES
llpanelmediasettingspermissions.h
llpanelmediasettingssecurity.h
llpanelme.h
llpanelnavmeshrebake.h
llpanelnearbymedia.h
llpanelobject.h
llpanelobjectinventory.h

View File

@ -0,0 +1,179 @@
/**
* @file LLPanelNavMeshRebake.cpp
* @author
* @brief
*
* $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 "llpathfindingmanager.h"
#include <string>
#include <map>
#include <boost/function.hpp>
#include <boost/signals2.hpp>
#include "llpanelnavmeshrebake.h"
#include "llagent.h"
#include "llfloaterreg.h"
#include "llhints.h"
#include "lltooltip.h"
#include "llbutton.h"
#include "llpanel.h"
LLPanelNavMeshRebake::LLPanelNavMeshRebake()
: mNavMeshRebakeButton(NULL)
, mAttached(false)
{
// make sure we have the only instance of this class
static bool b = true;
llassert_always(b);
b=false;
}
// static
LLPanelNavMeshRebake* LLPanelNavMeshRebake::getInstance()
{
static LLPanelNavMeshRebake* panel = getPanel();
return panel;
}
//static
void LLPanelNavMeshRebake::setMode( ESNavMeshRebakeMode mode )
{
LLPanelNavMeshRebake* panel = getInstance();
panel->mNavMeshRebakeButton->setVisible( true );
//visibility of it should be updated after updating visibility of the buttons
panel->setVisible(TRUE);
}
void LLPanelNavMeshRebake::clearMode( ESNavMeshRebakeMode mode )
{
LLPanelNavMeshRebake* panel = getInstance();
switch(mode)
{
case NMRM_Visible:
panel->mNavMeshRebakeButton->setVisible(FALSE);
break;
default:
llerrs << "Unexpected mode is passed: " << mode << llendl;
}
}
BOOL LLPanelNavMeshRebake::postBuild()
{
mNavMeshRebakeButton = getChild<LLButton>("navmesh_btn");
mNavMeshRebakeButton->setCommitCallback(boost::bind(&LLPanelNavMeshRebake::onNavMeshRebakeClick, this));
mNavMeshRebakeButton->setVisible( TRUE );
LLHints::registerHintTarget("navmesh_btn", mNavMeshRebakeButton->getHandle());
return TRUE;
}
void LLPanelNavMeshRebake::setVisible( BOOL visible )
{
LLPanel::setVisible(visible);
}
BOOL LLPanelNavMeshRebake::handleToolTip(S32 x, S32 y, MASK mask)
{
LLToolTipMgr::instance().unblockToolTips();
if (mNavMeshRebakeButton->getVisible())
{
LLToolTipMgr::instance().show(mNavMeshRebakeButton->getToolTip());
}
return LLPanel::handleToolTip(x, y, mask);
}
void LLPanelNavMeshRebake::reparent(LLView* rootp)
{
LLPanel* parent = dynamic_cast<LLPanel*>(getParent());
if (!parent)
{
return;
}
rootp->addChild(this);
mAttached = true;
}
//static
LLPanelNavMeshRebake* LLPanelNavMeshRebake::getPanel()
{
LLPanelNavMeshRebake* panel = new LLPanelNavMeshRebake();
panel->buildFromFile("panel_navmesh_rebake.xml");
panel->setVisible(FALSE);
llinfos << "Build LLPanelNavMeshRebake panel" << llendl;
//prep#panel->updatePosition();
return panel;
}
void LLPanelNavMeshRebake::onNavMeshRebakeClick()
{
setFocus(FALSE);
mNavMeshRebakeButton->setVisible(FALSE);
}
/**
* Updates position to be center aligned with Move button.
*/
/*
void LLPanelNavMeshRebake::updatePosition()
{
if (mAttached) return;
S32 y_pos = 0;
S32 bottom_tb_center = 0;
if (LLToolBar* toolbar_bottom = gToolBarView->getChild<LLToolBar>("toolbar_bottom"))
{
y_pos = toolbar_bottom->getRect().getHeight();
bottom_tb_center = toolbar_bottom->getRect().getCenterX();
}
S32 left_tb_width = 0;
if (LLToolBar* toolbar_left = gToolBarView->getChild<LLToolBar>("toolbar_left"))
{
left_tb_width = toolbar_left->getRect().getWidth();
}
if(LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("navmesh_rebake_container"))
{
panel_ssf_container->setOrigin(0, y_pos);
}
S32 x_pos = bottom_tb_center-getRect().getWidth()/2 - left_tb_width;
setOrigin( x_pos, 0);
*/

View File

@ -0,0 +1,77 @@
/**
* @file llpanelenavmeshrebake.h
* @author
* @brief
*
* $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$
*/
#ifndef LL_NAVMESHREBAKE_H
#define LL_NAVMESHREBAKE_H
class LLPanelNavMeshRebake : public LLPanel
{
LOG_CLASS(LLPanelNavMeshRebake);
public:
typedef enum navmesh_rebake_mode_t
{
NMRM_Visible,
NMRM_Visible_Waiting_Response,
NVRM_Hiddeb
} ESNavMeshRebakeMode;
void reparent( LLView* rootp );
static LLPanelNavMeshRebake* getInstance();
static void setMode( ESNavMeshRebakeMode mode );
static void clearMode( ESNavMeshRebakeMode mode );
/*virtual*/ BOOL postBuild();
/*virtual*/ void setVisible( BOOL visible );
/*virtual*/ void draw(){/*updatePosition(); */LLPanel::draw();}
/*virtual*/ BOOL handleToolTip( S32 x, S32 y, MASK mask );
protected:
LLPanelNavMeshRebake();
private:
static LLPanelNavMeshRebake* getPanel();
void onNavMeshRebakeClick();
//void updatePosition();
LLButton* mNavMeshRebakeButton;
LLHandle<LLPanel> mOriginalParent;
bool mAttached;
};
#endif //LL_NAVMESHREBAKE_H

View File

@ -52,6 +52,7 @@
#include "lluuid.h"
#include "llviewerregion.h"
#include "llweb.h"
#include "llpanelnavmeshrebake.h"
#define CAP_SERVICE_RETRIEVE_NAVMESH "RetrieveNavMeshSrc"
@ -268,7 +269,7 @@ private:
LLPathfindingManager::LLPathfindingManager()
: LLSingleton<LLPathfindingManager>(),
mNavMeshMap()
mNavMeshMap(),mShowNavMeshRebake(false)
{
}
@ -315,7 +316,15 @@ LLPathfindingNavMesh::navmesh_slot_t LLPathfindingManager::registerNavMeshListen
void LLPathfindingManager::requestGetNavMeshForRegion(LLViewerRegion *pRegion)
{
LLPathfindingNavMeshPtr navMeshPtr = getNavMeshForRegion(pRegion);
//prep#s#test
LLView* rootp = LLUI::getRootView();
LLPanel* panel_nmr_container = rootp->getChild<LLPanel>("navmesh_rebake_container");
LLPanelNavMeshRebake* panel_namesh_rebake = LLPanelNavMeshRebake::getInstance();
panel_nmr_container->addChild( panel_namesh_rebake );
panel_nmr_container->setVisible( TRUE );
panel_namesh_rebake->reparent( rootp );
LLPanelNavMeshRebake::getInstance()->setVisible( TRUE );
//prep#e
if (pRegion == NULL)
{
navMeshPtr->handleNavMeshNotEnabled();
@ -955,3 +964,4 @@ void CharactersResponder::error(U32 pStatus, const std::string &pReason)
LLPathfindingObjectListPtr characterListPtr = LLPathfindingObjectListPtr(new LLPathfindingCharacterList());
mCharactersCallback(mRequestId, LLPathfindingManager::kRequestError, characterListPtr);
}

View File

@ -39,6 +39,8 @@
#include "llpathfindingnavmesh.h"
#include "llsingleton.h"
#include "lluuid.h"
#include "llpanel.h"
#include "llmoveview.h"
class LLViewerRegion;
class LLPathfindingNavMeshStatus;
@ -122,6 +124,10 @@ private:
#endif // XXX_STINSON_AGENT_STATE_DELETE_ME
NavMeshMap mNavMeshMap;
BOOL mShowNavMeshRebake;
};
#endif // LL_LLPATHFINDINGMANAGER_H

View File

@ -200,6 +200,9 @@
#include "llviewerwindowlistener.h"
#include "llpaneltopinfobar.h"
//prep#
#include "llpathfindingmanager.h"
#if LL_WINDOWS
#include <tchar.h> // For Unicode conversion methods
#endif
@ -1923,7 +1926,12 @@ void LLViewerWindow::initWorldUI()
LLPanelStandStopFlying* panel_stand_stop_flying = LLPanelStandStopFlying::getInstance();
panel_ssf_container->addChild(panel_stand_stop_flying);
panel_ssf_container->setVisible(TRUE);
//prep#
/*LLPanel* panel_nmr_container = getRootView()->getChild<LLPanel>("navmesh_rebake_container");
LLPanelNavMeshRebake* panel_namesh_rebake = LLPanelNavMeshRebake::getInstance();
panel_nmr_container->addChild(panel_namesh_rebake);
panel_nmr_container->setVisible(TRUE);
*/
// Load and make the toolbars visible
// Note: we need to load the toolbars only *after* the user is logged in and IW
if (gToolBarView)

View File

@ -97,7 +97,7 @@
visible="false"
width="200"/>
</layout_panel>
<layout_panel name="right_toolbar_panel"
<layout_panel name="right_toolbar_panel"
auto_resize="false"
height="500"
width="30"