summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorprep <none@none>2012-06-13 10:50:46 -0400
committerprep <none@none>2012-06-13 10:50:46 -0400
commitde1e1db9600a03ab5b0dc3f04a5bdcee30632f05 (patch)
tree80edcc1a02b8bd5d890ad288a01529230d0ff7a7 /indra/newview
parenta45310e2af0abdcdb7a5d0ade1bd3c66af3dfae1 (diff)
WIP for path-702.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/llpanelnavmeshrebake.cpp179
-rw-r--r--indra/newview/llpanelnavmeshrebake.h77
-rw-r--r--indra/newview/llpathfindingmanager.cpp14
-rw-r--r--indra/newview/llpathfindingmanager.h6
-rw-r--r--indra/newview/llviewerwindow.cpp10
-rw-r--r--indra/newview/skins/default/xui/en/panel_toolbar_view.xml2
7 files changed, 286 insertions, 4 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b47615b198..4d295ac5e5 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -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
diff --git a/indra/newview/llpanelnavmeshrebake.cpp b/indra/newview/llpanelnavmeshrebake.cpp
new file mode 100644
index 0000000000..99b2bf288c
--- /dev/null
+++ b/indra/newview/llpanelnavmeshrebake.cpp
@@ -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);
+
+
+ */
diff --git a/indra/newview/llpanelnavmeshrebake.h b/indra/newview/llpanelnavmeshrebake.h
new file mode 100644
index 0000000000..81710a140d
--- /dev/null
+++ b/indra/newview/llpanelnavmeshrebake.h
@@ -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
+
diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp
index f54c9892df..6d0629698a 100644
--- a/indra/newview/llpathfindingmanager.cpp
+++ b/indra/newview/llpathfindingmanager.cpp
@@ -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);
}
+
diff --git a/indra/newview/llpathfindingmanager.h b/indra/newview/llpathfindingmanager.h
index 40c0e6b140..635179e5a0 100644
--- a/indra/newview/llpathfindingmanager.h
+++ b/indra/newview/llpathfindingmanager.h
@@ -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
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ee2171fb07..4d31876bea 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -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)
diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
index 58911bed56..107683f1f0 100644
--- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
@@ -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"