diff options
| -rw-r--r-- | indra/llui/lllineeditor.cpp | 13 | ||||
| -rw-r--r-- | indra/llui/lllineeditor.h | 3 | ||||
| -rw-r--r-- | indra/newview/llgroupmgr.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/lllocationinputctrl.cpp | 129 | ||||
| -rw-r--r-- | indra/newview/lllocationinputctrl.h | 7 | ||||
| -rw-r--r-- | indra/newview/llpanelobjectinventory.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llstatusbar.h | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/widgets/location_input.xml | 12 | 
8 files changed, 121 insertions, 46 deletions
| diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 406c77a365..bd5734312a 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -323,6 +323,19 @@ void LLLineEditor::setMaxTextLength(S32 max_text_length)  	mMaxLengthBytes = max_len;  }  +void LLLineEditor::getTextPadding(S32 *left, S32 *right) +{ +	*left = mTextPadLeft; +	*right = mTextPadRight; +} + +void LLLineEditor::setTextPadding(S32 left, S32 right) +{ +	mTextPadLeft = left; +	mTextPadRight = right; +	updateTextPadding(); +} +  void LLLineEditor::updateTextPadding()  {  	static LLUICachedControl<S32> line_editor_hpad ("UILineEditorHPad", 0); diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 4474963b1a..4c4b00094d 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -226,6 +226,9 @@ public:  	void			setKeystrokeCallback(callback_t callback, void* user_data);  	void			setMaxTextLength(S32 max_text_length); +	// Manipulate left and right padding for text +	void getTextPadding(S32 *left, S32 *right); +	void setTextPadding(S32 left, S32 right);  	// Prevalidation controls which keystrokes can affect the editor  	void			setPrevalidate( LLLinePrevalidateFunc func ); 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" | 
