/*${License blank}*/ #include "llviewerprecompiledheaders.h" #include "fspanelprefs.h" #include "llcombobox.h" #include "llcolorswatch.h" #include "llcheckboxctrl.h" #include "llviewercontrol.h" #include "llfloaterreg.h" #include "lggbeammaps.h" #include "lggbeammapfloater.h" #include "lggbeamcolormapfloater.h" #include "llvoavatar.h" #include "llvoavatarself.h" #include "llspinctrl.h" #include "lldiriterator.h" // for populating the cloud combo static LLRegisterPanelClassWrapper t_pref_fs("panel_preference_firestorm"); PanelPreferenceFirestorm::PanelPreferenceFirestorm() : LLPanelPreference() { } BOOL PanelPreferenceFirestorm::postBuild() { // LGG's Color Beams refreshBeamLists(); // Beam Colors getChild("BeamColor_new")->setCommitCallback(boost::bind(&PanelPreferenceFirestorm::onBeamColor_new, this)); getChild("BeamColor_refresh")->setCommitCallback(boost::bind(&PanelPreferenceFirestorm::refreshBeamLists, this)); getChild("BeamColor_delete")->setCommitCallback(boost::bind(&PanelPreferenceFirestorm::onBeamColorDelete, this)); // Beam Shapes getChild("custom_beam_btn")->setCommitCallback(boost::bind(&PanelPreferenceFirestorm::onBeam_new, this)); getChild("refresh_beams")->setCommitCallback(boost::bind(&PanelPreferenceFirestorm::refreshBeamLists, this)); getChild("delete_beam")->setCommitCallback(boost::bind(&PanelPreferenceFirestorm::onBeamDelete, this)); //WS: Set the combo_box vars and refresh/reload them m_UseLegacyClienttags = getChild("UseLegacyClienttags"); m_ColorClienttags = getChild("ColorClienttags"); m_ClientTagsVisibility = getChild("ClientTagsVisibility"); refreshTagCombos(); // disable the prefs for features that are disabled by the global auto env being disabled getChild("UseEnvironmentFromRegionAlways")->setCommitCallback(boost::bind(&PanelPreferenceFirestorm::onUseEnvironmentFromRegionAlways, this)); // init the enable state of the related wl prefs onUseEnvironmentFromRegionAlways(); populateCloudCombo(); return LLPanelPreference::postBuild(); } void PanelPreferenceFirestorm::apply() { //WS: Apply the combo_boxes for tags applyTagCombos(); } void PanelPreferenceFirestorm::cancel() { //WS: Refresh/Reload the Combo_boxes for tags to show the right setting. refreshTagCombos(); } void PanelPreferenceFirestorm::refreshBeamLists() { LLComboBox* comboBox = getChild("FSBeamShape_combo"); if(comboBox != NULL) { comboBox->removeall(); comboBox->add("===OFF==="); std::vector names = gLggBeamMaps.getFileNames(); for(int i=0; i<(int)names.size(); i++) { comboBox->add(names[i]); } comboBox->setSimple(gSavedSettings.getString("FSBeamShape")); } comboBox = getChild("BeamColor_combo"); if(comboBox != NULL) { comboBox->removeall(); comboBox->add("===OFF==="); std::vector names = gLggBeamMaps.getColorsFileNames(); for(int i=0; i<(int)names.size(); i++) { comboBox->add(names[i]); } comboBox->setSimple(gSavedSettings.getString("FSBeamColorFile")); } } void PanelPreferenceFirestorm::onBeamColor_new() { lggBeamColorMapFloater* colorMapFloater = (lggBeamColorMapFloater*)LLFloaterReg::showInstance("lgg_beamcolormap"); colorMapFloater->setData(this); } void PanelPreferenceFirestorm::onBeam_new() { lggBeamMapFloater* beamMapFloater = (lggBeamMapFloater*)LLFloaterReg::showInstance("lgg_beamshape"); beamMapFloater->setData(this); } void PanelPreferenceFirestorm::onBeamColorDelete() { LLComboBox* comboBox = getChild("BeamColor_combo"); if(comboBox != NULL) { std::string filename = comboBox->getValue().asString()+".xml"; std::string path_name1(gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS , "beamsColors", filename)); std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "beamsColors", filename)); if(gDirUtilp->fileExists(path_name1)) { LLFile::remove(path_name1); gSavedSettings.setString("FSBeamColorFile","===OFF==="); } if(gDirUtilp->fileExists(path_name2)) { LLFile::remove(path_name2); gSavedSettings.setString("FSBeamColorFile","===OFF==="); } } refreshBeamLists(); } void PanelPreferenceFirestorm::onBeamDelete() { LLComboBox* comboBox = getChild("FSBeamShape_combo"); if(comboBox != NULL) { std::string filename = comboBox->getValue().asString()+".xml"; std::string path_name1(gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS , "beams", filename)); std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "beams", filename)); if(gDirUtilp->fileExists(path_name1)) { LLFile::remove(path_name1); gSavedSettings.setString("FSBeamShape","===OFF==="); } if(gDirUtilp->fileExists(path_name2)) { LLFile::remove(path_name2); gSavedSettings.setString("FSBeamShape","===OFF==="); } } refreshBeamLists(); } void PanelPreferenceFirestorm::onUseEnvironmentFromRegionAlways() { const bool auto_env = gSavedSettings.getBOOL("UseEnvironmentFromRegionAlways"); getChild("FSWLParcelEnabled")->setEnabled(auto_env); getChild("FSWLWhitelistFriends")->setEnabled(auto_env); getChild("FSWLWhitelistGroups")->setEnabled(auto_env); getChild("FSWLWhitelistAll")->setEnabled(auto_env); getChild("FSInterpolateParcelWL")->setEnabled(auto_env); } void PanelPreferenceFirestorm::refreshTagCombos() { //WS: Set the combo_boxes to the right value U32 usel_u = gSavedSettings.getU32("FSUseLegacyClienttags"); U32 tagv_u = gSavedSettings.getU32("FSClientTagsVisibility2"); U32 tagc_u = gSavedSettings.getU32("FSColorClienttags"); std::string usel = llformat("%d",usel_u); std::string tagv = llformat("%d",tagv_u); std::string tagc = llformat("%d",tagc_u); m_UseLegacyClienttags->setCurrentByIndex(usel_u); m_ColorClienttags->setCurrentByIndex(tagc_u); m_ClientTagsVisibility->setCurrentByIndex(tagv_u); getChild("usernamecolorswatch")->setValue(gSavedSettings.getColor4("FSColorUsernameColor").getValue()); getChild("FSColorUsername_toggle")->setValue(gSavedSettings.getBOOL("FSColorUsername")); getChild("FSShowOwnTagColor_toggle")->setValue(gSavedSettings.getBOOL("FSShowOwnTagColor")); LLColor4 tag_color = gSavedPerAccountSettings.getColor4("FirestormTagColor"); LLSD selectedColor("red"); // default case: red if (tag_color==LLColor4::blue) selectedColor = LLSD("blue"); else if (tag_color==LLColor4::yellow) selectedColor = LLSD("yellow"); else if (tag_color==LLColor4::purple) selectedColor = LLSD("purple"); else if (tag_color==LLColor4((F32)0.99,(F32)0.56,(F32)0.65,(F32)1)) selectedColor = LLSD("pink"); else if (tag_color==LLColor4::white) selectedColor = LLSD("white"); else if (tag_color==LLColor4((F32)0.99,(F32)0.39,(F32)0.12,(F32)1)) selectedColor = LLSD("orange"); else if (tag_color==LLColor4::green) selectedColor = LLSD("green"); getChild("ClientTagColor")->setValue(selectedColor); } void PanelPreferenceFirestorm::applyTagCombos() { //WS: If the user hits "apply" then write everything (if something changed) into the Debug Settings bool change=false; if(gSavedSettings.getU32("FSUseLegacyClienttags")!=m_UseLegacyClienttags->getCurrentIndex() || gSavedSettings.getU32("FSColorClienttags")!=m_ColorClienttags->getCurrentIndex() || gSavedSettings.getU32("FSClientTagsVisibility2")!=m_ClientTagsVisibility->getCurrentIndex()){ gSavedSettings.setU32("FSUseLegacyClienttags",m_UseLegacyClienttags->getCurrentIndex()); gSavedSettings.setU32("FSColorClienttags",m_ColorClienttags->getCurrentIndex()); gSavedSettings.setU32("FSClientTagsVisibility2",m_ClientTagsVisibility->getCurrentIndex()); //WS: Clear all nametags to make everything display properly! change=true; } if(LLColor4(getChild("usernamecolorswatch")->getValue()) != gSavedSettings.getColor4("FSColorUsernameColor")) { gSavedSettings.setColor4("FSColorUsernameColor",LLColor4(getChild("usernamecolorswatch")->getValue())); change=true; } if(getChild("FSColorUsername_toggle")->getValue().asBoolean() != (LLSD::Boolean)gSavedSettings.getBOOL("FSColorUsername")){ gSavedSettings.setBOOL("FSColorUsername",getChild("FSColorUsername_toggle")->getValue().asBoolean()); change=true; } if(getChild("FSShowOwnTagColor_toggle")->getValue().asBoolean() != (LLSD::Boolean)gSavedSettings.getBOOL("FSShowOwnTagColor")){ gSavedSettings.setBOOL("FSShowOwnTagColor",getChild("FSShowOwnTagColor_toggle")->getValue().asBoolean()); change=true; } LLColor4 tag_color=LLColor4::red; std::string selectedColor(getChild("ClientTagColor")->getValue().asString()); if (selectedColor == "blue") tag_color = LLColor4::blue; else if (selectedColor == "yellow") tag_color = LLColor4::yellow; else if (selectedColor == "purple") tag_color = LLColor4::purple; else if (selectedColor == "pink") tag_color = LLColor4((F32)0.99,(F32)0.56,(F32)0.65,(F32)1); else if (selectedColor == "white") tag_color = LLColor4::white; else if (selectedColor == "orange") tag_color = LLColor4((F32)0.99,(F32)0.39,(F32)0.12,(F32)1); else if (selectedColor == "green") tag_color = LLColor4::green; if(tag_color!=gSavedPerAccountSettings.getColor4("FirestormTagColor")){ gSavedPerAccountSettings.setColor4("FirestormTagColor",tag_color); if(gAgentAvatarp.notNull()) gAgentAvatarp->forceBakeAllTextures(true); if(gSavedSettings.getBOOL("FSShowOwnTagColor")) change=true; } if(change) LLVOAvatar::invalidateNameTags(); } void PanelPreferenceFirestorm::populateCloudCombo() { LLComboBox* cloud_combo = getChild("cloud_combo"); if(cloud_combo) { const std::string cloudDir(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight" + gDirUtilp->getDirDelimiter() + "clouds")); LLDirIterator dir_iter(cloudDir, "*.tga"); while (1) { std::string file; if (!dir_iter.next(file)) { break; // no more files } cloud_combo->add(file); } cloud_combo->setSimple(gSavedSettings.getString("FSCloudTexture")); } }