summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterpreference.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llfloaterpreference.cpp
Print done when done.
Diffstat (limited to 'indra/newview/llfloaterpreference.cpp')
-rw-r--r--indra/newview/llfloaterpreference.cpp365
1 files changed, 365 insertions, 0 deletions
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
new file mode 100644
index 0000000000..ded8f1df4a
--- /dev/null
+++ b/indra/newview/llfloaterpreference.cpp
@@ -0,0 +1,365 @@
+/**
+ * @file llfloaterpreference.cpp
+ * @brief LLPreferenceCore class implementation
+ *
+ * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+/*
+ * App-wide preferences. Note that these are not per-user,
+ * because we need to load many preferences before we have
+ * a login name.
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterpreference.h"
+
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "lldir.h"
+#include "llfocusmgr.h"
+#include "llscrollbar.h"
+#include "llspinctrl.h"
+#include "message.h"
+
+#include "llfloaterabout.h"
+#include "llpanelnetwork.h"
+#include "llpanelaudioprefs.h"
+#include "llpaneldisplay.h"
+#include "llpaneldebug.h"
+#include "llpanelgeneral.h"
+#include "llpanelinput.h"
+#include "llpanelmsgs.h"
+//#include "llpanelweb.h"
+#include "llprefschat.h"
+#include "llprefsim.h"
+#include "llresizehandle.h"
+#include "llresmgr.h"
+#include "llassetstorage.h"
+#include "llagent.h"
+#include "llviewercontrol.h"
+#include "llviewernetwork.h"
+#include "llvieweruictrlfactory.h"
+#include "llviewerwindow.h"
+//#include "viewer.h"
+#include "llkeyboard.h"
+#include "llscrollcontainer.h"
+
+
+const S32 PREF_BORDER = 4;
+const S32 PREF_PAD = 5;
+const S32 PREF_BUTTON_WIDTH = 70;
+const S32 PREF_CATEGORY_WIDTH = 150;
+
+const S32 PREF_FLOATER_MIN_HEIGHT = 2 * SCROLLBAR_SIZE + 2 * LLPANEL_BORDER_WIDTH + 96;
+
+LLFloaterPreference* LLFloaterPreference::sInstance = NULL;
+
+// Must be done at run time, not compile time. JC
+S32 pref_min_width()
+{
+ return
+ 2 * PREF_BORDER +
+ 2 * PREF_BUTTON_WIDTH +
+ PREF_PAD + RESIZE_HANDLE_WIDTH +
+ PREF_CATEGORY_WIDTH +
+ PREF_PAD;
+}
+
+S32 pref_min_height()
+{
+ return
+ 2 * PREF_BORDER +
+ 3*(BTN_HEIGHT + PREF_PAD) +
+ PREF_FLOATER_MIN_HEIGHT;
+}
+
+
+LLPreferenceCore::LLPreferenceCore(LLTabContainerCommon* tab_container, LLButton * default_btn) :
+ mTabContainer(tab_container),
+ mGeneralPanel(NULL),
+ mInputPanel(NULL),
+ mNetworkPanel(NULL),
+ mDisplayPanel(NULL),
+ mDisplayPanel2(NULL),
+ mAudioPanel(NULL),
+ mMsgPanel(NULL)
+{
+ mGeneralPanel = new LLPanelGeneral();
+ mTabContainer->addTabPanel(mGeneralPanel, mGeneralPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mGeneralPanel->setDefaultBtn(default_btn);
+
+ mInputPanel = new LLPanelInput();
+ mTabContainer->addTabPanel(mInputPanel, mInputPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mInputPanel->setDefaultBtn(default_btn);
+
+ mNetworkPanel = new LLPanelNetwork();
+ mTabContainer->addTabPanel(mNetworkPanel, mNetworkPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mNetworkPanel->setDefaultBtn(default_btn);
+
+ mDisplayPanel = new LLPanelDisplay();
+ mTabContainer->addTabPanel(mDisplayPanel, mDisplayPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mDisplayPanel->setDefaultBtn(default_btn);
+
+ mDisplayPanel3 = new LLPanelDisplay3();
+ mTabContainer->addTabPanel(mDisplayPanel3, mDisplayPanel3->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mDisplayPanel3->setDefaultBtn(default_btn);
+
+ mDisplayPanel2 = new LLPanelDisplay2();
+ mTabContainer->addTabPanel(mDisplayPanel2, mDisplayPanel2->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mDisplayPanel2->setDefaultBtn(default_btn);
+
+ mAudioPanel = new LLPanelAudioPrefs();
+ mTabContainer->addTabPanel(mAudioPanel, mAudioPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mAudioPanel->setDefaultBtn(default_btn);
+
+ mPrefsChat = new LLPrefsChat();
+ mTabContainer->addTabPanel(mPrefsChat->getPanel(), mPrefsChat->getPanel()->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mPrefsChat->getPanel()->setDefaultBtn(default_btn);
+
+ mPrefsIM = new LLPrefsIM();
+ mTabContainer->addTabPanel(mPrefsIM->getPanel(), mPrefsIM->getPanel()->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mPrefsIM->getPanel()->setDefaultBtn(default_btn);
+
+ mMsgPanel = new LLPanelMsgs();
+ gUICtrlFactory->buildPanel(mMsgPanel, "panel_settings_msgbox.xml");
+ mTabContainer->addTabPanel(mMsgPanel, mMsgPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ mMsgPanel->setDefaultBtn(default_btn);
+
+ mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab"));
+
+// Web prefs removed from Loopy build
+// mWebPanel = new LLPanelWeb();
+// gUICtrlFactory->buildPanel(mWebPanel, "panel_settings_web.xml");
+// addTabPanel(mWebPanel, "Web", FALSE, onTabChanged, this);
+}
+
+void LLPreferenceCore::apply()
+{
+ mGeneralPanel->apply();
+ mInputPanel->apply();
+ mNetworkPanel->apply();
+ mDisplayPanel->apply();
+ mDisplayPanel2->apply();
+ mDisplayPanel3->apply();
+ mAudioPanel->apply();
+ mPrefsChat->apply();
+ mPrefsIM->apply();
+ mMsgPanel->apply();
+// mWebPanel->apply();
+}
+
+
+void LLPreferenceCore::cancel()
+{
+ mGeneralPanel->cancel();
+ mInputPanel->cancel();
+ mNetworkPanel->cancel();
+ mDisplayPanel->cancel();
+ mDisplayPanel2->cancel();
+ mDisplayPanel3->cancel();
+ mAudioPanel->cancel();
+ mPrefsChat->cancel();
+ mPrefsIM->cancel();
+ mMsgPanel->cancel();
+// mWebPanel->cancel();
+}
+
+// static
+void LLPreferenceCore::onTabChanged(void* user_data, bool from_click)
+{
+ LLTabContainerCommon* self = (LLTabContainerCommon*)user_data;
+
+ gSavedSettings.setS32("LastPrefTab", self->getCurrentPanelIndex());
+}
+
+
+void LLPreferenceCore::setPersonalInfo(
+ const char* visibility,
+ BOOL im_via_email,
+ const char* email)
+{
+ mPrefsIM->setPersonalInfo(visibility, im_via_email, email);
+}
+
+//////////////////////////////////////////////
+// LLFloaterPreference
+
+LLFloaterPreference::LLFloaterPreference()
+{
+ gUICtrlFactory->buildFloater(this, "floater_preferences.xml");
+}
+
+BOOL LLFloaterPreference::postBuild()
+{
+ requires("About...", WIDGET_TYPE_BUTTON);
+ requires("OK", WIDGET_TYPE_BUTTON);
+ requires("Cancel", WIDGET_TYPE_BUTTON);
+ requires("Apply", WIDGET_TYPE_BUTTON);
+ requires("pref core", WIDGET_TYPE_TAB_CONTAINER);
+
+ if (!checkRequirements())
+ {
+ return FALSE;
+ }
+
+ mAboutBtn = LLUICtrlFactory::getButtonByName(this, "About...");
+ mAboutBtn->setClickedCallback(onClickAbout, this);
+
+ mApplyBtn = LLUICtrlFactory::getButtonByName(this, "Apply");
+ mApplyBtn->setClickedCallback(onBtnApply, this);
+
+ mCancelBtn = LLUICtrlFactory::getButtonByName(this, "Cancel");
+ mCancelBtn->setClickedCallback(onBtnCancel, this);
+
+ mOKBtn = LLUICtrlFactory::getButtonByName(this, "OK");
+ mOKBtn->setClickedCallback(onBtnOK, this);
+
+ mPreferenceCore = new LLPreferenceCore(
+ LLUICtrlFactory::getTabContainerByName(this, "pref core"),
+ static_cast<LLButton *>(getChildByName("OK"))
+ );
+
+ sInstance = this;
+
+ return TRUE;
+}
+
+
+LLFloaterPreference::~LLFloaterPreference()
+{
+ sInstance = NULL;
+}
+
+
+void LLFloaterPreference::draw()
+{
+ if( getVisible() )
+ {
+ LLFloater::draw();
+ }
+}
+
+
+void LLFloaterPreference::apply()
+{
+ this->mPreferenceCore->apply();
+}
+
+
+void LLFloaterPreference::cancel()
+{
+ this->mPreferenceCore->cancel();
+}
+
+
+// static
+void LLFloaterPreference::show(void*)
+{
+ if (!sInstance)
+ {
+ new LLFloaterPreference();
+ sInstance->center();
+ }
+
+ sInstance->open();
+
+ if(!gAgent.getID().isNull())
+ {
+ // we're logged in, so we can get this info.
+ gMessageSystem->newMessageFast(_PREHASH_UserInfoRequest);
+ gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+ gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ gAgent.sendReliableMessage();
+ }
+}
+
+
+// static
+void LLFloaterPreference::onClickAbout(void*)
+{
+ LLFloaterAbout::show(NULL);
+}
+
+
+// static
+void LLFloaterPreference::onBtnOK( void* userdata )
+{
+ LLFloaterPreference *fp =(LLFloaterPreference *)userdata;
+ // commit any outstanding text entry
+ if (fp->hasFocus())
+ {
+ LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus();
+ if (cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ }
+ }
+
+ if (fp->canClose())
+ {
+ fp->apply();
+ fp->onClose(false);
+
+ gSavedSettings.saveToFile( gSettingsFileName, TRUE );
+
+ std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
+ // save all settings, even if equals defaults
+ gCrashSettings.saveToFile(crash_settings_filename.c_str(), FALSE);
+ }
+ else
+ {
+ // Show beep, pop up dialog, etc.
+ llinfos << "Can't close preferences!" << llendl;
+ }
+}
+
+
+// static
+void LLFloaterPreference::onBtnApply( void* userdata )
+{
+ LLFloaterPreference *fp =(LLFloaterPreference *)userdata;
+ if (fp->hasFocus())
+ {
+ LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus();
+ if (cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ }
+ }
+ fp->apply();
+}
+
+
+// static
+void LLFloaterPreference::onBtnCancel( void* userdata )
+{
+ LLFloaterPreference *fp =(LLFloaterPreference *)userdata;
+ if (fp->hasFocus())
+ {
+ LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus();
+ if (cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ }
+ }
+ fp->cancel();
+ fp->close();
+}
+
+
+// static
+void LLFloaterPreference::updateUserInfo(
+ const char* visibility,
+ BOOL im_via_email,
+ const char* email)
+{
+ if(sInstance && sInstance->mPreferenceCore)
+ {
+ sInstance->mPreferenceCore->setPersonalInfo(
+ visibility, im_via_email, email);
+ }
+}