// Checked: 2009-10-10 (RLVa-1.0.4e) | Modified: RLVa-1.0.4e ERlvCmdRet RlvExtGetSet::onSetDebug(std::string strSetting, const std::string& strValue) { S16 dbgFlags; ERlvCmdRet eRet = RLV_RET_FAILED_UNKNOWN; if ( (findDebugSetting(strSetting, dbgFlags)) && ((dbgFlags & DBG_WRITE) == DBG_WRITE) ) { eRet = RLV_RET_FAILED_OPTION; if ((dbgFlags & DBG_PSEUDO) == 0) { LLControlVariable* pSetting = gSavedSettings.getControl(strSetting); if (pSetting) { U32 u32Value; S32 s32Value; BOOL fValue; switch (pSetting->type()) { case TYPE_U32: if (LLStringUtil::convertToU32(strValue, u32Value)) { gSavedSettings.setU32(strSetting, u32Value); eRet = RLV_RET_SUCCESS; } break; case TYPE_S32: if (LLStringUtil::convertToS32(strValue, s32Value)) { gSavedSettings.setS32(strSetting, s32Value); eRet = RLV_RET_SUCCESS; } break; case TYPE_BOOLEAN: if (LLStringUtil::convertToBOOL(strValue, fValue)) { gSavedSettings.setBOOL(strSetting, fValue); eRet = RLV_RET_SUCCESS; } break; default: RLV_ERRS << "Unexpected debug setting type" << LL_ENDL; eRet = RLV_RET_FAILED; break; } // Default settings should persist if they were marked that way, but non-default settings should never persist pSetting->setPersist( (pSetting->isDefault()) ? ((dbgFlags & DBG_PERSIST) == DBG_PERSIST) : false ); } } else { eRet = onSetPseudoDebug(strSetting, strValue); } } return eRet; }
U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_values, bool revert_if_not_found) { std::string name; LLSD settings; LLSD control_map; llifstream infile; infile.open(filename); if(!infile.is_open()) { llwarns << "Cannot find file " << filename << " to load." << llendl; return 0; } S32 ret = LLSDSerialize::fromXML(settings, infile); if (ret <= 0) { infile.close(); llwarns << "Unable to open LLSD control file " << filename << ". Trying Legacy Method." << llendl; return loadFromFileLegacy(filename, TRUE, TYPE_STRING); } U32 validitems = 0; bool hidefromsettingseditor = false; for(LLSD::map_const_iterator itr = settings.beginMap(); itr != settings.endMap(); ++itr) { bool persist = true; name = (*itr).first; control_map = (*itr).second; if(control_map.has("Persist")) { persist = control_map["Persist"].asInteger(); } // Sometimes we want to use the settings system to provide cheap persistence, but we // don't want the settings themselves to be easily manipulated in the UI because // doing so can cause support problems. So we have this option: if(control_map.has("HideFromEditor")) { hidefromsettingseditor = control_map["HideFromEditor"].asInteger(); } else { hidefromsettingseditor = false; } // If the control exists just set the value from the input file. LLControlVariable* existing_control = getControl(name); if(existing_control) { if(set_default_values) { // Override all previously set properties of this control. // ... except for type. The types must match. eControlType new_type = typeStringToEnum(control_map["Type"].asString()); if(existing_control->isType(new_type)) { existing_control->setDefaultValue(control_map["Value"]); existing_control->setPersist(persist); existing_control->setHiddenFromSettingsEditor(hidefromsettingseditor); existing_control->setComment(control_map["Comment"].asString()); } else { llerrs << "Mismatched type of control variable '" << name << "' found while loading '" << filename << "'." << llendl; } } else if(existing_control->isPersisted()) { existing_control->setValue(control_map["Value"]); } // *NOTE: If not persisted and not setting defaults, // the value should not get loaded. } else { declareControl(name, typeStringToEnum(control_map["Type"].asString()), control_map["Value"], control_map["Comment"].asString(), persist, hidefromsettingseditor ); } ++validitems; } // [KITTY VIEWER] if(revert_if_not_found) { ctrl_name_table_t::iterator control_iter; for (control_iter = mNameTable.begin(); control_iter != mNameTable.end(); ++control_iter) { if(!settings.has((*control_iter).first)) { LLControlVariable* control = (*control_iter).second; if(control->isPersisted() && !control->isDefault()) { control->resetToDefault(true); } } } } // [/KITTY VIEWER] return validitems; }