diff options
| author | Steven Bennetts <steve@lindenlab.com> | 2009-09-29 19:37:05 +0000 |
|---|---|---|
| committer | Steven Bennetts <steve@lindenlab.com> | 2009-09-29 19:37:05 +0000 |
| commit | 606b381c9fbc43c214afd26fb2e2598eec656b66 (patch) | |
| tree | 422a6d5d94d50bd97ac5bcbdb52f0f6de083c6e7 /indra/newview/llmoveview.cpp | |
| parent | 751cc7cf68bb4d766e8ecaaf76af054dcfbbe9dc (diff) | |
merge https://svn.aws.productengine.com/secondlife/export-from-ll/viewer-2-0@1830 https://svn.aws.productengine.com/secondlife/pe/stable-2@1839 -> viewer-2.0.0-3
JIRAS:
EXT-96 EXT-204 EXT-312 EXT-334 EXT-479 EXT-498 EXT-514 EXT-637 EXT-647 EXT-746 EXT-748 EXT-749 EXT-757 EXT-789 EXT-794 EXT-808 EXT-817 EXT-823 EXT-831 EXT-834 EXT-837 EXT-844 EXT-848 EXT-862 EXT-876 EXT-896 EXT-897 EXT-898 EXT-899 EXT-910 EXT-912 EXT-918 EXT-921 EXT-925 EXT-926 EXT-928 EXT-930 EXT-931 EXT-935 EXT-938 EXT-939 EXT-952 EXT-985 EXT-986 EXT-992 EXT-994 EXT-995 EXT-996 EXT-997 EXT-998 EXT-1001 EXT-1004 EXT-1010 EXT-1012 EXT-1016 EXT-1018 EXT-1020 EXT-1028 EXT-1041 EXT-1044 EXT-1051 EXT-1052 EXT-1061 EXT-1069 EXT-1071 EXT-1074 EXT-1075 EXT-1076 EXT-1078 EXT-1080 EXT-1081 EXT-1082 EXT-1083 EXT-1085 EXT-1092 EXT-1093 EXT-1099 EXT-1100 EXT-1101 EXT-1104 EXT-1106 EXT-1111 EXT-1113 EXT-1114 EXT-1115 EXT-1116 EXT-1118 EXT-1119 EXT-1129 EXT-1132 EXT-1135 EXT-1138 EXT-1142 EXT-1161 EXT-1162 EXT-1178 EXT-1180
* NEW DEVELOPMENT:
* EXT-898 - Add dock/undock support for camera and movement controls
* Avatar list changes
* Bottom bar changes: menu, docking, visibility
* Camera changes
* Camera & Movement Floaters
* Dockable Floaters (LLDockableFloater)
* Removed LLListCtrl
* Toast / Notification changes: signal / destruction changes, ordering
* Nearby chat input should display active voice indicator
QA NOTES:
* Message Well Window is ready to be tested for regression & matching the spec.
* Verify Group List Item L&F
* Verify All tabs in People Panel
* Verify that Picks behavior is not changed
Diffstat (limited to 'indra/newview/llmoveview.cpp')
| -rw-r--r-- | indra/newview/llmoveview.cpp | 95 |
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); } |
