summaryrefslogtreecommitdiff
path: root/indra/newview/llmoveview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llmoveview.cpp')
-rw-r--r--indra/newview/llmoveview.cpp95
1 files changed, 83 insertions, 12 deletions
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 11c8b03f7f..d8f00ec370 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -71,7 +71,7 @@ const std::string BOTTOM_TRAY_BUTTON_NAME = "movement_btn";
// protected
LLFloaterMove::LLFloaterMove(const LLSD& key)
-: LLFloater(key),
+: LLDockableFloater(NULL, false, key),
mForwardButton(NULL),
mBackwardButton(NULL),
mTurnLeftButton(NULL),
@@ -79,7 +79,8 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
mMoveUpButton(NULL),
mMoveDownButton(NULL),
mStopFlyingButton(NULL),
- mModeActionsPanel(NULL)
+ mModeActionsPanel(NULL),
+ mCurrentMode(MM_WALK)
{
}
@@ -88,6 +89,7 @@ BOOL LLFloaterMove::postBuild()
{
setIsChrome(TRUE);
+ LLDockableFloater::postBuild();
mForwardButton = getChild<LLJoystickAgentTurn>("forward btn");
mForwardButton->setHeldDownDelay(MOVE_BUTTON_DELAY);
@@ -134,8 +136,6 @@ BOOL LLFloaterMove::postBuild()
initModeTooltips();
- updatePosition();
-
initModeButtonMap();
initMovementMode();
@@ -145,6 +145,18 @@ BOOL LLFloaterMove::postBuild()
return TRUE;
}
+// virtual
+void LLFloaterMove::setEnabled(BOOL enabled)
+{
+ //we need to enable/disable only buttons, EXT-1061.
+
+ // is called before postBuild() - use findChild here.
+ LLPanel *panel_actions = findChild<LLPanel>("panel_actions");
+ if (panel_actions) panel_actions->setEnabled(enabled);
+
+ showModeButtons(enabled);
+}
+
// static
F32 LLFloaterMove::getYawRate( F32 time )
{
@@ -266,6 +278,7 @@ void LLFloaterMove::onStopFlyingButtonClick()
void LLFloaterMove::setMovementMode(const EMovementMode mode)
{
+ mCurrentMode = mode;
gAgent.setFlying(MM_FLY == mode);
switch (mode)
@@ -401,26 +414,49 @@ void LLFloaterMove::sUpdateFlyingStatus()
void LLFloaterMove::showModeButtons(BOOL bShow)
{
- if (mModeActionsPanel->getVisible() == bShow)
+ // is called from setEnabled so can be called before postBuild(), check mModeActionsPanel agains to NULL
+ if (NULL == mModeActionsPanel || mModeActionsPanel->getVisible() == bShow)
return;
mModeActionsPanel->setVisible(bShow);
+ if (isDocked())
+ {
+ return;
+ }
+
+ updateHeight(bShow);
+}
+
+void LLFloaterMove::updateHeight(bool show_mode_buttons)
+{
+ static bool size_changed = false;
+ static S32 origin_height = getRect().getHeight();
LLRect rect = getRect();
- static S32 height = mModeActionsPanel->getRect().getHeight();
+ static S32 mode_panel_height = mModeActionsPanel->getRect().getHeight();
+
S32 newHeight = getRect().getHeight();
- if (!bShow)
+
+ if (!show_mode_buttons && origin_height == newHeight)
{
- newHeight -= height;
+ newHeight -= mode_panel_height;
+ size_changed = true;
}
- else
+ else if (show_mode_buttons && origin_height > newHeight)
{
- newHeight += height;
+ newHeight += mode_panel_height;
+ size_changed = true;
}
+
+ if (!size_changed)
+ return;
+
rect.setLeftTopAndSize(rect.mLeft, rect.mTop, rect.getWidth(), newHeight);
reshape(rect.getWidth(), rect.getHeight());
setRect(rect);
+ size_changed = false;
}
+
//static
void LLFloaterMove::enableInstance(BOOL bEnable)
{
@@ -428,17 +464,42 @@ void LLFloaterMove::enableInstance(BOOL bEnable)
if (instance)
{
instance->setEnabled(bEnable);
- instance->showModeButtons(bEnable);
}
}
void LLFloaterMove::onOpen(const LLSD& key)
{
- updatePosition();
+ LLButton *anchor_panel = LLBottomTray::getInstance()->getChild<LLButton>("movement_btn");
+
+ if (gAgent.getFlying())
+ {
+ setFlyingMode(TRUE);
+ showModeButtons(FALSE);
+ }
+
+ if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting())
+ {
+ setSittingMode(TRUE);
+ showModeButtons(FALSE);
+ }
+
+ setDockControl(new LLDockControl(
+ anchor_panel, this,
+ getDockTongue(), LLDockControl::TOP));
+
+ showQuickTips(mCurrentMode);
sUpdateFlyingStatus();
}
+//virtual
+void LLFloaterMove::setDocked(bool docked, bool pop_on_undock/* = true*/)
+{
+ LLDockableFloater::setDocked(docked, pop_on_undock);
+ bool show_mode_buttons = isDocked() || !gAgent.getFlying();
+ updateHeight(show_mode_buttons);
+}
+
void LLFloaterMove::showQuickTips(const EMovementMode mode)
{
LLFirstTimeTipsManager::EFirstTimeTipType tipType = LLFirstTimeTipsManager::FTT_MOVE_WALK;
@@ -543,6 +604,7 @@ void LLPanelStandStopFlying::setVisible(BOOL visible)
if (visible)
{
updatePosition();
+ getParent()->sendChildToFront(this);
}
LLPanel::setVisible(visible);
@@ -600,6 +662,15 @@ void LLPanelStandStopFlying::updatePosition()
S32 y = tray->getRect().getHeight();
+ LLFloater *move_floater = LLFloaterReg::findInstance("moveview");
+ if (move_floater)
+ {
+ if (move_floater->isDocked())
+ {
+ y = move_floater->getRect().mBottom + getRect().getHeight();
+ }
+ }
+
setOrigin(x, y);
}