From 01545997da201e04731b14eb720765a19470974d Mon Sep 17 00:00:00 2001
From: Todd Stinson <stinson@lindenlab.com>
Date: Wed, 27 Jun 2012 13:30:01 -0700
Subject: [PATCH] PATH-788: Adding more state information for the rebake region
 button to capture and display the rebaking states.  Also, altering how the
 stop flying button works so that it does not hide the entire panel.

---
 indra/newview/llmoveview.cpp                  |  2 +-
 .../llpanelpathfindingrebakenavmesh.cpp       | 38 ++++++++++++++++---
 .../newview/llpanelpathfindingrebakenavmesh.h |  2 +
 .../skins/default/xui/en/notifications.xml    | 12 ++++++
 .../default/xui/en/panel_navmesh_rebake.xml   | 18 +++++++--
 5 files changed, 63 insertions(+), 9 deletions(-)

diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 65c73bb0ec0..93f7146fc80 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -686,7 +686,7 @@ void LLPanelStandStopFlying::onStopFlyingButtonClick()
 	gAgent.setFlying(FALSE);
 
 	setFocus(FALSE); // EXT-482
-	setVisible(FALSE);
+	mStopFlyingButton->setVisible(FALSE);
 }
 
 /**
diff --git a/indra/newview/llpanelpathfindingrebakenavmesh.cpp b/indra/newview/llpanelpathfindingrebakenavmesh.cpp
index 4f7b3aa330f..f423b5891fc 100644
--- a/indra/newview/llpanelpathfindingrebakenavmesh.cpp
+++ b/indra/newview/llpanelpathfindingrebakenavmesh.cpp
@@ -59,13 +59,18 @@ LLPanelPathfindingRebakeNavmesh* LLPanelPathfindingRebakeNavmesh::getInstance()
 
 BOOL LLPanelPathfindingRebakeNavmesh::postBuild()
 {
-	//Rebake initiated
+	//Rebake button
 	mNavMeshRebakeButton = findChild<LLButton>("navmesh_btn");
 	llassert(mNavMeshRebakeButton != NULL);
 	mNavMeshRebakeButton->setCommitCallback(boost::bind(&LLPanelPathfindingRebakeNavmesh::onNavMeshRebakeClick, this));
 	LLHints::registerHintTarget("navmesh_btn", mNavMeshRebakeButton->getHandle());
 	
-	//Baking...
+	//Sending rebake request
+	mNavMeshSendingButton = findChild<LLButton>("navmesh_btn_sending");
+	llassert(mNavMeshSendingButton != NULL);
+	LLHints::registerHintTarget("navmesh_btn_sending", mNavMeshSendingButton->getHandle());
+
+	//rebaking...
 	mNavMeshBakingButton = findChild<LLButton>("navmesh_btn_baking");
 	llassert(mNavMeshBakingButton != NULL);
 	LLHints::registerHintTarget("navmesh_btn_baking", mNavMeshBakingButton->getHandle());
@@ -105,14 +110,24 @@ BOOL LLPanelPathfindingRebakeNavmesh::handleToolTip( S32 x, S32 y, MASK mask )
 	{
 		LLToolTipMgr::instance().show(mNavMeshRebakeButton->getToolTip());
 	}
+	else if (mNavMeshSendingButton->getVisible())
+	{
+		LLToolTipMgr::instance().show(mNavMeshSendingButton->getToolTip());
+	}
+	else if (mNavMeshBakingButton->getVisible())
+	{
+		LLToolTipMgr::instance().show(mNavMeshBakingButton->getToolTip());
+	}
 
 	return LLPanel::handleToolTip(x, y, mask);
 }
 
 LLPanelPathfindingRebakeNavmesh::LLPanelPathfindingRebakeNavmesh() 
-	: mCanRebakeRegion(FALSE),
+	: LLPanel(),
+	mCanRebakeRegion(FALSE),
 	mRebakeNavMeshMode(kRebakeNavMesh_Default),
 	mNavMeshRebakeButton(NULL),
+	mNavMeshSendingButton(NULL),
 	mNavMeshBakingButton(NULL),
 	mNavMeshSlot(),
 	mRegionCrossingSlot(),
@@ -142,7 +157,8 @@ void LLPanelPathfindingRebakeNavmesh::setMode(ERebakeNavMeshMode pRebakeNavMeshM
 		LLNotificationsUtil::add("PathfindingRebakeNavmesh");
 	}
 	mNavMeshRebakeButton->setVisible(pRebakeNavMeshMode == kRebakeNavMesh_Available);
-	mNavMeshBakingButton->setVisible(pRebakeNavMeshMode == kRebakeNavMesh_RequestSent);
+	mNavMeshSendingButton->setVisible(pRebakeNavMeshMode == kRebakeNavMesh_RequestSent);
+	mNavMeshBakingButton->setVisible(pRebakeNavMeshMode == kRebakeNavMesh_InProgress);
 	mRebakeNavMeshMode = pRebakeNavMeshMode;
 }
 
@@ -159,7 +175,17 @@ void LLPanelPathfindingRebakeNavmesh::handleAgentState(BOOL pCanRebakeRegion)
 
 void LLPanelPathfindingRebakeNavmesh::handleRebakeNavMeshResponse(bool pResponseStatus)
 {
-	setMode(pResponseStatus ? kRebakeNavMesh_NotAvailable : kRebakeNavMesh_Available);
+	setMode(pResponseStatus ? kRebakeNavMesh_InProgress : kRebakeNavMesh_Default);
+	if (!pResponseStatus)
+	{
+		LLNotificationsUtil::add("PathfindingCannotRebakeNavmesh");
+	}
+
+	LLViewerRegion *currentRegion = gAgent.getRegion();
+	if (currentRegion != NULL)
+	{
+		LLPathfindingManager::getInstance()->requestGetNavMeshForRegion(currentRegion, true);
+	}
 }
 
 void LLPanelPathfindingRebakeNavmesh::handleNavMeshStatus(const LLPathfindingNavMeshStatus &pNavMeshStatus)
@@ -174,6 +200,8 @@ void LLPanelPathfindingRebakeNavmesh::handleNavMeshStatus(const LLPathfindingNav
 			rebakeNavMeshMode = kRebakeNavMesh_Available;
 			break;
 		case LLPathfindingNavMeshStatus::kBuilding :
+			rebakeNavMeshMode = kRebakeNavMesh_InProgress;
+			break;
 		case LLPathfindingNavMeshStatus::kComplete :
 			rebakeNavMeshMode = kRebakeNavMesh_NotAvailable;
 			break;
diff --git a/indra/newview/llpanelpathfindingrebakenavmesh.h b/indra/newview/llpanelpathfindingrebakenavmesh.h
index f81c030c351..a77cddbc500 100644
--- a/indra/newview/llpanelpathfindingrebakenavmesh.h
+++ b/indra/newview/llpanelpathfindingrebakenavmesh.h
@@ -59,6 +59,7 @@ class LLPanelPathfindingRebakeNavmesh : public LLPanel
 	{
 		kRebakeNavMesh_Available,
 		kRebakeNavMesh_RequestSent,
+		kRebakeNavMesh_InProgress,
 		kRebakeNavMesh_NotAvailable,
 		kRebakeNavMesh_Default = kRebakeNavMesh_NotAvailable
 	} ERebakeNavMeshMode;
@@ -86,6 +87,7 @@ class LLPanelPathfindingRebakeNavmesh : public LLPanel
 	ERebakeNavMeshMode                       mRebakeNavMeshMode;
 	
 	LLButton*                                mNavMeshRebakeButton;
+	LLButton*                                mNavMeshSendingButton;
 	LLButton*                                mNavMeshBakingButton;
 
 	LLPathfindingNavMesh::navmesh_slot_t     mNavMeshSlot;
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index b09fb7bbe89..ea06e3a321f 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5852,6 +5852,18 @@ This area has building disabled. You can&apos;t build or rez objects here.
      />
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="PathfindingCannotRebakeNavmesh"
+   type="alertmodal">
+    <unique/>
+    You are not allowed to rebake the navmesh at the current time.
+    <usetemplate
+     name="okbutton"
+     yestext="OK"
+     />
+  </notification>
+
   <notification
    icon="notify.tga"
    name="SeeAvatars"
diff --git a/indra/newview/skins/default/xui/en/panel_navmesh_rebake.xml b/indra/newview/skins/default/xui/en/panel_navmesh_rebake.xml
index c7bf91efb47..ddfba4c43d0 100644
--- a/indra/newview/skins/default/xui/en/panel_navmesh_rebake.xml
+++ b/indra/newview/skins/default/xui/en/panel_navmesh_rebake.xml
@@ -17,7 +17,19 @@
       top="2"
       visible="false"
       enabled="true"
-      width="113" />
+      width="120" />
+  <button
+      follows="left|bottom"
+      height="19"
+      label="Sending rebake request"
+      layout="topleft"
+      left="10"
+      name="navmesh_btn_sending"
+      tool_tip="Sending rebake request"
+      top="2"
+      visible="false"
+      enabled="false"
+      width="120" />
   <button
       follows="left|bottom"
       height="19"
@@ -25,10 +37,10 @@
       layout="topleft"
       left="10"
       name="navmesh_btn_baking"
-      tool_tip="Region is cleaning up."
+      tool_tip="Region is cleaning."
       top="2"
       visible="false"
       enabled="false"
-      width="113" />
+      width="120" />
 </panel>
 
-- 
GitLab