Enable OK button in media settings panel even if nothing is changed, but have it be a no-op

Review #63

This change addresses an issue where the OK button was greyed out even if nothing was different (changed) in the medias settings floater. This originally was implemented so that no "empty media" data would accidentally get added to the object. But that was confusing (the OK button should never be greyed out). This changes it so that apply() will simply be a no-op if the data has not changed, and now the OK button is always enabled.
master
Rick Pasetto 2009-12-16 11:16:41 -08:00
parent 52ab75d1e5
commit aee5dc6172
2 changed files with 30 additions and 31 deletions

View File

@ -145,18 +145,21 @@ LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance()
//static
void LLFloaterMediaSettings::apply()
{
LLSD settings;
sInstance->mPanelMediaSettingsGeneral->preApply();
sInstance->mPanelMediaSettingsGeneral->getValues( settings );
sInstance->mPanelMediaSettingsSecurity->preApply();
sInstance->mPanelMediaSettingsSecurity->getValues( settings );
sInstance->mPanelMediaSettingsPermissions->preApply();
sInstance->mPanelMediaSettingsPermissions->getValues( settings );
LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA );
LLSelectMgr::getInstance()->selectionSetMediaData(settings);
sInstance->mPanelMediaSettingsGeneral->postApply();
sInstance->mPanelMediaSettingsSecurity->postApply();
sInstance->mPanelMediaSettingsPermissions->postApply();
if (sInstance->haveValuesChanged())
{
LLSD settings;
sInstance->mPanelMediaSettingsGeneral->preApply();
sInstance->mPanelMediaSettingsGeneral->getValues( settings );
sInstance->mPanelMediaSettingsSecurity->preApply();
sInstance->mPanelMediaSettingsSecurity->getValues( settings );
sInstance->mPanelMediaSettingsPermissions->preApply();
sInstance->mPanelMediaSettingsPermissions->getValues( settings );
LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA );
LLSelectMgr::getInstance()->selectionSetMediaData(settings);
sInstance->mPanelMediaSettingsGeneral->postApply();
sInstance->mPanelMediaSettingsSecurity->postApply();
sInstance->mPanelMediaSettingsPermissions->postApply();
}
}
////////////////////////////////////////////////////////////////////////////////
@ -249,15 +252,6 @@ void LLFloaterMediaSettings::onTabChanged(void* user_data, bool from_click)
LLTabContainer* self = (LLTabContainer*)user_data;
gSavedSettings.setS32("LastMediaSettingsTab", self->getCurrentPanelIndex());
}
////////////////////////////////////////////////////////////////////////////////
//
void LLFloaterMediaSettings::enableOkApplyBtns( bool enable )
{
childSetEnabled( "OK", enable );
childSetEnabled( "Apply", enable );
}
////////////////////////////////////////////////////////////////////////////////
//
const std::string LLFloaterMediaSettings::getHomeUrl()
@ -272,17 +266,25 @@ const std::string LLFloaterMediaSettings::getHomeUrl()
// virtual
void LLFloaterMediaSettings::draw()
{
// Set the enabled state of the "Apply" button if values changed
childSetEnabled( "Apply", 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 default media data, enable the OK/Apply buttons
// 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 );
bool values_changed = false;
sInstance->mPanelMediaSettingsPermissions->getValues( settings );
LLSD::map_const_iterator iter = settings.beginMap();
LLSD::map_const_iterator end = settings.endMap();
for ( ; iter != end; ++iter )
@ -295,9 +297,6 @@ void LLFloaterMediaSettings::draw()
break;
}
}
enableOkApplyBtns(values_changed);
LLFloater::draw();
return values_changed;
}

View File

@ -85,7 +85,7 @@ protected:
private:
void enableOkApplyBtns( bool enable );
bool haveValuesChanged() const;
LLSD mInitialValues;
bool mWaitingToClose;