From 2ede27a5e266794fc3d034f12344a580260a3546 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 23 Nov 2009 15:29:01 -0800
Subject: Context menu item to show/hide nav bar parcel property icons.

---
 indra/newview/app_settings/settings.xml            | 13 ++++++-
 indra/newview/lllocationinputctrl.cpp              | 44 +++++++++++++++-------
 indra/newview/skins/default/xui/en/menu_navbar.xml | 17 +++++----
 3 files changed, 51 insertions(+), 23 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 21ccf2ac91..85a465c073 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7712,7 +7712,7 @@
     <key>NavBarShowCoordinates</key>
     <map>
       <key>Comment</key>
-      <string>Show Coordinates in  Location Input Field</string>
+      <string>Show coordinates in navigation bar</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -7720,6 +7720,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>NavBarShowParcelProperties</key>
+    <map>
+      <key>Comment</key>
+      <string>Show parcel property icons in navigation bar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowCrosshairs</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index be96d7b43a..5d2a0aa382 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -596,6 +596,16 @@ void LLLocationInputCtrl::refreshLocation()
 
 void LLLocationInputCtrl::refreshParcelIcons()
 {
+	static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false);
+	if (!show_properties)
+	{
+		for (S32 i = 0; i < ICON_COUNT; ++i)
+		{
+			mParcelIcon[i]->setVisible(false);
+		}
+		return;
+	}
+	
 	LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
 	// *TODO buy
 	//bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false);
@@ -754,11 +764,17 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)
 {
 	std::string item = userdata.asString();
 
-	if (item == std::string("show_coordinates"))
+	if (item == "show_coordinates")
 	{
 		gSavedSettings.setBOOL("NavBarShowCoordinates",!gSavedSettings.getBOOL("NavBarShowCoordinates"));
 	}
-	else if (item == std::string("landmark"))
+	else if (item == "show_properties")
+	{
+		gSavedSettings.setBOOL("NavBarShowParcelProperties",
+			!gSavedSettings.getBOOL("NavBarShowParcelProperties"));
+		refreshParcelIcons();
+	}
+	else if (item == "landmark")
 	{
 		LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
 		
@@ -772,23 +788,23 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)
 					LLSD().insert("type", "landmark").insert("id",landmark->getUUID()));
 		}
 	}
-	else if (item == std::string("cut"))
+	else if (item == "cut")
 	{
 		mTextEntry->cut();
 	}
-	else if (item == std::string("copy"))
+	else if (item == "copy")
 	{
 		mTextEntry->copy();
 	}
-	else if (item == std::string("paste"))
+	else if (item == "paste")
 	{
 		mTextEntry->paste();
 	}
-	else if (item == std::string("delete"))
+	else if (item == "delete")
 	{
 		mTextEntry->deleteSelection();
 	}
-	else if (item == std::string("select_all"))
+	else if (item == "select_all")
 	{
 		mTextEntry->selectAll();
 	}
@@ -798,28 +814,28 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)
 {
 	std::string item = userdata.asString();
 	
-	if (item == std::string("can_cut"))
+	if (item == "can_cut")
 	{
 		return mTextEntry->canCut();
 	}
-	else if (item == std::string("can_copy"))
+	else if (item == "can_copy")
 	{
 		return mTextEntry->canCopy();
 	}
-	else if (item == std::string("can_paste"))
+	else if (item == "can_paste")
 	{
 		return mTextEntry->canPaste();
 	}
-	else if (item == std::string("can_delete"))
+	else if (item == "can_delete")
 	{
 		return mTextEntry->canDeselect();
 	}
-	else if (item == std::string("can_select_all"))
+	else if (item == "can_select_all")
 	{
 		return mTextEntry->canSelectAll();
 	}
-	else if(item == std::string("show_coordinates")){
-	
+	else if(item == "show_coordinates")
+	{
 		return gSavedSettings.getBOOL("NavBarShowCoordinates");
 	}
 
diff --git a/indra/newview/skins/default/xui/en/menu_navbar.xml b/indra/newview/skins/default/xui/en/menu_navbar.xml
index 89469fb013..e17eeb46f6 100644
--- a/indra/newview/skins/default/xui/en/menu_navbar.xml
+++ b/indra/newview/skins/default/xui/en/menu_navbar.xml
@@ -10,7 +10,6 @@
  width="128">
     <menu_item_check
          label="Show Coordinates"
-         layout="topleft"
          name="Show Coordinates">
            <menu_item_check.on_click
              function="Navbar.Action"
@@ -19,22 +18,28 @@
              function="Navbar.EnableMenuItem"
              parameter="show_coordinates" />
     </menu_item_check>
+    <menu_item_check
+      label="Show Parcel Properties"
+      name="Show Parcel Properties">
+      <menu_item_check.on_click
+        function="Navbar.Action"
+        parameter="show_properties" />
+      <menu_item_check.on_check
+        control="NavBarShowParcelProperties" />
+    </menu_item_check>
     <!-- Label of 'Landmark' item is changing in runtime, 
     see  AddLandmarkNavBarMenu/EditLandmarkNavBarMenu in strings.xml -->
     <menu_item_call
      label="Landmark"
-     layout="topleft"
      name="Landmark">
         <menu_item_call.on_click
          function="Navbar.Action"
          parameter="landmark" />
     </menu_item_call>
     <menu_item_separator
-     layout="topleft"
      name="Separator" />
     <menu_item_call
      label="Cut"
-     layout="topleft"
      name="Cut">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -45,7 +50,6 @@
     </menu_item_call>
     <menu_item_call
      label="Copy"
-     layout="topleft"
      name="Copy">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -56,7 +60,6 @@
     </menu_item_call>
     <menu_item_call
      label="Paste"
-     layout="topleft"
      name="Paste">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -67,7 +70,6 @@
     </menu_item_call>
     <menu_item_call
      label="Delete"
-     layout="topleft"
      name="Delete">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -78,7 +80,6 @@
     </menu_item_call>
     <menu_item_call
      label="Select All"
-     layout="topleft"
      name="Select All">
         <menu_item_call.on_click
          function="Navbar.Action"
-- 
cgit v1.2.3


From 6634d3c1ccbe13d3c0cdd17b60628eabe633ea7d Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 23 Nov 2009 18:16:03 -0800
Subject: Add damage % text to nav bar, clip text entry to avoid overlapping
 icons Fixed includes of llmenugl.h / llnotifications.h Note: Clipping is
 incorrect, I think due to line editor bug.

---
 indra/newview/llgroupmgr.cpp                       |   1 +
 indra/newview/lllocationinputctrl.cpp              | 129 ++++++++++++++-------
 indra/newview/lllocationinputctrl.h                |   7 +-
 indra/newview/llpanelobjectinventory.cpp           |   1 +
 indra/newview/llstatusbar.h                        |   1 -
 .../default/xui/en/widgets/location_input.xml      |  12 +-
 6 files changed, 105 insertions(+), 46 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 0626a5c3d3..59537c1e65 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -52,6 +52,7 @@
 #include "llviewerwindow.h"
 #include "llpanelgroup.h"
 #include "llgroupactions.h"
+#include "llnotifications.h"
 #include "lluictrlfactory.h"
 #include <boost/regex.hpp>
 
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 5d2a0aa382..063e98a811 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -52,6 +52,7 @@
 #include "llteleporthistory.h"
 #include "llsidetray.h"
 #include "llslurl.h"
+#include "llstatusbar.h"			// getHealth()
 #include "lltrans.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
@@ -165,7 +166,8 @@ LLLocationInputCtrl::Params::Params()
 	push_icon("push_icon"),
 	build_icon("build_icon"),
 	scripts_icon("scripts_icon"),
-	damage_icon("damage_icon")
+	damage_icon("damage_icon"),
+	damage_text("damage_text")
 {
 }
 
@@ -200,7 +202,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	params.commit_on_focus_lost(false);
 	params.follows.flags(FOLLOWS_ALL);
 	mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params);
-	this->addChild(mTextEntry);
+	addChild(mTextEntry);
 	// LLLineEditor is replaced with LLLocationLineEditor
 
 	// "Place information" button.
@@ -261,7 +263,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	LLIconCtrl::Params damage_icon = p.damage_icon;
 	mParcelIcon[DAMAGE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(damage_icon);
 	addChild(mParcelIcon[DAMAGE_ICON]);
-	// TODO: health number?
+	
+	LLTextBox::Params damage_text = p.damage_text;
+	mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
+	addChild(mDamageText);
 	
 	// Register callbacks and load the location field context menu (NB: the order matters).
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2));
@@ -405,11 +410,8 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor)
  */
 void LLLocationInputCtrl::setText(const LLStringExplicit& text)
 {
-	if (mTextEntry)
-	{
-		mTextEntry->setText(text);
-		mHasAutocompletedText = FALSE;
-	}
+	mTextEntry->setText(text);
+	mHasAutocompletedText = FALSE;
 }
 
 void LLLocationInputCtrl::setFocus(BOOL b)
@@ -444,10 +446,18 @@ void LLLocationInputCtrl::onFocusLost()
 }
 
 void LLLocationInputCtrl::draw()
-{	
-	if(!hasFocus() && gSavedSettings.getBOOL("NavBarShowCoordinates")){
+{
+	static LLUICachedControl<bool> show_coords("NavBarShowCoordinates", false);
+	if(!hasFocus() && show_coords)
+	{
 		refreshLocation();
 	}
+	
+	static LLUICachedControl<bool> show_icons("NavBarShowParcelProperties", false);
+	if (show_icons)
+	{
+		refreshHealth();
+	}
 	LLComboBox::draw();
 }
 
@@ -544,10 +554,12 @@ void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)
 	
 	mList->mouseOverHighlightNthItem(-1); // Clear highlight on the last selected item.
 }
+
 bool LLLocationInputCtrl::findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter)
 {
 	return item.mTitle.find(filter) != std::string::npos;
 }
+
 void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)
 {
 	if (mLocationContextMenu)
@@ -596,51 +608,82 @@ void LLLocationInputCtrl::refreshLocation()
 
 void LLLocationInputCtrl::refreshParcelIcons()
 {
+	// Our "cursor" moving right to left
+	S32 x = mAddLandmarkBtn->getRect().mLeft - mIconHPad;
+	
 	static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false);
-	if (!show_properties)
+	if (show_properties)
+	{
+		LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+		// *TODO buy
+		//bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false);
+		bool allow_voice	= vpm->allowAgentVoice();
+		bool allow_fly		= vpm->allowAgentFly();
+		bool allow_push		= vpm->allowAgentPush();
+		bool allow_build	= vpm->allowAgentBuild();
+		bool allow_scripts	= vpm->allowAgentScripts();
+		bool allow_damage	= vpm->allowAgentDamage();
+		
+		// Most icons are "block this ability"
+		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice );
+		mParcelIcon[FLY_ICON]->setVisible(     !allow_fly );
+		mParcelIcon[PUSH_ICON]->setVisible(    !allow_push );
+		mParcelIcon[BUILD_ICON]->setVisible(   !allow_build );
+		mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
+		mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage );
+		mDamageText->setVisible(allow_damage);
+		
+		// Slide the parcel icons rect from right to left, adjusting rectangles of
+		// visible icons.  Assumes all icon rects are the same.
+		for (S32 i = 0; i < ICON_COUNT; ++i)
+		{
+			LLIconCtrl* icon = mParcelIcon[i];
+			if (icon->getVisible())
+			{
+				LLRect r = icon->getRect();
+				r.mLeft = x - r.getWidth();
+				r.mRight = x;
+				icon->setRect( r );
+				x -= r.getWidth() + mIconHPad;
+			}
+		}
+		LLRect text_rect = mDamageText->getRect();
+		text_rect.mLeft = x - text_rect.getWidth();
+		text_rect.mRight = x;
+		mDamageText->setRect(text_rect);
+		x -= text_rect.getWidth() + mIconHPad;
+	}
+	else
 	{
 		for (S32 i = 0; i < ICON_COUNT; ++i)
 		{
 			mParcelIcon[i]->setVisible(false);
 		}
-		return;
+		mDamageText->setVisible(false);
 	}
 	
-	LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
-	// *TODO buy
-	//bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false);
-	bool allow_voice	= vpm->allowAgentVoice();
-	bool allow_fly		= vpm->allowAgentFly();
-	bool allow_push		= vpm->allowAgentPush();
-	bool allow_build	= vpm->allowAgentBuild();
-	bool allow_scripts	= vpm->allowAgentScripts();
-	bool allow_damage	= vpm->allowAgentDamage();
-
-	// Most icons are "block this ability"
-	mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice );
-	mParcelIcon[FLY_ICON]->setVisible(     !allow_fly );
-	mParcelIcon[PUSH_ICON]->setVisible(    !allow_push );
-	mParcelIcon[BUILD_ICON]->setVisible(   !allow_build );
-	mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
-	mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage );
-	// *TODO damage meter
-
-	// Slide the parcel icons rect from right to left, adjusting rectangles of
-	// visible icons.  Assumes all icon rects are the same.
-	LLRect icon_rect = mParcelIcon[0]->getRect();
-	S32 icon_width = icon_rect.getWidth();
-	icon_rect.mRight = mAddLandmarkBtn->getRect().mLeft - mIconHPad;
-	icon_rect.mLeft = icon_rect.mRight - icon_width;
-	
-	for (S32 i = 0; i < ICON_COUNT; ++i)
+	S32 left_pad, right_pad;
+	mTextEntry->getTextPadding(&left_pad, &right_pad);
+	right_pad = mTextEntry->getRect().mRight - x;
+	llinfos << "JAMESDEBUG text entry rect " << mTextEntry->getRect()
+	<< " x " << x << " left_pad " << left_pad << " right_pad " << right_pad << llendl;
+	mTextEntry->setTextPadding(left_pad, right_pad);
+}
+
+void LLLocationInputCtrl::refreshHealth()
+{
+	// *FIXME: Status bar owns health information, should be in agent
+	if (gStatusBar)
 	{
-		if (mParcelIcon[i]->getVisible())
+		static S32 last_health = -1;
+		S32 health = gStatusBar->getHealth();
+		if (health != last_health)
 		{
-			mParcelIcon[i]->setRect( icon_rect );
-			icon_rect.translate( -icon_width - mIconHPad, 0);
+			std::string text = llformat("%d%%", health);
+			mDamageText->setText(text);
+			last_health = health;
 		}
 	}
-	// *TODO: health meter
 }
 
 void LLLocationInputCtrl::rebuildLocationHistory(std::string filter)
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index fefd0f7fec..3bd23e80a9 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -35,6 +35,7 @@
 
 #include "llcombobox.h"
 #include "lliconctrl.h"		// Params
+#include "lltextbox.h"		// Params
 
 class LLLandmark;
 
@@ -73,6 +74,7 @@ public:
 											build_icon,
 											scripts_icon,
 											damage_icon;
+		Optional<LLTextBox::Params>			damage_text;
 		Params();
 	};
 
@@ -111,6 +113,9 @@ private:
 	void					refresh();
 	void					refreshLocation();
 	void					refreshParcelIcons();
+	// Refresh the value in the health percentage text field
+	void					refreshHealth();
+	
 	void					rebuildLocationHistory(std::string filter = "");
 	bool 					findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
 	void					setText(const LLStringExplicit& text);
@@ -147,7 +152,7 @@ private:
 		ICON_COUNT
 	};
 	LLIconCtrl*	mParcelIcon[ICON_COUNT];
-	// TODO: Health meter?
+	LLTextBox* mDamageText;
 
 	LLAddLandmarkObserver*		mAddLandmarkObserver;
 	LLRemoveLandmarkObserver*	mRemoveLandmarkObserver;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index dbe0ec3b86..4237681c80 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -41,6 +41,7 @@
 
 #include "llpanelobjectinventory.h"
 
+#include "llmenugl.h"
 #include "roles_constants.h"
 
 #include "llagent.h"
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 3ce3549961..bdaacce981 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -34,7 +34,6 @@
 #define LL_LLSTATUSBAR_H
 
 #include "llpanel.h"
-#include <llmenugl.h>
 
 // "Constants" loaded from settings.xml at start time
 extern S32 STATUS_BAR_HEIGHT;
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index 1fed1c075a..17b1479ec4 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -81,8 +81,18 @@
 	top="21"
     image_name="parcel_lght_Damage"
     />
+  <!-- Default text color is invisible on top of nav bar background -->
+  <damage_text
+    name="damage_text"
+	width="50"
+	height="18"
+	top="16"
+	halign="right"
+	font="SansSerifSmall"
+	text_color="TextFgColor"
+	/>
 
-    <combo_button name="Location History"
+  <combo_button name="Location History"
                           label=""
                           pad_right="0"/>
   <combo_list bg_writeable_color="MenuDefaultBgColor" page_lines="10"
-- 
cgit v1.2.3