summaryrefslogtreecommitdiff
path: root/indra/newview/lllocationinputctrl.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2009-11-23 18:16:03 -0800
committerJames Cook <james@lindenlab.com>2009-11-23 18:16:03 -0800
commit6634d3c1ccbe13d3c0cdd17b60628eabe633ea7d (patch)
treeab6b994092906e0ddf0d377cc81f6f19d27baac2 /indra/newview/lllocationinputctrl.cpp
parent2ede27a5e266794fc3d034f12344a580260a3546 (diff)
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.
Diffstat (limited to 'indra/newview/lllocationinputctrl.cpp')
-rw-r--r--indra/newview/lllocationinputctrl.cpp129
1 files changed, 86 insertions, 43 deletions
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)