summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2008-03-15 01:18:27 +0000
committerSteven Bennetts <steve@lindenlab.com>2008-03-15 01:18:27 +0000
commit672a76d0ea08a0d0fc824e103ee4c4242b7e03ec (patch)
treeb623a9c884383ad75ed755b2c373db2b90643671
parent04611efae8a3291ceba8a29dd920bdae0d404830 (diff)
reverting premature commit at 82410.
-rw-r--r--indra/llcommon/indra_constants.h2
-rw-r--r--indra/llcommon/llevent.h7
-rw-r--r--indra/llcommon/llfile.cpp11
-rw-r--r--indra/llui/llbutton.cpp5
-rw-r--r--indra/llui/llmenugl.cpp101
-rw-r--r--indra/llui/llmenugl.h7
-rw-r--r--indra/llui/llui.cpp15
-rw-r--r--indra/llui/llview.cpp65
-rw-r--r--indra/llui/llview.h22
-rw-r--r--indra/llvfs/llvfile.cpp1
-rw-r--r--indra/llvfs/llvfile.h2
-rw-r--r--indra/llxml/llcontrol.cpp816
-rw-r--r--indra/llxml/llcontrol.h210
-rw-r--r--indra/newview/app_settings/cmd_line.xml323
-rw-r--r--indra/newview/app_settings/settings.xml9604
-rw-r--r--indra/newview/app_settings/settings_crash_behavior.xml15
-rw-r--r--indra/newview/app_settings/settings_files.xml22
-rw-r--r--indra/newview/app_settings/settings_per_account.xml114
-rw-r--r--indra/newview/installers/windows/installer_template.nsi8
-rw-r--r--indra/newview/llagent.cpp18
-rw-r--r--indra/newview/llagent.h21
-rw-r--r--indra/newview/llappviewer.cpp1178
-rw-r--r--indra/newview/llappviewer.h57
-rw-r--r--indra/newview/llappviewerlinux.cpp30
-rw-r--r--indra/newview/llappviewerlinux.h3
-rw-r--r--indra/newview/llappviewermacosx.cpp43
-rw-r--r--indra/newview/llappviewermacosx.h1
-rw-r--r--indra/newview/llappviewerwin32.cpp83
-rw-r--r--indra/newview/llappviewerwin32.h9
-rw-r--r--indra/newview/llcommandlineparser.cpp535
-rw-r--r--indra/newview/llcommandlineparser.h131
-rw-r--r--indra/newview/llfeaturemanager.cpp2
-rw-r--r--indra/newview/llfirstuse.cpp19
-rw-r--r--indra/newview/llfloaterabout.cpp2
-rw-r--r--indra/newview/llfloatergroups.cpp3
-rw-r--r--indra/newview/llfloatergroups.h2
-rw-r--r--indra/newview/llfloaterpreference.cpp2
-rw-r--r--indra/newview/llfloatersettingsdebug.cpp490
-rw-r--r--indra/newview/llfloatersettingsdebug.h61
-rw-r--r--indra/newview/llnetmap.cpp8
-rw-r--r--indra/newview/llnetmap.h8
-rw-r--r--indra/newview/llpanellogin.cpp34
-rw-r--r--indra/newview/llstartup.cpp84
-rw-r--r--indra/newview/lltoolgun.cpp12
-rw-r--r--indra/newview/llvectorperfoptions.cpp99
-rw-r--r--indra/newview/llvectorperfoptions.h6
-rw-r--r--indra/newview/llvieweraudio.cpp2
-rw-r--r--indra/newview/llviewercontrol.cpp858
-rw-r--r--indra/newview/llviewercontrol.h31
-rw-r--r--indra/newview/llviewerjointmesh.cpp55
-rw-r--r--indra/newview/llviewerjointmesh.h3
-rw-r--r--indra/newview/llviewermedia.cpp5
-rw-r--r--indra/newview/llviewermenu.cpp13
-rw-r--r--indra/newview/llviewernetwork.cpp7
-rw-r--r--indra/newview/llviewernetwork.h7
-rw-r--r--indra/newview/llvoiceclient.cpp39
-rw-r--r--indra/newview/llxmlrpctransaction.cpp5
-rwxr-xr-xindra/newview/viewer_manifest.py8
58 files changed, 2519 insertions, 12805 deletions
diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h
index 89b276e3b3..a0fb086029 100644
--- a/indra/llcommon/indra_constants.h
+++ b/indra/llcommon/indra_constants.h
@@ -339,7 +339,7 @@ const U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
const U32 MAP_ITEM_CLASSIFIED = 0x08;
// Crash reporter behavior
-const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
+const char* const CRASH_SETTINGS_FILE = "crash_settings.xml";
const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior";
const S32 CRASH_BEHAVIOR_ASK = 0;
const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
diff --git a/indra/llcommon/llevent.h b/indra/llcommon/llevent.h
index 741b40b787..8ba883a0ee 100644
--- a/indra/llcommon/llevent.h
+++ b/indra/llcommon/llevent.h
@@ -185,6 +185,13 @@ protected:
LLPointer<LLEventDispatcher> mDispatcher;
};
+// Utility mixer class which fires & handles events
+class LLSimpleListenerObservable : public LLObservable, public LLSimpleListener
+{
+public:
+ virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) = 0;
+};
+
class LLValueChangedEvent : public LLEvent
{
public:
diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp
index c44650009d..2a18e5c64c 100644
--- a/indra/llcommon/llfile.cpp
+++ b/indra/llcommon/llfile.cpp
@@ -271,11 +271,9 @@ void llofstream::open(const char* _Filename, /* Flawfinder: ignore */
void llofstream::close()
{ // close the C stream
- if(is_open())
- {
- if (_Filebuffer->close() == 0)
- _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/
- }
+ llassert(_Filebuffer);
+ if (_Filebuffer->close() == 0)
+ _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/
}
llofstream::llofstream(const char *_Filename,
@@ -287,8 +285,7 @@ llofstream::llofstream(const char *_Filename,
}
llofstream::~llofstream()
-{
- // destroy the object
+{ // destroy the object
close();
delete _Filebuffer;
}
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 8ae6dd2ea5..2bcc89b59f 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -778,8 +778,9 @@ void LLButton::setToggleState(BOOL b)
{
if( b != mToggleState )
{
- setControlValue(b); // will fire LLControlVariable callbacks (if any)
- mToggleState = b; // may or may not be redundant
+ mToggleState = b;
+ LLValueChangedEvent *evt = new LLValueChangedEvent(this, mToggleState);
+ fireEvent(evt, "");
}
}
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 8c62a10f2b..00b4c37bb0 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -827,33 +827,57 @@ void LLMenuItemCallGL::setEnabledControl(LLString enabled_control, LLView *conte
// Register new listener
if (!enabled_control.empty())
{
- LLControlVariable *control = context->findControl(enabled_control);
- if (!control)
+ LLControlBase *control = context->findControl(enabled_control);
+ if (control)
+ {
+ LLSD state = control->registerListener(this, "ENABLED");
+ setEnabled(state);
+ }
+ else
{
context->addBoolControl(enabled_control, getEnabled());
control = context->findControl(enabled_control);
- llassert_always(control);
+ control->registerListener(this, "ENABLED");
}
- control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("enabled")));
- setEnabled(control->getValue());
}
}
-void LLMenuItemCallGL::setVisibleControl(LLString visible_control, LLView *context)
+void LLMenuItemCallGL::setVisibleControl(LLString enabled_control, LLView *context)
{
// Register new listener
- if (!visible_control.empty())
+ if (!enabled_control.empty())
{
- LLControlVariable *control = context->findControl(visible_control);
- if (!control)
+ LLControlBase *control = context->findControl(enabled_control);
+ if (control)
{
- context->addBoolControl(visible_control, getVisible());
- control = context->findControl(visible_control);
- llassert_always(control);
+ LLSD state = control->registerListener(this, "VISIBLE");
+ setVisible(state);
}
- control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("visible")));
- setVisible(control->getValue());
+ else
+ {
+ context->addBoolControl(enabled_control, getEnabled());
+ control = context->findControl(enabled_control);
+ control->registerListener(this, "VISIBLE");
+ }
+ }
+}
+
+// virtual
+bool LLMenuItemCallGL::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+{
+ if (userdata.asString() == "ENABLED" && event->desc() == "value_changed")
+ {
+ LLSD state = event->getValue();
+ setEnabled(state);
+ return TRUE;
}
+ if (userdata.asString() == "VISIBLE" && event->desc() == "value_changed")
+ {
+ LLSD state = event->getValue();
+ setVisible(state);
+ return TRUE;
+ }
+ return LLMenuItemGL::handleEvent(event, userdata);
}
// virtual
@@ -976,35 +1000,44 @@ LLMenuItemCheckGL::LLMenuItemCheckGL ( const LLString& name,
setControlName(control_name, context);
}
-//virtual
-void LLMenuItemCheckGL::setValue(const LLSD& value)
-{
- mChecked = value.asBoolean();
- if(mChecked)
- {
- mDrawBoolLabel = BOOLEAN_TRUE_PREFIX;
- }
- else
- {
- mDrawBoolLabel.clear();
- }
-}
-
void LLMenuItemCheckGL::setCheckedControl(LLString checked_control, LLView *context)
{
// Register new listener
if (!checked_control.empty())
{
- LLControlVariable *control = context->findControl(checked_control);
- if (!control)
+ LLControlBase *control = context->findControl(checked_control);
+ if (control)
+ {
+ LLSD state = control->registerListener(this, "CHECKED");
+ mChecked = state;
+ }
+ else
{
context->addBoolControl(checked_control, mChecked);
control = context->findControl(checked_control);
- llassert_always(control);
+ control->registerListener(this, "CHECKED");
+ }
+ }
+}
+
+// virtual
+bool LLMenuItemCheckGL::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+{
+ if (userdata.asString() == "CHECKED" && event->desc() == "value_changed")
+ {
+ LLSD state = event->getValue();
+ mChecked = state;
+ if(mChecked)
+ {
+ mDrawBoolLabel = BOOLEAN_TRUE_PREFIX;
}
- control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("value")));
- mChecked = control->getValue();
+ else
+ {
+ mDrawBoolLabel.clear();
+ }
+ return TRUE;
}
+ return LLMenuItemCallGL::handleEvent(event, userdata);
}
// virtual
@@ -1913,7 +1946,7 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
{
continue;
}
- LLControlVariable *control = parent->findControl(control_name);
+ LLControlBase *control = parent->findControl(control_name);
if (!control)
{
parent->addBoolControl(control_name, FALSE);
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 33b226fd99..e9b80e562b 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -225,7 +225,7 @@ private:
// calls a user defined callback.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLMenuItemCallGL : public LLMenuItemGL, public LLObservable
+class LLMenuItemCallGL : public LLMenuItemGL
{
public:
// normal constructor
@@ -291,6 +291,7 @@ public:
//virtual void draw();
+ virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
private:
menu_callback mCallback;
@@ -340,7 +341,7 @@ public:
void setCheckedControl(LLString checked_control, LLView *context);
- virtual void setValue(const LLSD& value);
+ virtual void setValue(const LLSD& value) { mChecked = value.asBoolean(); }
virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_CHECK; }
virtual LLString getWidgetTag() const { return LL_MENU_ITEM_CHECK_GL_TAG; }
@@ -349,6 +350,8 @@ public:
// called to rebuild the draw label
virtual void buildDrawLabel( void );
+ virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
+
private:
check_callback mCheckCallback;
BOOL mChecked;
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 1e9442805f..aed7893df7 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1555,11 +1555,16 @@ void gl_segmented_rect_3d_tex_top(const LLVector2& border_scale, const LLVector3
gl_segmented_rect_3d_tex(border_scale, border_width, border_height, width_vec, height_vec, ROUNDED_RECT_TOP);
}
-bool handleShowXUINamesChanged(const LLSD& newvalue)
+class LLShowXUINamesListener: public LLSimpleListener
{
- LLUI::sShowXUINames = newvalue.asBoolean();
- return true;
-}
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+ {
+ LLUI::sShowXUINames = (BOOL) event->getValue().asBoolean();
+ return true;
+ }
+};
+static LLShowXUINamesListener show_xui_names_listener;
+
void LLUI::initClass(LLControlGroup* config,
LLControlGroup* colors,
@@ -1579,7 +1584,7 @@ void LLUI::initClass(LLControlGroup* config,
LLFontGL::sShadowColor = colors->getColor("ColorDropShadow");
LLUI::sShowXUINames = LLUI::sConfigGroup->getBOOL("ShowXUINames");
- LLUI::sConfigGroup->getControl("ShowXUINames")->getSignal()->connect(boost::bind(&handleShowXUINamesChanged, _1));
+ LLUI::sConfigGroup->getControl("ShowXUINames")->addListener(&show_xui_names_listener);
}
void LLUI::cleanupClass()
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 269796e5de..0a37c03ac5 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -2426,7 +2426,16 @@ LLSimpleListener* LLView::getListenerByName(const LLString& callback_name)
return callback;
}
-LLControlVariable *LLView::findControl(LLString name)
+void LLView::addListenerToControl(LLEventDispatcher *dispatcher, const LLString& name, LLSD filter, LLSD userdata)
+{
+ LLSimpleListener* listener = getListenerByName(name);
+ if (listener)
+ {
+ dispatcher->addListener(listener, filter, userdata);
+ }
+}
+
+LLControlBase *LLView::findControl(LLString name)
{
control_map_t::iterator itor = mFloaterControls.find(name);
if (itor != mFloaterControls.end())
@@ -2782,15 +2791,9 @@ LLFontGL::StyleFlags LLView::selectFontStyle(LLXMLNodePtr node)
return gl_font_style;
}
-bool LLView::setControlValue(const LLSD& value)
+void LLView::setControlValue(const LLSD& value)
{
- LLString ctrlname = getControlName();
- if (!ctrlname.empty())
- {
- LLUI::sConfigGroup->setValue(ctrlname, value);
- return true;
- }
- return false;
+ LLUI::sConfigGroup->setValue(getControlName(), value);
}
//virtual
@@ -2801,57 +2804,43 @@ void LLView::setControlName(const LLString& control_name, LLView *context)
context = this;
}
+ // Unregister from existing listeners
if (!mControlName.empty())
{
- llwarns << "setControlName called twice on same control!" << llendl;
- mControlConnection.disconnect(); // disconnect current signal
- mControlName.clear();
+ clearDispatchers();
}
-
+
// Register new listener
if (!control_name.empty())
{
- LLControlVariable *control = context->findControl(control_name);
+ LLControlBase *control = context->findControl(control_name);
if (control)
{
mControlName = control_name;
- mControlConnection = control->getSignal()->connect(boost::bind(&controlListener, _1, getHandle(), std::string("value")));
- setValue(control->getValue());
+ LLSD state = control->registerListener(this, "DEFAULT");
+ setValue(state);
}
}
}
-// static
-bool LLView::controlListener(const LLSD& newvalue, LLHandle<LLView> handle, std::string type)
+// virtual
+bool LLView::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- LLView* view = handle.get();
- if (view)
+ if (userdata.asString() == "DEFAULT" && event->desc() == "value_changed")
{
- if (type == "value")
- {
- view->setValue(newvalue);
- return true;
- }
- else if (type == "enabled")
- {
- view->setEnabled(newvalue.asBoolean());
- return true;
- }
- else if (type == "visible")
- {
- view->setVisible(newvalue.asBoolean());
- return true;
- }
+ LLSD state = event->getValue();
+ setValue(state);
+ return TRUE;
}
- return false;
+ return FALSE;
}
void LLView::addBoolControl(LLString name, bool initial_value)
{
- mFloaterControls[name] = new LLControlVariable(name, TYPE_BOOLEAN, initial_value, "Internal floater control");
+ mFloaterControls[name] = new LLControl(name, TYPE_BOOLEAN, initial_value, "Internal floater control");
}
-LLControlVariable *LLView::getControl(LLString name)
+LLControlBase *LLView::getControl(LLString name)
{
control_map_t::iterator itor = mFloaterControls.find(name);
if (itor != mFloaterControls.end())
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 24a5eb4f89..c8556c7edc 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -65,6 +65,7 @@ const BOOL NOT_MOUSE_OPAQUE = FALSE;
const U32 GL_NAME_UI_RESERVED = 2;
+
/*
// virtual functions defined in LLView:
@@ -149,7 +150,7 @@ virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent);
*
*/
-class LLView : public LLMouseHandler, public LLMortician
+class LLView : public LLMouseHandler, public LLMortician, public LLSimpleListenerObservable
{
public:
@@ -293,6 +294,7 @@ public:
LLHandle<LLView> getHandle() { mHandle.bind(this); return mHandle; }
+
U32 getFollows() const { return mReshapeFlags; }
BOOL followsLeft() const { return mReshapeFlags & FOLLOWS_LEFT; }
BOOL followsRight() const { return mReshapeFlags & FOLLOWS_RIGHT; }
@@ -391,13 +393,13 @@ public:
void addListenerToControl(LLEventDispatcher *observer, const LLString& name, LLSD filter, LLSD userdata);
void addBoolControl(LLString name, bool initial_value);
- LLControlVariable *getControl(LLString name);
- LLControlVariable *findControl(LLString name);
+ LLControlBase *getControl(LLString name);
+ LLControlBase *findControl(LLString name);
- bool setControlValue(const LLSD& value);
+ void setControlValue(const LLSD& value);
virtual void setControlName(const LLString& control, LLView *context);
virtual LLString getControlName() const { return mControlName; }
-// virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
+ virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
virtual void setValue(const LLSD& value);
virtual LLSD getValue() const;
@@ -492,12 +494,11 @@ protected:
LLView* childrenHandleRightMouseDown(S32 x, S32 y, MASK mask);
LLView* childrenHandleRightMouseUp(S32 x, S32 y, MASK mask);
- static bool controlListener(const LLSD& newvalue, LLHandle<LLView> handle, std::string type);
-
- typedef std::map<LLString, LLControlVariable*> control_map_t;
+ typedef std::map<LLString, LLControlBase*> control_map_t;
control_map_t mFloaterControls;
virtual LLView* getChildByName(const LLString& name, BOOL recurse = FALSE) const;
+
private:
LLView* mParentView;
child_list_t mChildList;
@@ -536,8 +537,9 @@ private:
dispatch_list_t mDispatchList;
LLString mControlName;
- boost::signals::connection mControlConnection;
-
+
+
+// Just debugging stuff? We should try to hide anything that's not. -MG
public:
static BOOL sDebugRects; // Draw debug rects behind everything.
static BOOL sDebugKeys;
diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp
index bd4dfc2d78..b25ec4a86e 100644
--- a/indra/llvfs/llvfile.cpp
+++ b/indra/llvfs/llvfile.cpp
@@ -45,6 +45,7 @@ const S32 LLVFile::APPEND = 0x00000006; // 0x00000004 & LLVFile::WRITE
//----------------------------------------------------------------------------
LLVFSThread* LLVFile::sVFSThread = NULL;
BOOL LLVFile::sAllocdVFSThread = FALSE;
+BOOL LLVFile::ALLOW_ASYNC = TRUE;
//----------------------------------------------------------------------------
//============================================================================
diff --git a/indra/llvfs/llvfile.h b/indra/llvfs/llvfile.h
index cd4fc59174..3d81483308 100644
--- a/indra/llvfs/llvfile.h
+++ b/indra/llvfs/llvfile.h
@@ -78,6 +78,8 @@ public:
static const S32 WRITE;
static const S32 READ_WRITE;
static const S32 APPEND;
+
+ static BOOL ALLOW_ASYNC;
protected:
LLAssetType::EType mFileType;
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index 9de426fc03..4ad44f455f 100644
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -57,9 +57,19 @@
#endif
//this defines the current version of the settings file
+U32 LLControlBase::sMaxControlNameLength = 0;
+
+//These lists are used to store the ID's of registered event listeners.
+std::list<S32> LLControlBase::mFreeIDs;
+std::list<S32> LLControlBase::mUsedIDs;
+
+S32 LLControlBase::mTopID;
+
+std::set<LLControlBase*> LLControlBase::mChangedControls;
+
const S32 CURRENT_VERSION = 101;
-BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
+BOOL LLControl::llsd_compare(const LLSD& a, const LLSD & b)
{
switch (mType)
{
@@ -91,154 +101,58 @@ BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
return FALSE;
}
-LLControlVariable::LLControlVariable(const LLString& name, eControlType type,
- LLSD initial, const LLString& comment,
- BOOL persist)
- : mName(name),
- mComment(comment),
- mType(type),
- mPersist(persist)
-{
- if (mPersist && mComment.empty())
- {
- llerrs << "Must supply a comment for control " << mName << llendl;
- }
- //Push back versus setValue'ing here, since we don't want to call a signal yet
- mValues.push_back(initial);
-}
-
-
-
-LLControlVariable::~LLControlVariable()
-{
-}
-
-void LLControlVariable::setValue(const LLSD& value, bool saved_value)
-{
- bool value_changed = llsd_compare(getValue(), value) == FALSE;
- if(saved_value)
- {
- // If we're going to save this value, return to default but don't fire
- resetToDefault(false);
- if (llsd_compare(mValues.back(), value) == FALSE)
- {
- mValues.push_back(value);
- }
- }
- else
- {
- // This is a unsaved value. Its needs to reside at
- // mValues[2] (or greater). It must not affect
- // the result of getSaveValue()
- if (llsd_compare(mValues.back(), value) == FALSE)
- {
- while(mValues.size() > 2)
- {
- // Remove any unsaved values.
- mValues.pop_back();
- }
-
- if(mValues.size() < 2)
- {
- // Add the default to the 'save' value.
- mValues.push_back(mValues[0]);
- }
-
- // Add the 'un-save' value.
- mValues.push_back(value);
- }
- }
-
- if(value_changed)
- {
- mSignal(value);
- }
-}
-
-void LLControlVariable::resetToDefault(bool fire_signal)
+LLControlBase::~LLControlBase()
{
- //The first setting is always the default
- //Pop to it and fire off the listener
- while(mValues.size() > 1) mValues.pop_back();
- if(fire_signal) firePropertyChanged();
-}
-
-bool LLControlVariable::isSaveValueDefault()
-{
- return (mValues.size() == 1)
- || ((mValues.size() > 1) && llsd_compare(mValues[1], mValues[0]));
}
-LLSD LLControlVariable::getSaveValue() const
+// virtual
+void LLControlBase::resetToDefault()
{
- //The first level of the stack is default
- //We assume that the second level is user preferences that should be saved
- if(mValues.size() > 1) return mValues[1];
- return mValues[0];
}
-LLControlVariable* LLControlGroup::getControl(const LLString& name)
+LLControlGroup::LLControlGroup(): mNameTable()
{
- ctrl_name_table_t::iterator iter = mNameTable.find(name);
- return iter == mNameTable.end() ? NULL : iter->second;
+ //mFreeStringOffset = 0;
}
-
-////////////////////////////////////////////////////////////////////////////
-
-LLControlGroup::LLControlGroup()
+LLControlGroup::~LLControlGroup()
{
- mTypeString[TYPE_U32] = "U32";
- mTypeString[TYPE_S32] = "S32";
- mTypeString[TYPE_F32] = "F32";
- mTypeString[TYPE_BOOLEAN] = "Boolean";
- mTypeString[TYPE_STRING] = "String";
- mTypeString[TYPE_VEC3] = "Vector3";
- mTypeString[TYPE_VEC3D] = "Vector3D";
- mTypeString[TYPE_RECT] = "Rect";
- mTypeString[TYPE_COL4] = "Color4";
- mTypeString[TYPE_COL3] = "Color3";
- mTypeString[TYPE_COL4U] = "Color4u";
- mTypeString[TYPE_LLSD] = "LLSD";
}
-LLControlGroup::~LLControlGroup()
+LLSD LLControlBase::registerListener(LLSimpleListenerObservable *listener, LLSD userdata)
{
- cleanup();
+ // Symmetric listener relationship
+ addListener(listener, "", userdata);
+ listener->addListener(this, "", userdata);
+ return getValue();
}
void LLControlGroup::cleanup()
{
- for_each(mNameTable.begin(), mNameTable.end(), DeletePairedPointer());
mNameTable.clear();
}
-eControlType LLControlGroup::typeStringToEnum(const LLString& typestr)
-{
- for(int i = 0; i < (int)TYPE_COUNT; ++i)
- {
- if(mTypeString[i] == typestr) return (eControlType)i;
- }
- return (eControlType)-1;
-}
-
-LLString LLControlGroup::typeEnumToString(eControlType typeenum)
+LLControlBase* LLControlGroup::getControl(const LLString& name)
{
- return mTypeString[typeenum];
+ ctrl_name_table_t::iterator iter = mNameTable.find(name);
+ return iter == mNameTable.end() ? NULL : (LLControlBase*)iter->second;
}
BOOL LLControlGroup::declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist)
{
- if(mNameTable.find(name) != mNameTable.end())
+ if(!mNameTable[name])
{
- llwarns << "LLControlGroup::declareControl: Control named " << name << " already exists." << llendl;
- mNameTable[name]->setValue(initial_val);
+ // if not, create the control and add it to the name table
+ LLControl* control = new LLControl(name, type, initial_val, comment, persist);
+ mNameTable[name] = control;
return TRUE;
}
- // if not, create the control and add it to the name table
- LLControlVariable* control = new LLControlVariable(name, type, initial_val, comment, persist);
- mNameTable[name] = control;
- return TRUE;
+ else
+ {
+ llwarns << "LLControlGroup::declareControl: Control named " << name << " already exists." << llendl;
+ mNameTable.erase(name);
+ return FALSE;
+ }
}
BOOL LLControlGroup::declareU32(const LLString& name, const U32 initial_val, const LLString& comment, BOOL persist)
@@ -296,14 +210,19 @@ BOOL LLControlGroup::declareColor3(const LLString& name, const LLColor3 &initial
return declareControl(name, TYPE_COL3, initial_val.getValue(), comment, persist);
}
-BOOL LLControlGroup::declareLLSD(const LLString& name, const LLSD &initial_val, const LLString& comment, BOOL persist )
+LLSD LLControlGroup::registerListener(const LLString& name, LLSimpleListenerObservable *listener)
{
- return declareControl(name, TYPE_LLSD, initial_val, comment, persist);
+ LLControlBase *control = getControl(name);
+ if (control)
+ {
+ return control->registerListener(listener);
+ }
+ return LLSD();
}
BOOL LLControlGroup::getBOOL(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_BOOLEAN))
return control->get().asBoolean();
@@ -316,7 +235,7 @@ BOOL LLControlGroup::getBOOL(const LLString& name)
S32 LLControlGroup::getS32(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_S32))
return control->get().asInteger();
@@ -329,7 +248,7 @@ S32 LLControlGroup::getS32(const LLString& name)
U32 LLControlGroup::getU32(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_U32))
return control->get().asInteger();
@@ -342,7 +261,7 @@ U32 LLControlGroup::getU32(const LLString& name)
F32 LLControlGroup::getF32(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_F32))
return (F32) control->get().asReal();
@@ -355,7 +274,7 @@ F32 LLControlGroup::getF32(const LLString& name)
LLString LLControlGroup::findString(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_STRING))
return control->get().asString();
@@ -364,7 +283,7 @@ LLString LLControlGroup::findString(const LLString& name)
LLString LLControlGroup::getString(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_STRING))
return control->get().asString();
@@ -390,7 +309,7 @@ LLString LLControlGroup::getText(const LLString& name)
LLVector3 LLControlGroup::getVector3(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_VEC3))
return control->get();
@@ -403,7 +322,7 @@ LLVector3 LLControlGroup::getVector3(const LLString& name)
LLVector3d LLControlGroup::getVector3d(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_VEC3D))
return control->get();
@@ -416,7 +335,7 @@ LLVector3d LLControlGroup::getVector3d(const LLString& name)
LLRect LLControlGroup::getRect(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_RECT))
return control->get();
@@ -434,7 +353,7 @@ LLColor4 LLControlGroup::getColor(const LLString& name)
if (i != mNameTable.end())
{
- LLControlVariable* control = i->second;
+ LLControlBase* control = i->second;
switch(control->mType)
{
@@ -462,7 +381,7 @@ LLColor4 LLControlGroup::getColor(const LLString& name)
LLColor4U LLControlGroup::getColor4U(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_COL4U))
return control->get();
@@ -475,7 +394,7 @@ LLColor4U LLControlGroup::getColor4U(const LLString& name)
LLColor4 LLControlGroup::getColor4(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_COL4))
return control->get();
@@ -488,7 +407,7 @@ LLColor4 LLControlGroup::getColor4(const LLString& name)
LLColor3 LLControlGroup::getColor3(const LLString& name)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_COL3))
return control->get();
@@ -499,16 +418,6 @@ LLColor3 LLControlGroup::getColor3(const LLString& name)
}
}
-LLSD LLControlGroup::getLLSD(const LLString& name)
-{
- LLControlVariable* control = getControl(name);
-
- if (control && control->isType(TYPE_LLSD))
- return control->getValue();
- CONTROL_ERRS << "Invalid LLSD control " << name << llendl;
- return LLSD();
-}
-
BOOL LLControlGroup::controlExists(const LLString& name)
{
ctrl_name_table_t::iterator iter = mNameTable.find(name);
@@ -521,7 +430,7 @@ BOOL LLControlGroup::controlExists(const LLString& name)
void LLControlGroup::setBOOL(const LLString& name, BOOL val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_BOOLEAN))
{
@@ -536,7 +445,7 @@ void LLControlGroup::setBOOL(const LLString& name, BOOL val)
void LLControlGroup::setS32(const LLString& name, S32 val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_S32))
{
@@ -551,7 +460,7 @@ void LLControlGroup::setS32(const LLString& name, S32 val)
void LLControlGroup::setF32(const LLString& name, F32 val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_F32))
{
@@ -566,7 +475,7 @@ void LLControlGroup::setF32(const LLString& name, F32 val)
void LLControlGroup::setU32(const LLString& name, U32 val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_U32))
{
@@ -581,7 +490,7 @@ void LLControlGroup::setU32(const LLString& name, U32 val)
void LLControlGroup::setString(const LLString& name, const LLString &val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_STRING))
{
@@ -596,7 +505,7 @@ void LLControlGroup::setString(const LLString& name, const LLString &val)
void LLControlGroup::setVector3(const LLString& name, const LLVector3 &val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_VEC3))
{
@@ -610,7 +519,7 @@ void LLControlGroup::setVector3(const LLString& name, const LLVector3 &val)
void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_VEC3D))
{
@@ -624,7 +533,7 @@ void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val)
void LLControlGroup::setRect(const LLString& name, const LLRect &val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_RECT))
{
@@ -638,7 +547,7 @@ void LLControlGroup::setRect(const LLString& name, const LLRect &val)
void LLControlGroup::setColor4U(const LLString& name, const LLColor4U &val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_COL4U))
{
@@ -652,7 +561,7 @@ void LLControlGroup::setColor4U(const LLString& name, const LLColor4U &val)
void LLControlGroup::setColor4(const LLString& name, const LLColor4 &val)
{
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control && control->isType(TYPE_COL4))
{
@@ -664,20 +573,6 @@ void LLControlGroup::setColor4(const LLString& name, const LLColor4 &val)
}
}
-void LLControlGroup::setLLSD(const LLString& name, const LLSD& val)
-{
- LLControlVariable* control = getControl(name);
-
- if (control && control->isType(TYPE_LLSD))
- {
- setValue(name, val);
- }
- else
- {
- CONTROL_ERRS << "Invalid LLSD control " << name << llendl;
- }
-}
-
void LLControlGroup::setValue(const LLString& name, const LLSD& val)
{
if (name.empty())
@@ -685,7 +580,7 @@ void LLControlGroup::setValue(const LLString& name, const LLSD& val)
return;
}
- LLControlVariable* control = getControl(name);
+ LLControlBase* control = getControl(name);
if (control)
{
@@ -701,9 +596,239 @@ void LLControlGroup::setValue(const LLString& name, const LLSD& val)
// Load and save
//---------------------------------------------------------------
-// Returns number of controls loaded, so 0 if failure
U32 LLControlGroup::loadFromFileLegacy(const LLString& filename, BOOL require_declaration, eControlType declare_as)
{
+ U32 item = 0;
+ U32 validitems = 0;
+ llifstream file;
+ S32 version;
+
+ file.open(filename.c_str()); /*Flawfinder: ignore*/
+
+ if (!file)
+ {
+ llinfos << "LLControlGroup::loadFromFile unable to open." << llendl;
+ return 0;
+ }
+
+ // Check file version
+ LLString name;
+ file >> name;
+ file >> version;
+ if (name != "version" || version != CURRENT_VERSION)
+ {
+ llinfos << filename << " does not appear to be a version " << CURRENT_VERSION << " controls file" << llendl;
+ return 0;
+ }
+
+ while (!file.eof())
+ {
+ file >> name;
+
+ if (name.empty())
+ {
+ continue;
+ }
+
+ if (name.substr(0,2) == "//")
+ {
+ // This is a comment.
+ char buffer[MAX_STRING]; /*Flawfinder: ignore*/
+ file.getline(buffer, MAX_STRING);
+ continue;
+ }
+
+ BOOL declared = mNameTable.find(name) != mNameTable.end();
+
+ if (require_declaration && !declared)
+ {
+ // Declaration required, but this name not declared.
+ // Complain about non-empty names.
+ if (!name.empty())
+ {
+ //read in to end of line
+ char buffer[MAX_STRING]; /*Flawfinder: ignore*/
+ file.getline(buffer, MAX_STRING);
+ llwarns << "LLControlGroup::loadFromFile() : Trying to set \"" << name << "\", setting doesn't exist." << llendl;
+ }
+ continue;
+ }
+
+ // Got an item. Load it up.
+ item++;
+
+ // If not declared, assume it's a string
+ if (!declared)
+ {
+ switch(declare_as)
+ {
+ case TYPE_COL4:
+ declareColor4(name, LLColor4::white, LLString::null, NO_PERSIST);
+ break;
+ case TYPE_COL4U:
+ declareColor4U(name, LLColor4U::white, LLString::null, NO_PERSIST);
+ break;
+ case TYPE_STRING:
+ default:
+ declareString(name, LLString::null, LLString::null, NO_PERSIST);
+ break;
+ }
+ }
+
+ // Control name has been declared in code.
+ LLControlBase *control = getControl(name);
+
+ llassert(control);
+
+ mLoadedSettings.insert(name);
+
+ switch(control->mType)
+ {
+ case TYPE_F32:
+ {
+ F32 initial;
+
+ file >> initial;
+
+ control->set(initial);
+ validitems++;
+ }
+ break;
+ case TYPE_S32:
+ {
+ S32 initial;
+
+ file >> initial;
+
+ control->set(initial);
+ validitems++;
+ }
+ break;
+ case TYPE_U32:
+ {
+ U32 initial;
+
+ file >> initial;
+ control->set((LLSD::Integer) initial);
+ validitems++;
+ }
+ break;
+ case TYPE_BOOLEAN:
+ {
+ char boolstring[256]; /*Flawfinder: ignore*/
+ BOOL valid = FALSE;
+ BOOL initial = FALSE;
+
+ file >> boolstring;
+ if (!strcmp("TRUE", boolstring))
+ {
+ initial = TRUE;
+ valid = TRUE;
+ }
+ else if (!strcmp("FALSE", boolstring))
+ {
+ initial = FALSE;
+ valid = TRUE;
+ }
+
+ if (valid)
+ {
+ control->set(initial);
+ }
+ else
+ {
+ llinfos << filename << "Item " << item << ": Invalid BOOL control " << name << ", " << boolstring << llendl;
+ }
+
+ validitems++;
+ }
+ break;
+ case TYPE_STRING:
+ {
+ LLString string;
+
+ file >> string;
+
+ control->set(string);
+ validitems++;
+ }
+ break;
+ case TYPE_VEC3:
+ {
+ F32 x, y, z;
+
+ file >> x >> y >> z;
+
+ LLVector3 vector(x, y, z);
+
+ control->set(vector.getValue());
+ validitems++;
+ }
+ break;
+ case TYPE_VEC3D:
+ {
+ F64 x, y, z;
+
+ file >> x >> y >> z;
+
+ LLVector3d vector(x, y, z);
+
+ control->set(vector.getValue());
+ validitems++;
+ }
+ break;
+ case TYPE_RECT:
+ {
+ S32 left, bottom, width, height;
+
+ file >> left >> bottom >> width >> height;
+
+ LLRect rect;
+ rect.setOriginAndSize(left, bottom, width, height);
+
+ control->set(rect.getValue());
+ validitems++;
+ }
+ break;
+ case TYPE_COL4U:
+ {
+ S32 red, green, blue, alpha;
+ LLColor4U color;
+ file >> red >> green >> blue >> alpha;
+ color.setVec(red, green, blue, alpha);
+ control->set(color.getValue());
+ validitems++;
+ }
+ break;
+ case TYPE_COL4:
+ {
+ LLColor4 color;
+ file >> color.mV[VRED] >> color.mV[VGREEN]
+ >> color.mV[VBLUE] >> color.mV[VALPHA];
+ control->set(color.getValue());
+ validitems++;
+ }
+ break;
+ case TYPE_COL3:
+ {
+ LLColor3 color;
+ file >> color.mV[VRED] >> color.mV[VGREEN]
+ >> color.mV[VBLUE];
+ control->set(color.getValue());
+ validitems++;
+ }
+ break;
+ }
+ }
+
+ file.close();
+
+ return validitems;
+}
+
+// Returns number of controls loaded, so 0 if failure
+U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declaration, eControlType declare_as)
+{
LLString name;
LLXmlTree xml_controls;
@@ -776,9 +901,11 @@ U32 LLControlGroup::loadFromFileLegacy(const LLString& filename, BOOL require_de
}
// Control name has been declared in code.
- LLControlVariable *control = getControl(name);
+ LLControlBase *control = getControl(name);
llassert(control);
+
+ mLoadedSettings.insert(name);
switch(control->mType)
{
@@ -892,43 +1019,59 @@ U32 LLControlGroup::loadFromFileLegacy(const LLString& filename, BOOL require_de
LLVector3 color;
child_nodep->getAttributeVector3("value", color);
- control->set(LLColor3(color.mV).getValue());
+ control->set(LLColor3(color.mV).getValue());
validitems++;
}
break;
-
- default:
- break;
-
}
-
+
child_nodep = rootp->getNextChild();
}
return validitems;
}
+struct compare_controls
+{
+ bool operator() (const LLControlBase* const a, const LLControlBase* const b) const
+ {
+ return a->getName() < b->getName();
+ }
+};
+
U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)
{
- LLSD settings;
- int num_saved = 0;
+ const char ENDL = '\n';
+
+ llinfos << "Saving settings to file: " << filename << llendl;
+
+ // place the objects in a temporary container that enforces a sort
+ // order to ease manual editing of the file
+
+ typedef std::set< LLControlBase*, compare_controls > control_list_t;
+ control_list_t controls;
+
for (ctrl_name_table_t::iterator iter = mNameTable.begin();
iter != mNameTable.end(); iter++)
{
- LLControlVariable* control = iter->second;
+ LLString name = iter->first;
+ if (name.empty())
+ {
+ CONTROL_ERRS << "Control with no name found!!!" << llendl;
+ break;
+ }
+
+ LLControlBase* control = (LLControlBase *)iter->second;
if (!control)
{
- llwarns << "Tried to save invalid control: " << iter->first << llendl;
+ llwarns << "Tried to save invalid control: " << name << llendl;
}
- if( control && control->isPersisted() )
+ if( control && control->mPersist )
{
- if (!(nondefault_only && (control->isSaveValueDefault())))
+ if (!(nondefault_only && (control->mIsDefault)))
{
- settings[iter->first]["Type"] = typeEnumToString(control->type());
- settings[iter->first]["Comment"] = control->getComment();
- settings[iter->first]["Value"] = control->getSaveValue();
- ++num_saved;
+ controls.insert( control );
}
else
{
@@ -937,58 +1080,156 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)
}
}
}
+
llofstream file;
- file.open(filename.c_str());
- if (file.is_open())
- {
- LLSDSerialize::toPrettyXML(settings, file);
- file.close();
- llinfos << "Saved to " << filename << llendl;
- }
- else
- {
- // This is a warning because sometime we want to use settings files which can't be written...
- llwarns << "Unable to open settings file: " << filename << llendl;
- return 0;
- }
- return num_saved;
-}
+ file.open(filename.c_str()); /*Flawfinder: ignore*/
-U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declaration, eControlType declare_as)
-{
- LLString name;
- LLSD settings;
- LLSD control_map;
- llifstream infile;
- infile.open(filename.c_str());
- if(!infile.is_open())
+ if (!file.is_open())
{
- llwarns << "Cannot find file " << filename << " to load." << llendl;
+ // This is a warning because sometime we want to use settings files which can't be written...
+ llwarns << "LLControlGroup::saveToFile unable to open file for writing" << llendl;
return 0;
}
- S32 ret = LLSDSerialize::fromXML(settings, infile);
- if (ret <= 0)
+
+ // Write file version
+ file << "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n";
+ file << "<settings version = \"" << CURRENT_VERSION << "\">\n";
+ for (control_list_t::iterator iter = controls.begin();
+ iter != controls.end(); ++iter)
{
- infile.close();
- llwarns << "Unable to open LLSD control file " << filename << ". Trying Legacy Method." << llendl;
- return loadFromFileLegacy(filename, require_declaration, declare_as);
- }
+ LLControlBase* control = *iter;
+ file << "\t<!--" << control->comment() << "-->" << ENDL;
+ LLString name = control->getName();
+ switch (control->type())
+ {
+ case TYPE_U32:
+ {
+ file << "\t<" << name << " value=\"" << (U32) control->get().asInteger() << "\"/>\n";
+ break;
+ }
+ case TYPE_S32:
+ {
+ file << "\t<" << name << " value=\"" << (S32) control->get().asInteger() << "\"/>\n";
+ break;
+ }
+ case TYPE_F32:
+ {
+ file << "\t<" << name << " value=\"" << (F32) control->get().asReal() << "\"/>\n";
+ break;
+ }
+ case TYPE_VEC3:
+ {
+ LLVector3 vector(control->get());
+ file << "\t<" << name << " value=\"" << vector.mV[VX] << " " << vector.mV[VY] << " " << vector.mV[VZ] << "\"/>\n";
+ break;
+ }
+ case TYPE_VEC3D:
+ {
+ LLVector3d vector(control->get());
+ file << "\t<" << name << " value=\"" << vector.mdV[VX] << " " << vector.mdV[VY] << " " << vector.mdV[VZ] << "\"/>\n";
+ break;
+ }
+ case TYPE_RECT:
+ {
+ LLRect rect(control->get());
+ file << "\t<" << name << " value=\"" << rect.mLeft << " " << rect.mBottom << " " << rect.getWidth() << " " << rect.getHeight() << "\"/>\n";
+ break;
+ }
+ case TYPE_COL4:
+ {
+ LLColor4 color(control->get());
+ file << "\t<" << name << " value=\"" << color.mV[VRED] << ", " << color.mV[VGREEN] << ", " << color.mV[VBLUE] << ", " << color.mV[VALPHA] << "\"/>\n";
+ break;
+ }
+ case TYPE_COL3:
+ {
+ LLColor3 color(control->get());
+ file << "\t<" << name << " value=\"" << color.mV[VRED] << ", " << color.mV[VGREEN] << ", " << color.mV[VBLUE] << "\"/>\n";
+ break;
+ }
+ case TYPE_BOOLEAN:
+ {
+ file << "\t<" << name << " value=\"" << (control->get().asBoolean() ? "TRUE" : "FALSE") << "\"/>\n";
+ break;
+ }
+ case TYPE_STRING:
+ {
+ file << "\t<" << name << " value=\"" << LLSDXMLFormatter::escapeString(control->get().asString()) << "\"/>\n";
+ break;
+ }
+ default:
+ {
+ CONTROL_ERRS << "LLControlGroup::saveToFile - unknown control type!" << llendl;
+ break;
+ }
+ }
- U32 validitems = 0;
- int persist = 1;
- for(LLSD::map_const_iterator itr = settings.beginMap(); itr != settings.endMap(); ++itr)
+ // Debug spam
+ // llinfos << name << " " << control->getValue().asString() << llendl;
+ }// next
+
+ file << "</settings>\n";
+ file.close();
+
+ return controls.size();
+}
+
+void LLControlGroup::applyOverrides(const std::map<std::string, std::string>& overrides)
+{
+ for (std::map<std::string, std::string>::const_iterator iter = overrides.begin();
+ iter != overrides.end(); ++iter)
{
- name = (*itr).first;
- control_map = (*itr).second;
-
- if(control_map.has("Persist")) persist = control_map["Persist"].asInteger();
-
- declareControl(name, typeStringToEnum(control_map["Type"].asString()), control_map["Value"], control_map["Comment"].asString(), persist);
-
- ++validitems;
+ const std::string& command = iter->first;
+ const std::string& value = iter->second;
+ LLControlBase* control = (LLControlBase *)mNameTable[command];
+ if (control)
+ {
+ switch(control->mType)
+ {
+ case TYPE_U32:
+ control->set((LLSD::Integer)atof(value.c_str()));
+ break;
+ case TYPE_S32:
+ control->set((S32)atof(value.c_str()));
+ break;
+ case TYPE_F32:
+ control->set((F32)atof(value.c_str()));
+ break;
+ case TYPE_BOOLEAN:
+ if (!LLString::compareInsensitive(value.c_str(), "TRUE"))
+ {
+ control->set(TRUE);
+ }
+ else if (!LLString::compareInsensitive(value.c_str(), "FALSE"))
+ {
+ control->set(FALSE);
+ }
+ else
+ {
+ control->set((BOOL)atof(value.c_str()));
+ }
+ break;
+ case TYPE_STRING:
+ control->set(value);
+ break;
+// // *FIX: implement this given time and need.
+// case TYPE_UUID:
+// break;
+ // we don't support command line overrides of vec3 or col4
+ // yet - requires parsing of multiple values
+ case TYPE_VEC3:
+ case TYPE_VEC3D:
+ case TYPE_COL4:
+ case TYPE_COL3:
+ default:
+ break;
+ }
+ }
+ else
+ {
+ llinfos << "There is no control variable " << command << llendl;
+ }
}
-
- return validitems;
}
void LLControlGroup::resetToDefaults()
@@ -998,20 +1239,11 @@ void LLControlGroup::resetToDefaults()
control_iter != mNameTable.end();
++control_iter)
{
- LLControlVariable* control = (*control_iter).second;
+ LLControlBase* control = (*control_iter).second;
control->resetToDefault();
}
}
-void LLControlGroup::applyToAll(ApplyFunctor* func)
-{
- for (ctrl_name_table_t::iterator iter = mNameTable.begin();
- iter != mNameTable.end(); iter++)
- {
- func->apply(iter->first, iter->second);
- }
-}
-
//============================================================================
// First-use
@@ -1032,7 +1264,7 @@ static LLString get_warn_name(const LLString& name)
void LLControlGroup::addWarning(const LLString& name)
{
LLString warnname = get_warn_name(name);
- if(mNameTable.find(warnname) == mNameTable.end())
+ if(!mNameTable[warnname])
{
LLString comment = LLString("Enables ") + name + LLString(" warning dialog");
declareBOOL(warnname, TRUE, comment);
@@ -1061,6 +1293,91 @@ void LLControlGroup::resetWarnings()
}
}
+
+
+//=============================================================================
+// Listener ID generator/management
+
+void LLControlBase::releaseListenerID(S32 id)
+{
+ mFreeIDs.push_back(id);
+}
+
+S32 LLControlBase::allocateListenerID()
+{
+ if(mFreeIDs.size() == 0)
+ { //Out of IDs so generate some new ones.
+ for(int t=0;t<32;t++)
+ {
+ mFreeIDs.push_back(mTopID++);
+ }
+ }
+ S32 rtn = mFreeIDs.front();
+ mFreeIDs.pop_front();
+ mUsedIDs.push_back(rtn);
+ return rtn;
+}
+
+bool LLControlBase::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+{
+ if (event->desc() == "value_changed")
+ {
+ setValue(((LLValueChangedEvent*)(LLEvent*)event)->mValue);
+ return TRUE;
+ }
+ return TRUE;
+}
+
+void LLControlBase::firePropertyChanged()
+{
+ LLValueChangedEvent *evt = new LLValueChangedEvent(this, getValue());
+ fireEvent(evt, "");
+}
+
+//============================================================================
+// Used to add a listener callback that will be called on the frame that the controls value changes
+
+S32 LLControl::addListener(LLControl::tListenerCallback* cbfn)
+{
+ S32 id = allocateListenerID();
+ mListeners.push_back(cbfn);
+ mListenerIDs.push_back( id );
+ return id;
+}
+
+void LLControl::updateListeners() {
+ LLControl::tPropertyChangedListIter iter = mChangeEvents.begin();
+ while(iter!=mChangeEvents.end()){
+ LLControl::tPropertyChangedEvent& evt = *iter;
+ (*evt.mCBFN)(evt.mNewValue,evt.mID,*this);
+ iter++;
+ }
+ mChangeEvents.clear();
+}
+
+//static
+void LLControlBase::updateAllListeners()
+{
+ std::set< LLControlBase* >::iterator iter = mChangedControls.begin();
+ while(iter != mChangedControls.end()){
+ (*iter)->updateListeners();
+ iter++;
+ }
+ mChangedControls.clear();
+}
+
+LLControl::LLControl(
+ const LLString& name,
+ eControlType type,
+ LLSD initial,
+ const LLString& comment,
+ BOOL persist) :
+ LLControlBase(name, type, comment, persist),
+ mCurrent(initial),
+ mDefault(initial)
+{
+}
+
//============================================================================
#ifdef TEST_HARNESS
@@ -1076,17 +1393,17 @@ void main()
llinfos << "Loaded " << count << " controls" << llendl;
// test insertion
- foo = new LLControlVariable<F32>("gFoo", 5.f, 1.f, 20.f);
+ foo = new LLControl<F32>("gFoo", 5.f, 1.f, 20.f);
gGlobals.addEntry("gFoo", foo);
- bar = new LLControlVariable<S32>("gBar", 10, 2, 22);
+ bar = new LLControl<S32>("gBar", 10, 2, 22);
gGlobals.addEntry("gBar", bar);
- baz = new LLControlVariable<BOOL>("gBaz", FALSE);
+ baz = new LLControl<BOOL>("gBaz", FALSE);
gGlobals.addEntry("gBaz", baz);
// test retrieval
- getfoo = (LLControlVariable<F32>*) gGlobals.resolveName("gFoo");
+ getfoo = (LLControl<F32>*) gGlobals.resolveName("gFoo");
getfoo->dump();
getbar = (S32_CONTROL) gGlobals.resolveName("gBar");
@@ -1099,10 +1416,10 @@ void main()
// Failure modes
// ...min > max
- // badfoo = new LLControlVariable<F32>("gFoo2", 100.f, 20.f, 5.f);
+ // badfoo = new LLControl<F32>("gFoo2", 100.f, 20.f, 5.f);
// ...initial > max
- // badbar = new LLControlVariable<S32>("gBar2", 10, 20, 100000);
+ // badbar = new LLControl<S32>("gBar2", 10, 20, 100000);
// ...misspelled name
// getfoo = (F32_CONTROL) gGlobals.resolveName("fooMisspelled");
@@ -1124,4 +1441,3 @@ void main()
}
#endif
-
diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h
index 7a638a7b73..a1a2a4c851 100644
--- a/indra/llxml/llcontrol.h
+++ b/indra/llxml/llcontrol.h
@@ -38,26 +38,6 @@
#include "llstring.h"
#include "llrect.h"
-#include <vector>
-
-// *NOTE: boost::visit_each<> generates warning 4675 on .net 2003
-// Disable the warning for the boost includes.
-#if LL_WINDOWS
-# if (_MSC_VER >= 1300 && _MSC_VER < 1400)
-# pragma warning(push)
-# pragma warning( disable : 4675 )
-# endif
-#endif
-
-#include <boost/bind.hpp>
-#include <boost/signal.hpp>
-
-#if LL_WINDOWS
-# if (_MSC_VER >= 1300 && _MSC_VER < 1400)
-# pragma warning(pop)
-# endif
-#endif
-
class LLVector3;
class LLVector3d;
class LLColor4;
@@ -68,7 +48,7 @@ const BOOL NO_PERSIST = FALSE;
typedef enum e_control_type
{
- TYPE_U32 = 0,
+ TYPE_U32,
TYPE_S32,
TYPE_F32,
TYPE_BOOLEAN,
@@ -78,82 +58,159 @@ typedef enum e_control_type
TYPE_RECT,
TYPE_COL4,
TYPE_COL3,
- TYPE_COL4U,
- TYPE_LLSD,
- TYPE_COUNT
+ TYPE_COL4U
} eControlType;
-class LLControlVariable
+class LLControlBase : public LLSimpleListenerObservable
{
- friend class LLControlGroup;
- typedef boost::signal<void(const LLSD&)> signal_t;
-
-private:
+friend class LLControlGroup;
+protected:
LLString mName;
LLString mComment;
eControlType mType;
+ BOOL mHasRange;
BOOL mPersist;
- std::vector<LLSD> mValues;
-
- signal_t mSignal;
-
+ BOOL mIsDefault;
+
+ static std::set<LLControlBase*> mChangedControls;
+ static std::list<S32> mFreeIDs;//These lists are used to store the ID's of registered event listeners.
+ static std::list<S32> mUsedIDs;
+ static S32 mTopID;//This is the index of the highest ID event listener ID. When the free pool is exhausted, new IDs are allocated from here.
+
public:
- LLControlVariable(const LLString& name, eControlType type,
- LLSD initial, const LLString& comment,
- BOOL persist = TRUE);
+ static void releaseListenerID(S32 id);
+ static S32 allocateListenerID();
+ static void updateAllListeners();
+ virtual void updateListeners() = 0;
+
+ LLControlBase(const LLString& name, eControlType type, const LLString& comment, BOOL persist)
+ : mName(name),
+ mComment(comment),
+ mType(type),
+ mHasRange(FALSE),
+ mPersist(persist),
+ mIsDefault(TRUE)
+ {
+ if (mPersist && mComment.empty())
+ {
+ llerrs << "Must supply a comment for control " << mName << llendl;
+ }
+ sMaxControlNameLength = llmax((U32)mName.size(), sMaxControlNameLength);
+ }
+
+ virtual ~LLControlBase();
- virtual ~LLControlVariable();
-
const LLString& getName() const { return mName; }
const LLString& getComment() const { return mComment; }
eControlType type() { return mType; }
- BOOL isType(eControlType tp) { return tp == mType; }
-
- void resetToDefault(bool fire_signal = TRUE);
-
- signal_t* getSignal() { return &mSignal; }
-
- bool isDefault() { return (mValues.size() == 1); }
- bool isSaveValueDefault();
- bool isPersisted() { return mPersist; }
- void set(const LLSD& val) { setValue(val); }
- LLSD get() const { return getValue(); }
- LLSD getDefault() const { return mValues.front(); }
- LLSD getValue() const { return mValues.back(); }
- LLSD getSaveValue() const;
- void setValue(const LLSD& value, bool saved_value = TRUE);
- void firePropertyChanged()
+ BOOL isType(eControlType tp) { return tp == mType; }
+
+ // Defaults to no-op
+ virtual void resetToDefault();
+
+ LLSD registerListener(LLSimpleListenerObservable *listener, LLSD userdata = "");
+
+ virtual LLSD get() const = 0;
+ virtual LLSD getValue() const = 0;
+ virtual void setValue(LLSD value) = 0;
+ virtual void set(LLSD value) = 0;
+
+ // From LLSimpleListener
+ virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
+
+ void firePropertyChanged();
+
+ static U32 sMaxControlNameLength;
+
+protected:
+ const char* name() { return mName.c_str(); }
+ const char* comment() { return mComment.c_str(); }
+};
+
+class LLControl
+: public LLControlBase
+{
+friend class LLControlGroup;
+protected:
+ LLSD mCurrent;
+ LLSD mDefault;
+
+public:
+
+ typedef void tListenerCallback(const LLSD& newValue,S32 listenerID, LLControl& control);
+ typedef struct{
+ S32 mID;
+ LLSD mNewValue;
+ tListenerCallback* mCBFN;
+ }tPropertyChangedEvent;
+
+ typedef std::list<tPropertyChangedEvent>::iterator tPropertyChangedListIter;
+ std::list<tPropertyChangedEvent> mChangeEvents;
+ std::list< tListenerCallback* > mListeners;
+ std::list< S32 > mListenerIDs;
+
+ virtual void updateListeners();
+ S32 addListener(tListenerCallback* cbfn);
+
+ LLControl(
+ const LLString& name,
+ eControlType type,
+ LLSD initial, const
+ LLString& comment,
+ BOOL persist = TRUE);
+
+ void set(LLSD val) { setValue(val); }
+ LLSD get() const { return getValue(); }
+ LLSD getdefault() const { return mDefault; }
+ LLSD getValue() const { return mCurrent; }
+ BOOL llsd_compare(const LLSD& a, const LLSD& b);
+
+ void setValue(LLSD value)
+ {
+ if (llsd_compare(mCurrent, value) == FALSE)
+ {
+ mCurrent = value;
+ mIsDefault = llsd_compare(mCurrent, mDefault);
+ firePropertyChanged();
+ }
+ }
+
+ /*virtual*/ void resetToDefault()
+ {
+ setValue(mDefault);
+ }
+
+ virtual ~LLControl()
{
- mSignal(mValues.back());
+ //Remove and deregister all listeners..
+ while(mListenerIDs.size())
+ {
+ S32 id = mListenerIDs.front();
+ mListenerIDs.pop_front();
+ releaseListenerID(id);
+ }
}
- BOOL llsd_compare(const LLSD& a, const LLSD& b);
};
//const U32 STRING_CACHE_SIZE = 10000;
class LLControlGroup
{
-protected:
- typedef std::map<LLString, LLControlVariable* > ctrl_name_table_t;
+public:
+ typedef std::map<LLString, LLPointer<LLControlBase> > ctrl_name_table_t;
ctrl_name_table_t mNameTable;
std::set<LLString> mWarnings;
- LLString mTypeString[TYPE_COUNT];
+ std::set<LLString> mLoadedSettings; // Filled in with names loaded from settings.xml
- eControlType typeStringToEnum(const LLString& typestr);
- LLString typeEnumToString(eControlType typeenum);
public:
LLControlGroup();
~LLControlGroup();
void cleanup();
+ bool hasLoaded(const LLString& name) { return mLoadedSettings.find(name) != mLoadedSettings.end(); }
+ void clearLoaded() { mLoadedSettings.clear(); } // Call once we've done any settings tweaks which may need this data
- LLControlVariable* getControl(const LLString& name);
-
- struct ApplyFunctor
- {
- virtual ~ApplyFunctor() {};
- virtual void apply(const LLString& name, LLControlVariable* control) = 0;
- };
- void applyToAll(ApplyFunctor* func);
+ LLControlBase* getControl(const LLString& name);
+ LLSD registerListener(const LLString& name, LLSimpleListenerObservable *listener);
BOOL declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist);
BOOL declareU32(const LLString& name, U32 initial_val, const LLString& comment, BOOL persist = TRUE);
@@ -167,7 +224,6 @@ public:
BOOL declareColor4U(const LLString& name, const LLColor4U &initial_val, const LLString& comment, BOOL persist = TRUE);
BOOL declareColor4(const LLString& name, const LLColor4 &initial_val, const LLString& comment, BOOL persist = TRUE);
BOOL declareColor3(const LLString& name, const LLColor3 &initial_val, const LLString& comment, BOOL persist = TRUE);
- BOOL declareLLSD(const LLString& name, const LLSD &initial_val, const LLString& comment, BOOL persist = TRUE);
LLString findString(const LLString& name);
@@ -181,7 +237,7 @@ public:
S32 getS32(const LLString& name);
F32 getF32(const LLString& name);
U32 getU32(const LLString& name);
- LLSD getLLSD(const LLString& name);
+ LLSD getValue(const LLString& name);
// Note: If an LLColor4U control exists, it will cast it to the correct
@@ -202,21 +258,19 @@ public:
void setColor4U(const LLString& name, const LLColor4U &val);
void setColor4(const LLString& name, const LLColor4 &val);
void setColor3(const LLString& name, const LLColor3 &val);
- void setLLSD(const LLString& name, const LLSD& val);
void setValue(const LLString& name, const LLSD& val);
-
-
+
BOOL controlExists(const LLString& name);
// Returns number of controls loaded, 0 if failed
// If require_declaration is false, will auto-declare controls it finds
// as the given type.
- U32 loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
- U32 saveToFile(const LLString& filename, BOOL nondefault_only);
- U32 loadFromFile(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
+ U32 loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
+ U32 loadFromFile(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
+ U32 saveToFile(const LLString& filename, BOOL skip_if_default);
+ void applyOverrides(const std::map<std::string, std::string>& overrides);
void resetToDefaults();
-
// Ignorable Warnings
// Add a config variable to be reset on resetWarnings()
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
deleted file mode 100644
index 01c590c1f3..0000000000
--- a/indra/newview/app_settings/cmd_line.xml
+++ /dev/null
@@ -1,323 +0,0 @@
-<?xml version="1.0"?>
-<llsd>
- <map>
- <key>help</key>
- <map>
- <key>desc</key>
- <string>display this help message</string>
-
- <key>short</key>
- <string>h</string>
- </map>
-
- <key>port</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>UserConnectionPort</string>
- </map>
-
- <key>drop</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>PacketDropPercentage</string>
- </map>
-
- <key>inbw</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>InBandwidth</string>
- </map>
-
- <key>outbw</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>OutBandwidth</string>
- </map>
-
- <key>grid</key>
- <map>
- <key>desc</key>
- <string>Specify the name of the grid, local, or an IP address to connect to.</string>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>GridChoice</string>
- </map>
-
- <key>loginuri</key>
- <map>
- <key>desc</key>
- <string>login server and CGI script to use</string>
- <key>count</key>
- <integer>1</integer>
- <key>compose</key>
- <boolean>true</boolean>
- <key>map-to</key>
- <string>LoginURI</string>
- </map>
-
- <key>helperuri</key>
- <map>
- <key>desc</key>
- <string>helper web CGI prefix to use</string>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>HelperURI</string>
- </map>
-
- <key>debugviews</key>
- <map>
- <key>map-to</key>
- <string>DebugViews</string>
- </map>
-
- <key>skin</key>
- <map>
- <key>desc</key>
- <string>ui/branding skin folder to use</string>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>SkinFolder</string>
- </map>
-
- <key>autologin</key>
- <map>
- <key>desc</key>
- <string>log in as last saved user</string>
- <key>map-to</key>
- <string>AutoLogin</string>
- </map>
-
- <key>quitafter</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>QuitAfterSeconds</string>
- </map>
-
- <key>rotate</key>
- <map>
- <key>map-to</key>
- <string>RotateRight</string>
- </map>
-
- <key>noaudio</key>
- <map>
- <key>map-to</key>
- <string>NoAudio</string>
- </map>
-
- <key>nosound</key>
- <map>
- <key>map-to</key>
- <string>NoAudio</string>
- </map>
-
- <key>noprobe</key>
- <map>
- <key>map-to</key>
- <string>NoHardwareProbe</string>
- </map>
-
- <key>noquicktime</key>
- <map>
- <key>map-to</key>
- <string>NoQuickTime</string>
- </map>
-
- <key>nopreload</key>
- <map>
- <key>map-to</key>
- <string>NoPreload</string>
- </map>
-
- <key>purge</key>
- <map>
- <key>desc</key>
- <string>Delete files in the cache.</string>
- <key>map-to</key>
- <string>PurgeCacheOnNextStartup</string>
- </map>
-
- <key>noinvlib</key>
- <map>
- <key>desc</key>
- <string>Do not request the inventory library.</string>
- <key>map-to</key>
- <string>NoInventoryLibrary</string>
- </map>
-
- <key>logfile</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>UserLogFile</string>
- </map>
-
- <key>setdefault</key>
- <map>
- <key>desc</key>
- <string>
- "specify the value of a particular\n
- configuration variable which can be\n
- overridden by settings.xml\n"
- </string>
- <key>count</key>
- <integer>2</integer>
- <!-- Special case. Mapped to settings procedurally. -->
- </map>
-
- <key>set</key>
- <map>
- <key>desc</key>
- <string>
- "specify the value of a particular\n
- configuration variable that\n
- overrides all other settings\n"
- </string>
- <key>count</key>
- <integer>2</integer>
- <!-- Special case. Mapped to settings procedurally. -->
- </map>
-
- <key>settings</key>
- <map>
- <key>desc</key>
- <string>Specify the filename of a configuration file.</string>
- <key>count</key>
- <integer>1</integer>
- <!-- Special case. Mapped to settings procedurally. -->
- </map>
-
- <key>login</key>
- <map>
- <key>desc</key>
- <string>3 tokens: first, last and password</string>
- <key>count</key>
- <integer>3</integer>
- <key>map-to</key>
- <string>UserLoginInfo</string>
- </map>
-
- <key>god</key>
- <map>
- <key>desc</key>
- <string>Log in a god if you have god access.</string>
- <key>map-to</key>
- <string>ConnectAsGod</string>
- </map>
-
- <key>console</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>ShowConsoleWindow</string>
- </map>
-
- <key>safe</key>
- <map>
- <key>desc</key>
- <string>Reset preferences, run in safe mode.</string>
- <key>map-to</key>
- <string>SafeMode</string>
- </map>
-
- <key>multiple</key>
- <map>
- <key>desc</key>
- <string>Allow multple viewers.</string>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>AllowMultipleViewers</string>
- </map>
-
- <key>novoice</key>
- <map>
- <key>desc</key>
- <string>Disable voice.</string>
- <key>map-to</key>
- <string>CmdLineDisableVoice</string>
- </map>
-
- <key>url</key>
- <map>
- <key>desc</key>
- <string>Startup location</string>
- <key>count</key>
- <integer>1</integer>
- <key>last_option</key>
- <boolean>true</boolean>
- <!-- Special case. Not mapped to a setting. -->
- </map>
-
- <key>slurl</key>
- <map>
- <key>desc</key>
- <string>Startup SLurl</string>
- <key>count</key>
- <integer>1</integer>
- <key>positional</key>
- <boolean>true</boolean>
- <key>last_option</key>
- <boolean>true</boolean>
- <!-- Special case. Not mapped to a setting. -->
- </map>
-
- <key>ignorepixeldepth</key>
- <map>
- <key>desc</key>
- <string>Ignore pixel depth settings.</string>
- <key>map-to</key>
- <string>IgnorePixelDepth</string>
- </map>
-
- <key>cooperative</key>
- <map>
- <key>desc</key>
- <string>Yield some idle time to local host.</string>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>YieldTime</string>
- </map>
-
- <key>no-verify-ssl-cert</key>
- <map>
- <key>map-to</key>
- <string>NoVerifySSLCert</string>
- </map>
-
- <key>channel</key>
- <map>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>VersionChannelName</string>
- </map>
-
- <key>loginpage</key>
- <map>
- <key>desc</key>
- <string>Login authentication page to use.</string>
- <key>count</key>
- <integer>1</integer>
- <key>map-to</key>
- <string>LoginPage</string>
- </map>
-
- </map>
-</llsd>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
deleted file mode 100644
index 012bc9ec10..0000000000
--- a/indra/newview/app_settings/settings.xml
+++ /dev/null
@@ -1,9604 +0,0 @@
-<llsd>
- <map>
- <key>AdvanceSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Display advanced parameter settings in snaphot interface</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AFKTimeout</key>
- <map>
- <key>Comment</key>
- <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>300</real>
- </map>
- <key>AgentChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from other residents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>AllowIdleAFK</key>
- <map>
- <key>Comment</key>
- <string>Automatically set AFK (away from keyboard) mode when idle</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AllowMultipleViewers</key>
- <map>
- <key>Comment</key>
- <string>Allow multiple viewers.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AnimateTextures</key>
- <map>
- <key>Comment</key>
- <string>Enable texture animation (debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AnimationDebug</key>
- <map>
- <key>Comment</key>
- <string>Show active animations in a bubble above avatars head</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AppearanceCameraMovement</key>
- <map>
- <key>Comment</key>
- <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ApplyColorImmediately</key>
- <map>
- <key>Comment</key>
- <string>Preview selections in color picker immediately</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ApplyTextureImmediately</key>
- <map>
- <key>Comment</key>
- <string>Preview selections in texture picker immediately</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ArrowKeysMoveAvatar</key>
- <map>
- <key>Comment</key>
- <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AskedAboutCrashReports</key>
- <map>
- <key>Comment</key>
- <string>Turns off dialog asking if you want to enable crash reporting</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AsyncKeyboard</key>
- <map>
- <key>Comment</key>
- <string>Improves responsiveness to keyboard input when at low framerates</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AuctionShowFence</key>
- <map>
- <key>Comment</key>
- <string>When auctioning land, include parcel boundary marker in snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AudioLevelAmbient</key>
- <map>
- <key>Comment</key>
- <string>Audio level of environment sounds</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>AudioLevelDistance</key>
- <map>
- <key>Comment</key>
- <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelDoppler</key>
- <map>
- <key>Comment</key>
- <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelMaster</key>
- <map>
- <key>Comment</key>
- <string>Master audio level, or overall volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelMedia</key>
- <map>
- <key>Comment</key>
- <string>Audio level of Quicktime movies</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelMic</key>
- <map>
- <key>Comment</key>
- <string>Audio level of microphone input</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelMusic</key>
- <map>
- <key>Comment</key>
- <string>Audio level of streaming music</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelRolloff</key>
- <map>
- <key>Comment</key>
- <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelSFX</key>
- <map>
- <key>Comment</key>
- <string>Audio level of in-world sound effects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>AudioLevelUI</key>
- <map>
- <key>Comment</key>
- <string>Audio level of UI sound effects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>AudioLevelVoice</key>
- <map>
- <key>Comment</key>
- <string>Audio level of voice chat</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>AudioStreamingMusic</key>
- <map>
- <key>Comment</key>
- <string>Enable streaming audio</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AudioStreamingVideo</key>
- <map>
- <key>Comment</key>
- <string>Enable streaming video</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutoAcceptNewInventory</key>
- <map>
- <key>Comment</key>
- <string>Automatically accept new notecards/textures/landmarks</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutoLoadWebProfiles</key>
- <map>
- <key>Comment</key>
- <string>Automatically load ALL profile webpages without asking first.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutoLogin</key>
- <map>
- <key>Comment</key>
- <string>Login automatically using last username/password combination</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutoMimeDiscovery</key>
- <map>
- <key>Comment</key>
- <string>Enable viewer mime type discovery of media URLs</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutoPilotLocksCamera</key>
- <map>
- <key>Comment</key>
- <string>Keep camera position locked when avatar walks to selected position</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutoSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Update snapshot when camera stops moving, or any parameter changes</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>AutomaticFly</key>
- <map>
- <key>Comment</key>
- <string>Fly by holding jump key or using &quot;Fly&quot; command (FALSE = fly by using &quot;Fly&quot; command only)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AvatarBacklight</key>
- <map>
- <key>Comment</key>
- <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>AvatarCompositeLimit</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of avatars to display appearance changes on the fly</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
- <key>AvatarPickerSortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>AvatarSex</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>BackgroundChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat bubble background</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>BackgroundYieldTime</key>
- <map>
- <key>Comment</key>
- <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
- <key>BackwardBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>45</integer>
- <integer>29</integer>
- <integer>66</integer>
- <integer>4</integer>
- </array>
- </map>
- <key>BasicHelpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for help window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>404</integer>
- <integer>467</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>BeaconAlwaysOn</key>
- <map>
- <key>Comment</key>
- <string>Beacons / highlighting always on</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>BrowserHomePage</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://www.secondlife.com</string>
- </map>
- <key>BrowserProxyAddress</key>
- <map>
- <key>Comment</key>
- <string>Address for the Web Proxy]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>BrowserProxyEnabled</key>
- <map>
- <key>Comment</key>
- <string>Use Web Proxy</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>BrowserProxyExclusions</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>BrowserProxyPort</key>
- <map>
- <key>Comment</key>
- <string>Port for Web Proxy</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3128</integer>
- </map>
- <key>BrowserProxySocks45</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
- <key>BuildBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ButtonFlashCount</key>
- <map>
- <key>Comment</key>
- <string>Number of flashes after which flashing buttons stay lit up</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3</integer>
- </map>
- <key>ButtonFlashRate</key>
- <map>
- <key>Comment</key>
- <string>Frequency at which buttons flash (hz)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>2</real>
- </map>
- <key>ButtonHPad</key>
- <map>
- <key>Comment</key>
- <string>Default horizontal spacing between buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
- <key>ButtonHeight</key>
- <map>
- <key>Comment</key>
- <string>Default height for normal buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>20</integer>
- </map>
- <key>ButtonHeightSmall</key>
- <map>
- <key>Comment</key>
- <string>Default height for small buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>16</integer>
- </map>
- <key>ButtonVPad</key>
- <map>
- <key>Comment</key>
- <string>Default vertical spacing between buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>CacheLocation</key>
- <map>
- <key>Comment</key>
- <string>Controls the location of the local disk cache</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>CacheSize</key>
- <map>
- <key>Comment</key>
- <string>Controls amount of hard drive space reserved for local file caching in MB</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>500</integer>
- </map>
- <key>CacheValidateCounter</key>
- <map>
- <key>Comment</key>
- <string>Used to distribute cache validation</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CameraOffset</key>
- <map>
- <key>Comment</key>
- <string>Render with camera offset from view frustum (rendering debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CameraOffsetBuild</key>
- <map>
- <key>Comment</key>
- <string>Default camera position relative to focus point when entering build mode</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>-6</real>
- <real>0</real>
- <real>6</real>
- </array>
- </map>
- <key>CameraOffsetDefault</key>
- <map>
- <key>Comment</key>
- <string>Default camera offset from avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>-3</real>
- <real>0</real>
- <real>0.75</real>
- </array>
- </map>
- <key>CameraPositionSmoothing</key>
- <map>
- <key>Comment</key>
- <string>Smooths camera position over time</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
- <key>CameraPosOnLogout</key>
- <map>
- <key>Comment</key>
- <string>Camera position when last logged out (global coordinates)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3D</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- </array>
- </map>
- <key>CameraMouseWheelZoom</key>
- <map>
- <key>Comment</key>
- <string>Camera zooms in and out with mousewheel</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ChatBarStealsFocus</key>
- <map>
- <key>Comment</key>
- <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ChatBubbleOpacity</key>
- <map>
- <key>Comment</key>
- <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>ChatFontSize</key>
- <map>
- <key>Comment</key>
- <string>Size of chat text in chat console (0 = small, 1 = big)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ChatFullWidth</key>
- <map>
- <key>Comment</key>
- <string>Chat console takes up full width of SL window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ChatHistoryTornOff</key>
- <map>
- <key>Comment</key>
- <string>Show chat history window separately from Communicate window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ChatOnlineNotification</key>
- <map>
- <key>Comment</key>
- <string>Provide notifications for when friend log on and off of SL</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ChatPersistTime</key>
- <map>
- <key>Comment</key>
- <string>Time for which chat stays visible in console (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>15</real>
- </map>
- <key>ChatShowTimestamps</key>
- <map>
- <key>Comment</key>
- <string>Show timestamps in chat</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ChatVisible</key>
- <map>
- <key>Comment</key>
- <string>Chat bar is visible</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ChatterboxRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for chatterbox window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>CheesyBeacon</key>
- <map>
- <key>Comment</key>
- <string>Enable cheesy beacon effects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ClientSettingsFile</key>
- <map>
- <key>Comment</key>
- <string>Persisted client settings file name (per install).</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>CloseChatOnReturn</key>
- <map>
- <key>Comment</key>
- <string>Close chat after hitting return</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CloseSnapshotOnKeep</key>
- <map>
- <key>Comment</key>
- <string>Close snapshot window after saving snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ClothingBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CmdLineDisableVoice</key>
- <map>
- <key>Comment</key>
- <string>Disable Voice.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ColorPaletteEntry01</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry02</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry03</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry04</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry05</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry06</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.5</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry07</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry08</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry09</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry10</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.25</real>
- <real>0.25</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry11</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry12</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0.25</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry13</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry14</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.25</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry15</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry16</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry17</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry18</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.75</real>
- <real>0.75</real>
- <real>0.75</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry19</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry20</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry21</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry22</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry23</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry24</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry25</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry26</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry27</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry28</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.5</real>
- <real>0.5</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry29</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0.5</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry30</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0.5</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry31</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColorPaletteEntry32</key>
- <map>
- <key>Comment</key>
- <string>Color picker palette entry</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>ColumnHeaderDropDownDelay</key>
- <map>
- <key>Comment</key>
- <string>Time in seconds of mouse click before column header shows sort options list</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.300000011920928955078125</real>
- </map>
- <key>CompileOutputRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for script Recompile Everything output window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>CompressSnapshotsToDisk</key>
- <map>
- <key>Comment</key>
- <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ConnectAsGod</key>
- <map>
- <key>Comment</key>
- <string>Log in a god if you have god access.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ConnectionPort</key>
- <map>
- <key>Comment</key>
- <string>Custom connection port number</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>13000</integer>
- </map>
- <key>ConnectionPortEnabled</key>
- <map>
- <key>Comment</key>
- <string>Use the custom connection port?</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ConsoleBackgroundOpacity</key>
- <map>
- <key>Comment</key>
- <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.4000000059604644775390625</real>
- </map>
- <key>ConsoleBufferSize</key>
- <map>
- <key>Comment</key>
- <string>Size of chat console history (lines of chat)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
- <key>ConsoleMaxLines</key>
- <map>
- <key>Comment</key>
- <string>Max number of lines of chat text visible in console.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
- <key>ContactsTornOff</key>
- <map>
- <key>Comment</key>
- <string>Show contacts window separately from Communicate window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CookiesEnabled</key>
- <map>
- <key>Comment</key>
- <string>Accept cookies from Web sites?</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>CrashLogBehavior</key>
- <map>
- <key>Comment</key>
- <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>CreateToolCopyCenters</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>CreateToolCopyRotates</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CreateToolCopySelection</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CreateToolKeepSelected</key>
- <map>
- <key>Comment</key>
- <string>After using create tool, keep the create tool active</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>CustomServer</key>
- <map>
- <key>Comment</key>
- <string>Specifies IP address or hostname of grid to which you connect</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>DebugBeaconLineWidth</key>
- <map>
- <key>Comment</key>
- <string>Size of lines for Debug Beacons</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DebugInventoryFilters</key>
- <map>
- <key>Comment</key>
- <string>Turn on debugging display for inventory filtering</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DebugPermissions</key>
- <map>
- <key>Comment</key>
- <string>Log permissions for selected inventory items</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DebugShowColor</key>
- <map>
- <key>Comment</key>
- <string>Show color under cursor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DebugShowRenderInfo</key>
- <map>
- <key>Comment</key>
- <string>Show depth buffer contents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DebugShowTime</key>
- <map>
- <key>Comment</key>
- <string>Show depth buffer contents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DebugViews</key>
- <map>
- <key>Comment</key>
- <string>Display debugging info for views.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DebugWindowProc</key>
- <map>
- <key>Comment</key>
- <string>Log windows messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DefaultObjectTexture</key>
- <map>
- <key>Comment</key>
- <string>Texture used as &apos;Default&apos; in texture picker. (UUID texture reference)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>89556747-24cb-43ed-920b-47caed15465f</string>
- </map>
- <key>DisableCameraConstraints</key>
- <map>
- <key>Comment</key>
- <string>Disable the normal bounds put on the camera by avatar position</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DisableRendering</key>
- <map>
- <key>Comment</key>
- <string>Disable GL rendering and GUI (load testing)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DisableVerticalSync</key>
- <map>
- <key>Comment</key>
- <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DisplayAvatarAgentTarget</key>
- <map>
- <key>Comment</key>
- <string>Show avatar positioning locators (animation debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DisplayChat</key>
- <map>
- <key>Comment</key>
- <string>Display Latest Chat message on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DisplayDebug</key>
- <map>
- <key>Comment</key>
- <string>Display Network Information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DisplayDebugConsole</key>
- <map>
- <key>Comment</key>
- <string>Display Console Debug Information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DisplayIM</key>
- <map>
- <key>Comment</key>
- <string>Display Latest IM message on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DisplayLinden</key>
- <map>
- <key>Comment</key>
- <string>Display Account Information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DisplayRegion</key>
- <map>
- <key>Comment</key>
- <string>Display Location information on LCD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DisplayTimecode</key>
- <map>
- <key>Comment</key>
- <string>Display timecode on screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>Disregard128DefaultDrawDistance</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the auto default to 128 draw distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>Disregard96DefaultDrawDistance</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the auto default to 96 draw distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>DoubleClickAutoPilot</key>
- <map>
- <key>Comment</key>
- <string>Enable double-click auto pilot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>DragAndDropToolTipDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before displaying tooltip when performing drag and drop operation</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>DropShadowButton</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>DropShadowFloater</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for floaters (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
- <key>DropShadowSlider</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for sliders (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3</integer>
- </map>
- <key>DropShadowTooltip</key>
- <map>
- <key>Comment</key>
- <string>Drop shadow width for tooltips (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>4</integer>
- </map>
- <key>DynamicCameraStrength</key>
- <map>
- <key>Comment</key>
- <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>2</real>
- </map>
- <key>EditCameraMovement</key>
- <map>
- <key>Comment</key>
- <string>When entering build mode, camera moves up above avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>EditLinkedParts</key>
- <map>
- <key>Comment</key>
- <string>Select individual parts of linked objects</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>EffectColor</key>
- <map>
- <key>Comment</key>
- <string>Particle effects color</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>EnablePushToTalk</key>
- <map>
- <key>Comment</key>
- <string>Must hold down a key or moouse button when talking into your microphone</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>EnableVoiceChat</key>
- <map>
- <key>Comment</key>
- <string>Enable talking to other residents with a microphone</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>EnergyFromTop</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>20</integer>
- </map>
- <key>EnergyHeight</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>40</integer>
- </map>
- <key>EnergyWidth</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>175</integer>
- </map>
- <key>FilterItemsPerFrame</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>500</integer>
- </map>
- <key>FindLandArea</key>
- <map>
- <key>Comment</key>
- <string>Enables filtering of land search results by area</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FindLandPrice</key>
- <map>
- <key>Comment</key>
- <string>Enables filtering of land search results by price</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FindLandType</key>
- <map>
- <key>Comment</key>
- <string>Controls which type of land you are searching for in Find Land interface (&quot;All&quot;, &quot;Auction&quot;, &quot;For Sale&quot;)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>All</string>
- </map>
- <key>FindPeopleOnline</key>
- <map>
- <key>Comment</key>
- <string>Limits people search to only users who are logged on</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FindPlacesPictures</key>
- <map>
- <key>Comment</key>
- <string>Display only results of find places that have pictures</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstLoginThisInstall</key>
- <map>
- <key>Comment</key>
- <string>Specifies that you have not successfully logged in since you installed the latest update</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstName</key>
- <map>
- <key>Comment</key>
- <string>Login first name</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>FirstPersonAvatarVisible</key>
- <map>
- <key>Comment</key>
- <string>Display avatar and attachments below neck while in mouselook</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FirstPersonBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FirstRunThisInstall</key>
- <map>
- <key>Comment</key>
- <string>Specifies that you have not run the viewer since you installed the latest update</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FixedWeather</key>
- <map>
- <key>Comment</key>
- <string>Weather effects do not change over time</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FloaterAboutRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for About window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>440</integer>
- <integer>470</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterActiveSpeakersRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for active speakers window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>300</integer>
- <integer>250</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterAudioVolumeRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Audio Volume window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>440</integer>
- <integer>470</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterBuildOptionsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for build options window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterBumpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Bumps/Hits window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>180</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterBuyContentsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Buy Contents window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>250</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterBuyRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for buy window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>250</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterCameraRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for camera control window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>166</integer>
- <integer>128</integer>
- <integer>342</integer>
- <integer>64</integer>
- </array>
- </map>
- <key>FloaterChatRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>172</integer>
- <integer>500</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterClothingRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for clothing window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>480</integer>
- <integer>320</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterContactsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>390</integer>
- <integer>395</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterCustomizeAppearanceRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for avatar customization window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>540</integer>
- <integer>494</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterFindRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Find window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>570</integer>
- <integer>780</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterFriendsRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for friends window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>250</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterGestureRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for gestures window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>465</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterHtmlRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>100</integer>
- <integer>460</integer>
- <integer>370</integer>
- <integer>100</integer>
- </array>
- </map>
- <key>FloaterHUDRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HUD Floater window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>282</integer>
- <integer>342</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterIMRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for IM window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>160</integer>
- <integer>500</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterInspectRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Object Inspect window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterInventoryRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for inventory window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterJoystickRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for joystick controls window.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterLagMeter</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for lag meter</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>142</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterLandRect5</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for About Land window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>370</integer>
- <integer>460</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterLandmarkRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for landmark picker</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>290</integer>
- <integer>310</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterMediaRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for media browser window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterMiniMapRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>225</integer>
- <integer>200</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterMoveRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for avatar control window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>58</integer>
- <integer>135</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterMuteRect3</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for mute window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>300</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterOpenObjectRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Open Object window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>350</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterPayRectB</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for pay window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>150</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterRegionInfo</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for region info window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>512</integer>
- <integer>480</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterScriptDebugRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Script Error/Debug window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>130</integer>
- <integer>450</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterSnapshotRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for snapshot window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>200</integer>
- <integer>200</integer>
- <integer>400</integer>
- </array>
- </map>
- <key>FloaterViewBottom</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
- <key>FloaterWorldMapRect2</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for world map window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FlyBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FlycamAbsolute</key>
- <map>
- <key>Comment</key>
- <string>Treat Flycam values as absolute positions (not deltas).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FlycamAutoLeveling</key>
- <map>
- <key>Comment</key>
- <string>Keep Flycam level.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FlycamAxis0</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FlycamAxis1</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FlycamAxis2</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>FlycamAxis3</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>3</integer>
- </map>
- <key>FlycamAxis4</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>4</integer>
- </map>
- <key>FlycamAxis5</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
- <key>FlycamAxis6</key>
- <map>
- <key>Comment</key>
- <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
- <key>FlycamAxisDeadZone0</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 0 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>FlycamAxisDeadZone1</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 1 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>FlycamAxisDeadZone2</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 2 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>FlycamAxisDeadZone3</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 3 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>FlycamAxisDeadZone4</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 4 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>FlycamAxisDeadZone5</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 5 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>FlycamAxisDeadZone6</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 6 dead zone.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>FlycamAxisScale0</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 0 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FlycamAxisScale1</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 1 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FlycamAxisScale2</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 2 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FlycamAxisScale3</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 3 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FlycamAxisScale4</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 4 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FlycamAxisScale5</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 5 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FlycamAxisScale6</key>
- <map>
- <key>Comment</key>
- <string>Flycam axis 6 scaler.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FlycamFeathering</key>
- <map>
- <key>Comment</key>
- <string>Flycam feathering (less is softer)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16</real>
- </map>
- <key>FlycamZoomDirect</key>
- <map>
- <key>Comment</key>
- <string>Map flycam zoom axis directly to camera zoom.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FlyingAtExit</key>
- <map>
- <key>Comment</key>
- <string>Was flying when last logged out, so fly when logging in</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FocusOffsetDefault</key>
- <map>
- <key>Comment</key>
- <string>Default focus point offset relative to avatar (x-axis is forward)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>FocusPosOnLogout</key>
- <map>
- <key>Comment</key>
- <string>Camera focus point when last logged out (global coordinates)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3D</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>0</real>
- <real>0</real>
- </array>
- </map>
- <key>FolderAutoOpenDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.75</real>
- </map>
- <key>FolderLoadingMessageWaitTime</key>
- <map>
- <key>Comment</key>
- <string>Seconds to wait before showing the LOADING... text in folder views</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>FontMonospace</key>
- <map>
- <key>Comment</key>
- <string>Name of monospace font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>profontwindows.ttf</string>
- </map>
- <key>FontSansSerif</key>
- <map>
- <key>Comment</key>
- <string>Name of san-serif font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>MtBkLfRg.ttf</string>
- </map>
- <key>FontSansSerifBold</key>
- <map>
- <key>Comment</key>
- <string>Name of bold font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>MtBdLfRg.ttf</string>
- </map>
- <key>FontSansSerifFallback</key>
- <map>
- <key>Comment</key>
- <string>Name of san-serif font (Truetype file name)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>???????? Pro W3.otf;???????? ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;????.ttf</string>
- </map>
- <key>FontSansSerifFallbackScale</key>
- <map>
- <key>Comment</key>
- <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>FontScreenDPI</key>
- <map>
- <key>Comment</key>
- <string>Font resolution, higher is bigger (pixels per inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>96</real>
- </map>
- <key>FontSizeHuge</key>
- <map>
- <key>Comment</key>
- <string>Size of huge font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16</real>
- </map>
- <key>FontSizeLarge</key>
- <map>
- <key>Comment</key>
- <string>Size of large font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>12</real>
- </map>
- <key>FontSizeMedium</key>
- <map>
- <key>Comment</key>
- <string>Size of medium font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>10</real>
- </map>
- <key>FontSizeMonospace</key>
- <map>
- <key>Comment</key>
- <string>Size of monospaced font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>9</real>
- </map>
- <key>FontSizeSmall</key>
- <map>
- <key>Comment</key>
- <string>Size of small font (points, or 1/72 of an inch)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>9</real>
- </map>
- <key>ForceShowGrid</key>
- <map>
- <key>Comment</key>
- <string>Always show grid dropdown on login screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ForwardBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>45</integer>
- <integer>54</integer>
- <integer>66</integer>
- <integer>29</integer>
- </array>
- </map>
- <key>FreezeTime</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FullScreen</key>
- <map>
- <key>Comment</key>
- <string>Run SL in fullscreen mode</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FullScreenAspectRatio</key>
- <map>
- <key>Comment</key>
- <string>Aspect ratio of fullscreen display (width / height)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.33329999446868896484375</real>
- </map>
- <key>FullScreenAutoDetectAspectRatio</key>
- <map>
- <key>Comment</key>
- <string>Automatically detect proper aspect ratio for fullscreen display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FullScreenHeight</key>
- <map>
- <key>Comment</key>
- <string>Fullscreen resolution in height</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>768</integer>
- </map>
- <key>FullScreenWidth</key>
- <map>
- <key>Comment</key>
- <string>Fullscreen resolution in width</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1024</integer>
- </map>
- <key>GridChoice</key>
- <map>
- <key>Comment</key>
- <string>The user&apos;s grid choice or ip address.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>GridCrossSections</key>
- <map>
- <key>Comment</key>
- <string>Highlight cross sections of prims with grid manipulation plane.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>GridDrawSize</key>
- <map>
- <key>Comment</key>
- <string>Visible extent of 2D snap grid (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>12</real>
- </map>
- <key>GridMode</key>
- <map>
- <key>Comment</key>
- <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>GridOpacity</key>
- <map>
- <key>Comment</key>
- <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.699999988079071044921875</real>
- </map>
- <key>GridResolution</key>
- <map>
- <key>Comment</key>
- <string>Size of single grid step (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>GridSubUnit</key>
- <map>
- <key>Comment</key>
- <string>Display fractional grid steps, relative to grid size</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>GridSubdivision</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>32</integer>
- </map>
- <key>GroupNotifyBoxHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of group notice messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>260</integer>
- </map>
- <key>GroupNotifyBoxWidth</key>
- <map>
- <key>Comment</key>
- <string>Width of group notice messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>400</integer>
- </map>
- <key>HTMLLinkColor</key>
- <map>
- <key>Comment</key>
- <string>Color of hyperlinks</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.60000002384185791015625</real>
- <real>0.60000002384185791015625</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>HelpHomeURL</key>
- <map>
- <key>Comment</key>
- <string>URL of initial help page</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>help/index.html</string>
- </map>
- <key>HelpLastVisitedURL</key>
- <map>
- <key>Comment</key>
- <string>URL of last help page, will be shown next time help is accessed</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>help/index.html</string>
- </map>
- <key>HelperURI</key>
- <map>
- <key>Comment</key>
- <string>helper web CGI prefix to use</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>HighResSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Double resolution of snapshot from current window resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>HtmlFindRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML find window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>16</integer>
- <integer>650</integer>
- <integer>600</integer>
- <integer>128</integer>
- </array>
- </map>
- <key>HtmlHelpLastPage</key>
- <map>
- <key>Comment</key>
- <string>Last URL visited via help system</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>HtmlHelpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML help window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>16</integer>
- <integer>650</integer>
- <integer>600</integer>
- <integer>128</integer>
- </array>
- </map>
- <key>HtmlReleaseMessage</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for HTML Release Message Floater window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>46</integer>
- <integer>520</integer>
- <integer>400</integer>
- <integer>128</integer>
- </array>
- </map>
- <key>IMInChatHistory</key>
- <map>
- <key>Comment</key>
- <string>Copy IM into chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>IMShowTimestamps</key>
- <map>
- <key>Comment</key>
- <string>Show timestamps in IM</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>IgnorePixelDepth</key>
- <map>
- <key>Comment</key>
- <string>Ignore pixel depth settings.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ImagePipelineUseHTTP</key>
- <map>
- <key>Comment</key>
- <string>If TRUE use HTTP GET to fetch textures from the server</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>InBandwidth</key>
- <map>
- <key>Comment</key>
- <string>Incoming bandwidth throttle (bps)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
- <key>InventoryAutoOpenDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>InventorySortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>7</integer>
- </map>
- <key>InvertMouse</key>
- <map>
- <key>Comment</key>
- <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>KeepAspectForSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Use full window when taking snapshot, regardless of requested image size</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>LCDDestination</key>
- <map>
- <key>Comment</key>
- <string>Which LCD to use</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LSLHelpRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for LSL help window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>LSLHelpURL</key>
- <map>
- <key>Comment</key>
- <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
- </map>
- <key>LagMeterShrunk</key>
- <map>
- <key>Comment</key>
- <string>Last large/small state for lag meter</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>Language</key>
- <map>
- <key>Comment</key>
- <string>Language specifier (for XUI)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>default</string>
- </map>
- <key>LastFeatureVersion</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LastFindPanel</key>
- <map>
- <key>Comment</key>
- <string>Controls which find operation appears by default when clicking &quot;Find&quot; button </string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>find_all_panel</string>
- </map>
- <key>LastName</key>
- <map>
- <key>Comment</key>
- <string>Login last name</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>LastPrefTab</key>
- <map>
- <key>Comment</key>
- <string>Last selected tab in preferences window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LastRunVersion</key>
- <map>
- <key>Comment</key>
- <string>Version number of last instance of the viewer that you ran</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0.0.0</string>
- </map>
- <key>LastSnapshotHeight</key>
- <map>
- <key>Comment</key>
- <string>The height of the last snapshot, in px</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>768</integer>
- </map>
- <key>LastSnapshotType</key>
- <map>
- <key>Comment</key>
- <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LastSnapshotWidth</key>
- <map>
- <key>Comment</key>
- <string>The width of the last snapshot, in px</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1024</integer>
- </map>
- <key>LeftClickShowMenu</key>
- <map>
- <key>Comment</key>
- <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LimitDragDistance</key>
- <map>
- <key>Comment</key>
- <string>Limit translation of object via translate tool</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>LimitSelectDistance</key>
- <map>
- <key>Comment</key>
- <string>Disallow selection of objects beyond max select distance</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>LocalCacheVersion</key>
- <map>
- <key>Comment</key>
- <string>Version number of cache</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LogMessages</key>
- <map>
- <key>Comment</key>
- <string>Log network traffic</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LoginAsGod</key>
- <map>
- <key>Comment</key>
- <string>Attempt to login with god powers (Linden accounts only)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LoginLastLocation</key>
- <map>
- <key>Comment</key>
- <string>Login at same location you last logged out</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>LoginPage</key>
- <map>
- <key>Comment</key>
- <string>Login authentication page.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>LoginURI</key>
- <map>
- <key>Comment</key>
- <string>login server and CGI prefix to use</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>LosslessJ2CUpload</key>
- <map>
- <key>Comment</key>
- <string>Use lossless compression for small image uploads</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MapOverlayIndex</key>
- <map>
- <key>Comment</key>
- <string>Currently selected world map type</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MapScale</key>
- <map>
- <key>Comment</key>
- <string>World map zoom level (pixels per region)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>128</real>
- </map>
- <key>MapShowClassifieds</key>
- <map>
- <key>Comment</key>
- <string>Show locations associated with classified ads on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>MapShowEvents</key>
- <map>
- <key>Comment</key>
- <string>Show events on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>MapShowInfohubs</key>
- <map>
- <key>Comment</key>
- <string>Show infohubs on the world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>MapShowLandForSale</key>
- <map>
- <key>Comment</key>
- <string>Show land for sale on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MapShowPeople</key>
- <map>
- <key>Comment</key>
- <string>Show other users on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>MapShowPopular</key>
- <map>
- <key>Comment</key>
- <string>Show popular places on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>MapShowTelehubs</key>
- <map>
- <key>Comment</key>
- <string>Show telehubs on world map</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>Marker</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>MaxDragDistance</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>48</real>
- </map>
- <key>MaxSelectDistance</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowed selection distance (meters from avatar)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>64</real>
- </map>
- <key>MeanCollisionBump</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse of being bumped by an object or avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MeanCollisionPhysical</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse from a physical object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MeanCollisionPushObject</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse of being pushed by a scripted object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MeanCollisionScripted</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse from a scripted object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MeanCollisionSelected</key>
- <map>
- <key>Comment</key>
- <string>You have experienced an abuse of being pushed via a selected object</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MenuAccessKeyTime</key>
- <map>
- <key>Comment</key>
- <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.25</real>
- </map>
- <key>MenuBarHeight</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>18</integer>
- </map>
- <key>MenuBarWidth</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>410</integer>
- </map>
- <key>MiniMapRotate</key>
- <map>
- <key>Comment</key>
- <string>Rotate miniature world map to avatar direction</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>MiniMapScale</key>
- <map>
- <key>Comment</key>
- <string>Miniature world map zoom levle (pixels per region)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>128</real>
- </map>
- <key>MouseSensitivity</key>
- <map>
- <key>Comment</key>
- <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>3</real>
- </map>
- <key>MouseSmooth</key>
- <map>
- <key>Comment</key>
- <string>Smooths out motion of mouse when in mouselook mode.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MouseSun</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MouselookBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MoveDownBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>91</integer>
- <integer>29</integer>
- <integer>116</integer>
- <integer>4</integer>
- </array>
- </map>
- <key>MoveUpBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>91</integer>
- <integer>54</integer>
- <integer>116</integer>
- <integer>29</integer>
- </array>
- </map>
- <key>MuteAmbient</key>
- <map>
- <key>Comment</key>
- <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MuteAudio</key>
- <map>
- <key>Comment</key>
- <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MuteMedia</key>
- <map>
- <key>Comment</key>
- <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MuteMusic</key>
- <map>
- <key>Comment</key>
- <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MuteSounds</key>
- <map>
- <key>Comment</key>
- <string>Sound effects play at 0 volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MuteUI</key>
- <map>
- <key>Comment</key>
- <string>UI sound effects play at 0 volume</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MuteVoice</key>
- <map>
- <key>Comment</key>
- <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>MuteWhenMinimized</key>
- <map>
- <key>Comment</key>
- <string>Mute audio when SL window is minimized</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>NewCacheLocation</key>
- <map>
- <key>Comment</key>
- <string>Change the location of the local disk cache to this</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>NextLoginLocation</key>
- <map>
- <key>Comment</key>
- <string>Location to log into by default.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>NoAudio</key>
- <map>
- <key>Comment</key>
- <string>Disable audio playback.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NoHardwareProbe</key>
- <map>
- <key>Comment</key>
- <string>Disable hardware probe.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NoInventoryLibrary</key>
- <map>
- <key>Comment</key>
- <string>Do not request inventory library.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NoPreload</key>
- <map>
- <key>Comment</key>
- <string>Disable sound and image preload.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NoQuickTime</key>
- <map>
- <key>Comment</key>
- <string>Disable quicktime playback.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NoVerifySSLCert</key>
- <map>
- <key>Comment</key>
- <string>Do not verify SSL peers.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NotecardEditorRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for notecard editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>NotifyBoxHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of notification messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>200</integer>
- </map>
- <key>NotifyBoxWidth</key>
- <map>
- <key>Comment</key>
- <string>Width of notification messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>350</integer>
- </map>
- <key>NotifyMoneyChange</key>
- <map>
- <key>Comment</key>
- <string>Pop up notifications for all L$ transactions</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>NotifyTipDuration</key>
- <map>
- <key>Comment</key>
- <string>Length of time that notification tips stay on screen (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>4</real>
- </map>
- <key>NumSessions</key>
- <map>
- <key>Comment</key>
- <string>Number of successful logins to Second Life</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NumpadControl</key>
- <map>
- <key>Comment</key>
- <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ObjectChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.699999988079071044921875</real>
- <real>0.89999997615814208984375</real>
- <real>0.699999988079071044921875</real>
- <real>1</real>
- </array>
- </map>
- <key>OpenDebugStatAdvanced</key>
- <map>
- <key>Comment</key>
- <string>Expand advanced performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>OpenDebugStatBasic</key>
- <map>
- <key>Comment</key>
- <string>Expand basic performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>OpenDebugStatNet</key>
- <map>
- <key>Comment</key>
- <string>Expand network stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>OpenDebugStatRender</key>
- <map>
- <key>Comment</key>
- <string>Expand render stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>OpenDebugStatSim</key>
- <map>
- <key>Comment</key>
- <string>Expand simulator performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>OutBandwidth</key>
- <map>
- <key>Comment</key>
- <string>Outgoing bandwidth throttle (bps)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
- <key>OverdrivenColor</key>
- <map>
- <key>Comment</key>
- <string>Color of various indicators when resident is speaking too loud.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>OverlayTitle</key>
- <map>
- <key>Comment</key>
- <string>Controls watermark text message displayed on screen when &quot;ShowOverlayTitle&quot; is enabled (one word, underscores become spaces)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Set_via_OverlayTitle_in_settings.xml</string>
- </map>
- <key>PTTCurrentlyEnabled</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>PacketDropPercentage</key>
- <map>
- <key>Comment</key>
- <string>Percentage of packets dropped by the client.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
- <key>PermissionsCautionEnabled</key>
- <map>
- <key>Comment</key>
- <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>PermissionsCautionNotifyBoxHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of caution-style notification messages</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>344</integer>
- </map>
- <key>PermissionsManagerRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for permissions manager window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PickerContextOpacity</key>
- <map>
- <key>Comment</key>
- <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.3499999940395355224609375</real>
- </map>
- <key>PieMenuLineWidth</key>
- <map>
- <key>Comment</key>
- <string>Width of lines in pie menu display (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>2.5</real>
- </map>
- <key>PinTalkViewOpen</key>
- <map>
- <key>Comment</key>
- <string>Stay in IM after hitting return</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>PingInterpolate</key>
- <map>
- <key>Comment</key>
- <string>Extrapolate object position along velocity vector based on ping delay</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>PitchFromMousePosition</key>
- <map>
- <key>Comment</key>
- <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>90</real>
- </map>
- <key>PlayTypingAnim</key>
- <map>
- <key>Comment</key>
- <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>PrecachingDelay</key>
- <map>
- <key>Comment</key>
- <string>Delay when logging in to load world before showing it (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>6</real>
- </map>
- <key>PreviewAnimRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for animation preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewClassifiedRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for URL preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>530</integer>
- <integer>420</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewEventRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Event preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>530</integer>
- <integer>420</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewLandmarkRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for landmark preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>90</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewObjectRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for object preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewScriptRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for script preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>550</integer>
- <integer>500</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewSoundRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for sound preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewTextureRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for texture preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>400</integer>
- <integer>400</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewURLRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for URL preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>90</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PreviewWearableRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for wearable preview window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>85</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>ProbeHardwareOnStartup</key>
- <map>
- <key>Comment</key>
- <string>Query current hardware configuration on application startup</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>PropertiesRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for inventory item properties window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>320</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>PurgeCacheOnNextStartup</key>
- <map>
- <key>Comment</key>
- <string>Clear local file cache next time viewer is run</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>PurgeCacheOnStartup</key>
- <map>
- <key>Comment</key>
- <string>Clear local file cache every time viewer is run</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>PushToTalkButton</key>
- <map>
- <key>Comment</key>
- <string>Which button or keyboard key is used for push-to-talk</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>MiddleMouse</string>
- </map>
- <key>PushToTalkToggle</key>
- <map>
- <key>Comment</key>
- <string>Should the push-to-talk button behave as a toggle</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>QAMode</key>
- <map>
- <key>Comment</key>
- <string>Enable Testing Features.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>QuietSnapshotsToDisk</key>
- <map>
- <key>Comment</key>
- <string>Take snapshots to disk without playing animation or sound</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>QuitAfterSeconds</key>
- <map>
- <key>Comment</key>
- <string>The duration allowed before quitting.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
- <key>RadioLandBrushAction</key>
- <map>
- <key>Comment</key>
- <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RadioLandBrushSize</key>
- <map>
- <key>Comment</key>
- <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RecentItemsSortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RectangleSelectInclusive</key>
- <map>
- <key>Comment</key>
- <string>Select objects that have at least one vertex inside selection rectangle</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RegionTextureSize</key>
- <map>
- <key>Comment</key>
- <string>Terrain texture dimensions (power of 2)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>256</integer>
- </map>
- <key>RememberPassword</key>
- <map>
- <key>Comment</key>
- <string>Keep password (in encrypted form) for next login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderAnisotropic</key>
- <map>
- <key>Comment</key>
- <string>Render textures using anisotropic filtering</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderAppleUseMultGL</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderAvatarCloth</key>
- <map>
- <key>Comment</key>
- <string>Controls if avatars use wavy cloth</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderAvatarLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>RenderAvatarMaxVisible</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of avatars to display at any one time</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>35</integer>
- </map>
- <key>RenderAvatarVP</key>
- <map>
- <key>Comment</key>
- <string>Use vertex programs to perform hardware skinning of avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderBumpmapMinDistanceSquared</key>
- <map>
- <key>Comment</key>
- <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>100</real>
- </map>
- <key>RenderCubeMap</key>
- <map>
- <key>Comment</key>
- <string>Whether we can render the cube map or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderCustomSettings</key>
- <map>
- <key>Comment</key>
- <string>Do you want to set the graphics settings yourself</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderDebugTextureBind</key>
- <map>
- <key>Comment</key>
- <string>Enable texture bind performance test.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderDynamicLOD</key>
- <map>
- <key>Comment</key>
- <string>Dynamically adjust level of detail.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderDynamicReflections</key>
- <map>
- <key>Comment</key>
- <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderFarClip</key>
- <map>
- <key>Comment</key>
- <string>Distance of far clip plane from camera (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>256</real>
- </map>
- <key>RenderFastUI</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderFlexTimeFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>RenderFogRatio</key>
- <map>
- <key>Comment</key>
- <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>4.0</real>
- </map>
- <key>RenderGamma</key>
- <map>
- <key>Comment</key>
- <string>Sets gamma exponent for renderer</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
- <key>RenderGammaFull</key>
- <map>
- <key>Comment</key>
- <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>RenderGlow</key>
- <map>
- <key>Comment</key>
- <string>Render bloom post effect.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderGlowIterations</key>
- <map>
- <key>Comment</key>
- <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>RenderGlowLumWeights</key>
- <map>
- <key>Comment</key>
- <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>0.299</real>
- <real>0.587</real>
- <real>0.114</real>
- </array>
- </map>
- <key>RenderGlowMaxExtractAlpha</key>
- <map>
- <key>Comment</key>
- <string>Max glow alpha value for brightness extraction to auto-glow.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.065</real>
- </map>
- <key>RenderGlowMinLuminance</key>
- <map>
- <key>Comment</key>
- <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
- <key>RenderGlowResolutionPow</key>
- <map>
- <key>Comment</key>
- <string>Glow map resolution power of two.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>9</integer>
- </map>
- <key>RenderGlowStrength</key>
- <map>
- <key>Comment</key>
- <string>Additive strength of glow.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.35</real>
- </map>
- <key>RenderGlowWarmthAmount</key>
- <map>
- <key>Comment</key>
- <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
- <key>RenderGlowWarmthWeights</key>
- <map>
- <key>Comment</key>
- <string>Weight of each color channel used before finding the max warmth</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>1.0</real>
- <real>0.5</real>
- <real>0.7</real>
- </array>
- </map>
- <key>RenderGlowWidth</key>
- <map>
- <key>Comment</key>
- <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.3</real>
- </map>
- <key>RenderHUDInSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Display HUD attachments in snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderHiddenSelections</key>
- <map>
- <key>Comment</key>
- <string>Show selection lines on objects that are behind other objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderHideGroupTitle</key>
- <map>
- <key>Comment</key>
- <string>Don&apos;t show my group title in my name label</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderHideGroupTitleAll</key>
- <map>
- <key>Comment</key>
- <string>Show group titles in name labels</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderInitError</key>
- <map>
- <key>Comment</key>
- <string>Error occured while initializing GL</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderLightRadius</key>
- <map>
- <key>Comment</key>
- <string>Render the radius of selected lights</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderLightingDetail</key>
- <map>
- <key>Comment</key>
- <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderMaxPartCount</key>
- <map>
- <key>Comment</key>
- <string>Maximum number of particles to display on screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>4096</integer>
- </map>
- <key>RenderMaxVBOSize</key>
- <map>
- <key>Comment</key>
- <string>Maximum size of a vertex buffer (in KB).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>32</integer>
- </map>
- <key>RenderName</key>
- <map>
- <key>Comment</key>
- <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>RenderNameFadeDuration</key>
- <map>
- <key>Comment</key>
- <string>Time interval over which to fade avatar names (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>RenderNameHideSelf</key>
- <map>
- <key>Comment</key>
- <string>Don&apos;t display own name above avatar</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderNameShowTime</key>
- <map>
- <key>Comment</key>
- <string>Fade avatar names after specified time (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>10</real>
- </map>
- <key>RenderObjectBump</key>
- <map>
- <key>Comment</key>
- <string>Show bumpmapping on primitives</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderQualityPerformance</key>
- <map>
- <key>Comment</key>
- <string>Which graphics settings you've chosen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderReflectionDetail</key>
- <map>
- <key>Comment</key>
- <string>Detail of reflection render pass.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>RenderReflectionRes</key>
- <map>
- <key>Comment</key>
- <string>Reflection map resolution.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>64</integer>
- </map>
- <key>RenderResolutionDivisor</key>
- <map>
- <key>Comment</key>
- <string>Divisor for rendering 3D scene at reduced resolution.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderShaderLODThreshold</key>
- <map>
- <key>Comment</key>
- <string>Fraction of draw distance defining the switch to a different shader LOD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <integer>1.0</integer>
- </map>
- <key>RenderSunDynamicRange</key>
- <map>
- <key>Comment</key>
- <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <integer>1.0</integer>
- </map>
- <key>RenderTerrainDetail</key>
- <map>
- <key>Comment</key>
- <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>RenderTerrainLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
- <key>RenderTerrainScale</key>
- <map>
- <key>Comment</key>
- <string>Terrain detail texture scale</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>12</real>
- </map>
- <key>RenderTreeLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>RenderUIInSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Display user interface in snapshot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderUseCleverUI</key>
- <map>
- <key>Comment</key>
- <string>Turns on the \"clever\" UI rendering optimization. It's a known performace gain (and enabled by default) on apple.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderUseFarClip</key>
- <map>
- <key>Comment</key>
- <string>If false, frustum culling will ignore far clip plane.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderUseFBO</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderUseImpostors</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use impostors for far away avatars.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderUseShaderLOD</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to have different shaders for LOD</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderUseShaderNearParticles</key>
- <map>
- <key>Comment</key>
- <string>Whether we want to use shaders on near particles</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderShaderParticleThreshold</key>
- <map>
- <key>Comment</key>
- <string>Fraction of draw distance to not use shader on particles</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.25</real>
- </map>
- <key>RenderVBOEnable</key>
- <map>
- <key>Comment</key>
- <string>Use GL Vertex Buffer Objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderVolumeLODFactor</key>
- <map>
- <key>Comment</key>
- <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>RenderWater</key>
- <map>
- <key>Comment</key>
- <string>Display water</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderWaterMipNormal</key>
- <map>
- <key>Comment</key>
- <string>Use mip maps for water normal map.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>RenderWaterReflections</key>
- <map>
- <key>Comment</key>
- <string>Reflect the environment in the water.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderWaterRefResolution</key>
- <map>
- <key>Comment</key>
- <string>Water planar reflection resolution.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>512</integer>
- </map>
- <key>RotateRight</key>
- <map>
- <key>Comment</key>
- <string>Make the agent rotate to its right.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RotationStep</key>
- <map>
- <key>Comment</key>
- <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>RunBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RunMultipleThreads</key>
- <map>
- <key>Comment</key>
- <string>If TRUE keep background threads active during render</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SafeMode</key>
- <map>
- <key>Comment</key>
- <string>Reset preferences, run in safe mode.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ScaleShowAxes</key>
- <map>
- <key>Comment</key>
- <string>Show indicator of selected scale axis when scaling</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ScaleStretchTextures</key>
- <map>
- <key>Comment</key>
- <string>Stretch textures along with object when scaling</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ScaleUniform</key>
- <map>
- <key>Comment</key>
- <string>Scale selected objects evenly about center of selection</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ScriptErrorColor</key>
- <map>
- <key>Comment</key>
- <string>Color of script error messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.819999992847442626953125</real>
- <real>0.819999992847442626953125</real>
- <real>0.9900000095367431640625</real>
- <real>1</real>
- </array>
- </map>
- <key>ScriptErrorsAsChat</key>
- <map>
- <key>Comment</key>
- <string>Display script errors and warning in chat history</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ScriptHelpFollowsCursor</key>
- <map>
- <key>Comment</key>
- <string>Scripting help window updates contents based on script editor contents under text cursor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SearchURLDefault</key>
- <map>
- <key>Comment</key>
- <string>URL to load for empty searches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://secondlife.com/app/search/index.php?</string>
- </map>
- <key>SearchURLQuery</key>
- <map>
- <key>Comment</key>
- <string>URL to use for searches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
- </map>
- <key>SearchURLSuffix2</key>
- <map>
- <key>Comment</key>
- <string>Parameters added to end of search queries</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
- </map>
- <key>SelectMovableOnly</key>
- <map>
- <key>Comment</key>
- <string>Select only objects you can move</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SelectOwnedOnly</key>
- <map>
- <key>Comment</key>
- <string>Select only objects you own</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SelectionHighlightAlpha</key>
- <map>
- <key>Comment</key>
- <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.4000000059604644775390625</real>
- </map>
- <key>SelectionHighlightAlphaTest</key>
- <map>
- <key>Comment</key>
- <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>SelectionHighlightThickness</key>
- <map>
- <key>Comment</key>
- <string>Thickness of selection highlight line (fraction of view distance)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.009999999776482582092285156</real>
- </map>
- <key>SelectionHighlightUAnim</key>
- <map>
- <key>Comment</key>
- <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0</real>
- </map>
- <key>SelectionHighlightUScale</key>
- <map>
- <key>Comment</key>
- <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.1000000014901161193847656</real>
- </map>
- <key>SelectionHighlightVAnim</key>
- <map>
- <key>Comment</key>
- <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>SelectionHighlightVScale</key>
- <map>
- <key>Comment</key>
- <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>ServerChoice</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls which grid you connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowAllObjectHoverTip</key>
- <map>
- <key>Comment</key>
- <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowAxes</key>
- <map>
- <key>Comment</key>
- <string>Render coordinate frame at your position</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowCameraControls</key>
- <map>
- <key>Comment</key>
- <string>Display camera controls on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowChatHistory</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowCommunicate</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowConsoleWindow</key>
- <map>
- <key>Comment</key>
- <string>Show log in separate OS window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowCrosshairs</key>
- <map>
- <key>Comment</key>
- <string>Display crosshairs when in mouselook mode</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowDebugConsole</key>
- <map>
- <key>Comment</key>
- <string>Show log in SL window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowDebugStats</key>
- <map>
- <key>Comment</key>
- <string>Show performance stats display</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowDepthBuffer</key>
- <map>
- <key>Comment</key>
- <string>Show depth buffer contents</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowDirectory</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowEmptyFoldersWhenSearching</key>
- <map>
- <key>Comment</key>
- <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowHoverTips</key>
- <map>
- <key>Comment</key>
- <string>Show descriptive tooltip when mouse hovers over items in world</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowInventory</key>
- <map>
- <key>Comment</key>
- <string>Open inventory window on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowLandHoverTip</key>
- <map>
- <key>Comment</key>
- <string>Show descriptive tooltip when mouse hovers over land</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowLeaders</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowMatureClassifieds</key>
- <map>
- <key>Comment</key>
- <string>Display results of find classifieds that are flagged as mature</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowMatureEvents</key>
- <map>
- <key>Comment</key>
- <string>Display results of find events that are flagged as mature</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowMatureFindAll</key>
- <map>
- <key>Comment</key>
- <string>Display results of find all that are in mature sims</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowMatureGroups</key>
- <map>
- <key>Comment</key>
- <string>Display results of find groups that are in flagged as mature</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowMatureSims</key>
- <map>
- <key>Comment</key>
- <string>Display results of find places or find popular that are in mature sims</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowMiniMap</key>
- <map>
- <key>Comment</key>
- <string>Display mini map on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowMovementControls</key>
- <map>
- <key>Comment</key>
- <string>Display movement controls on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowNearClip</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowNewInventory</key>
- <map>
- <key>Comment</key>
- <string>Automatically views new notecards/textures/landmarks</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowObjectUpdates</key>
- <map>
- <key>Comment</key>
- <string>Show when update messages are received for individual objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowOverlayTitle</key>
- <map>
- <key>Comment</key>
- <string>Prints watermark text message on screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowParcelOwners</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowPermissions</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowPropertyLines</key>
- <map>
- <key>Comment</key>
- <string>Show line overlay demarking property boundaries</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowSearchBar</key>
- <map>
- <key>Comment</key>
- <string>Show the Search Bar in the Status Overlay</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowSelectionBeam</key>
- <map>
- <key>Comment</key>
- <string>Show selection particle beam when selecting or interacting with objects.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowStartLocation</key>
- <map>
- <key>Comment</key>
- <string>Display starting location menu on login screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowTangentBasis</key>
- <map>
- <key>Comment</key>
- <string>Render normal and binormal (debugging bump mapping)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowToolBar</key>
- <map>
- <key>Comment</key>
- <string>Show toolbar at bottom of screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ShowTools</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowVoiceChannelPopup</key>
- <map>
- <key>Comment</key>
- <string>Controls visibility of the current voice channel popup above the voice tab</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowVolumeSettingsPopup</key>
- <map>
- <key>Comment</key>
- <string>Show individual volume slider for voice, sound effects, etc</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowWorldMap</key>
- <map>
- <key>Comment</key>
- <string>Display world map on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ShowXUINames</key>
- <map>
- <key>Comment</key>
- <string>Display XUI Names as Tooltips</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SitBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SkinFolder</key>
- <map>
- <key>Comment</key>
- <string>The skin folder to use.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>SkyAmbientScale</key>
- <map>
- <key>Comment</key>
- <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.300000011920928955078125</real>
- </map>
- <key>SkyNightColorShift</key>
- <map>
- <key>Comment</key>
- <string>Controls moonlight color (base color applied to moon as light source)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color3</string>
- <key>Value</key>
- <array>
- <real>0.699999988079071044921875</real>
- <real>0.699999988079071044921875</real>
- <real>1</real>
- </array>
- </map>
- <key>SkyOverrideSimSunPosition</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SkySunDefaultPosition</key>
- <map>
- <key>Comment</key>
- <string>Default position of sun in sky (direction in world coordinates)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Vector3</string>
- <key>Value</key>
- <array>
- <real>1</real>
- <real>0</real>
- <real>0.1000000014901161193847656</real>
- </array>
- </map>
- <key>SkyUseClassicClouds</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the old Second Life particle clouds or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>SlideLeftBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>20</integer>
- <integer>54</integer>
- <integer>45</integer>
- <integer>29</integer>
- </array>
- </map>
- <key>SlideRightBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>66</integer>
- <integer>54</integer>
- <integer>91</integer>
- <integer>29</integer>
- </array>
- </map>
- <key>SmallAvatarNames</key>
- <map>
- <key>Comment</key>
- <string>Display avatar name text in smaller font</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>SnapEnabled</key>
- <map>
- <key>Comment</key>
- <string>Enable snapping to grid</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>SnapMargin</key>
- <map>
- <key>Comment</key>
- <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
- <key>SnapToMouseCursor</key>
- <map>
- <key>Comment</key>
- <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SnapshotLocalLastResolution</key>
- <map>
- <key>Comment</key>
- <string>Take next local snapshot at this resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SnapshotPostcardLastResolution</key>
- <map>
- <key>Comment</key>
- <string>Take next postcard snapshot at this resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SnapshotQuality</key>
- <map>
- <key>Comment</key>
- <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>75</integer>
- </map>
- <key>SnapshotTextureLastResolution</key>
- <map>
- <key>Comment</key>
- <string>Take next texture snapshot at this resolution</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SpeakingColor</key>
- <map>
- <key>Comment</key>
- <string>Color of various indicators when resident is speaking on a voice channel.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0</real>
- <real>1</real>
- <real>0</real>
- <real>1</real>
- </array>
- </map>
- <key>SpeedTest</key>
- <map>
- <key>Comment</key>
- <string>Performance testing mode, no network</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>StatsAutoRun</key>
- <map>
- <key>Comment</key>
- <string>Play back autopilot</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>StatsFile</key>
- <map>
- <key>Comment</key>
- <string>Filename for stats logging output</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>fs.txt</string>
- </map>
- <key>StatsNumRuns</key>
- <map>
- <key>Comment</key>
- <string>Loop autopilot playback this number of times</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
- <key>StatsPilotFile</key>
- <map>
- <key>Comment</key>
- <string>Filename for stats logging autopilot path</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>pilot.txt</string>
- </map>
- <key>StatsQuitAfterRuns</key>
- <map>
- <key>Comment</key>
- <string>Quit application after this number of autopilot playback runs</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>StatsSessionTrackFrameStats</key>
- <map>
- <key>Comment</key>
- <string>Track rendering and network statistics</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>StatsSummaryFile</key>
- <map>
- <key>Comment</key>
- <string>Filename for stats logging summary</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>fss.txt</string>
- </map>
- <key>StatusBarHeight</key>
- <map>
- <key>Comment</key>
- <string>Height of menu/status bar at top of screen (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>26</integer>
- </map>
- <key>StatusBarPad</key>
- <map>
- <key>Comment</key>
- <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
- <key>SystemChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from SL System</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.800000011920928955078125</real>
- <real>1</real>
- <real>1</real>
- <real>1</real>
- </array>
- </map>
- <key>SystemLanguage</key>
- <map>
- <key>Comment</key>
- <string>Language indicated by system settings (for XUI)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>en-us</string>
- </map>
- <key>TabToTextFieldsOnly</key>
- <map>
- <key>Comment</key>
- <string>TAB key takes you to next text entry field, instead of next widget</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>TerrainColorHeightRange</key>
- <map>
- <key>Comment</key>
- <string>Altitude range over which a given terrain texture has effect (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>60</real>
- </map>
- <key>TerrainColorStartHeight</key>
- <map>
- <key>Comment</key>
- <string>Starting altitude for terrain texturing (meters)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>20</real>
- </map>
- <key>TextureMemory</key>
- <map>
- <key>Comment</key>
- <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>TexturePickerRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for texture picker</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>290</integer>
- <integer>350</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>TexturePickerShowFolders</key>
- <map>
- <key>Comment</key>
- <string>Show folders with no texures in texture picker</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>TexturePickerSortOrder</key>
- <map>
- <key>Comment</key>
- <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>2</integer>
- </map>
- <key>ThirdPersonBtnState</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>ThrottleBandwidthKBPS</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>500</real>
- </map>
- <key>ToolHelpRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>8</integer>
- <integer>178</integer>
- <integer>75</integer>
- <integer>162</integer>
- </array>
- </map>
- <key>ToolTipDelay</key>
- <map>
- <key>Comment</key>
- <string>Seconds before displaying tooltip when mouse stops over UI element</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.699999988079071044921875</real>
- </map>
- <key>ToolboxAutoMove</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>ToolboxRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for tools window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>0</integer>
- <integer>100</integer>
- <integer>100</integer>
- <integer>100</integer>
- </array>
- </map>
- <key>ToolboxShowMore</key>
- <map>
- <key>Comment</key>
- <string>Whether to show additional build tool controls</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>TrackFocusObject</key>
- <map>
- <key>Comment</key>
- <string>Camera tracks last object zoomed on</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>TurnLeftBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>20</integer>
- <integer>29</integer>
- <integer>45</integer>
- <integer>4</integer>
- </array>
- </map>
- <key>TurnRightBtnRect</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>66</integer>
- <integer>29</integer>
- <integer>91</integer>
- <integer>4</integer>
- </array>
- </map>
- <key>TypeAheadTimeout</key>
- <map>
- <key>Comment</key>
- <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.5</real>
- </map>
- <key>UIAutoScale</key>
- <map>
- <key>Comment</key>
- <string>Keep UI scale consistent across different resolutions</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>UIFloaterTestBool</key>
- <map>
- <key>Comment</key>
- <string>Example saved setting for the test floater</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UIImgBtnCloseActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
- <key>UIImgBtnCloseInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
- </map>
- <key>UIImgBtnClosePressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
- <key>UIImgBtnForwardInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
- </map>
- <key>UIImgBtnForwardOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
- </map>
- <key>UIImgBtnJumpLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
- </map>
- <key>UIImgBtnJumpLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
- </map>
- <key>UIImgBtnJumpRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
- </map>
- <key>UIImgBtnJumpRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
- </map>
- <key>UIImgBtnLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
- </map>
- <key>UIImgBtnLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
- </map>
- <key>UIImgBtnMinimizeActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
- </map>
- <key>UIImgBtnMinimizeInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
- </map>
- <key>UIImgBtnMinimizePressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>39801651-26cb-4926-af57-7af9352c273c</string>
- </map>
- <key>UIImgBtnMoveDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
- </map>
- <key>UIImgBtnMoveDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
- </map>
- <key>UIImgBtnMoveUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
- </map>
- <key>UIImgBtnMoveUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
- </map>
- <key>UIImgBtnPanDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
- <key>UIImgBtnPanDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
- <key>UIImgBtnPanLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
- <key>UIImgBtnPanLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
- <key>UIImgBtnPanRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
- <key>UIImgBtnPanRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
- <key>UIImgBtnPanUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
- </map>
- <key>UIImgBtnPanUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
- </map>
- <key>UIImgBtnRestoreActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
- </map>
- <key>UIImgBtnRestoreInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0eafa471-70af-4882-b8c1-40a310929744</string>
- </map>
- <key>UIImgBtnRestorePressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
- </map>
- <key>UIImgBtnRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5e616d0d-4335-476f-9977-560bccd009da</string>
- </map>
- <key>UIImgBtnRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
- </map>
- <key>UIImgBtnScrollDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
- </map>
- <key>UIImgBtnScrollDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
- </map>
- <key>UIImgBtnScrollLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
- </map>
- <key>UIImgBtnScrollLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
- </map>
- <key>UIImgBtnScrollRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
- </map>
- <key>UIImgBtnScrollRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
- </map>
- <key>UIImgBtnScrollUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
- </map>
- <key>UIImgBtnScrollUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
- </map>
- <key>UIImgBtnSlideLeftInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
- </map>
- <key>UIImgBtnSlideLeftOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>82476321-0374-4c26-9567-521535ab4cd7</string>
- </map>
- <key>UIImgBtnSlideRightInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
- </map>
- <key>UIImgBtnSlideRightOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
- </map>
- <key>UIImgBtnSpinDownInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
- </map>
- <key>UIImgBtnSpinDownOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
- </map>
- <key>UIImgBtnSpinUpInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
- </map>
- <key>UIImgBtnSpinUpOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>56576e6e-6710-4e66-89f9-471b59122794</string>
- </map>
- <key>UIImgBtnTabBottomInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
- </map>
- <key>UIImgBtnTabBottomOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
- </map>
- <key>UIImgBtnTabBottomPartialInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
- </map>
- <key>UIImgBtnTabBottomPartialOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
- </map>
- <key>UIImgBtnTabTopInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
- </map>
- <key>UIImgBtnTabTopOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
- </map>
- <key>UIImgBtnTabTopPartialInUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
- </map>
- <key>UIImgBtnTabTopPartialOutUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
- </map>
- <key>UIImgBtnTearOffActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
- </map>
- <key>UIImgBtnTearOffInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
- </map>
- <key>UIImgBtnTearOffPressedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
- </map>
- <key>UIImgCheckboxActiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
- </map>
- <key>UIImgCheckboxActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
- </map>
- <key>UIImgCheckboxInactiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
- </map>
- <key>UIImgCheckboxInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
- </map>
- <key>UIImgCreateSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
- </map>
- <key>UIImgCreateUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
- </map>
- <key>UIImgCrosshairsUUID</key>
- <map>
- <key>Comment</key>
- <string>Image to use for crosshair display (UUID texture reference)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
- </map>
- <key>UIImgDefaultEyesUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
- </map>
- <key>UIImgDefaultGlovesUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDefaultHairUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
- </map>
- <key>UIImgDefaultJacketUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDefaultPantsUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDefaultShirtUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDefaultShoesUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDefaultSkirtUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDefaultSocksUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDefaultUnderwearUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIImgDirectionArrowUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
- </map>
- <key>UIImgFaceSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
- </map>
- <key>UIImgFaceUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
- </map>
- <key>UIImgFocusSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
- </map>
- <key>UIImgFocusUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
- </map>
- <key>UIImgGrabSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
- </map>
- <key>UIImgGrabUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
- </map>
- <key>UIImgMoveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
- </map>
- <key>UIImgMoveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
- </map>
- <key>UIImgRadioActiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
- </map>
- <key>UIImgRadioActiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
- </map>
- <key>UIImgRadioInactiveSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
- </map>
- <key>UIImgRadioInactiveUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
- </map>
- <key>UIImgResizeBottomRightUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
- </map>
- <key>UIImgRotateSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
- </map>
- <key>UIImgRotateUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
- </map>
- <key>UIImgScaleSelectedUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
- </map>
- <key>UIImgScaleUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>88a90fef-b448-4883-9344-ecf378a60433</string>
- </map>
- <key>UIImgWhiteUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
- <key>UIScaleFactor</key>
- <map>
- <key>Comment</key>
- <string>Size of UI relative to default layout on 1024x768 screen</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1</real>
- </map>
- <key>UISndAlert</key>
- <map>
- <key>Comment</key>
- <string>Sound file for alerts (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
- </map>
- <key>UISndBadKeystroke</key>
- <map>
- <key>Comment</key>
- <string>Sound file for invalid keystroke (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
- </map>
- <key>UISndClick</key>
- <map>
- <key>Comment</key>
- <string>Sound file for mouse click (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
- </map>
- <key>UISndClickRelease</key>
- <map>
- <key>Comment</key>
- <string>Sound file for mouse button release (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
- </map>
- <key>UISndDebugSpamToggle</key>
- <map>
- <key>Comment</key>
- <string>Log UI sound effects as they are played</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UISndHealthReductionF</key>
- <map>
- <key>Comment</key>
- <string>Sound file for female pain (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
- </map>
- <key>UISndHealthReductionM</key>
- <map>
- <key>Comment</key>
- <string>Sound file for male pain (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>e057c244-5768-1056-c37e-1537454eeb62</string>
- </map>
- <key>UISndHealthReductionThreshold</key>
- <map>
- <key>Comment</key>
- <string>Amount of health reduction required to trigger &quot;pain&quot; sound</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>10</real>
- </map>
- <key>UISndInvalidOp</key>
- <map>
- <key>Comment</key>
- <string>Sound file for invalid operations (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
- </map>
- <key>UISndMoneyChangeDown</key>
- <map>
- <key>Comment</key>
- <string>Sound file for L$ balance increase (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
- </map>
- <key>UISndMoneyChangeThreshold</key>
- <map>
- <key>Comment</key>
- <string>Amount of change in L$ balance required to trigger &quot;money&quot; sound</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>50</real>
- </map>
- <key>UISndMoneyChangeUp</key>
- <map>
- <key>Comment</key>
- <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>77a018af-098e-c037-51a6-178f05877c6f</string>
- </map>
- <key>UISndNewIncomingIMSession</key>
- <map>
- <key>Comment</key>
- <string>Sound file for new instant message session(uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
- </map>
- <key>UISndObjectCreate</key>
- <map>
- <key>Comment</key>
- <string>Sound file for object creation (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
- </map>
- <key>UISndObjectDelete</key>
- <map>
- <key>Comment</key>
- <string>Sound file for object deletion (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
- </map>
- <key>UISndObjectRezIn</key>
- <map>
- <key>Comment</key>
- <string>Sound file for rezzing objects (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
- </map>
- <key>UISndObjectRezOut</key>
- <map>
- <key>Comment</key>
- <string>Sound file for derezzing objects (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>00000000-0000-0000-0000-000000000000</string>
- </map>
- <key>UISndPieMenuAppear</key>
- <map>
- <key>Comment</key>
- <string>Sound file for opening pie menu (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
- </map>
- <key>UISndPieMenuHide</key>
- <map>
- <key>Comment</key>
- <string>Sound file for closing pie menu (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>00000000-0000-0000-0000-000000000000</string>
- </map>
- <key>UISndPieMenuSliceHighlight0</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
- </map>
- <key>UISndPieMenuSliceHighlight1</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
- </map>
- <key>UISndPieMenuSliceHighlight2</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
- </map>
- <key>UISndPieMenuSliceHighlight3</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
- </map>
- <key>UISndPieMenuSliceHighlight4</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
- </map>
- <key>UISndPieMenuSliceHighlight5</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
- </map>
- <key>UISndPieMenuSliceHighlight6</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
- </map>
- <key>UISndPieMenuSliceHighlight7</key>
- <map>
- <key>Comment</key>
- <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
- </map>
- <key>UISndSnapshot</key>
- <map>
- <key>Comment</key>
- <string>Sound file for taking a snapshot (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
- </map>
- <key>UISndStartIM</key>
- <map>
- <key>Comment</key>
- <string>Sound file for starting a new IM session (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
- </map>
- <key>UISndTeleportOut</key>
- <map>
- <key>Comment</key>
- <string>Sound file for teleporting (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
- </map>
- <key>UISndTyping</key>
- <map>
- <key>Comment</key>
- <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
- </map>
- <key>UISndWindowClose</key>
- <map>
- <key>Comment</key>
- <string>Sound file for closing a window (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
- </map>
- <key>UISndWindowOpen</key>
- <map>
- <key>Comment</key>
- <string>Sound file for opening a window (uuid for sound asset)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
- </map>
- <key>UseAltKeyForMenus</key>
- <map>
- <key>Comment</key>
- <string>Access menus via keyboard by tapping Alt</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UseChatBubbles</key>
- <map>
- <key>Comment</key>
- <string>Show chat above avatars head in chat bubbles</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UseDebugLogin</key>
- <map>
- <key>Comment</key>
- <string>Provides extra control over which grid to connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UseDebugMenus</key>
- <map>
- <key>Comment</key>
- <string>Turns on &quot;Debug&quot; menu</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UseDefaultColorPicker</key>
- <map>
- <key>Comment</key>
- <string>Use color picker supplied by operating system</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UseEnergy</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>UseExternalBrowser</key>
- <map>
- <key>Comment</key>
- <string>Use default browser when opening web pages instead of in-world browser.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UseFreezeFrame</key>
- <map>
- <key>Comment</key>
- <string>Freeze time when taking snapshots.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UseOcclusion</key>
- <map>
- <key>Comment</key>
- <string>Enable object culling based on occlusion (coverage) by other objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>UseWebPagesOnPrims</key>
- <map>
- <key>Comment</key>
- <string>[NOT USED]</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UserConnectionPort</key>
- <map>
- <key>Comment</key>
- <string>Port that this client transmits on.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>UserLogFile</key>
- <map>
- <key>Comment</key>
- <string>User specified log file name.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>UserLoginInfo</key>
- <map>
- <key>Comment</key>
- <string>Users loging data.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>LLSD</string>
- <key>Value</key>
- <map />
- </map>
- <key>UserSettingsFile</key>
- <map>
- <key>Comment</key>
- <string>Persisted client settings file name (per user).</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>VFSOldSize</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>VFSSalt</key>
- <map>
- <key>Comment</key>
- <string>[DO NOT MODIFY] Controls local file caching behavior</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>VectorizeEnable</key>
- <map>
- <key>Comment</key>
- <string>Enable general vector operations and data alignment.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>VectorizePerfTest</key>
- <map>
- <key>Comment</key>
- <string>Test SSE/vectorization performance and choose fastest version.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>VectorizeProcessor</key>
- <map>
- <key>Comment</key>
- <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>VectorizeSkin</key>
- <map>
- <key>Comment</key>
- <string>Enable vector operations for avatar skinning.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>VelocityInterpolate</key>
- <map>
- <key>Comment</key>
- <string>Extrapolate object motion from last packet based on received velocity</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>VerboseLogs</key>
- <map>
- <key>Comment</key>
- <string>Display source file and line number for each log item for debugging purposes</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>VersionChannelName</key>
- <map>
- <key>Comment</key>
- <string>Versioning Channel Name.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Second Life Release</string>
- </map>
- <key>VertexShaderEnable</key>
- <map>
- <key>Comment</key>
- <string>Enable/disable all GLSL shaders (debug)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>VivoxDebugLevel</key>
- <map>
- <key>Comment</key>
- <string>Logging level to use when launching the vivox daemon</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>-1</string>
- </map>
- <key>VivoxDebugServerName</key>
- <map>
- <key>Comment</key>
- <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>bhd.vivox.com</string>
- </map>
- <key>VoiceCallsFriendsOnly</key>
- <map>
- <key>Comment</key>
- <string>Only accept voice calls from residents on your friends list</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>VoiceEarLocation</key>
- <map>
- <key>Comment</key>
- <string>Location of the virtual ear for voice</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>VoiceHost</key>
- <map>
- <key>Comment</key>
- <string>Client SLVoice host to connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>127.0.0.1</string>
- </map>
- <key>VoiceImageLevel0</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 0</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
- </map>
- <key>VoiceImageLevel1</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 1</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
- <key>VoiceImageLevel2</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 2</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
- <key>VoiceImageLevel3</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 3</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
- <key>VoiceImageLevel4</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 4</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
- <key>VoiceImageLevel5</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 5</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
- <key>VoiceImageLevel6</key>
- <map>
- <key>Comment</key>
- <string>Texture UUID for voice image level 6</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
- </map>
- <key>VoiceInputAudioDevice</key>
- <map>
- <key>Comment</key>
- <string>Audio input device to use for voice</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Default</string>
- </map>
- <key>VoiceOutputAudioDevice</key>
- <map>
- <key>Comment</key>
- <string>Audio output device to use for voice</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>Default</string>
- </map>
- <key>VoicePort</key>
- <map>
- <key>Comment</key>
- <string>Client SLVoice port to connect to</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>44124</integer>
- </map>
- <key>WarnAboutBadPCI</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutBadPCI warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnAboutDirectX9</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutDirectX9 warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnAboutOldGraphicsDriver</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutOldGraphicsDriver warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnAboutPCIGraphics</key>
- <map>
- <key>Comment</key>
- <string>Enables AboutPCIGraphics warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnBrowserLaunch</key>
- <map>
- <key>Comment</key>
- <string>Enables BrowserLaunch warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnDeedObject</key>
- <map>
- <key>Comment</key>
- <string>Enables DeedObject warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstAppearance</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstAppearance warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstAttach</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstAttach warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstBalanceDecrease</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBalanceDecrease warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstBalanceIncrease</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBalanceIncrease warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstBuild</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstBuild warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstDebugMenus</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstDebugMenus warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstFlexible</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstFlexible warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstGoTo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstGoTo warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstInventory</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstInventory warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstLeftClickNoHit</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstLeftClickNoHit warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstMap</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstMap warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstOverrideKeys</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstOverrideKeys warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstSandbox</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSandbox warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstSculptedPrim</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSculptedPrim warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstSit</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstSit warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstStreamingMusic</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingMusic warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstStreamingVideo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingVideo warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstTeleport</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstTeleport warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnFirstVoice</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstVoice warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnNewClassified</key>
- <map>
- <key>Comment</key>
- <string>Enables NewClassified warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnQuickTimeInstalled</key>
- <map>
- <key>Comment</key>
- <string>Enables QuickTimeInstalled warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WarnReturnToOwner</key>
- <map>
- <key>Comment</key>
- <string>Enables ReturnToOwner warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WindLightUseAtmosShaders</key>
- <map>
- <key>Comment</key>
- <string>Whether to enable or disable WindLight atmospheric shaders.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WindowHeight</key>
- <map>
- <key>Comment</key>
- <string>SL viewer window height</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>700</integer>
- </map>
- <key>WindowMaximized</key>
- <map>
- <key>Comment</key>
- <string>SL viewer window maximized on login</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WindowWidth</key>
- <map>
- <key>Comment</key>
- <string>SL viewer window width</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1000</integer>
- </map>
- <key>WindowX</key>
- <map>
- <key>Comment</key>
- <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
- <key>WindowY</key>
- <map>
- <key>Comment</key>
- <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>10</integer>
- </map>
- <key>WLSkyDetail</key>
- <map>
- <key>Comment</key>
- <string>Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>64</integer>
- </map>
- <key>XferThrottle</key>
- <map>
- <key>Comment</key>
- <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>150000</real>
- </map>
- <key>YawFromMousePosition</key>
- <map>
- <key>Comment</key>
- <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>90</real>
- </map>
- <key>YieldTime</key>
- <map>
- <key>Comment</key>
- <string>Yield some time to the local host.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>-1</integer>
- </map>
- <key>ZoomTime</key>
- <map>
- <key>Comment</key>
- <string>Time of transition between different camera modes (seconds)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.4000000059604644775390625</real>
- </map>
- <key>llOwnerSayChatColor</key>
- <map>
- <key>Comment</key>
- <string>Color of chat messages from objects only visible to the owner</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.9900000095367431640625</real>
- <real>0.9900000095367431640625</real>
- <real>0.689999997615814208984375</real>
- <real>1</real>
- </array>
- </map>
- <key>ParcelMediaAutoPlayEnable</key>
- <map>
- <key>Comment</key>
- <string>Auto play parcel media when available</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>particlesbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight particle generators</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>physicalbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight physical objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>renderbeacons</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight particle generators</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>renderhighlights</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight scripted objects with touch function</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>scriptsbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight scripted objects</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>scripttouchbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight scripted objects with touch function</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>soundsbeacon</key>
- <map>
- <key>Comment</key>
- <string>Beacon / Highlight sound generators</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>SkyEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the sky defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>WaterGLFogDepthFloor</key>
- <map>
- <key>Comment</key>
- <string>Controls how dark water gl fog can get</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.25</real>
- </map>
- <key>WaterGLFogDepthScale</key>
- <map>
- <key>Comment</key>
- <string>Controls how quickly gl fog gets dark under water</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>50.0</real>
- </map>
- <key>WaterGLFogDensityScale</key>
- <map>
- <key>Comment</key>
- <string>Maps shader water fog density to gl fog density</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.02</real>
- </map>
- <key>EnableRippleWater</key>
- <map>
- <key>Comment</key>
- <string>Whether to use ripple water shader or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>WaterEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the water defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>FloaterEnvRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Environment Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>150</integer>
- <integer>650</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterAdvancedSkyRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Advanced Sky Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>220</integer>
- <integer>450</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterDayCycleRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Day Cycle Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>450</integer>
- <integer>300</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>FloaterAdvancedWaterRect</key>
- <map>
- <key>Comment</key>
- <string>Rectangle for Advanced Water Editor</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Rect</string>
- <key>Value</key>
- <array>
- <integer>50</integer>
- <integer>220</integer>
- <integer>450</integer>
- <integer>0</integer>
- </array>
- </map>
- <key>AlertedUnsupportedHardware</key>
- <map>
- <key>Comment</key>
- <string>Toggle that lets us tell the user he's on old hardware only once</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>RenderFastAlpha</key>
- <map>
- <key>Comment</key>
- <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- </map>
-</llsd>
diff --git a/indra/newview/app_settings/settings_crash_behavior.xml b/indra/newview/app_settings/settings_crash_behavior.xml
deleted file mode 100644
index cc7f5ac88b..0000000000
--- a/indra/newview/app_settings/settings_crash_behavior.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<llsd>
- <map>
- <key>CrashSubmitBehavior</key>
- <map>
- <key>Comment</key>
- <string>Controls behavior when viewer crashes (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- </map>
-</llsd>
diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml
deleted file mode 100644
index 997bb0c33c..0000000000
--- a/indra/newview/app_settings/settings_files.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<llsd>
- <map>
- <key>Files</key>
- <map>
- <key>Comment</key>
- <string>List of settings files to load. Key is the identifier, value is the filename</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>LLSD</string>
- <key>Value</key>
- <map>
- <key>Global</key>
- <string>settings.xml</string>
- <key>PerAccount</key>
- <string>settings_per_account.xml</string>
- <key>CrashSettings</key>
- <string>settings_crash_behavior.xml</string>
- </map>
- </map>
- </map>
-</llsd>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
deleted file mode 100644
index 90c7b11637..0000000000
--- a/indra/newview/app_settings/settings_per_account.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<llsd>
- <map>
- <key>BusyModeResponse</key>
- <map>
- <key>Comment</key>
- <string>Auto response to instant messages while in busy mode.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.</string>
- </map>
- <key>IMLogTimestamp</key>
- <map>
- <key>Comment</key>
- <string>Log Timestamp of Instant Messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>InstantMessageLogPath</key>
- <map>
- <key>Comment</key>
- <string>Path to your log files.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string />
- </map>
- <key>LastLogoff</key>
- <map>
- <key>Comment</key>
- <string>Last logoff</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LogChat</key>
- <map>
- <key>Comment</key>
- <string>Log Chat</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LogChatIM</key>
- <map>
- <key>Comment</key>
- <string>Log Incoming Instant Messages with Chat</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LogChatTimestamp</key>
- <map>
- <key>Comment</key>
- <string>Log Timestamp of Chat</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>LogInstantMessages</key>
- <map>
- <key>Comment</key>
- <string>Log Instant Messages</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>LogShowHistory</key>
- <map>
- <key>Comment</key>
- <string>Log Show History</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>LogTimestampDate</key>
- <map>
- <key>Comment</key>
- <string>Include Date with Timestamp</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- </map>
-</llsd>
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index 2fe23c9a51..420f0811ff 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -917,19 +917,19 @@ Function .onInit
; generate language ID that will be used as a command line arg
StrCmp $LANGUAGE "1042" 0 +3
- StrCpy $LANGFLAGS " --set SystemLanguage ko"
+ StrCpy $LANGFLAGS " -set SystemLanguage ko"
Goto EndOfFunc
StrCmp $LANGUAGE "1041" 0 +3
- StrCpy $LANGFLAGS " --set SystemLanguage ja"
+ StrCpy $LANGFLAGS " -set SystemLanguage ja"
Goto EndOfFunc
StrCmp $LANGUAGE "1031" 0 +3
- StrCpy $LANGFLAGS " --set SystemLanguage de"
+ StrCpy $LANGFLAGS " -set SystemLanguage de"
Goto EndOfFunc
StrCmp $LANGUAGE "1033" 0 +3
- StrCpy $LANGFLAGS " --set SystemLanguage en-us"
+ StrCpy $LANGFLAGS " -set SystemLanguage en-us"
Goto EndOfFunc
EndOfFunc:
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 4dab653d19..ac92ee8525 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -273,7 +273,8 @@ void LLAgentFriendObserver::changed(U32 mask)
// LLAgent()
//-----------------------------------------------------------------------------
LLAgent::LLAgent()
-: mDrawDistance( DEFAULT_FAR_PLANE ),
+: mViewerPort(NET_USE_OS_ASSIGNED_PORT),
+ mDrawDistance( DEFAULT_FAR_PLANE ),
mDoubleTapRunTimer(),
mDoubleTapRunMode(DOUBLETAP_NONE),
@@ -454,6 +455,8 @@ void LLAgent::init()
mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject");
// LLDebugVarMessageBox::show("Camera Lag", &CAMERA_FOCUS_HALF_LIFE, 0.5f, 0.01f);
+ gSavedSettings.getControl("RenderHideGroupTitle")->addListener(&mHideGroupTitleListener);
+ gSavedSettings.getControl("EffectColor")->addListener(&mEffectColorListener);
mEffectColor = gSavedSettings.getColor4("EffectColor");
@@ -7463,6 +7466,19 @@ void LLAgent::userRemoveAllAttachments( void* userdata )
gMessageSystem->sendReliable( gAgent.getRegionHost() );
}
+bool LLAgent::LLHideGroupTitleListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata)
+{
+ gAgent.setHideGroupTitle(event->getValue());
+ return true;
+
+}
+
+bool LLAgent::LLEffectColorListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata)
+{
+ gAgent.setEffectColor(LLColor4(event->getValue()));
+ return true;
+}
+
void LLAgent::observeFriends()
{
if(!mFriendObserver)
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 50830a75f0..469d2e4fe0 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -36,7 +36,6 @@
#include "indra_constants.h"
#include "llmath.h"
-#include "llcontrol.h"
#include "llcoordframe.h"
#include "llevent.h"
#include "llagentconstants.h"
@@ -226,8 +225,8 @@ public:
// update internal datastructures and update the server with the
// new contribution level. Returns true if the group id was found
// and contribution could be set.
- BOOL setGroupContribution(const LLUUID& group_id, S32 contribution);
- BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile);
+ BOOL setGroupContribution(const LLUUID& group_id, S32 contribution);
+ BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile);
void setHideGroupTitle(BOOL hide) { mHideGroupTitle = hide; }
//
@@ -687,6 +686,7 @@ protected:
BOOL notify = TRUE);
public:
// TODO: Make these private!
+ U32 mViewerPort; // Port this agent transmits on.
LLUUID mSecureSessionID; // secure token for this login session
F32 mDrawDistance;
@@ -932,6 +932,21 @@ private:
LLPointer<LLRefCount> mCB;
};
+ //control listeners
+ class LLHideGroupTitleListener: public LLSimpleListener
+ {
+ public:
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata);
+ };
+
+ class LLEffectColorListener: public LLSimpleListener
+ {
+ public:
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata);
+ };
+
+ LLHideGroupTitleListener mHideGroupTitleListener;
+ LLEffectColorListener mEffectColorListener;
LLFriendObserver* mFriendObserver;
};
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ffa2a82646..8c7af9ebf7 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -62,13 +62,10 @@
#include "llmutelist.h"
#include "llurldispatcher.h"
#include "llurlhistory.h"
-#include "llfirstuse.h"
#include "llweb.h"
#include "llsecondlifeurls.h"
-#include <boost/bind.hpp>
-
#if LL_WINDOWS
#include "llwindebug.h"
#endif
@@ -156,7 +153,10 @@
#include "llinventoryview.h"
-#include "llcommandlineparser.h"
+// *FIX: Remove these once the command line params thing is figured out.
+// Yuck!
+static int gTempArgC = 0;
+static char** gTempArgV;
// *FIX: These extern globals should be cleaned up.
// The globals either represent state/config/resource-storage of either
@@ -169,6 +169,7 @@
//----------------------------------------------------------------------------
// llviewernetwork.h
#include "llviewernetwork.h"
+// extern EGridInfo gGridChoice;
////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor
@@ -215,8 +216,14 @@ extern BOOL gPeriodicSlowFrame;
////////////////////////////////////////////////////////////
// All from the last globals push...
+bool gVerifySSLCert = true;
BOOL gHandleKeysAsync = FALSE;
+BOOL gProbeHardware = TRUE; // Use DirectX 9 to probe for hardware
+
+S32 gYieldMS = 0; // set in parse_args, used in mainLoop
+BOOL gYieldTime = FALSE;
+
const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard
F32 gSimLastTime; // Used in LLAppViewer::init and send_stats()
@@ -227,10 +234,21 @@ LLString gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle
BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally
BOOL gAllowIdleAFK = TRUE;
+F32 gAFKTimeout = DEFAULT_AFK_TIMEOUT;
BOOL gShowObjectUpdates = FALSE;
+BOOL gLogMessages = FALSE;
+std::string gChannelName = LL_CHANNEL;
+BOOL gUseAudio = TRUE;
BOOL gUseQuickTime = TRUE;
+LLString gCmdLineFirstName;
+LLString gCmdLineLastName;
+LLString gCmdLinePassword;
+
+BOOL gAutoLogin = FALSE;
const char* DEFAULT_SETTINGS_FILE = "settings.xml";
+BOOL gRequestInventoryLibrary = TRUE;
+BOOL gGodConnect = FALSE;
BOOL gAcceptTOS = FALSE;
BOOL gAcceptCriticalMessage = FALSE;
@@ -261,6 +279,7 @@ F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
LLUUID gInventoryLibraryOwner;
LLUUID gInventoryLibraryRoot;
+BOOL gDisableVoice = FALSE;
BOOL gDisconnected = FALSE;
// Map scale in pixels per region
@@ -272,11 +291,17 @@ LLFrameTimer gRestoreGLTimer;
BOOL gRestoreGL = FALSE;
BOOL gUseWireframe = FALSE;
+F32 gMouseSensitivity = 3.f;
+BOOL gInvertMouse = FALSE;
+
// VFS globals - see llappviewer.h
LLVFS* gStaticVFS = NULL;
LLMemoryInfo gSysMemory;
+bool gPreloadImages = true;
+bool gPreloadSounds = true;
+
LLString gLastVersionChannel;
LLVector3 gWindVec(3.0, 3.0, 0.0);
@@ -286,14 +311,34 @@ U32 gPacketsIn = 0;
BOOL gPrintMessagesThisFrame = FALSE;
+BOOL gUseConsole = TRUE;
+
BOOL gRandomizeFramerate = FALSE;
BOOL gPeriodicSlowFrame = FALSE;
+BOOL gQAMode = FALSE;
BOOL gLLErrorActivated = FALSE;
+
////////////////////////////////////////////////////////////
// Internal globals... that should be removed.
+static F32 gQuitAfterSeconds = 0.f;
+static BOOL gRotateRight = FALSE;
+static BOOL gIgnorePixelDepth = FALSE;
+
+// Allow multiple viewers in ReleaseForDownload
+#if LL_RELEASE_FOR_DOWNLOAD
+static BOOL gMultipleViewersOK = FALSE;
+#else
+static BOOL gMultipleViewersOK = TRUE;
+#endif
+
+static std::map<std::string, std::string> gCommandLineSettings;
+static std::map<std::string, std::string> gCommandLineForcedSettings;
+
static LLString gArgs;
+static LLString gOldSettingsFileName;
+static const char* LEGACY_DEFAULT_SETTINGS_FILE = "settings.ini";
const char* MARKER_FILE_NAME = "SecondLife.exec_marker";
const char* ERROR_MARKER_FILE_NAME = "SecondLife.error_marker";
const char* LLERROR_MARKER_FILE_NAME = "SecondLife.llerror_marker";
@@ -315,10 +360,52 @@ std::string gLoginPage;
std::vector<std::string> gLoginURIs;
static std::string gHelperURI;
+static const char USAGE[] = "\n"
+"usage:\tviewer [options]\n"
+"options:\n"
+" -login <first> <last> <password> log in as a user\n"
+" -autologin log in as last saved user\n"
+" -loginpage <URL> login authentication page to use\n"
+" -loginuri <URI> login server and CGI script to use\n"
+" -helperuri <URI> helper web CGI prefix to use\n"
+" -settings <filename> specify the filename of a\n"
+" configuration file\n"
+" default is settings.xml\n"
+" -setdefault <variable> <value> specify the value of a particular\n"
+" configuration variable which can be\n"
+" overridden by settings.xml\n"
+" -set <variable> <value> specify the value of a particular\n"
+" configuration variable that\n"
+" overrides all other settings\n"
+#if !LL_RELEASE_FOR_DOWNLOAD
+" -sim <simulator_ip> specify the simulator ip address\n"
+#endif
+" -god log in as god if you have god access\n"
+" -purge delete files in cache\n"
+" -safe reset preferences, run in safe mode\n"
+" -noutc logs in local time, not UTC\n"
+" -nothread run vfs in single thread\n"
+" -noinvlib Do not request inventory library\n"
+" -multiple allow multiple viewers\n"
+" -nomultiple block multiple viewers\n"
+" -novoice disable voice\n"
+" -ignorepixeldepth ignore pixel depth settings\n"
+" -cooperative [ms] yield some idle time to local host\n"
+" -skin ui/branding skin folder to use\n"
+#if LL_WINDOWS
+" -noprobe disable hardware probe\n"
+#endif
+" -noquicktime disable QuickTime movies, speeds startup\n"
+" -nopreload don't preload UI images or sounds, speeds startup\n"
+// these seem to be unused
+//" -noenv turn off environmental effects\n"
+//" -proxy <proxy_ip> specify the proxy ip address\n"
+"\n";
+
void idle_afk_check()
{
// check idle timers
- if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout")))
+ if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gAFKTimeout))
{
gAgent.setAFK();
}
@@ -357,7 +444,7 @@ void request_initial_instant_messages()
// Use these strictly for things that are constructed at startup,
// or for things that are performance critical. JC
-static void settings_to_globals()
+static void saved_settings_to_globals()
{
LLBUTTON_H_PAD = gSavedSettings.getS32("ButtonHPad");
LLBUTTON_V_PAD = gSavedSettings.getS32("ButtonVPad");
@@ -395,15 +482,15 @@ static void settings_to_globals()
gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK");
+ gAFKTimeout = gSavedSettings.getF32("AFKTimeout");
+ gMouseSensitivity = gSavedSettings.getF32("MouseSensitivity");
+ gInvertMouse = gSavedSettings.getBOOL("InvertMouse");
gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
gMapScale = gSavedSettings.getF32("MapScale");
gMiniMapScale = gSavedSettings.getF32("MiniMapScale");
gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard");
LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips");
-}
-static void settings_modify()
-{
LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderUseFBO");
LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors");
LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
@@ -445,74 +532,367 @@ static void settings_modify()
// propagate push to talk preference to current status
gSavedSettings.setBOOL("PTTCurrentlyEnabled", gSavedSettings.getBOOL("EnablePushToTalk"));
+
+ settings_setup_listeners();
+
+ // gAgent.init() also loads from saved settings.
}
-void initGridChoice()
+int parse_args(int argc, char **argv)
{
- LLString gridChoice = gSavedSettings.getString("GridChoice");
- if(!gridChoice.empty())
+ // Sometimes IP addresses passed in on the command line have leading
+ // or trailing white space. Use LLString to clean that up.
+ LLString ip_string;
+ S32 j;
+
+ for (j = 1; j < argc; j++)
+ {
// Used to show first chunk of each argument passed in the
// window title.
- {
- // find the grid choice from the user setting.
- int gridIndex = GRID_INFO_NONE;
- for(;gridIndex < GRID_INFO_OTHER; ++gridIndex )
- {
- if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str()))
- {
- gGridChoice = (EGridInfo)gridIndex;
-
- if(GRID_INFO_LOCAL == gGridChoice)
- {
- gGridName = LOOPBACK_ADDRESS_STRING;
- break;
- }
- else
- {
- gGridName = gGridInfo[gGridChoice].mName;
- break;
- }
- }
- }
-
- if(GRID_INFO_OTHER == gridIndex)
- {
- // *FIX:MEP Can and should we validate that this is an IP address?
- gGridChoice = (EGridInfo)gridIndex;
- gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str());
-
- }
- }
+ gArgs += argv[j];
+ gArgs += " ";
+ LLString argument = argv[j];
+ if ((!strcmp(argv[j], "-port")) && (++j < argc))
+ {
+ sscanf(argv[j], "%u", &(gAgent.mViewerPort));
+ }
+ else if ((!strcmp(argv[j], "-drop")) && (++j < argc))
+ {
+ sscanf(argv[j], "%f", &gPacketDropPercentage);
+ }
+ else if ((!strcmp(argv[j], "-inbw")) && (++j < argc))
+ {
+ sscanf(argv[j], "%f", &gInBandwidth);
+ }
+ else if ((!strcmp(argv[j], "-outbw")) && (++j < argc))
+ {
+ sscanf(argv[j], "%f", &gOutBandwidth);
+ }
+ else if (!strcmp(argv[j], "--aditi"))
+ {
+ gGridChoice = GRID_INFO_ADITI;
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--agni"))
+ {
+ gGridChoice = GRID_INFO_AGNI;
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--aruna"))
+ {
+ gGridChoice = GRID_INFO_ARUNA;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--durga"))
+ {
+ gGridChoice = GRID_INFO_DURGA;
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--ganga"))
+ {
+ gGridChoice = GRID_INFO_GANGA;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--mitra"))
+ {
+ gGridChoice = GRID_INFO_MITRA;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--mohini"))
+ {
+ gGridChoice = GRID_INFO_MOHINI;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--nandi"))
+ {
+ gGridChoice = GRID_INFO_NANDI;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--radha"))
+ {
+ gGridChoice = GRID_INFO_RADHA;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--ravi"))
+ {
+ gGridChoice = GRID_INFO_RAVI;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--siva"))
+ {
+ gGridChoice = GRID_INFO_SIVA;
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--shakti"))
+ {
+ gGridChoice = GRID_INFO_SHAKTI;
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--soma"))
+ {
+ gGridChoice = GRID_INFO_SOMA;
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--uma"))
+ {
+ gGridChoice = GRID_INFO_UMA;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--vaak"))
+ {
+ gGridChoice = GRID_INFO_VAAK;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "--yami"))
+ {
+ gGridChoice = GRID_INFO_YAMI;
+ sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
+ }
+ else if (!strcmp(argv[j], "-loginpage") && (++j < argc))
+ {
+ LLAppViewer::instance()->setLoginPage(utf8str_trim(argv[j]));
+ }
+ else if (!strcmp(argv[j], "-loginuri") && (++j < argc))
+ {
+ LLAppViewer::instance()->addLoginURI(utf8str_trim(argv[j]));
+ }
+ else if (!strcmp(argv[j], "-helperuri") && (++j < argc))
+ {
+ LLAppViewer::instance()->setHelperURI(utf8str_trim(argv[j]));
+ }
+ else if (!strcmp(argv[j], "-debugviews"))
+ {
+ LLView::sDebugRects = TRUE;
+ }
+ else if (!strcmp(argv[j], "-skin") && (++j < argc))
+ {
+ std::string folder(argv[j]);
+ gDirUtilp->setSkinFolder(folder);
+ }
+ else if (!strcmp(argv[j], "-autologin") || !strcmp(argv[j], "--autologin")) // keep --autologin for compatibility
+ {
+ gAutoLogin = TRUE;
+ }
+ else if (!strcmp(argv[j], "-quitafter") && (++j < argc))
+ {
+ gQuitAfterSeconds = (F32)atof(argv[j]);
+ }
+ else if (!strcmp(argv[j], "-rotate"))
+ {
+ gRotateRight = TRUE;
+ }
+// else if (!strcmp(argv[j], "-noenv"))
+// {
+ //turn OFF environmental effects for slow machines/video cards
+// gRequestParaboloidMap = FALSE;
+// }
+ else if (!strcmp(argv[j], "-noaudio"))
+ {
+ gUseAudio = FALSE;
+ }
+ else if (!strcmp(argv[j], "-nosound")) // tends to be popular cmdline on Linux.
+ {
+ gUseAudio = FALSE;
+ }
+ else if (!strcmp(argv[j], "-noprobe"))
+ {
+ gProbeHardware = FALSE;
+ }
+ else if (!strcmp(argv[j], "-noquicktime"))
+ {
+ // Developers can log in faster if they don't load all the
+ // quicktime dlls.
+ gUseQuickTime = false;
+ }
+ else if (!strcmp(argv[j], "-nopreload"))
+ {
+ // Developers can log in faster if they don't decode sounds
+ // or images on startup, ~5 seconds faster.
+ gPreloadSounds = false;
+ gPreloadImages = false;
+ }
+ else if (!strcmp(argv[j], "-purge"))
+ {
+ LLAppViewer::instance()->purgeCache();
+ }
+ else if(!strcmp(argv[j], "-noinvlib"))
+ {
+ gRequestInventoryLibrary = FALSE;
+ }
+ else if (!strcmp(argv[j], "-log"))
+ {
+ gLogMessages = TRUE;
+ continue;
+ }
+ else if (!strcmp(argv[j], "-logfile") && (++j < argc))
+ {
+ // *NOTE: This buffer size is hard coded into scanf() below.
+ char logfile[256]; // Flawfinder: ignore
+ sscanf(argv[j], "%255s", logfile); // Flawfinder: ignore
+ llinfos << "Setting log file to " << logfile << llendl;
+ LLFile::remove(logfile);
+ LLError::logToFile(logfile);
+ }
+ else if (!strcmp(argv[j], "-settings") && (++j < argc))
+ {
+ gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, argv[j]);
+ }
+ else if (!strcmp(argv[j], "-setdefault") && (j + 2 < argc))
+ {
+ std::string control_name;
+ std::string control_value;
+
+ j++;
+ if (argv[j]) control_name = std::string(argv[j]);
-#if !LL_RELEASE_FOR_DOWNLOAD
- if (gGridChoice == GRID_INFO_NONE)
- {
- // Development version: load last server choice by default (overridden by cmd line args)
- S32 server = gSavedSettings.getS32("ServerChoice");
- if (server != 0)
- gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
- if (server == GRID_INFO_OTHER)
+ j++;
+ if (argv[j]) control_value = std::string(argv[j]);
+
+ // grab control name and value
+ if (!control_name.empty())
+ {
+ gCommandLineSettings[control_name] = control_value;
+ }
+ }
+ else if (!strcmp(argv[j], "-set") && (j + 2 < argc))
{
- LLString custom_server = gSavedSettings.getString("CustomServer");
- if (custom_server.empty())
+ std::string control_name;
+ std::string control_value;
+
+ j++;
+ if (argv[j]) control_name = std::string(argv[j]);
+
+ j++;
+ if (argv[j]) control_value = std::string(argv[j]);
+
+ // grab control name and value
+ if (!control_name.empty())
{
- gGridName = "none";
+ gCommandLineForcedSettings[control_name] = control_value;
+ }
+ }
+ else if (!strcmp(argv[j], "-login"))
+ {
+ if (j + 3 < argc)
+ {
+ j++;
+ gCmdLineFirstName = argv[j];
+ j++;
+ gCmdLineLastName = argv[j];
+ j++;
+ gCmdLinePassword = argv[j];
}
else
{
- gGridName = custom_server.c_str();
+ // only works if -login is last parameter on command line
+ llerrs << "Not enough parameters to -login. Did you mean -loginuri?" << llendl;
}
}
- gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mName);
- }
+ else if (!strcmp(argv[j], "-god"))
+ {
+ gGodConnect = TRUE;
+ }
+ else if (!strcmp(argv[j], "-noconsole"))
+ {
+ gUseConsole = FALSE;
+ }
+ else if (!strcmp(argv[j], "-safe"))
+ {
+ llinfos << "Setting viewer feature table to run in safe mode, resetting prefs" << llendl;
+ gFeatureManagerp->setSafe(TRUE);
+ }
+ else if (!strcmp(argv[j], "-multiple"))
+ {
+ gMultipleViewersOK = TRUE;
+ }
+ else if (!strcmp(argv[j], "-nomultiple"))
+ {
+ gMultipleViewersOK = FALSE;
+ }
+ else if (!strcmp(argv[j], "-novoice"))
+ {
+ gDisableVoice = TRUE;
+ }
+ else if (!strcmp(argv[j], "-nothread"))
+ {
+ LLVFile::ALLOW_ASYNC = FALSE;
+ llinfos << "Running VFS in nothread mode" << llendl;
+ }
+ // some programs don't respect the command line options in protocol handlers (I'm looking at you, Opera)
+ // so this allows us to parse the URL straight off the command line without a "-url" paramater
+ else if (LLURLDispatcher::isSLURL(argv[j])
+ || !strcmp(argv[j], "-url") && (++j < argc))
+ {
+ std::string slurl = argv[j];
+ if (LLURLDispatcher::isSLURLCommand(slurl))
+ {
+ LLStartUp::sSLURLCommand = slurl;
+ }
+ else
+ {
+ LLURLSimString::setString(slurl);
+ }
+ // *NOTE: After setting the url, bail. What can happen is
+ // that someone can use IE (or potentially other browsers)
+ // and do the rough equivalent of command injection and
+ // steal passwords. Phoenix. SL-55321
+ return 0;
+ }
+ else if (!strcmp(argv[j], "-ignorepixeldepth"))
+ {
+ gIgnorePixelDepth = TRUE;
+ }
+ else if (!strcmp(argv[j], "-cooperative"))
+ {
+ S32 ms_to_yield = 0;
+ if(++j < argc)
+ {
+ S32 rv = sscanf(argv[j], "%d", &ms_to_yield);
+ if(0 == rv)
+ {
+ --j;
+ }
+ }
+ else
+ {
+ --j;
+ }
+ gYieldMS = ms_to_yield;
+ gYieldTime = TRUE;
+ }
+ else if (!strcmp(argv[j], "-no-verify-ssl-cert"))
+ {
+ gVerifySSLCert = false;
+ }
+ else if ( (!strcmp(argv[j], "--channel") || !strcmp(argv[j], "-channel")) && (++j < argc))
+ {
+ gChannelName = argv[j];
+ }
+#if LL_DARWIN
+ else if (!strncmp(argv[j], "-psn_", 5))
+ {
+ // this is the Finder passing the process session number
+ // we ignore this
+ }
#endif
+ else if(!strncmp(argv[j], "-qa", 3))
+ {
+ gQAMode = TRUE;
+ }
+ else
+ {
- if (gGridChoice == GRID_INFO_NONE)
- {
- gGridChoice = GridDefaultChoice;
- gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mName);
+ // DBC - Mac OS X passes some stuff by default on the command line (e.g. psn).
+ // Second Life URLs are passed this way as well?
+ llwarns << "Possible unknown keyword " << argv[j] << llendl;
+
+ // print usage information
+ llinfos << USAGE << llendl;
+ // return 1;
+ }
}
+ return 0;
}
bool send_url_to_other_instance(const std::string& url)
@@ -558,12 +938,11 @@ LLAppViewer::LLAppViewer() :
mReportedCrash(false),
mNumSessions(0),
mPurgeCache(false),
- mPurgeOnExit(false),
- mSecondInstance(false),
+ mPurgeOnExit(false),
+ mSecondInstance(false),
mSavedFinalSnapshot(false),
- mQuitRequested(false),
- mLogoutRequestSent(false),
- mYieldTime(-1)
+ mQuitRequested(false),
+ mLogoutRequestSent(false)
{
if(NULL != sInstance)
{
@@ -579,6 +958,13 @@ LLAppViewer::~LLAppViewer()
removeMarkerFile();
}
+bool LLAppViewer::tempStoreCommandOptions(int argc, char** argv)
+{
+ gTempArgC = argc;
+ gTempArgV = argv;
+ return true;
+}
+
bool LLAppViewer::init()
{
// *NOTE:Mani - LLCurl::initClass is not thread safe.
@@ -587,6 +973,7 @@ bool LLAppViewer::init()
initThreads();
+ initEarlyConfiguration();
//
// Start of the application
@@ -606,24 +993,61 @@ bool LLAppViewer::init()
//
// OK to write stuff to logs now, we've now crash reported if necessary
//
- if (!initConfiguration())
- return false;
- writeSystemInfo();
+ // Set up some defaults...
+ gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE);
+ gOldSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, LEGACY_DEFAULT_SETTINGS_FILE);
- // Build a string representing the current version number.
- gCurrentVersion = llformat("%s %d.%d.%d.%d",
- gSavedSettings.getString("VersionChannelName").c_str(),
- LL_VERSION_MAJOR,
- LL_VERSION_MINOR,
- LL_VERSION_PATCH,
- LL_VERSION_BUILD );
+ if (!initConfiguration())
+ return false;
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// *FIX: The following code isn't grouped into functions yet.
+
+ //
+ // Write system information into the debug log (CPU, OS, etc.)
+ //
+ writeSystemInfo();
+
+ // Build a string representing the current version number.
+ gCurrentVersion = llformat("%s %d.%d.%d.%d", gChannelName.c_str(), LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VERSION_BUILD );
+
+ //
+ // Merge with the command line overrides
+ gSavedSettings.applyOverrides(gCommandLineSettings);
+
+ // Need to do this before calling parseAlerts
+ gUICtrlFactory = new LLViewerUICtrlFactory();
+
+ // Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/)
+ // Do this *before* loading the settings file
+ LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
+
+ // Overwrite default settings with user settings
+ llinfos << "Loading configuration file " << gSettingsFileName << llendl;
+ if (0 == gSavedSettings.loadFromFile(gSettingsFileName))
+ {
+ llinfos << "Failed to load settings from " << gSettingsFileName << llendl;
+ llinfos << "Loading legacy settings from " << gOldSettingsFileName << llendl;
+ gSavedSettings.loadFromFileLegacy(gOldSettingsFileName);
+ }
+
+ // need to do this here - need to have initialized global settings first
+ LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
+ if ( nextLoginLocation.length() )
+ {
+ LLURLSimString::setString( nextLoginLocation.c_str() );
+ };
+
+ // Merge with the command line overrides
+ gSavedSettings.applyOverrides(gCommandLineForcedSettings);
+
+ gLastRunVersion = gSavedSettings.getString("LastRunVersion");
+
+ fixup_settings();
// Get the single value from the crash settings file, if it exists
std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
@@ -663,25 +1087,56 @@ bool LLAppViewer::init()
{
LLError::setPrintLocation(true);
}
+
+#if !LL_RELEASE_FOR_DOWNLOAD
+ if (gGridChoice == GRID_INFO_NONE)
+ {
+ // Development version: load last server choice by default (overridden by cmd line args)
+
+ S32 server = gSavedSettings.getS32("ServerChoice");
+ if (server != 0)
+ gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
+ if (server == GRID_INFO_OTHER)
+ {
+ LLString custom_server = gSavedSettings.getString("CustomServer");
+ if (custom_server.empty())
+ {
+ snprintf(gGridName, MAX_STRING, "none"); /* Flawfinder: ignore */
+ }
+ else
+ {
+ snprintf(gGridName, MAX_STRING, "%s", custom_server.c_str()); /* Flawfinder: ignore */
+ }
+ }
+ }
+#endif
+
+ if (gGridChoice == GRID_INFO_NONE)
+ {
+ gGridChoice = GridDefaultChoice;
+ }
// Load art UUID information, don't require these strings to be declared in code.
LLString viewer_art_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"viewerart.xml");
llinfos << "Loading art table from " << viewer_art_filename << llendl;
- gViewerArt.loadFromFileLegacy(viewer_art_filename.c_str(), FALSE);
+ gViewerArt.loadFromFile(viewer_art_filename.c_str(), FALSE);
LLString textures_filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "textures", "textures.xml");
llinfos << "Loading art table from " << textures_filename << llendl;
- gViewerArt.loadFromFileLegacy(textures_filename.c_str(), FALSE);
+ gViewerArt.loadFromFile(textures_filename.c_str(), FALSE);
LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml");
llinfos << "Loading base colors from " << colors_base_filename << llendl;
- gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U);
+ gColors.loadFromFile(colors_base_filename.c_str(), FALSE, TYPE_COL4U);
// Load overrides from user colors file
LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml");
llinfos << "Loading user colors from " << user_colors_filename << llendl;
- if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)
+ if (gColors.loadFromFile(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)
{
- llinfos << "Cannot load user colors from " << user_colors_filename << llendl;
+ llinfos << "Failed to load user colors from " << user_colors_filename << llendl;
+ LLString user_legacy_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.ini");
+ llinfos << "Loading legacy colors from " << user_legacy_colors_filename << llendl;
+ gColors.loadFromFileLegacy(user_legacy_colors_filename.c_str(), FALSE, TYPE_COL4U);
}
// Widget construction depends on LLUI being initialized
@@ -704,18 +1159,16 @@ bool LLAppViewer::init()
LLAgent::parseTeleportMessages("teleport_strings.xml");
- LLViewerJointMesh::updateVectorize();
-
// load MIME type -> media impl mappings
LLMIMETypes::parseMIMETypes( "mime_types.xml" );
+ mCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
+
+ LLVectorPerformanceOptions::initClass();
+
+ // Move certain saved settings into global variables for speed
+ saved_settings_to_globals();
- // Copy settings to globals. *TODO: Remove or move to appropriage class initializers
- settings_to_globals();
- // Setup settings listeners
- settings_setup_listeners();
- // Modify settings based on system configuration and compile options
- settings_modify();
// Find partition serial number (Windows) or hardware serial (Mac)
mSerialNumber = generateSerialNumber();
@@ -980,9 +1433,9 @@ bool LLAppViewer::mainLoop()
bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads");
// yield some time to the os based on command line option
- if(mYieldTime >= 0)
+ if(gYieldTime)
{
- ms_sleep(mYieldTime);
+ ms_sleep(gYieldMS);
}
// yield cooperatively when not running as foreground window
@@ -1254,11 +1707,11 @@ bool LLAppViewer::cleanup()
// Must do this after all panels have been deleted because panels that have persistent rects
// save their rects on delete.
- gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
-
- // UserSettingsFile should be empty if no use has been logged on.
- // *FIX:Mani This should get really saved in a "logoff" mode.
- gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("UserSettingsFile"), TRUE);
+ gSavedSettings.saveToFile(gSettingsFileName, TRUE);
+ if (!gPerAccountSettingsFileName.empty())
+ {
+ gSavedPerAccountSettings.saveToFile(gPerAccountSettingsFileName, TRUE);
+ }
llinfos << "Saved settings" << llendflush;
std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
@@ -1353,10 +1806,10 @@ bool LLAppViewer::cleanup()
end_messaging_system();
- // *NOTE:Mani - The following call is not thread safe.
- LLCurl::cleanupClass();
+ // *NOTE:Mani - The following call is not thread safe.
+ LLCurl::cleanupClass();
- // If we're exiting to launch an URL, do that here so the screen
+ // If we're exiting to launch an URL, do that here so the screen
// is at the right resolution before we launch IE.
if (!gLaunchFileOnQuit.empty())
{
@@ -1377,6 +1830,106 @@ bool LLAppViewer::cleanup()
return true;
}
+bool LLAppViewer::initEarlyConfiguration()
+{
+ // *FIX: globals - This method sets a bunch of globals early in the init process.
+ int argc = gTempArgC;
+ char** argv = gTempArgV;
+
+ // HACK! We REALLY want to know what grid they were trying to connect to if they
+ // crashed hard.
+ // So we walk through the command line args ONLY looking for the
+ // userserver arguments first. And we don't do ANYTHING but set
+ // the gGridName (which gets passed to the crash reporter).
+ // We're assuming that they're trying to log into the same grid as last
+ // time, which seems fairly reasonable.
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GridDefaultChoice].mName); // Flawfinder: ignore
+ S32 j;
+ for (j = 1; j < argc; j++)
+ {
+ if (!strcmp(argv[j], "--aditi"))
+ {
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_ADITI].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--agni"))
+ {
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_AGNI].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--siva"))
+ {
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SIVA].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--shakti"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_SHAKTI].mName);
+ }
+ else if (!strcmp(argv[j], "--durga"))
+ {
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_DURGA].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--soma"))
+ {
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SOMA].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--ganga"))
+ {
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_GANGA].mName); // Flawfinder: ignore
+ }
+ else if (!strcmp(argv[j], "--vaak"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_VAAK].mName);
+ }
+ else if (!strcmp(argv[j], "--uma"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_UMA].mName);
+ }
+ else if (!strcmp(argv[j], "--mohini"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MOHINI].mName);
+ }
+ else if (!strcmp(argv[j], "--yami"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_YAMI].mName);
+ }
+ else if (!strcmp(argv[j], "--nandi"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_NANDI].mName);
+ }
+ else if (!strcmp(argv[j], "--mitra"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MITRA].mName);
+ }
+ else if (!strcmp(argv[j], "--radha"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RADHA].mName);
+ }
+ else if (!strcmp(argv[j], "--ravi"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RAVI].mName);
+ }
+ else if (!strcmp(argv[j], "--aruna"))
+ {
+ sprintf(gGridName,"%s", gGridInfo[GRID_INFO_ARUNA].mName);
+ }
+ else if (!strcmp(argv[j], "-multiple"))
+ {
+ // Hack to detect -multiple so we can disable the marker file check (which will always fail)
+ gMultipleViewersOK = TRUE;
+ }
+ else if (!strcmp(argv[j], "-novoice"))
+ {
+ // May need to know this early also
+ gDisableVoice = TRUE;
+ }
+ else if (!strcmp(argv[j], "-url") && (++j < argc))
+ {
+ LLURLSimString::setString(argv[j]);
+ }
+ }
+
+ return true;
+}
+
bool LLAppViewer::initThreads()
{
#if MEM_TRACK_MEM
@@ -1437,275 +1990,14 @@ bool LLAppViewer::initLogging()
return true;
}
-void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
-{
- for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr)
- {
- LLString settings_name = (*itr).first;
- LLString settings_file = mSettingsFileList[settings_name].asString();
- LLString full_settings_path = gDirUtilp->getExpandedFilename(path_index, settings_file);
- if(gSettings.find(settings_name) == gSettings.end())
- {
- llwarns << "Cannot load " << settings_file << " - No matching settings group for name " << settings_name << llendl;
- continue;
- }
- if(!gSettings[settings_name]->loadFromFile(gDirUtilp->getExpandedFilename(path_index, settings_file)))
- {
- llwarns << "Cannot load " << full_settings_path << " - No settings found." << llendl;
- }
- else
- {
- llinfos << "Loaded settings file " << full_settings_path << llendl;
- }
- }
-}
-
bool LLAppViewer::initConfiguration()
{
- //Set up internal pointers
- gSettings["Global"] = &gSavedSettings;
- gSettings["PerAccount"] = &gSavedPerAccountSettings;
- gSettings["CrashSettings"] = &gCrashSettings;
-
- //Load settings files list
- std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
- LLControlGroup settings_control;
- llinfos << "Loading settings file list" << settings_file_list << llendl;
- if (0 == settings_control.loadFromFile(settings_file_list))
- {
- llerrs << "Cannot load default configuration file " << settings_file_list << llendl;
- }
-
- mSettingsFileList = settings_control.getLLSD("Files");
-
- //Order of loading
- // - App Settings (Defaults)
- // - user_settings (Client Overrides)
- // - user directory (user specific overrides, happens in llstartup)
- loadSettingsFromDirectory(LL_PATH_APP_SETTINGS);
-
- //Fix settings that require compiled information
- gSavedSettings.setString("ClientSettingsFile",
- gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE));
- gSavedSettings.setString("VersionChannelName", LL_CHANNEL);
- #ifndef LL_RELEASE_FOR_DOWNLOAD
- gSavedSettings.setBOOL("ShowConsoleWindow", TRUE);
- #endif
-
- // These are warnings that appear on the first experience of that condition.
- // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
- // for disable/reset ability
- LLFirstUse::addConfigVariable("FirstBalanceIncrease");
- LLFirstUse::addConfigVariable("FirstBalanceDecrease");
- LLFirstUse::addConfigVariable("FirstSit");
- LLFirstUse::addConfigVariable("FirstMap");
- LLFirstUse::addConfigVariable("FirstGoTo");
- LLFirstUse::addConfigVariable("FirstBuild");
- LLFirstUse::addConfigVariable("FirstLeftClickNoHit");
- LLFirstUse::addConfigVariable("FirstTeleport");
- LLFirstUse::addConfigVariable("FirstOverrideKeys");
- LLFirstUse::addConfigVariable("FirstAttach");
- LLFirstUse::addConfigVariable("FirstAppearance");
- LLFirstUse::addConfigVariable("FirstInventory");
- LLFirstUse::addConfigVariable("FirstSandbox");
- LLFirstUse::addConfigVariable("FirstFlexible");
- LLFirstUse::addConfigVariable("FirstDebugMenus");
- LLFirstUse::addConfigVariable("FirstStreamingMusic");
- LLFirstUse::addConfigVariable("FirstStreamingVideo");
- LLFirstUse::addConfigVariable("FirstSculptedPrim");
- LLFirstUse::addConfigVariable("FirstVoice");
- LLFirstUse::addConfigVariable("FirstMedia");
-
- //////
- // *FIX:Mani - Find a way to remove the gUICtrlFactory and
- // LLAlertDialog::parseAlerts dependecies on the being loaded
- // *before* the user settings. Having to do this init here
- // seems odd.
-
- // Need to do this before calling parseAlerts
- gUICtrlFactory = new LLViewerUICtrlFactory();
-
- // Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/)
- // Do this *before* loading the settings file
- LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
-
- // Overwrite default user settings with user settings
- loadSettingsFromDirectory(LL_PATH_USER_SETTINGS);
-
- // Parse command line settings.
- LLControlGroupCLP clp;
- std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
- "cmd_line.xml");
- clp.configure(cmd_line_config, &gSavedSettings);
-
- if(!initParseCommandLine(clp))
+ // Ye olde parse_args()...
+ if(!doConfigFromCommandLine())
{
- llwarns
- << "Error parsing command line options. Command Line options ignored."
- << llendl;
-
- llinfos << "Command line usage:\n" << clp << llendl;
- }
-
- // If the user has specified a alternate settings file name.
- // Load it now.
- if(clp.hasOption("settings"))
- {
- std::string user_settings_filename = clp.getOption("settings")[0];
- std::string full_settings_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,
- user_settings_filename);
-
- llinfos << "Loading command line specified settings file: " << full_settings_path << llendl;
-
- if(!gSavedSettings.loadFromFile(full_settings_path))
- {
- llwarns << "File not found: " << full_settings_path << llendl;
- }
-
- gSavedSettings.setString("ClientSettingsFile", full_settings_path);
- }
-
- // Apply the command line params to the settings system.
- // Anyway the following call to notify depends upon the settings being init'd.
- clp.notify();
-
- // Start up the debugging console before handling other options.
- if (gSavedSettings.getBOOL("ShowConsoleWindow"))
- {
- initConsole();
- }
-
- if(clp.hasOption("help"))
- {
- llinfos << "Command line usage:\n" << clp << llendl;
return false;
}
-
- //////////////////////////
- // Apply settings...
- if(clp.hasOption("setdefault"))
- {
- //const LLCommandLineParser::token_vector_t& setdefault = clp.getOption("setdefault");
- //if(0x1 & setdefault.size())
- //{
- // llwarns << "Invalid '--setdefault' parameter count." << llendl;
- //}
- //else
- //{
- // LLCommandLineParser::token_vector_t::const_iterator itr = setdefault.begin();
- // for(; itr != setdefault.end(); ++itr)
- // {
- // const std::string& name = *itr;
- // const std::string& value = *(++itr);
- // LLControlVariable* c = gSettings["global"]->getControl(name);
- // if(c)
- // {
- // c->setDefault(value);
- // }
- // else
- // {
- // llwarns << "'--setdefault' specified with unknown setting: '"
- // << name << "'." << llendl;
- // }
- // }
- //}
- }
-
- if(clp.hasOption("set"))
- {
- const LLCommandLineParser::token_vector_t& set_values = clp.getOption("set");
- if(0x1 & set_values.size())
- {
- llwarns << "Invalid '--set' parameter count." << llendl;
- }
- else
- {
- LLCommandLineParser::token_vector_t::const_iterator itr = set_values.begin();
- for(; itr != set_values.end(); ++itr)
- {
- const std::string& name = *itr;
- const std::string& value = *(++itr);
- LLControlVariable* c = gSettings["Global"]->getControl(name);
- if(c)
- {
- c->setValue(value, false);
- }
- else
- {
- llwarns << "'--set' specified with unknown setting: '"
- << name << "'." << llendl;
- }
- }
- }
- }
-
- initGridChoice();
-
- // Handle slurl use. NOTE: Don't let SL-55321 reappear.
-
- // *FIX: This init code should be made more robust to prevent
- // the issue SL-55321 from returning. One thought is to allow
- // only select options to be set from command line when a slurl
- // is specified. More work on the settings system is needed to
- // achieve this. For now...
-
- // *NOTE:Mani The command line parser parses tokens and is
- // setup to bail after parsing the '--url' option or the
- // first option specified without a '--option' flag (or
- // any other option that uses the 'last_option' setting -
- // see LLControlGroupCLP::configure())
-
- // What can happen is that someone can use IE (or potentially
- // other browsers) and do the rough equivalent of command
- // injection and steal passwords. Phoenix. SL-55321
- if(clp.hasOption("url"))
- {
- std::string slurl = clp.getOption("url")[0];
- if (LLURLDispatcher::isSLURLCommand(slurl))
- {
- LLStartUp::sSLURLCommand = slurl;
- }
- else
- {
- LLURLSimString::setString(slurl);
- }
- }
- else if(clp.hasOption("slurl"))
- {
- std::string slurl = clp.getOption("slurl")[0];
- if(LLURLDispatcher::isSLURL(slurl))
- {
- if (LLURLDispatcher::isSLURLCommand(slurl))
- {
- LLStartUp::sSLURLCommand = slurl;
- }
- else
- {
- LLURLSimString::setString(slurl);
- }
- }
- }
-
- const LLControlVariable* loginuri = gSavedSettings.getControl("LoginURI");
- if(loginuri && LLString::null != loginuri->getValue().asString())
- {
- addLoginURI(loginuri->getValue().asString());
- }
-
- const LLControlVariable* helperuri = gSavedSettings.getControl("HelperURI");
- if(helperuri && LLString::null != helperuri->getValue().asString())
- {
- setHelperURI(helperuri->getValue().asString());
- }
-
- const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder");
- if(skinfolder && LLString::null != skinfolder->getValue().asString())
- {
- gDirUtilp->setSkinFolder(skinfolder->getValue().asString());
- }
-
- mYieldTime = gSavedSettings.getS32("YieldTime");
-
+
// XUI:translate
gSecondLife = "Second Life";
@@ -1776,6 +2068,19 @@ bool LLAppViewer::initConfiguration()
gStartTime = totalTime();
+ ////////////////////////////////////////
+ //
+ // Process ini files
+ //
+
+ // declare all possible setting variables
+ declare_settings();
+
+#if !LL_RELEASE_FOR_DOWNLOAD
+// only write the defaults for non-release builds!
+ gSavedSettings.saveToFile(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings_default.xml").c_str(), FALSE);
+#endif
+
//
// Set the name of the window
//
@@ -1788,7 +2093,7 @@ bool LLAppViewer::initConfiguration()
#endif
LLString::truncate(gWindowTitle, 255);
- if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
+ if (!gMultipleViewersOK)
{
//
// Check for another instance of the app running
@@ -1914,12 +2219,12 @@ bool LLAppViewer::initConfiguration()
if (mSecondInstance)
{
- gSavedSettings.setBOOL("CmdLineDisableVoice", TRUE);
+ gDisableVoice = TRUE;
/* Don't start another instance if using -multiple
//RN: if we received a URL, hand it off to the existing instance
- if (LLURLSimString::parse())
- {
- LLURLSimString::send_to_other_instance();
+ if (LLURLSimString::parse())
+ {
+ LLURLSimString::send_to_other_instance();
return 1;
}
*/
@@ -1928,15 +2233,95 @@ bool LLAppViewer::initConfiguration()
initMarkerFile();
}
- // need to do this here - need to have initialized global settings first
- LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
- if ( nextLoginLocation.length() )
+ return true; // Config was successful.
+}
+
+bool LLAppViewer::doConfigFromCommandLine()
+{
+ // *FIX: This is what parse args used to do, minus the arg reading part.
+ // Now the arg parsing is handled by LLApp::parseCommandOptions() and this
+ // method need only interpret settings. Perhaps some day interested parties
+ // can ask an app about a setting rather than have the app set
+ // a gazzillion globals.
+
+ /////////////////////////////////////////
+ //
+ // Process command line arguments
+ //
+ S32 args_result = 0;
+
+#if LL_DARWIN
{
- LLURLSimString::setString( nextLoginLocation.c_str() );
- };
+ // On the Mac, read in arguments.txt (if it exists) and process it for additional arguments.
+ LLString args;
+ if(_read_file_into_string(args, "arguments.txt")) /* Flawfinder: ignore*/
+ {
+ // The arguments file exists.
+ // It should consist of command line arguments separated by newlines.
+ // Split it into individual arguments and build a fake argv[] to pass to parse_args.
+ std::vector<std::string> arglist;
+
+ arglist.push_back("newview");
+
+ llinfos << "Reading additional command line arguments from arguments.txt..." << llendl;
+
+ typedef boost::tokenizer<boost::escaped_list_separator<char> > tokenizer;
+ boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'");
+ tokenizer tokens(args, sep);
+ tokenizer::iterator token_iter;
- gLastRunVersion = gSavedSettings.getString("LastRunVersion");
- return true; // Config was successful.
+ for(token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
+ {
+ llinfos << "argument: '" << (token_iter->c_str()) << "'" << llendl;
+
+ arglist.push_back(*token_iter);
+ }
+
+ char **fakeargv = new char*[arglist.size()];
+ int i;
+ for(i=0; i < arglist.size(); i++)
+ fakeargv[i] = const_cast<char*>(arglist[i].c_str());
+
+ args_result = parse_args(arglist.size(), fakeargv);
+ delete[] fakeargv;
+ }
+
+ // Get the user's preferred language string based on the Mac OS localization mechanism.
+ // To add a new localization:
+ // go to the "Resources" section of the project
+ // get info on "language.txt"
+ // in the "General" tab, click the "Add Localization" button
+ // create a new localization for the language you're adding
+ // set the contents of the new localization of the file to the string corresponding to our localization
+ // (i.e. "en-us", "ja", etc. Use the existing ones as a guide.)
+ CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL);
+ char path[MAX_PATH];
+ if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path)))
+ {
+ LLString lang;
+ if(_read_file_into_string(lang, path)) /* Flawfinder: ignore*/
+ {
+ gCommandLineForcedSettings["SystemLanguage"] = lang;
+ }
+ }
+ CFRelease(url);
+ }
+#endif
+
+ int argc = gTempArgC;
+ char** argv = gTempArgV;
+
+ //
+ // Parse the command line arguments
+ //
+ args_result |= parse_args(argc, argv);
+ if (args_result)
+ {
+ removeMarkerFile();
+ return false;
+ }
+
+ return true;
}
bool LLAppViewer::initWindow()
@@ -1955,11 +2340,10 @@ bool LLAppViewer::initWindow()
window_title_str[sizeof(window_title_str) - 1] = '\0';
// always start windowed
- BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");
gViewerWindow = new LLViewerWindow(window_title_str, "Second Life",
gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"),
gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"),
- FALSE, ignorePixelDepth);
+ FALSE, gIgnorePixelDepth);
if (gSavedSettings.getBOOL("FullScreen"))
{
@@ -1981,14 +2365,14 @@ bool LLAppViewer::initWindow()
// Set this flag in case we crash while initializing GL
gSavedSettings.setBOOL("RenderInitError", TRUE);
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
+ gSavedSettings.saveToFile( gSettingsFileName, TRUE );
gPipeline.init();
stop_glerror();
gViewerWindow->initGLDefaults();
gSavedSettings.setBOOL("RenderInitError", FALSE);
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
+ gSavedSettings.saveToFile( gSettingsFileName, TRUE );
}
LLUI::sWindow = gViewerWindow->getWindow();
@@ -1996,6 +2380,11 @@ bool LLAppViewer::initWindow()
LLAlertDialog::parseAlerts("alerts.xml");
LLNotifyBox::parseNotify("notify.xml");
+ // *TODO - remove this when merging into release
+ // DON'T Clean up the feature manager lookup table - settings are needed
+ // for setting the graphics level.
+ //gFeatureManagerp->cleanupFeatureTables();
+
// Show watch cursor
gViewerWindow->setCursor(UI_CURSOR_WAIT);
@@ -2085,7 +2474,7 @@ void LLAppViewer::writeSystemInfo()
{
gDebugInfo["SLLog"] = LLError::logFileName();
- gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName");
+ gDebugInfo["ClientInfo"]["Name"] = gChannelName;
gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR;
gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR;
gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH;
@@ -2136,7 +2525,7 @@ void LLAppViewer::handleViewerCrash()
}
pApp->mReportedCrash = TRUE;
- gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile");
+ gDebugInfo["SettingsFilename"] = gSettingsFileName;
gDebugInfo["CAFilename"] = gDirUtilp->getCAFile();
gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName().c_str();
gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath().c_str();
@@ -2277,11 +2666,7 @@ void LLAppViewer::initMarkerFile()
ll_apr_file_remove(error_marker_file);
//Freeze case checks
- if(anotherInstanceRunning())
- {
- return;
- }
-
+ if(anotherInstanceRunning()) return;
fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB);
if (fMarker != NULL)
{
@@ -2487,7 +2872,7 @@ bool LLAppViewer::initCache()
char static_vfs_index_file[LL_MAX_PATH]; // Flawfinder: ignore
char static_vfs_data_file[LL_MAX_PATH]; // Flawfinder: ignore
- if (gSavedSettings.getBOOL("AllowMultipleViewers"))
+ if (gMultipleViewersOK)
{
// don't mess with renaming the VFS in this case
new_salt = old_salt;
@@ -2686,6 +3071,17 @@ void LLAppViewer::setHelperURI(const std::string& uri)
gHelperURI = uri;
}
+void LLAppViewer::setLoginPage(const std::string& login_page)
+{
+ gLoginPage = login_page;
+}
+
+const std::string& LLAppViewer::getLoginPage()
+{
+ return gLoginPage;
+}
+
+
// Callback from a dialog indicating user was logged out.
void finish_disconnect(S32 option, void* userdata)
{
@@ -2854,6 +3250,8 @@ void LLAppViewer::idle()
// Update frame timers
static LLTimer idle_timer;
+ LLControlBase::updateAllListeners();
+
LLFrameTimer::updateFrameTime();
LLEventTimer::updateClass();
LLCriticalDamp::updateInterpolants();
@@ -2874,10 +3272,9 @@ void LLAppViewer::idle()
// Smoothly weight toward current frame
gFPSClamped = (frame_rate_clamped + (4.f * gFPSClamped)) / 5.f;
- F32 qas = gSavedSettings.getF32("QuitAfterSeconds");
- if (qas > 0.f)
+ if (gQuitAfterSeconds > 0.f)
{
- if (gRenderStartTime.getElapsedTimeF32() > qas)
+ if (gRenderStartTime.getElapsedTimeF32() > gQuitAfterSeconds)
{
LLAppViewer::instance()->forceQuit();
}
@@ -2916,7 +3313,7 @@ void LLAppViewer::idle()
// Update simulator agent state
//
- if (gSavedSettings.getBOOL("RotateRight"))
+ if (gRotateRight)
{
gAgent.moveYaw(-1.f);
}
@@ -3124,6 +3521,7 @@ void LLAppViewer::idle()
//
// Update weather effects
//
+
if (!gNoRender)
{
gWorldp->updateClouds(gFrameDTClamped);
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 40a69f7868..9518636f87 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -36,21 +36,15 @@ class LLTextureCache;
class LLWorkerThread;
class LLTextureFetch;
-class LLCommandLineParser;
-
class LLAppViewer : public LLApp
{
public:
LLAppViewer();
virtual ~LLAppViewer();
- /**
- * @brief Access to the LLAppViewer singleton.
- *
- * The LLAppViewer singleton is created in main()/WinMain().
- * So don't use it in pre-entry (static initialization) code.
- */
- static LLAppViewer* instance() {return sInstance; }
+ // *NOTE:Mani - Don't use this!
+ // Having
+ static LLAppViewer* instance() {return sInstance; }
//
// Main application logic
@@ -70,6 +64,10 @@ public:
bool quitRequested() { return mQuitRequested; }
bool logoutRequestSent() { return mLogoutRequestSent; }
+ // *FIX: This is meant to stay only until the command line issues are hashed out with repect to LLApp::parseCommandLine
+ // This version stores the argc and argv for later usage, make sure the params passed in last as long as this class.
+ bool tempStoreCommandOptions(int argc, char** argv);
+
void closeDebug();
const LLOSInfo& getOSInfo() const { return mSysOSInfo; }
@@ -89,6 +87,9 @@ public:
const std::string& getSerialNumber() { return mSerialNumber; }
+ // *FIX:Mani purgeCache was made public for parse_args().
+ // If that beast is gone, make it private.
+ void purgeCache(); // Clear the local cache.
bool getPurgeCache() const { return mPurgeCache; }
const LLString& getSecondLifeTitle() const; // The Second Life title.
@@ -100,6 +101,8 @@ public:
const std::vector<std::string>& getLoginURIs() const;
const std::string& getHelperURI() const;
void resetURIs() const;
+ void setLoginPage(const std::string& login_page);
+ const std::string& getLoginPage();
void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.
void badNetworkHandler(); // Cause a crash state due to bad network packet.
@@ -122,26 +125,23 @@ public:
virtual void forceErrorInifiniteLoop();
virtual void forceErrorSoftwareException();
- void loadSettingsFromDirectory(ELLPath path_index);
protected:
virtual bool initWindow(); // Initialize the viewer's window.
virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
- virtual void initConsole() {}; // Initialize OS level debugging console.
virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
-
- virtual bool initParseCommandLine(LLCommandLineParser& clp)
- { return true; } // Allow platforms to specify the command line args.
virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
private:
+ bool initEarlyConfiguration(); // Initialize setting needed by crash reporting.
bool initThreads(); // Initialize viewer threads, return false on failure.
bool initConfiguration(); // Initialize settings from the command line/config file.
bool initCache(); // Initialize local client cache.
- void purgeCache(); // Clear the local cache.
+
+ bool doConfigFromCommandLine(); // calls parse args.
void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup.
void removeCacheFiles(const char *filemask); // Deletes cached files the match the given wildcard.
@@ -186,8 +186,6 @@ private:
bool mQuitRequested; // User wants to quit, may have modified documents open.
bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
- S32 mYieldTime;
- LLSD mSettingsFileList;
};
// consts from viewer.h
@@ -198,16 +196,31 @@ const S32 AGENT_UPDATES_PER_SECOND = 10;
//
// "// llstartup" indicates that llstartup is the only client for this global.
+extern bool gVerifySSLCert; // parse_args setting used by llxmlrpctransaction.cpp
extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp
+extern BOOL gProbeHardware;
extern LLString gDisabledMessage; // llstartup
extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup
extern LLSD gDebugInfo;
extern BOOL gAllowIdleAFK;
+extern F32 gAFKTimeout;
extern BOOL gShowObjectUpdates;
+extern BOOL gLogMessages; // llstartup
+extern std::string gChannelName;
+extern BOOL gUseAudio; // llstartup
+
+extern LLString gCmdLineFirstName; // llstartup
+extern LLString gCmdLineLastName;
+extern LLString gCmdLinePassword;
+
+extern BOOL gAutoLogin; // llstartup
extern const char* DEFAULT_SETTINGS_FILE; // llstartup
+extern BOOL gRequestInventoryLibrary; // llstartup
+extern BOOL gGodConnect; // llstartup
+
extern BOOL gAcceptTOS;
extern BOOL gAcceptCriticalMessage;
@@ -252,6 +265,7 @@ extern LLUUID gInventoryLibraryOwner;
extern LLUUID gInventoryLibraryRoot;
extern BOOL gDisconnected;
+extern BOOL gDisableVoice;
// Map scale in pixels per region
extern F32 gMapScale;
@@ -261,6 +275,9 @@ extern LLFrameTimer gRestoreGLTimer;
extern BOOL gRestoreGL;
extern BOOL gUseWireframe;
+extern F32 gMouseSensitivity;
+extern BOOL gInvertMouse;
+
// VFS globals - gVFS is for general use
// gStaticVFS is read-only and is shipped w/ the viewer
// it has pre-cache data like the UI .TGAs
@@ -268,6 +285,9 @@ extern LLVFS *gStaticVFS;
extern LLMemoryInfo gSysMemory;
+extern bool gPreloadImages;
+extern bool gPreloadSounds;
+
extern LLString gLastVersionChannel;
extern LLVector3 gWindVec;
@@ -278,7 +298,10 @@ extern BOOL gPrintMessagesThisFrame;
extern LLUUID gSunTextureID;
extern LLUUID gMoonTextureID;
+extern BOOL gUseConsole;
+
extern BOOL gRandomizeFramerate;
extern BOOL gPeriodicSlowFrame;
+extern BOOL gQAMode;
#endif // LL_LLAPPVIEWER_H
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index c36dd2955e..1993fd0a76 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -31,11 +31,9 @@
#include "llviewerprecompiledheaders.h"
+#include "llmemtype.h"
#include "llappviewerlinux.h"
-#include "llcommandlineparser.h"
-
-#include "llmemtype.h"
#include "llviewernetwork.h"
#include "llmd5.h"
@@ -56,12 +54,6 @@
# include <ucontext.h>
#endif
-namespace
-{
- int gArgC = 0;
- char **gArgV = NULL;
-}
-
int main( int argc, char **argv )
{
LLMemType mt1(LLMemType::MTYPE_STARTUP);
@@ -70,14 +62,18 @@ int main( int argc, char **argv )
asm ("ta\t6"); // NOTE: Make sure memory alignment is enforced on SPARC
#endif
- gArgC = argc;
- gArgV = argv;
-
LLAppViewer* viewer_app_ptr = new LLAppViewerLinux();
viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
- bool ok = viewer_app_ptr->init();
+ bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv);
+ if(!ok)
+ {
+ llwarns << "Unable to parse command line." << llendl;
+ return -1;
+ }
+
+ ok = viewer_app_ptr->init();
if(!ok)
{
llwarns << "Application init failed." << llendl;
@@ -325,7 +321,7 @@ void LLAppViewerLinux::handleCrashReporting()
{(char*)cmd.c_str(),
ask_dialog,
(char*)"-user",
- (char*)gGridName.c_str(),
+ (char*)gGridName,
(char*)"-name",
(char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(),
NULL};
@@ -407,12 +403,6 @@ bool LLAppViewerLinux::initLogging()
return LLAppViewer::initLogging();
}
-bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp)
-{
- clp.parseCommandLine(gArgC, gArgV);
- return true;
-}
-
std::string LLAppViewerLinux::generateSerialNumber()
{
char serial_md5[MD5HEX_STR_SIZE];
diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h
index ce91b6b8b6..f38a64a8cd 100644
--- a/indra/newview/llappviewerlinux.h
+++ b/indra/newview/llappviewerlinux.h
@@ -36,8 +36,6 @@
#include "llappviewer.h"
#endif
-class LLCommandLineParser;
-
class LLAppViewerLinux : public LLAppViewer
{
public:
@@ -56,7 +54,6 @@ protected:
virtual void handleCrashReporting();
virtual bool initLogging();
- virtual bool initParseCommandLine(LLCommandLineParser& clp);
};
#endif // LL_LLAPPVIEWERLINUX_H
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index ba3f28911f..2d7091a075 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -36,8 +36,6 @@
#endif
#include "llappviewermacosx.h"
-#include "llcommandlineparser.h"
-
#include "llmemtype.h"
#include "llviewernetwork.h"
@@ -47,13 +45,6 @@
#include "llurldispatcher.h"
#include <Carbon/Carbon.h>
-namespace
-{
- // The command line args stored.
- // They are not used immediately by the app.
- int gArgC;
- char** gArgV;
-}
int main( int argc, char **argv )
{
@@ -70,11 +61,14 @@ int main( int argc, char **argv )
viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
- // Store off the command line args for use later.
- gArgC = argc;
- gArgV = argv;
-
- bool ok = viewer_app_ptr->init();
+ bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv);
+ if(!ok)
+ {
+ llwarns << "Unable to parse command line." << llendl;
+ return -1;
+ }
+
+ ok = viewer_app_ptr->init();
if(!ok)
{
llwarns << "Application init failed." << llendl;
@@ -114,27 +108,6 @@ bool LLAppViewerMacOSX::init()
return LLAppViewer::init();
}
-bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp)
-{
- // First parse the command line, not often used on the mac.
- clp.parseCommandLine(gArgC, gArgV);
-
- // Now read in the args from arguments txt.
- // Succesive calls to clp.parse... will NOT override earlier
- // options.
- const char* filename = "arguments.txt";
- llifstream ifs(filename, llifstream::binary);
- if (!ifs.is_open())
- {
- llwarns << "Unable to open file" << filename << llendl;
- return false;
- }
-
-
- clp.parseCommandLineFile(ifs);
- return true;
-}
-
void LLAppViewerMacOSX::handleCrashReporting()
{
// Macintosh
diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h
index cc4a7f5eb5..2c61e5a01c 100644
--- a/indra/newview/llappviewermacosx.h
+++ b/indra/newview/llappviewermacosx.h
@@ -51,7 +51,6 @@ public:
protected:
virtual void handleCrashReporting();
std::string generateSerialNumber();
- virtual bool initParseCommandLine(LLCommandLineParser& clp);
};
#endif // LL_LLAPPVIEWERMACOSX_H
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index fb726e7c97..09bcf6f7cc 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -55,13 +55,41 @@
#include "llviewernetwork.h"
#include "llmd5.h"
-#include "llcommandlineparser.h"
+void fill_args(int& argc, char** argv, const S32 max_args, LPSTR cmd_line)
+{
+ char *token = NULL;
+ if( cmd_line[0] == '\"' )
+ {
+ // Exe name is enclosed in quotes
+ token = strtok( cmd_line, "\"" );
+ argv[argc++] = token;
+ token = strtok( NULL, " \t," );
+ }
+ else
+ {
+ // Exe name is not enclosed in quotes
+ token = strtok( cmd_line, " \t," );
+ }
+ while( (token != NULL) && (argc < max_args) )
+ {
+ argv[argc++] = token;
+ /* Get next token: */
+ if (*(token + strlen(token) + 1) == '\"') /* Flawfinder: ignore*/
+ {
+ token = strtok( NULL, "\"");
+ }
+ else
+ {
+ token = strtok( NULL, " \t," );
+ }
+ }
+}
+
+// *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)
{
- // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
-
- // Translate the signals/exceptions into cross-platform stuff
+ // Translate the signals/exceptions into cross-platform stuff
// Windows implementation
llinfos << "Entering Windows Exception Handler..." << llendl;
@@ -116,7 +144,21 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
// *FIX: global
gIconResource = MAKEINTRESOURCE(IDI_LL_ICON);
- LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine);
+ // In Win32, we need to generate argc and argv ourselves...
+ // Note: GetCommandLine() returns a potentially return a LPTSTR
+ // which can resolve to a LPWSTR (unicode string).
+ // (That's why it's different from lpCmdLine which is a LPSTR.)
+ // We don't currently do unicode, so call the non-unicode version
+ // directly.
+ LPSTR cmd_line_including_exe_name = GetCommandLineA();
+
+ const S32 MAX_ARGS = 100;
+ int argc = 0;
+ char* argv[MAX_ARGS]; /* Flawfinder: ignore */
+
+ fill_args(argc, argv, MAX_ARGS, cmd_line_including_exe_name);
+
+ LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32();
// *FIX:Mani This method is poorly named, since the exception
// is now handled by LLApp.
@@ -138,6 +180,13 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
+ ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv);
+ if(!ok)
+ {
+ llwarns << "Unable to parse command line." << llendl;
+ return -1;
+ }
+
ok = viewer_app_ptr->init();
if(!ok)
{
@@ -259,8 +308,7 @@ void create_console()
setvbuf( stderr, NULL, _IONBF, 0 );
}
-LLAppViewerWin32::LLAppViewerWin32(const char* cmd_line) :
- mCmdLine(cmd_line)
+LLAppViewerWin32::LLAppViewerWin32()
{
}
@@ -291,11 +339,15 @@ bool LLAppViewerWin32::cleanup()
return result;
}
-void LLAppViewerWin32::initConsole()
+bool LLAppViewerWin32::initWindow()
{
- // pop up debug console
- create_console();
- return LLAppViewer::initConsole();
+ // pop up debug console if necessary
+ if (gUseConsole && gSavedSettings.getBOOL("ShowConsoleWindow"))
+ {
+ create_console();
+ }
+
+ return LLAppViewer::initWindow();
}
void write_debug_dx(const char* str)
@@ -316,7 +368,7 @@ bool LLAppViewerWin32::initHardwareTest()
// Do driver verification and initialization based on DirectX
// hardware polling and driver versions
//
- if (FALSE == gSavedSettings.getBOOL("NoHardwareProbe"))
+ if (gProbeHardware)
{
BOOL vram_only = !gSavedSettings.getBOOL("ProbeHardwareOnStartup");
@@ -379,11 +431,6 @@ bool LLAppViewerWin32::initHardwareTest()
return true;
}
-bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp)
-{
- return clp.parseCommandLineString(mCmdLine);
-}
-
void LLAppViewerWin32::handleCrashReporting()
{
// Windows only behaivor. Spawn win crash reporter.
@@ -439,4 +486,4 @@ std::string LLAppViewerWin32::generateSerialNumber()
llwarns << "GetVolumeInformation failed" << llendl;
}
return serial_md5;
-}
+} \ No newline at end of file
diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h
index 66653c48f5..23e7337618 100644
--- a/indra/newview/llappviewerwin32.h
+++ b/indra/newview/llappviewerwin32.h
@@ -39,7 +39,7 @@
class LLAppViewerWin32 : public LLAppViewer
{
public:
- LLAppViewerWin32(const char* cmd_line);
+ LLAppViewerWin32();
virtual ~LLAppViewerWin32();
//
@@ -49,18 +49,15 @@ public:
virtual bool cleanup();
protected:
- virtual void initConsole(); // Initialize OS level debugging console.
+ virtual bool initWindow(); // Initialize the viewer's window.
virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware.
- virtual bool initParseCommandLine(LLCommandLineParser& clp);
-
- virtual void handleCrashReporting();
+ virtual void handleCrashReporting();
std::string generateSerialNumber();
private:
void disableWinErrorReporting();
- std::string mCmdLine;
};
#endif // LL_LLAPPVIEWERWIN32_H
diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp
deleted file mode 100644
index 2f99ca1247..0000000000
--- a/indra/newview/llcommandlineparser.cpp
+++ /dev/null
@@ -1,535 +0,0 @@
-/**
- * @file llcommandlineparser.cpp
- * @brief The LLCommandLineParser class definitions
- *
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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 "llcommandlineparser.h"
-
-// *NOTE: The boost::lexical_cast generates
-// the warning C4701(local used with out assignment) in VC7.1.
-// Disable the warning for the boost includes.
-#if _MSC_VER
-# pragma warning(push)
-# pragma warning( disable : 4701 )
-#else
-// NOTE: For the other platforms?
-#endif
-
-#include <boost/program_options.hpp>
-#include <boost/bind.hpp>
-#include<boost/tokenizer.hpp>
-
-#if _MSC_VER
-# pragma warning(pop)
-#endif
-
-#include "llsdserialize.h"
-#include <iostream>
-#include <sstream>
-
-#include "llcontrol.h"
-
-namespace po = boost::program_options;
-
-// *NTOE:MEP - Currently the boost object reside in file scope.
-// This has a couple of negatives, they are always around and
-// there can be only one instance of each.
-// The plus is that the boost-ly-ness of this implementation is
-// hidden from the rest of the world.
-// Its importatnt to realize that multiple LLCommandLineParser objects
-// will all have this single repository of option escs and parsed options.
-// This could be good or bad, and probably won't matter for most use cases.
-namespace
-{
- po::options_description gOptionsDesc;
- po::positional_options_description gPositionalOptions;
- po::variables_map gVariableMap;
-
- const LLCommandLineParser::token_vector_t gEmptyValue;
-
- void read_file_into_string(std::string& str, const std::basic_istream < char >& file)
- {
- std::ostringstream oss;
- oss << file.rdbuf();
- str = oss.str();
- }
-
- bool gPastLastOption = false;
-}
-
-class LLCLPError : public std::logic_error {
-public:
- LLCLPError(const std::string& what) : std::logic_error(what) {}
-};
-
-class LLCLPLastOption : public std::logic_error {
-public:
- LLCLPLastOption(const std::string& what) : std::logic_error(what) {}
-};
-
-class LLCLPValue : public po::value_semantic_codecvt_helper<char>
-{
- unsigned mMinTokens;
- unsigned mMaxTokens;
- bool mIsComposing;
- typedef boost::function1<void, const LLCommandLineParser::token_vector_t&> notify_callback_t;
- notify_callback_t mNotifyCallback;
- bool mLastOption;
-
-public:
- LLCLPValue() :
- mMinTokens(0),
- mMaxTokens(0),
- mIsComposing(false),
- mLastOption(false)
- {}
-
- virtual ~LLCLPValue() {};
-
- void setMinTokens(unsigned c)
- {
- mMinTokens = c;
- }
-
- void setMaxTokens(unsigned c)
- {
- mMaxTokens = c;
- }
-
- void setComposing(bool c)
- {
- mIsComposing = c;
- }
-
- void setLastOption(bool c)
- {
- mLastOption = c;
- }
-
- void setNotifyCallback(notify_callback_t f)
- {
- mNotifyCallback = f;
- }
-
- // Overrides to support the value_semantic interface.
- virtual std::string name() const
- {
- const std::string arg("arg");
- const std::string args("args");
- return (max_tokens() > 1) ? args : arg;
- }
-
- virtual unsigned min_tokens() const
- {
- return mMinTokens;
- }
-
- virtual unsigned max_tokens() const
- {
- return mMaxTokens;
- }
-
- virtual bool is_composing() const
- {
- return mIsComposing;
- }
-
- virtual bool apply_default(boost::any& value_store) const
- {
- return false; // No defaults.
- }
-
- virtual void notify(const boost::any& value_store) const
- {
- const LLCommandLineParser::token_vector_t* value =
- boost::any_cast<const LLCommandLineParser::token_vector_t>(&value_store);
- if(mNotifyCallback)
- {
- mNotifyCallback(*value);
- }
-
- }
-
-protected:
- void xparse(boost::any& value_store,
- const std::vector<std::string>& new_tokens) const
- {
- if(gPastLastOption)
- {
- throw(LLCLPLastOption("Don't parse no more!"));
- }
-
- // Error checks. Needed?
- if (!value_store.empty() && !is_composing())
- {
- throw(LLCLPError("Non composing value with multiple occurences."));
- }
- if (new_tokens.size() < min_tokens() || new_tokens.size() > max_tokens())
- {
- throw(LLCLPError("Illegal number of tokens specified."));
- }
-
- if(value_store.empty())
- {
- value_store = boost::any(LLCommandLineParser::token_vector_t());
- }
- LLCommandLineParser::token_vector_t* tv =
- boost::any_cast<LLCommandLineParser::token_vector_t>(&value_store);
-
- for(unsigned i = 0; i < new_tokens.size() && i < mMaxTokens; ++i)
- {
- tv->push_back(new_tokens[i]);
- }
-
- if(mLastOption)
- {
- gPastLastOption = true;
- }
- }
-};
-
-//----------------------------------------------------------------------------
-// LLCommandLineParser defintions
-//----------------------------------------------------------------------------
-void LLCommandLineParser::addOptionDesc(const LLString& option_name,
- boost::function1<void, const token_vector_t&> notify_callback,
- unsigned int token_count,
- const LLString& description,
- const LLString& short_name,
- bool composing,
- bool positional,
- bool last_option)
-{
- // Compose the name for boost::po.
- // It takes the format "long_name, short name"
- const LLString comma(",");
- LLString boost_option_name = option_name;
- if(short_name != LLString::null)
- {
- boost_option_name += comma;
- boost_option_name += short_name;
- }
-
- LLCLPValue* value_desc = new LLCLPValue();
- value_desc->setMinTokens(token_count);
- value_desc->setMaxTokens(token_count);
- value_desc->setComposing(composing);
- value_desc->setLastOption(last_option);
-
- boost::shared_ptr<po::option_description> d(
- new po::option_description(boost_option_name.c_str(),
- value_desc,
- description.c_str()));
-
- if(!notify_callback.empty())
- {
- value_desc->setNotifyCallback(notify_callback);
- }
-
- gOptionsDesc.add(d);
-
- if(positional)
- {
- gPositionalOptions.add(boost_option_name.c_str(), token_count);
- }
-}
-
-bool parseAndStoreResults(po::command_line_parser& clp)
-{
- try
- {
- clp.options(gOptionsDesc);
- clp.positional(gPositionalOptions);
- clp.style(po::command_line_style::default_style
- | po::command_line_style::allow_long_disguise);
- po::basic_parsed_options<char> opts = clp.run();
- po::store(opts, gVariableMap);
- }
- catch(po::error& e)
- {
- llwarns << "Caught Error:" << e.what() << llendl;
- return false;
- }
- catch(LLCLPError& e)
- {
- llwarns << "Caught Error:" << e.what() << llendl;
- return false;
- }
- catch(LLCLPLastOption&)
- {
- // Continue without parsing.
- llwarns << "Found tokens past last option. Ignoring." << llendl;
-
- // boost::po will have stored a mal-formed option.
- // All such options will be removed below.
- for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();)
- {
- po::variables_map::iterator tempI = i++;
- if(tempI->second.empty())
- {
- gVariableMap.erase(tempI);
- }
- }
- }
- return true;
-}
-
-bool LLCommandLineParser::parseCommandLine(int argc, char **argv)
-{
- po::command_line_parser clp(argc, argv);
- return parseAndStoreResults(clp);
-}
-
-bool LLCommandLineParser::parseCommandLineString(const std::string& str)
-{
- // Split the string content into tokens
- boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'");
- boost::tokenizer< boost::escaped_list_separator<char> > tok(str, sep);
- std::vector<std::string> tokens;
- // std::copy(tok.begin(), tok.end(), std::back_inserter(tokens));
- for(boost::tokenizer< boost::escaped_list_separator<char> >::iterator i = tok.begin();
- i != tok.end();
- ++i)
- {
- if(0 != i->size())
- {
- tokens.push_back(*i);
- }
- }
-
- po::command_line_parser clp(tokens);
- return parseAndStoreResults(clp);
-
-}
-
-bool LLCommandLineParser::parseCommandLineFile(const std::basic_istream < char >& file)
-{
- std::string args;
- read_file_into_string(args, file);
-
- return parseCommandLineString(args);
-}
-
-void LLCommandLineParser::notify()
-{
- po::notify(gVariableMap);
-}
-
-void LLCommandLineParser::printOptions() const
-{
- for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end(); ++i)
- {
- std::string name = i->first;
- token_vector_t values = i->second.as<token_vector_t>();
- std::ostringstream oss;
- oss << name << ": ";
- for(token_vector_t::iterator t_itr = values.begin(); t_itr != values.end(); ++t_itr)
- {
- oss << t_itr->c_str() << " ";
- }
- llinfos << oss.str() << llendl;
- }
-}
-
-std::ostream& LLCommandLineParser::printOptionsDesc(std::ostream& os) const
-{
- return os << gOptionsDesc;
-}
-
-bool LLCommandLineParser::hasOption(const std::string& name) const
-{
- return gVariableMap.count(name) > 0;
-}
-
-const LLCommandLineParser::token_vector_t& LLCommandLineParser::getOption(const std::string& name) const
-{
- if(hasOption(name))
- {
- return gVariableMap[name].as<token_vector_t>();
- }
-
- return gEmptyValue;
-}
-
-//----------------------------------------------------------------------------
-// LLControlGroupCLP defintions
-//----------------------------------------------------------------------------
-void setControlValueCB(const LLCommandLineParser::token_vector_t& value,
- const LLString& opt_name,
- LLControlGroup* ctrlGroup)
-{
- if(value.size() > 1)
- {
- llwarns << "Ignoring extra tokens mapped to the setting: " << opt_name << "." << llendl;
- }
-
- // *FIX: Do sematic conversion here.
- // LLSD (ImplString) Is no good for doing string to type conversion for...
- // booleans
- // compound types
- // ?...
-
- LLControlVariable* ctrl = ctrlGroup->getControl(opt_name);
- if(NULL != ctrl)
- {
- switch(ctrl->type())
- {
- case TYPE_BOOLEAN:
- if(value.size() > 1)
- {
- llwarns << "Ignoring extra tokens." << llendl;
- }
-
- if(value.size() > 0)
- {
- // There's a token. check the string for true/false/1/0 etc.
- BOOL result = false;
- BOOL gotSet = LLString::convertToBOOL(value[0], result);
- if(gotSet)
- {
- ctrl->setValue(LLSD(result), false);
- }
- }
- else
- {
- ctrl->setValue(LLSD(true), false);
- }
- break;
-
- default:
- {
- // For the default types, let llsd do the conversion.
- if(value.size() > 1)
- {
- // Assume its an array...
- LLSD llsdArray;
- for(unsigned int i = 0; i < value.size(); ++i)
- {
- LLSD llsdValue;
- llsdValue.assign(LLSD::String(value[i]));
- llsdArray.set(i, llsdValue);
- }
-
- ctrl->setValue(llsdArray, false);
- }
- else if(value.size() > 0)
- {
- LLSD llsdValue;
- llsdValue.assign(LLSD::String(value[0]));
- ctrl->setValue(llsdValue, false);
- }
- }
- break;
- }
- }
- else
- {
- llwarns << "Command Line option mapping '"
- << opt_name
- << "' not found! Ignoring."
- << llendl;
- }
-}
-
-void LLControlGroupCLP::configure(const LLString& config_filename, LLControlGroup* controlGroup)
-{
- // This method reads the llsd based config file, and uses it to set
- // members of a control group.
- LLSD clpConfigLLSD;
-
- llifstream input_stream;
- input_stream.open(config_filename.c_str(), std::ios::in | std::ios::binary);
-
- if(input_stream.is_open())
- {
- LLSDSerialize::fromXML(clpConfigLLSD, input_stream);
- for(LLSD::map_iterator option_itr = clpConfigLLSD.beginMap();
- option_itr != clpConfigLLSD.endMap();
- ++option_itr)
- {
- LLSD::String long_name = option_itr->first;
- LLSD option_params = option_itr->second;
-
- LLString desc("n/a");
- if(option_params.has("desc"))
- {
- desc = option_params["desc"].asString();
- }
-
- LLString short_name = LLString::null;
- if(option_params.has("short"))
- {
- short_name = option_params["short"].asString();
- }
-
- unsigned int token_count = 0;
- if(option_params.has("count"))
- {
- token_count = option_params["count"].asInteger();
- }
-
- bool composing = false;
- if(option_params.has("compose"))
- {
- composing = option_params["compose"].asBoolean();
- }
-
- bool positional = false;
- if(option_params.has("positional"))
- {
- positional = option_params["positional"].asBoolean();
- }
-
- bool last_option = false;
- if(option_params.has("last_option"))
- {
- last_option = option_params["last_option"].asBoolean();
- }
-
- boost::function1<void, const token_vector_t&> callback;
- if(option_params.has("map-to") && (NULL != controlGroup))
- {
- LLString controlName = option_params["map-to"].asString();
- callback = boost::bind(setControlValueCB, _1,
- controlName, controlGroup);
- }
-
- this->addOptionDesc(
- long_name,
- callback,
- token_count,
- desc,
- short_name,
- composing,
- positional,
- last_option);
- }
- }
-}
diff --git a/indra/newview/llcommandlineparser.h b/indra/newview/llcommandlineparser.h
deleted file mode 100644
index 6cc40ee8b4..0000000000
--- a/indra/newview/llcommandlineparser.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * @file llcommandlineparser.h
- * @brief LLCommandLineParser class declaration
- *
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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$
-*/
-
-#ifndef LL_LLCOMMANDLINEPARSER_H
-#define LL_LLCOMMANDLINEPARSER_H
-
-#include <boost/function/function1.hpp>
-
-/**
- * @class LLCommandLineParser
- * @brief Handle defining and parsing the command line.
- */
-class LLCommandLineParser
-{
-public:
- typedef std::vector< std::string > token_vector_t;
-
- /**
- * @brief Add a value-less option to the command line description.
- * @param option_name The long name of the cmd-line option.
- * @param description The text description of the option usage.
- */
- void addOptionDesc(
- const LLString& option_name,
- boost::function1<void, const token_vector_t&> notify_callback = 0,
- unsigned int num_tokens = 0,
- const LLString& description = LLString::null,
- const LLString& short_name = LLString::null,
- bool composing = false,
- bool positional = false,
- bool last_option = false);
-
-
- /**
- * @brief Parse the command line given by argc/argv.
- */
- bool parseCommandLine(int argc, char **argv);
-
- /**
- * @brief Parse the command line contained by the given file.
- */
- bool parseCommandLineString(const std::string& str);
-
- /**
- * @brief Parse the command line contained by the given file.
- */
- bool parseCommandLineFile(const std::basic_istream< char >& file);
-
- /**
- * @brief Call callbacks associated with option descriptions.
- *
- * Use this to handle the results of parsing.
- */
- void notify();
-
- /** @brief Print a description of the configured options.
- *
- * Use this to print a description of options to the
- * given ostream. Useful for displaying usage info.
- */
- std::ostream& printOptionsDesc(std::ostream& os) const;
-
- /** @brief Manual option setting accessors.
- *
- * Use these to retrieve get the values set for an option.
- * getOption will return an empty value if the option isn't
- * set.
- */
- bool hasOption(const std::string& name) const;
- const token_vector_t& getOption(const std::string& name) const;
-
- void printOptions() const;
-};
-
-inline std::ostream& operator<<(std::ostream& out, const LLCommandLineParser& clp)
-{
- return clp.printOptionsDesc(out);
-}
-
-class LLControlGroup;
-
-/**
- * @class LLControlGroupCLP
- * @brief Uses the CLP to configure an LLControlGroup
- *
- *
- */
-class LLControlGroupCLP : public LLCommandLineParser
-{
-public:
- /**
- * @brief Configure the command line parser according the given config file.
- *
- * @param config_filename The name of the XML based LLSD config file.
- * @param clp A reference to the command line parser object to configure.
- *
- * *FIX:Mani Specify config file format.
- */
- void configure(const LLString& config_filename,
- LLControlGroup* controlGroup);
-};
-
-#endif // LL_LLCOMMANDLINEPARSER_H
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index e6fcfb6d40..bf7d48f911 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -483,7 +483,7 @@ void LLFeatureManager::applyFeatures(bool skipFeatures)
}
// get the control setting
- LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first);
+ LLControlBase* ctrl = gSavedSettings.getControl(mIt->first);
if(ctrl == NULL)
{
llwarns << "AHHH! Control setting " << mIt->first << " does not exist!" << llendl;
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index b00450eec6..97ebc02ba1 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -49,8 +49,7 @@ std::set<LLString> LLFirstUse::sConfigVariables;
// static
void LLFirstUse::addConfigVariable(const LLString& var)
{
- //Don't add the warning, now that we're storing the default in the settings_default.xml file
- //gSavedSettings.addWarning(var);
+ gSavedSettings.addWarning(var);
sConfigVariables.insert(var);
}
@@ -257,15 +256,13 @@ void LLFirstUse::useSculptedPrim()
// static
void LLFirstUse::useVoice()
{
- if (!gSavedSettings.getBOOL("CmdLineDisableVoice"))
- {
- if (gSavedSettings.getWarning("FirstVoice"))
- {
- gSavedSettings.setWarning("FirstVoice", FALSE);
-
- LLFloaterVoiceWizard::showInstance();
- }
- }
+ if (gDisableVoice) return;
+ if (gSavedSettings.getWarning("FirstVoice"))
+ {
+ gSavedSettings.setWarning("FirstVoice", FALSE);
+
+ LLFloaterVoiceWizard::showInstance();
+ }
}
// static
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 3a1fc6146a..4edf6f3652 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -84,7 +84,7 @@ LLFloaterAbout::LLFloaterAbout()
+ llformat(" %d.%d.%d (%d) %s %s (%s)",
LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,
__DATE__, __TIME__,
- gSavedSettings.getString("VersionChannelName").c_str());
+ gChannelName.c_str());
support.append(version);
support.append("\n\n");
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index 7a0f01e5a6..4573ca75d2 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -173,7 +173,8 @@ bool LLPanelGroups::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
reset();
return true;
}
- return false;
+
+ return LLView::handleEvent(event, userdata);
}
// Default constructor
diff --git a/indra/newview/llfloatergroups.h b/indra/newview/llfloatergroups.h
index 6d99f34085..a1740861d5 100644
--- a/indra/newview/llfloatergroups.h
+++ b/indra/newview/llfloatergroups.h
@@ -83,7 +83,7 @@ protected:
static instance_map_t sInstances;
};
-class LLPanelGroups : public LLPanel, public LLSimpleListener
+class LLPanelGroups : public LLPanel
{
public:
LLPanelGroups();
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 345561f551..584d7479e4 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -446,7 +446,7 @@ void LLFloaterPreference::onBtnOK( void* userdata )
fp->apply();
fp->close(false);
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
+ 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
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
deleted file mode 100644
index 7975bd95ef..0000000000
--- a/indra/newview/llfloatersettingsdebug.cpp
+++ /dev/null
@@ -1,490 +0,0 @@
-/**
- * @file llfloatersettingsdebug.cpp
- * @brief floater for debugging internal viewer settings
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2007, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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 "llfloatersettingsdebug.h"
-#include "llfloater.h"
-#include "llvieweruictrlfactory.h"
-#include "llfirstuse.h"
-#include "llcombobox.h"
-#include "llspinctrl.h"
-#include "llcolorswatch.h"
-#include "llviewercontrol.h"
-
-LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL;
-
-LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor")
-{
-}
-
-LLFloaterSettingsDebug::~LLFloaterSettingsDebug()
-{
- sInstance = NULL;
-}
-
-BOOL LLFloaterSettingsDebug::postBuild()
-{
- LLComboBox* settings_combo = LLUICtrlFactory::getComboBoxByName(this, "settings_combo");
-
- struct f : public LLControlGroup::ApplyFunctor
- {
- LLComboBox* combo;
- f(LLComboBox* c) : combo(c) {}
- virtual void apply(const LLString& name, LLControlVariable* control)
- {
- combo->add(name, (void*)control);
- }
- } func(settings_combo);
-
- gSavedSettings.applyToAll(&func);
- gSavedPerAccountSettings.applyToAll(&func);
- gColors.applyToAll(&func);
-
- settings_combo->sortByName();
- settings_combo->setCommitCallback(onSettingSelect);
- settings_combo->setCallbackUserData(this);
- settings_combo->updateSelection();
-
- childSetCommitCallback("val_spinner_1", onCommitSettings);
- childSetUserData("val_spinner_1", this);
- childSetCommitCallback("val_spinner_2", onCommitSettings);
- childSetUserData("val_spinner_2", this);
- childSetCommitCallback("val_spinner_3", onCommitSettings);
- childSetUserData("val_spinner_3", this);
- childSetCommitCallback("val_spinner_4", onCommitSettings);
- childSetUserData("val_spinner_4", this);
- childSetCommitCallback("val_text", onCommitSettings);
- childSetUserData("val_text", this);
- childSetCommitCallback("boolean_combo", onCommitSettings);
- childSetUserData("boolean_combo", this);
- childSetCommitCallback("color_swatch", onCommitSettings);
- childSetUserData("color_swatch", this);
- childSetAction("default_btn", onClickDefault, this);
- mComment = getChild<LLTextEditor>("comment_text");
- return TRUE;
-}
-
-void LLFloaterSettingsDebug::draw()
-{
- LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
- LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
- updateControl(controlp);
-
- LLFloater::draw();
-}
-
-//static
-void LLFloaterSettingsDebug::show(void*)
-{
- if (sInstance == NULL)
- {
- sInstance = new LLFloaterSettingsDebug();
-
- gUICtrlFactory->buildFloater(sInstance, "floater_settings_debug.xml");
- }
-
- sInstance->open(); /* Flawfinder: ignore */
-}
-
-//static
-void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data)
-{
- LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
- LLComboBox* combo_box = (LLComboBox*)ctrl;
- LLControlVariable* controlp = (LLControlVariable*)combo_box->getCurrentUserdata();
-
- floaterp->updateControl(controlp);
-}
-
-//static
-void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
-{
- LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
-
- LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
- LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
-
- LLVector3 vector;
- LLVector3d vectord;
- LLRect rect;
- LLColor4 col4;
- LLColor3 col3;
- LLColor4U col4U;
- LLColor4 color_with_alpha;
-
- switch(controlp->type())
- {
- case TYPE_U32:
- controlp->set(floaterp->childGetValue("val_spinner_1"));
- break;
- case TYPE_S32:
- controlp->set(floaterp->childGetValue("val_spinner_1"));
- break;
- case TYPE_F32:
- controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal()));
- break;
- case TYPE_BOOLEAN:
- controlp->set(floaterp->childGetValue("boolean_combo"));
- break;
- case TYPE_STRING:
- controlp->set(LLSD(floaterp->childGetValue("val_text").asString()));
- break;
- case TYPE_VEC3:
- vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal();
- vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
- vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
- controlp->set(vector.getValue());
- break;
- case TYPE_VEC3D:
- vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal();
- vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal();
- vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal();
- controlp->set(vectord.getValue());
- break;
- case TYPE_RECT:
- rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger();
- rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger();
- rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger();
- rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger();
- controlp->set(rect.getValue());
- break;
- case TYPE_COL4:
- col3.setValue(floaterp->childGetValue("color_swatch"));
- col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal());
- controlp->set(col4.getValue());
- break;
- case TYPE_COL3:
- controlp->set(floaterp->childGetValue("color_swatch"));
- //col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
- //col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
- //col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
- //controlp->set(col3.getValue());
- break;
- case TYPE_COL4U:
- col3.setValue(floaterp->childGetValue("color_swatch"));
- col4U.setVecScaleClamp(col3);
- col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger();
- controlp->set(col4U.getValue());
- break;
- default:
- break;
- }
-}
-
-// static
-void LLFloaterSettingsDebug::onClickDefault(void* user_data)
-{
- LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
- LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
- LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
-
- if (controlp)
- {
- controlp->resetToDefault();
- floaterp->updateControl(controlp);
- }
-}
-
-// we've switched controls, or doing per-frame update, so update spinners, etc.
-void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
-{
- LLSpinCtrl* spinner1 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_1");
- LLSpinCtrl* spinner2 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_2");
- LLSpinCtrl* spinner3 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_3");
- LLSpinCtrl* spinner4 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_4");
- LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch");
-
- if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)
- {
- llwarns << "Could not find all desired controls by name"
- << llendl;
- return;
- }
-
- spinner1->setVisible(FALSE);
- spinner2->setVisible(FALSE);
- spinner3->setVisible(FALSE);
- spinner4->setVisible(FALSE);
- color_swatch->setVisible(FALSE);
- childSetVisible("val_text", FALSE);
- childSetVisible("boolean_combo", FALSE);
- mComment->setText(LLString::null);
-
- if (controlp)
- {
- eControlType type = controlp->type();
- mComment->setText(controlp->getComment());
- spinner1->setMaxValue(F32_MAX);
- spinner2->setMaxValue(F32_MAX);
- spinner3->setMaxValue(F32_MAX);
- spinner4->setMaxValue(F32_MAX);
- spinner1->setMinValue(-F32_MAX);
- spinner2->setMinValue(-F32_MAX);
- spinner3->setMinValue(-F32_MAX);
- spinner4->setMinValue(-F32_MAX);
- if (!spinner1->hasFocus())
- {
- spinner1->setIncrement(0.1f);
- }
- if (!spinner2->hasFocus())
- {
- spinner2->setIncrement(0.1f);
- }
- if (!spinner3->hasFocus())
- {
- spinner3->setIncrement(0.1f);
- }
- if (!spinner4->hasFocus())
- {
- spinner4->setIncrement(0.1f);
- }
-
- LLSD sd = controlp->get();
- switch(type)
- {
- case TYPE_U32:
- spinner1->setVisible(TRUE);
- spinner1->setLabel(LLString("value")); // Debug, don't translate
- if (!spinner1->hasFocus())
- {
- spinner1->setValue(sd);
- spinner1->setMinValue((F32)U32_MIN);
- spinner1->setMaxValue((F32)U32_MAX);
- spinner1->setIncrement(1.f);
- spinner1->setPrecision(0);
- }
- break;
- case TYPE_S32:
- spinner1->setVisible(TRUE);
- spinner1->setLabel(LLString("value")); // Debug, don't translate
- if (!spinner1->hasFocus())
- {
- spinner1->setValue(sd);
- spinner1->setMinValue((F32)S32_MIN);
- spinner1->setMaxValue((F32)S32_MAX);
- spinner1->setIncrement(1.f);
- spinner1->setPrecision(0);
- }
- break;
- case TYPE_F32:
- spinner1->setVisible(TRUE);
- spinner1->setLabel(LLString("value")); // Debug, don't translate
- if (!spinner1->hasFocus())
- {
- spinner1->setPrecision(3);
- spinner1->setValue(sd);
- }
- break;
- case TYPE_BOOLEAN:
- childSetVisible("boolean_combo", TRUE);
-
- if (!childHasFocus("boolean_combo"))
- {
- if (sd.asBoolean())
- {
- childSetValue("boolean_combo", LLSD("true"));
- }
- else
- {
- childSetValue("boolean_combo", LLSD(""));
- }
- }
- break;
- case TYPE_STRING:
- childSetVisible("val_text", TRUE);
- if (!childHasFocus("val_text"))
- {
- childSetValue("val_text", sd);
- }
- break;
- case TYPE_VEC3:
- {
- LLVector3 v;
- v.setValue(sd);
- spinner1->setVisible(TRUE);
- spinner1->setLabel(LLString("X"));
- spinner2->setVisible(TRUE);
- spinner2->setLabel(LLString("Y"));
- spinner3->setVisible(TRUE);
- spinner3->setLabel(LLString("Z"));
- if (!spinner1->hasFocus())
- {
- spinner1->setPrecision(3);
- spinner1->setValue(v[VX]);
- }
- if (!spinner2->hasFocus())
- {
- spinner2->setPrecision(3);
- spinner2->setValue(v[VY]);
- }
- if (!spinner3->hasFocus())
- {
- spinner3->setPrecision(3);
- spinner3->setValue(v[VZ]);
- }
- break;
- }
- case TYPE_VEC3D:
- {
- LLVector3d v;
- v.setValue(sd);
- spinner1->setVisible(TRUE);
- spinner1->setLabel(LLString("X"));
- spinner2->setVisible(TRUE);
- spinner2->setLabel(LLString("Y"));
- spinner3->setVisible(TRUE);
- spinner3->setLabel(LLString("Z"));
- if (!spinner1->hasFocus())
- {
- spinner1->setPrecision(3);
- spinner1->setValue(v[VX]);
- }
- if (!spinner2->hasFocus())
- {
- spinner2->setPrecision(3);
- spinner2->setValue(v[VY]);
- }
- if (!spinner3->hasFocus())
- {
- spinner3->setPrecision(3);
- spinner3->setValue(v[VZ]);
- }
- break;
- }
- case TYPE_RECT:
- {
- LLRect r;
- r.setValue(sd);
- spinner1->setVisible(TRUE);
- spinner1->setLabel(LLString("Left"));
- spinner2->setVisible(TRUE);
- spinner2->setLabel(LLString("Right"));
- spinner3->setVisible(TRUE);
- spinner3->setLabel(LLString("Bottom"));
- spinner4->setVisible(TRUE);
- spinner4->setLabel(LLString("Top"));
- if (!spinner1->hasFocus())
- {
- spinner1->setPrecision(0);
- spinner1->setValue(r.mLeft);
- }
- if (!spinner2->hasFocus())
- {
- spinner2->setPrecision(0);
- spinner2->setValue(r.mRight);
- }
- if (!spinner3->hasFocus())
- {
- spinner3->setPrecision(0);
- spinner3->setValue(r.mBottom);
- }
- if (!spinner4->hasFocus())
- {
- spinner4->setPrecision(0);
- spinner4->setValue(r.mTop);
- }
-
- spinner1->setMinValue((F32)S32_MIN);
- spinner1->setMaxValue((F32)S32_MAX);
- spinner1->setIncrement(1.f);
-
- spinner2->setMinValue((F32)S32_MIN);
- spinner2->setMaxValue((F32)S32_MAX);
- spinner2->setIncrement(1.f);
-
- spinner3->setMinValue((F32)S32_MIN);
- spinner3->setMaxValue((F32)S32_MAX);
- spinner3->setIncrement(1.f);
-
- spinner4->setMinValue((F32)S32_MIN);
- spinner4->setMaxValue((F32)S32_MAX);
- spinner4->setIncrement(1.f);
- break;
- }
- case TYPE_COL4:
- {
- LLColor4 clr;
- clr.setValue(sd);
- color_swatch->setVisible(TRUE);
- // only set if changed so color picker doesn't update
- if(clr != LLColor4(color_swatch->getValue()))
- {
- color_swatch->set(LLColor4(sd), TRUE, FALSE);
- }
- spinner4->setVisible(TRUE);
- spinner4->setLabel(LLString("Alpha"));
- if (!spinner4->hasFocus())
- {
- spinner4->setPrecision(3);
- spinner4->setMinValue(0.0);
- spinner4->setMaxValue(1.f);
- spinner4->setValue(clr.mV[VALPHA]);
- }
- break;
- }
- case TYPE_COL3:
- {
- LLColor3 clr;
- clr.setValue(sd);
- color_swatch->setVisible(TRUE);
- color_swatch->setValue(sd);
- break;
- }
- case TYPE_COL4U:
- {
- LLColor4U clr;
- clr.setValue(sd);
- color_swatch->setVisible(TRUE);
- if(LLColor4(clr) != LLColor4(color_swatch->getValue()))
- {
- color_swatch->set(LLColor4(clr), TRUE, FALSE);
- }
- spinner4->setVisible(TRUE);
- spinner4->setLabel(LLString("Alpha"));
- if(!spinner4->hasFocus())
- {
- spinner4->setPrecision(0);
- spinner4->setValue(clr.mV[VALPHA]);
- }
-
- spinner4->setMinValue(0);
- spinner4->setMaxValue(255);
- spinner4->setIncrement(1.f);
-
- break;
- }
- default:
- mComment->setText(LLString("unknown"));
- break;
- }
- }
-
-}
diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h
deleted file mode 100644
index 389a474467..0000000000
--- a/indra/newview/llfloatersettingsdebug.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * @file llfloatersettingsdebug.h
- * @brief floater for debugging internal viewer settings
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2007, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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$
- */
-
-#ifndef LLFLOATERDEBUGSETTINGS_H
-#define LLFLOATERDEBUGSETTINGS_H
-
-#include "llcontrol.h"
-#include "llfloater.h"
-#include "lltexteditor.h"
-
-class LLFloaterSettingsDebug : public LLFloater
-{
-public:
- LLFloaterSettingsDebug();
- virtual ~LLFloaterSettingsDebug();
-
- virtual BOOL postBuild();
- virtual void draw();
-
- void updateControl(LLControlVariable* control);
-
- static void show(void*);
- static void onSettingSelect(LLUICtrl* ctrl, void* user_data);
- static void onCommitSettings(LLUICtrl* ctrl, void* user_data);
- static void onClickDefault(void* user_data);
-
-protected:
- static LLFloaterSettingsDebug* sInstance;
- LLTextEditor* mComment;
-};
-
-#endif //LLFLOATERDEBUGSETTINGS_H
-
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index e24b5251e0..7ceb40499f 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -163,6 +163,8 @@ LLNetMap::LLNetMap(
mPopupMenuHandle = menu->getHandle();
sInstance = this;
+
+ gSavedSettings.getControl("MiniMapRotate")->addListener(&mNetMapListener);
}
LLNetMap::~LLNetMap()
@@ -826,3 +828,9 @@ void LLNetMap::handleZoomLevel(void* which)
break;
}
}
+
+bool LLRotateNetMapListener::handleEvent(LLPointer<LLEvent> event, const LLSD& user_data)
+{
+ LLNetMap::setRotateMap(event->getValue().asBoolean());
+ return true;
+}
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index dc696238ea..d375413d1d 100644
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -45,6 +45,12 @@ class LLCoordGL;
class LLTextBox;
class LLMenuGL;
+class LLRotateNetMapListener : public LLSimpleListener
+{
+public:
+ bool handleEvent(LLPointer<LLEvent>, const LLSD& user_data);
+};
+
class LLNetMap : public LLUICtrl
{
public:
@@ -111,6 +117,8 @@ public:
LLTextBox* mTextBoxNorthWest;
LLTextBox* mTextBoxSouthWest;
+ LLRotateNetMapListener mNetMapListener;
+
static BOOL sRotateMap;
static LLNetMap* sInstance;
};
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index b6e8c1a7f3..1e933706e1 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -206,7 +206,7 @@ void LLLoginHandler::parse(const LLSD& queryMap)
if (LLAppViewer::instance()->getLoginURIs().size() == 0)
{
- gGridName = gGridInfo[gGridChoice].mName; /* Flawfinder: ignore */
+ snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName); /* Flawfinder: ignore */
LLAppViewer::instance()->resetURIs();
}
@@ -429,7 +429,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLTextBox* channel_text = LLUICtrlFactory::getTextBoxByName(this, "channel_text");
if (channel_text)
{
- channel_text->setText(gSavedSettings.getString("VersionChannelName"));
+ channel_text->setText(gChannelName);
channel_text->setClickedCallback(onClickVersion);
channel_text->setCallbackUserData(this);
}
@@ -471,7 +471,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
// kick off a request to grab the url manually
gResponsePtr = LLIamHereLogin::build( this );
- std::string login_page = gSavedSettings.getString("LoginPage");
+ std::string login_page = LLAppViewer::instance()->getLoginPage();
if (login_page.empty())
{
login_page = getString( "real_url" );
@@ -927,7 +927,7 @@ void LLPanelLogin::loadLoginPage()
std::ostringstream oStr;
- std::string login_page = gSavedSettings.getString("LoginPage");
+ std::string login_page = LLAppViewer::instance()->getLoginPage();
if (login_page.empty())
{
login_page = sInstance->getString( "real_url" );
@@ -984,24 +984,24 @@ void LLPanelLogin::loadLoginPage()
}
LLString firstname, lastname;
-
- if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
- {
- LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
- firstname = cmd_line_login[0].asString();
- lastname = cmd_line_login[1].asString();
- password = cmd_line_login[2].asString();
- }
-
- if (firstname.empty())
+
+ if (gCmdLineFirstName.empty())
{
firstname = gSavedSettings.getString("FirstName");
}
+ else
+ {
+ firstname = gCmdLineFirstName;
+ }
- if (lastname.empty())
+ if (gCmdLineLastName.empty())
{
lastname = gSavedSettings.getString("LastName");
}
+ else
+ {
+ lastname = gCmdLineLastName;
+ }
LLString version = llformat("%d.%d.%d (%d)",
LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD);
@@ -1020,9 +1020,9 @@ void LLPanelLogin::loadLoginPage()
curl_free(curl_version);
- if (!password.empty())
+ if (!gCmdLinePassword.empty())
{
- oStr << "&password=" << password;
+ oStr << "&password=" << gCmdLinePassword;
}
else if (!(password = load_password_from_disk()).empty())
{
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index f2475d84d9..d2bc8f4100 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -447,7 +447,7 @@ BOOL idle_startup()
{
fclose(found_template);
- U32 port = gSavedSettings.getU32("UserConnectionPort");
+ U32 port = gAgent.mViewerPort;
if ((NET_USE_OS_ASSIGNED_PORT == port) && // if nothing specified on command line (-port)
(gSavedSettings.getBOOL("ConnectionPortEnabled")))
@@ -497,7 +497,7 @@ BOOL idle_startup()
invalid_message_callback,
NULL);
- if (gSavedSettings.getBOOL("LogMessages"))
+ if (gSavedSettings.getBOOL("LogMessages") || gLogMessages)
{
llinfos << "Message logging activated!" << llendl;
msg->startLogging();
@@ -516,23 +516,18 @@ BOOL idle_startup()
}
gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS);
-
- F32 dropPercent = gSavedSettings.getF32("PacketDropPercentage");
- msg->mPacketRing.setDropPercentage(dropPercent);
-
- F32 inBandwidth = gSavedSettings.getF32("InBandwidth");
- F32 outBandwidth = gSavedSettings.getF32("OutBandwidth");
- if (inBandwidth != 0.f)
+ msg->mPacketRing.setDropPercentage(gPacketDropPercentage);
+ if (gInBandwidth != 0.f)
{
- llinfos << "Setting packetring incoming bandwidth to " << inBandwidth << llendl;
+ llinfos << "Setting packetring incoming bandwidth to " << gInBandwidth << llendl;
msg->mPacketRing.setUseInThrottle(TRUE);
- msg->mPacketRing.setInBandwidth(inBandwidth);
+ msg->mPacketRing.setInBandwidth(gInBandwidth);
}
- if (outBandwidth != 0.f)
+ if (gOutBandwidth != 0.f)
{
- llinfos << "Setting packetring outgoing bandwidth to " << outBandwidth << llendl;
+ llinfos << "Setting packetring outgoing bandwidth to " << gOutBandwidth << llendl;
msg->mPacketRing.setUseOutThrottle(TRUE);
- msg->mPacketRing.setOutBandwidth(outBandwidth);
+ msg->mPacketRing.setOutBandwidth(gOutBandwidth);
}
}
@@ -546,7 +541,7 @@ BOOL idle_startup()
// or audio cues in connection UI.
//-------------------------------------------------
- if (FALSE == gSavedSettings.getBOOL("NoAudio"))
+ if (gUseAudio)
{
#if LL_FMOD
gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD();
@@ -591,13 +586,14 @@ BOOL idle_startup()
show_connect_box = FALSE;
}
- else if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
- {
- LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
- firstname = cmd_line_login[0].asString();
- lastname = cmd_line_login[1].asString();
+ else if( !gCmdLineFirstName.empty()
+ && !gCmdLineLastName.empty()
+ && !gCmdLinePassword.empty())
+ {
+ firstname = gCmdLineFirstName;
+ lastname = gCmdLineLastName;
- LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str());
+ LLMD5 pass((unsigned char*)gCmdLinePassword.c_str());
char md5pass[33]; /* Flawfinder: ignore */
pass.hex_digest(md5pass);
password = md5pass;
@@ -608,9 +604,9 @@ BOOL idle_startup()
#else
show_connect_box = FALSE;
#endif
- gSavedSettings.setBOOL("AutoLogin", TRUE);
- }
- else if (gSavedSettings.getBOOL("AutoLogin"))
+ gAutoLogin = TRUE;
+ }
+ else if (gAutoLogin || gSavedSettings.getBOOL("AutoLogin"))
{
firstname = gSavedSettings.getString("FirstName");
lastname = gSavedSettings.getString("LastName");
@@ -785,14 +781,19 @@ BOOL idle_startup()
// create necessary directories
// *FIX: these mkdir's should error check
gDirUtilp->setLindenUserDir(firstname.c_str(), lastname.c_str());
- LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str());
- // Set UserSettingsFile to the default value.
- gSavedSettings.setString("UserSettingsFile",
- gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE));
- // Overwrite default user settings with user settings
- LLAppViewer::instance()->loadSettingsFromDirectory(LL_PATH_PER_SL_ACCOUNT);
+ LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str());
+
+ // the mute list is loaded in the llmutelist class.
+
+ gSavedSettings.loadFromFile(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,"overrides.xml"));
+
+ // handle the per account settings setup
+ gPerAccountSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE);
+
+ // per account settings. Set defaults here if not found. If we get a bunch of these, eventually move to a function.
+ gSavedPerAccountSettings.loadFromFile(gPerAccountSettingsFileName);
// Need to set the LastLogoff time here if we don't have one. LastLogoff is used for "Recent Items" calculation
// and startup time is close enough if we don't have a real value.
@@ -827,7 +828,7 @@ BOOL idle_startup()
gSavedSettings.setS32("ServerChoice", gGridChoice);
if (gGridChoice == GRID_INFO_OTHER)
{
- gGridName = server_label;/* Flawfinder: ignore */
+ snprintf(gGridName, MAX_STRING, "%s", server_label.c_str());/* Flawfinder: ignore */
}
if ( user_picked_server )
@@ -931,7 +932,7 @@ BOOL idle_startup()
//requested_options.push_back("inventory-meat");
//requested_options.push_back("inventory-skel-targets");
#if (!defined LL_MINIMIAL_REQUESTED_OPTIONS)
- if(FALSE == gSavedSettings.getBOOL("NoInventoryLibrary"))
+ if(gRequestInventoryLibrary)
{
requested_options.push_back("inventory-lib-root");
requested_options.push_back("inventory-lib-owner");
@@ -951,7 +952,7 @@ BOOL idle_startup()
requested_options.push_back("tutorial_setting");
requested_options.push_back("login-flags");
requested_options.push_back("global-textures");
- if(gSavedSettings.getBOOL("ConnectAsGod"))
+ if(gGodConnect)
{
gSavedSettings.setBOOL("UseDebugMenus", TRUE);
requested_options.push_back("god-connect");
@@ -1239,6 +1240,7 @@ BOOL idle_startup()
<< (sAuthUriNum + 1) << ". ";
auth_desc = s.str();
LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
+ sAuthUriNum++;
return do_normal_idle;
}
break;
@@ -1488,7 +1490,7 @@ BOOL idle_startup()
args["[ERROR_MESSAGE]"] = emsg.str();
gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
reset_login();
- gSavedSettings.setBOOL("AutoLogin", FALSE);
+ gAutoLogin = FALSE;
show_connect_box = TRUE;
}
@@ -1508,7 +1510,7 @@ BOOL idle_startup()
args["[ERROR_MESSAGE]"] = emsg.str();
gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
reset_login();
- gSavedSettings.setBOOL("AutoLogin", FALSE);
+ gAutoLogin = FALSE;
show_connect_box = TRUE;
// Don't save an incorrect password to disk.
save_password_to_disk(NULL);
@@ -1532,7 +1534,7 @@ BOOL idle_startup()
// Since we connected, save off the settings so the user doesn't have to
// type the name/password again if we crash.
- gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
+ gSavedSettings.saveToFile(gSettingsFileName, TRUE);
//
// Initialize classes w/graphics stuff.
@@ -2099,7 +2101,7 @@ BOOL idle_startup()
gSavedSettings.setString( "NextLoginLocation", "" );
// and make sure it's saved
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
+ gSavedSettings.saveToFile( gSettingsFileName, TRUE );
};
if (!gNoRender)
@@ -2391,7 +2393,7 @@ void login_show()
if( GRID_INFO_OTHER == gGridChoice )
{
- LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER );
+ LLPanelLogin::addServer( gGridName, GRID_INFO_OTHER );
}
else
{
@@ -2439,7 +2441,7 @@ void login_callback(S32 option, void *userdata)
{
// turn off the setting and write out to disk
gSavedSettings.setBOOL("RememberPassword", FALSE);
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
+ gSavedSettings.saveToFile(gSettingsFileName, TRUE);
// stomp the saved password on disk
save_password_to_disk(NULL);
@@ -2633,7 +2635,7 @@ void login_alert_status(S32 option, void* user_data)
void update_app(BOOL mandatory, const std::string& auth_msg)
{
// store off config state, as we might quit soon
- gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
+ gSavedSettings.saveToFile(gSettingsFileName, TRUE);
std::ostringstream message;
@@ -2733,7 +2735,7 @@ void update_dialog_callback(S32 option, void *userdata)
// *TODO change userserver to be grid on both viewer and sim, since
// userserver no longer exists.
query_map["userserver"] = gGridName;
- query_map["channel"] = gSavedSettings.getString("VersionChannelName");
+ query_map["channel"] = gChannelName;
// *TODO constantize this guy
LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp
index 9c8bb97343..ffa921125a 100644
--- a/indra/newview/lltoolgun.cpp
+++ b/indra/newview/lltoolgun.cpp
@@ -80,10 +80,14 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
{
if( gAgent.cameraMouselook() )
{
- const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
+ #if 1 //LL_WINDOWS || LL_DARWIN
+ const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
+ #else
+ const F32 NOMINAL_MOUSE_SENSITIVITY = 0.025f;
+ #endif
- F32 mouse_sensitivity = gSavedSettings.getF32("MouseSensitivity");
- mouse_sensitivity = clamp_rescale(mouse_sensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY;
+
+ F32 mouse_sensitivity = clamp_rescale(gMouseSensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY;
// ...move the view with the mouse
@@ -94,7 +98,7 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
if (dx != 0 || dy != 0)
{
// ...actually moved off center
- if (gSavedSettings.getBOOL("InvertMouse"))
+ if (gInvertMouse)
{
gAgent.pitch(mouse_sensitivity * -dy);
}
diff --git a/indra/newview/llvectorperfoptions.cpp b/indra/newview/llvectorperfoptions.cpp
index 34c10a4f72..ca8ae2e886 100644
--- a/indra/newview/llvectorperfoptions.cpp
+++ b/indra/newview/llvectorperfoptions.cpp
@@ -31,4 +31,101 @@
#include "llviewerprecompiledheaders.h"
-// Deprecated - moved into llviewerjointmesh
+#include "llvectorperfoptions.h"
+#include "llviewerjointmesh.h"
+#include "llviewercontrol.h"
+
+// Initially, we test the performance of the vectorization code, then
+// turn it off if it ends up being slower. JC
+BOOL gVectorizePerfTest = TRUE;
+BOOL gVectorizeEnable = FALSE;
+U32 gVectorizeProcessor = 0;
+BOOL gVectorizeSkin = FALSE;
+
+void update_vector_performances(void)
+{
+ char *vp;
+
+ switch(gVectorizeProcessor)
+ {
+ case 2: vp = "SSE2"; break; // *TODO: replace the magic #s
+ case 1: vp = "SSE"; break;
+ default: vp = "COMPILER DEFAULT"; break;
+ }
+ llinfos << "Vectorization : " << ( gVectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
+ llinfos << "Vector Processor : " << vp << llendl ;
+ llinfos << "Vectorized Skinning : " << ( gVectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
+
+ if(gVectorizeEnable && gVectorizeSkin)
+ {
+ switch(gVectorizeProcessor)
+ {
+ case 2:
+ LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE2;
+ break;
+ case 1:
+ LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE;
+ break;
+ default:
+ LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryVectorized;
+ break;
+ }
+ }
+ else
+ {
+ LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryOriginal;
+ }
+}
+
+
+class LLVectorizationEnableListener: public LLSimpleListener
+{
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+ {
+ gVectorizeEnable = event->getValue().asBoolean();
+ update_vector_performances();
+ return true;
+ }
+};
+static LLVectorizationEnableListener vectorization_enable_listener;
+
+class LLVectorizeSkinListener: public LLSimpleListener
+{
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+ {
+ gVectorizeSkin = event->getValue().asBoolean();
+ update_vector_performances();
+ return true;
+ }
+};
+static LLVectorizeSkinListener vectorize_skin_listener;
+
+class LLVectorProcessorListener: public LLSimpleListener
+{
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+ {
+ gVectorizeProcessor = event->getValue().asInteger();
+ update_vector_performances();
+ return true;
+ }
+};
+static LLVectorProcessorListener vector_processor_listener;
+
+void LLVectorPerformanceOptions::initClass()
+{
+ gVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
+ gVectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
+ gVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
+ gVectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
+ update_vector_performances();
+
+ // these are currently static in this file, so they can't move to settings_setup_listeners
+ gSavedSettings.getControl("VectorizeEnable")->addListener(&vectorization_enable_listener);
+ gSavedSettings.getControl("VectorizeProcessor")->addListener(&vector_processor_listener);
+ gSavedSettings.getControl("VectorizeSkin")->addListener(&vectorize_skin_listener);
+}
+
+void LLVectorPerformanceOptions::cleanupClass()
+{
+}
+
diff --git a/indra/newview/llvectorperfoptions.h b/indra/newview/llvectorperfoptions.h
index e2a0a37e33..dac4d1f86c 100644
--- a/indra/newview/llvectorperfoptions.h
+++ b/indra/newview/llvectorperfoptions.h
@@ -32,6 +32,10 @@
#ifndef LL_VECTORPERFOPTIONS_H
#define LL_VECTORPERFOPTIONS_H
-// Deprecated - moved into llviewerjointmesh
+namespace LLVectorPerformanceOptions
+{
+ void initClass(); // Run after configuration files are read.
+ void cleanupClass();
+};
#endif
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index fd85ac1bc1..affce91b79 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -65,7 +65,7 @@ void init_audio()
BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio");
- if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload"))
+ if (!mute_audio && gPreloadSounds)
{
gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndAlert")));
gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndBadKeystroke")));
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 7733ef5ae1..9c81f89e99 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -36,47 +36,26 @@
#include "indra_constants.h"
-// For Listeners
-#include "audioengine.h"
-#include "llagent.h"
-#include "llconsole.h"
-#include "lldrawpoolterrain.h"
-#include "llflexibleobject.h"
-#include "llfeaturemanager.h"
-#include "llglslshader.h"
-#include "llnetmap.h"
-#include "llpanelgeneral.h"
-#include "llpanelinput.h"
-#include "llsky.h"
-#include "llvieweraudio.h"
-#include "llviewerimagelist.h"
-#include "llviewerthrottle.h"
-#include "llviewerwindow.h"
-#include "llvoavatar.h"
-#include "llvoiceclient.h"
-#include "llvosky.h"
-#include "llvotree.h"
-#include "llvovolume.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llviewerjoystick.h"
-#include "llviewerparcelmgr.h"
-#include "llparcel.h"
-#include "llnotify.h"
-#include "llkeyboard.h"
-#include "llerrorcontrol.h"
-#include "llversionviewer.h"
-#include "llappviewer.h"
-#include "llvosurfacepatch.h"
-#include "llvowlsky.h"
-#include "llglimmediate.h"
+#include "v3math.h"
+#include "v3dmath.h"
+#include "llrect.h"
+#include "v4color.h"
+#include "v4coloru.h"
+#include "v3color.h"
+
+#include "llfloater.h"
+#include "llvieweruictrlfactory.h"
+#include "llfirstuse.h"
+#include "llcombobox.h"
+#include "llspinctrl.h"
+#include "llcolorswatch.h"
#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
BOOL gHackGodmode = FALSE;
#endif
+LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL;
-std::map<LLString, LLControlGroup*> gSettings;
LLControlGroup gSavedSettings; // saved at end of session
LLControlGroup gSavedPerAccountSettings; // saved at end of session
LLControlGroup gViewerArt; // read-only
@@ -86,440 +65,461 @@ LLControlGroup gCrashSettings; // saved at end of session
LLString gLastRunVersion;
LLString gCurrentVersion;
-extern BOOL gResizeScreenTexture;
+LLString gSettingsFileName;
+LLString gPerAccountSettingsFileName;
-////////////////////////////////////////////////////////////////////////////
-// Listeners
-
-static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue)
-{
- LLVOAvatar::sVisibleInFirstPerson = newvalue.asBoolean();
- return true;
-}
-
-static bool handleRenderFarClipChanged(const LLSD& newvalue)
+LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor")
{
- F32 draw_distance = (F32) newvalue.asReal();
- gAgent.mDrawDistance = draw_distance;
- if (gWorldPointer)
- {
- gWorldPointer->setLandFarClip(draw_distance);
- }
- return true;
}
-static bool handleTerrainDetailChanged(const LLSD& newvalue)
+LLFloaterSettingsDebug::~LLFloaterSettingsDebug()
{
- LLDrawPoolTerrain::sDetailMode = newvalue.asInteger();
- return true;
+ sInstance = NULL;
}
-
-static bool handleSetShaderChanged(const LLSD& newvalue)
+BOOL LLFloaterSettingsDebug::postBuild()
{
- LLShaderMgr::setShaders();
- return true;
-}
+ LLComboBox* settings_combo = LLUICtrlFactory::getComboBoxByName(this, "settings_combo");
-static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
-{
- if (gPipeline.isInit())
+ LLControlGroup::ctrl_name_table_t::iterator name_it;
+ for(name_it = gSavedSettings.mNameTable.begin(); name_it != gSavedSettings.mNameTable.end(); ++name_it)
{
- gPipeline.releaseGLBuffers();
- gPipeline.createGLBuffers();
+ settings_combo->add(name_it->first, (void*)name_it->second);
}
- return true;
-}
-
-static bool handleVolumeLODChanged(const LLSD& newvalue)
-{
- LLVOVolume::sLODFactor = (F32) newvalue.asReal();
- LLVOVolume::sDistanceFactor = 1.f-LLVOVolume::sLODFactor * 0.1f;
- return true;
-}
-
-static bool handleAvatarLODChanged(const LLSD& newvalue)
-{
- LLVOAvatar::sLODFactor = (F32) newvalue.asReal();
- return true;
-}
-
-static bool handleTerrainLODChanged(const LLSD& newvalue)
-{
- LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal();
- //sqaure lod factor to get exponential range of [0,4] and keep
- //a value of 1 in the middle of the detail slider for consistency
- //with other detail sliders (see panel_preferences_graphics1.xml)
- LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor;
- return true;
-}
-
-static bool handleTreeLODChanged(const LLSD& newvalue)
-{
- LLVOTree::sTreeFactor = (F32) newvalue.asReal();
- return true;
-}
-
-static bool handleFlexLODChanged(const LLSD& newvalue)
-{
- LLVolumeImplFlexible::sUpdateFactor = (F32) newvalue.asReal();
- return true;
-}
-
-static bool handleGammaChanged(const LLSD& newvalue)
-{
- F32 gamma = (F32) newvalue.asReal();
- if (gamma == 0.0f)
+ for(name_it = gSavedPerAccountSettings.mNameTable.begin(); name_it != gSavedPerAccountSettings.mNameTable.end(); ++name_it)
{
- gamma = 1.0f; // restore normal gamma
+ settings_combo->add(name_it->first, (void*)name_it->second);
}
- if (gViewerWindow && gViewerWindow->getWindow() && gamma != gViewerWindow->getWindow()->getGamma())
+ for(name_it = gColors.mNameTable.begin(); name_it != gColors.mNameTable.end(); ++name_it)
{
- // Only save it if it's changed
- if (!gViewerWindow->getWindow()->setGamma(gamma))
- {
- llwarns << "setGamma failed!" << llendl;
- }
+ settings_combo->add(name_it->first, (void*)name_it->second);
}
+ settings_combo->sortByName();
+ settings_combo->setCommitCallback(onSettingSelect);
+ settings_combo->setCallbackUserData(this);
+ settings_combo->updateSelection();
+
+ childSetCommitCallback("val_spinner_1", onCommitSettings);
+ childSetUserData("val_spinner_1", this);
+ childSetCommitCallback("val_spinner_2", onCommitSettings);
+ childSetUserData("val_spinner_2", this);
+ childSetCommitCallback("val_spinner_3", onCommitSettings);
+ childSetUserData("val_spinner_3", this);
+ childSetCommitCallback("val_spinner_4", onCommitSettings);
+ childSetUserData("val_spinner_4", this);
+ childSetCommitCallback("val_text", onCommitSettings);
+ childSetUserData("val_text", this);
+ childSetCommitCallback("boolean_combo", onCommitSettings);
+ childSetUserData("boolean_combo", this);
+ childSetCommitCallback("color_swatch", onCommitSettings);
+ childSetUserData("color_swatch", this);
+ childSetAction("default_btn", onClickDefault, this);
+ mComment = getChild<LLTextEditor>("comment_text");
+ return TRUE;
+}
+
+void LLFloaterSettingsDebug::draw()
+{
+ LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
+ LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
+ updateControl(controlp);
+
+ LLFloater::draw();
+}
+
+//static
+void LLFloaterSettingsDebug::show(void*)
+{
+ if (sInstance == NULL)
+ {
+ sInstance = new LLFloaterSettingsDebug();
- return true;
-}
-
-const F32 MAX_USER_FOG_RATIO = 10.f;
-const F32 MIN_USER_FOG_RATIO = 0.5f;
-
-static bool handleFogRatioChanged(const LLSD& newvalue)
-{
- F32 fog_ratio = llmax(MIN_USER_FOG_RATIO, llmin((F32) newvalue.asReal(), MAX_USER_FOG_RATIO));
- gSky.setFogRatio(fog_ratio);
- return true;
-}
-
-static bool handleMaxPartCountChanged(const LLSD& newvalue)
-{
- LLViewerPartSim::setMaxPartCount(newvalue.asInteger());
- return true;
-}
-
-const S32 MAX_USER_COMPOSITE_LIMIT = 100;
-const S32 MIN_USER_COMPOSITE_LIMIT = 0;
+ gUICtrlFactory->buildFloater(sInstance, "floater_settings_debug.xml");
+ }
-static bool handleCompositeLimitChanged(const LLSD& newvalue)
-{
- S32 composite_limit = llmax(MIN_USER_COMPOSITE_LIMIT, llmin((S32)newvalue.asInteger(), MAX_USER_COMPOSITE_LIMIT));
- LLVOAvatar::sMaxOtherAvatarsToComposite = composite_limit;
- return true;
+ sInstance->open(); /* Flawfinder: ignore */
+}
+
+//static
+void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data)
+{
+ LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
+ LLComboBox* combo_box = (LLComboBox*)ctrl;
+ LLControlBase* controlp = (LLControlBase*)combo_box->getCurrentUserdata();
+
+ floaterp->updateControl(controlp);
+}
+
+//static
+void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
+{
+ LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
+
+ LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
+ LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
+
+ LLVector3 vector;
+ LLVector3d vectord;
+ LLRect rect;
+ LLColor4 col4;
+ LLColor3 col3;
+ LLColor4U col4U;
+ LLColor4 color_with_alpha;
+
+ switch(controlp->type())
+ {
+ case TYPE_U32:
+ controlp->set(floaterp->childGetValue("val_spinner_1"));
+ break;
+ case TYPE_S32:
+ controlp->set(floaterp->childGetValue("val_spinner_1"));
+ break;
+ case TYPE_F32:
+ controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal()));
+ break;
+ case TYPE_BOOLEAN:
+ controlp->set(floaterp->childGetValue("boolean_combo"));
+ break;
+ case TYPE_STRING:
+ controlp->set(LLSD(floaterp->childGetValue("val_text").asString()));
+ break;
+ case TYPE_VEC3:
+ vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal();
+ vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
+ vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
+ controlp->set(vector.getValue());
+ break;
+ case TYPE_VEC3D:
+ vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal();
+ vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal();
+ vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal();
+ controlp->set(vectord.getValue());
+ break;
+ case TYPE_RECT:
+ rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger();
+ rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger();
+ rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger();
+ rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger();
+ controlp->set(rect.getValue());
+ break;
+ case TYPE_COL4:
+ col3.setValue(floaterp->childGetValue("color_swatch"));
+ col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal());
+ controlp->set(col4.getValue());
+ break;
+ case TYPE_COL3:
+ controlp->set(floaterp->childGetValue("color_swatch"));
+ //col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
+ //col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
+ //col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
+ //controlp->set(col3.getValue());
+ break;
+ case TYPE_COL4U:
+ col3.setValue(floaterp->childGetValue("color_swatch"));
+ col4U.setVecScaleClamp(col3);
+ col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger();
+ controlp->set(col4U.getValue());
+ break;
+ default:
+ break;
+ }
}
-static bool handleVideoMemoryChanged(const LLSD& newvalue)
+// static
+void LLFloaterSettingsDebug::onClickDefault(void* user_data)
{
- gImageList.updateMaxResidentTexMem(newvalue.asInteger());
- return true;
-}
+ LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
+ LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
+ LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
-static bool handleBandwidthChanged(const LLSD& newvalue)
-{
- gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal());
- return true;
-}
-
-static bool handleChatFontSizeChanged(const LLSD& newvalue)
-{
- if(gConsole)
+ if (controlp)
{
- gConsole->setFontSize(newvalue.asInteger());
+ controlp->resetToDefault();
+ floaterp->updateControl(controlp);
}
- return true;
}
-static bool handleChatPersistTimeChanged(const LLSD& newvalue)
+// we've switched controls, or doing per-frame update, so update spinners, etc.
+void LLFloaterSettingsDebug::updateControl(LLControlBase* controlp)
{
- if(gConsole)
- {
- gConsole->setLinePersistTime((F32) newvalue.asReal());
- }
- return true;
-}
+ LLSpinCtrl* spinner1 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_1");
+ LLSpinCtrl* spinner2 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_2");
+ LLSpinCtrl* spinner3 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_3");
+ LLSpinCtrl* spinner4 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_4");
+ LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch");
-static bool handleConsoleMaxLinesChanged(const LLSD& newvalue)
-{
- if(gConsole)
+ if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)
{
- gConsole->setMaxLines(newvalue.asInteger());
+ llwarns << "Could not find all desired controls by name"
+ << llendl;
+ return;
}
- return true;
-}
-static void handleAudioVolumeChanged(const LLSD& newvalue)
-{
- audio_update_volume(true);
-}
-
-static bool handleJoystickChanged(const LLSD& newvalue)
-{
- LLViewerJoystick::updateCamera(TRUE);
- return true;
-}
+ spinner1->setVisible(FALSE);
+ spinner2->setVisible(FALSE);
+ spinner3->setVisible(FALSE);
+ spinner4->setVisible(FALSE);
+ color_swatch->setVisible(FALSE);
+ childSetVisible("val_text", FALSE);
+ mComment->setText(LLString::null);
-static bool handleAudioStreamMusicChanged(const LLSD& newvalue)
-{
- if (gAudiop)
+ if (controlp)
{
- if ( newvalue.asBoolean() )
+ eControlType type = controlp->type();
+ mComment->setText(controlp->getComment());
+ spinner1->setMaxValue(F32_MAX);
+ spinner2->setMaxValue(F32_MAX);
+ spinner3->setMaxValue(F32_MAX);
+ spinner4->setMaxValue(F32_MAX);
+ spinner1->setMinValue(-F32_MAX);
+ spinner2->setMinValue(-F32_MAX);
+ spinner3->setMinValue(-F32_MAX);
+ spinner4->setMinValue(-F32_MAX);
+ if (!spinner1->hasFocus())
{
- if (gParcelMgr
- && gParcelMgr->getAgentParcel()
- && !gParcelMgr->getAgentParcel()->getMusicURL().empty())
- {
- // if stream is already playing, don't call this
- // otherwise music will briefly stop
- if ( ! gAudiop->isInternetStreamPlaying() )
- {
- gAudiop->startInternetStream(gParcelMgr->getAgentParcel()->getMusicURL().c_str());
- }
- }
+ spinner1->setIncrement(0.1f);
}
- else
+ if (!spinner2->hasFocus())
{
- gAudiop->stopInternetStream();
+ spinner2->setIncrement(0.1f);
+ }
+ if (!spinner3->hasFocus())
+ {
+ spinner3->setIncrement(0.1f);
+ }
+ if (!spinner4->hasFocus())
+ {
+ spinner4->setIncrement(0.1f);
}
- }
- return true;
-}
-
-static bool handleUseOcclusionChanged(const LLSD& newvalue)
-{
- LLPipeline::sUseOcclusion = (newvalue.asBoolean() && gGLManager.mHasOcclusionQuery
- && gFeatureManagerp->isFeatureAvailable("UseOcclusion") && !gUseWireframe) ? 2 : 0;
- return true;
-}
-
-static bool handleNumpadControlChanged(const LLSD& newvalue)
-{
- if (gKeyboard)
- {
- gKeyboard->setNumpadDistinct(static_cast<LLKeyboard::e_numpad_distinct>(newvalue.asInteger()));
- }
- return true;
-}
-
-static bool handleRenderUseVBOChanged(const LLSD& newvalue)
-{
- if (gPipeline.isInit())
- {
- gPipeline.setUseVBO(newvalue.asBoolean());
- }
- return true;
-}
-
-static bool handleWLSkyDetailChanged(const LLSD&)
-{
- if (gSky.mVOWLSkyp.notNull())
- {
- gSky.mVOWLSkyp->updateGeometry(gSky.mVOWLSkyp->mDrawable);
- }
- return true;
-}
-
-static bool handleRenderLightingDetailChanged(const LLSD& newvalue)
-{
- if (gPipeline.isInit())
- {
- gPipeline.setLightingDetail(newvalue.asInteger());
- }
- return true;
-}
-
-static bool handleResetVertexBuffersChanged(const LLSD&)
-{
- if (gPipeline.isInit())
- {
- gPipeline.resetVertexBuffers();
- }
- return true;
-}
-
-static bool handleRenderDynamicLODChanged(const LLSD& newvalue)
-{
- LLPipeline::sDynamicLOD = newvalue.asBoolean();
- return true;
-}
-
-static bool handleRenderUseFBOChanged(const LLSD& newvalue)
-{
- LLRenderTarget::sUseFBO = newvalue.asBoolean();
- if (gPipeline.isInit())
- {
- gPipeline.releaseGLBuffers();
- gPipeline.createGLBuffers();
- }
- return true;
-}
-
-static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
-{
- LLVOAvatar::sUseImpostors = newvalue.asBoolean();
- return true;
-}
-
-static bool handleRenderUseCleverUIChanged(const LLSD& newvalue)
-{
- gGL.setClever(newvalue.asBoolean());
- return true;
-}
-
-static bool handleRenderResolutionDivisorChanged(const LLSD&)
-{
- gResizeScreenTexture = TRUE;
- return true;
-}
-
-static bool handleDebugViewsChanged(const LLSD& newvalue)
-{
- LLView::sDebugRects = newvalue.asBoolean();
- return true;
-}
-
-static bool handleLogFileChanged(const LLSD& newvalue)
-{
- std::string log_filename = newvalue.asString();
- LLFile::remove(log_filename.c_str());
- LLError::logToFile(log_filename);
- return true;
-}
-
-bool handleHideGroupTitleChanged(const LLSD& newvalue)
-{
- gAgent.setHideGroupTitle(newvalue);
- return true;
-}
-bool handleEffectColorChanged(const LLSD& newvalue)
-{
- gAgent.setEffectColor(LLColor4(newvalue));
- return true;
-}
+ LLSD sd = controlp->get();
+ switch(type)
+ {
+ case TYPE_U32:
+ spinner1->setVisible(TRUE);
+ spinner1->setLabel(LLString("value")); // Debug, don't translate
+ childSetVisible("boolean_combo", FALSE);
+ if (!spinner1->hasFocus())
+ {
+ spinner1->setValue(sd);
+ spinner1->setMinValue((F32)U32_MIN);
+ spinner1->setMaxValue((F32)U32_MAX);
+ spinner1->setIncrement(1.f);
+ spinner1->setPrecision(0);
+ }
+ break;
+ case TYPE_S32:
+ spinner1->setVisible(TRUE);
+ spinner1->setLabel(LLString("value")); // Debug, don't translate
+ childSetVisible("boolean_combo", FALSE);
+ if (!spinner1->hasFocus())
+ {
+ spinner1->setValue(sd);
+ spinner1->setMinValue((F32)S32_MIN);
+ spinner1->setMaxValue((F32)S32_MAX);
+ spinner1->setIncrement(1.f);
+ spinner1->setPrecision(0);
+ }
+ break;
+ case TYPE_F32:
+ spinner1->setVisible(TRUE);
+ spinner1->setLabel(LLString("value")); // Debug, don't translate
+ childSetVisible("boolean_combo", FALSE);
+ if (!spinner1->hasFocus())
+ {
+ spinner1->setPrecision(3);
+ spinner1->setValue(sd);
+ }
+ break;
+ case TYPE_BOOLEAN:
+ childSetVisible("boolean_combo", TRUE);
+
+ if (!childHasFocus("boolean_combo"))
+ {
+ if (sd.asBoolean())
+ {
+ childSetValue("boolean_combo", LLSD("true"));
+ }
+ else
+ {
+ childSetValue("boolean_combo", LLSD(""));
+ }
+ }
+ break;
+ case TYPE_STRING:
+ childSetVisible("val_text", TRUE);
+ childSetVisible("boolean_combo", FALSE);
+ if (!childHasFocus("val_text"))
+ {
+ childSetValue("val_text", sd);
+ }
+ break;
+ case TYPE_VEC3:
+ {
+ childSetVisible("boolean_combo", FALSE);
+ LLVector3 v;
+ v.setValue(sd);
+ spinner1->setVisible(TRUE);
+ spinner1->setLabel(LLString("X"));
+ spinner2->setVisible(TRUE);
+ spinner2->setLabel(LLString("Y"));
+ spinner3->setVisible(TRUE);
+ spinner3->setLabel(LLString("Z"));
+ if (!spinner1->hasFocus())
+ {
+ spinner1->setPrecision(3);
+ spinner1->setValue(v[VX]);
+ }
+ if (!spinner2->hasFocus())
+ {
+ spinner2->setPrecision(3);
+ spinner2->setValue(v[VY]);
+ }
+ if (!spinner3->hasFocus())
+ {
+ spinner3->setPrecision(3);
+ spinner3->setValue(v[VZ]);
+ }
+ break;
+ }
+ case TYPE_VEC3D:
+ {
+ childSetVisible("boolean_combo", FALSE);
+ LLVector3d v;
+ v.setValue(sd);
+ spinner1->setVisible(TRUE);
+ spinner1->setLabel(LLString("X"));
+ spinner2->setVisible(TRUE);
+ spinner2->setLabel(LLString("Y"));
+ spinner3->setVisible(TRUE);
+ spinner3->setLabel(LLString("Z"));
+ if (!spinner1->hasFocus())
+ {
+ spinner1->setPrecision(3);
+ spinner1->setValue(v[VX]);
+ }
+ if (!spinner2->hasFocus())
+ {
+ spinner2->setPrecision(3);
+ spinner2->setValue(v[VY]);
+ }
+ if (!spinner3->hasFocus())
+ {
+ spinner3->setPrecision(3);
+ spinner3->setValue(v[VZ]);
+ }
+ break;
+ }
+ case TYPE_RECT:
+ {
+ childSetVisible("boolean_combo", FALSE);
+ LLRect r;
+ r.setValue(sd);
+ spinner1->setVisible(TRUE);
+ spinner1->setLabel(LLString("Left"));
+ spinner2->setVisible(TRUE);
+ spinner2->setLabel(LLString("Right"));
+ spinner3->setVisible(TRUE);
+ spinner3->setLabel(LLString("Bottom"));
+ spinner4->setVisible(TRUE);
+ spinner4->setLabel(LLString("Top"));
+ if (!spinner1->hasFocus())
+ {
+ spinner1->setPrecision(0);
+ spinner1->setValue(r.mLeft);
+ }
+ if (!spinner2->hasFocus())
+ {
+ spinner2->setPrecision(0);
+ spinner2->setValue(r.mRight);
+ }
+ if (!spinner3->hasFocus())
+ {
+ spinner3->setPrecision(0);
+ spinner3->setValue(r.mBottom);
+ }
+ if (!spinner4->hasFocus())
+ {
+ spinner4->setPrecision(0);
+ spinner4->setValue(r.mTop);
+ }
-bool handleRotateNetMapChanged(const LLSD& newvalue)
-{
- LLNetMap::setRotateMap(newvalue.asBoolean());
- return true;
-}
+ spinner1->setMinValue((F32)S32_MIN);
+ spinner1->setMaxValue((F32)S32_MAX);
+ spinner1->setIncrement(1.f);
+
+ spinner2->setMinValue((F32)S32_MIN);
+ spinner2->setMaxValue((F32)S32_MAX);
+ spinner2->setIncrement(1.f);
+
+ spinner3->setMinValue((F32)S32_MIN);
+ spinner3->setMaxValue((F32)S32_MAX);
+ spinner3->setIncrement(1.f);
+
+ spinner4->setMinValue((F32)S32_MIN);
+ spinner4->setMaxValue((F32)S32_MAX);
+ spinner4->setIncrement(1.f);
+ break;
+ }
+ case TYPE_COL4:
+ {
+ childSetVisible("boolean_combo", FALSE);
+ LLColor4 clr;
+ clr.setValue(sd);
+ color_swatch->setVisible(TRUE);
+ // only set if changed so color picker doesn't update
+ if(clr != LLColor4(color_swatch->getValue()))
+ {
+ color_swatch->set(LLColor4(sd), TRUE, FALSE);
+ }
+ spinner4->setVisible(TRUE);
+ spinner4->setLabel(LLString("Alpha"));
+ if (!spinner4->hasFocus())
+ {
+ spinner4->setPrecision(3);
+ spinner4->setMinValue(0.0);
+ spinner4->setMaxValue(1.f);
+ spinner4->setValue(clr.mV[VALPHA]);
+ }
+ break;
+ }
+ case TYPE_COL3:
+ {
+ childSetVisible("boolean_combo", FALSE);
+ LLColor3 clr;
+ clr.setValue(sd);
+ color_swatch->setVisible(TRUE);
+ color_swatch->setValue(sd);
+ break;
+ }
+ case TYPE_COL4U:
+ {
+ childSetVisible("boolean_combo", FALSE);
+ LLColor4U clr;
+ clr.setValue(sd);
+ color_swatch->setVisible(TRUE);
+ if(LLColor4(clr) != LLColor4(color_swatch->getValue()))
+ {
+ color_swatch->set(LLColor4(clr), TRUE, FALSE);
+ }
+ spinner4->setVisible(TRUE);
+ spinner4->setLabel(LLString("Alpha"));
+ if(!spinner4->hasFocus())
+ {
+ spinner4->setPrecision(0);
+ spinner4->setValue(clr.mV[VALPHA]);
+ }
-bool handleVectorizeChanged(const LLSD& newvalue)
-{
- LLViewerJointMesh::updateVectorize();
- return true;
-}
+ spinner4->setMinValue(0);
+ spinner4->setMaxValue(255);
+ spinner4->setIncrement(1.f);
-bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
-{
- if(gVoiceClient)
- {
- // Note: Ignore the specific event value, look up the ones we want
-
- gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
- gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
- std::string keyString = gSavedSettings.getString("PushToTalkButton");
- gVoiceClient->setPTTKey(keyString);
- gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle"));
- gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
- std::string serverName = gSavedSettings.getString("VivoxDebugServerName");
- gVoiceClient->setVivoxDebugServerName(serverName);
-
- std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
- gVoiceClient->setCaptureDevice(inputDevice);
- std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
- gVoiceClient->setRenderDevice(outputDevice);
+ break;
+ }
+ default:
+ mComment->setText(LLString("unknown"));
+ break;
+ }
}
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////
-void settings_setup_listeners()
-{
- gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _1));
- gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _1));
- gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _1));
- gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("RenderDynamicReflections")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
- gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("EnableRippleWater")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
- gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
- gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _1));
- gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _1));
- gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _1));
- gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _1));
- gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _1));
- gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&handleBandwidthChanged, _1));
- gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _1));
- gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _1));
- gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _1));
- gSavedSettings.getControl("RenderDynamicLOD")->getSignal()->connect(boost::bind(&handleRenderDynamicLODChanged, _1));
- gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
- gSavedSettings.getControl("RenderFastAlpha")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
- gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
- gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
- gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1));
- gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1));
- gSavedSettings.getControl("RenderUseCleverUI")->getSignal()->connect(boost::bind(&handleRenderUseCleverUIChanged, _1));
- gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1));
- gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1));
- gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _1));
- gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _1));
- gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _1));
- gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _1));
- gSavedSettings.getControl("UseOcclusion")->getSignal()->connect(boost::bind(&handleUseOcclusionChanged, _1));
- gSavedSettings.getControl("AudioLevelMaster")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelSFX")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelDistance")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("AudioStreamingMusic")->getSignal()->connect(boost::bind(&handleAudioStreamMusicChanged, _1));
- gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
- gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _1));
- gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _1));
- gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _1));
- gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _1));
- gSavedSettings.getControl("FlycamAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
- gSavedSettings.getControl("FlycamAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
- gSavedSettings.getControl("FlycamAxis2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
- gSavedSettings.getControl("FlycamAxis3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
- gSavedSettings.getControl("FlycamAxis4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
- gSavedSettings.getControl("FlycamAxis5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
- gSavedSettings.getControl("FlycamAxis6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
- gSavedSettings.getControl("DebugViews")->getSignal()->connect(boost::bind(&handleDebugViewsChanged, _1));
- gSavedSettings.getControl("UserLogFile")->getSignal()->connect(boost::bind(&handleLogFileChanged, _1));
- gSavedSettings.getControl("RenderHideGroupTitle")->getSignal()->connect(boost::bind(handleHideGroupTitleChanged, _1));
- gSavedSettings.getControl("EffectColor")->getSignal()->connect(boost::bind(handleEffectColorChanged, _1));
- gSavedSettings.getControl("MiniMapRotate")->getSignal()->connect(boost::bind(handleRotateNetMapChanged, _1));
- gSavedSettings.getControl("VectorizePerfTest")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
- gSavedSettings.getControl("VectorizeEnable")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
- gSavedSettings.getControl("VectorizeProcessor")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
- gSavedSettings.getControl("VectorizeSkin")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
- gSavedSettings.getControl("EnableVoiceChat")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
- gSavedSettings.getControl("PTTCurrentlyEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
- gSavedSettings.getControl("PushToTalkButton")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
- gSavedSettings.getControl("PushToTalkToggle")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
- gSavedSettings.getControl("VoiceEarLocation")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
- gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
- gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
- gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
}
-
diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h
index 2727e36b53..c2a9dc9096 100644
--- a/indra/newview/llviewercontrol.h
+++ b/indra/newview/llviewercontrol.h
@@ -32,8 +32,9 @@
#ifndef LL_LLVIEWERCONTROL_H
#define LL_LLVIEWERCONTROL_H
-#include <map>
#include "llcontrol.h"
+#include "llfloater.h"
+#include "lltexteditor.h"
// Enabled this definition to compile a 'hacked' viewer that
// allows a hacked godmode to be toggled on and off.
@@ -42,12 +43,33 @@
extern BOOL gHackGodmode;
#endif
+class LLFloaterSettingsDebug : public LLFloater
+{
+public:
+ LLFloaterSettingsDebug();
+ virtual ~LLFloaterSettingsDebug();
+
+ virtual BOOL postBuild();
+ virtual void draw();
+
+ void updateControl(LLControlBase* control);
+
+ static void show(void*);
+ static void onSettingSelect(LLUICtrl* ctrl, void* user_data);
+ static void onCommitSettings(LLUICtrl* ctrl, void* user_data);
+ static void onClickDefault(void* user_data);
+
+protected:
+ static LLFloaterSettingsDebug* sInstance;
+ LLTextEditor* mComment;
+};
+
// These functions found in llcontroldef.cpp *TODO: clean this up!
//setting variables are declared in this function
+void declare_settings();
+void fixup_settings();
void settings_setup_listeners();
-extern std::map<LLString, LLControlGroup*> gSettings;
-
// for the graphics settings
void create_graphics_group(LLControlGroup& group);
@@ -68,4 +90,7 @@ extern LLControlGroup gCrashSettings;
extern LLString gLastRunVersion;
extern LLString gCurrentVersion;
+extern LLString gSettingsFileName;
+extern LLString gPerAccountSettingsFileName;
+
#endif // LL_LLVIEWERCONTROL_H
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index fe00c25c63..2677b33af8 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -866,53 +866,13 @@ static F64 sUpdateGeometryRunAvgOn[10];
static U32 sUpdateGeometryRunCount = 0 ;
static U32 sUpdateGeometryCalls = 0 ;
static U32 sUpdateGeometryLastProcessor = 0 ;
-static BOOL sVectorizePerfTest = FALSE;
-static U32 sVectorizeProcessor = 0;
-
-//static
void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh);
-//static
-void LLViewerJointMesh::updateVectorize()
-{
- sVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
- sVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
- BOOL vectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
- BOOL vectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
-
- std::string vp;
- switch(sVectorizeProcessor)
- {
- case 2: vp = "SSE2"; break; // *TODO: replace the magic #s
- case 1: vp = "SSE"; break;
- default: vp = "COMPILER DEFAULT"; break;
- }
- llinfos << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
- llinfos << "Vector Processor : " << vp << llendl ;
- llinfos << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
- if(vectorizeEnable && vectorizeSkin)
- {
- switch(sVectorizeProcessor)
- {
- case 2:
- sUpdateGeometryFunc = &updateGeometrySSE2;
- break;
- case 1:
- sUpdateGeometryFunc = &updateGeometrySSE;
- break;
- default:
- sUpdateGeometryFunc = &updateGeometryVectorized;
- break;
- }
- }
- else
- {
- sUpdateGeometryFunc = &updateGeometryOriginal;
- }
-}
-
void LLViewerJointMesh::updateGeometry()
{
+ extern BOOL gVectorizePerfTest;
+ extern U32 gVectorizeProcessor;
+
if (!(mValid
&& mMesh
&& mFace
@@ -923,7 +883,7 @@ void LLViewerJointMesh::updateGeometry()
return;
}
- if (!sVectorizePerfTest)
+ if (!gVectorizePerfTest)
{
// Once we've measured performance, just run the specified
// code version.
@@ -956,13 +916,13 @@ void LLViewerJointMesh::updateGeometry()
{
F64 time_since_app_start = ug_timer.getElapsedSeconds();
if(sUpdateGeometryGlobalTime == 0.0
- || sUpdateGeometryLastProcessor != sVectorizeProcessor)
+ || sUpdateGeometryLastProcessor != gVectorizeProcessor)
{
sUpdateGeometryGlobalTime = time_since_app_start;
sUpdateGeometryElapsedTime = 0;
sUpdateGeometryCalls = 0;
sUpdateGeometryRunCount = 0;
- sUpdateGeometryLastProcessor = sVectorizeProcessor;
+ sUpdateGeometryLastProcessor = gVectorizeProcessor;
sUpdateGeometryCallPointer = false;
return;
}
@@ -1009,7 +969,7 @@ void LLViewerJointMesh::updateGeometry()
F64 perf_boost = ( sUpdateGeometryElapsedTimeOff - sUpdateGeometryElapsedTimeOn ) / sUpdateGeometryElapsedTimeOn;
llinfos << "run averages (" << (F64)sUpdateGeometryRunCount
<< "/10) vectorize off " << a
- << "% : vectorize type " << sVectorizeProcessor
+ << "% : vectorize type " << gVectorizeProcessor
<< " " << b
<< "% : performance boost "
<< perf_boost * 100.0
@@ -1023,6 +983,7 @@ void LLViewerJointMesh::updateGeometry()
// We have data now on which version is faster. Switch to that
// code and save the data for next run.
+ gVectorizePerfTest = FALSE;
gSavedSettings.setBOOL("VectorizePerfTest", FALSE);
if (perf_boost > 0.0)
diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h
index 4cef1552ca..8e1ee514ff 100644
--- a/indra/newview/llviewerjointmesh.h
+++ b/indra/newview/llviewerjointmesh.h
@@ -149,9 +149,6 @@ public:
/*virtual*/ BOOL isAnimatable() { return FALSE; }
- static void updateVectorize(); // Update globals when settings variables change
-
-private:
// Avatar vertex skinning is a significant performance issue on computers
// with avatar vertex programs turned off (for example, most Macs). We
// therefore have custom versions that use SIMD instructions.
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 9af072ad6f..f86d822d90 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -44,6 +44,9 @@
#include "llmediamanager.h"
#include "lluuid.h"
+// don't want to include llappviewer.h
+extern std::string gChannelName;
+
// Implementation functions not exported into header file
class LLViewerMediaImpl
: public LLMediaObserver
@@ -454,7 +457,7 @@ void LLViewerMedia::initClass()
// append our magic version number string to the browser user agent id
std::ostringstream codec;
codec << "[Second Life ";
- codec << "(" << gSavedSettings.getString("VersionChannelName") << ")";
+ codec << "(" << gChannelName << ")";
codec << " - " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH << "." << LL_VERSION_BUILD;
codec << "]";
init_data->setBrowserUserAgentId( codec.str() );
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index a2b9cde5d1..a384d24947 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -120,7 +120,6 @@
#include "llfloaterregioninfo.h"
#include "llfloaterreporter.h"
#include "llfloaterscriptdebug.h"
-#include "llfloatersettingsdebug.h"
#include "llfloaterenvsettings.h"
#include "llfloaterstats.h"
#include "llfloatertest.h"
@@ -377,11 +376,6 @@ void toggle_cull_small(void *);
void toggle_show_xui_names(void *);
BOOL check_show_xui_names(void *);
-void run_vectorize_perf_test(void *)
-{
- gSavedSettings.setBOOL("VectorizePerfTest", TRUE);
-}
-
// Debug UI
void handle_web_search_demo(void*);
void handle_slurl_test(void*);
@@ -1097,7 +1091,7 @@ void init_client_menu(LLMenuGL* menu)
&menu_check_control,
(void*)"ShowConsoleWindow"));
- if(gSavedSettings.getBOOL("QAMode"))
+ if(gQAMode)
{
LLMenuGL* sub = NULL;
sub = new LLMenuGL("Debugging");
@@ -1177,6 +1171,7 @@ extern BOOL gDebugClicks;
extern BOOL gDebugWindowProc;
extern BOOL gDebugTextEditorTips;
extern BOOL gDebugSelectMgr;
+extern BOOL gVectorizePerfTest;
void init_debug_ui_menu(LLMenuGL* menu)
{
@@ -1388,7 +1383,7 @@ void init_debug_rendering_menu(LLMenuGL* menu)
(void*)"ShowDepthBuffer"));
sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect));
- sub_menu->append(new LLMenuItemCallGL("Vectorize Perf Test", &run_vectorize_perf_test));
+ sub_menu->append(new LLMenuItemToggleGL("Vectorize Perf Test", &gVectorizePerfTest));
sub_menu = new LLMenuGL("Render Tests");
@@ -4853,7 +4848,7 @@ BOOL menu_check_build_tool( void* user_data )
void handle_reload_settings(void*)
{
gSavedSettings.resetToDefaults();
- gSavedSettings.loadFromFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
+ gSavedSettings.loadFromFile(gSettingsFileName, TRUE);
llinfos << "Loading colors from colors.xml" << llendl;
std::string color_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"colors.xml");
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index b0ebc64b7a..6fb2957023 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -114,5 +114,10 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =
// Use this to figure out which domain name and login URI to use.
EGridInfo gGridChoice = GRID_INFO_NONE;
-LLString gGridName; /* Flawfinder: ignore */
+char gGridName[MAX_STRING]; /* Flawfinder: ignore */
+
+F32 gPacketDropPercentage = 0.f;
+F32 gInBandwidth = 0.f;
+F32 gOutBandwidth = 0.f;
+
unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index 4e6c874921..4de73aae7a 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -55,7 +55,7 @@ enum EGridInfo
GRID_INFO_VAAK,
GRID_INFO_YAMI,
GRID_INFO_LOCAL,
- GRID_INFO_OTHER, // IP address set via command line option
+ GRID_INFO_OTHER, // IP address set via -user or other command line option
GRID_INFO_COUNT
};
@@ -68,9 +68,12 @@ struct LLGridData
const char* mHelperURI;
};
+extern F32 gPacketDropPercentage;
+extern F32 gInBandwidth;
+extern F32 gOutBandwidth;
extern EGridInfo gGridChoice;
extern LLGridData gGridInfo[];
-extern LLString gGridName; /* Flawfinder: ignore */
+extern char gGridName[MAX_STRING]; /* Flawfinder: ignore */
const S32 MAC_ADDRESS_BYTES = 6;
extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index e2ea6e6ecf..69e08db2bf 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -678,6 +678,31 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
///////////////////////////////////////////////////////////////////////////////////////////////
+class LLVoiceClientPrefsListener: public LLSimpleListener
+{
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+ {
+ // Note: Ignore the specific event value, look up the ones we want
+
+ gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
+ gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
+ std::string keyString = gSavedSettings.getString("PushToTalkButton");
+ gVoiceClient->setPTTKey(keyString);
+ gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle"));
+ gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
+ std::string serverName = gSavedSettings.getString("VivoxDebugServerName");
+ gVoiceClient->setVivoxDebugServerName(serverName);
+
+ std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
+ gVoiceClient->setCaptureDevice(inputDevice);
+ std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
+ gVoiceClient->setRenderDevice(outputDevice);
+
+ return true;
+ }
+};
+static LLVoiceClientPrefsListener voice_prefs_listener;
+
class LLVoiceClientMuteListObserver : public LLMuteListObserver
{
/* virtual */ void onChange() { gVoiceClient->muteListChanged();}
@@ -834,6 +859,16 @@ LLVoiceClient::LLVoiceClient()
std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
setRenderDevice(renderDevice);
+ // Set up our listener to get updates on all prefs values we care about.
+ gSavedSettings.getControl("EnableVoiceChat")->addListener(&voice_prefs_listener);
+ gSavedSettings.getControl("PTTCurrentlyEnabled")->addListener(&voice_prefs_listener);
+ gSavedSettings.getControl("PushToTalkButton")->addListener(&voice_prefs_listener);
+ gSavedSettings.getControl("PushToTalkToggle")->addListener(&voice_prefs_listener);
+ gSavedSettings.getControl("VoiceEarLocation")->addListener(&voice_prefs_listener);
+ gSavedSettings.getControl("VivoxDebugServerName")->addListener(&voice_prefs_listener);
+ gSavedSettings.getControl("VoiceInputAudioDevice")->addListener(&voice_prefs_listener);
+ gSavedSettings.getControl("VoiceOutputAudioDevice")->addListener(&voice_prefs_listener);
+
mTuningMode = false;
mTuningEnergy = 0.0f;
mTuningMicVolume = 0;
@@ -1246,7 +1281,7 @@ void LLVoiceClient::stateMachine()
break;
case stateStart:
- if(gSavedSettings.getBOOL("CmdLineDisableVoice"))
+ if(gDisableVoice)
{
// Voice is locked out, we must not launch the vivox daemon.
setState(stateJail);
@@ -3609,7 +3644,7 @@ void LLVoiceClient::setVoiceEnabled(bool enabled)
bool LLVoiceClient::voiceEnabled()
{
- return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
+ return gSavedSettings.getBOOL("EnableVoiceChat") && !gDisableVoice;
}
void LLVoiceClient::setUsePTT(bool usePTT)
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index fc4ede5bab..9dc92efa81 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -238,9 +238,8 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this);
- BOOL vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert");
- mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, vefifySSLCert);
- mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, vefifySSLCert ? 2 : 0);
+ mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, gVerifySSLCert);
+ mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, gVerifySSLCert? 2 : 0);
// Be a little impatient about establishing connections.
mCurlRequest->setopt(CURLOPT_CONNECTTIMEOUT, 40L);
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index e87fe8d8ff..b19e4e2c9c 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -115,15 +115,15 @@ class ViewerManifest(LLManifest):
if not self.default_grid():
if self.default_channel():
# beta grid viewer
- channel_flags = '--settings settings_beta.xml'
- grid_flags = "--helperuri http://preview-%(grid)s.secondlife.com/helpers/ --loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']}
+ channel_flags = '-settings settings_beta.xml'
+ grid_flags = "-helperuri http://preview-%(grid)s.secondlife.com/helpers/ -loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']}
if not self.default_channel():
# some channel on some grid
- channel_flags = '--settings settings_%s.xml --channel "%s"' % (self.channel_lowerword(), self.channel())
+ channel_flags = '-settings settings_%s.xml -channel "%s"' % (self.channel_lowerword(), self.channel())
elif self.login_channel():
# Report a special channel during login, but use default channel elsewhere
- channel_flags = '--channel "%s"' % (self.login_channel())
+ channel_flags = '-channel "%s"' % (self.login_channel())
return " ".join((channel_flags, grid_flags)).strip()