diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2850f52ee..f5924e14a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -760,6 +760,17 @@ Found in Advanced->Rendering->Info Displays
Value
1
+ ShowLocalChatFloaterBar
+
+ Comment
+ Whether or not local chat should have an input bar, requires a restart.
+ Persist
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
OtherChatsTornOff
Comment
@@ -780,6 +791,17 @@ Found in Advanced->Rendering->Info Displays
Type
Boolean
Value
+ 1
+
+ CommunicateSpecificShortcut
+
+ Comment
+ When true, the keyboard shortcut for Communicate will not bring up the torn off Friends List.
+ Persist
+ 1
+ Type
+ Boolean
+ Value
0
MarketImporterUpdateFreq
@@ -6125,6 +6147,22 @@ This should be as low as possible, but too low may break functionality
0
+ FloaterChatBarlessRect
+
+ Comment
+ Rectangle for chat history without input bar
+ Persist
+ 1
+ Type
+ Rect
+ Value
+
+ 0
+ 172
+ 500
+ 0
+
+
FloaterClothingRect
Comment
@@ -6189,6 +6227,22 @@ This should be as low as possible, but too low may break functionality
0
+ FloaterDebugSettingsRect
+
+ Comment
+ Rectangle for the Debug Settings floater
+ Persist
+ 1
+ Type
+ Rect
+ Value
+
+ 0
+ 300
+ 245
+ 0
+
+
FloaterEnvRect
Comment
diff --git a/indra/newview/ascentprefschat.cpp b/indra/newview/ascentprefschat.cpp
index d4b8c3407..eab67ed86 100644
--- a/indra/newview/ascentprefschat.cpp
+++ b/indra/newview/ascentprefschat.cpp
@@ -329,6 +329,7 @@ void LLPrefsAscentChat::refreshValues()
mIMAnnounceIncoming = gSavedSettings.getBOOL("AscentInstantMessageAnnounceIncoming");
mHideTypingNotification = gSavedSettings.getBOOL("AscentHideTypingNotification");
mShowGroupNameInChatIM = gSavedSettings.getBOOL("OptionShowGroupNameInChatIM");
+ mShowLocalChatFloaterBar = gSavedSettings.getBOOL("ShowLocalChatFloaterBar");
mPlayTypingSound = gSavedSettings.getBOOL("PlayTypingSound");
mHideNotificationsInChat = gSavedSettings.getBOOL("HideNotificationsInChat");
mEnableMUPose = gSavedSettings.getBOOL("AscentAllowMUpose");
@@ -536,6 +537,7 @@ void LLPrefsAscentChat::cancel()
gSavedSettings.setBOOL("AscentInstantMessageAnnounceIncoming", mIMAnnounceIncoming);
gSavedSettings.setBOOL("AscentHideTypingNotification", mHideTypingNotification);
gSavedSettings.setBOOL("OptionShowGroupNameInChatIM", mShowGroupNameInChatIM);
+ gSavedSettings.setBOOL("ShowLocalChatFloaterBar", mShowLocalChatFloaterBar);
gSavedSettings.setBOOL("PlayTypingSound", mPlayTypingSound);
gSavedSettings.setBOOL("HideNotificationsInChat", mHideNotificationsInChat);
gSavedSettings.setBOOL("AscentAllowMUpose", mEnableMUPose);
diff --git a/indra/newview/ascentprefschat.h b/indra/newview/ascentprefschat.h
index 03e980c3f..4bf8f7551 100644
--- a/indra/newview/ascentprefschat.h
+++ b/indra/newview/ascentprefschat.h
@@ -66,6 +66,7 @@ protected:
BOOL mIMAnnounceIncoming;
BOOL mHideTypingNotification;
BOOL mShowGroupNameInChatIM;
+ bool mShowLocalChatFloaterBar;
BOOL mPlayTypingSound;
BOOL mHideNotificationsInChat;
BOOL mEnableMUPose;
diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp
index bfb4892c6..db38f8009 100644
--- a/indra/newview/llfloaterchat.cpp
+++ b/indra/newview/llfloaterchat.cpp
@@ -108,7 +108,8 @@ LLFloaterChat::LLFloaterChat(const LLSD& seed)
mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, NULL);
// do not automatically open singleton floaters (as result of getInstance())
BOOL no_open = FALSE;
- LLUICtrlFactory::getInstance()->buildFloater(this,"floater_chat_history.xml",&getFactoryMap(),no_open);
+ bool show_bar = gSavedSettings.getBOOL("ShowLocalChatFloaterBar");
+ LLUICtrlFactory::getInstance()->buildFloater(this, (show_bar ? "floater_chat_history.xml" : "floater_chat_history_barless.xml"), &getFactoryMap(), no_open);
childSetCommitCallback("show mutes",onClickToggleShowMute,this); //show mutes
childSetCommitCallback("translate chat",onClickToggleTranslateChat,this);
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
index 2d7ce1da4..45b2c5c45 100644
--- a/indra/newview/llfloatersettingsdebug.cpp
+++ b/indra/newview/llfloatersettingsdebug.cpp
@@ -31,117 +31,129 @@
*/
#include "llviewerprecompiledheaders.h"
+
#include "llfloatersettingsdebug.h"
-#include "llfloater.h"
-#include "lluictrlfactory.h"
-#include "llfirstuse.h"
-#include "llcombobox.h"
-#include "llspinctrl.h"
+
#include "llcolorswatch.h"
+//#include "llfirstuse.h"
+#include "llfloater.h"
+#include "llscrolllistctrl.h"
+#include "llspinctrl.h"
+#include "lltexteditor.h"
+#include "lluictrlfactory.h"
#include "llviewercontrol.h"
+#include "llwindow.h"
// [RLVa:KB]
#include "rlvhandler.h"
#include "rlvextensions.h"
// [/RLVa:KB]
-LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL;
-
-LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater(std::string("Configuration Editor"))
+LLFloaterSettingsDebug::LLFloaterSettingsDebug()
+: LLFloater(std::string("Configuration Editor"))
+, mCurrentControlVariable(NULL)
+, mOldControlVariable(NULL)
+, mOldSearchTerm(std::string("---"))
{
+ LLUICtrlFactory::getInstance()->buildFloater(this, "floater_settings_debug.xml");
}
LLFloaterSettingsDebug::~LLFloaterSettingsDebug()
{
- sInstance = NULL;
+ if (mOldControlVariable)
+ mOldControlVariable->getCommitSignal()->disconnect(boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this));
}
BOOL LLFloaterSettingsDebug::postBuild()
{
- LLComboBox* settings_combo = getChild("settings_combo");
+ mSettingsScrollList = getChild("settings_scroll_list");
struct f : public LLControlGroup::ApplyFunctor
{
- LLComboBox* combo;
- f(LLComboBox* c) : combo(c) {}
+ settings_map_t* map;
+ f(settings_map_t* m) : map(m) {}
virtual void apply(const std::string& name, LLControlVariable* control)
{
if (!control->isHiddenFromSettingsEditor())
{
- combo->add(name, (void*)control);
+ (*map)[name]=control;
}
}
- } func(settings_combo);
+ } func(&mSettingsMap);
gSavedSettings.applyToAll(&func);
gSavedPerAccountSettings.applyToAll(&func);
gColors.applyToAll(&func);
- settings_combo->sortByName();
- settings_combo->setCommitCallback(onSettingSelect);
- settings_combo->setCallbackUserData(this);
- settings_combo->updateSelection();
+ // Populate the list
+ {
+ for(settings_map_t::iterator it = mSettingsMap.begin(); it != mSettingsMap.end(); it++)
+ {
+ LLSD item;
+ item["columns"][0]["value"] = it->second->getName();
+ mSettingsScrollList->addElement(item, ADD_BOTTOM, it->second);
+ }
+ }
+ mSettingsScrollList->sortByColumnIndex(0, true);
+ mSettingsScrollList->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this));
- 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);
+ llinfos << mSettingsScrollList->getItemCount() << " total debug settings displayed." << llendl;
+
+ getChild("val_spinner_1")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
+ getChild("val_spinner_2")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
+ getChild("val_spinner_3")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
+ getChild("val_spinner_4")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
+ getChild("val_text")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
+ getChild("boolean_combo")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
+ getChild("color_swatch")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
+ getChild("copy_btn")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCopyToClipboard, this));
+ getChild("default_btn")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onClickDefault, this));
+ getChild("search_settings_input")->setSearchCallback(onUpdateFilter, this);
mComment = getChild("comment_text");
return TRUE;
}
void LLFloaterSettingsDebug::draw()
{
- LLComboBox* settings_combo = getChild("settings_combo");
- LLControlVariable* controlp = static_cast(settings_combo->getCurrentUserdata());
- updateControl(controlp ? controlp->getCOAActive() : NULL);
+ // check for changes in control visibility, like RLVa does
+ if(mCurrentControlVariable && mCurrentControlVariable->isHiddenFromSettingsEditor() != mOldVisibility)
+ updateControl();
LLFloater::draw();
}
-//static
-void LLFloaterSettingsDebug::show(void*)
+LLControlVariable* LLFloaterSettingsDebug::getControlVariable()
{
- if (sInstance == NULL)
- {
- sInstance = new LLFloaterSettingsDebug();
+ LLScrollListItem* item = mSettingsScrollList->getFirstSelected();
+ if (!item) return NULL;
- LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_settings_debug.xml");
- }
+ LLControlVariable* controlp = static_cast(item->getUserdata());
- sInstance->open(); /* Flawfinder: ignore */
+ return controlp ? controlp->getCOAActive() : NULL;
}
-//static
-void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data)
+void LLFloaterSettingsDebug::onSettingSelect()
{
- LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
- LLComboBox* combo_box = static_cast(ctrl);
- LLControlVariable* controlp = static_cast(combo_box->getCurrentUserdata());
+ mCurrentControlVariable = getControlVariable();
- floaterp->updateControl(controlp ? controlp->getCOAActive() : NULL);
+ if (mOldControlVariable == mCurrentControlVariable) return;
+
+ // unbind change control signal from previously selected control
+ if(mOldControlVariable)
+ mOldControlVariable->getCommitSignal()->disconnect(boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this));
+
+ // bind change control signal, so we can see updates to the current control in realtime
+ if(mCurrentControlVariable)
+ mCurrentControlVariable->getCommitSignal()->connect(boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this));
+
+ mOldControlVariable = mCurrentControlVariable;
+
+ updateControl();
}
-//static
-void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
+void LLFloaterSettingsDebug::onCommitSettings()
{
- LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
-
- LLComboBox* settings_combo = floaterp->getChild("settings_combo");
- LLControlVariable* controlp = static_cast(settings_combo->getCurrentUserdata());
- controlp = controlp ? controlp->getCOAActive() : NULL;
- if(!controlp)//Uh oh!
+ if (!mCurrentControlVariable)
return;
LLVector3 vector;
@@ -152,88 +164,89 @@ void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
LLColor4U col4U;
LLColor4 color_with_alpha;
- switch(controlp->type())
+ switch(mCurrentControlVariable->type())
{
case TYPE_U32:
- controlp->set(floaterp->childGetValue("val_spinner_1"));
+ mCurrentControlVariable->set(getChild("val_spinner_1")->getValue());
break;
case TYPE_S32:
- controlp->set(floaterp->childGetValue("val_spinner_1"));
+ mCurrentControlVariable->set(getChild("val_spinner_1")->getValue());
break;
case TYPE_F32:
- controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal()));
+ mCurrentControlVariable->set(LLSD(getChild("val_spinner_1")->getValue().asReal()));
break;
case TYPE_BOOLEAN:
- controlp->set(floaterp->childGetValue("boolean_combo"));
+ mCurrentControlVariable->set(getChild("boolean_combo")->getValue());
break;
case TYPE_STRING:
- controlp->set(LLSD(floaterp->childGetValue("val_text").asString()));
+ mCurrentControlVariable->set(LLSD(getChild("val_text")->getValue().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());
+ vector.mV[VX] = (F32)getChild("val_spinner_1")->getValue().asReal();
+ vector.mV[VY] = (F32)getChild("val_spinner_2")->getValue().asReal();
+ vector.mV[VZ] = (F32)getChild("val_spinner_3")->getValue().asReal();
+ mCurrentControlVariable->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());
+ vectord.mdV[VX] = getChild("val_spinner_1")->getValue().asReal();
+ vectord.mdV[VY] = getChild("val_spinner_2")->getValue().asReal();
+ vectord.mdV[VZ] = getChild("val_spinner_3")->getValue().asReal();
+ mCurrentControlVariable->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());
+ rect.mLeft = getChild("val_spinner_1")->getValue().asInteger();
+ rect.mRight = getChild("val_spinner_2")->getValue().asInteger();
+ rect.mBottom = getChild("val_spinner_3")->getValue().asInteger();
+ rect.mTop = getChild("val_spinner_4")->getValue().asInteger();
+ mCurrentControlVariable->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());
+ col3.setValue(getChild("val_color_swatch")->getValue());
+ col4 = LLColor4(col3, (F32)getChild("val_spinner_4")->getValue().asReal());
+ mCurrentControlVariable->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());
+ mCurrentControlVariable->set(getChild("val_color_swatch")->getValue());
+ //col3.mV[VRED] = (F32)getChild("val_spinner_1")->getValue().asC();
+ //col3.mV[VGREEN] = (F32)getChild("val_spinner_2")->getValue().asReal();
+ //col3.mV[VBLUE] = (F32)getChild("val_spinner_3")->getValue().asReal();
+ //mCurrentControlVariable->set(col3.getValue());
break;
case TYPE_COL4U:
- col3.setValue(floaterp->childGetValue("color_swatch"));
+ col3.setValue(getChild("val_color_swatch")->getValue());
col4U.setVecScaleClamp(col3);
- col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger();
- controlp->set(col4U.getValue());
+ col4U.mV[VALPHA] = getChild("val_spinner_4")->getValue().asInteger();
+ mCurrentControlVariable->set(col4U.getValue());
break;
default:
break;
}
}
-// static
-void LLFloaterSettingsDebug::onClickDefault(void* user_data)
+void LLFloaterSettingsDebug::onClickDefault()
{
- LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
- LLComboBox* settings_combo = floaterp->getChild("settings_combo");
- LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
-
- if (controlp)
+ if (mCurrentControlVariable)
{
- controlp = controlp->getCOAActive();
- controlp->resetToDefault(true);
- floaterp->updateControl(controlp);
+ mCurrentControlVariable->resetToDefault(true);
+ updateControl();
}
}
-// we've switched controls, or doing per-frame update, so update spinners, etc.
-void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
+void LLFloaterSettingsDebug::onCopyToClipboard()
+{
+ if (mCurrentControlVariable)
+ getWindow()->copyTextToClipboard(utf8str_to_wstring(mCurrentControlVariable->getName()));
+}
+
+// we've switched controls, so update spinners, etc.
+void LLFloaterSettingsDebug::updateControl()
{
LLSpinCtrl* spinner1 = getChild("val_spinner_1");
LLSpinCtrl* spinner2 = getChild("val_spinner_2");
LLSpinCtrl* spinner3 = getChild("val_spinner_3");
LLSpinCtrl* spinner4 = getChild("val_spinner_4");
- LLColorSwatchCtrl* color_swatch = getChild("color_swatch");
+ LLColorSwatchCtrl* color_swatch = getChild("val_color_swatch");
+ LLUICtrl* bool_ctrl = getChild("boolean_combo");
if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)
{
@@ -247,45 +260,33 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
spinner3->setVisible(FALSE);
spinner4->setVisible(FALSE);
color_swatch->setVisible(FALSE);
- childSetVisible("val_text", FALSE);
+ getChildView("val_text")->setVisible( FALSE);
mComment->setText(LLStringUtil::null);
+ childSetEnabled("copy_btn", false);
+ childSetEnabled("default_btn", false);
+ bool_ctrl->setVisible(false);
- if (controlp)
+ if (mCurrentControlVariable)
{
-// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Modified: RLVa-0.2.1d
- if (rlv_handler_t::isEnabled())
- {
- // Don't allow changing DBG_WRITE debug settings under @setdebug=n
- bool fEnable = !( (gRlvHandler.hasBehaviour(RLV_BHVR_SETDEBUG)) &&
- (RlvExtGetSet::getDebugSettingFlags(controlp->getName()) & RlvExtGetSet::DBG_WRITE) );
- // Don't allow toggling "Basic Shaders" and/or "Atmopsheric Shaders" through the debug settings under @setenv=n
- fEnable &= !((gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) &&
- (("VertexShaderEnable" == controlp->getName()) || ("WindLightUseAtmosShaders" == controlp->getName())));
- #ifdef RLV_EXTENSION_STARTLOCATION
- // Don't allow toggling RLVaLoginLastLocation
- fEnable &= !(RLV_SETTING_LOGINLASTLOCATION == controlp->getName());
- #endif // RLV_EXTENSION_STARTLOCATION
-
- // NOTE: this runs per-frame so there's no need to explictly handle onCommitSettings() or onClickDefault()
- spinner1->setEnabled(fEnable);
- spinner2->setEnabled(fEnable);
- spinner3->setEnabled(fEnable);
- spinner4->setEnabled(fEnable);
- color_swatch->setEnabled(fEnable);
- childSetEnabled("val_text", fEnable);
- childSetEnabled("boolean_combo", fEnable);
- childSetEnabled("default_btn", fEnable);
- }
+// [RLVa:KB] - Checked: 2011-05-28 (RLVa-1.4.0a) | Modified: RLVa-1.4.0a
+ // If "HideFromEditor" was toggled while the floater is open then we need to manually disable access to the control
+ mOldVisibility = mCurrentControlVariable->isHiddenFromSettingsEditor();
+ spinner1->setEnabled(!mOldVisibility);
+ spinner2->setEnabled(!mOldVisibility);
+ spinner3->setEnabled(!mOldVisibility);
+ spinner4->setEnabled(!mOldVisibility);
+ color_swatch->setEnabled(!mOldVisibility);
+ childSetEnabled("val_text", !mOldVisibility);
+ bool_ctrl->setEnabled(!mOldVisibility);
+ childSetEnabled("default_btn", !mOldVisibility);
// [/RLVa:KB]
- controlp = controlp->getCOAActive();
- eControlType type = controlp->type();
+ childSetEnabled("copy_btn", true);
- //hide combo box only for non booleans, otherwise this will result in the combo box closing every frame
- childSetVisible("boolean_combo", type == TYPE_BOOLEAN);
-
+ eControlType type = mCurrentControlVariable->type();
+
+ mComment->setText(mCurrentControlVariable->getName() + std::string(": ") + mCurrentControlVariable->getComment());
- mComment->setText(controlp->getComment());
spinner1->setMaxValue(F32_MAX);
spinner2->setMaxValue(F32_MAX);
spinner3->setMaxValue(F32_MAX);
@@ -311,7 +312,7 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
spinner4->setIncrement(0.1f);
}
- LLSD sd = controlp->get();
+ LLSD sd = mCurrentControlVariable->get();
switch(type)
{
case TYPE_U32:
@@ -348,23 +349,17 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
}
break;
case TYPE_BOOLEAN:
- if (!childHasFocus("boolean_combo"))
+ bool_ctrl->setVisible(true);
+ if (!bool_ctrl->hasFocus())
{
- if (sd.asBoolean())
- {
- childSetValue("boolean_combo", LLSD("true"));
- }
- else
- {
- childSetValue("boolean_combo", LLSD(""));
- }
+ bool_ctrl->setValue(sd.asInteger());
}
break;
case TYPE_STRING:
- childSetVisible("val_text", TRUE);
- if (!childHasFocus("val_text"))
+ getChildView("val_text")->setVisible( TRUE);
+ if (!getChild("val_text")->hasFocus())
{
- childSetValue("val_text", sd);
+ getChild("val_text")->setValue(sd);
}
break;
case TYPE_VEC3:
@@ -530,3 +525,58 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
}
}
+
+void LLFloaterSettingsDebug::onUpdateFilter(const std::string& searchTerm, void*)
+{
+ LLFloaterSettingsDebug::getInstance()->updateFilter(searchTerm);
+}
+
+void LLFloaterSettingsDebug::updateFilter(std::string searchTerm)
+{
+ // make sure not to reselect the first item in the list on focus restore
+ if (searchTerm == mOldSearchTerm) return;
+
+ mOldSearchTerm = searchTerm;
+
+ LLStringUtil::toLower(searchTerm);
+
+ mSettingsScrollList->deleteAllItems();
+
+ for(settings_map_t::iterator it = mSettingsMap.begin(); it != mSettingsMap.end(); it++)
+ {
+ bool addItem = searchTerm.empty();
+ if (!addItem)
+ {
+ std::string itemValue = it->second->getName();
+
+ LLStringUtil::toLower(itemValue);
+
+ if (itemValue.find(searchTerm, 0) != std::string::npos)
+ {
+ addItem = true;
+ }
+ else // performance: broken out to save toLower calls on comments
+ {
+ std::string itemComment = it->second->getComment();
+ LLStringUtil::toLower(itemComment);
+ if (itemComment.find(searchTerm, 0) != std::string::npos)
+ addItem = true;
+ }
+ }
+
+ if (addItem)
+ {
+ LLSD item;
+ item["columns"][0]["value"] = it->second->getName();
+ mSettingsScrollList->addElement(item, ADD_BOTTOM, it->second);
+ }
+ }
+ mSettingsScrollList->sortByColumnIndex(0, true);
+
+ // if at least one match was found, highlight and select the topmost entry in the list
+ // but only if actually a search term was given
+ if (mSettingsScrollList->getItemCount() && !searchTerm.empty())
+ mSettingsScrollList->selectFirstItem();
+
+ onSettingSelect();
+}
diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h
index e08e6b5d7..cce8fa481 100644
--- a/indra/newview/llfloatersettingsdebug.h
+++ b/indra/newview/llfloatersettingsdebug.h
@@ -35,9 +35,13 @@
#include "llcontrol.h"
#include "llfloater.h"
-#include "lltexteditor.h"
-class LLFloaterSettingsDebug : public LLFloater
+class LLScrollListCtrl;
+class LLTextEditor;
+
+class LLFloaterSettingsDebug
+: public LLFloater
+, public LLSingleton
{
public:
LLFloaterSettingsDebug();
@@ -46,17 +50,33 @@ public:
virtual BOOL postBuild();
virtual void draw();
- void updateControl(LLControlVariable* control);
+ void updateControl();
- 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);
+ // updates control filter to display in the controls list on keystroke
+ static void onUpdateFilter(const std::string& searchTerm, void*);
+ void updateFilter(std::string searchTerm);
+
+ void onSettingSelect();
+ void onCommitSettings();
+ void onClickDefault();
+ void onCopyToClipboard();
+
+private:
+ // returns a pointer to the currently selected control variable, or NULL
+ LLControlVariable* getControlVariable();
protected:
- static LLFloaterSettingsDebug* sInstance;
+ typedef std::map settings_map_t;
+
+ settings_map_t mSettingsMap;
+
+ std::string mOldSearchTerm;
+ LLControlVariable* mCurrentControlVariable;
+ LLControlVariable* mOldControlVariable;
+ bool mOldVisibility;
+
+ LLScrollListCtrl* mSettingsScrollList;
LLTextEditor* mComment;
};
#endif //LLFLOATERDEBUGSETTINGS_H
-
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 92f5cd320..fb8a783ba 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1137,11 +1137,17 @@ LLFloaterIMPanel* LLIMMgr::createFloater(
gFloaterView->addChild(floater); // reparent to floater view
LLFloater* focused_floater = gFloaterView->getFocusedFloater(); // obtain the focused floater
floater->open(); // make the new chat floater appear
+ static LLCachedControl minimize("OtherChatsTornOffAndMinimized");
if (focused_floater != NULL) // there was a focused floater
{
- floater->setMinimized(true); // so minimize this one, for now
+ floater->setMinimized(minimize); // so minimize this one, for now, if desired
focused_floater->setFocus(true); // and work around focus being removed by focusing on the last
}
+ else if (minimize)
+ {
+ floater->setFocus(false); // work around focus being granted to new floater
+ floater->setMinimized(true);
+ }
}
mFloaters.insert(floater->getHandle());
return floater;
@@ -1179,11 +1185,12 @@ LLFloaterIMPanel* LLIMMgr::createFloater(
static LLCachedControl minimize("OtherChatsTornOffAndMinimized");
if (focused_floater != NULL) // there was a focused floater
{
- floater->setMinimized(true); // so minimize this one, for now
+ floater->setMinimized(minimize); // so minimize this one, for now, if desired
focused_floater->setFocus(true); // and work around focus being removed by focusing on the last
}
else if (minimize)
{
+ floater->setFocus(false); // work around focus being granted to new floater
floater->setMinimized(true);
}
}
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 904a809c9..ef3bb65f4 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -385,7 +385,7 @@ void LLPanelAvatarFirstLife::onClickImage(void* data)
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
- rect.translate( left - rect.mLeft, top - rect.mTop );
+ rect.translate( left - rect.mLeft, rect.mTop - top ); // Changed to avoid textures being sunken below the window border.
LLPreviewTexture* preview = new LLPreviewTexture("preview task texture",
rect,
std::string("Profile First Life Picture"),
@@ -433,7 +433,7 @@ void LLPanelAvatarSecondLife::onClickImage(void* data)
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
- rect.translate( left - rect.mLeft, top - rect.mTop );
+ rect.translate( left - rect.mLeft, rect.mTop - top ); // Changed to avoid textures being sunken below the window border.
LLPreviewTexture* preview = new LLPreviewTexture("preview task texture",
rect,
std::string("Profile Picture: ") + name_text,
diff --git a/indra/newview/llprefschat.cpp b/indra/newview/llprefschat.cpp
index 7290c3fb9..95b442c4c 100644
--- a/indra/newview/llprefschat.cpp
+++ b/indra/newview/llprefschat.cpp
@@ -66,6 +66,7 @@ private:
LLColor4 mHTMLLinkColor;
BOOL mChatFullWidth;
BOOL mCloseChatOnReturn;
+ bool mOnlyComm;
BOOL mArrowKeysMoveAvatar;
BOOL mShowTimestamps;
BOOL mPlayTypingAnim;
@@ -111,6 +112,7 @@ LLPrefsChatImpl::LLPrefsChatImpl()
childSetValue("bubble_chat_opacity", gSavedSettings.getF32("ChatBubbleOpacity"));
childSetValue("translate_language_combobox", gSavedSettings.getString("TranslateLanguage"));
childSetValue("translate_chat", gSavedSettings.getBOOL("TranslateChat"));
+ mOnlyComm = gSavedSettings.getBOOL("CommunicateSpecificShortcut");
}
void LLPrefsChatImpl::refreshValues()
@@ -139,6 +141,7 @@ void LLPrefsChatImpl::refreshValues()
mBubbleOpacity = gSavedSettings.getF32("ChatBubbleOpacity");
mTranslateLanguage = gSavedSettings.getString("TranslateLanguage");
mTranslateChat = gSavedSettings.getBOOL("TranslateChat");
+ mOnlyComm = gSavedSettings.getBOOL("CommunicateSpecificShortcut");
}
void LLPrefsChatImpl::cancel()
@@ -166,6 +169,7 @@ void LLPrefsChatImpl::cancel()
gSavedSettings.setF32("ChatBubbleOpacity", mBubbleOpacity);
gSavedSettings.setString("TranslateLanguage", mTranslateLanguage);
gSavedSettings.setBOOL("TranslateChat", mTranslateChat);
+ gSavedSettings.setBOOL("CommunicateSpecificShortcut", mOnlyComm);
}
void LLPrefsChatImpl::apply()
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 12fcfc77d..d13ec619a 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -217,6 +217,7 @@ protected:
BOOL mNoCopyTextureSelected;
F32 mContextConeOpacity;
LLSaveFolderState mSavedFolderState;
+ BOOL mSelectedItemPinned;
LLScrollListCtrl* mLocalScrollCtrl; // tag: vaa emerald local_asset_browser
};
@@ -249,7 +250,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
mSearchEdit(NULL),
mImmediateFilterPermMask(immediate_filter_perm_mask),
mNonImmediateFilterPermMask(non_immediate_filter_perm_mask),
- mContextConeOpacity(0.f)
+ mContextConeOpacity(0.f),
+ mSelectedItemPinned(FALSE)
{
mCanApplyImmediately = can_apply_immediately;
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml");
@@ -506,8 +508,13 @@ BOOL LLFloaterTexturePicker::postBuild()
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
mInventoryPanel->setAllowMultiSelect(FALSE);
- // store this filter as the default one
- mInventoryPanel->getRootFolder()->getFilter()->markDefault();
+ // Disable auto selecting first filtered item because it takes away
+ // selection from the item set by LLTextureCtrl owning this floater.
+ mInventoryPanel->getRootFolder()->setAutoSelectOverride(TRUE);
+
+ // Commented out to scroll to currently selected texture. See EXT-5403.
+ // // store this filter as the default one
+ // mInventoryPanel->getRootFolder()->getFilter()->markDefault();
// Commented out to stop opening all folders with textures
// mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_TEXTURE);
@@ -675,6 +682,31 @@ void LLFloaterTexturePicker::draw()
// Draw X
gl_draw_x(interior, LLColor4::black );
}
+
+ if (mSelectedItemPinned) return;
+
+ LLFolderView* folder_view = mInventoryPanel->getRootFolder();
+ if (!folder_view) return;
+
+ LLInventoryFilter* filter = folder_view->getFilter();
+ if (!filter) return;
+
+ bool is_filter_active = folder_view->getCompletedFilterGeneration() < filter->getCurrentGeneration() &&
+ filter->isNotDefault();
+
+ // After inventory panel filter is applied we have to update
+ // constraint rect for the selected item because of folder view
+ // AutoSelectOverride set to TRUE. We force PinningSelectedItem
+ // flag to FALSE state and setting filter "dirty" to update
+ // scroll container to show selected item (see LLFolderView::doIdle()).
+ if (!is_filter_active && !mSelectedItemPinned)
+ {
+ folder_view->setPinningSelectedItem(mSelectedItemPinned);
+ folder_view->dirtyFilter();
+ folder_view->arrangeFromRoot();
+
+ mSelectedItemPinned = TRUE;
+ }
}
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index c8fa64f01..a58e8ecf2 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -880,7 +880,7 @@ void init_menus()
menu = new LLMenuGL(CLIENT_MENU_NAME);
menu->setCanTearOff(FALSE);
- menu->addChild(new LLMenuItemCallGL("Debug Settings...", LLFloaterSettingsDebug::show, NULL, NULL));
+ menu->addChild(new LLMenuItemCallGL("Debug Settings...", handle_singleton_toggle, NULL, NULL));
gLoginMenuBarView->addChild(menu);
menu->updateParent(LLMenuGL::sMenuContainer);
@@ -1223,7 +1223,7 @@ void init_client_menu(LLMenuGL* menu)
&menu_check_control,
(void*)"SaveMinidump"));
- menu->addChild(new LLMenuItemCallGL("Debug Settings...", LLFloaterSettingsDebug::show, NULL, NULL));
+ menu->addChild(new LLMenuItemCallGL("Debug Settings...", handle_singleton_toggle, NULL, NULL));
menu->addChild(new LLMenuItemCheckGL("View Admin Options", &handle_admin_override_toggle, NULL, &check_admin_override, NULL, 'V', MASK_CONTROL | MASK_ALT));
menu->addChild(new LLMenuItemCallGL("Request Admin Status",
@@ -2062,7 +2062,8 @@ class LLViewCommunicate : public view_listener_t
{
bool handleEvent(LLPointer event, const LLSD& userdata)
{
- if (LLFloaterChatterBox::getInstance()->getFloaterCount() == 0)
+ static LLCachedControl only_comm("CommunicateSpecificShortcut");
+ if (!only_comm && LLFloaterChatterBox::getInstance()->getFloaterCount() == 0)
{
LLFloaterMyFriends::toggleInstance();
}
diff --git a/indra/newview/skins/default/xui/en-us/floater_chat_history_barless.xml b/indra/newview/skins/default/xui/en-us/floater_chat_history_barless.xml
new file mode 100644
index 000000000..fd6eb9091
--- /dev/null
+++ b/indra/newview/skins/default/xui/en-us/floater_chat_history_barless.xml
@@ -0,0 +1,42 @@
+
+
+ Connecting to in-world Voice Chat...
+ Connected
+ Voice not available at your current location
+ Disconnected from in-world Voice Chat
+ icn_voice-localchat.tga
+ -- Instant message logging enabled --
+ -- End of Log --
+ '[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been granted permission to: [PERMISSIONS].
+ '[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS].
+ Take in-world money ([CURRENCY]) from you
+ Act on your control inputs
+ Remap your control inputs
+ Animate your avatar
+ Attach to your avatar
+ Release ownership and become public
+ Link and delink from other objects
+ Add and remove joints with other objects
+ Change its permissions
+ Track your camera
+ Teleport you
+ Control your camera
+
+
+
+ Gestures
+
+
+
+
+
+
+
+
+ Gestures
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/floater_settings_debug.xml b/indra/newview/skins/default/xui/en-us/floater_settings_debug.xml
index a8c0840a1..61cf756e8 100644
--- a/indra/newview/skins/default/xui/en-us/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_settings_debug.xml
@@ -1,31 +1,33 @@
-
-
+
+
+
-
-
- TRUE
-
-
- FALSE
-
-
-
+
+ True
+
+
+ False
+
+
+
-
+
-
-
-
-
+
+
diff --git a/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
index ad9a66e3b..6734aa60b 100644
--- a/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
@@ -577,7 +577,7 @@
+ mouse_opaque="true" name="Region/Estate..." shortcut="alt|R" width="185">
+
(# lines)
- Chat Options:
+ Chat Options:
+