/** * @file llfirstuse.cpp * @brief Methods that spawn "first-use" dialogs * * $LicenseInfo:firstyear=2003&license=viewergpl$ * * Copyright (c) 2003-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 "llfirstuse.h" // library includes #include "indra_constants.h" // viewer includes #include "llagent.h" // for gAgent.inPrelude() #include "llnotify.h" #include "llviewercontrol.h" #include "llui.h" #include "llappviewer.h" #include "lltracker.h" #include "floatergriddefault.h" #include "floatervoicelicense.h" #include "hippogridmanager.h" #include "llstartup.h" #include "llvoavatar.h" // static std::set LLFirstUse::sConfigVariables; // static void LLFirstUse::addConfigVariable(const std::string& var) { //Don't add the warning, now that we're storing the default in the settings_default.xml file //gSavedSettings.addWarning(var); sConfigVariables.insert(var); } // static void LLFirstUse::disableFirstUse() { // Set all first-use warnings to disabled for (std::set::iterator iter = sConfigVariables.begin(); iter != sConfigVariables.end(); ++iter) { gSavedSettings.setWarning(*iter, FALSE); } } // static void LLFirstUse::resetFirstUse() { // Set all first-use warnings to disabled for (std::set::iterator iter = sConfigVariables.begin(); iter != sConfigVariables.end(); ++iter) { gSavedSettings.setWarning(*iter, TRUE); } } // Called whenever the viewer detects that your balance went up void LLFirstUse::useBalanceIncrease(S32 delta) { if (gSavedSettings.getWarning("FirstBalanceIncrease")) { gSavedSettings.setWarning("FirstBalanceIncrease", FALSE); LLSD args; args["AMOUNT"] = llformat("%d",delta); args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); LLNotifications::instance().add("FirstBalanceIncrease", args); } } // Called whenever the viewer detects your balance went down void LLFirstUse::useBalanceDecrease(S32 delta) { if (gSavedSettings.getWarning("FirstBalanceDecrease")) { gSavedSettings.setWarning("FirstBalanceDecrease", FALSE); LLSD args; args["AMOUNT"] = llformat("%d",-delta); args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); LLNotifications::instance().add("FirstBalanceDecrease", args); } } // static void LLFirstUse::useSit() { // Our orientation island uses sitting to teach vehicle driving // so just never show this message. JC //if (gSavedSettings.getWarning("FirstSit")) //{ // gSavedSettings.setWarning("FirstSit", FALSE); // // LLNotifications::instance().add("FirstSit"); //} } // static void LLFirstUse::useMap() { if (gSavedSettings.getWarning("FirstMap")) { gSavedSettings.setWarning("FirstMap", FALSE); LLNotifications::instance().add("FirstMap"); } } // static void LLFirstUse::useMiniMap() { if (gSavedSettings.getWarning("FirstMiniMap")) { gSavedSettings.setWarning("FirstMiniMap", FALSE); LLNotifications::instance().add("FirstMiniMap"); } } // static void LLFirstUse::useGoTo() { // nothing for now JC } // static void LLFirstUse::useBuild() { if (gSavedSettings.getWarning("FirstBuild")) { gSavedSettings.setWarning("FirstBuild", FALSE); LLNotifications::instance().add("FirstBuild"); } } // static void LLFirstUse::useLeftClickNoHit() { if (gSavedSettings.getWarning("FirstLeftClickNoHit")) { gSavedSettings.setWarning("FirstLeftClickNoHit", FALSE); LLNotifications::instance().add("FirstLeftClickNoHit"); } } // static void LLFirstUse::useTeleport() { if (gSavedSettings.getWarning("FirstTeleport")) { LLVector3d teleportDestination = LLTracker::getTrackedPositionGlobal(); if(teleportDestination != LLVector3d::zero) { gSavedSettings.setWarning("FirstTeleport", FALSE); LLNotifications::instance().add("FirstTeleport"); } } } // static void LLFirstUse::useOverrideKeys() { // Our orientation island uses key overrides to teach vehicle driving // so don't show this message until you get off OI. JC if (!gAgent.inPrelude()) { if (gSavedSettings.getWarning("FirstOverrideKeys")) { gSavedSettings.setWarning("FirstOverrideKeys", FALSE); LLNotifications::instance().add("FirstOverrideKeys"); } } } // static void LLFirstUse::useAttach() { // nothing for now } // static void LLFirstUse::useAO() { if (gSavedSettings.getWarning("FirstAO")) { gSavedSettings.setWarning("FirstAO", FALSE); LLNotifications::instance().add("FirstAO"); } } // static void LLFirstUse::useAppearance() { if (gSavedSettings.getWarning("FirstAppearance")) { gSavedSettings.setWarning("FirstAppearance", FALSE); LLNotifications::instance().add("FirstAppearance"); } } // static void LLFirstUse::useInventory() { if (gSavedSettings.getWarning("FirstInventory")) { gSavedSettings.setWarning("FirstInventory", FALSE); LLNotifications::instance().add("FirstInventory"); } } // static void LLFirstUse::useSandbox() { if (gSavedSettings.getWarning("FirstSandbox")) { gSavedSettings.setWarning("FirstSandbox", FALSE); LLSD args; args["HOURS"] = llformat("%d",SANDBOX_CLEAN_FREQ); args["TIME"] = llformat("%d",SANDBOX_FIRST_CLEAN_HOUR); LLNotifications::instance().add("FirstSandbox", args); } } // static void LLFirstUse::useFlexible() { if (gSavedSettings.getWarning("FirstFlexible")) { gSavedSettings.setWarning("FirstFlexible", FALSE); LLNotifications::instance().add("FirstFlexible"); } } // static void LLFirstUse::useDebugMenus() { if (gSavedSettings.getWarning("FirstDebugMenus")) { gSavedSettings.setWarning("FirstDebugMenus", FALSE); LLNotifications::instance().add("FirstDebugMenus"); } } // static void LLFirstUse::useSculptedPrim() { if (gSavedSettings.getWarning("FirstSculptedPrim")) { gSavedSettings.setWarning("FirstSculptedPrim", FALSE); LLNotifications::instance().add("FirstSculptedPrim"); } } // static void LLFirstUse::useMedia() { if (gSavedSettings.getWarning("FirstMedia")) { gSavedSettings.setWarning("FirstMedia", FALSE); LLNotifications::instance().add("FirstMedia"); } } // [RLVa:KB] - Version: 1.23.4 | Checked: RLVa-1.0.3a (2009-09-10) | Added: RLVa-1.0.3a bool rlvHasVisibleFirstUseNotification() { LLNotificationChannelPtr activeNotifications = LLNotifications::instance().getChannel("Notifications"); for (LLNotificationChannel::Iterator itNotif = activeNotifications->begin(); itNotif != activeNotifications->end(); itNotif++) if ((*itNotif)->getName().find(RLV_SETTING_FIRSTUSE_PREFIX) == 0) return true; return false; } void LLFirstUse::showRlvFirstUseNotification(const std::string& strName) { if ( (gSavedSettings.getWarning(strName)) && (!rlvHasVisibleFirstUseNotification()) ) { gSavedSettings.setWarning(strName, FALSE); LLNotifications::instance().add(strName); } } // [/RLVa:KB] void LLFirstUse::callbackClientTags(const LLSD& notification, const LLSD& response) { gSavedSettings.setWarning("ClientTags", FALSE); S32 option = LLNotification::getSelectedOption(notification, response); //LLFloaterAvatarList *avlist = LLFloaterAvatarList::sInstance; if ( option == 0 ) { gSavedSettings.setBOOL("DownloadClientTags",TRUE); //printchat("The tags will not be updated until you restart."); //fuck that shit LLVOAvatar::updateClientTags(); LLVOAvatar::loadClientTags(); //boom //toasty } else if ( option == 1 ) { gSavedSettings.setBOOL("DownloadClientTags",FALSE); } } // static void LLFirstUse::ClientTags() { if (gSavedSettings.getWarning("ClientTags")) { LLNotifications::instance().add("QueryClientTags", LLSD(), LLSD(), callbackClientTags); } } // static void LLFirstUse::useLoginScreen() { if (gSavedSettings.getWarning("FirstLoginScreen")) { gSavedSettings.setWarning("FirstLoginScreen", FALSE); FloaterGridDefault::getInstance()->open(); FloaterGridDefault::getInstance()->center(); } } // static void LLFirstUse::voiceLicenseAgreement() { if (gSavedSettings.getWarning("FirstVoiceLicense")) { gSavedSettings.setWarning("FirstVoiceLicense", FALSE); FloaterVoiceLicense::getInstance()->open(); FloaterVoiceLicense::getInstance()->center(); } else // currently in STATE_LOGIN_VOICE_LICENSE when arriving here { LLStartUp::setStartupState(STATE_LOGIN_AUTH_INIT); } } void LLFirstUse::callbackPrivacy(const LLSD& notification, const LLSD& response) { S32 option = LLNotification::getSelectedOption(notification, response); if ( 0 == option ) { gSavedSettings.setWarning("FirstPrivacy", FALSE); LLStartUp::setStartupState(STATE_PRIVACY_LECTURED); } if ( 1 == option ) { LLStartUp::resetLogin(); } } // static void LLFirstUse::Privacy() { if (gSavedSettings.getWarning("FirstPrivacy")) { LLNotifications::instance().add("FirstPrivacy", LLSD(), LLSD(), callbackPrivacy); } else { LLStartUp::setStartupState(STATE_PRIVACY_LECTURED); } }