diff options
author | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
---|---|---|
committer | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
commit | 1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch) | |
tree | ab243607f74f78200787bba5b9b88f07ef1b966f /indra/newview/llfloatermediasettings.cpp | |
parent | 6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff) | |
parent | e1623bb276f83a43ce7a197e388720c05bdefe61 (diff) |
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts:
# autobuild.xml
# indra/cmake/CMakeLists.txt
# indra/cmake/GoogleMock.cmake
# indra/llaudio/llaudioengine_fmodstudio.cpp
# indra/llaudio/llaudioengine_fmodstudio.h
# indra/llaudio/lllistener_fmodstudio.cpp
# indra/llaudio/lllistener_fmodstudio.h
# indra/llaudio/llstreamingaudio_fmodstudio.cpp
# indra/llaudio/llstreamingaudio_fmodstudio.h
# indra/llcharacter/llmultigesture.cpp
# indra/llcharacter/llmultigesture.h
# indra/llimage/llimage.cpp
# indra/llimage/llimagepng.cpp
# indra/llimage/llimageworker.cpp
# indra/llimage/tests/llimageworker_test.cpp
# indra/llmessage/tests/llmockhttpclient.h
# indra/llprimitive/llgltfmaterial.h
# indra/llrender/llfontfreetype.cpp
# indra/llui/llcombobox.cpp
# indra/llui/llfolderview.cpp
# indra/llui/llfolderviewmodel.h
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltextvalidate.cpp
# indra/llui/lltextvalidate.h
# indra/llui/lluictrl.h
# indra/llui/llview.cpp
# indra/llwindow/llwindowmacosx.cpp
# indra/newview/app_settings/settings.xml
# indra/newview/llappearancemgr.cpp
# indra/newview/llappearancemgr.h
# indra/newview/llavatarpropertiesprocessor.cpp
# indra/newview/llavatarpropertiesprocessor.h
# indra/newview/llbreadcrumbview.cpp
# indra/newview/llbreadcrumbview.h
# indra/newview/llbreastmotion.cpp
# indra/newview/llbreastmotion.h
# indra/newview/llconversationmodel.h
# indra/newview/lldensityctrl.cpp
# indra/newview/lldensityctrl.h
# indra/newview/llface.inl
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llfloateremojipicker.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterprofiletexture.cpp
# indra/newview/llfloaterprofiletexture.h
# indra/newview/llgesturemgr.cpp
# indra/newview/llgesturemgr.h
# indra/newview/llimpanel.cpp
# indra/newview/llimpanel.h
# indra/newview/llinventorybridge.cpp
# indra/newview/llinventorybridge.h
# indra/newview/llinventoryclipboard.cpp
# indra/newview/llinventoryclipboard.h
# indra/newview/llinventoryfunctions.cpp
# indra/newview/llinventoryfunctions.h
# indra/newview/llinventorygallery.cpp
# indra/newview/lllistbrowser.cpp
# indra/newview/lllistbrowser.h
# indra/newview/llpanelobjectinventory.cpp
# indra/newview/llpanelprofile.cpp
# indra/newview/llpanelprofile.h
# indra/newview/llpreviewgesture.cpp
# indra/newview/llsavedsettingsglue.cpp
# indra/newview/llsavedsettingsglue.h
# indra/newview/lltooldraganddrop.cpp
# indra/newview/llurllineeditorctrl.cpp
# indra/newview/llvectorperfoptions.cpp
# indra/newview/llvectorperfoptions.h
# indra/newview/llviewerparceloverlay.cpp
# indra/newview/llviewertexlayer.cpp
# indra/newview/llviewertexturelist.cpp
# indra/newview/macmain.h
# indra/test/test.cpp
Diffstat (limited to 'indra/newview/llfloatermediasettings.cpp')
-rw-r--r-- | indra/newview/llfloatermediasettings.cpp | 670 |
1 files changed, 335 insertions, 335 deletions
diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index 3749ee3aa7..a03e13d4e9 100644 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -1,335 +1,335 @@ -/** - * @file llfloatermediasettings.cpp - * @brief Tabbed dialog for media settings - class implementation - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llfloaterreg.h" -#include "llfloatermediasettings.h" -#include "llpanelmediasettingsgeneral.h" -#include "llpanelmediasettingssecurity.h" -#include "llpanelmediasettingspermissions.h" -#include "llviewercontrol.h" -#include "lluictrlfactory.h" -#include "llbutton.h" -#include "llselectmgr.h" -#include "llsdutil.h" - -LLFloaterMediaSettings* LLFloaterMediaSettings::sInstance = NULL; - -//////////////////////////////////////////////////////////////////////////////// -// -LLFloaterMediaSettings::LLFloaterMediaSettings(const LLSD& key) - : LLFloater(key), - mTabContainer(NULL), - mPanelMediaSettingsGeneral(NULL), - mPanelMediaSettingsSecurity(NULL), - mPanelMediaSettingsPermissions(NULL), - mIdenticalHasMediaInfo( true ), - mMultipleMedia(false), - mMultipleValidMedia(false) -{ -} - -//////////////////////////////////////////////////////////////////////////////// -// -LLFloaterMediaSettings::~LLFloaterMediaSettings() -{ - if ( mPanelMediaSettingsGeneral ) - { - delete mPanelMediaSettingsGeneral; - mPanelMediaSettingsGeneral = NULL; - } - - if ( mPanelMediaSettingsSecurity ) - { - delete mPanelMediaSettingsSecurity; - mPanelMediaSettingsSecurity = NULL; - } - - if ( mPanelMediaSettingsPermissions ) - { - delete mPanelMediaSettingsPermissions; - mPanelMediaSettingsPermissions = NULL; - } - - sInstance = NULL; -} - -//////////////////////////////////////////////////////////////////////////////// -// -bool LLFloaterMediaSettings::postBuild() -{ - mApplyBtn = getChild<LLButton>("Apply"); - mApplyBtn->setClickedCallback(onBtnApply, this); - - mCancelBtn = getChild<LLButton>("Cancel"); - mCancelBtn->setClickedCallback(onBtnCancel, this); - - mOKBtn = getChild<LLButton>("OK"); - mOKBtn->setClickedCallback(onBtnOK, this); - - mTabContainer = getChild<LLTabContainer>( "tab_container" ); - - mPanelMediaSettingsGeneral = new LLPanelMediaSettingsGeneral(); - mTabContainer->addTabPanel( - LLTabContainer::TabPanelParams(). - panel(mPanelMediaSettingsGeneral)); - mPanelMediaSettingsGeneral->setParent( this ); - - // note that "permissions" tab is really "Controls" tab - refs to 'perms' and - // 'permissions' not changed to 'controls' since we don't want to change - // shared files in server code and keeping everything the same seemed best. - mPanelMediaSettingsPermissions = new LLPanelMediaSettingsPermissions(); - mTabContainer->addTabPanel( - LLTabContainer::TabPanelParams(). - panel(mPanelMediaSettingsPermissions)); - - mPanelMediaSettingsSecurity = new LLPanelMediaSettingsSecurity(); - mTabContainer->addTabPanel( - LLTabContainer::TabPanelParams(). - panel(mPanelMediaSettingsSecurity)); - mPanelMediaSettingsSecurity->setParent( this ); - - // restore the last tab viewed from persistance variable storage - if (!mTabContainer->selectTab(gSavedSettings.getS32("LastMediaSettingsTab"))) - { - mTabContainer->selectFirstTab(); - }; - - sInstance = this; - - return true; -} - -//static -LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance() -{ - if ( !sInstance ) - { - sInstance = (LLFloaterReg::getTypedInstance<LLFloaterMediaSettings>("media_settings")); - } - - return sInstance; -} - -//static -void LLFloaterMediaSettings::apply() -{ - if (sInstance->haveValuesChanged()) - { - LLSD settings; - sInstance->mPanelMediaSettingsGeneral->preApply(); - sInstance->mPanelMediaSettingsGeneral->getValues( settings, false ); - sInstance->mPanelMediaSettingsSecurity->preApply(); - sInstance->mPanelMediaSettingsSecurity->getValues( settings, false ); - sInstance->mPanelMediaSettingsPermissions->preApply(); - sInstance->mPanelMediaSettingsPermissions->getValues( settings, false ); - - LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA, settings ); - - sInstance->mPanelMediaSettingsGeneral->postApply(); - sInstance->mPanelMediaSettingsSecurity->postApply(); - sInstance->mPanelMediaSettingsPermissions->postApply(); - } -} - -//////////////////////////////////////////////////////////////////////////////// -void LLFloaterMediaSettings::onOpen(const LLSD& key) -{ - if (mPanelMediaSettingsGeneral) - { - // media is expensive, so only load it when nessesary. - // If we need to preload it, set volume to 0 and any pause - // if applicable, then unpause here - mPanelMediaSettingsGeneral->updateMediaPreview(); - } -} - -//////////////////////////////////////////////////////////////////////////////// -void LLFloaterMediaSettings::onClose(bool app_quitting) -{ - if(mPanelMediaSettingsGeneral) - { - mPanelMediaSettingsGeneral->onClose(app_quitting); - } - LLFloaterReg::hideInstance("whitelist_entry"); -} - -//////////////////////////////////////////////////////////////////////////////// -//static -void LLFloaterMediaSettings::initValues( const LLSD& media_settings, bool editable ) -{ - if (sInstance->hasFocus()) return; - - // Clear values - sInstance->mPanelMediaSettingsGeneral->clearValues(sInstance->mPanelMediaSettingsGeneral, editable, false /*don't update preview*/); - sInstance->mPanelMediaSettingsSecurity->clearValues(sInstance->mPanelMediaSettingsSecurity, editable); - sInstance->mPanelMediaSettingsPermissions->clearValues(sInstance->mPanelMediaSettingsPermissions, editable); - - // update all panels with values from simulator - sInstance->mPanelMediaSettingsGeneral-> - initValues( sInstance->mPanelMediaSettingsGeneral, media_settings, editable ); - - sInstance->mPanelMediaSettingsSecurity-> - initValues( sInstance->mPanelMediaSettingsSecurity, media_settings, editable ); - - sInstance->mPanelMediaSettingsPermissions-> - initValues( sInstance->mPanelMediaSettingsPermissions, media_settings, editable ); - - // Squirrel away initial values - sInstance->mInitialValues.clear(); - sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues ); - sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues ); - sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues ); - - sInstance->mApplyBtn->setEnabled(editable); - sInstance->mOKBtn->setEnabled(editable); -} - -//////////////////////////////////////////////////////////////////////////////// -// -void LLFloaterMediaSettings::commitFields() -{ - if (hasFocus()) - { - LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus()); - if (cur_focus && cur_focus->acceptsTextInput()) - { - cur_focus->onCommit(); - }; - }; -} - -//////////////////////////////////////////////////////////////////////////////// -//static -void LLFloaterMediaSettings::clearValues( bool editable) -{ - if (sInstance) - { - // clean up all panels before updating - sInstance->mPanelMediaSettingsGeneral ->clearValues(sInstance->mPanelMediaSettingsGeneral, editable); - sInstance->mPanelMediaSettingsSecurity ->clearValues(sInstance->mPanelMediaSettingsSecurity, editable); - sInstance->mPanelMediaSettingsPermissions->clearValues(sInstance->mPanelMediaSettingsPermissions, editable); - } -} - -//////////////////////////////////////////////////////////////////////////////// -// static -void LLFloaterMediaSettings::onBtnOK( void* userdata ) -{ - sInstance->commitFields(); - - sInstance->apply(); - - sInstance->closeFloater(); -} - -//////////////////////////////////////////////////////////////////////////////// -// static -void LLFloaterMediaSettings::onBtnApply( void* userdata ) -{ - sInstance->commitFields(); - - sInstance->apply(); - - sInstance->mInitialValues.clear(); - sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues ); - sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues ); - sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues ); - -} - -//////////////////////////////////////////////////////////////////////////////// -// static -void LLFloaterMediaSettings::onBtnCancel( void* userdata ) -{ - sInstance->closeFloater(); -} - -//////////////////////////////////////////////////////////////////////////////// -// static -void LLFloaterMediaSettings::onTabChanged(void* user_data, bool from_click) -{ - LLTabContainer* self = (LLTabContainer*)user_data; - gSavedSettings.setS32("LastMediaSettingsTab", self->getCurrentPanelIndex()); -} -//////////////////////////////////////////////////////////////////////////////// -// -const std::string LLFloaterMediaSettings::getHomeUrl() -{ - if ( mPanelMediaSettingsGeneral ) - return mPanelMediaSettingsGeneral->getHomeUrl(); - else - return std::string( "" ); -} - -//////////////////////////////////////////////////////////////////////////////// -// virtual -void LLFloaterMediaSettings::draw() -{ - if (NULL != mApplyBtn) - { - // Set the enabled state of the "Apply" button if values changed - mApplyBtn->setEnabled( haveValuesChanged() ); - } - - LLFloater::draw(); -} - - -//private -bool LLFloaterMediaSettings::haveValuesChanged() const -{ - bool values_changed = false; - // *NOTE: The code below is very inefficient. Better to do this - // only when data change. - // Every frame, check to see what the values are. If they are not - // the same as the initial media data, enable the OK/Apply buttons - LLSD settings; - sInstance->mPanelMediaSettingsGeneral->getValues( settings ); - sInstance->mPanelMediaSettingsSecurity->getValues( settings ); - sInstance->mPanelMediaSettingsPermissions->getValues( settings ); - LLSD::map_const_iterator iter = settings.beginMap(); - LLSD::map_const_iterator end = settings.endMap(); - for ( ; iter != end; ++iter ) - { - const std::string ¤t_key = iter->first; - const LLSD ¤t_value = iter->second; - if ( ! llsd_equals(current_value, mInitialValues[current_key])) - { - values_changed = true; - break; - } - } - return values_changed; -} - -bool LLFloaterMediaSettings::instanceExists() -{ - return LLFloaterReg::findTypedInstance<LLFloaterMediaSettings>("media_settings"); -} - - +/**
+ * @file llfloatermediasettings.cpp
+ * @brief Tabbed dialog for media settings - class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterreg.h"
+#include "llfloatermediasettings.h"
+#include "llpanelmediasettingsgeneral.h"
+#include "llpanelmediasettingssecurity.h"
+#include "llpanelmediasettingspermissions.h"
+#include "llviewercontrol.h"
+#include "lluictrlfactory.h"
+#include "llbutton.h"
+#include "llselectmgr.h"
+#include "llsdutil.h"
+
+LLFloaterMediaSettings* LLFloaterMediaSettings::sInstance = NULL;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+LLFloaterMediaSettings::LLFloaterMediaSettings(const LLSD& key)
+ : LLFloater(key),
+ mTabContainer(NULL),
+ mPanelMediaSettingsGeneral(NULL),
+ mPanelMediaSettingsSecurity(NULL),
+ mPanelMediaSettingsPermissions(NULL),
+ mIdenticalHasMediaInfo( true ),
+ mMultipleMedia(false),
+ mMultipleValidMedia(false)
+{
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+LLFloaterMediaSettings::~LLFloaterMediaSettings()
+{
+ if ( mPanelMediaSettingsGeneral )
+ {
+ delete mPanelMediaSettingsGeneral;
+ mPanelMediaSettingsGeneral = NULL;
+ }
+
+ if ( mPanelMediaSettingsSecurity )
+ {
+ delete mPanelMediaSettingsSecurity;
+ mPanelMediaSettingsSecurity = NULL;
+ }
+
+ if ( mPanelMediaSettingsPermissions )
+ {
+ delete mPanelMediaSettingsPermissions;
+ mPanelMediaSettingsPermissions = NULL;
+ }
+
+ sInstance = NULL;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+bool LLFloaterMediaSettings::postBuild()
+{
+ mApplyBtn = getChild<LLButton>("Apply");
+ mApplyBtn->setClickedCallback(onBtnApply, this);
+
+ mCancelBtn = getChild<LLButton>("Cancel");
+ mCancelBtn->setClickedCallback(onBtnCancel, this);
+
+ mOKBtn = getChild<LLButton>("OK");
+ mOKBtn->setClickedCallback(onBtnOK, this);
+
+ mTabContainer = getChild<LLTabContainer>( "tab_container" );
+
+ mPanelMediaSettingsGeneral = new LLPanelMediaSettingsGeneral();
+ mTabContainer->addTabPanel(
+ LLTabContainer::TabPanelParams().
+ panel(mPanelMediaSettingsGeneral));
+ mPanelMediaSettingsGeneral->setParent( this );
+
+ // note that "permissions" tab is really "Controls" tab - refs to 'perms' and
+ // 'permissions' not changed to 'controls' since we don't want to change
+ // shared files in server code and keeping everything the same seemed best.
+ mPanelMediaSettingsPermissions = new LLPanelMediaSettingsPermissions();
+ mTabContainer->addTabPanel(
+ LLTabContainer::TabPanelParams().
+ panel(mPanelMediaSettingsPermissions));
+
+ mPanelMediaSettingsSecurity = new LLPanelMediaSettingsSecurity();
+ mTabContainer->addTabPanel(
+ LLTabContainer::TabPanelParams().
+ panel(mPanelMediaSettingsSecurity));
+ mPanelMediaSettingsSecurity->setParent( this );
+
+ // restore the last tab viewed from persistance variable storage
+ if (!mTabContainer->selectTab(gSavedSettings.getS32("LastMediaSettingsTab")))
+ {
+ mTabContainer->selectFirstTab();
+ };
+
+ sInstance = this;
+
+ return true;
+}
+
+//static
+LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance()
+{
+ if ( !sInstance )
+ {
+ sInstance = (LLFloaterReg::getTypedInstance<LLFloaterMediaSettings>("media_settings"));
+ }
+
+ return sInstance;
+}
+
+//static
+void LLFloaterMediaSettings::apply()
+{
+ if (sInstance->haveValuesChanged())
+ {
+ LLSD settings;
+ sInstance->mPanelMediaSettingsGeneral->preApply();
+ sInstance->mPanelMediaSettingsGeneral->getValues( settings, false );
+ sInstance->mPanelMediaSettingsSecurity->preApply();
+ sInstance->mPanelMediaSettingsSecurity->getValues( settings, false );
+ sInstance->mPanelMediaSettingsPermissions->preApply();
+ sInstance->mPanelMediaSettingsPermissions->getValues( settings, false );
+
+ LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA, settings );
+
+ sInstance->mPanelMediaSettingsGeneral->postApply();
+ sInstance->mPanelMediaSettingsSecurity->postApply();
+ sInstance->mPanelMediaSettingsPermissions->postApply();
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void LLFloaterMediaSettings::onOpen(const LLSD& key)
+{
+ if (mPanelMediaSettingsGeneral)
+ {
+ // media is expensive, so only load it when nessesary.
+ // If we need to preload it, set volume to 0 and any pause
+ // if applicable, then unpause here
+ mPanelMediaSettingsGeneral->updateMediaPreview();
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void LLFloaterMediaSettings::onClose(bool app_quitting)
+{
+ if(mPanelMediaSettingsGeneral)
+ {
+ mPanelMediaSettingsGeneral->onClose(app_quitting);
+ }
+ LLFloaterReg::hideInstance("whitelist_entry");
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//static
+void LLFloaterMediaSettings::initValues( const LLSD& media_settings, bool editable )
+{
+ if (sInstance->hasFocus()) return;
+
+ // Clear values
+ sInstance->mPanelMediaSettingsGeneral->clearValues(sInstance->mPanelMediaSettingsGeneral, editable, false /*don't update preview*/);
+ sInstance->mPanelMediaSettingsSecurity->clearValues(sInstance->mPanelMediaSettingsSecurity, editable);
+ sInstance->mPanelMediaSettingsPermissions->clearValues(sInstance->mPanelMediaSettingsPermissions, editable);
+
+ // update all panels with values from simulator
+ sInstance->mPanelMediaSettingsGeneral->
+ initValues( sInstance->mPanelMediaSettingsGeneral, media_settings, editable );
+
+ sInstance->mPanelMediaSettingsSecurity->
+ initValues( sInstance->mPanelMediaSettingsSecurity, media_settings, editable );
+
+ sInstance->mPanelMediaSettingsPermissions->
+ initValues( sInstance->mPanelMediaSettingsPermissions, media_settings, editable );
+
+ // Squirrel away initial values
+ sInstance->mInitialValues.clear();
+ sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues );
+
+ sInstance->mApplyBtn->setEnabled(editable);
+ sInstance->mOKBtn->setEnabled(editable);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLFloaterMediaSettings::commitFields()
+{
+ if (hasFocus())
+ {
+ LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
+ if (cur_focus && cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ };
+ };
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//static
+void LLFloaterMediaSettings::clearValues( bool editable)
+{
+ if (sInstance)
+ {
+ // clean up all panels before updating
+ sInstance->mPanelMediaSettingsGeneral ->clearValues(sInstance->mPanelMediaSettingsGeneral, editable);
+ sInstance->mPanelMediaSettingsSecurity ->clearValues(sInstance->mPanelMediaSettingsSecurity, editable);
+ sInstance->mPanelMediaSettingsPermissions->clearValues(sInstance->mPanelMediaSettingsPermissions, editable);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static
+void LLFloaterMediaSettings::onBtnOK( void* userdata )
+{
+ sInstance->commitFields();
+
+ sInstance->apply();
+
+ sInstance->closeFloater();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static
+void LLFloaterMediaSettings::onBtnApply( void* userdata )
+{
+ sInstance->commitFields();
+
+ sInstance->apply();
+
+ sInstance->mInitialValues.clear();
+ sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues );
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static
+void LLFloaterMediaSettings::onBtnCancel( void* userdata )
+{
+ sInstance->closeFloater();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static
+void LLFloaterMediaSettings::onTabChanged(void* user_data, bool from_click)
+{
+ LLTabContainer* self = (LLTabContainer*)user_data;
+ gSavedSettings.setS32("LastMediaSettingsTab", self->getCurrentPanelIndex());
+}
+////////////////////////////////////////////////////////////////////////////////
+//
+const std::string LLFloaterMediaSettings::getHomeUrl()
+{
+ if ( mPanelMediaSettingsGeneral )
+ return mPanelMediaSettingsGeneral->getHomeUrl();
+ else
+ return std::string( "" );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// virtual
+void LLFloaterMediaSettings::draw()
+{
+ if (NULL != mApplyBtn)
+ {
+ // Set the enabled state of the "Apply" button if values changed
+ mApplyBtn->setEnabled( haveValuesChanged() );
+ }
+
+ LLFloater::draw();
+}
+
+
+//private
+bool LLFloaterMediaSettings::haveValuesChanged() const
+{
+ bool values_changed = false;
+ // *NOTE: The code below is very inefficient. Better to do this
+ // only when data change.
+ // Every frame, check to see what the values are. If they are not
+ // the same as the initial media data, enable the OK/Apply buttons
+ LLSD settings;
+ sInstance->mPanelMediaSettingsGeneral->getValues( settings );
+ sInstance->mPanelMediaSettingsSecurity->getValues( settings );
+ sInstance->mPanelMediaSettingsPermissions->getValues( settings );
+ LLSD::map_const_iterator iter = settings.beginMap();
+ LLSD::map_const_iterator end = settings.endMap();
+ for ( ; iter != end; ++iter )
+ {
+ const std::string ¤t_key = iter->first;
+ const LLSD ¤t_value = iter->second;
+ if ( ! llsd_equals(current_value, mInitialValues[current_key]))
+ {
+ values_changed = true;
+ break;
+ }
+ }
+ return values_changed;
+}
+
+bool LLFloaterMediaSettings::instanceExists()
+{
+ return LLFloaterReg::findTypedInstance<LLFloaterMediaSettings>("media_settings");
+}
+
+
|