summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrichard <none@none>2010-01-11 14:41:37 -0800
committerrichard <none@none>2010-01-11 14:41:37 -0800
commit3e5f5a205034cde29ef80a9230d8cd4867e6dec5 (patch)
tree36bb18767f3ac5e16fa98a7e8c2b973625645d0c
parentdaa4965fe053dbd1af1f9665b29a4a10ac31cfea (diff)
EXT-3444 Volume control slider appears in an odd location
reviewed by Leyla
-rw-r--r--indra/llui/llfloater.cpp8
-rw-r--r--indra/newview/CMakeLists.txt3
-rw-r--r--indra/newview/llpanelvolumepulldown.cpp154
-rw-r--r--indra/newview/llpanelvolumepulldown.h64
-rw-r--r--indra/newview/llstatusbar.cpp19
-rw-r--r--indra/newview/llstatusbar.h2
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_volume_pulldown.xml55
9 files changed, 298 insertions, 10 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 845203b420..a35d279500 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -878,9 +878,11 @@ void LLFloater::setSnappedTo(const LLView* snap_view)
else
{
//RN: assume it's a floater as it must be a sibling to our parent floater
- LLFloater* floaterp = (LLFloater*)snap_view;
-
- setSnapTarget(floaterp->getHandle());
+ const LLFloater* floaterp = dynamic_cast<const LLFloater*>(snap_view);
+ if (floaterp)
+ {
+ setSnapTarget(floaterp->getHandle());
+ }
}
}
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 8918fc3018..cf5032643b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -214,7 +214,6 @@ set(viewer_SOURCE_FILES
llfloaterurldisplay.cpp
llfloaterurlentry.cpp
llfloatervoicedevicesettings.cpp
- llfloatervolumepulldown.cpp
llfloaterwater.cpp
llfloaterwhitelistentry.cpp
llfloaterwindlight.cpp
@@ -349,6 +348,7 @@ set(viewer_SOURCE_FILES
llpanelshower.cpp
llpanelteleporthistory.cpp
llpanelvolume.cpp
+ llpanelvolumepulldown.cpp
llparcelselection.cpp
llparticipantlist.cpp
llpatchvertexarray.cpp
@@ -852,6 +852,7 @@ set(viewer_HEADER_FILES
llpanelshower.h
llpanelteleporthistory.h
llpanelvolume.h
+ llpanelvolumepulldown.h
llparcelselection.h
llparticipantlist.h
llpatchvertexarray.h
diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp
new file mode 100644
index 0000000000..74e37efe4e
--- /dev/null
+++ b/indra/newview/llpanelvolumepulldown.cpp
@@ -0,0 +1,154 @@
+/**
+ * @file llpanelvolumepulldown.cpp
+ * @author Tofu Linden
+ * @brief A floater showing the master volume pull-down
+ *
+ * $LicenseInfo:firstyear=2008&license=viewergpl$
+ *
+ * Copyright (c) 2008-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelvolumepulldown.h"
+
+// Viewer libs
+#include "llviewercontrol.h"
+#include "llstatusbar.h"
+
+// Linden libs
+#include "llbutton.h"
+#include "lltabcontainer.h"
+#include "llfloaterreg.h"
+#include "llfloaterpreference.h"
+#include "llslider.h"
+
+/* static */ const F32 LLPanelVolumePulldown::sAutoCloseFadeStartTimeSec = 4.0f;
+/* static */ const F32 LLPanelVolumePulldown::sAutoCloseTotalTimeSec = 5.0f;
+
+///----------------------------------------------------------------------------
+/// Class LLPanelVolumePulldown
+///----------------------------------------------------------------------------
+
+// Default constructor
+LLPanelVolumePulldown::LLPanelVolumePulldown()
+{
+ mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2));
+ mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2));
+ LLUICtrlFactory::instance().buildPanel(this, "panel_volume_pulldown.xml");
+}
+
+BOOL LLPanelVolumePulldown::postBuild()
+{
+ // set the initial volume-slider's position to reflect reality
+ LLSlider* volslider = getChild<LLSlider>( "mastervolume" );
+ volslider->setValue(gSavedSettings.getF32("AudioLevelMaster"));
+
+ return LLPanel::postBuild();
+}
+
+/*virtual*/
+void LLPanelVolumePulldown::onMouseEnter(S32 x, S32 y, MASK mask)
+{
+ mHoverTimer.stop();
+ LLPanel::onMouseEnter(x,y,mask);
+}
+
+
+/*virtual*/
+void LLPanelVolumePulldown::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ mHoverTimer.start();
+ LLPanel::onMouseLeave(x,y,mask);
+}
+
+/*virtual*/
+void LLPanelVolumePulldown::handleVisibilityChange ( BOOL new_visibility )
+{
+ if (new_visibility)
+ {
+ mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
+ gFocusMgr.setTopCtrl(this);
+ }
+ else
+ {
+ mHoverTimer.stop();
+ gFocusMgr.setTopCtrl(NULL);
+ }
+}
+
+/*virtual*/
+void LLPanelVolumePulldown::onTopLost()
+{
+ setVisible(FALSE);
+}
+
+void LLPanelVolumePulldown::onAdvancedButtonClick(const LLSD& user_data)
+{
+ // close the global volume minicontrol, we're bringing up the big one
+ setVisible(FALSE);
+
+ // bring up the prefs floater
+ LLFloaterPreference* prefsfloater = dynamic_cast<LLFloaterPreference*>
+ (LLFloaterReg::showInstance("preferences"));
+ if (prefsfloater)
+ {
+ // grab the 'audio' panel from the preferences floater and
+ // bring it the front!
+ LLTabContainer* tabcontainer = prefsfloater->getChild<LLTabContainer>("pref core");
+ LLPanel* audiopanel = prefsfloater->getChild<LLPanel>("audio");
+ if (tabcontainer && audiopanel)
+ {
+ tabcontainer->selectTabPanel(audiopanel);
+ }
+ }
+}
+
+void LLPanelVolumePulldown::setControlFalse(const LLSD& user_data)
+{
+ std::string control_name = user_data.asString();
+ LLControlVariable* control = findControl(control_name);
+
+ if (control)
+ control->set(LLSD(FALSE));
+}
+
+//virtual
+void LLPanelVolumePulldown::draw()
+{
+ F32 alpha = mHoverTimer.getStarted()
+ ? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f)
+ : 1.0f;
+ LLViewDrawContext context(alpha);
+
+ LLPanel::draw();
+
+ if (alpha == 0.f)
+ {
+ setVisible(FALSE);
+ }
+}
+
diff --git a/indra/newview/llpanelvolumepulldown.h b/indra/newview/llpanelvolumepulldown.h
new file mode 100644
index 0000000000..9f20caa1a8
--- /dev/null
+++ b/indra/newview/llpanelvolumepulldown.h
@@ -0,0 +1,64 @@
+/**
+ * @file llpanelvolumepulldown.h
+ * @author Tofu Linden
+ * @brief A panel showing the master volume pull-down
+ *
+ * $LicenseInfo:firstyear=2008&license=viewergpl$
+ *
+ * Copyright (c) 2008-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELVOLUMEPULLDOWN_H
+#define LL_LLPANELVOLUMEPULLDOWN_H
+
+#include "linden_common.h"
+
+#include "llpanel.h"
+
+class LLFrameTimer;
+
+class LLPanelVolumePulldown : public LLPanel
+{
+ public:
+ LLPanelVolumePulldown();
+ /*virtual*/ void draw();
+ /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
+ /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
+ /*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
+ /*virtual*/ void onTopLost();
+ /*virtual*/ BOOL postBuild();
+
+ private:
+ void setControlFalse(const LLSD& user_data);
+ void onAdvancedButtonClick(const LLSD& user_data);
+
+ LLFrameTimer mHoverTimer;
+ static const F32 sAutoCloseFadeStartTimeSec;
+ static const F32 sAutoCloseTotalTimeSec;
+};
+
+
+#endif // LL_LLPANELVOLUMEPULLDOWN_H
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 5ce3bbb9f6..b3b2b9ee5d 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -42,7 +42,7 @@
#include "llfloaterbuycurrency.h"
#include "llfloaterchat.h"
#include "llfloaterlagmeter.h"
-#include "llfloatervolumepulldown.h"
+#include "llpanelvolumepulldown.h"
#include "llfloaterregioninfo.h"
#include "llfloaterscriptdebug.h"
#include "llhudicon.h"
@@ -204,6 +204,21 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
addChild(mSGPacketLoss);
childSetActionTextbox("stat_btn", onClickStatGraph);
+
+ mPanelVolumePulldown = new LLPanelVolumePulldown();
+ addChild(mPanelVolumePulldown);
+
+ LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
+ LLButton* volbtn = getChild<LLButton>( "volume_btn" );
+ volume_pulldown_rect.setLeftTopAndSize(volbtn->getRect().mLeft -
+ (volume_pulldown_rect.getWidth() - volbtn->getRect().getWidth())/2,
+ volbtn->calcScreenRect().mBottom,
+ volume_pulldown_rect.getWidth(),
+ volume_pulldown_rect.getHeight());
+
+ mPanelVolumePulldown->setShape(volume_pulldown_rect);
+ mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
+ mPanelVolumePulldown->setVisible(FALSE);
}
LLStatusBar::~LLStatusBar()
@@ -501,7 +516,7 @@ static void onClickScriptDebug(void*)
void LLStatusBar::onMouseEnterVolume(LLUICtrl* ctrl)
{
// show the master volume pull-down
- LLFloaterReg::showInstance("volume_pulldown");
+ gStatusBar->mPanelVolumePulldown->setVisible(TRUE);
}
static void onClickVolume(void* data)
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index f77cc1acb8..0e98da0fe4 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -112,7 +112,7 @@ private:
S32 mSquareMetersCommitted;
LLFrameTimer* mBalanceTimer;
LLFrameTimer* mHealthTimer;
-
+ LLPanelVolumePulldown* mPanelVolumePulldown;
static std::vector<std::string> sDays;
static std::vector<std::string> sMonths;
static const U32 MAX_DATE_STRING_LENGTH;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 23bdbc7381..f8d1f34f9d 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -106,7 +106,6 @@
#include "llfloateruipreview.h"
#include "llfloaterurldisplay.h"
#include "llfloatervoicedevicesettings.h"
-#include "llfloatervolumepulldown.h"
#include "llfloaterwater.h"
#include "llfloaterwhitelistentry.h"
#include "llfloaterwindlight.h"
@@ -256,7 +255,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("upload_image", "floater_image_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImagePreview>, "upload");
LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
- LLFloaterReg::add("volume_pulldown", "floater_volume_pulldown.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVolumePulldown>);
LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);
LLFloaterReg::add("whitelist_entry", "floater_whitelist_entry.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWhiteListEntry>);
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 00f54feabd..5c9c9b5611 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -84,7 +84,6 @@
tool_tip="Global Volume Control"
width="16" />
<text
- enabled="true"
follows="right|bottom"
halign="center"
height="12"
diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
new file mode 100644
index 0000000000..60d4a7e00b
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_opaque="true"
+ background_visible="false"
+ border_visible="false"
+ border="false"
+ chrome="true"
+ follows="bottom"
+ height="150"
+ layout="topleft"
+ name="volumepulldown_floater"
+ width="32">
+ <!-- floater background image -->
+ <icon
+ height="150"
+ image_name="Inspector_Background"
+ layout="topleft"
+ left="0"
+ name="normal_background"
+ top="0"
+ width="32" />
+ <slider
+ control_name="AudioLevelMaster"
+ follows="left|top"
+ left="0"
+ top="1"
+ orientation="vertical"
+ height="120"
+ increment="0.05"
+ initial_value="0.5"
+ layout="topleft"
+ name="mastervolume"
+ show_text="false"
+ slider_label.halign="right"
+ top_pad="2"
+ volume="true">
+ <slider.commit_callback
+ function="Vol.setControlFalse"
+ parameter="MuteAudio" />
+ </slider>
+ <button
+ left="7"
+ top_pad="9"
+ width="18"
+ height="12"
+ follows="top|left"
+ name="prefs_btn"
+ image_unselected="Icon_Gear_Foreground"
+ image_disabled="Icon_Gear_Background"
+ image_pressed="Icon_Gear_Press"
+ scale_image="false">
+ <button.commit_callback
+ function="Vol.GoAudioPrefs" />
+ </button>
+</panel>