diff options
author | Roxie Linden <roxie@lindenlab.com> | 2010-02-25 21:20:45 -0800 |
---|---|---|
committer | Roxie Linden <roxie@lindenlab.com> | 2010-02-25 21:20:45 -0800 |
commit | 5c73a908353cdd7210e3148f7162d30afab7873a (patch) | |
tree | 3ff858042b69b20a9eb3062b7cabd0c390e1b5cf /indra/newview/llbottomtray.cpp | |
parent | 9b05fecbf6b3d65dae5a010fc35821dc116a44d0 (diff) | |
parent | 5eee046bb7d62e24df6c35018b3c5383f87ab587 (diff) |
automated merge
Diffstat (limited to 'indra/newview/llbottomtray.cpp')
-rw-r--r-- | indra/newview/llbottomtray.cpp | 173 |
1 files changed, 92 insertions, 81 deletions
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 0509d4f619..ca50201742 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -62,6 +62,39 @@ namespace const std::string& PANEL_GESTURE_NAME = "gesture_panel"; } +class LLBottomTrayLite + : public LLPanel +{ +public: + LLBottomTrayLite() + : mNearbyChatBar(NULL), + mGesturePanel(NULL) + { + mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); + LLUICtrlFactory::getInstance()->buildPanel(this, "panel_bottomtray_lite.xml"); + // Necessary for focus movement among child controls + setFocusRoot(TRUE); + } + + BOOL postBuild() + { + mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar"); + mGesturePanel = getChild<LLPanel>("gesture_panel"); + return TRUE; + } + + void onFocusLost() + { + if (gAgent.cameraMouselook()) + { + LLBottomTray::getInstance()->setVisible(FALSE); + } + } + + LLNearbyChatBar* mNearbyChatBar; + LLPanel* mGesturePanel; +}; + LLBottomTray::LLBottomTray(const LLSD&) : mChicletPanel(NULL), mSpeakPanel(NULL), @@ -76,6 +109,8 @@ LLBottomTray::LLBottomTray(const LLSD&) , mSnapshotPanel(NULL) , mGesturePanel(NULL) , mCamButton(NULL) +, mBottomTrayLite(NULL) +, mIsInLiteMode(false) { // Firstly add ourself to IMSession observers, so we catch session events // before chiclets do that. @@ -100,6 +135,12 @@ LLBottomTray::LLBottomTray(const LLSD&) // Necessary for focus movement among child controls setFocusRoot(TRUE); + + { + mBottomTrayLite = new LLBottomTrayLite(); + mBottomTrayLite->setFollowsAll(); + mBottomTrayLite->setVisible(FALSE); + } } LLBottomTray::~LLBottomTray() @@ -134,6 +175,11 @@ void* LLBottomTray::createNearbyChatBar(void* userdata) return new LLNearbyChatBar(); } +LLNearbyChatBar* LLBottomTray::getNearbyChatBar() +{ + return mIsInLiteMode ? mBottomTrayLite->mNearbyChatBar : mNearbyChatBar; +} + LLIMChiclet* LLBottomTray::createIMChiclet(const LLUUID& session_id) { LLIMChiclet::EType im_chiclet_type = LLIMChiclet::getIMSessionType(session_id); @@ -237,68 +283,27 @@ void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, b mSpeakBtn->setEnabled(enable); } -//virtual -void LLBottomTray::onFocusLost() +void LLBottomTray::onMouselookModeOut() { - if (gAgent.cameraMouselook()) - { - setVisible(FALSE); - } + mIsInLiteMode = false; + mBottomTrayLite->setVisible(FALSE); + mNearbyChatBar->getChatBox()->setText(mBottomTrayLite->mNearbyChatBar->getChatBox()->getText()); + setVisible(TRUE); } -void LLBottomTray::savePanelsShape() +void LLBottomTray::onMouselookModeIn() { - mSavedShapeList.clear(); - for (child_list_const_iter_t - child_it = mToolbarStack->beginChild(), - child_it_end = mToolbarStack->endChild(); - child_it != child_it_end; ++child_it) - { - mSavedShapeList.push_back( (*child_it)->getRect() ); - } -} + setVisible(FALSE); -void LLBottomTray::restorePanelsShape() -{ - if (mSavedShapeList.size() != mToolbarStack->getChildCount()) - return; - int i = 0; - for (child_list_const_iter_t - child_it = mToolbarStack->beginChild(), - child_it_end = mToolbarStack->endChild(); - child_it != child_it_end; ++child_it) - { - (*child_it)->setShape(mSavedShapeList[i++]); - } -} + // Attach the lite bottom tray + if (getParent() && mBottomTrayLite->getParent() != getParent()) + getParent()->addChild(mBottomTrayLite); -void LLBottomTray::onMouselookModeOut() -{ - // Apply the saved settings when we are not in mouselook mode, see EXT-3988. - { - setTrayButtonVisibleIfPossible (RS_BUTTON_GESTURES, gSavedSettings.getBOOL("ShowGestureButton"), false); - setTrayButtonVisibleIfPossible (RS_BUTTON_MOVEMENT, gSavedSettings.getBOOL("ShowMoveButton"), false); - setTrayButtonVisibleIfPossible (RS_BUTTON_CAMERA, gSavedSettings.getBOOL("ShowCameraButton"), false); - setTrayButtonVisibleIfPossible (RS_BUTTON_SNAPSHOT, gSavedSettings.getBOOL("ShowSnapshotButton"),false); - } - // HACK: To avoid usage the LLLayoutStack logic of resizing, we force the updateLayout - // and then restore children saved shapes. See EXT-4309. - BOOL saved_anim = mToolbarStack->getAnimate(); - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); - // Disable animation to prevent layout updating in several frames. - mToolbarStack->setAnimate(FALSE); - // Force the updating of layout to reset panels collapse factor. - mToolbarStack->updateLayout(); - // Restore animate state. - mToolbarStack->setAnimate(saved_anim); - // Restore saved shapes. - restorePanelsShape(); -} + mBottomTrayLite->setShape(getLocalRect()); + mBottomTrayLite->mNearbyChatBar->getChatBox()->setText(mNearbyChatBar->getChatBox()->getText()); + mBottomTrayLite->mGesturePanel->setVisible(gSavedSettings.getBOOL("ShowGestureButton")); -void LLBottomTray::onMouselookModeIn() -{ - savePanelsShape(); - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE); + mIsInLiteMode = true; } //virtual @@ -306,31 +311,14 @@ void LLBottomTray::onMouselookModeIn() // If bottom tray is already visible in mouselook mode, then onVisibilityChange will not be called from setVisible(true), void LLBottomTray::setVisible(BOOL visible) { - LLPanel::setVisible(visible); - - // *NOTE: we must check mToolbarStack against NULL because setVisible is called from the - // LLPanel::initFromParams BEFORE postBuild is called and child controls are not exist yet - if (NULL != mToolbarStack) + if (mIsInLiteMode) { - BOOL visibility = gAgent.cameraMouselook() ? false : true; - - for ( child_list_const_iter_t child_it = mToolbarStack->getChildList()->begin(); - child_it != mToolbarStack->getChildList()->end(); child_it++) - { - LLView* viewp = *child_it; - std::string name = viewp->getName(); - - // Chat bar and gesture button are shown even in mouselook mode. - // But the move, camera and snapshot buttons shouldn't be displayed. See EXT-3988. - if ("chat_bar" == name || "gesture_panel" == name || (visibility && ("movement_panel" == name || "cam_panel" == name || "snapshot_panel" == name))) - continue; - else - { - viewp->setVisible(visibility); - } - } + mBottomTrayLite->setVisible(visible); + } + else + { + LLPanel::setVisible(visible); } - if(visible) gFloaterView->setSnapOffsetBottom(getRect().getHeight()); else @@ -535,7 +523,18 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) if (mChicletPanel && mToolbarStack && mNearbyChatBar) { - mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); + // Firstly, update layout stack to ensure we deal with correct panel sizes. + { + BOOL saved_anim = mToolbarStack->getAnimate(); + // Set chiclet panel to be autoresized by default. + mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); + // Disable animation to prevent layout updating in several frames. + mToolbarStack->setAnimate(FALSE); + // Force the updating of layout to reset panels collapse factor. + mToolbarStack->updateLayout(); + // Restore animate state. + mToolbarStack->setAnimate(saved_anim); + } // bottom tray is narrowed if (delta_width < 0) @@ -637,7 +636,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); - log(mChicletPanel, "after processing panel decreasing via nearby chatbar panel"); + log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel"); lldebugs << "RS_CHATBAR_INPUT" << ", delta_panel: " << delta_panel @@ -1057,6 +1056,11 @@ void LLBottomTray::initStateProcessedObjectMap() mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, mMovementPanel)); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, mCamPanel)); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, mSnapshotPanel)); + + mDummiesMap.insert(std::make_pair(RS_BUTTON_GESTURES, getChild<LLUICtrl>("after_gesture_panel"))); + mDummiesMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, getChild<LLUICtrl>("after_movement_panel"))); + mDummiesMap.insert(std::make_pair(RS_BUTTON_CAMERA, getChild<LLUICtrl>("after_cam_panel"))); + mDummiesMap.insert(std::make_pair(RS_BUTTON_SPEAK, getChild<LLUICtrl>("after_speak_panel"))); } void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool visible) @@ -1069,6 +1073,11 @@ void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool vis } panel->setVisible(visible); + + if (mDummiesMap.count(shown_object_type)) + { + mDummiesMap[shown_object_type]->setVisible(visible); + } } void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification) @@ -1084,6 +1093,8 @@ void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type return; } + const S32 dummy_width = mDummiesMap.count(shown_object_type) ? mDummiesMap[shown_object_type]->getRect().getWidth() : 0; + const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); @@ -1093,7 +1104,7 @@ void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type const S32 available_width = (chatbar_panel_width - chatbar_panel_min_width) + (chiclet_panel_width - chiclet_panel_min_width); - const S32 required_width = panel->getRect().getWidth(); + const S32 required_width = panel->getRect().getWidth() + dummy_width; can_be_set = available_width >= required_width; } |