summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llagent.cpp2
-rw-r--r--indra/newview/llbottomtray.cpp173
-rw-r--r--indra/newview/llbottomtray.h18
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml9
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml95
5 files changed, 199 insertions, 98 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index da0e9238d6..2354323a66 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2805,7 +2805,6 @@ void LLAgent::endAnimationUpdateUI()
LLNavigationBar::getInstance()->setVisible(TRUE);
gStatusBar->setVisibleForMouselook(true);
- LLBottomTray::getInstance()->setVisible(TRUE);
LLBottomTray::getInstance()->onMouselookModeOut();
LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
@@ -2906,7 +2905,6 @@ void LLAgent::endAnimationUpdateUI()
gStatusBar->setVisibleForMouselook(false);
LLBottomTray::getInstance()->onMouselookModeIn();
- LLBottomTray::getInstance()->setVisible(FALSE);
LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
LLSideTray::getInstance()->updateSidetrayVisibility();
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index bd68d52868..a2d594cfa2 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;
}
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 562ee56912..ee0eb13218 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -46,6 +46,7 @@ class LLNotificationChiclet;
class LLSpeakButton;
class LLNearbyChatBar;
class LLIMChiclet;
+class LLBottomTrayLite;
// Build time optimization, generate once in .cpp file
#ifndef LLBOTTOMTRAY_CPP
@@ -60,13 +61,14 @@ class LLBottomTray
{
LOG_CLASS(LLBottomTray);
friend class LLSingleton<LLBottomTray>;
+ friend class LLBottomTrayLite;
public:
~LLBottomTray();
BOOL postBuild();
LLChicletPanel* getChicletPanel() {return mChicletPanel;}
- LLNearbyChatBar* getNearbyChatBar() {return mNearbyChatBar;}
+ LLNearbyChatBar* getNearbyChatBar();
void onCommitGesture(LLUICtrl* ctrl);
@@ -79,7 +81,6 @@ public:
virtual void reshape(S32 width, S32 height, BOOL called_from_parent);
- virtual void onFocusLost();
virtual void setVisible(BOOL visible);
// Implements LLVoiceClientStatusObserver::onChange() to enable the speak
@@ -172,13 +173,6 @@ private:
*/
void setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification = true);
- /**
- * Save and restore children shapes.
- * Used to avoid the LLLayoutStack resizing logic between mouse look mode switching.
- */
- void savePanelsShape();
- void restorePanelsShape();
-
MASK mResizeState;
typedef std::map<EResizeState, LLPanel*> state_object_map_t;
@@ -187,8 +181,8 @@ private:
typedef std::map<EResizeState, S32> state_object_width_map_t;
state_object_width_map_t mObjectDefaultWidthMap;
- typedef std::vector<LLRect> shape_list_t;
- shape_list_t mSavedShapeList;
+ typedef std::map<EResizeState, LLUICtrl*> dummies_map_t;
+ dummies_map_t mDummiesMap;
protected:
@@ -214,6 +208,8 @@ protected:
LLPanel* mGesturePanel;
LLButton* mCamButton;
LLButton* mMovementButton;
+ LLBottomTrayLite* mBottomTrayLite;
+ bool mIsInLiteMode;
};
#endif // LL_LLBOTTOMPANEL_H
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 09ec2137b7..aad55685d2 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -87,7 +87,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
- name="DUMMY"
+ name="after_speak_panel"
min_width="3"
top="0"
width="3"/>
@@ -127,7 +127,7 @@
layout="topleft"
left="0"
min_width="3"
- name="DUMMY"
+ name="after_gesture_panel"
top="0"
width="3"/>
<layout_panel
@@ -169,7 +169,7 @@
layout="topleft"
left="0"
min_width="3"
- name="DUMMY"
+ name="after_movement_panel"
top="0"
width="3"/>
<layout_panel
@@ -212,7 +212,7 @@
layout="topleft"
left="0"
min_width="3"
- name="DUMMY"
+ name="after_cam_panel"
top="0"
width="3"/>
<layout_panel
@@ -317,6 +317,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
layout="topleft"
left="0"
min_width="4"
+ name="DUMMY"
top="0"
width="5"/>
<layout_panel
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
new file mode 100644
index 0000000000..6e9476f814
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ default_tab_group="2"
+ mouse_opaque="true"
+ background_visible="true"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
+ follows="left|bottom|right"
+ height="33"
+ layout="topleft"
+ left="0"
+ name="bottom_tray_lite"
+ tab_stop="true"
+ top="28"
+ chrome="true"
+ border_visible="false"
+ visible="false"
+ width="1000">
+ <layout_stack
+ mouse_opaque="false"
+ border_size="0"
+ clip="false"
+ follows="all"
+ height="28"
+ layout="topleft"
+ left="0"
+ name="toolbar_stack_lite"
+ orientation="horizontal"
+ top="0"
+ width="1000">
+ <icon
+ auto_resize="false"
+ follows="left|right"
+ height="10"
+ image_name="spacer24.tga"
+ layout="topleft"
+ min_width="2"
+ left="0"
+ top="0"
+ width="2" />
+ <layout_panel
+ mouse_opaque="false"
+ auto_resize="true"
+ follows="left|right"
+ height="28"
+ layout="topleft"
+ left="0"
+ min_height="23"
+ width="310"
+ top="4"
+ min_width="188"
+ name="chat_bar"
+ user_resize="false"
+ filename="panel_nearby_chat_bar.xml" />
+ <layout_panel
+ mouse_opaque="false"
+ auto_resize="false"
+ follows="right"
+ height="28"
+ layout="topleft"
+ min_height="28"
+ width="82"
+ top_delta="0"
+ min_width="52"
+ name="gesture_panel"
+ user_resize="false">
+ <gesture_combo_list
+ follows="left|right"
+ height="23"
+ label="Gesture"
+ layout="topleft"
+ name="Gesture"
+ left="0"
+ top="5"
+ width="82"
+ tool_tip="Shows/hides gestures">
+ <gesture_combo_list.combo_button
+ pad_right="10"
+ use_ellipses="true" />
+ </gesture_combo_list>
+ </layout_panel>
+ <icon
+ auto_resize="false"
+ color="0 0 0 0"
+ follows="left|right"
+ height="10"
+ image_name="spacer24.tga"
+ layout="topleft"
+ left="0"
+ min_width="3"
+ name="after_gesture_panel"
+ top="0"
+ width="3"/>
+ </layout_stack>
+</panel>