summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2009-12-04 19:01:31 -0500
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2009-12-04 19:01:31 -0500
commit16efeb85817cce82e594cf8482f5e52385a59ad1 (patch)
tree85878d4b882faa0157d1be26dc6e0e28d582c218 /indra/newview
parentf017058345ba1bc2682051017d3f9c0d6ea3db72 (diff)
parent938c51d2a483962556ee183c24e2b3f635f2c56b (diff)
merge
--HG-- branch : avatar-pipeline
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/settings.xml48
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/installers/darwin/release-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/llappviewer.cpp4
-rw-r--r--indra/newview/llbottomtray.cpp2
-rw-r--r--indra/newview/llchathistory.cpp37
-rw-r--r--indra/newview/llchathistory.h1
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp2
-rw-r--r--indra/newview/llfloaterbuyland.cpp6
-rw-r--r--indra/newview/llfolderview.cpp13
-rw-r--r--indra/newview/llfolderview.h6
-rw-r--r--indra/newview/llimview.cpp18
-rw-r--r--indra/newview/llimview.h3
-rw-r--r--indra/newview/llinspect.cpp21
-rw-r--r--indra/newview/llinspect.h3
-rw-r--r--indra/newview/llinspectavatar.cpp24
-rw-r--r--indra/newview/llinventorybridge.cpp58
-rw-r--r--indra/newview/llinventorybridge.h2
-rw-r--r--indra/newview/llinventoryfilter.cpp309
-rw-r--r--indra/newview/llinventoryfilter.h198
-rw-r--r--indra/newview/llinventoryfunctions.h27
-rw-r--r--indra/newview/llinventorymodel.cpp19
-rw-r--r--indra/newview/llinventorymodel.h6
-rw-r--r--indra/newview/llinventorypanel.cpp81
-rw-r--r--indra/newview/llinventorypanel.h7
-rw-r--r--indra/newview/lllocationinputctrl.cpp20
-rw-r--r--indra/newview/llnearbychat.cpp47
-rw-r--r--indra/newview/llnearbychat.h4
-rw-r--r--indra/newview/llnearbychathandler.cpp18
-rw-r--r--indra/newview/llpanelgroupnotices.cpp3
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp9
-rw-r--r--indra/newview/llpanelimcontrolpanel.h5
-rw-r--r--indra/newview/llpanellandmarks.cpp17
-rw-r--r--indra/newview/llpanellogin.cpp2
-rw-r--r--indra/newview/llpanelmaininventory.cpp30
-rw-r--r--indra/newview/llpanelobjectinventory.cpp21
-rw-r--r--indra/newview/llpanelobjectinventory.h3
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp2
-rw-r--r--indra/newview/llpanelpeoplemenus.cpp4
-rw-r--r--indra/newview/llpanelplaces.cpp18
-rw-r--r--indra/newview/llpanelplacestab.h8
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp112
-rw-r--r--indra/newview/llpanelprimmediacontrols.h7
-rw-r--r--indra/newview/llscriptfloater.cpp52
-rw-r--r--indra/newview/llscriptfloater.h11
-rw-r--r--indra/newview/llsidepanelinventory.cpp9
-rw-r--r--indra/newview/llsidepanelinventory.h1
-rw-r--r--indra/newview/llsidetray.cpp26
-rw-r--r--indra/newview/llsidetray.h3
-rw-r--r--indra/newview/llteleporthistory.cpp5
-rw-r--r--indra/newview/lltexturefetch.cpp8
-rw-r--r--indra/newview/llviewerfloaterreg.cpp8
-rw-r--r--indra/newview/llviewerfoldertype.cpp67
-rw-r--r--indra/newview/llviewerfoldertype.h4
-rw-r--r--indra/newview/llviewerkeyboard.cpp3
-rw-r--r--indra/newview/llviewermedia.cpp82
-rw-r--r--indra/newview/llviewermedia.h7
-rw-r--r--indra/newview/llviewermessage.cpp120
-rw-r--r--indra/newview/llviewertexturelist.cpp4
-rw-r--r--indra/newview/llviewerwindow.cpp4
-rw-r--r--indra/newview/llvoavatar.cpp19
-rw-r--r--indra/newview/llvoicechannel.cpp28
-rw-r--r--indra/newview/llvoicechannel.h1
-rw-r--r--indra/newview/skins/default/colors.xml2
-rw-r--r--indra/newview/skins/default/textures/textures.xml11
-rw-r--r--indra/newview/skins/default/textures/windows/startup_logo.pngbin0 -> 2457 bytes
-rw-r--r--indra/newview/skins/default/xui/en/floater_aaa.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml885
-rw-r--r--indra/newview/skins/default/xui/en/floater_nearby_chat.xml7
-rw-r--r--indra/newview/skins/default/xui/en/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_text_editor.xml20
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_textbox.xml17
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml30
-rw-r--r--indra/newview/skins/default/xui/en/inspect_avatar.xml37
-rw-r--r--indra/newview/skins/default/xui/en/inspect_group.xml11
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml14
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml13
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml41
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_text_editor.xml8
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml11
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_classified.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_general.xml68
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml90
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_picks.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_general.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml175
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_general.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_general_layout.xml242
-rw-r--r--indra/newview/skins/default/xui/en/panel_toast.xml44
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml14
-rw-r--r--indra/newview/skins/default/xui/en/widgets/accordion_tab.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chat_history.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_script.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/floater.xml47
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/menu_item.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/radio_item.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/slider_bar.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/spinner.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/textbase.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml2
111 files changed, 2085 insertions, 1477 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index fa4dfe767b..b301d784f9 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -386,17 +386,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>AutoPlayMedia</key>
- <map>
- <key>Comment</key>
- <string>Allow media objects to automatically play or navigate?</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
<key>AutoSnapshot</key>
<map>
<key>Comment</key>
@@ -3717,7 +3706,18 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.15</real>
+ <real>0.5</real>
+ </map>
+ <key>InspectorShowTime</key>
+ <map>
+ <key>Comment</key>
+ <string>Stay timing for inspectors</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>3.0</real>
</map>
<key>InstallLanguage</key>
<map>
@@ -7978,7 +7978,7 @@
<key>ShowPGSearchAll</key>
<map>
<key>Comment</key>
- <string>Display results of search All that are flagged as PG</string>
+ <string>Display results of search All that are flagged as general</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -7991,7 +7991,7 @@
<key>ShowMatureSearchAll</key>
<map>
<key>Comment</key>
- <string>Display results of search All that are flagged as mature</string>
+ <string>Display results of search All that are flagged as moderate</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8017,7 +8017,7 @@
<key>ShowPGGroups</key>
<map>
<key>Comment</key>
- <string>Display results of find groups that are flagged as PG</string>
+ <string>Display results of find groups that are flagged as general</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8030,7 +8030,7 @@
<key>ShowMatureGroups</key>
<map>
<key>Comment</key>
- <string>Display results of find groups that are flagged as mature</string>
+ <string>Display results of find groups that are flagged as moderate</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8056,7 +8056,7 @@
<key>ShowPGClassifieds</key>
<map>
<key>Comment</key>
- <string>Display results of find classifieds that are flagged as PG</string>
+ <string>Display results of find classifieds that are flagged as general</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8069,7 +8069,7 @@
<key>ShowMatureClassifieds</key>
<map>
<key>Comment</key>
- <string>Display results of find classifieds that are flagged as mature</string>
+ <string>Display results of find classifieds that are flagged as moderate</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8095,7 +8095,7 @@
<key>ShowPGEvents</key>
<map>
<key>Comment</key>
- <string>Display results of find events that are flagged as PG</string>
+ <string>Display results of find events that are flagged as general</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8108,7 +8108,7 @@
<key>ShowMatureEvents</key>
<map>
<key>Comment</key>
- <string>Display results of find events that are flagged as mature</string>
+ <string>Display results of find events that are flagged as moderate</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8134,7 +8134,7 @@
<key>ShowPGLand</key>
<map>
<key>Comment</key>
- <string>Display results of find land sales that are flagged as PG</string>
+ <string>Display results of find land sales that are flagged as general</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8147,7 +8147,7 @@
<key>ShowMatureLand</key>
<map>
<key>Comment</key>
- <string>Display results of find land sales that are flagged as mature</string>
+ <string>Display results of find land sales that are flagged as moderate</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8173,7 +8173,7 @@
<key>ShowPGSims</key>
<map>
<key>Comment</key>
- <string>Display results of find places or find popular that are in PG sims</string>
+ <string>Display results of find places or find popular that are in general sims</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
@@ -8186,7 +8186,7 @@
<key>ShowMatureSims</key>
<map>
<key>Comment</key>
- <string>Display results of find places or find popular that are in mature sims</string>
+ <string>Display results of find places or find popular that are in moderate sims</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
diff --git a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
index 408a4d4992..9d9fd897e7 100644
--- a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
index b901e46b65..9d9fd897e7 100644
--- a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/installers/darwin/release-dmg/_DS_Store b/indra/newview/installers/darwin/release-dmg/_DS_Store
index 2c179b11a4..9d9fd897e7 100644
--- a/indra/newview/installers/darwin/release-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/release-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
index 309c8adaaa..9d9fd897e7 100644
--- a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index eb08707b61..ddc818172d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -899,6 +899,8 @@ bool LLAppViewer::init()
loadEventHostModule(gSavedSettings.getS32("QAModeEventHostPort"));
}
+ LLViewerMedia::initClass();
+
return true;
}
@@ -1666,7 +1668,7 @@ bool LLAppViewer::initThreads()
// Image decoding
LLAppViewer::sImageDecodeThread = new LLImageDecodeThread(enable_threads && true);
LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true);
- LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && true);
+ LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && false);
LLImage::initClass();
if (LLFastTimer::sLog || LLFastTimer::sMetricLog)
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 96c06b1665..6d3d61d4fe 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -391,7 +391,7 @@ bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata)
}
else if (item == "can_select_all")
{
- return edit_box->canSelectAll();
+ return edit_box->canSelectAll() && (edit_box->getLength()>0);
}
return true;
}
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 5e17770314..96b5ae5908 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -43,6 +43,7 @@
#include "lltrans.h"
#include "llfloaterreg.h"
#include "llmutelist.h"
+#include "llstylemap.h"
#include "llsidetray.h"//for blocked objects panel
@@ -355,6 +356,7 @@ void LLChatHistory::clear()
{
mLastFromName.clear();
LLTextEditor::clear();
+ mLastFromID = LLUUID::null;
}
void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_chat_history, const LLStyle::Params& input_append_params)
@@ -371,13 +373,25 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
style_params.font.size(font_size);
style_params.font.style(input_append_params.font.style);
- std::string header_text = "[" + chat.mTimeStr + "] ";
- if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
- header_text += chat.mFromName + ": ";
-
if (use_plain_text_chat_history)
{
- appendText(header_text, getText().size() != 0, style_params);
+ appendText("[" + chat.mTimeStr + "] ", getText().size() != 0, style_params);
+
+ if (utf8str_trim(chat.mFromName).size() != 0)
+ {
+ // Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
+ if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() )
+ {
+ LLStyle::Params link_params(style_params);
+ link_params.fillFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
+ // Convert the name to a hotlink and add to message.
+ appendText(chat.mFromName + ": ", false, link_params);
+ }
+ else
+ {
+ appendText(chat.mFromName + ": ", false, style_params);
+ }
+ }
}
else
{
@@ -389,9 +403,11 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
LLDate new_message_time = LLDate::now();
- if (mLastFromName == chat.mFromName &&
- mLastMessageTime.notNull() &&
- (new_message_time.secondsSinceEpoch() - mLastMessageTime.secondsSinceEpoch()) < 60.0 )
+ if (mLastFromName == chat.mFromName
+ && mLastFromID == chat.mFromID
+ && mLastMessageTime.notNull()
+ && (new_message_time.secondsSinceEpoch() - mLastMessageTime.secondsSinceEpoch()) < 60.0
+ )
{
view = getSeparator();
p.top_pad = mTopSeparatorPad;
@@ -417,8 +433,13 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
view->reshape(target_rect.getWidth(), view->getRect().getHeight());
view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
+ std::string header_text = "[" + chat.mTimeStr + "] ";
+ if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
+ header_text += chat.mFromName + ": ";
+
appendWidget(p, header_text, false);
mLastFromName = chat.mFromName;
+ mLastFromID = chat.mFromID;
mLastMessageTime = new_message_time;
}
//Handle IRC styled /me messages.
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index d2cfa53d8b..8ca7dd1d58 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -114,6 +114,7 @@ class LLChatHistory : public LLTextEditor
private:
std::string mLastFromName;
+ LLUUID mLastFromID;
LLDate mLastMessageTime;
std::string mMessageHeaderFilename;
std::string mMessageSeparatorFilename;
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index efdaff3f6a..92df281307 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -122,7 +122,6 @@ void LLNearbyChatToastPanel::addMessage(LLSD& notification)
if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
{
- messageText = messageText.substr(3);
style_params.font.style = "ITALIC";
}
else if( chat_type == CHAT_TYPE_SHOUT)
@@ -208,7 +207,6 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
{
- messageText = messageText.substr(3);
style_params.font.style = "ITALIC";
}
else if( chat_type == CHAT_TYPE_SHOUT)
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 59985a61ff..3a8c3ab4d2 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -494,10 +494,14 @@ void LLFloaterBuyLandUI::updateCovenantInfo()
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if(!region) return;
+ U8 sim_access = region->getSimAccess();
+ std::string rating = LLViewerRegion::accessToString(sim_access);
+
LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
if (region_name)
{
- region_name->setText(region->getName());
+ std::string region_name_txt = region->getName() + " ("+rating +")";
+ region_name->setText(region_name_txt);
}
LLTextBox* region_type = getChild<LLTextBox>("region_type_text");
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index ab49739d58..4e77b42187 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -1803,15 +1803,6 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
return handled;
}
-BOOL LLFolderView::handleScrollWheel(S32 x, S32 y, S32 clicks)
-{
- if (mScrollContainer)
- {
- return mScrollContainer->handleScrollWheel(x, y, clicks);
- }
- return FALSE;
-}
-
void LLFolderView::deleteAllChildren()
{
if(mRenamer == gFocusMgr.getTopCtrl())
@@ -2217,9 +2208,9 @@ void LLFolderView::setFilterPermMask( PermissionMask filter_perm_mask )
mFilter->setFilterPermissions(filter_perm_mask);
}
-U32 LLFolderView::getFilterTypes() const
+U32 LLFolderView::getFilterObjectTypes() const
{
- return mFilter->getFilterTypes();
+ return mFilter->getFilterObjectTypes();
}
PermissionMask LLFolderView::getFilterPermissions() const
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index a0e252ae88..4adf6c2fbf 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -71,9 +71,6 @@ class LLUICtrl;
// that only work folders or only work on items, but I'll worry about
// that later when it's determined to be too slow.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-
class LLFolderViewFunctor
{
public:
@@ -119,7 +116,7 @@ public:
// filter is never null
LLInventoryFilter* getFilter();
const std::string getFilterSubString(BOOL trim = FALSE);
- U32 getFilterTypes() const;
+ U32 getFilterObjectTypes() const;
PermissionMask getFilterPermissions() const;
// JAMESDEBUG use getFilter()->getShowFolderState();
//LLInventoryFilter::EFolderShow getShowFolderState();
@@ -230,7 +227,6 @@ public:
EAcceptance* accept,
std::string& tooltip_msg);
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
- virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
virtual void draw();
virtual void deleteAllChildren();
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 5481ca97cd..d3058e67af 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -165,7 +165,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
if(mVoiceChannel)
{
- mVoiceChannel->setStateChangedCallback(boost::bind(&LLIMSession::onVoiceChannelStateChanged, this, _1, _2));
+ mVoiceChannelStateChangeConnection = mVoiceChannel->setStateChangedCallback(boost::bind(&LLIMSession::onVoiceChannelStateChanged, this, _1, _2));
}
mSpeakers = new LLIMSpeakerMgr(mVoiceChannel);
@@ -270,9 +270,11 @@ LLIMModel::LLIMSession::~LLIMSession()
}
}
+ mVoiceChannelStateChangeConnection.disconnect();
+
// HAVE to do this here -- if it happens in the LLVoiceChannel destructor it will call the wrong version (since the object's partially deconstructed at that point).
mVoiceChannel->deactivate();
-
+
delete mVoiceChannel;
mVoiceChannel = NULL;
}
@@ -1392,13 +1394,13 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
}
else
{
- LLUUID session_id = gIMMgr->addSession(
+ LLUUID new_session_id = gIMMgr->addSession(
mPayload["session_name"].asString(),
type,
session_id);
- if (session_id != LLUUID::null)
+ if (new_session_id != LLUUID::null)
{
- LLIMFloater::show(session_id);
+ LLIMFloater::show(new_session_id);
}
std::string url = gAgent.getRegion()->getCapability(
@@ -1486,13 +1488,13 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)
}
else
{
- LLUUID session_id = gIMMgr->addSession(
+ LLUUID new_session_id = gIMMgr->addSession(
payload["session_name"].asString(),
type,
session_id);
- if (session_id != LLUUID::null)
+ if (new_session_id != LLUUID::null)
{
- LLIMFloater::show(session_id);
+ LLIMFloater::show(new_session_id);
}
std::string url = gAgent.getRegion()->getCapability(
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 66f92c83a5..8a0f57deb0 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -72,6 +72,9 @@ public:
LLUUID mOtherParticipantID;
std::vector<LLUUID> mInitialTargetIDs;
+ // connection to voice channel state change signal
+ boost::signals2::connection mVoiceChannelStateChangeConnection;
+
//does NOT include system messages
S32 mNumUnread;
diff --git a/indra/newview/llinspect.cpp b/indra/newview/llinspect.cpp
index aa299014ee..c7b8db9635 100644
--- a/indra/newview/llinspect.cpp
+++ b/indra/newview/llinspect.cpp
@@ -50,16 +50,16 @@ LLInspect::~LLInspect()
void LLInspect::draw()
{
static LLCachedControl<F32> FADE_TIME(*LLUI::sSettingGroups["config"], "InspectorFadeTime", 1.f);
+ static LLCachedControl<F32> STAY_TIME(*LLUI::sSettingGroups["config"], "InspectorShowTime", 1.f);
if (mOpenTimer.getStarted())
{
- F32 alpha = clamp_rescale(mOpenTimer.getElapsedTimeF32(), 0.f, FADE_TIME, 0.f, 1.f);
- LLViewDrawContext context(alpha);
LLFloater::draw();
- if (alpha == 1.f)
+ if (mOpenTimer.getElapsedTimeF32() > STAY_TIME)
{
mOpenTimer.stop();
+ mCloseTimer.start();
}
-
+
}
else if (mCloseTimer.getStarted())
{
@@ -95,3 +95,16 @@ void LLInspect::onFocusLost()
mCloseTimer.start();
mOpenTimer.stop();
}
+
+// virtual
+BOOL LLInspect::handleHover(S32 x, S32 y, MASK mask)
+{
+ mOpenTimer.pause();
+ return LLView::handleHover(x, y, mask);
+}
+
+// virtual
+void LLInspect::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ mOpenTimer.unpause();
+}
diff --git a/indra/newview/llinspect.h b/indra/newview/llinspect.h
index a461c2fa16..731e99534b 100644
--- a/indra/newview/llinspect.h
+++ b/indra/newview/llinspect.h
@@ -46,6 +46,9 @@ public:
/// Inspectors have a custom fade-in/fade-out animation
/*virtual*/ void draw();
+ /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
+ /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
+
/// Start open animation
/*virtual*/ void onOpen(const LLSD& avatar_id);
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 866669f326..83beae29c1 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -133,7 +133,6 @@ private:
LLUUID mAvatarID;
// Need avatar name information to spawn friend add request
std::string mAvatarName;
- LLUUID mPartnerID;
// an in-flight request for avatar properties from LLAvatarPropertiesProcessor
// is represented by this object
LLFetchAvatarData* mPropertiesRequest;
@@ -187,8 +186,7 @@ public:
LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
: LLInspect( LLSD() ), // single_instance, doesn't really need key
- mAvatarID(), // set in onOpen()
- mPartnerID(),
+ mAvatarID(), // set in onOpen() *Note: we used to show partner's name but we dont anymore --angela 3rd Dec*
mAvatarName(),
mPropertiesRequest(NULL)
{
@@ -257,7 +255,6 @@ void LLInspectAvatar::onOpen(const LLSD& data)
// Extract appropriate avatar id
mAvatarID = data["avatar_id"];
- mPartnerID = LLUUID::null;
BOOL self = mAvatarID == gAgent.getID();
@@ -307,7 +304,6 @@ void LLInspectAvatar::requestUpdate()
getChild<LLUICtrl>("user_name")->setValue("");
getChild<LLUICtrl>("user_subtitle")->setValue("");
getChild<LLUICtrl>("user_details")->setValue("");
- getChild<LLUICtrl>("user_partner")->setValue("");
// Make a new request for properties
delete mPropertiesRequest;
@@ -365,15 +361,6 @@ void LLInspectAvatar::processAvatarData(LLAvatarData* data)
std::string details = getString("Details", args);
getChild<LLUICtrl>("user_details")->setValue( LLSD(details) );
- // Look up partner name, if there is one
- mPartnerID = data->partner_id;
- if (mPartnerID.notNull())
- {
- gCacheName->get(mPartnerID, FALSE,
- boost::bind(&LLInspectAvatar::nameUpdatedCallback,
- this, _1, _2, _3, _4));
- }
-
// Delete the request object as it has been satisfied
delete mPropertiesRequest;
mPropertiesRequest = NULL;
@@ -455,15 +442,6 @@ void LLInspectAvatar::nameUpdatedCallback(
mAvatarName = first + " " + last;
childSetValue("user_name", LLSD(mAvatarName) );
}
-
- if (id == mPartnerID)
- {
- LLStringUtil::format_map_t args;
- args["[PARTNER]"] = first + " " + last;
- std::string partner = getString("Partner", args);
- getChild<LLUICtrl>("user_partner")->setValue(partner);
- }
- // Otherwise possibly a request for an older inspector, ignore it
}
void LLInspectAvatar::onClickAddFriend()
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 2d30e30e58..4c28d5e2df 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -512,37 +512,44 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
std::vector<std::string> &disabled_items, U32 flags)
{
const LLInventoryObject *obj = getInventoryObject();
- if (obj && obj->getIsLinkType())
- {
- items.push_back(std::string("Find Original"));
- if (isLinkedObjectMissing())
- {
- disabled_items.push_back(std::string("Find Original"));
- }
- }
- else
+ if (obj)
{
- items.push_back(std::string("Rename"));
- if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0)
- {
- disabled_items.push_back(std::string("Rename"));
- }
-
- if (show_asset_id)
+ if (obj->getIsLinkType())
{
- items.push_back(std::string("Copy Asset UUID"));
- if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )
- || (flags & FIRST_SELECTED_ITEM) == 0)
+ items.push_back(std::string("Find Original"));
+ if (isLinkedObjectMissing())
{
- disabled_items.push_back(std::string("Copy Asset UUID"));
+ disabled_items.push_back(std::string("Find Original"));
}
}
- items.push_back(std::string("Copy Separator"));
-
- items.push_back(std::string("Copy"));
- if (!isItemCopyable())
+ else
{
- disabled_items.push_back(std::string("Copy"));
+ if (LLAssetType::lookupCanLink(obj->getType()))
+ {
+ items.push_back(std::string("Find Links"));
+ }
+ items.push_back(std::string("Rename"));
+ if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0)
+ {
+ disabled_items.push_back(std::string("Rename"));
+ }
+
+ if (show_asset_id)
+ {
+ items.push_back(std::string("Copy Asset UUID"));
+ if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )
+ || (flags & FIRST_SELECTED_ITEM) == 0)
+ {
+ disabled_items.push_back(std::string("Copy Asset UUID"));
+ }
+ }
+ items.push_back(std::string("Copy Separator"));
+
+ items.push_back(std::string("Copy"));
+ if (!isItemCopyable())
+ {
+ disabled_items.push_back(std::string("Copy"));
+ }
}
}
@@ -931,6 +938,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model,
{
gotoItem(folder);
}
+
if ("open" == action)
{
openItem();
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 67dfc5b6f9..63be9dcdb8 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -154,7 +154,6 @@ public:
virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
virtual void openItem() {}
virtual void closeItem() {}
- virtual void gotoItem(LLFolderView *folder) {} // for links
virtual void previewItem() {openItem();}
virtual void showProperties();
virtual BOOL isItemRenameable() const { return TRUE; }
@@ -241,7 +240,6 @@ public:
virtual void restoreItem();
virtual void restoreToWorld();
virtual void gotoItem(LLFolderView *folder);
-
virtual LLUIImagePtr getIcon() const;
virtual const std::string& getDisplayName() const;
virtual std::string getLabelSuffix() const;
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 085c96c93d..4c5e4d5607 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -44,6 +44,19 @@
// linden library includes
#include "lltrans.h"
+LLInventoryFilter::FilterOps::FilterOps() :
+ mFilterObjectTypes(0xffffffffffffffffULL),
+ mFilterCategoryTypes(0xffffffffffffffffULL),
+ mMinDate(time_min()),
+ mMaxDate(time_max()),
+ mHoursAgo(0),
+ mShowFolderState(SHOW_NON_EMPTY_FOLDERS),
+ mPermissions(PERM_NONE),
+ mFilterTypes(FILTERTYPE_OBJECT),
+ mFilterUUID(LLUUID::null)
+{
+}
+
///----------------------------------------------------------------------------
/// Class LLInventoryFilter
///----------------------------------------------------------------------------
@@ -52,14 +65,6 @@ LLInventoryFilter::LLInventoryFilter(const std::string& name)
mModified(FALSE),
mNeedTextRebuild(TRUE)
{
- mFilterOps.mFilterTypes = 0xffffffffffffffffULL;
- mFilterOps.mMinDate = time_min();
- mFilterOps.mMaxDate = time_max();
- mFilterOps.mHoursAgo = 0;
- mFilterOps.mShowFolderState = SHOW_NON_EMPTY_FOLDERS;
- mFilterOps.mPermissions = PERM_NONE;
- mFilterOps.mFilterForCategories = FALSE;
-
mOrder = SO_FOLDERS_BY_NAME; // This gets overridden by a pref immediately
mSubStringMatchOffset = 0;
@@ -81,11 +86,17 @@ LLInventoryFilter::~LLInventoryFilter()
{
}
-BOOL LLInventoryFilter::check(LLFolderViewItem* item)
+BOOL LLInventoryFilter::check(const LLFolderViewItem* item)
{
- time_t earliest;
+ // If it's a folder and we're showing all folders, return TRUE automatically.
+ const BOOL is_folder = (dynamic_cast<const LLFolderViewFolder*>(item) != NULL);
+ if (is_folder && (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS))
+ {
+ return TRUE;
+ }
- earliest = time_corrected() - mFilterOps.mHoursAgo * 3600;
+ const U16 HOURS_TO_SECONDS = 3600;
+ time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)
{
earliest = mFilterOps.mMinDate;
@@ -94,59 +105,73 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item)
{
earliest = 0;
}
- LLFolderViewEventListener* listener = item->getListener();
+
+ const LLFolderViewEventListener* listener = item->getListener();
mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos;
- bool passed_type = false;
- if (mFilterOps.mFilterForCategories)
+ const BOOL passed_filtertype = checkAgainstFilterType(item);
+ const BOOL passed = passed_filtertype &&
+ (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) &&
+ ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) &&
+ (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate);
+
+ return passed;
+}
+
+BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item)
+{
+ const LLFolderViewEventListener* listener = item->getListener();
+ if (!listener) return FALSE;
+
+ const LLInventoryType::EType object_type = listener->getInventoryType();
+ const LLUUID object_id = listener->getUUID();
+ const LLInventoryObject *object = gInventory.getObject(object_id);
+
+ if (!object) return FALSE;
+
+ const U32 filterTypes = mFilterOps.mFilterTypes;
+
+ // Pass if this item's type is of the correct filter type
+ if (filterTypes & FILTERTYPE_OBJECT)
{
- // Pass if this item is a category of the filter type, or
- // if its parent is a category of the filter type.
- LLUUID uuid = listener->getUUID();
- if (listener->getInventoryType() != LLInventoryType::IT_CATEGORY)
+ // If it has no type, pass it, unless it's a link.
+ if (object_type == LLInventoryType::IT_NONE)
{
- const LLInventoryObject *obj = gInventory.getObject(uuid);
- uuid = obj->getParentUUID();
- }
- LLViewerInventoryCategory *cat = gInventory.getCategory(uuid);
- if (cat)
- {
- passed_type |= ((1LL << cat->getPreferredType() & mFilterOps.mFilterTypes) != U64(0));
+ if (object->getIsLinkType())
+ return FALSE;
}
+ if ((1LL << object_type & mFilterOps.mFilterObjectTypes) == U64(0))
+ return FALSE;
}
- else
+
+ // Pass if this item is a category of the filter type, or
+ // if its parent is a category of the filter type.
+ if (filterTypes & FILTERTYPE_CATEGORY)
{
- LLInventoryType::EType type = listener->getInventoryType();
- passed_type |= ((1LL << type & mFilterOps.mFilterTypes) != U64(0));
- if (type == LLInventoryType::IT_NONE)
+ LLUUID cat_id = object_id;
+ if (listener->getInventoryType() != LLInventoryType::IT_CATEGORY)
{
- const LLInventoryObject *obj = gInventory.getObject(listener->getUUID());
- if (obj && obj->getIsLinkType())
- {
- passed_type = FALSE;
- }
- else
- {
- passed_type = TRUE;
- }
+ cat_id = object->getParentUUID();
}
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
+ if (!cat)
+ return FALSE;
+ if ((1LL << cat->getPreferredType() & mFilterOps.mFilterCategoryTypes) == U64(0))
+ return FALSE;
}
- BOOL passed = passed_type
- && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos)
- && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions)
- && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate);
-
- BOOL is_folder = (dynamic_cast<LLFolderViewFolder*>(item) != NULL);
- if (is_folder && mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
+ // Pass if this item is the target UUID or if it links to the target UUID
+ if (filterTypes & FILTERTYPE_UUID)
{
- passed = TRUE;
+ if (object->getLinkedUUID() != mFilterOps.mFilterUUID)
+ return FALSE;
}
- return passed;
+ return TRUE;
}
-const std::string LLInventoryFilter::getFilterSubString(BOOL trim)
+
+const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const
{
return mFilterSubString;
}
@@ -157,9 +182,9 @@ std::string::size_type LLInventoryFilter::getStringMatchOffset() const
}
// has user modified default filter params?
-BOOL LLInventoryFilter::isNotDefault()
+BOOL LLInventoryFilter::isNotDefault() const
{
- return mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes
+ return mFilterOps.mFilterObjectTypes != mDefaultFilterOps.mFilterObjectTypes
|| mFilterSubString.size()
|| mFilterOps.mPermissions != mDefaultFilterOps.mPermissions
|| mFilterOps.mMinDate != mDefaultFilterOps.mMinDate
@@ -167,9 +192,9 @@ BOOL LLInventoryFilter::isNotDefault()
|| mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo;
}
-BOOL LLInventoryFilter::isActive()
+BOOL LLInventoryFilter::isActive() const
{
- return mFilterOps.mFilterTypes != 0xffffffffffffffffULL
+ return mFilterOps.mFilterObjectTypes != 0xffffffffffffffffULL
|| mFilterSubString.size()
|| mFilterOps.mPermissions != PERM_NONE
|| mFilterOps.mMinDate != time_min()
@@ -177,7 +202,7 @@ BOOL LLInventoryFilter::isActive()
|| mFilterOps.mHoursAgo != 0;
}
-BOOL LLInventoryFilter::isModified()
+BOOL LLInventoryFilter::isModified() const
{
return mModified;
}
@@ -189,15 +214,43 @@ BOOL LLInventoryFilter::isModifiedAndClear()
return ret;
}
-void LLInventoryFilter::setFilterTypes(U64 types, BOOL filter_for_categories)
+void LLInventoryFilter::setFilterObjectTypes(U64 types)
+{
+ if (mFilterOps.mFilterObjectTypes != types)
+ {
+ // keep current items only if no type bits getting turned off
+ BOOL fewer_bits_set = (mFilterOps.mFilterObjectTypes & ~types);
+ BOOL more_bits_set = (~mFilterOps.mFilterObjectTypes & types);
+
+ mFilterOps.mFilterObjectTypes = types;
+ if (more_bits_set && fewer_bits_set)
+ {
+ // neither less or more restrive, both simultaneously
+ // so we need to filter from scratch
+ setModified(FILTER_RESTART);
+ }
+ else if (more_bits_set)
+ {
+ // target is only one of all requested types so more type bits == less restrictive
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+ else if (fewer_bits_set)
+ {
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ }
+ mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
+}
+
+void LLInventoryFilter::setFilterCategoryTypes(U64 types)
{
- if (mFilterOps.mFilterTypes != types)
+ if (mFilterOps.mFilterCategoryTypes != types)
{
// keep current items only if no type bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mFilterTypes & ~types);
- BOOL more_bits_set = (~mFilterOps.mFilterTypes & types);
+ BOOL fewer_bits_set = (mFilterOps.mFilterCategoryTypes & ~types);
+ BOOL more_bits_set = (~mFilterOps.mFilterCategoryTypes & types);
- mFilterOps.mFilterTypes = types;
+ mFilterOps.mFilterCategoryTypes = types;
if (more_bits_set && fewer_bits_set)
{
// neither less or more restrive, both simultaneously
@@ -214,7 +267,21 @@ void LLInventoryFilter::setFilterTypes(U64 types, BOOL filter_for_categories)
setModified(FILTER_MORE_RESTRICTIVE);
}
}
- mFilterOps.mFilterForCategories = filter_for_categories;
+ mFilterOps.mFilterTypes |= FILTERTYPE_CATEGORY;
+}
+
+void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)
+{
+ if (mFilterOps.mFilterUUID == LLUUID::null)
+ {
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else
+ {
+ setModified(FILTER_RESTART);
+ }
+ mFilterOps.mFilterUUID = object_id;
+ mFilterOps.mFilterTypes = FILTERTYPE_UUID;
}
void LLInventoryFilter::setFilterSubString(const std::string& string)
@@ -222,9 +289,11 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)
if (mFilterSubString != string)
{
// hitting BACKSPACE, for example
- BOOL less_restrictive = mFilterSubString.size() >= string.size() && !mFilterSubString.substr(0, string.size()).compare(string);
+ const BOOL less_restrictive = mFilterSubString.size() >= string.size() && !mFilterSubString.substr(0, string.size()).compare(string);
+
// appending new characters
- BOOL more_restrictive = mFilterSubString.size() < string.size() && !string.substr(0, mFilterSubString.size()).compare(mFilterSubString);
+ const BOOL more_restrictive = mFilterSubString.size() < string.size() && !string.substr(0, mFilterSubString.size()).compare(mFilterSubString);
+
mFilterSubString = string;
LLStringUtil::toUpper(mFilterSubString);
LLStringUtil::trimHead(mFilterSubString);
@@ -241,6 +310,14 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)
{
setModified(FILTER_RESTART);
}
+
+ // Cancel out UUID once the search string is modified
+ if (mFilterOps.mFilterTypes == FILTERTYPE_UUID)
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_UUID;
+ mFilterOps.mFilterUUID == LLUUID::null;
+ setModified(FILTER_RESTART);
+ }
}
}
@@ -298,12 +375,18 @@ void LLInventoryFilter::setDateRangeLastLogoff(BOOL sl)
}
}
-BOOL LLInventoryFilter::isSinceLogoff()
+BOOL LLInventoryFilter::isSinceLogoff() const
{
return (mFilterOps.mMinDate == (time_t)mLastLogoff) &&
(mFilterOps.mMaxDate == time_max());
}
+void LLInventoryFilter::clearModified()
+{
+ mModified = FALSE;
+ mFilterBehavior = FILTER_NONE;
+}
+
void LLInventoryFilter::setHoursAgo(U32 hours)
{
if (mFilterOps.mHoursAgo != hours)
@@ -417,12 +500,12 @@ void LLInventoryFilter::setModified(EFilterBehavior behavior)
}
}
-BOOL LLInventoryFilter::isFilterWith(LLInventoryType::EType t)
+BOOL LLInventoryFilter::isFilterObjectTypesWith(LLInventoryType::EType t) const
{
- return mFilterOps.mFilterTypes & (1LL << t);
+ return mFilterOps.mFilterObjectTypes & (1LL << t);
}
-std::string LLInventoryFilter::getFilterText()
+const std::string& LLInventoryFilter::getFilterText()
{
if (!mNeedTextRebuild)
{
@@ -437,7 +520,7 @@ std::string LLInventoryFilter::getFilterText()
S32 num_filter_types = 0;
mFilterText.clear();
- if (isFilterWith(LLInventoryType::IT_ANIMATION))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_ANIMATION))
{
//filtered_types += " Animations,";
filtered_types += LLTrans::getString("Animations");
@@ -452,7 +535,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_CALLINGCARD))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_CALLINGCARD))
{
//filtered_types += " Calling Cards,";
filtered_types += LLTrans::getString("Calling Cards");
@@ -466,7 +549,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_WEARABLE))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_WEARABLE))
{
//filtered_types += " Clothing,";
filtered_types += LLTrans::getString("Clothing");
@@ -480,7 +563,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_GESTURE))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_GESTURE))
{
//filtered_types += " Gestures,";
filtered_types += LLTrans::getString("Gestures");
@@ -494,7 +577,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_LANDMARK))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_LANDMARK))
{
//filtered_types += " Landmarks,";
filtered_types += LLTrans::getString("Landmarks");
@@ -508,7 +591,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_NOTECARD))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_NOTECARD))
{
//filtered_types += " Notecards,";
filtered_types += LLTrans::getString("Notecards");
@@ -522,7 +605,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_OBJECT) && isFilterWith(LLInventoryType::IT_ATTACHMENT))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_OBJECT) && isFilterObjectTypesWith(LLInventoryType::IT_ATTACHMENT))
{
//filtered_types += " Objects,";
filtered_types += LLTrans::getString("Objects");
@@ -536,7 +619,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_LSL))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_LSL))
{
//filtered_types += " Scripts,";
filtered_types += LLTrans::getString("Scripts");
@@ -550,7 +633,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_SOUND))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_SOUND))
{
//filtered_types += " Sounds,";
filtered_types += LLTrans::getString("Sounds");
@@ -564,7 +647,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_TEXTURE))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_TEXTURE))
{
//filtered_types += " Textures,";
filtered_types += LLTrans::getString("Textures");
@@ -578,7 +661,7 @@ std::string LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (isFilterWith(LLInventoryType::IT_SNAPSHOT))
+ if (isFilterObjectTypesWith(LLInventoryType::IT_SNAPSHOT))
{
//filtered_types += " Snapshots,";
filtered_types += LLTrans::getString("Snapshots");
@@ -619,9 +702,9 @@ std::string LLInventoryFilter::getFilterText()
return mFilterText;
}
-void LLInventoryFilter::toLLSD(LLSD& data)
+void LLInventoryFilter::toLLSD(LLSD& data) const
{
- data["filter_types"] = (LLSD::Integer)getFilterTypes();
+ data["filter_types"] = (LLSD::Integer)getFilterObjectTypes();
data["min_date"] = (LLSD::Integer)getMinDate();
data["max_date"] = (LLSD::Integer)getMaxDate();
data["hours_ago"] = (LLSD::Integer)getHoursAgo();
@@ -636,7 +719,7 @@ void LLInventoryFilter::fromLLSD(LLSD& data)
{
if(data.has("filter_types"))
{
- setFilterTypes((U32)data["filter_types"].asInteger());
+ setFilterObjectTypes((U32)data["filter_types"].asInteger());
}
if(data.has("min_date") && data.has("max_date"))
@@ -674,3 +757,71 @@ void LLInventoryFilter::fromLLSD(LLSD& data)
setDateRangeLastLogoff((bool)data["since_logoff"].asBoolean());
}
}
+
+U32 LLInventoryFilter::getFilterObjectTypes() const
+{
+ return mFilterOps.mFilterObjectTypes;
+}
+
+BOOL LLInventoryFilter::hasFilterString() const
+{
+ return mFilterSubString.size() > 0;
+}
+
+PermissionMask LLInventoryFilter::getFilterPermissions() const
+{
+ return mFilterOps.mPermissions;
+}
+
+time_t LLInventoryFilter::getMinDate() const
+{
+ return mFilterOps.mMinDate;
+}
+
+time_t LLInventoryFilter::getMaxDate() const
+{
+ return mFilterOps.mMaxDate;
+}
+U32 LLInventoryFilter::getHoursAgo() const
+{
+ return mFilterOps.mHoursAgo;
+}
+LLInventoryFilter::EFolderShow LLInventoryFilter::getShowFolderState() const
+{
+ return mFilterOps.mShowFolderState;
+}
+U32 LLInventoryFilter::getSortOrder() const
+{
+ return mOrder;
+}
+const std::string& LLInventoryFilter::getName() const
+{
+ return mName;
+}
+
+void LLInventoryFilter::setFilterCount(S32 count)
+{
+ mFilterCount = count;
+}
+S32 LLInventoryFilter::getFilterCount() const
+{
+ return mFilterCount;
+}
+
+void LLInventoryFilter::decrementFilterCount()
+{
+ mFilterCount--;
+}
+
+S32 LLInventoryFilter::getCurrentGeneration() const
+{
+ return mFilterGeneration;
+}
+S32 LLInventoryFilter::getMinRequiredGeneration() const
+{
+ return mMinRequiredGeneration;
+}
+S32 LLInventoryFilter::getMustPassGeneration() const
+{
+ return mMustPassGeneration;
+}
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index b803df110b..d65fb8f27c 100644
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -33,30 +33,38 @@
#ifndef LLINVENTORYFILTER_H
#define LLINVENTORYFILTER_H
-// lots of includes here
#include "llinventorytype.h"
-#include "llpermissionsflags.h" // PermissionsMask
+#include "llpermissionsflags.h"
class LLFolderViewItem;
class LLInventoryFilter
{
public:
- typedef enum e_folder_show
+ enum EFolderShow
{
SHOW_ALL_FOLDERS,
SHOW_NON_EMPTY_FOLDERS,
SHOW_NO_FOLDERS
- } EFolderShow;
+ };
- typedef enum e_filter_behavior
+ enum EFilterBehavior
{
FILTER_NONE, // nothing to do, already filtered
FILTER_RESTART, // restart filtering from scratch
FILTER_LESS_RESTRICTIVE, // existing filtered items will certainly pass this filter
FILTER_MORE_RESTRICTIVE // if you didn't pass the previous filter, you definitely won't pass this one
- } EFilterBehavior;
+ };
+
+ enum EFilterType
+ {
+ FILTERTYPE_NONE = 0,
+ FILTERTYPE_OBJECT = 1, // normal default search-by-object-type
+ FILTERTYPE_CATEGORY = 2, // search by folder type
+ FILTERTYPE_UUID = 4 // find the object with UUID and any links to it
+ };
+ // REFACTOR: Change this to an enum.
static const U32 SO_DATE = 1;
static const U32 SO_FOLDERS_BY_NAME = 2;
static const U32 SO_SYSTEM_FOLDERS_TO_TOP = 4;
@@ -64,89 +72,121 @@ public:
LLInventoryFilter(const std::string& name);
virtual ~LLInventoryFilter();
- void setFilterTypes(U64 types, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type
- U32 getFilterTypes() const { return mFilterOps.mFilterTypes; }
-
- void setFilterSubString(const std::string& string);
- const std::string getFilterSubString(BOOL trim = FALSE);
-
- void setFilterPermissions(PermissionMask perms);
- PermissionMask getFilterPermissions() const { return mFilterOps.mPermissions; }
-
- void setDateRange(time_t min_date, time_t max_date);
- void setDateRangeLastLogoff(BOOL sl);
- time_t getMinDate() const { return mFilterOps.mMinDate; }
- time_t getMaxDate() const { return mFilterOps.mMaxDate; }
-
- void setHoursAgo(U32 hours);
- U32 getHoursAgo() const { return mFilterOps.mHoursAgo; }
-
- void setShowFolderState( EFolderShow state);
- EFolderShow getShowFolderState() { return mFilterOps.mShowFolderState; }
-
- void setSortOrder(U32 order);
- U32 getSortOrder() { return mOrder; }
-
- BOOL check(LLFolderViewItem* item);
+ // +-------------------------------------------------------------------+
+ // + Execution And Results
+ // +-------------------------------------------------------------------+
+ BOOL check(const LLFolderViewItem* item);
+ BOOL checkAgainstFilterType(const LLFolderViewItem* item);
std::string::size_type getStringMatchOffset() const;
- BOOL isActive();
- BOOL isNotDefault();
- BOOL isModified();
- BOOL isModifiedAndClear();
- BOOL isSinceLogoff();
- bool hasFilterString() { return mFilterSubString.size() > 0; }
- void clearModified() { mModified = FALSE; mFilterBehavior = FILTER_NONE; }
- const std::string getName() const { return mName; }
- std::string getFilterText();
- void setFilterCount(S32 count) { mFilterCount = count; }
- S32 getFilterCount() { return mFilterCount; }
- void decrementFilterCount() { mFilterCount--; }
+ // +-------------------------------------------------------------------+
+ // + Parameters
+ // +-------------------------------------------------------------------+
+ void setFilterObjectTypes(U64 types);
+ U32 getFilterObjectTypes() const;
+ BOOL isFilterObjectTypesWith(LLInventoryType::EType t) const;
+ void setFilterCategoryTypes(U64 types);
+ void setFilterUUID(const LLUUID &object_id);
+
+ void setFilterSubString(const std::string& string);
+ const std::string& getFilterSubString(BOOL trim = FALSE) const;
+ BOOL hasFilterString() const;
+
+ void setFilterPermissions(PermissionMask perms);
+ PermissionMask getFilterPermissions() const;
+
+ void setDateRange(time_t min_date, time_t max_date);
+ void setDateRangeLastLogoff(BOOL sl);
+ time_t getMinDate() const;
+ time_t getMaxDate() const;
+
+ void setHoursAgo(U32 hours);
+ U32 getHoursAgo() const;
+
+ void setShowFolderState( EFolderShow state);
+ EFolderShow getShowFolderState() const;
+
+ void setSortOrder(U32 order);
+ U32 getSortOrder() const;
+
+ // +-------------------------------------------------------------------+
+ // + Status
+ // +-------------------------------------------------------------------+
+ BOOL isActive() const;
+ BOOL isModified() const;
+ BOOL isModifiedAndClear();
+ BOOL isSinceLogoff() const;
+ void clearModified();
+ const std::string& getName() const;
+ const std::string& getFilterText();
+ //RN: this is public to allow system to externally force a global refilter
+ void setModified(EFilterBehavior behavior = FILTER_RESTART);
+
+ // +-------------------------------------------------------------------+
+ // + Count
+ // +-------------------------------------------------------------------+
+ void setFilterCount(S32 count);
+ S32 getFilterCount() const;
+ void decrementFilterCount();
+
+ // +-------------------------------------------------------------------+
+ // + Default
+ // +-------------------------------------------------------------------+
+ BOOL isNotDefault() const;
+ void markDefault();
+ void resetDefault();
+
+ // +-------------------------------------------------------------------+
+ // + Generation
+ // +-------------------------------------------------------------------+
+ S32 getCurrentGeneration() const;
+ S32 getMinRequiredGeneration() const;
+ S32 getMustPassGeneration() const;
+
+ // +-------------------------------------------------------------------+
+ // + Conversion
+ // +-------------------------------------------------------------------+
+ void toLLSD(LLSD& data) const;
+ void fromLLSD(LLSD& data);
- void markDefault();
- void resetDefault();
+private:
+ struct FilterOps
+ {
+ FilterOps();
+ U32 mFilterTypes;
- BOOL isFilterWith(LLInventoryType::EType t);
+ U64 mFilterObjectTypes; // For _ITEM
+ U64 mFilterCategoryTypes; // For _ITEM
+ LLUUID mFilterUUID; // for UUID
- S32 getCurrentGeneration() const { return mFilterGeneration; }
- S32 getMinRequiredGeneration() const { return mMinRequiredGeneration; }
- S32 getMustPassGeneration() const { return mMustPassGeneration; }
+ time_t mMinDate;
+ time_t mMaxDate;
+ U32 mHoursAgo;
+ EFolderShow mShowFolderState;
+ PermissionMask mPermissions;
+ };
- //RN: this is public to allow system to externally force a global refilter
- void setModified(EFilterBehavior behavior = FILTER_RESTART);
+ U32 mOrder;
+ U32 mLastLogoff;
- void toLLSD(LLSD& data);
- void fromLLSD(LLSD& data);
+ FilterOps mFilterOps;
+ FilterOps mDefaultFilterOps;
-protected:
- struct filter_ops
- {
- U64 mFilterTypes;
- BOOL mFilterForCategories;
- time_t mMinDate;
- time_t mMaxDate;
- U32 mHoursAgo;
- EFolderShow mShowFolderState;
- PermissionMask mPermissions;
- };
- filter_ops mFilterOps;
- filter_ops mDefaultFilterOps;
std::string::size_type mSubStringMatchOffset;
- std::string mFilterSubString;
- U32 mOrder;
- const std::string mName;
- S32 mFilterGeneration;
- S32 mMustPassGeneration;
- S32 mMinRequiredGeneration;
- S32 mFilterCount;
- S32 mNextFilterGeneration;
- EFilterBehavior mFilterBehavior;
+ std::string mFilterSubString;
+ const std::string mName;
-private:
- U32 mLastLogoff;
- BOOL mModified;
- BOOL mNeedTextRebuild;
- std::string mFilterText;
+ S32 mFilterGeneration;
+ S32 mMustPassGeneration;
+ S32 mMinRequiredGeneration;
+ S32 mNextFilterGeneration;
+
+ S32 mFilterCount;
+ EFilterBehavior mFilterBehavior;
+
+ BOOL mModified;
+ BOOL mNeedTextRebuild;
+ std::string mFilterText;
};
#endif
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 95cc68ddbe..9916a2351c 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -34,32 +34,9 @@
#ifndef LL_LLINVENTORYFUNCTIONS_H
#define LL_LLINVENTORYFUNCTIONS_H
-#include "llassetstorage.h"
-#include "lldarray.h"
-#include "llfloater.h"
-#include "llinventory.h"
-#include "llinventoryfilter.h"
+#include "llinventorytype.h"
#include "llfolderview.h"
-#include "llinventorymodel.h"
-#include "lluictrlfactory.h"
-#include <set>
-
-
-class LLFolderViewItem;
-class LLInventoryFilter;
-class LLInventoryModel;
-class LLInventoryPanel;
-class LLInvFVBridge;
-class LLInventoryFVBridgeBuilder;
-class LLMenuBarGL;
-class LLCheckBoxCtrl;
-class LLSpinCtrl;
-class LLScrollContainer;
-class LLTextBox;
-class LLIconCtrl;
-class LLSaveFolderState;
-class LLFilterEditor;
-class LLTabContainer;
+#include "llfolderviewitem.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 29096ff718..fb9be1e04f 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -211,6 +211,25 @@ BOOL LLInventoryModel::isObjectDescendentOf(const LLUUID& obj_id,
return FALSE;
}
+const LLViewerInventoryCategory *LLInventoryModel::getFirstNondefaultParent(const LLUUID& obj_id) const
+{
+ const LLInventoryObject* obj = getObject(obj_id);
+ const LLUUID& parent_id = obj->getParentUUID();
+ while (!parent_id.isNull())
+ {
+ const LLViewerInventoryCategory *cat = getCategory(parent_id);
+ if (!cat) break;
+ const LLFolderType::EType folder_type = cat->getPreferredType();
+ if (folder_type != LLFolderType::FT_NONE &&
+ folder_type != LLFolderType::FT_ROOT_INVENTORY &&
+ !LLFolderType::lookupIsEnsembleType(folder_type))
+ {
+ return cat;
+ }
+ }
+ return NULL;
+}
+
// Get the object by id. Returns NULL if not found.
LLInventoryObject* LLInventoryModel::getObject(const LLUUID& id) const
{
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index c3e04ab93c..b744d821c7 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -108,10 +108,12 @@ public:
// Accessors
//
- // This is a convenience function to check if one object has a
- // parent chain up to the category specified by UUID.
+ // Check if one object has a parent chain up to the category specified by UUID.
BOOL isObjectDescendentOf(const LLUUID& obj_id, const LLUUID& cat_id) const;
+ // Get whatever special folder this object is a child of, if any.
+ const LLViewerInventoryCategory *getFirstNondefaultParent(const LLUUID& obj_id) const;
+
// Get the object by id. Returns NULL if not found.
// * WARNING: use the pointer returned for read operations - do
// not modify the object values in place or you will break stuff.
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index baa659df7c..54f528de8d 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -169,7 +169,7 @@ BOOL LLInventoryPanel::postBuild()
{
setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
}
- mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
+ mFolders->setSortOrder(getFilter()->getSortOrder());
return TRUE;
}
@@ -207,25 +207,28 @@ LLInventoryFilter* LLInventoryPanel::getFilter()
return NULL;
}
-void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
+void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType filter_type)
{
- mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
-}
+ if (filter_type == LLInventoryFilter::FILTERTYPE_OBJECT)
+ getFilter()->setFilterObjectTypes(types);
+ if (filter_type == LLInventoryFilter::FILTERTYPE_CATEGORY)
+ getFilter()->setFilterCategoryTypes(types);
+}
void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
{
- mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
+ getFilter()->setFilterPermissions(filter_perm_mask);
}
void LLInventoryPanel::setFilterSubString(const std::string& string)
{
- mFolders->getFilter()->setFilterSubString(string);
+ getFilter()->setFilterSubString(string);
}
void LLInventoryPanel::setSortOrder(U32 order)
{
- mFolders->getFilter()->setSortOrder(order);
- if (mFolders->getFilter()->isModified())
+ getFilter()->setSortOrder(order);
+ if (getFilter()->isModified())
{
mFolders->setSortOrder(order);
// try to keep selection onscreen, even if it wasn't to start with
@@ -235,22 +238,22 @@ void LLInventoryPanel::setSortOrder(U32 order)
void LLInventoryPanel::setSinceLogoff(BOOL sl)
{
- mFolders->getFilter()->setDateRangeLastLogoff(sl);
+ getFilter()->setDateRangeLastLogoff(sl);
}
void LLInventoryPanel::setHoursAgo(U32 hours)
{
- mFolders->getFilter()->setHoursAgo(hours);
+ getFilter()->setHoursAgo(hours);
}
void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
{
- mFolders->getFilter()->setShowFolderState(show);
+ getFilter()->setShowFolderState(show);
}
LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
{
- return mFolders->getFilter()->getShowFolderState();
+ return getFilter()->getShowFolderState();
}
void LLInventoryPanel::modelChanged(U32 mask)
@@ -845,7 +848,7 @@ bool LLInventoryPanel::attachObject(const LLSD& userdata)
BOOL LLInventoryPanel::getSinceLogoff()
{
- return mFolders->getFilter()->isSinceLogoff();
+ return getFilter()->isSinceLogoff();
}
// DEBUG ONLY
@@ -856,14 +859,31 @@ void LLInventoryPanel::dumpSelectionInformation(void* user_data)
iv->mFolders->dumpSelectionInformation();
}
-// static
-LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel()
+BOOL is_inventorysp_active()
{
- LLInventoryPanel* res = NULL;
+ if (!LLSideTray::getInstance()->isPanelActive("sidepanel_inventory")) return FALSE;
+ LLSidepanelInventory *inventorySP = dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+ if (!inventorySP) return FALSE;
+ return inventorySP->isMainInventoryPanelActive();
+}
- // Iterate through the inventory floaters and return whichever is on top.
+// static
+LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)
+{
+ // A. If the inventory side panel is open, use that preferably.
+ if (is_inventorysp_active())
+ {
+ LLSidepanelInventory *inventorySP = dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+ if (inventorySP)
+ {
+ return inventorySP->getActivePanel();
+ }
+ }
+
+ // B. Iterate through the inventory floaters and return whichever is on top.
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
S32 z_min = S32_MAX;
+ LLInventoryPanel* res = NULL;
for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
{
LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter);
@@ -877,22 +897,19 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel()
}
}
}
-
- // Otherwise, open the inventorySP and use that.
- if (!res)
+ if (res) return res;
+
+ // C. If no panels are open and we don't want to force open a panel, then just abort out.
+ if (!auto_open) return NULL;
+
+ // D. Open the inventory side panel and use that.
+ LLSD key;
+ LLSidepanelInventory *sidepanel_inventory =
+ dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->showPanel("sidepanel_inventory", key));
+ if (sidepanel_inventory)
{
- LLSD key;
- LLSidepanelInventory *sidepanel_inventory =
- dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->showPanel("sidepanel_inventory", key));
- if (sidepanel_inventory)
- {
- res = sidepanel_inventory->getActivePanel();
- if (res)
- {
- return res;
- }
- }
+ return sidepanel_inventory->getActivePanel();
}
- return res;
+ return NULL;
}
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index d65fe53812..cbbd433c1d 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -126,8 +126,8 @@ public:
void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); }
void clearSelection();
LLInventoryFilter* getFilter();
- void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type
- U32 getFilterTypes() const { return mFolders->getFilterTypes(); }
+ void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
+ U32 getFilterObjectTypes() const { return mFolders->getFilterObjectTypes(); }
void setFilterPermMask(PermissionMask filter_perm_mask);
U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
void setFilterSubString(const std::string& string);
@@ -163,7 +163,8 @@ public:
static void onIdle(void* user_data);
// Find whichever inventory panel is active / on top.
- static LLInventoryPanel *getActiveInventoryPanel();
+ // "Auto_open" determines if we open an inventory panel if none are open.
+ static LLInventoryPanel *getActiveInventoryPanel(BOOL auto_open = TRUE);
protected:
void defaultOpenInventory(); // open the first level of inventory
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index d97f1d4d18..758d8ff903 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -243,38 +243,54 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
addChild(mAddLandmarkBtn);
LLButton::Params for_sale_button = p.for_sale_button;
+ for_sale_button.tool_tip = LLTrans::getString("LocationCtrlForSaleTooltip");
for_sale_button.click_callback.function(
boost::bind(&LLLocationInputCtrl::onForSaleButtonClicked, this));
mForSaleBtn = LLUICtrlFactory::create<LLButton>( for_sale_button );
- // *TODO: Make clickable?
addChild(mForSaleBtn);
// Parcel property icons
+ // Must be mouse-opaque so cursor stays as an arrow when hovering to
+ // see tooltip.
LLIconCtrl::Params voice_icon = p.voice_icon;
+ voice_icon.tool_tip = LLTrans::getString("LocationCtrlVoiceTooltip");
+ voice_icon.mouse_opaque = true;
mParcelIcon[VOICE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(voice_icon);
addChild(mParcelIcon[VOICE_ICON]);
LLIconCtrl::Params fly_icon = p.fly_icon;
+ fly_icon.tool_tip = LLTrans::getString("LocationCtrlFlyTooltip");
+ fly_icon.mouse_opaque = true;
mParcelIcon[FLY_ICON] = LLUICtrlFactory::create<LLIconCtrl>(fly_icon);
addChild(mParcelIcon[FLY_ICON]);
LLIconCtrl::Params push_icon = p.push_icon;
+ push_icon.tool_tip = LLTrans::getString("LocationCtrlPushTooltip");
+ push_icon.mouse_opaque = true;
mParcelIcon[PUSH_ICON] = LLUICtrlFactory::create<LLIconCtrl>(push_icon);
addChild(mParcelIcon[PUSH_ICON]);
LLIconCtrl::Params build_icon = p.build_icon;
+ build_icon.tool_tip = LLTrans::getString("LocationCtrlBuildTooltip");
+ build_icon.mouse_opaque = true;
mParcelIcon[BUILD_ICON] = LLUICtrlFactory::create<LLIconCtrl>(build_icon);
addChild(mParcelIcon[BUILD_ICON]);
LLIconCtrl::Params scripts_icon = p.scripts_icon;
+ scripts_icon.tool_tip = LLTrans::getString("LocationCtrlScriptsTooltip");
+ scripts_icon.mouse_opaque = true;
mParcelIcon[SCRIPTS_ICON] = LLUICtrlFactory::create<LLIconCtrl>(scripts_icon);
addChild(mParcelIcon[SCRIPTS_ICON]);
LLIconCtrl::Params damage_icon = p.damage_icon;
+ damage_icon.tool_tip = LLTrans::getString("LocationCtrlDamageTooltip");
+ damage_icon.mouse_opaque = true;
mParcelIcon[DAMAGE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(damage_icon);
addChild(mParcelIcon[DAMAGE_ICON]);
LLTextBox::Params damage_text = p.damage_text;
+ damage_text.tool_tip = LLTrans::getString("LocationCtrlDamageTooltip");
+ damage_text.mouse_opaque = true;
mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
addChild(mDamageText);
@@ -896,7 +912,7 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)
}
else if (item == "can_select_all")
{
- return mTextEntry->canSelectAll();
+ return mTextEntry->canSelectAll() && (mTextEntry->getLength() > 0);
}
else if(item == "show_coordinates")
{
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index ee3be0a5e3..3a1ae5bf46 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -54,10 +54,11 @@
#include "llstylemap.h"
#include "lldraghandle.h"
-#include "lltrans.h"
+
#include "llbottomtray.h"
#include "llnearbychatbar.h"
#include "llfloaterreg.h"
+#include "lltrans.h"
static const S32 RESIZE_BAR_THICKNESS = 3;
@@ -146,6 +147,7 @@ std::string appendTime()
return timeStr;
}
+
void LLNearbyChat::addMessage(const LLChat& chat,bool archive)
{
if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
@@ -167,18 +169,15 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive)
}
}
+ LLChat& tmp_chat = const_cast<LLChat&>(chat);
+
+ if(tmp_chat.mTimeStr.empty())
+ tmp_chat.mTimeStr = appendTime();
+
bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory");
if (!chat.mMuted)
{
- std::string message = chat.mText;
-
-
- LLChat& tmp_chat = const_cast<LLChat&>(chat);
-
- if(tmp_chat.mTimeStr.empty())
- tmp_chat.mTimeStr = appendTime();
-
if (chat.mChatStyle == CHAT_STYLE_IRC)
{
LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
@@ -191,17 +190,9 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive)
append_style_params.readonly_color(txt_color);
append_style_params.font.name(font_name);
append_style_params.font.size(font_size);
- if (chat.mFromName.size() > 0)
- {
- append_style_params.font.style = "ITALIC";
- LLChat add_chat=chat;
- add_chat.mText = chat.mFromName + " ";
- mChatHistory->appendMessage(add_chat, use_plain_text_chat_history, append_style_params);
- }
-
- message = message.substr(3);
append_style_params.font.style = "ITALIC";
- mChatHistory->appendText(message, FALSE, append_style_params);
+
+ mChatHistory->appendMessage(chat, use_plain_text_chat_history, append_style_params);
}
else
{
@@ -273,6 +264,7 @@ void LLNearbyChat::updateChatHistoryStyle()
addMessage(*it,false);
}
}
+
//static
void LLNearbyChat::processChatHistoryStyleUpdate(const LLSD& newvalue)
{
@@ -280,3 +272,20 @@ void LLNearbyChat::processChatHistoryStyleUpdate(const LLSD& newvalue)
if(nearby_chat)
nearby_chat->updateChatHistoryStyle();
}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLNearbyChat::onFocusReceived()
+{
+ setBackgroundOpaque(true);
+ LLPanel::onFocusReceived();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLNearbyChat::onFocusLost()
+{
+ setBackgroundOpaque(false);
+ LLPanel::onFocusLost();
+}
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 1cbc2a3478..938b77df7a 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -51,6 +51,10 @@ public:
void onNearbyChatContextMenuItemClicked(const LLSD& userdata);
bool onNearbyChatCheckContextMenuItem(const LLSD& userdata);
+ // focus overrides
+ /*virtual*/ void onFocusLost();
+ /*virtual*/ void onFocusReceived();
+
/*virtual*/ void onOpen (const LLSD& key);
/*virtual*/ void setVisible(BOOL visible);
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index b0b6db682c..169560f688 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -318,6 +318,8 @@ void LLNearbyChatHandler::initChannel()
mChannel->init(channel_right_bound - channel_width, channel_right_bound);
}
+
+
void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
{
if(chat_msg.mMuted == TRUE)
@@ -327,6 +329,22 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
if(chat_msg.mText.empty())
return;//don't process empty messages
+
+ LLChat& tmp_chat = const_cast<LLChat&>(chat_msg);
+
+ if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
+ {
+ if(!tmp_chat.mFromName.empty())
+ tmp_chat.mText = tmp_chat.mFromName + " " + tmp_chat.mText.substr(3);
+ else
+ tmp_chat.mText = tmp_chat.mText.substr(3);
+ }
+
+ {
+ //sometimes its usefull to have no name at all...
+ //if(tmp_chat.mFromName.empty() && tmp_chat.mFromID!= LLUUID::null)
+ // tmp_chat.mFromName = tmp_chat.mFromID.asString();
+ }
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
nearby_chat->addMessage(chat_msg);
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 5834c50fbb..6210973dae 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -304,6 +304,9 @@ BOOL LLPanelGroupNotices::postBuild()
void LLPanelGroupNotices::activate()
{
+ if(mNoticesList)
+ mNoticesList->deleteAllItems();
+
BOOL can_send = gAgent.hasPowerInGroup(mGroupID,GP_NOTICES_SEND);
BOOL can_receive = gAgent.hasPowerInGroup(mGroupID,GP_NOTICES_RECEIVE);
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 405c95fc22..8c19865550 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -71,6 +71,11 @@ void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::E
childSetVisible("call_btn", ! is_call_started);
}
+LLPanelChatControlPanel::~LLPanelChatControlPanel()
+{
+ mVoiceChannelStateChangeConnection.disconnect();
+}
+
BOOL LLPanelChatControlPanel::postBuild()
{
childSetAction("call_btn", boost::bind(&LLPanelChatControlPanel::onCallButtonClicked, this));
@@ -113,7 +118,9 @@ void LLPanelChatControlPanel::setSessionId(const LLUUID& session_id)
mSessionId = session_id;
LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionId);
if(voice_channel)
- voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
+ {
+ mVoiceChannelStateChangeConnection = voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
+ }
}
LLPanelIMControlPanel::LLPanelIMControlPanel()
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index a590232a0b..871779b273 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -47,7 +47,7 @@ public:
LLPanelChatControlPanel() :
mSessionId(LLUUID()),
mInitialized(false) {};
- ~LLPanelChatControlPanel() {};
+ ~LLPanelChatControlPanel();
virtual BOOL postBuild();
virtual void draw();
@@ -64,6 +64,9 @@ public:
private:
LLUUID mSessionId;
bool mInitialized;
+
+ // connection to voice channel state change signal
+ boost::signals2::connection mVoiceChannelStateChangeConnection;
};
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 4ce6d14faa..d731da0ec7 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -122,8 +122,7 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)
for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
{
LLAccordionCtrlTab* tab = *iter;
- if (tab && !tab->getVisible())
- tab->setVisible(TRUE);
+ tab->setVisible(TRUE);
// expand accordion to see matched items in each one. See EXT-2014.
tab->changeOpenClose(false);
@@ -132,7 +131,9 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)
if (NULL == inventory_list) continue;
if (inventory_list->getFilter())
+ {
filter_list(inventory_list, string);
+ }
}
if (sFilterSubString != string)
@@ -333,8 +334,12 @@ void LLLandmarksPanel::initLandmarksInventoryPanel()
initLandmarksPanel(mLandmarksInventoryPanel);
+ // Check if mLandmarksInventoryPanel is properly initialized and has a Filter created.
+ // In case of a dummy widget getFilter() will return NULL.
if (mLandmarksInventoryPanel->getFilter())
+ {
mLandmarksInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+ }
// subscribe to have auto-rename functionality while creating New Folder
mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2));
@@ -362,6 +367,8 @@ void LLLandmarksPanel::initLibraryInventoryPanel()
void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_list)
{
+ // In case of a dummy widget further we have no Folder View widget and no Filter,
+ // so further initialization leads to crash.
if (!inventory_list->getFilter())
return;
@@ -388,8 +395,6 @@ void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_lis
void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list)
{
LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);
- if (!accordion_tab)
- return;
mAccordionTabs.push_back(accordion_tab);
accordion_tab->setDropDownStateChangedCallback(
@@ -744,8 +749,8 @@ void LLLandmarksPanel::updateFilteredAccordions()
for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
{
accordion_tab = *iter;
- if (accordion_tab && !accordion_tab->getVisible())
- accordion_tab->setVisible(TRUE);
+
+ accordion_tab->setVisible(TRUE);
inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
if (NULL == inventory_list) continue;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index d2a17dbd97..4bae6af12e 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -191,7 +191,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
gViewerWindow->getRootView()->addChildInBack(this);
// Logo
- mLogoImage = LLUI::getUIImage("startup_logo.j2c");
+ mLogoImage = LLUI::getUIImage("startup_logo");
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_login.xml");
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 74c1420cf3..2a56a6011e 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -653,7 +653,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
return;
// Get data needed for filter display
- U32 filter_types = mFilter->getFilterTypes();
+ U32 filter_types = mFilter->getFilterObjectTypes();
std::string filter_string = mFilter->getFilterSubString();
LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
U32 hours = mFilter->getHoursAgo();
@@ -966,6 +966,22 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
preview_texture->openToSave();
}
}
+ if (command_name == "find_links")
+ {
+ LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+ if (!current_item)
+ {
+ return;
+ }
+ const LLUUID& item_id = current_item->getListener()->getUUID();
+ const std::string &item_name = current_item->getListener()->getName();
+ LLInventoryFilter *filter = mActivePanel->getFilter();
+ filter->setFilterSubString(item_name);
+ mFilterEditor->setText(item_name);
+ mFilterEditor->setFocus(TRUE);
+ filter->setFilterUUID(item_id);
+ filter->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ }
}
BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
@@ -1001,6 +1017,18 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
}
return FALSE;
}
+ if (command_name == "find_links")
+ {
+ LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+ if (!current_item) return FALSE;
+ const LLUUID& item_id = current_item->getListener()->getUUID();
+ LLInventoryObject *obj = gInventory.getObject(item_id);
+ if (obj && !obj->getIsLinkType() && LLAssetType::lookupCanLink(obj->getType()))
+ {
+ return TRUE;
+ }
+ return FALSE;
+ }
return TRUE;
}
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 342d2bc739..4f8aff6f78 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -50,6 +50,7 @@
#include "llfloaterbuycurrency.h"
#include "llfloaterreg.h"
#include "llinventorybridge.h"
+#include "llinventoryfilter.h"
#include "llinventoryfunctions.h"
#include "llpreviewanim.h"
#include "llpreviewgesture.h"
@@ -1696,6 +1697,7 @@ void LLPanelObjectInventory::updateInventory()
mFolders->requestArrange();
mInventoryNeedsUpdate = FALSE;
+ LLEditMenuHandler::gEditMenuHandler = mFolders;
}
// *FIX: This is currently a very expensive operation, because we have
@@ -1940,3 +1942,22 @@ void LLPanelObjectInventory::idle(void* user_data)
self->updateInventory();
}
}
+
+void LLPanelObjectInventory::onFocusLost()
+{
+ // inventory no longer handles cut/copy/paste/delete
+ if (LLEditMenuHandler::gEditMenuHandler == mFolders)
+ {
+ LLEditMenuHandler::gEditMenuHandler = NULL;
+ }
+
+ LLPanel::onFocusLost();
+}
+
+void LLPanelObjectInventory::onFocusReceived()
+{
+ // inventory now handles cut/copy/paste/delete
+ LLEditMenuHandler::gEditMenuHandler = mFolders;
+
+ LLPanel::onFocusReceived();
+}
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
index 6722bb212e..bc339ece35 100644
--- a/indra/newview/llpanelobjectinventory.h
+++ b/indra/newview/llpanelobjectinventory.h
@@ -74,6 +74,9 @@ public:
virtual void deleteAllChildren();
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
+ /*virtual*/ void onFocusLost();
+ /*virtual*/ void onFocusReceived();
+
static void idle(void* user_data);
protected:
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 951e74abf9..6aba8c0ebb 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -353,7 +353,7 @@ void LLPanelOutfitsInventory::initAccordionPanels()
mAccordionPanels.resize(2);
LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_accordionpanel");
- myoutfits_panel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, TRUE);
+ myoutfits_panel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, LLInventoryFilter::FILTERTYPE_CATEGORY);
myoutfits_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
mAccordionPanels[0] = myoutfits_panel;
mActivePanel = myoutfits_panel;
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index 7dea5eaf67..57f3d86d53 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -97,7 +97,7 @@ LLContextMenu* NearbyMenu::createMenu()
registrar.add("Avatar.Profile", boost::bind(&LLAvatarActions::showProfile, id));
registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, id));
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startIM, id));
- registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startIM, id)); // *TODO: unimplemented
+ registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startCall, id));
registrar.add("Avatar.OfferTeleport", boost::bind(&NearbyMenu::offerTeleport, this));
registrar.add("Avatar.ShowOnMap", boost::bind(&LLAvatarActions::startIM, id)); // *TODO: unimplemented
registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::startIM, id)); // *TODO: unimplemented
@@ -117,7 +117,7 @@ LLContextMenu* NearbyMenu::createMenu()
// registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, mUUIDs)); // *TODO: unimplemented
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startConference, mUUIDs));
- // registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startConference, mUUIDs)); // *TODO: unimplemented
+ registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startAdhocCall, mUUIDs));
// registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::startIM, mUUIDs)); // *TODO: unimplemented
// registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, mUUIDs)); // *TODO: unimplemented
enable_registrar.add("Avatar.EnableItem", boost::bind(&NearbyMenu::enableContextMenuItem, this, _2));
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index cd4bcb6c0a..f7f3c5830d 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -261,6 +261,10 @@ void LLPanelPlaces::onOpen(const LLSD& key)
}
mLandmarkInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+
+ // Disable Save button because there is no item to save yet.
+ // The button will be enabled in onLandmarkLoaded callback.
+ mSaveBtn->setEnabled(FALSE);
}
else if (mPlaceInfoType == LANDMARK_INFO_TYPE)
{
@@ -380,11 +384,16 @@ void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark)
landmark->getRegionID(region_id);
landmark->getGlobalPos(mPosGlobal);
mLandmarkInfo->displayParcelInfo(region_id, mPosGlobal);
+
+ mSaveBtn->setEnabled(TRUE);
}
void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_filter)
{
- if (force_filter || LLPanelPlacesTab::sFilterSubString != search_string)
+ if (!mActivePanel)
+ return;
+
+ if (force_filter || mActivePanel->getFilterSubString() != search_string)
{
std::string string = search_string;
@@ -392,8 +401,7 @@ void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_fi
LLStringUtil::toUpper(string);
LLStringUtil::trimHead(string);
- if (mActivePanel)
- mActivePanel->onSearchEdit(string);
+ mActivePanel->onSearchEdit(string);
}
}
@@ -403,7 +411,7 @@ void LLPanelPlaces::onTabSelected()
if (!mActivePanel)
return;
- onFilterEdit(LLPanelPlacesTab::sFilterSubString, true);
+ onFilterEdit(mActivePanel->getFilterSubString(), true);
mActivePanel->updateVerbs();
}
@@ -814,7 +822,7 @@ void LLPanelPlaces::changedInventory(U32 mask)
// Filter applied to show all items.
if (mActivePanel)
- mActivePanel->onSearchEdit(LLPanelPlacesTab::sFilterSubString);
+ mActivePanel->onSearchEdit(mActivePanel->getFilterSubString());
// we don't need to monitor inventory changes anymore,
// so remove the observer
diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h
index b4d839452e..ce77a42259 100644
--- a/indra/newview/llpanelplacestab.h
+++ b/indra/newview/llpanelplacestab.h
@@ -56,13 +56,15 @@ public:
const LLUUID& snapshot_id,
bool teleport);
-public:
- // Search string for filtering landmarks and teleport history locations
- static std::string sFilterSubString;
+ const std::string& getFilterSubString() { return sFilterSubString; }
+ void setFilterSubString(const std::string& string) { sFilterSubString = string; }
protected:
LLButton* mTeleportBtn;
LLButton* mShowOnMapBtn;
+
+ // Search string for filtering landmarks and teleport history locations
+ static std::string sFilterSubString;
};
#endif //LL_LLPANELPLACESTAB_H
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index e86123d565..aa2b7d4554 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -54,6 +54,7 @@
#include "llpanelprimmediacontrols.h"
#include "llpluginclassmedia.h"
#include "llprogressbar.h"
+#include "llsliderctrl.h"
#include "llstring.h"
#include "llviewercontrol.h"
#include "llviewerparcelmgr.h"
@@ -63,6 +64,8 @@
#include "llweb.h"
#include "llwindow.h"
+#include "llfloatertools.h" // to enable hide if build tools are up
+
glh::matrix4f glh_get_current_modelview();
glh::matrix4f glh_get_current_projection();
@@ -88,7 +91,8 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
mTargetImplID(LLUUID::null),
mTargetObjectNormal(LLVector3::zero),
mZoomObjectID(LLUUID::null),
- mZoomObjectFace(0)
+ mZoomObjectFace(0),
+ mVolumeSliderVisible(false)
{
mCommitCallbackRegistrar.add("MediaCtrl.Close", boost::bind(&LLPanelPrimMediaControls::onClickClose, this));
mCommitCallbackRegistrar.add("MediaCtrl.Back", boost::bind(&LLPanelPrimMediaControls::onClickBack, this));
@@ -105,7 +109,9 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
mCommitCallbackRegistrar.add("MediaCtrl.JumpProgress", boost::bind(&LLPanelPrimMediaControls::onCommitSlider, this));
mCommitCallbackRegistrar.add("MediaCtrl.CommitVolumeUp", boost::bind(&LLPanelPrimMediaControls::onCommitVolumeUp, this));
mCommitCallbackRegistrar.add("MediaCtrl.CommitVolumeDown", boost::bind(&LLPanelPrimMediaControls::onCommitVolumeDown, this));
+ mCommitCallbackRegistrar.add("MediaCtrl.Volume", boost::bind(&LLPanelPrimMediaControls::onCommitVolumeSlider, this));
mCommitCallbackRegistrar.add("MediaCtrl.ToggleMute", boost::bind(&LLPanelPrimMediaControls::onToggleMute, this));
+ mCommitCallbackRegistrar.add("MediaCtrl.ShowVolumeSlider", boost::bind(&LLPanelPrimMediaControls::showVolumeSlider, this));
mCommitCallbackRegistrar.add("MediaCtrl.SkipBack", boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this));
mCommitCallbackRegistrar.add("MediaCtrl.SkipForward", boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this));
@@ -147,12 +153,14 @@ BOOL LLPanelPrimMediaControls::postBuild()
mVolumeBtn = getChild<LLButton>("media_volume_button");
mVolumeUpCtrl = getChild<LLUICtrl>("volume_up");
mVolumeDownCtrl = getChild<LLUICtrl>("volume_down");
+ mVolumeSliderCtrl = getChild<LLSliderCtrl>("volume_slider");
mWhitelistIcon = getChild<LLIconCtrl>("media_whitelist_flag");
mSecureLockIcon = getChild<LLIconCtrl>("media_secure_lock_flag");
mMediaControlsStack = getChild<LLLayoutStack>("media_controls");
mLeftBookend = getChild<LLUICtrl>("left_bookend");
mRightBookend = getChild<LLUICtrl>("right_bookend");
mBackgroundImage = LLUI::getUIImage(getString("control_background_image_name"));
+ mVolumeSliderBackgroundImage = LLUI::getUIImage(getString("control_background_image_name"));
LLStringUtil::convertToF32(getString("skip_step"), mSkipStep);
LLStringUtil::convertToS32(getString("min_width"), mMinWidth);
LLStringUtil::convertToS32(getString("min_height"), mMinHeight);
@@ -267,7 +275,7 @@ void LLPanelPrimMediaControls::updateShape()
LLViewerMediaImpl* media_impl = getTargetMediaImpl();
LLViewerObject* objectp = getTargetObject();
- if(!media_impl)
+ if(!media_impl || gFloaterTools->getVisible())
{
setVisible(FALSE);
return;
@@ -296,11 +304,13 @@ void LLPanelPrimMediaControls::updateShape()
LLMediaEntry *media_data = objectp->getTE(mTargetObjectFace)->getMediaData();
if (media_data && NULL != dynamic_cast<LLVOVolume*>(objectp))
{
- // Don't show the media HUD if we do not have permissions
+ // Don't show the media controls if we do not have permissions
enabled = dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL);
mini_controls = (LLMediaEntry::MINI == media_data->getControls());
}
+ const bool is_hud = objectp->isHUDAttachment();
+
//
// Set the state of the buttons
//
@@ -323,8 +333,8 @@ void LLPanelPrimMediaControls::updateShape()
mWhitelistIcon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false);
// Disable zoom if HUD
- mZoomCtrl->setEnabled(!objectp->isHUDAttachment());
- mUnzoomCtrl->setEnabled(!objectp->isHUDAttachment());
+ mZoomCtrl->setEnabled(!is_hud);
+ mUnzoomCtrl->setEnabled(!is_hud);
mSecureLockIcon->setVisible(false);
mCurrentURL = media_impl->getCurrentMediaURL();
@@ -355,6 +365,8 @@ void LLPanelPrimMediaControls::updateShape()
mVolumeUpCtrl->setVisible(has_focus);
mVolumeDownCtrl->setVisible(has_focus);
mVolumeCtrl->setEnabled(has_focus);
+ mVolumeSliderCtrl->setEnabled(has_focus && mVolumeSliderVisible);
+ mVolumeSliderCtrl->setVisible(has_focus && mVolumeSliderVisible);
mWhitelistIcon->setVisible(false);
mSecureLockIcon->setVisible(false);
@@ -411,6 +423,7 @@ void LLPanelPrimMediaControls::updateShape()
mVolumeUpCtrl->setEnabled(TRUE);
mVolumeDownCtrl->setEnabled(TRUE);
}
+ mVolumeSliderCtrl->setValue(volume);
switch(result)
{
@@ -456,9 +469,11 @@ void LLPanelPrimMediaControls::updateShape()
mVolumeCtrl->setVisible(FALSE);
mVolumeUpCtrl->setVisible(FALSE);
mVolumeDownCtrl->setVisible(FALSE);
+ mVolumeSliderCtrl->setVisible(FALSE);
mVolumeCtrl->setEnabled(FALSE);
mVolumeUpCtrl->setEnabled(FALSE);
mVolumeDownCtrl->setEnabled(FALSE);
+ mVolumeSliderCtrl->setEnabled(FALSE);
if (mMediaPanelScroll)
{
@@ -548,56 +563,58 @@ void LLPanelPrimMediaControls::updateShape()
//
// Calculate position and shape of the controls
//
+ LLVector3 min, max;
+
glh::matrix4f mat = glh_get_current_projection()*glh_get_current_modelview();
std::vector<LLVector3>::iterator vert_it;
std::vector<LLVector3>::iterator vert_end;
std::vector<LLVector3> vect_face;
-
+
LLVolume* volume = objectp->getVolume();
-
+
if (volume)
{
const LLVolumeFace& vf = volume->getVolumeFace(mTargetObjectFace);
-
+
const LLVector3* ext = vf.mExtents;
-
+
LLVector3 center = (ext[0]+ext[1])*0.5f;
LLVector3 size = (ext[1]-ext[0])*0.5f;
LLVector3 vert[] =
- {
- center + size.scaledVec(LLVector3(1,1,1)),
- center + size.scaledVec(LLVector3(-1,1,1)),
- center + size.scaledVec(LLVector3(1,-1,1)),
- center + size.scaledVec(LLVector3(-1,-1,1)),
- center + size.scaledVec(LLVector3(1,1,-1)),
- center + size.scaledVec(LLVector3(-1,1,-1)),
- center + size.scaledVec(LLVector3(1,-1,-1)),
- center + size.scaledVec(LLVector3(-1,-1,-1)),
- };
-
+ {
+ center + size.scaledVec(LLVector3(1,1,1)),
+ center + size.scaledVec(LLVector3(-1,1,1)),
+ center + size.scaledVec(LLVector3(1,-1,1)),
+ center + size.scaledVec(LLVector3(-1,-1,1)),
+ center + size.scaledVec(LLVector3(1,1,-1)),
+ center + size.scaledVec(LLVector3(-1,1,-1)),
+ center + size.scaledVec(LLVector3(1,-1,-1)),
+ center + size.scaledVec(LLVector3(-1,-1,-1)),
+ };
+
LLVOVolume* vo = (LLVOVolume*) objectp;
-
+
for (U32 i = 0; i < 8; i++)
{
- vect_face.push_back(vo->volumePositionToAgent(vert[i]));
+ vect_face.push_back(vo->volumePositionToAgent(vert[i]));
}
}
vert_it = vect_face.begin();
vert_end = vect_face.end();
-
- LLVector3 min = LLVector3(1,1,1);
- LLVector3 max = LLVector3(-1,-1,-1);
+
+ min = LLVector3(1,1,1);
+ max = LLVector3(-1,-1,-1);
for(; vert_it != vert_end; ++vert_it)
{
// project silhouette vertices into screen space
glh::vec3f screen_vert = glh::vec3f(vert_it->mV);
mat.mult_matrix_vec(screen_vert);
-
+
// add to screenspace bounding box
update_min_max(min, max, LLVector3(screen_vert.v));
}
-
- LLCoordGL screen_min;
+
+ LLCoordGL screen_min;
screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (min.mV[VX] + 1.f) * 0.5f);
screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (min.mV[VY] + 1.f) * 0.5f);
@@ -607,17 +624,16 @@ void LLPanelPrimMediaControls::updateShape()
// grow panel so that screenspace bounding box fits inside "media_region" element of HUD
LLRect media_controls_rect;
+ S32 volume_slider_height = mVolumeSliderCtrl->getRect().getHeight() - /*fudge*/ 2;
getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_controls_rect);
media_controls_rect.mLeft -= mMediaRegion->getRect().mLeft;
- media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom;
+ media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom - volume_slider_height;
media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop;
media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight;
// keep all parts of HUD on-screen
media_controls_rect.intersectWith(getParent()->getLocalRect());
- if (mCurrentZoom != ZOOM_NONE)
- media_controls_rect.mBottom -= mMediaControlsStack->getRect().getHeight() + mMediaProgressPanel->getRect().getHeight();
-
+
// clamp to minimum size, keeping centered
media_controls_rect.setCenterAndSize(media_controls_rect.getCenterX(), media_controls_rect.getCenterY(),
llmax(mMinWidth, media_controls_rect.getWidth()), llmax(mMinHeight, media_controls_rect.getHeight()));
@@ -681,6 +697,7 @@ void LLPanelPrimMediaControls::draw()
setVisible(FALSE);
mClearFaceOnFade = false;
+ mVolumeSliderVisible = false;
mTargetImplID = LLUUID::null;
mTargetObjectID = LLUUID::null;
mTargetObjectFace = 0;
@@ -692,16 +709,29 @@ void LLPanelPrimMediaControls::draw()
// Assumes layout_stack is a direct child of this panel
mMediaControlsStack->updateLayout();
LLRect icon_area = mMediaControlsStack->getRect();
+
+ // adjust to ignore space from volume slider
+ icon_area.mTop -= mVolumeSliderCtrl->getRect().getHeight();
// adjust to ignore space from left bookend padding
icon_area.mLeft += mLeftBookend->getRect().getWidth();
// ignore space from right bookend padding
icon_area.mRight -= mRightBookend->getRect().getWidth();
-
- // get UI image
+
+ // draw control background UI image
mBackgroundImage->draw( icon_area, UI_VERTEX_COLOR % alpha);
+ // draw volume slider background UI image
+ if (mVolumeSliderCtrl->getVisible())
+ {
+ LLRect volume_slider_rect = mVolumeSliderCtrl->getRect();
+ // For some reason the rect is not in the right place (??)
+ // This translates the bg to under the slider
+ volume_slider_rect.translate(mVolumeSliderCtrl->getParent()->getRect().mLeft, icon_area.getHeight());
+ mVolumeSliderBackgroundImage->draw(volume_slider_rect, UI_VERTEX_COLOR % alpha);
+ }
+
{
LLViewDrawContext context(alpha);
LLPanel::draw();
@@ -1187,6 +1217,16 @@ void LLPanelPrimMediaControls::onCommitVolumeDown()
}
}
+void LLPanelPrimMediaControls::onCommitVolumeSlider()
+{
+ focusOnTarget();
+
+ LLViewerMediaImpl* media_impl = getTargetMediaImpl();
+ if (media_impl)
+ {
+ media_impl->setVolume(mVolumeSliderCtrl->getValueF32());
+ }
+}
void LLPanelPrimMediaControls::onToggleMute()
{
@@ -1208,3 +1248,7 @@ void LLPanelPrimMediaControls::onToggleMute()
}
}
+void LLPanelPrimMediaControls::showVolumeSlider()
+{
+ mVolumeSliderVisible = true;
+}
diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h
index fe8f100abe..06163051a5 100644
--- a/indra/newview/llpanelprimmediacontrols.h
+++ b/indra/newview/llpanelprimmediacontrols.h
@@ -40,6 +40,7 @@ class LLCoordWindow;
class LLIconCtrl;
class LLLayoutStack;
class LLProgressBar;
+class LLSliderCtrl;
class LLViewerMediaImpl;
class LLPanelPrimMediaControls : public LLPanel
@@ -106,7 +107,9 @@ private:
void onCommitVolumeUp();
void onCommitVolumeDown();
+ void onCommitVolumeSlider();
void onToggleMute();
+ void showVolumeSlider();
static void onScrollUp(void* user_data);
static void onScrollUpHeld(void* user_data);
@@ -153,12 +156,14 @@ private:
LLButton *mVolumeBtn;
LLUICtrl *mVolumeUpCtrl;
LLUICtrl *mVolumeDownCtrl;
+ LLSliderCtrl *mVolumeSliderCtrl;
LLIconCtrl *mWhitelistIcon;
LLIconCtrl *mSecureLockIcon;
LLLayoutStack *mMediaControlsStack;
LLUICtrl *mLeftBookend;
LLUICtrl *mRightBookend;
LLUIImage* mBackgroundImage;
+ LLUIImage* mVolumeSliderBackgroundImage;
F32 mSkipStep;
S32 mMinWidth;
S32 mMinHeight;
@@ -198,6 +203,8 @@ private:
LLUUID mZoomObjectID;
S32 mZoomObjectFace;
+
+ bool mVolumeSliderVisible;
};
#endif // LL_PANELPRIMMEDIACONTROLS_H
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 155172128b..088884178b 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -62,15 +62,15 @@ LLUUID notification_id_to_object_id(const LLUUID& notification_id)
//////////////////////////////////////////////////////////////////////////
LLScriptFloater::LLScriptFloater(const LLSD& key)
-: LLTransientDockableFloater(NULL, true, key)
+: LLDockableFloater(NULL, true, key)
, mScriptForm(NULL)
-, mObjectId(key.asUUID())
{
}
bool LLScriptFloater::toggle(const LLUUID& object_id)
{
- LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+ LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id);
+ LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
// show existing floater
if(floater)
@@ -97,7 +97,10 @@ bool LLScriptFloater::toggle(const LLUUID& object_id)
LLScriptFloater* LLScriptFloater::show(const LLUUID& object_id)
{
- LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", object_id);
+ LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id);
+
+ LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", notification_id);
+ floater->setObjectId(object_id);
floater->createForm(object_id);
if (floater->getDockControl() == NULL)
@@ -156,19 +159,22 @@ void LLScriptFloater::createForm(const LLUUID& object_id)
void LLScriptFloater::onClose(bool app_quitting)
{
- LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId());
+ if(getObjectId().notNull())
+ {
+ LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId());
+ }
}
void LLScriptFloater::setDocked(bool docked, bool pop_on_undock /* = true */)
{
- LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+ LLDockableFloater::setDocked(docked, pop_on_undock);
hideToastsIfNeeded();
}
void LLScriptFloater::setVisible(BOOL visible)
{
- LLTransientDockableFloater::setVisible(visible);
+ LLDockableFloater::setVisible(visible);
hideToastsIfNeeded();
}
@@ -206,7 +212,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
script_notification_map_t::iterator it = mNotifications.find(object_id);
if(it != mNotifications.end())
{
- onRemoveNotification(notification_id);
+ onRemoveNotification(it->second.notification_id);
}
LLNotificationData nd = {notification_id};
@@ -228,7 +234,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
{
- LLUUID object_id = notification_id_to_object_id(notification_id);
+ LLUUID object_id = findObjectId(notification_id);
if(object_id.isNull())
{
llwarns << "Invalid notification, no object id" << llendl;
@@ -241,22 +247,24 @@ void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
LLUUID channel_id(gSavedSettings.getString("NotificationChannelUUID"));
LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>
(LLChannelManager::getInstance()->findChannelByID(channel_id));
- if(channel)
+ LLUUID n_toast_id = findNotificationToastId(object_id);
+ if(channel && n_toast_id.notNull())
{
- channel->killToastByNotificationID(findNotificationToastId(object_id));
+ channel->killToastByNotificationID(n_toast_id);
}
- mNotifications.erase(object_id);
-
// remove related chiclet
LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(object_id);
// close floater
- LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+ LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
if(floater)
{
+ floater->setObjectId(LLUUID::null);
floater->closeFloater();
}
+
+ mNotifications.erase(object_id);
}
void LLScriptFloaterManager::removeNotificationByObjectId(const LLUUID& object_id)
@@ -301,6 +309,22 @@ void LLScriptFloaterManager::setNotificationToastId(const LLUUID& object_id, con
}
}
+LLUUID LLScriptFloaterManager::findObjectId(const LLUUID& notification_id)
+{
+ if(notification_id.notNull())
+ {
+ script_notification_map_t::const_iterator it = mNotifications.begin();
+ for(; mNotifications.end() != it; ++it)
+ {
+ if(notification_id == it->second.notification_id)
+ {
+ return it->first;
+ }
+ }
+ }
+ return LLUUID::null;
+}
+
LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id)
{
script_notification_map_t::const_iterator it = mNotifications.find(object_id);
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index 0e1a7f36b7..8b5a266691 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -43,6 +43,9 @@ class LLToastNotifyPanel;
*/
class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager>
{
+ // *TODO
+ // LLScriptFloaterManager and LLScriptFloater will need some refactoring after we
+ // know how script notifications should look like.
public:
/**
@@ -69,6 +72,8 @@ public:
*/
void toggleScriptFloater(const LLUUID& object_id);
+ LLUUID findObjectId(const LLUUID& notification_id);
+
LLUUID findNotificationId(const LLUUID& object_id);
LLUUID findNotificationToastId(const LLUUID& object_id);
@@ -102,7 +107,7 @@ private:
* LLScriptFloater will create script form based on notification data and
* will auto fit the form.
*/
-class LLScriptFloater : public LLTransientDockableFloater
+class LLScriptFloater : public LLDockableFloater
{
public:
@@ -125,6 +130,8 @@ public:
const LLUUID& getObjectId() { return mObjectId; }
+ void setObjectId(const LLUUID& id) { mObjectId = id; }
+
/**
* Close notification if script floater is closed.
*/
@@ -154,8 +161,6 @@ protected:
*/
static void hideToastsIfNeeded();
- void setObjectId(const LLUUID& id) { mObjectId = id; }
-
private:
LLToastNotifyPanel* mScriptForm;
LLUUID mObjectId;
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 9ab459080e..ca7a3b663a 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -128,10 +128,6 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
showTaskInfoPanel();
}
- if (key.has("select"))
- {
- mPanelMainInventory->getPanel()->setSelection(key["select"].asUUID(), TAKE_FOCUS_NO);
- }
}
void LLSidepanelInventory::onInfoButtonClicked()
@@ -290,3 +286,8 @@ LLInventoryPanel *LLSidepanelInventory::getActivePanel()
}
return NULL;
}
+
+BOOL LLSidepanelInventory::isMainInventoryPanelActive() const
+{
+ return mInventoryPanel->getVisible();
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index c2ce3badb8..231cdac9e1 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -51,6 +51,7 @@ public:
/*virtual*/ void onOpen(const LLSD& key);
LLInventoryPanel* getActivePanel(); // Returns an active inventory panel, if any.
+ BOOL isMainInventoryPanelActive() const;
protected:
// Tracks highlighted (selected) item in inventory panel.
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 9333465052..a1af2e5411 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -128,6 +128,7 @@ public:
void onOpen (const LLSD& key);
+ LLPanel *getPanel();
private:
std::string mTabTitle;
std::string mImage;
@@ -199,11 +200,17 @@ void LLSideTrayTab::reshape (S32 width, S32 height, BOOL called_from_parent )
void LLSideTrayTab::onOpen (const LLSD& key)
{
- LLPanel* panel = dynamic_cast<LLPanel*>(mMainPanel);
+ LLPanel *panel = getPanel();
if(panel)
panel->onOpen(key);
}
+LLPanel* LLSideTrayTab::getPanel()
+{
+ LLPanel* panel = dynamic_cast<LLPanel*>(mMainPanel);
+ return panel;
+}
+
LLSideTrayTab* LLSideTrayTab::createInstance ()
{
LLSideTrayTab::Params tab_params;
@@ -653,6 +660,23 @@ LLPanel* LLSideTray::getPanel (const std::string& panel_name)
return NULL;
}
+LLPanel* LLSideTray::getActivePanel()
+{
+ if (mActiveTab && !mCollapsed)
+ {
+ return mActiveTab->getPanel();
+ }
+ return NULL;
+}
+
+bool LLSideTray::isPanelActive(const std::string& panel_name)
+{
+ LLPanel *panel = getActivePanel();
+ if (!panel) return false;
+ return (panel->getName() == panel_name);
+}
+
+
// *TODO: Eliminate magic constants.
static const S32 fake_offset = 132;
static const S32 fake_top_offset = 18;
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 7321574681..cf2f6992d5 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -100,7 +100,8 @@ public:
* get the panel (don't show it or do anything else with it)
*/
LLPanel* getPanel (const std::string& panel_name);
-
+ LLPanel* getActivePanel ();
+ bool isPanelActive (const std::string& panel_name);
/*
* collapse SideBar, hiding visible tab and moving tab buttons
* to the right corner of the screen
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index cc4689062e..1315887c37 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -167,7 +167,10 @@ void LLTeleportHistory::onHistoryChanged()
void LLTeleportHistory::purgeItems()
{
- mItems.erase(mItems.begin(), mItems.end()-1);
+ if (mItems.size() > 0)
+ {
+ mItems.erase(mItems.begin(), mItems.end()-1);
+ }
// reset the count
mRequestedItem = -1;
mCurrentItem = 0;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 9bb2a4ad0a..ef49d7f057 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -736,7 +736,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
- llwarns << "Region not found for host: " << mHost << llendl;
+ // This will happen if not logged in or if a region deoes not have HTTP Texture enabled
+ //llwarns << "Region not found for host: " << mHost << llendl;
}
}
if (!mUrl.empty())
@@ -943,11 +944,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
}
+ if (mLoadedDiscard < 0)
+ {
+ llerrs << "Decode entered with invalid mLoadedDiscard. ID = " << mID << llendl;
+ }
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
mRawImage = NULL;
mAuxImage = NULL;
llassert_always(mFormattedImage.notNull());
- llassert_always(mLoadedDiscard >= 0);
S32 discard = mHaveAllData ? 0 : mLoadedDiscard;
U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
mDecoded = FALSE;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index b5454e7298..158c857031 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -226,7 +226,12 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("test_inspectors", "floater_test_inspectors.xml",
&LLFloaterReg::build<LLFloaterTestInspectors>);
//LLFloaterReg::add("test_list_view", "floater_test_list_view.xml",&LLFloaterReg::build<LLFloaterTestListView>);
- LLFloaterReg::add("test_widgets", "floater_test_widgets.xml", &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_textbox", "floater_test_textbox.xml",
+ &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_text_editor", "floater_test_text_editor.xml",
+ &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_widgets", "floater_test_widgets.xml",
+ &LLFloaterReg::build<LLFloater>);
LLFloaterReg::add("top_objects", "floater_top_objects.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTopObjects>);
LLFloaterReg::add("reporter", "floater_report_abuse.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterReporter>);
@@ -250,7 +255,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
LLFloaterReg::add("volume_pulldown", "floater_volume_pulldown.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVolumePulldown>);
- LLFloaterReg::add("voice_call", "floater_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCall>);
LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);
LLFloaterReg::add("whitelist_entry", "floater_whitelist_entry.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWhiteListEntry>);
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
index 6aabcb11b8..db54a79610 100644
--- a/indra/newview/llviewerfoldertype.cpp
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -43,12 +43,14 @@ struct ViewerFolderEntry : public LLDictionaryEntry
{
// Constructor for non-ensembles
ViewerFolderEntry(const std::string &new_category_name, // default name when creating a new category of this type
- const std::string &icon_name // name of the folder icon
+ const std::string &icon_name, // name of the folder icon
+ BOOL is_quiet // folder doesn't need a UI update when changed
)
:
LLDictionaryEntry(empty_string), // no reverse lookup needed on non-ensembles, so just leave this blank
mIconName(icon_name),
- mNewCategoryName(new_category_name)
+ mNewCategoryName(new_category_name),
+ mIsQuiet(is_quiet)
{
mAllowedNames.clear();
}
@@ -62,7 +64,8 @@ struct ViewerFolderEntry : public LLDictionaryEntry
:
LLDictionaryEntry(xui_name),
mIconName(icon_name),
- mNewCategoryName(new_category_name)
+ mNewCategoryName(new_category_name),
+ mIsQuiet(FALSE)
{
const std::string delims (",");
LLStringUtilBase<char>::getTokens(allowed_names, mAllowedNames, delims);
@@ -85,6 +88,7 @@ struct ViewerFolderEntry : public LLDictionaryEntry
const std::string mNewCategoryName;
typedef std::vector<std::string> name_vec_t;
name_vec_t mAllowedNames;
+ BOOL mIsQuiet;
};
class LLViewerFolderDictionary : public LLSingleton<LLViewerFolderDictionary>,
@@ -100,31 +104,31 @@ LLViewerFolderDictionary::LLViewerFolderDictionary()
{
initEnsemblesFromFile();
- // NEW CATEGORY NAME FOLDER ICON NAME
- // |-------------------------|---------------------------|
- addEntry(LLFolderType::FT_TEXTURE, new ViewerFolderEntry("Textures", "inv_folder_texture.tga"));
- addEntry(LLFolderType::FT_SOUND, new ViewerFolderEntry("Sounds", "inv_folder_sound.tga"));
- addEntry(LLFolderType::FT_CALLINGCARD, new ViewerFolderEntry("Calling Cards", "inv_folder_callingcard.tga"));
- addEntry(LLFolderType::FT_LANDMARK, new ViewerFolderEntry("Landmarks", "inv_folder_landmark.tga"));
- addEntry(LLFolderType::FT_CLOTHING, new ViewerFolderEntry("Clothing", "inv_folder_clothing.tga"));
- addEntry(LLFolderType::FT_OBJECT, new ViewerFolderEntry("Objects", "inv_folder_object.tga"));
- addEntry(LLFolderType::FT_NOTECARD, new ViewerFolderEntry("Notecards", "inv_folder_notecard.tga"));
- addEntry(LLFolderType::FT_ROOT_INVENTORY, new ViewerFolderEntry("My Inventory", ""));
- addEntry(LLFolderType::FT_LSL_TEXT, new ViewerFolderEntry("Scripts", "inv_folder_script.tga"));
- addEntry(LLFolderType::FT_BODYPART, new ViewerFolderEntry("Body Parts", "inv_folder_bodypart.tga"));
- addEntry(LLFolderType::FT_TRASH, new ViewerFolderEntry("Trash", "inv_folder_trash.tga"));
- addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, new ViewerFolderEntry("Photo Album", "inv_folder_snapshot.tga"));
- addEntry(LLFolderType::FT_LOST_AND_FOUND, new ViewerFolderEntry("Lost And Found", "inv_folder_lostandfound.tga"));
- addEntry(LLFolderType::FT_ANIMATION, new ViewerFolderEntry("Animations", "inv_folder_animation.tga"));
- addEntry(LLFolderType::FT_GESTURE, new ViewerFolderEntry("Gestures", "inv_folder_gesture.tga"));
- addEntry(LLFolderType::FT_FAVORITE, new ViewerFolderEntry("Favorite", "inv_folder_plain_closed.tga"));
+ // NEW CATEGORY NAME FOLDER ICON NAME QUIET?
+ // |-------------------------|-------------------------------|-----------|
+ addEntry(LLFolderType::FT_TEXTURE, new ViewerFolderEntry("Textures", "inv_folder_texture.tga", FALSE));
+ addEntry(LLFolderType::FT_SOUND, new ViewerFolderEntry("Sounds", "inv_folder_sound.tga", FALSE));
+ addEntry(LLFolderType::FT_CALLINGCARD, new ViewerFolderEntry("Calling Cards", "inv_folder_callingcard.tga", FALSE));
+ addEntry(LLFolderType::FT_LANDMARK, new ViewerFolderEntry("Landmarks", "inv_folder_landmark.tga", FALSE));
+ addEntry(LLFolderType::FT_CLOTHING, new ViewerFolderEntry("Clothing", "inv_folder_clothing.tga", FALSE));
+ addEntry(LLFolderType::FT_OBJECT, new ViewerFolderEntry("Objects", "inv_folder_object.tga", FALSE));
+ addEntry(LLFolderType::FT_NOTECARD, new ViewerFolderEntry("Notecards", "inv_folder_notecard.tga", FALSE));
+ addEntry(LLFolderType::FT_ROOT_INVENTORY, new ViewerFolderEntry("My Inventory", "", FALSE));
+ addEntry(LLFolderType::FT_LSL_TEXT, new ViewerFolderEntry("Scripts", "inv_folder_script.tga", FALSE));
+ addEntry(LLFolderType::FT_BODYPART, new ViewerFolderEntry("Body Parts", "inv_folder_bodypart.tga", FALSE));
+ addEntry(LLFolderType::FT_TRASH, new ViewerFolderEntry("Trash", "inv_folder_trash.tga", TRUE));
+ addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, new ViewerFolderEntry("Photo Album", "inv_folder_snapshot.tga", FALSE));
+ addEntry(LLFolderType::FT_LOST_AND_FOUND, new ViewerFolderEntry("Lost And Found", "inv_folder_lostandfound.tga", TRUE));
+ addEntry(LLFolderType::FT_ANIMATION, new ViewerFolderEntry("Animations", "inv_folder_animation.tga", FALSE));
+ addEntry(LLFolderType::FT_GESTURE, new ViewerFolderEntry("Gestures", "inv_folder_gesture.tga", FALSE));
+ addEntry(LLFolderType::FT_FAVORITE, new ViewerFolderEntry("Favorite", "inv_folder_plain_closed.tga", FALSE));
- addEntry(LLFolderType::FT_CURRENT_OUTFIT, new ViewerFolderEntry("Current Outfit", "inv_folder_current_outfit.tga"));
- addEntry(LLFolderType::FT_OUTFIT, new ViewerFolderEntry("New Outfit", "inv_folder_outfit.tga"));
- addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "inv_folder_my_outfits.tga"));
- addEntry(LLFolderType::FT_INBOX, new ViewerFolderEntry("Inbox", "inv_folder_inbox.tga"));
+ addEntry(LLFolderType::FT_CURRENT_OUTFIT, new ViewerFolderEntry("Current Outfit", "inv_folder_current_outfit.tga",TRUE));
+ addEntry(LLFolderType::FT_OUTFIT, new ViewerFolderEntry("New Outfit", "inv_folder_outfit.tga", TRUE));
+ addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "inv_folder_my_outfits.tga", TRUE));
+ addEntry(LLFolderType::FT_INBOX, new ViewerFolderEntry("Inbox", "inv_folder_inbox.tga", FALSE));
- addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "inv_folder_plain_closed.tga"));
+ addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "inv_folder_plain_closed.tga", FALSE));
}
bool LLViewerFolderDictionary::initEnsemblesFromFile()
@@ -219,6 +223,17 @@ const std::string &LLViewerFolderType::lookupIconName(LLFolderType::EType folder
return badLookup();
}
+BOOL LLViewerFolderType::lookupIsQuietType(LLFolderType::EType folder_type)
+{
+ const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+ if (entry)
+ {
+ return entry->mIsQuiet;
+ }
+ return FALSE;
+}
+
+
const std::string &LLViewerFolderType::lookupNewCategoryName(LLFolderType::EType folder_type)
{
const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h
index a6aea62b2a..dd9360da90 100644
--- a/indra/newview/llviewerfoldertype.h
+++ b/indra/newview/llviewerfoldertype.h
@@ -44,11 +44,13 @@ public:
static const std::string& lookupXUIName(EType folder_type); // name used by the UI
static LLFolderType::EType lookupTypeFromXUIName(const std::string& name);
- static const std::string& lookupIconName(EType asset_type); // folder icon name
+ static const std::string& lookupIconName(EType folder_type); // folder icon name
+ static BOOL lookupIsQuietType(EType folder_type); // folder doesn't require UI update when changes have occured
static const std::string& lookupNewCategoryName(EType folder_type); // default name when creating new category
static LLFolderType::EType lookupTypeFromNewCategoryName(const std::string& name); // default name when creating new category
static U64 lookupValidFolderTypes(const std::string& item_name); // which folders allow an item of this type?
+
protected:
LLViewerFolderType() {}
~LLViewerFolderType() {}
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index 8fd646ee93..f757155b94 100644
--- a/indra/newview/llviewerkeyboard.cpp
+++ b/indra/newview/llviewerkeyboard.cpp
@@ -538,8 +538,9 @@ void start_chat( EKeystate s )
void start_gesture( EKeystate s )
{
+ LLUICtrl* focus_ctrlp = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
if (KEYSTATE_UP == s &&
- !(gFocusMgr.getKeyboardFocus() && dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus())->acceptsTextInput()))
+ ! (focus_ctrlp && focus_ctrlp->acceptsTextInput()))
{
if (LLNearbyChatBar::getInstance()->getCurrentChat().empty())
{
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index d5fd23ac51..f6db661489 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -45,6 +45,9 @@
#include "llviewertexturelist.h"
#include "llvovolume.h"
#include "llpluginclassmedia.h"
+#include "llviewerwindow.h"
+#include "llfocusmgr.h"
+#include "llcallbacklist.h"
#include "llevent.h" // LLSimpleListener
#include "llnotificationsutil.h"
@@ -55,7 +58,7 @@
#include <boost/bind.hpp> // for SkinFolder listener
#include <boost/signals2.hpp>
-/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "AutoPlayMedia";
+/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "ParcelMediaAutoPlayEnable";
// Move this to its own file.
@@ -327,6 +330,8 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_impl->mMediaLoop = media_entry->getAutoLoop();
media_impl->mMediaWidth = media_entry->getWidthPixels();
media_impl->mMediaHeight = media_entry->getHeightPixels();
+ media_impl->mMediaAutoPlay = media_entry->getAutoPlay();
+ media_impl->mMediaEntryURL = media_entry->getCurrentURL();
if (media_impl->mMediaSource)
{
media_impl->mMediaSource->setAutoScale(media_impl->mMediaAutoScale);
@@ -334,8 +339,8 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_impl->mMediaSource->setSize(media_entry->getWidthPixels(), media_entry->getHeightPixels());
}
- bool url_changed = (media_entry->getCurrentURL() != previous_url);
- if(media_entry->getCurrentURL().empty())
+ bool url_changed = (media_impl->mMediaEntryURL != previous_url);
+ if(media_impl->mMediaEntryURL.empty())
{
if(url_changed)
{
@@ -350,7 +355,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
// The current media URL is not empty.
// If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent,
// do a navigate.
- bool auto_play = (media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING));
+ bool auto_play = (media_impl->mMediaAutoPlay && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING));
if((was_loaded || auto_play) && !update_from_self)
{
@@ -372,8 +377,10 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_entry->getAutoLoop());
media_impl->setHomeURL(media_entry->getHomeURL());
+ media_impl->mMediaAutoPlay = media_entry->getAutoPlay();
+ media_impl->mMediaEntryURL = media_entry->getCurrentURL();
- if(media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))
+ if(media_impl->mMediaAutoPlay && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))
{
needs_navigate = true;
}
@@ -381,21 +388,20 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
if(media_impl)
{
- std::string url = media_entry->getCurrentURL();
if(needs_navigate)
{
- media_impl->navigateTo(url, "", true, true);
- lldebugs << "navigating to URL " << url << llendl;
+ media_impl->navigateTo(media_impl->mMediaEntryURL, "", true, true);
+ lldebugs << "navigating to URL " << media_impl->mMediaEntryURL << llendl;
}
- else if(!media_impl->mMediaURL.empty() && (media_impl->mMediaURL != url))
+ else if(!media_impl->mMediaURL.empty() && (media_impl->mMediaURL != media_impl->mMediaEntryURL))
{
// If we already have a non-empty media URL set and we aren't doing a navigate, update the media URL to match the media entry.
- media_impl->mMediaURL = url;
+ media_impl->mMediaURL = media_impl->mMediaEntryURL;
// If this causes a navigate at some point (such as after a reload), it should be considered server-driven so it isn't broadcast.
media_impl->mNavigateServerRequest = true;
- lldebugs << "updating URL in the media impl to " << url << llendl;
+ lldebugs << "updating URL in the media impl to " << media_impl->mMediaEntryURL << llendl;
}
}
@@ -625,7 +631,7 @@ static bool proximity_comparitor(const LLViewerMediaImpl* i1, const LLViewerMedi
//////////////////////////////////////////////////////////////////////////////////////////
// static
-void LLViewerMedia::updateMedia()
+void LLViewerMedia::updateMedia(void *dummy_arg)
{
impl_list::iterator iter = sViewerMediaImplList.begin();
impl_list::iterator end = sViewerMediaImplList.end();
@@ -668,7 +674,7 @@ void LLViewerMedia::updateMedia()
LLPluginClassMedia::EPriority new_priority = LLPluginClassMedia::PRIORITY_NORMAL;
- if(pimpl->isForcedUnloaded() || (impl_count_total > (int)max_instances))
+ if(pimpl->isForcedUnloaded() || (impl_count_total >= (int)max_instances))
{
// Never load muted or failed impls.
// Hard limit on the number of instances that will be loaded at one time
@@ -747,6 +753,19 @@ void LLViewerMedia::updateMedia()
impl_count_total++;
}
+ // Overrides if the window is minimized or we lost focus (taking care
+ // not to accidentally "raise" the priority either)
+ if (!gViewerWindow->getActive() /* viewer window minimized? */
+ && new_priority > LLPluginClassMedia::PRIORITY_HIDDEN)
+ {
+ new_priority = LLPluginClassMedia::PRIORITY_HIDDEN;
+ }
+ else if (!gFocusMgr.getAppHasFocus() /* viewer window lost focus? */
+ && new_priority > LLPluginClassMedia::PRIORITY_LOW)
+ {
+ new_priority = LLPluginClassMedia::PRIORITY_LOW;
+ }
+
pimpl->setPriority(new_priority);
if(pimpl->getUsedInUI())
@@ -785,9 +804,16 @@ void LLViewerMedia::updateMedia()
//////////////////////////////////////////////////////////////////////////////////////////
// static
+void LLViewerMedia::initClass()
+{
+ gIdleCallbacks.addFunction(LLViewerMedia::updateMedia, NULL);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// static
void LLViewerMedia::cleanupClass()
{
- // This is no longer necessary, since sViewerMediaImplList is no longer smart pointers.
+ gIdleCallbacks.deleteFunction(LLViewerMedia::updateMedia, NULL);
}
//////////////////////////////////////////////////////////////////////////////////////////
@@ -830,6 +856,7 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id,
mProximity(-1),
mProximityDistance(0.0f),
mMimeTypeProbe(NULL),
+ mMediaAutoPlay(false),
mIsUpdated(false)
{
@@ -1911,6 +1938,33 @@ void LLViewerMediaImpl::resetPreviousMediaState()
mPreviousMediaTime = 0.0f;
}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+//
+void LLViewerMediaImpl::setDisabled(bool disabled)
+{
+ if(mIsDisabled != disabled)
+ {
+ // Only do this on actual state transitions.
+ mIsDisabled = disabled;
+
+ if(mIsDisabled)
+ {
+ // We just disabled this media. Clear all state.
+ unload();
+ }
+ else
+ {
+ // We just (re)enabled this media. Do a navigate if auto-play is in order.
+ if(mMediaAutoPlay && gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING))
+ {
+ navigateTo(mMediaEntryURL, "", true, true);
+ }
+ }
+
+ }
+};
+
//////////////////////////////////////////////////////////////////////////////////////////
//
bool LLViewerMediaImpl::isForcedUnloaded() const
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index e2d159304f..713eb2710b 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -96,9 +96,10 @@ class LLViewerMedia
static bool textureHasMedia(const LLUUID& texture_id);
static void setVolume(F32 volume);
- static void updateMedia();
+ static void updateMedia(void* dummy_arg = NULL);
static bool isMusicPlaying();
+ static void initClass();
static void cleanupClass();
static void toggleMusicPlay(void*);
@@ -201,7 +202,7 @@ public:
bool isMediaFailed() const { return mMediaSourceFailed; };
void resetPreviousMediaState();
- void setDisabled(bool disabled) { mIsDisabled = disabled; };
+ void setDisabled(bool disabled);
bool isMediaDisabled() const { return mIsDisabled; };
// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
@@ -345,6 +346,8 @@ public:
S32 mProximity;
F64 mProximityDistance;
LLMimeDiscoveryResponder *mMimeTypeProbe;
+ bool mMediaAutoPlay;
+ std::string mMediaEntryURL;
private:
BOOL mIsUpdated ;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 2ae8aca6ad..507e34348b 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -73,6 +73,7 @@
#include "llstatusbar.h"
#include "llimview.h"
#include "lltrans.h"
+#include "llviewerfoldertype.h"
#include "llviewergenericmessage.h"
#include "llviewermenu.h"
#include "llviewerobjectlist.h"
@@ -824,35 +825,49 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name)
{
- std::vector<LLUUID>::const_iterator it = items.begin();
- std::vector<LLUUID>::const_iterator end = items.end();
- const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- LLInventoryItem* item;
- for(; it != end; ++it)
- {
- const LLUUID& id = *it;
- item = gInventory.getItem(id);
+ for (std::vector<LLUUID>::const_iterator item_iter = items.begin();
+ item_iter != items.end();
+ ++item_iter)
+ {
+ const LLUUID& item_id = (*item_iter);
+ LLInventoryItem* item = gInventory.getItem(item_id);
if(!item)
{
- LL_WARNS("Messaging") << "Unable to show inventory item: " << id << LL_ENDL;
+ LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
continue;
}
- if(gInventory.isObjectDescendentOf(id, trash_id))
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Don't highlight if it's in certain "quiet" folders which don't need UI
+ // notification (e.g. trash, cof, lost-and-found).
+ const BOOL user_is_away = gAwayTimer.getStarted();
+ if(!user_is_away)
{
- continue;
+ const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
+ if (parent)
+ {
+ const LLFolderType::EType parent_type = parent->getPreferredType();
+ if (LLViewerFolderType::lookupIsQuietType(parent_type))
+ {
+ continue;
+ }
+ }
}
- LLAssetType::EType asset_type = item->getType();
- //if we are throttled, don't display them
- if (check_offer_throttle(from_name, false))
+ ////////////////////////////////////////////////////////////////////////////////
+ // Special handling for various types.
+ const LLAssetType::EType asset_type = item->getType();
+ if (check_offer_throttle(from_name, false)) // If we are throttled, don't display
{
// If we opened this ourselves, focus it
- BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
+ const BOOL take_focus = from_name.empty() ? TAKE_FOCUS_YES : TAKE_FOCUS_NO;
switch(asset_type)
{
case LLAssetType::AT_NOTECARD:
- LLFloaterReg::showInstance("preview_notecard", LLSD(id), take_focus);
- break;
+ {
+ LLFloaterReg::showInstance("preview_notecard", LLSD(item_id), take_focus);
+ break;
+ }
case LLAssetType::AT_LANDMARK:
{
LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
@@ -862,63 +877,35 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
LLNotificationsUtil::add("LandmarkCreated", args);
// Created landmark is passed to Places panel to allow its editing.
- LLPanelPlaces *panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->showPanel("panel_places", LLSD()));
- if (panel)
+ LLPanelPlaces *places_panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->showPanel("panel_places", LLSD()));
+ if (places_panel)
{
- panel->setItem(item);
+ places_panel->setItem(item);
}
}
break;
case LLAssetType::AT_TEXTURE:
- LLFloaterReg::showInstance("preview_texture", LLSD(id), take_focus);
- break;
+ {
+ LLFloaterReg::showInstance("preview_texture", LLSD(item_id), take_focus);
+ break;
+ }
default:
break;
}
}
- //highlight item, if it's not in the trash or lost+found
- // Don't auto-open the inventory floater
- if(gSavedSettings.getBOOL("ShowInInventory") &&
- asset_type != LLAssetType::AT_CALLINGCARD &&
- item->getInventoryType() != LLInventoryType::IT_ATTACHMENT &&
- !from_name.empty())
- {
- //TODO:this should be moved to the end of method after all the checks,
- //but first decide what to do with active inventory if any (EK)
- LLSD key;
- key["select"] = item->getUUID();
- LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
- }
- LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel();
+ ////////////////////////////////////////////////////////////////////////////////
+ // Highlight item if it's not in the trash, lost+found, or COF
+ const BOOL auto_open = gSavedSettings.getBOOL("ShowInInventory") &&
+ (asset_type != LLAssetType::AT_CALLINGCARD) &&
+ (item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) &&
+ !from_name.empty();
+ LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
if(active_panel)
{
- //Trash Check
- const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
- {
- return;
- }
- const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
- //BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view);
- BOOL user_is_away = gAwayTimer.getStarted();
-
- // don't select lost and found items if the user is active
- if (gInventory.isObjectDescendentOf(item->getUUID(), lost_and_found_id)
- && !user_is_away)
- {
- return;
- }
-
- //Not sure about this check. Could make it easy to miss incoming items.
- //don't dick with highlight while the user is working
- //if(inventory_has_focus && !user_is_away)
- // break;
- LL_DEBUGS("Messaging") << "Highlighting" << item->getUUID() << LL_ENDL;
- //highlight item
-
+ LL_DEBUGS("Messaging") << "Highlighting" << item_id << LL_ENDL;
LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
- active_panel->setSelection(item->getUUID(), TAKE_FOCUS_NO);
+ active_panel->setSelection(item_id, TAKE_FOCUS_NO);
gFocusMgr.setKeyboardFocus(focus_ctrl);
}
}
@@ -5519,17 +5506,6 @@ void process_script_dialog(LLMessageSystem* msg, void**)
notification = LLNotifications::instance().add(
LLNotification::Params("ScriptDialogGroup").substitutions(args).payload(payload).form_elements(form.asLLSD()));
}
-
- // "ScriptDialog" and "ScriptDialogGroup" are handles by LLScriptFloaterManager.
- // We want to inform user that there is a script floater, lets add "ScriptToast"
- LLNotification::Params p("ScriptToast");
- p.substitutions(args).payload(payload).functor.function(boost::bind(
- LLScriptFloaterManager::onToastButtonClick, _1, _2));
-
- notification = LLNotifications::instance().add(p);
-
- LLScriptFloaterManager::getInstance()->setNotificationToastId(
- object_id, notification->getID());
}
//---------------------------------------------------------------------------
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index dbcf563010..5be7f2945f 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -614,10 +614,6 @@ void LLViewerTextureList::updateImages(F32 max_time)
didone = image->doLoadedCallbacks();
}
}
- if (!gNoRender && !gGLManager.mIsDisabled)
- {
- LLViewerMedia::updateMedia();
- }
updateImagesUpdateStats();
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 9ba056a17c..8529a93527 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1011,6 +1011,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
else
{
mActive = FALSE;
+
if (gSavedSettings.getBOOL("AllowIdleAFK"))
{
gAgent.setAFK();
@@ -3244,8 +3245,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_trans
}
else
{
- llwarns << "List of last picks is empty" << llendl;
- llwarns << "Using stub pick" << llendl;
+ lldebugs << "List of last picks is empty: Using stub pick" << llendl;
mLastPick = LLPickInfo();
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index a9194c0c3b..93b0ad4a5b 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3834,15 +3834,6 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
- bool should_alpha_mask = shouldAlphaMask();
-
- LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
-
- if (should_alpha_mask)
- {
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
- }
-
if (isTextureVisible(TEX_HEAD_BAKED))
{
num_indices += mMeshLOD[MESH_ID_EYELASH]->render(mAdjustedPixelArea, first_pass, mIsDummy);
@@ -6011,8 +6002,7 @@ void LLVOAvatar::updateMeshTextures()
}
}
else if (mBakedTextureDatas[i].mTexLayerSet
- && !other_culled
- && (i != BAKED_HAIR || mSupportsAlphaLayers)) // ! BACKWARDS COMPATIBILITY ! workaround for old viewers.
+ && !other_culled)
{
mBakedTextureDatas[i].mTexLayerSet->createComposite();
mBakedTextureDatas[i].mTexLayerSet->setUpdatesEnabled( TRUE );
@@ -6024,9 +6014,10 @@ void LLVOAvatar::updateMeshTextures()
}
}
- // ! BACKWARDS COMPATIBILITY !
- // Workaround for viewing avatars from old viewers that haven't baked hair textures.
- if (!mSupportsAlphaLayers)
+ // set texture and color of hair manually if we are not using a baked image.
+ // This can happen while loading hair for yourself, or for clients that did not
+ // bake a hair texture. Still needed for yourself after 1.22 is depricated.
+ if (!is_layer_baked[BAKED_HAIR] || self_customizing)
{
const LLColor4 color = mTexHairColor ? mTexHairColor->getColor() : LLColor4(1,1,1,1);
LLViewerTexture* hair_img = getImage( TEX_HAIR, 0 );
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index a0396bc790..608060174a 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -408,28 +408,6 @@ void LLVoiceChannel::doSetState(const EState& new_state)
mStateChangedCallback(old_state, mState);
}
-void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)
-{
- LLFloaterCall* floater = dynamic_cast<LLFloaterCall*>(LLFloaterReg::getInstance("voice_call", mSessionID));
- if (!floater)
- return;
-
- if (state == STATE_CONNECTED)
- {
- floater->init(mSessionID);
- floater->openFloater(mSessionID);
- }
- // By checking that current state is CONNECTED we make sure that the call window
- // has been shown, hence there's something to hide. This helps when user presses
- // the "End call" button right after initiating the call.
- // *TODO: move this check to LLFloaterCall?
- else if (state == STATE_HUNG_UP && mState == STATE_CONNECTED)
- {
- floater->reset();
- floater->closeFloater();
- }
-}
-
//static
void LLVoiceChannel::initClass()
{
@@ -630,9 +608,6 @@ void LLVoiceChannelGroup::handleError(EStatusType status)
void LLVoiceChannelGroup::setState(EState state)
{
- // HACK: Open/close the call window if needed.
- toggleCallWindowIfNeeded(state);
-
switch(state)
{
case STATE_RINGING:
@@ -886,9 +861,6 @@ void LLVoiceChannelP2P::setSessionHandle(const std::string& handle, const std::s
void LLVoiceChannelP2P::setState(EState state)
{
- // *HACK: Open/close the call window if needed.
- toggleCallWindowIfNeeded(state);
-
llinfos << "P2P CALL STATE CHANGE: incoming=" << int(mReceivedCall) << " oldstate=" << mState << " newstate=" << state << llendl;
if (mReceivedCall) // incoming call
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index fe0114d687..1bed329ba2 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -101,7 +101,6 @@ protected:
* Use this method if you want mStateChangedCallback to be executed while state is changed
*/
void doSetState(const EState& state);
- void toggleCallWindowIfNeeded(EState state);
void setURI(std::string uri);
std::string mURI;
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 85cb145dbc..acb3262093 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -686,6 +686,6 @@
value="0.3 0.3 0.3 1.0" />
<color
name="ChatToastAgentNameColor"
- value="1.0 0.3 1.0 1.0" />
+ reference="EmphasisColor" />
</colors>
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 3e0820544a..b1116dc0d2 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -343,8 +343,8 @@ with the same filename but different name
<texture name="parcel_drk_BuildNo" file_name="icons/parcel_drk_BuildNo.png" preload="false" />
<texture name="parcel_drk_Damage" file_name="icons/parcel_drk_Damage.png" preload="false" />
<texture name="parcel_drk_DamageNo" file_name="icons/parcel_drk_DamageNo.png" preload="false" />
- <texture name="parcel_drk_EVRY" file_name="icons/parcel_drk_EVRY.png" preload="false" />
- <texture name="parcel_drk_EXP" file_name="icons/parcel_drk_EXP.png" preload="false" />
+ <texture name="parcel_drk_EVRY" file_name="icons/parcel_drk_EVRY.png" preload="false" />
+ <texture name="parcel_drk_EXP" file_name="icons/parcel_drk_EXP.png" preload="false" />
<texture name="parcel_drk_Fly" file_name="icons/parcel_drk_Fly.png" preload="false" />
<texture name="parcel_drk_FlyNo" file_name="icons/parcel_drk_FlyNo.png" preload="false" />
<texture name="parcel_drk_ForSale" file_name="icons/parcel_drk_ForSale.png" preload="false" />
@@ -363,8 +363,8 @@ with the same filename but different name
<texture name="parcel_lght_BuildNo" file_name="icons/parcel_lght_BuildNo.png" preload="false" />
<texture name="parcel_lght_Damage" file_name="icons/parcel_lght_Damage.png" preload="false" />
<texture name="parcel_lght_DamageNo" file_name="icons/parcel_lght_DamageNo.png" preload="false" />
- <texture name="parcel_lght_EVRY" file_name="icons/parcel_lght_EVRY.png" preload="false" />
- <texture name="parcel_lght_EXP" file_name="icons/parcel_lght_EXP.png" preload="false" />
+ <texture name="parcel_lght_EVRY" file_name="icons/parcel_lght_EVRY.png" preload="false" />
+ <texture name="parcel_lght_EXP" file_name="icons/parcel_lght_EXP.png" preload="false" />
<texture name="parcel_lght_Fly" file_name="icons/parcel_lght_Fly.png" preload="false" />
<texture name="parcel_lght_FlyNo" file_name="icons/parcel_lght_FlyNo.png" preload="false" />
<texture name="parcel_lght_ForSale" file_name="icons/parcel_lght_ForSale.png" preload="false" />
@@ -488,6 +488,8 @@ with the same filename but different name
<texture name="Snapshot_Over" file_name="bottomtray/Snapshot_Over.png" preload="false" />
<texture name="Snapshot_Press" file_name="bottomtray/Snapshot_Press.png" preload="false" />
+ <texture name="startup_logo" file_name="windows/startup_logo.png" preload="true" />
+
<texture name="Stepper_Down_Disabled" file_name="widgets/Stepper_Down_Disabled.png" preload="true" />
<texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="true" />
<texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="true" />
@@ -706,7 +708,6 @@ with the same filename but different name
<texture name="tab_top_blue.tga" preload="false" scale.left="8" scale.top="8" scale.right="120" scale.bottom="9" />
<texture name="tab_top_selected_blue.tga" preload="false" scale.left="8" scale.top="8" scale.right="96" scale.bottom="9" />
- <texture name="startup_logo.j2c" preload="true" />
<texture name="color_swatch_alpha.tga" preload="true" />
<texture name="button_anim_pause.tga" />
diff --git a/indra/newview/skins/default/textures/windows/startup_logo.png b/indra/newview/skins/default/textures/windows/startup_logo.png
new file mode 100644
index 0000000000..b89449692b
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/startup_logo.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index 6ecdd76573..f89ad2f997 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -17,6 +17,7 @@
save_visibility="true"
single_instance="true"
width="320">
+ <string name="nudge_parabuild">Nudge 1</string>
<chat_history
allow_html="true"
bg_readonly_color="ChatHistoryBgColor"
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 8bfd64b3df..d1fd42bdd9 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -7,7 +7,7 @@
help_topic="floaterland"
save_rect="true"
title="ABOUT LAND"
- width="460">
+ width="490">
<floater.string
name="Minutes">
[MINUTES] minutes
@@ -25,25 +25,25 @@
remaining
</floater.string>
<tab_container
- follows="left|top|right|bottom"
- height="400"
+ follows="all"
+ height="410"
layout="topleft"
- left="1"
+ left="0"
name="landtab"
tab_position="top"
- top="20"
- width="459">
+ tab_height="25"
+ tab_min_width="67"
+ top="10"
+ width="489">
<panel
- border="true"
- follows="left|top|right|bottom"
- height="380"
- label="General"
+ border="false"
+ follows="all"
+ label="GENERAL"
layout="topleft"
- left="1"
+ left="0"
help_topic="land_general_tab"
name="land_general_panel"
- top="-31"
- width="458">
+ top="0">
<panel.string
name="new users only">
New users only
@@ -74,11 +74,11 @@
</panel.string>
<panel.string
name="profile_text">
- Profile...
+ Profile
</panel.string>
<panel.string
name="info_text">
- Info...
+ Info
</panel.string>
<panel.string
name="public_text">
@@ -95,7 +95,6 @@
<panel.string
name="no_selection_text">
No parcel selected.
-Go to World menu &gt; About Land or select another parcel to show its details.
</panel.string>
<text
type="string"
@@ -103,32 +102,29 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Name:"
- top="4"
- width="92">
+ top="10"
+ width="100">
Name:
</text>
<line_editor
- border_style="line"
- border_thickness="1"
- follows="left|top|right"
+ follows="left|top"
height="16"
layout="topleft"
left_pad="2"
max_length="63"
name="Name"
top_delta="0"
- width="350" />
+ width="365" />
<text
type="string"
length="1"
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Description:"
- top="24"
width="100">
Description:
</text>
@@ -136,10 +132,10 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top|right"
height="52"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="Description"
top_delta="0"
- width="350"
+ width="365"
word_wrap="true" />
<text
type="string"
@@ -147,10 +143,10 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="LandType"
top="84"
- width="92">
+ width="100">
Type:
</text>
<text
@@ -159,7 +155,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="LandTypeText"
top_delta="0"
width="250">
@@ -171,10 +167,9 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="ContentRating"
- top="104"
- width="92">
+ width="100">
Rating:
</text>
<text
@@ -183,7 +178,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="ContentRatingText"
top_delta="0"
width="250">
@@ -195,10 +190,10 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Owner:"
top="124"
- width="92">
+ width="100">
Owner:
</text>
<text
@@ -207,71 +202,84 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left_delta="92"
+ left_pad="5"
name="OwnerText"
- top_delta="0"
- width="250">
+ width="240">
Leyla Linden
</text>
- <button
+ <button
+ follows="right"
+ height="16"
+ image_pressed="Info_Press"
+ image_unselected="Info_Over"
+ left_pad="3"
+ name="info_btn"
+ top_delta="-2"
+ width="16" />
+ <!-- <button
follows="left|top"
height="16"
- label="Profile..."
- label_selected="Profile..."
+ label="Profile"
layout="topleft"
left_pad="4"
name="Profile..."
- top_delta="0"
- width="90" />
+ width="90" />-->
<text
type="string"
length="1"
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Group:"
- top="144"
- width="92">
+ width="100">
Group:
</text>
+ <!--TODO: HOOK UP GROUP ICON-->
<text
enabled="false"
follows="left|top"
height="16"
+ left_pad="5"
layout="topleft"
- left_delta="92"
name="GroupText"
- top_delta="2"
- width="250" />
+ width="240" />
+ <button
+ follows="right"
+ height="16"
+ image_pressed="Info_Press"
+ image_unselected="Info_Over"
+ left_pad="3"
+ name="info_btn"
+ top_delta="-2"
+ width="16" />
<button
follows="left|top"
- height="16"
- label="Set..."
- label_selected="Set..."
+ height="23"
+ label="Set"
layout="topleft"
left_pad="4"
+ right="-10"
name="Set..."
- top_delta="-2"
- width="90" />
+ width="50" />
<check_box
enabled="false"
- height="16"
+ height="23"
label="Allow Deed to Group"
layout="topleft"
left="96"
name="check deed"
tool_tip="A group officer can deed this land to the group, so it will be supported by the group&apos;s land allocation."
top="164"
- width="116" />
+ width="146" />
<button
enabled="false"
follows="left|top"
- height="16"
- label="Deed..."
- label_selected="Deed..."
+ height="23S"
+ label="Deed"
layout="topleft"
- left_pad="138"
+ left_pad="2"
+ right="-10"
name="Deed..."
tool_tip="You may only deed land if you are an officer in the selected group."
top_delta="0"
@@ -284,7 +292,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
left="96"
name="check contrib"
tool_tip="When the land is deeded to the group, the former owner contributes enough land allocation to support it."
- top="184"
width="199" />
<text
type="string"
@@ -292,10 +299,9 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="For Sale:"
- top="204"
- width="92">
+ width="100">
For Sale:
</text>
<text
@@ -304,11 +310,10 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="Not for sale."
- top_delta="0"
width="186">
- Not for sale.
+ Not for sale
</text>
<text
type="string"
@@ -318,9 +323,8 @@ Go to World menu &gt; About Land or select another parcel to show its details.
layout="topleft"
left_delta="0"
name="For Sale: Price L$[PRICE]."
- top_delta="0"
width="226">
- Price: L$[PRICE] (L$[PRICE_PER_SQM]/m²).
+ Price: L$[PRICE] (L$[PRICE_PER_SQM]/m²)
</text>
<text
enabled="false"
@@ -329,17 +333,16 @@ Go to World menu &gt; About Land or select another parcel to show its details.
layout="topleft"
left_delta="0"
name="SalePending"
- top_pad="4"
- width="344" />
+ top_pad="6"
+ width="324" />
<button
follows="left|top"
- height="20"
- label="Sell Land..."
- label_selected="Sell Land..."
+ height="23"
+ label="Sell Land"
layout="topleft"
- left_delta="199"
+ left_pad="5"
+ right="-10"
name="Sell Land..."
- top_delta="0"
width="145" />
<text
type="string"
@@ -349,7 +352,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
layout="topleft"
left_delta="-199"
name="For sale to"
- top_delta="0"
+ top_delta="6"
width="186">
For sale to: [BUYER]
</text>
@@ -361,9 +364,9 @@ Go to World menu &gt; About Land or select another parcel to show its details.
layout="topleft"
left_delta="0"
name="Sell with landowners objects in parcel."
- top_pad="4"
+ top_pad="8"
width="186">
- Objects included in sale.
+ Objects included in sale
</text>
<text
type="string"
@@ -375,17 +378,17 @@ Go to World menu &gt; About Land or select another parcel to show its details.
name="Selling with no objects in parcel."
top_delta="0"
width="186">
- Objects not included in sale.
+ Objects not included in sale
</text>
<button
follows="left|top"
- height="20"
+ height="23"
label="Cancel Land Sale"
label_selected="Cancel Land Sale"
layout="topleft"
- left="295"
+ right="-10"
name="Cancel Land Sale"
- top="228"
+ left_pad="5"
width="145" />
<text
type="string"
@@ -393,10 +396,10 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Claimed:"
top="268"
- width="92">
+ width="100">
Claimed:
</text>
<text
@@ -405,7 +408,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="DateClaimText"
top_delta="0"
width="186">
@@ -417,10 +420,10 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="PriceLabel"
top="288"
- width="92">
+ width="100">
Area:
</text>
<text
@@ -429,7 +432,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="PriceText"
top_delta="0"
width="186">
@@ -441,10 +444,10 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Traffic:"
top="308"
- width="92">
+ width="100">
Traffic:
</text>
<text
@@ -453,7 +456,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="DwellText"
top_delta="0"
width="186">
@@ -462,31 +465,28 @@ Go to World menu &gt; About Land or select another parcel to show its details.
<button
enabled="false"
follows="left|top"
- height="20"
- label="Buy Land..."
- label_selected="Buy Land..."
+ height="23"
+ label="Buy Land"
layout="topleft"
- left="155"
+ left_delta="82"
name="Buy Land..."
top="328"
width="100" />
<button
enabled="false"
follows="left|top"
- height="20"
- label="Buy For Group..."
- label_selected="Buy For Group..."
+ height="23"
+ label="Buy For Group"
layout="topleft"
- left="260"
+ right="-10"
name="Buy For Group..."
top="352"
width="180" />
<button
enabled="false"
follows="left|top"
- height="20"
- label="Buy Pass..."
- label_selected="Buy Pass..."
+ height="23"
+ label="Buy Pass"
layout="topleft"
left_delta="-105"
name="Buy Pass..."
@@ -495,30 +495,27 @@ Go to World menu &gt; About Land or select another parcel to show its details.
width="100" />
<button
follows="left|top"
- height="20"
- label="Abandon Land..."
- label_selected="Abandon Land..."
+ height="23"
+ label="Abandon Land"
layout="topleft"
- left="260"
+ right="-10"
name="Abandon Land..."
top="328"
width="180" />
<button
follows="left|top"
- height="20"
- label="Reclaim Land..."
- label_selected="Reclaim Land..."
+ height="23"
+ label="Reclaim Land"
layout="topleft"
left_delta="0"
name="Reclaim Land..."
- top_delta="-48"
+ top_delta="-50"
width="180" />
<button
enabled="false"
follows="left|top"
- height="20"
- label="Linden Sale..."
- label_selected="Linden Sale..."
+ height="23"
+ label="Linden Sale"
layout="topleft"
left_delta="0"
name="Linden Sale..."
@@ -528,15 +525,13 @@ Go to World menu &gt; About Land or select another parcel to show its details.
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
- height="380"
- label="Covenant"
+ follows="all"
+ label="COVENANT"
layout="topleft"
- left_delta="-1"
+ left="0"
+ top="0"
help_topic="land_covenant_tab"
- name="land_covenant_panel"
- top_delta="-47"
- width="458">
+ name="land_covenant_panel">
<panel.string
name="can_resell">
Purchased land in this region may be resold.
@@ -557,13 +552,12 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="20"
+ height="16"
layout="topleft"
- left="5"
+ left="10"
mouse_opaque="false"
name="estate_section_lbl"
- top="0"
+ top="10"
width="100">
Estate:
</text>
@@ -571,38 +565,24 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
- left="10"
- mouse_opaque="false"
- name="estate_name_lbl"
- top="20"
- width="100">
- Name:
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
+ left_pad="0"
mouse_opaque="false"
name="estate_name_text"
top_delta="0"
- width="150">
+ width="260">
mainland
</text>
<text
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left="10"
mouse_opaque="false"
name="estate_owner_lbl"
- top="40"
width="100">
Owner:
</text>
@@ -610,55 +590,52 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
- left_pad="10"
+ left_pad="0"
mouse_opaque="false"
name="estate_owner_text"
- top_delta="0"
- width="150">
+ width="300">
(none)
</text>
<text_editor
type="string"
length="1"
enabled="false"
- follows="left|top|right|bottom"
- handle_edit_keys_directly="true"
- height="115"
+ follows="all"
+ handle_edit_keys_directly="true"
+ height="200"
layout="topleft"
- left_delta="0"
+ left="10"
max_length="65535"
name="covenant_editor"
- top_delta="20"
- width="330"
+ width="470"
word_wrap="true">
There is no Covenant provided for this Estate.
</text_editor>
<text
type="string"
length="1"
- follows="left|top"
- height="20"
+ follows="right|top"
+ height="16"
+ halign="right"
layout="topleft"
- left_delta="0"
+ right="-10"
+ top_pad="0"
mouse_opaque="false"
name="covenant_timestamp_text"
- top_pad="55"
- width="250">
+ width="460">
Last Modified Wed Dec 31 16:00:00 1969
</text>
<text
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="20"
+ height="16"
layout="topleft"
- left="5"
+ left="10"
mouse_opaque="false"
name="region_section_lbl"
- top="250"
width="100">
Region:
</text>
@@ -666,38 +643,23 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- mouse_opaque="false"
- name="region_name_lbl"
- top="270"
- width="100">
- Name:
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left_pad="10"
mouse_opaque="false"
name="region_name_text"
- top_delta="0"
width="150">
- leyla
+ EricaVille
</text>
<text
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left="10"
mouse_opaque="false"
name="region_landtype_lbl"
- top="290"
width="100">
Type:
</text>
@@ -705,12 +667,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left_pad="10"
mouse_opaque="false"
name="region_landtype_text"
- top_delta="0"
width="150">
Mainland / Homestead
</text>
@@ -718,12 +679,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left="10"
mouse_opaque="false"
name="region_maturity_lbl"
- top="310"
width="100">
Rating:
</text>
@@ -731,12 +691,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left_pad="10"
mouse_opaque="false"
name="region_maturity_text"
- top_delta="0"
width="150">
Adult
</text>
@@ -744,12 +703,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left="10"
mouse_opaque="false"
name="resellable_lbl"
- top="330"
width="100">
Resale:
</text>
@@ -757,12 +715,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="16"
layout="topleft"
left_pad="10"
mouse_opaque="false"
name="resellable_clause"
- top_delta="0"
width="330">
Land in this region may not be resold.
</text>
@@ -770,12 +727,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
type="string"
length="1"
follows="left|top"
- height="20"
+ height="30"
layout="topleft"
left="10"
mouse_opaque="false"
name="changeable_lbl"
- top="350"
width="100">
Subdivide:
</text>
@@ -788,22 +744,20 @@ Go to World menu &gt; About Land or select another parcel to show its details.
left_pad="10"
mouse_opaque="false"
name="changeable_clause"
- top_delta="0"
+ word_wrap="true"
width="330">
Land in this region may not be joined/subdivided.
</text>
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
- height="380"
- label="Objects"
+ follows="all"
+ label="OBJECTS"
layout="topleft"
- left_delta="0"
+ left="0"
+ top="0"
help_topic="land_objects_tab"
- name="land_objects_panel"
- top_delta="-47"
- width="458">
+ name="land_objects_panel">
<panel.string
name="objects_available_text">
[COUNT] out of [MAX] ([AVAILABLE] available)
@@ -818,7 +772,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="parcel_object_bonus"
top="4"
visible="false"
@@ -835,7 +789,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
name="Simulator primitive usage:"
top_pad="4"
width="364">
- Simulator primitive usage:
+ Primative usage:
</text>
<text
type="string"
@@ -855,11 +809,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Primitives parcel supports:"
top="44"
width="152">
- Primitives parcel supports:
+ Prims parcel supports:
</text>
<text
type="string"
@@ -879,11 +833,11 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Primitives on parcel:"
top="64"
width="152">
- Primitives on parcel:
+ Prims on parcel:
</text>
<text
type="string"
@@ -925,7 +879,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="100"
enabled="false"
follows="left|top"
- height="16"
+ height="20"
label="Show"
label_selected="Show"
layout="topleft"
@@ -936,9 +890,8 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="100"
enabled="false"
follows="left|top"
- height="16"
- label="Return..."
- label_selected="Return..."
+ height="20"
+ label="Return"
layout="topleft"
name="ReturnOwner..."
right="-10"
@@ -972,8 +925,8 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="120"
enabled="false"
follows="left|top"
- height="16"
label="Show"
+ height="20"
label_selected="Show"
layout="topleft"
name="ShowGroup"
@@ -983,9 +936,8 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="120"
enabled="false"
follows="left|top"
- height="16"
- label="Return..."
- label_selected="Return..."
+ height="20"
+ label="Return"
layout="topleft"
name="ReturnGroup..."
right="-10"
@@ -1019,7 +971,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="140"
enabled="false"
follows="left|top"
- height="16"
+ height="20"
label="Show"
label_selected="Show"
layout="topleft"
@@ -1030,9 +982,8 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="140"
enabled="false"
follows="left|top"
- height="16"
- label="Return..."
- label_selected="Return..."
+ height="20"
+ label="Return"
layout="topleft"
name="ReturnOther..."
right="-10"
@@ -1068,7 +1019,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Autoreturn"
top="164"
width="294">
@@ -1091,44 +1042,43 @@ Go to World menu &gt; About Land or select another parcel to show its details.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Object Owners:"
top="184"
width="104">
Object Owners:
</text>
- <button
- follows="left|top"
- height="16"
- label="Refresh List"
- label_selected="Refresh List"
- layout="topleft"
- left_delta="104"
- name="Refresh List"
- top_delta="0"
- width="106" />
+ <button
+ follows="top|right"
+ height="20"
+ image_overlay="Refresh_Off"
+ layout="topleft"
+ name="Refresh List"
+ left_pad="5"
+ right="-183"
+ tool_tip="Refresh Object List"
+ width="20" />
<button
enabled="false"
follows="left|top"
- height="16"
- label="Return objects..."
- label_selected="Return objects..."
+ height="20"
+ label="Return Objects"
layout="topleft"
left_pad="6"
name="Return objects..."
top_delta="0"
+ right="-10"
width="164" />
<name_list
column_padding="0"
draw_heading="true"
- follows="left|top|right|bottom"
- height="165"
+ follows="all"
+ height="190"
layout="topleft"
- left="4"
+ left="10"
name="owner list"
name_column="name"
- top="210"
- width="450">
+ width="470">
<name_list.columns
label="Type"
name="type"
@@ -1153,15 +1103,13 @@ Go to World menu &gt; About Land or select another parcel to show its details.
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
- height="333"
- label="Options"
+ follows="all"
+ label="OPTIONS"
layout="topleft"
- left_delta="0"
help_topic="land_options_tab"
name="land_options_panel"
- top_delta="31"
- width="458">
+ left="0"
+ top="0">
<panel.string
name="search_enabled_tooltip">
Let people see this parcel in search results
@@ -1177,7 +1125,7 @@ Only large parcels can be listed in search.
</panel.string>
<panel.string
name="mature_check_mature">
- Mature Content
+ Moderate Content
</panel.string>
<panel.string
name="mature_check_adult">
@@ -1185,7 +1133,7 @@ Only large parcels can be listed in search.
</panel.string>
<panel.string
name="mature_check_mature_tooltip">
- Your parcel information or content is considered mature.
+ Your parcel information or content is considered moderate.
</panel.string>
<panel.string
name="mature_check_adult_tooltip">
@@ -1207,11 +1155,12 @@ Only large parcels can be listed in search.
type="string"
length="1"
follows="left|top"
+ text_color="white"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="allow_label"
- top="4"
+ top="10"
width="278">
Allow other residents to:
</text>
@@ -1222,44 +1171,40 @@ Only large parcels can be listed in search.
left="14"
name="edit land check"
tool_tip="If checked, anyone can terraform your land. It is best to leave this unchecked, as you can always edit your own land."
- top="24"
- width="268" />
+ top_pad="4"
+ width="147i" />
<check_box
height="16"
label="Fly"
layout="topleft"
- left_delta="0"
name="check fly"
tool_tip="If checked, Residents can fly on your land. If unchecked, they can only fly into and over your land."
- top_pad="4"
- width="268" />
+ left_pad="4"
+ width="150" />
<text
type="string"
length="1"
follows="left|top"
height="16"
layout="topleft"
- left="178"
+ left="14"
name="allow_label2"
- top="24"
- width="104">
- Create Objects:
+ width="150">
+ Build:
</text>
<check_box
height="16"
- label="All Residents"
+ label="Everyone"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="edit objects check"
- top_delta="0"
- width="104" />
+ width="120" />
<check_box
height="16"
label="Group"
layout="topleft"
- left_delta="100"
+ left_pad="2"
name="edit group objects check"
- top_delta="0"
width="70" />
<text
type="string"
@@ -1267,17 +1212,16 @@ Only large parcels can be listed in search.
follows="left|top"
height="16"
layout="topleft"
- left="178"
+ left="14"
name="allow_label3"
- top="44"
- width="124">
+ width="150">
Object Entry:
</text>
<check_box
height="16"
- label="All Residents"
+ label="Everyone"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="all object entry check"
top_delta="0"
width="120" />
@@ -1285,7 +1229,7 @@ Only large parcels can be listed in search.
height="16"
label="Group"
layout="topleft"
- left_delta="100"
+ left_pad="2"
name="group object entry check"
top_delta="0"
width="70" />
@@ -1295,17 +1239,16 @@ Only large parcels can be listed in search.
follows="left|top"
height="16"
layout="topleft"
- left="178"
+ left="14"
name="allow_label4"
- top="64"
- width="124">
+ width="150">
Run Scripts:
</text>
<check_box
height="16"
- label="All Residents"
+ label="Everyone"
layout="topleft"
- left_delta="92"
+ left_pad="2"
name="check other scripts"
top_delta="0"
width="120" />
@@ -1313,19 +1256,19 @@ Only large parcels can be listed in search.
height="16"
label="Group"
layout="topleft"
- left_delta="100"
+ left_pad="2"
name="check group scripts"
top_delta="0"
width="70" />
<text
type="string"
+ text_color="white"
length="1"
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="land_options_label"
- top="84"
width="278">
Land Options:
</text>
@@ -1336,33 +1279,31 @@ Only large parcels can be listed in search.
left="14"
name="check safe"
tool_tip="If checked, sets the land to Safe, disabling damage combat. If cleared, damage combat is enabled."
- top="104"
- width="268" />
+ top_pad="5"
+ width="200" />
<check_box
height="16"
label="No Pushing"
layout="topleft"
- left_delta="164"
+ left_pad="5"
name="PushRestrictCheck"
tool_tip="Prevents scripts from pushing. Checking this option may be useful for preventing disruptive behavior on your land."
top_delta="0"
width="119" />
<check_box
height="16"
- label="Show Place in Search (L$30/week) under"
+ label="Show Place in Search (L$30/week)"
layout="topleft"
left="14"
name="ShowDirectoryCheck"
tool_tip="Let people see this parcel in search results"
- top="124"
- width="268" />
+ width="430" />
<combo_box
enabled="false"
- height="18"
+ height="20"
layout="topleft"
- left_delta="241"
+ left="30"
name="land category with adult"
- top_delta="-2"
visible="false"
width="130">
<combo_box.item
@@ -1420,11 +1361,10 @@ Only large parcels can be listed in search.
</combo_box>
<combo_box
enabled="false"
- height="18"
+ height="20"
layout="topleft"
- left_delta="0"
+ left="30"
name="land category"
- top_delta="0"
visible="false"
width="130">
<combo_box.item
@@ -1478,12 +1418,12 @@ Only large parcels can be listed in search.
</combo_box>
<check_box
height="16"
- label="Mature Content"
+ label="Moderate Content"
layout="topleft"
left="14"
name="MatureCheck"
+ top="177"
tool_tip=" "
- top="144"
width="107" />
<text
type="string"
@@ -1491,74 +1431,75 @@ Only large parcels can be listed in search.
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="10"
name="Snapshot:"
- top="164"
- width="278">
+ text_color="white"
+ top="220"
+ width="200">
Snapshot:
</text>
<texture_picker
follows="left|top"
- height="135"
+ height="150"
layout="topleft"
- left_delta="72"
+ left="14"
name="snapshot_ctrl"
tool_tip="Click to choose a picture"
- top_delta="0"
- width="180" />
+ width="195" />
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="30"
layout="topleft"
- left="4"
+ left="220"
+ top="180"
+ text_color="white"
name="landing_point"
- top="287"
- width="278">
+ word_wrap="true"
+ width="200">
Landing Point: [LANDING]
</text>
<button
- follows="left|top"
- height="16"
+ follows="right|top"
+ height="23"
label="Set"
label_selected="Set"
layout="topleft"
- left_delta="232"
name="Set"
+ right="-68"
tool_tip="Sets the landing point where visitors arrive. Sets to your avatar&apos;s location inside this parcel."
- top_delta="0"
width="50" />
<button
- follows="left|top"
- height="16"
+ follows="right|top"
+ height="23"
label="Clear"
label_selected="Clear"
layout="topleft"
left_pad="5"
name="Clear"
tool_tip="Clear the landing point"
- top_delta="0"
+ right="-10"
width="50" />
<text
type="string"
length="1"
+ text_color="white"
follows="left|top"
height="16"
layout="topleft"
- left="4"
+ left="220"
+ top_pad="10"
name="Teleport Routing: "
- top="307"
- width="278">
+ width="200">
Teleport Routing:
</text>
<combo_box
- height="18"
+ height="23"
layout="topleft"
- left_delta="116"
name="landing type"
+ top_pad="3"
tool_tip="Teleport Routing -- select how to handle teleports onto your land"
- top_delta="0"
width="120">
<combo_box.item
enabled="true"
@@ -1579,34 +1520,31 @@ Only large parcels can be listed in search.
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
- height="363"
- label="Media"
+ follows="all"
+ label="MEDIA"
layout="topleft"
- left_delta="0"
+ left="0"
+ top="0"
help_topic="land_media_tab"
- name="land_media_panel"
- top_delta="1"
- width="458">
+ name="land_media_panel">
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
left="10"
name="with media:"
- top="9"
- width="65">
+ top="10"
+ width="100">
Type:
</text>
<combo_box
- height="18"
+ height="20"
layout="topleft"
- left_pad="5"
+ left_pad="0"
name="media type"
tool_tip="Specify if the URL is a movie, web page, or other media"
- top_delta="-2"
width="120" />
<text
follows="left|top"
@@ -1614,79 +1552,70 @@ Only large parcels can be listed in search.
layout="topleft"
left_pad="10"
name="mime_type"
- top_delta="2"
width="200" />
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
left="10"
name="at URL:"
- top="29"
- width="65">
+ width="100">
Home URL:
</text>
<line_editor
- bottom_delta="0"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
- left="80"
+ left_pad="0"
max_length="255"
name="media_url"
- right="-80"
select_on_focus="true"
- text_readonly_color="0.576471 0.662745 0.835294 1" />
+ width="300" />
<button
- follows="left|top"
- height="16"
- label="Set..."
- label_selected="Set..."
+ follows="right|top"
+ height="22"
+ label="Set"
layout="topleft"
- left_pad="8"
+ left_pad="5"
+ right="-10"
name="set_media_url"
- top_delta="0"
- width="60" />
+ width="50" />
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
left="10"
name="CurrentURL:"
- top="49"
- width="65">
+ width="100">
Current URL:
</text>
+ <button
+ follows="top|right"
+ height="20"
+ image_overlay="Refresh_Off"
+ layout="topleft"
+ name="reset_media_url"
+ left_pad="0"
+ tool_tip="Refresh URL"
+ width="20" />
<text
follows="left|top"
height="16"
layout="topleft"
- left_pad="5"
+ left_pad="10"
name="current_url"
- top_delta="0"
width="300" />
- <button
- follows="left|top"
- height="16"
- label="Reset..."
- label_selected="Reset..."
- layout="topleft"
- left_pad="6"
- name="reset_media_url"
- top_delta="0"
- width="60" />
<check_box
height="16"
label="Hide URL"
layout="topleft"
- left="100"
+ left="110"
name="hide_media_url"
tool_tip="Checking this option will hide the media url to any non-authorized viewers of this parcel information. Note this is not available for HTML types."
- top="89"
width="200" />
<text
type="string"
@@ -1696,23 +1625,20 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="Description:"
- top="49"
width="364">
Description:
</text>
<line_editor
- border_style="line"
- border_thickness="1"
- bottom_delta="0"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
- left="80"
+ left="110"
max_length="255"
name="url_description"
- right="-80"
select_on_focus="true"
- tool_tip="Text displayed next to play/load button" />
+ tool_tip="Text displayed next to play/load button"
+ top_delta="10"
+ width="300" />
<text
type="string"
length="1"
@@ -1721,10 +1647,10 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="Media texture:"
- top="69"
- width="364">
- Replace
-Texture:
+ top_pad="10"
+ width="364"
+ word_wrap="true">
+ Replace Texture:
</text>
<texture_picker
allow_no_texture="true"
@@ -1732,46 +1658,44 @@ Texture:
follows="left|top"
height="80"
layout="topleft"
- left_delta="70"
+ left="110"
name="media texture"
tool_tip="Click to choose a picture"
- top_delta="0"
+ top_delta="10"
width="64" />
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="80"
layout="topleft"
- left_delta="75"
+ left_pad="8"
name="replace_texture_help"
- top="85"
- width="270">
- Objects using this texture will show the movie or
- web page after you click the play arrow.
+ width="300"
+ word_wrap="true">
+ Objects using this texture will show the movie or web page after you click the play arrow.
- Select the thumbnail to choose a different texture.
+Select the thumbnail to choose a different texture.
</text>
<check_box
height="16"
label="Auto scale"
layout="topleft"
- left_delta="70"
+ left="110"
name="media_auto_scale"
+ top_pad="0"
tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."
- top_delta="0"
width="200" />
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
- left="85"
+ left="10"
name="media_size"
tool_tip="Size to render Web media, leave 0 for default."
- top="185"
- width="85">
+ width="100">
Size:
</text>
<spinner
@@ -1779,11 +1703,11 @@ Texture:
enabled="false"
follows="left|top"
halign="right"
- height="16"
+ height="20"
increment="1"
initial_value="0"
layout="topleft"
- left_delta="65"
+ left_pad="0"
max_val="1024"
name="media_size_width"
tool_tip="Size to render Web media, leave 0 for default."
@@ -1794,7 +1718,7 @@ Texture:
enabled="false"
follows="left|top"
halign="right"
- height="16"
+ height="20"
increment="1"
initial_value="0"
layout="topleft"
@@ -1811,7 +1735,7 @@ Texture:
follows="left|top"
height="16"
layout="topleft"
- left_delta="70"
+ left_pad="5"
name="pixels"
right="-10">
pixels
@@ -1824,15 +1748,15 @@ Texture:
layout="topleft"
left="10"
name="Options:"
- top="237"
- width="292">
+ top_pad="8"
+ width="100">
Options:
</text>
<check_box
height="16"
label="Loop"
layout="topleft"
- left_delta="70"
+ left_pad="0"
name="media_loop"
tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning."
top_delta="0"
@@ -1840,15 +1764,13 @@ Texture:
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
- height="363"
- label="Audio"
+ follows="all"
+ label="SOUND"
layout="topleft"
- left_delta="0"
+ left="0"
+ top="0"
help_topic="land_audio_tab"
- name="land_audio_panel"
- top_delta="1"
- width="458">
+ name="land_audio_panel">
<text
type="string"
length="1"
@@ -1856,21 +1778,19 @@ Texture:
height="16"
layout="topleft"
left="10"
+ top="10"
name="MusicURL:"
- top="225"
width="364">
Music URL:
</text>
<line_editor
- border_style="line"
- border_thickness="1"
- bottom_delta="0"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
- left="80"
+ left="100"
max_length="255"
name="music_url"
+ top_pad="0"
right="-15"
select_on_focus="true" />
<text
@@ -1881,17 +1801,16 @@ Texture:
layout="topleft"
left="10"
name="Sound:"
- top="265"
- width="364">
+ top_pad="10"
+ width="100">
Sound:
</text>
<check_box
height="16"
label="Restrict gesture and object sounds to this parcel"
layout="topleft"
- left_delta="70"
name="check sound local"
- top_delta="0"
+ left_pad="0"
width="292" />
<text
type="string"
@@ -1902,47 +1821,42 @@ Texture:
left="10"
mouse_opaque="false"
name="Voice settings:"
- top="305"
- width="364">
+ top_pad="10"
+ width="100">
Voice:
</text>
<check_box
- height="54"
+ height="16"
label="Enable Voice"
layout="topleft"
- left="80"
+ left_pad="0"
name="parcel_enable_voice_channel"
- top="267"
- width="463" />
+ width="300" />
<check_box
enabled="false"
- height="54"
+ height="16"
label="Enable Voice (established by the Estate)"
layout="topleft"
- left_delta="0"
+ left="110"
name="parcel_enable_voice_channel_is_estate_disabled"
- top_delta="0"
- width="463" />
+ width="300" />
<check_box
- height="54"
+ height="16"
label="Restrict Voice to this parcel"
layout="topleft"
- left="100"
+ left="110"
name="parcel_enable_voice_channel_parcel"
- top="287"
- width="443" />
+ width="300" />
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
- height="333"
- label="Access"
+ follows="all"
+ label="ACCESS"
layout="topleft"
- left_delta="0"
+ left="0"
+ top="0"
help_topic="land_access_tab"
- name="land_access_panel"
- top_delta="31"
- width="458">
+ name="land_access_panel">
<panel.string
name="estate_override">
One or more of these options is set at the estate level
@@ -1951,13 +1865,13 @@ Texture:
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="20"
+ height="16"
layout="topleft"
- left="8"
+ left="10"
name="Limit access to this parcel to:"
- top="4"
- width="278">
+ text_color="White"
+ top="10"
+ width="400">
Access To This Parcel
</text>
<check_box
@@ -2012,7 +1926,7 @@ Texture:
width="278" />
<check_box
enabled="false"
- height="16"
+ height="22"
label="Sell passes to:"
layout="topleft"
left_delta="0"
@@ -2021,7 +1935,7 @@ Texture:
top_pad="4"
width="120" />
<combo_box
- height="16"
+ height="20"
layout="topleft"
left_pad="22"
name="pass_combo"
@@ -2039,7 +1953,7 @@ Texture:
<spinner
enabled="false"
follows="left|top"
- height="16"
+ height="22"
increment="1"
initial_value="10"
label="Price in L$:"
@@ -2049,12 +1963,12 @@ Texture:
max_val="500"
min_val="1"
name="PriceSpin"
- top="149"
- width="180" />
+ top_pad="5"
+ width="200" />
<spinner
enabled="false"
follows="left|top"
- height="16"
+ height="22"
increment="0.25"
initial_value="1"
label="Hours of access:"
@@ -2064,8 +1978,15 @@ Texture:
max_val="24"
min_val="0.01"
name="HoursSpin"
- top_pad="4"
- width="180" />
+ top_pad="5"
+ width="200" />
+ <panel
+ name="Allowed_layout_panel"
+ follows="top|left"
+ left="10"
+ height="170"
+ top_pad="8"
+ width="240">
<text
type="string"
length="1"
@@ -2073,44 +1994,48 @@ Texture:
height="16"
label="Always Allow"
layout="topleft"
- left="20"
+ left="0"
name="AllowedText"
- top="204"
- width="195">
+ top="0"
+ width="230">
Allowed Residents
</text>
<name_list
column_padding="0"
follows="top|bottom"
heading_height="14"
- height="80"
+ height="120"
layout="topleft"
- left_delta="0"
+ left="0"
multi_select="true"
name="AccessList"
tool_tip="([LISTED] listed, [MAX] max)"
- top_pad="4"
- width="195" />
+ width="240" />
<button
follows="bottom"
- height="16"
- label="Add..."
- label_selected="Add..."
+ height="23"
+ label="Add"
layout="topleft"
- left_delta="5"
+ left="0"
name="add_allowed"
- top="308"
- width="80" />
+ width="100" />
<button
follows="bottom"
- height="16"
+ height="23"
label="Remove"
label_selected="Remove"
layout="topleft"
- left_pad="20"
+ left_pad="10"
name="remove_allowed"
- top_delta="0"
- width="80" />
+ right="-1"
+ width="100" />
+ </panel>
+ <panel
+ name="Banned_layout_panel"
+ follows="top|right"
+ height="170"
+ width="240"
+ left_pad="8">
<text
type="string"
length="1"
@@ -2118,45 +2043,43 @@ Texture:
height="16"
label="Ban"
layout="topleft"
- left="240"
+ left="0"
name="BanCheck"
- top="204"
- width="195">
+ top="0"
+ width="200">
Banned Residents
</text>
<name_list
column_padding="0"
follows="top|bottom"
heading_height="14"
- height="80"
+ height="120"
layout="topleft"
- left_delta="0"
+ left="0"
multi_select="true"
name="BannedList"
tool_tip="([LISTED] listed, [MAX] max)"
- top_pad="4"
- width="195" />
+ width="240" />
<button
follows="bottom"
- height="16"
- label="Add..."
- label_selected="Add..."
+ height="23"
+ label="Add"
layout="topleft"
- left_delta="5"
+ left="0"
name="add_banned"
- top="308"
- width="80" />
+ width="100" />
<button
enabled="false"
follows="bottom"
- height="16"
+ height="23"
label="Remove"
label_selected="Remove"
layout="topleft"
- left_pad="20"
+ left_pad="10"
name="remove_banned"
- top_delta="0"
- width="80" />
+ right="-1"
+ width="100" />
+ </panel>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
index 0856049374..c8aab2c1e0 100644
--- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater
+ border_visible = "false"
+ border_drop_shadow_visible = "false"
+ drop_shadow_visible = "false"
+ border = "false"
+ bg_opaque_image="Inspector_Background"
+ bg_alpha_image="Toast_Background"
+ bg_alpha_color="0 0 0 0"
legacy_header_height="18"
can_minimize="false"
can_tear_off="false"
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index 91ca3ef27a..f1a75bfcb4 100644
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -309,7 +309,7 @@
name="Indecency__Mature_content_in_PG_region"
value="60" />
<combo_box.item
- label="Indecency &gt; Inappropriate content or conduct in a Mature region"
+ label="Indecency &gt; Inappropriate content or conduct in a Moderate region"
name="Indecency__Inappropriate_content_in_Mature_region"
value="69" />
<combo_box.item
diff --git a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml
new file mode 100644
index 0000000000..b0aa5c7c4f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_resize="true"
+ height="600"
+ layout="topleft"
+ name="floater_test_text_editor"
+ width="800">
+ <text_editor
+ height="50"
+ follows="top|left|bottom"
+ layout="topleft"
+ left="10"
+ name="test_text_editor"
+ tool_tip="text editor"
+ top="25"
+ width="200">
+ Text Editor
+ </text_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
index 033070607b..8fc2677cbe 100644
--- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
@@ -21,6 +21,21 @@ Third line of multiple lines
Fourth line of multiple lines
Fifth line of multiple lines
</text>
+ <text
+ clip_partial="true"
+ top_pad="10"
+ left="10"
+ width="267"
+ height="28"
+ layout="topleft"
+ follows="right|left"
+ text_color="white"
+ use_ellipses="true"
+ word_wrap="true"
+ mouse_opaque="false"
+ name="title" >
+ This text has word_wrap set true, use_ellipses set true, and clip_partial set true, so it should wrap around, spilling over to the last line, then clip the last partial line and show ellipses to indicate there is more text
+ </text>
<text
font="SansSerif"
@@ -28,7 +43,7 @@ Fifth line of multiple lines
height="10"
layout="topleft"
left_delta="0"
- top_pad="40"
+ top_pad="10"
width="300">
SansSerif BOLD
</text>
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index c0eca91a46..9c11a88c34 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -393,21 +393,21 @@
</panel>
<panel
- follows="right|top|bottom"
- height="270"
- top_pad="0"
- width="238">
- <icon
- color="0.5 0 0 1"
- follows="top|right"
- height="16"
- image_name="map_track_16.tga"
- layout="topleft"
- left="5"
- top="11"
- mouse_opaque="true"
- name="friends_icon"
- width="16" />
+ follows="right|top|bottom"
+ height="270"
+ top_pad="0"
+ width="238">
+ <icon
+ color="0.5 0 0 1"
+ follows="top|right"
+ height="16"
+ image_name="map_track_16.tga"
+ layout="topleft"
+ left="5"
+ top="11"
+ mouse_opaque="true"
+ name="friends_icon"
+ width="16" />
<combo_box
allow_text_entry="true"
follows="top|right"
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index dd3cf079db..8349f594d9 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -19,7 +19,7 @@
<!-- Allowed fields include:
[BORN_ON] ("12/3/2008")
[SL_PROFILE] (Second Life profile),
- [RW_PROFILE] (real world profile),
+ [RW_PROFILE] (real world profile),
[ACCTTYPE] ("Resident"),
[PAYMENTINFO] ("Payment Info on File"),
[AGE] ("1 year 2 months")
@@ -32,10 +32,6 @@
name="Details">
[SL_PROFILE]
</string>
- <string
- name="Partner">
- Partner: [PARTNER]
- </string>
<text
follows="all"
font="SansSerifLarge"
@@ -52,31 +48,20 @@
height="16"
left="8"
name="user_subtitle"
- font="SansSerifSmall"
- text_color="White"
+ font="SansSerifSmall"
+ text_color="White"
value="11 Months, 3 days old"
width="175"
use_ellipses="true" />
<text
follows="all"
- height="25"
- left="8"
+ height="35"
+ left="8"
name="user_details"
word_wrap="true"
top_pad="6"
width="220">This is my second life description and I really think it is great.
</text>
- <text
- follows="all"
- height="13"
- left="8"
- name="user_partner"
- top_pad="3"
- width="220"
- use_ellipses="true"
- word_wrap="false">
- Erica Linden
- </text>
<slider
follows="top|left"
height="23"
@@ -113,8 +98,9 @@
name="avatar_icon"
top="10"
width="38" />
- <!-- Overlapping buttons for default actions
- llinspectavatar.cpp makes visible the most likely default action -->
+<!-- Overlapping buttons for default actions
+ llinspectavatar.cpp makes visible the most likely default action
+-->
<button
follows="bottom|left"
height="20"
@@ -131,9 +117,8 @@
top_delta="0"
name="im_btn"
width="80"
- commit_callback.function="InspectAvatar.IM"
- />
- <button
+ commit_callback.function="InspectAvatar.IM"/>
+ <button
follows="top|left"
height="20"
label="More"
@@ -153,7 +138,7 @@
right="-5"
top_delta="0"
width="35" />
- <menu_button
+ <menu_button
follows="top|left"
height="20"
image_overlay="OptionsMenu_Off"
diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml
index 3929e3277a..37ae5a64d7 100644
--- a/indra/newview/skins/default/xui/en/inspect_group.xml
+++ b/indra/newview/skins/default/xui/en/inspect_group.xml
@@ -9,7 +9,7 @@
bg_opaque_image="Inspector_Background"
can_close="false"
can_minimize="false"
- height="148"
+ height="158"
layout="topleft"
name="inspect_group"
single_instance="true"
@@ -49,6 +49,7 @@
height="45"
left="8"
name="group_details"
+ use_ellipses="true"
top_pad="6"
width="220"
word_wrap="true">
@@ -60,7 +61,7 @@ Fear the moose! Fear it! And the mongoose too!
height="13"
left="8"
name="group_cost"
- top_pad="3"
+ top_pad="13"
width="220">
L$123 to join
</text>
@@ -78,7 +79,7 @@ L$123 to join
height="23"
label="Join"
left="8"
- top="266"
+ top="286"
name="join_btn"
width="103"
commit_callback.function="InspectGroup.Join"/>
@@ -87,7 +88,7 @@ L$123 to join
height="23"
label="Leave"
left="8"
- top="266"
+ top="286"
name="leave_btn"
width="103"
commit_callback.function="InspectGroup.Leave"/>
@@ -96,7 +97,7 @@ L$123 to join
height="23"
label="View Profile"
name="view_profile_btn"
- top="266"
+ top="286"
left="117"
width="103"
commit_callback.function="InspectGroup.ViewProfile" />
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index eee1134d15..a11ebf5af8 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -10,22 +10,16 @@
<layout_stack border_size="0"
follows="all"
mouse_opaque="false"
- height="768"
+ height="749"
name="menu_stack"
orientation="vertical"
- top="0">
+ top="19">
<layout_panel auto_resize="false"
- height="84"
+ height="65"
mouse_opaque="false"
- name="nav_and_status_bar_region"
+ name="nav_bar_container"
width="1024"
visible="false">
- <panel follows="left|right|bottom"
- left="0"
- name="nav_bar_container"
- right="1024"
- top="19"
- height="65"/>
</layout_panel>
<layout_panel auto_resize="true"
follows="all"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index 435a3e6d34..7a3e91d5a1 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -76,7 +76,7 @@
function="Inventory.GearDefault.Custom.Action"
parameter="empty_lostnfound" />
</menu_item_call>
- <menu_item_call
+ <menu_item_call
label="Save Texture As"
layout="topleft"
name="Save Texture As">
@@ -87,4 +87,15 @@
function="Inventory.GearDefault.Enable"
parameter="save_texture" />
</menu_item_call>
+ <menu_item_call
+ label="Find All Links"
+ layout="topleft"
+ name="Find All Links">
+ <on_click
+ function="Inventory.GearDefault.Custom.Action"
+ parameter="find_links" />
+ <on_enable
+ function="Inventory.GearDefault.Enable"
+ parameter="find_links" />
+ </menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 07940e18b6..a22dc80f4e 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -185,21 +185,42 @@
<menu_item_call.on_click
function="Advanced.ShowSideTray" />
</menu_item_call>
+ <menu
+ label="UI Tests"
+ name="UI Tests"
+ tear_off="true">
+ <menu_item_call
+ label="Textbox"
+ name="Textbox"
+ shortcut="control|1">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="test_textbox" />
+ </menu_item_call>
+ <menu_item_call
+ label="Text Editor"
+ name="Text Editor"
+ shortcut="control|2">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="test_text_editor" />
+ </menu_item_call>
<menu_item_call
- label="Widget Test"
- name="Widget Test"
+ label="Widgets"
+ name="Widgets"
shortcut="control|shift|T">
- <menu_item_call.on_click
- function="ShowFloater"
- parameter="test_widgets" />
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="test_widgets" />
</menu_item_call>
<menu_item_call
- label="Inspectors Test"
- name="Inspectors Test">
- <menu_item_call.on_click
- function="ShowFloater"
- parameter="test_inspectors" />
+ label="Inspectors"
+ name="Inspectors">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="test_inspectors" />
</menu_item_call>
+ </menu>
<menu_item_check
label="Reg In Client Test (restart)"
name="Reg In Client Test (restart)">
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
index 643336cf6c..c3a2540b2e 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -27,7 +27,6 @@
function="Avatar.IM" />
</menu_item_call>
<menu_item_call
- enabled="false"
label="Call"
layout="topleft"
name="Call">
diff --git a/indra/newview/skins/default/xui/en/menu_text_editor.xml b/indra/newview/skins/default/xui/en/menu_text_editor.xml
index 7c9e6f0796..ecd96088e7 100644
--- a/indra/newview/skins/default/xui/en/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/en/menu_text_editor.xml
@@ -32,10 +32,10 @@
function="Edit.EnablePaste" />
</menu_item_call>
<menu_item_call
- label="Delete"
- layout="topleft"
- name="Delete"
- shortcut="Del">
+ label="Delete"
+ layout="topleft"
+ name="Delete"
+ shortcut="Del">
<menu_item_call.on_click
function="Edit.Delete" />
<menu_item_call.on_enable
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ae8a1599a9..37136af680 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3268,6 +3268,17 @@
</menu>
<menu_item_separator
layout="topleft" />
+ <menu_item_check
+ label="HTTP Textures"
+ layout="topleft"
+ name="HTTP Textures">
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="ImagePipelineUseHTTP" />
+ <menu_item_check.on_click
+ function="ToggleControl"
+ parameter="ImagePipelineUseHTTP" />
+ </menu_item_check>
<menu_item_call
label="Compress Images"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index f48cc6d4bf..d8eb65322b 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3480,7 +3480,7 @@ Publish this classified now for L$[AMOUNT]?
icon="alertmodal.tga"
name="SetClassifiedMature"
type="alertmodal">
-Does this classified contain Mature content?
+Does this classified contain Moderate content?
<usetemplate
canceltext="Cancel"
name="yesnocancelbuttons"
@@ -3492,7 +3492,7 @@ Does this classified contain Mature content?
icon="alertmodal.tga"
name="SetGroupMature"
type="alertmodal">
-Does this group contain Mature content?
+Does this group contain Moderate content?
<usetemplate
canceltext="Cancel"
name="yesnocancelbuttons"
@@ -4568,7 +4568,7 @@ Some terms in your search query were excluded due to content restrictions as cla
icon="notifytip.tga"
name="NoContentToSearch"
type="notifytip">
-Please select at least one type of content to search (PG, Mature, or Adult).
+Please select at least one type of content to search (General, Moderate, or Adult).
</notification>
<notification
diff --git a/indra/newview/skins/default/xui/en/panel_classified.xml b/indra/newview/skins/default/xui/en/panel_classified.xml
index 18d12aef70..9622313786 100644
--- a/indra/newview/skins/default/xui/en/panel_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified.xml
@@ -111,11 +111,11 @@
name="select_mature"
value="Select" />
<combo_box.item
- label="Mature Content"
+ label="Moderate Content"
name="mature"
value="Mature" />
<combo_box.item
- label="PG Content"
+ label="General Content"
name="pg"
value="PG" />
</combo_box>
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index df889e87c3..5c594d3f14 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -11,11 +11,11 @@
width="333">
<panel.string
name="type_mature">
- Mature
+ Moderate
</panel.string>
<panel.string
name="type_pg">
- PG Content
+ General Content
</panel.string>
<button
follows="top|right"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index 2f3277804f..b5760e977f 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -189,12 +189,12 @@
<combo_item
name="mature_ci"
value="Mature">
- Mature Content
+ Moderate Content
</combo_item>
<combo_item
name="pg_ci"
value="PG">
- PG Content
+ General Content
</combo_item>
</combo_box>
<spinner
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index 4c30db4034..043edd10e1 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -1,14 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="all"
- height="378"
+ height="395"
label="General"
class="panel_group_general"
layout="topleft"
- left="0"
- top="0"
name="general_tab"
- width="310">
+ width="323">
<panel.string
name="help_text">
The General tab contains general information about this group, a list of members, general Group Preferences and member options.
@@ -32,7 +30,7 @@ Hover your mouse over the options for more help.
max_length="511"
name="charter"
top="5"
- width="305"
+ right="-1"
word_wrap="true">
Group Charter
</text_editor>
@@ -41,12 +39,12 @@ Hover your mouse over the options for more help.
draw_heading="true"
follows="left|top"
heading_height="20"
- height="130"
+ height="156"
layout="topleft"
left="0"
+ right="-1"
name="visible_members"
- top_pad="2"
- width="310">
+ top_pad="2">
<name_list.columns
label="Member"
name="name"
@@ -71,15 +69,15 @@ Hover your mouse over the options for more help.
follows="left|top"
height="20"
layout="topleft"
- left_delta="0"
+ left="5"
+ right="-5"
name="active_title"
tool_tip="Sets the title that appears in your avatar&apos;s name tag when this group is active."
- top_pad="2"
- width="300" />
+ top_pad="2" />
<check_box
height="16"
font="SansSerifSmall"
- label="Receive notices"
+ label="Receive group notices"
layout="topleft"
left="5"
name="receive_notices"
@@ -101,12 +99,12 @@ Hover your mouse over the options for more help.
border="true"
bg_alpha_color="FloaterUnfocusBorderColor"
follows="left|top"
- height="90"
+ height="88"
layout="topleft"
- left="5"
+ left="2"
+ right="-1"
name="preferences_container"
- top_pad="5"
- width="300">
+ top_pad="2">
<check_box
follows="right|top"
height="16"
@@ -132,41 +130,43 @@ Hover your mouse over the options for more help.
halign="left"
height="16"
increment="1"
- label_width="20"
+ label_width="15"
label="L$"
layout="topleft"
right="-10"
max_val="99999"
- left_pad="2"
+ left_pad="0"
name="spin_enrollment_fee"
tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked."
width="100" />
- <check_box
- height="16"
- initial_value="true"
- label="Show in search"
- layout="topleft"
- left="10"
- name="show_in_group_list"
- tool_tip="Let people see this group in search results"
- top_pad="4"
- width="300" />
- <combo_box
+ <combo_box
+ follows="left|top"
height="20"
layout="topleft"
- left_delta="0"
+ left="10"
name="group_mature_check"
- tool_tip="Sets whether your group information is considered mature"
- top_pad="2"
+ tool_tip="Sets whether your group information is considered moderate"
+ top_pad="0"
width="190">
<combo_box.item
- label="PG Content"
+ label="General Content"
name="pg"
value="Not Mature" />
<combo_box.item
- label="Mature Content"
+ label="Moderate Content"
name="mature"
value="Mature" />
</combo_box>
+ <check_box
+ follows="left|top"
+ height="16"
+ initial_value="true"
+ label="Show in search"
+ layout="topleft"
+ left="10"
+ name="show_in_group_list"
+ tool_tip="Let people see this group in search results"
+ top_pad="4"
+ width="300" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index d07d4ea25f..0bc2b44ad5 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -48,13 +48,13 @@
left="20"
name="first_name_text"
top="20"
- width="135">
+ width="150">
Name:
</text>
<line_editor
follows="left|bottom"
handle_edit_keys_directly="true"
- height="23"
+ height="22"
label="First"
left_delta="0"
max_length="31"
@@ -66,7 +66,7 @@
<line_editor
follows="left|bottom"
handle_edit_keys_directly="true"
- height="23"
+ height="22"
label="Last"
left_pad="8"
max_length="31"
@@ -75,38 +75,6 @@
tool_tip="[SECOND_LIFE] Last Name"
top_delta="0"
width="135" />
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- height="15"
- left_pad="8"
- name="start_location_text"
- top="20"
- width="135">
- Starting location:
- </text>
- <combo_box
- allow_text_entry="true"
- control_name="LoginLocation"
- follows="left|bottom"
- height="23"
- max_chars="128"
- top_pad="0"
- name="start_location_combo"
- width="135">
- <combo_box.item
- label="My last location"
- name="MyLastLocation"
- value="last" />
- <combo_box.item
- label="My home"
- name="MyHome"
- value="home" />
- <combo_box.item
- label="&lt;Type region name&gt;"
- name="Typeregionname"
- value="" />
- </combo_box>
<combo_box
allow_text_entry="true"
font="SansSerifSmall"
@@ -121,21 +89,21 @@
follows="left|bottom"
font="SansSerifSmall"
height="15"
- left_pad="3"
+ left_pad="8"
name="password_text"
top="20"
- width="135">
+ width="150">
Password:
</text>
<line_editor
follows="left|bottom"
handle_edit_keys_directly="true"
- height="23"
- left_delta="0"
+ height="22"
+ left="304"
max_length="16"
name="password_edit"
select_on_focus="true"
- top_pad="0"
+ top_pad="1"
width="135" />
<check_box
control_name="RememberPassword"
@@ -143,10 +111,10 @@
font="SansSerifSmall"
height="16"
label="Remember"
- left_pad="5"
+ left_pad="20"
+ top="20"
name="remember_check"
- top_delta="5"
- width="90" />
+ width="150" />
<button
follows="left|bottom"
height="23"
@@ -155,10 +123,44 @@
label="Log In"
label_color="White"
layout="topleft"
- left_pad="20"
+ left="462"
name="connect_btn"
top="35"
width="90" />
+ <text
+ follows="right|bottom"
+ font="SansSerifSmall"
+ height="15"
+ halign="right"
+ left_pad="10"
+ right="-240"
+ name="start_location_text"
+ top="20"
+ width="130">
+ Starting location:
+ </text>
+ <combo_box
+ allow_text_entry="true"
+ control_name="LoginLocation"
+ follows="right|bottom"
+ height="23"
+ max_chars="128"
+ top_pad="0"
+ name="start_location_combo"
+ width="135">
+ <combo_box.item
+ label="My last location"
+ name="MyLastLocation"
+ value="last" />
+ <combo_box.item
+ label="My home"
+ name="MyHome"
+ value="home" />
+ <combo_box.item
+ label="&lt;Type region name&gt;"
+ name="Typeregionname"
+ value="" />
+ </combo_box>
<text
follows="right|bottom"
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index fe3e010cf9..3c87331199 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -416,6 +416,7 @@
left="10"
label="Edit Profile"
name="edit_profile_btn"
+ tool_tip="Edit your personal information"
width="130" />
<button
follows="bottom|right"
@@ -423,6 +424,7 @@
label="Edit Appearance"
left_pad="10"
name="edit_appearance_btn"
+ tool_tip="Create/edit your appearance: physical data, clothes and etc."
right="-10"
width="130" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 4c2bd67337..52bc72fe86 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -106,7 +106,7 @@
layout="topleft"
left_pad="15"
name="new_btn"
- tool_tip="Create new pick at current location"
+ tool_tip="Create new pick or classified at current location"
top="5"
width="18" />
<button
@@ -138,6 +138,7 @@
left="5"
name="info_btn"
tab_stop="false"
+ tool_tip="Show pic information"
top="0"
width="55" />
<button
@@ -149,6 +150,7 @@
left_pad="5"
name="teleport_btn"
tab_stop="false"
+ tool_tip="Teleport to the corresponding area"
top="0"
width="77" />
<button
@@ -160,6 +162,7 @@
left_pad="5"
name="show_on_map_btn"
tab_stop="false"
+ tool_tip="Show corresponding area on the world map"
top="0"
width="50" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 9ab5c6b4f7..3f5da66dce 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -602,7 +602,7 @@
layout="topleft"
left_pad="10"
name="region_rating"
- value="Explicit"
+ value="Adult"
width="159" />
<text
follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 6bb937e3c6..ee9bfbae93 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -143,15 +143,15 @@
top_pad="-10"
width="170">
<combo_box.item
- label="PG, Mature and Adult"
+ label="General, Moderate, Adult"
name="Desired_Adult"
value="42" />
<combo_box.item
- label="PG and Mature"
+ label="General and Moderate"
name="Desired_Mature"
value="21" />
<combo_box.item
- label="PG"
+ label="General"
name="Desired_PG"
value="13" />
</combo_box>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 23832ba120..29e9b476eb 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -78,7 +78,7 @@
top_pad="10"
width="350" />
<check_box
- control_name="AutoPlayMedia"
+ control_name="ParcelMediaAutoPlayEnable"
height="16"
label="Allow Media Autoplay"
layout="topleft"
@@ -86,15 +86,6 @@
name="autoplay_enabled"
top_pad="10"
width="350" />
- <check_box
- control_name="ParcelMediaAutoPlayEnable"
- height="16"
- label="Automatically Play Parcel Media"
- layout="topleft"
- left="30"
- name="parcel_autoplay_enabled"
- top_pad="10"
- width="350" />
<text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index 8b86067b03..e21de31498 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -3,7 +3,7 @@
follows="left|right|top|bottom"
name="MediaControls"
background_visible="false"
- height="192"
+ height="200"
layout="topleft"
mouse_opaque="false"
width="800">
@@ -16,20 +16,20 @@
<string name="zoom_far_padding">1.5</string>
<panel
name="media_region"
- bottom="125"
+ height="100"
follows="left|right|top|bottom"
layout="topleft"
mouse_opaque="false"
- top="20" />
+ top="0" />
<layout_stack
name="media_controls"
follows="left|right"
animate="false"
- height="26"
+ height="75"
layout="topleft"
left="0"
orientation="horizontal"
- top="128">
+ top="100">
<!-- outer layout_panels center the inner one -->
<layout_panel
name="left_bookend"
@@ -239,19 +239,6 @@
layout="topleft"
width="190"
min_width="90">
- <!--
- RE-ENABLE THIS WHEN WE HAVE A HISTORY DROP-DOWN AGAIN
- <combo_box
- name="media_address_url"
- allow_text_entry="true"
- height="22"
- layout="topleft"
- max_chars="1024"
- tool_tip = "Media URL">
- <combo_box.commit_callback
- function="MediaCtrl.CommitURL" />
- </combo_box>
- -->
<line_editor
name="media_address_url"
follows="left|right"
@@ -314,8 +301,9 @@
<slider_bar
name="media_play_slider"
follows="left|right|top"
- height="16"
- increment="0.05"
+ height="20"
+ bottom="88"
+ increment="0.01"
initial_value="0.5"
layout="topleft"
tool_tip="Movie play progress"
@@ -379,7 +367,8 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- height="22"
+ top="-50"
+ height="72"
min_width="22"
width="22">
<!-- Note: this is not quite right either...the mute button is not the -->
@@ -397,138 +386,30 @@
layout="topleft"
scale_image="false"
tool_tip="Mute This Media"
- top_delta="18"
+ top="118"
min_width="22"
width="22" >
<button.commit_callback
function="MediaCtrl.ToggleMute" />
+ <button.mouseenter_callback
+ function="MediaCtrl.ShowVolumeSlider" />
</button>
- </layout_panel>
- <!-- We do not have a design yet for "volume", so this is a temporary -->
- <!-- solution. See DEV-42827. -->
- <layout_panel
- name="volume_up"
- auto_resize="false"
- user_resize="false"
- layout="topleft"
- min_width="14"
- height="14"
- width="14">
- <button
- image_overlay="media_btn_scrollup.png"
- image_disabled="PushButton_Disabled"
- image_disabled_selected="PushButton_Disabled"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- hover_glow_amount="0.15"
- top="-5"
- height="14"
- layout="topleft"
- tool_tip="Volume up"
- scale_image="true"
- min_width="14"
- width="14" >
- <button.commit_callback
- function="MediaCtrl.CommitVolumeUp" />
- </button>
- </layout_panel>
- <layout_panel
- name="volume_down"
- auto_resize="false"
- user_resize="false"
- layout="topleft"
- min_width="14"
- height="14"
- width="14">
- <button
- image_overlay="media_btn_scrolldown.png"
- image_disabled="PushButton_Disabled"
- image_disabled_selected="PushButton_Disabled"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- hover_glow_amount="0.15"
- layout="topleft"
- tool_tip="Volume down"
- scale_image="true"
- top="-5"
- height="14"
- min_width="14"
- width="14">
- <button.commit_callback
- function="MediaCtrl.CommitVolumeDown" />
- </button>
- </layout_panel>
- <!-- Scroll pad -->
- <!-- This was removed from the design, but is still here because it is -->
- <!-- complex, and recreating it would be hard. In case the design -->
- <!-- changes, here it lies: -->
- <!--
- <layout_panel
- name="media_panel_scroll"
- auto_resize="false"
- user_resize="false"
- height="32"
- follows="left|right|top|bottom"
- layout="topleft"
- min_width="32"
- width="32">
- <icon
- height="32"
- image_name="media_panel_scrollbg.png"
- layout="topleft"
- top="0"
- min_width="32"
- width="32" />
- <button
- name="scrollup"
- height="8"
- image_selected="media_btn_scrollup.png"
- image_unselected="media_btn_scrollup.png"
- layout="topleft"
- tool_tip="Scroll up"
- scale_image="false"
- left="12"
- top_delta="4"
- min_width="8"
- width="8" />
- <button
- name="scrollleft"
- height="8"
- image_selected="media_btn_scrollleft.png"
- image_unselected="media_btn_scrollleft.png"
- layout="topleft"
- left="3"
- tool_tip="Scroll left"
- scale_image="false"
- top="12"
- min_width="8"
- width="8" />
- <button
- name="scrollright"
- height="8"
- image_selected="media_btn_scrollright.png"
- image_unselected="media_btn_scrollright.png"
- layout="topleft"
- left_pad="9"
- tool_tip="Scroll right"
- scale_image="false"
- top_delta="0"
- min_width="8"
- width="8" />
- <button
- name="scrolldown"
- height="8"
- image_selected="media_btn_scrolldown.png"
- image_unselected="media_btn_scrolldown.png"
+ <slider
+ orientation="vertical"
+ left="0"
+ top="-2"
+ height="50"
layout="topleft"
- left="12"
- tool_tip="Scroll down"
- scale_image="false"
- top="20"
- min_width="8"
- width="8" />
+ increment="0.01"
+ initial_value="0.5"
+ name="volume_slider"
+ tool_tip="Media Volume"
+ show_text="false"
+ volume="true">
+ <slider.commit_callback
+ function="MediaCtrl.Volume"/>
+ </slider>
</layout_panel>
- -->
<panel
height="28"
layout="topleft"
@@ -628,7 +509,7 @@
animate="false"
left="0"
orientation="horizontal"
- top="150">
+ top="170">
<!-- outer layout_panels center the inner one -->
<layout_panel
width="0"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 947bb67152..6be203ef9c 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -287,7 +287,7 @@
mouse_opaque="false"
name="add_friend"
top="5"
- width="76" />
+ width="77" />
<button
follows="bottom|left"
height="19"
@@ -296,7 +296,7 @@
name="im"
top="5"
left_pad="5"
- width="31" />
+ width="33" />
<button
follows="bottom|left"
height="19"
@@ -315,7 +315,7 @@
name="show_on_map_btn"
top="5"
left_pad="5"
- width="42" />
+ width="44" />
<button
follows="bottom|left"
height="19"
@@ -324,7 +324,7 @@
name="teleport"
left_pad="5"
top="5"
- width="64" />
+ width="67" />
<button
follows="bottom|right"
height="19"
diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml
index 42c6319699..79d8f3a0ee 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general.xml
@@ -171,7 +171,7 @@
</text>
<combo_box
height="20"
- label="Mature"
+ label="Moderate"
layout="topleft"
left_delta="100"
name="access_combo"
@@ -182,11 +182,11 @@
name="Adult"
value="42" />
<combo_box.item
- label="Mature"
+ label="Moderate"
name="Mature"
value="21" />
<combo_box.item
- label="PG"
+ label="General"
name="PG"
value="13" />
</combo_box>
diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
new file mode 100644
index 0000000000..525c5aa8e7
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="top|left"
+ height="360"
+ label="Region"
+ layout="topleft"
+ left="0"
+ name="General"
+ top="360"
+ width="280">
+ <text
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="region_text_lbl"
+ top="10"
+ width="100">
+ Region:
+ </text>
+ <text
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left_delta="50"
+ name="region_text"
+ top_delta="0"
+ width="200">
+ unknown
+ </text>
+ <text
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="version_channel_text_lbl"
+ top="30"
+ width="100">
+ Version:
+ </text>
+ <text
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left_delta="50"
+ name="version_channel_text"
+ top_delta="0"
+ width="200">
+ unknown
+ </text>
+ <text
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="region_type_lbl"
+ top="50"
+ width="100">
+ Type:
+ </text>
+ <text
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left_delta="50"
+ name="region_type"
+ top_delta="0"
+ width="200">
+ unknown
+ </text>
+ <check_box
+ height="20"
+ label="Block Terraform"
+ layout="topleft"
+ left="10"
+ name="block_terraform_check"
+ top="70"
+ width="80" />
+ <check_box
+ height="20"
+ label="Block Fly"
+ layout="topleft"
+ left="10"
+ name="block_fly_check"
+ top="90"
+ width="80" />
+ <check_box
+ height="20"
+ label="Allow Damage"
+ layout="topleft"
+ left="10"
+ name="allow_damage_check"
+ top="110"
+ width="80" />
+ <check_box
+ height="20"
+ label="Restrict Pushing"
+ layout="topleft"
+ left="10"
+ name="restrict_pushobject"
+ top="130"
+ width="80" />
+ <check_box
+ height="20"
+ label="Allow Land Resell"
+ layout="topleft"
+ left="10"
+ name="allow_land_resell_check"
+ top="160"
+ width="80" />
+ <check_box
+ height="20"
+ label="Allow Land Join/Divide"
+ layout="topleft"
+ left="10"
+ name="allow_parcel_changes_check"
+ top="180"
+ width="80" />
+ <check_box
+ height="20"
+ label="Block Land Show in Search"
+ layout="topleft"
+ left="10"
+ name="block_parcel_search_check"
+ tool_tip="Let people see this region and its parcels in search results"
+ top="200"
+ width="80" />
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="1"
+ label="Agent Limit"
+ label_width="97"
+ layout="topleft"
+ left="10"
+ max_val="100"
+ min_val="1"
+ name="agent_limit_spin"
+ top="240"
+ width="170" />
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Object Bonus"
+ label_width="97"
+ layout="topleft"
+ left="10"
+ max_val="10"
+ min_val="1"
+ name="object_bonus_spin"
+ top="260"
+ width="170" />
+ <text
+ follows="left|top"
+ height="20"
+ label="Maturity"
+ layout="topleft"
+ left="10"
+ name="access_text"
+ top="290"
+ width="100">
+ Rating:
+ </text>
+ <combo_box
+ height="20"
+ label="Moderate"
+ layout="topleft"
+ left_delta="100"
+ name="access_combo"
+ top_delta="0"
+ width="85">
+ <combo_box.item
+ label="Adult"
+ name="Adult"
+ value="42" />
+ <combo_box.item
+ label="Moderate"
+ name="Mature"
+ value="21" />
+ <combo_box.item
+ label="General"
+ name="PG"
+ value="13" />
+ </combo_box>
+ <button
+ enabled="false"
+ follows="left|top"
+ height="20"
+ label="Apply"
+ layout="topleft"
+ left="108"
+ name="apply_btn"
+ top="320"
+ width="100"/>
+ <button
+ follows="left|top"
+ height="20"
+ label="Teleport Home One User..."
+ layout="topleft"
+ left="10"
+ name="kick_btn"
+ top_pad="10"
+ width="250" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Teleport Home All Users..."
+ layout="topleft"
+ left_delta="0"
+ name="kick_all_btn"
+ top_pad="3"
+ width="250" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Send Message To Region..."
+ layout="topleft"
+ left_delta="0"
+ name="im_btn"
+ top_pad="20"
+ width="200" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Manage Telehub..."
+ layout="topleft"
+ left_delta="0"
+ name="manage_telehub_btn"
+ top_pad="20"
+ width="150" >
+ <button.commit_callback
+ function="RegionInfo.ManageTelehub" />
+ </button>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml
index 4293051dbd..6479fc91ca 100644
--- a/indra/newview/skins/default/xui/en/panel_toast.xml
+++ b/indra/newview/skins/default/xui/en/panel_toast.xml
@@ -5,28 +5,28 @@
<floater
legacy_header_height="18"
- name="toast"
- title=""
- visible="false"
- layout="topleft"
- height="40"
- width="305"
- left="0"
- top="0"
- follows="right|bottom"
- bg_opaque_image="Toast_Background"
- bg_alpha_image="Toast_Background"
- can_minimize="false"
- can_tear_off="false"
- can_resize="false"
- can_drag_on_left="false"
- can_close="false"
- can_dock="false"
- border_visible = "false"
- border_drop_shadow_visible = "false"
- drop_shadow_visible = "false"
- border = "false"
- >
+ name="toast"
+ title=""
+ visible="false"
+ layout="topleft"
+ height="40"
+ width="305"
+ left="0"
+ top="0"
+ follows="right|bottom"
+ bg_opaque_image="Toast_Background"
+ bg_alpha_image="Toast_Background"
+ can_minimize="false"
+ can_tear_off="false"
+ can_resize="false"
+ can_drag_on_left="false"
+ can_close="false"
+ can_dock="false"
+ border_visible = "false"
+ border_drop_shadow_visible = "false"
+ drop_shadow_visible = "false"
+ border = "false"
+>
<!-- Don't remove this wiget! It is needed for Overflow and Start-Up toasts!-->
<text
clip_partial="true"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index e47ec1ebda..b014b8d1c0 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -270,8 +270,8 @@
<string name="NotConnected">Not Connected</string>
<!-- Sim Access labels -->
- <string name="SIM_ACCESS_PG">PG</string>
- <string name="SIM_ACCESS_MATURE">Mature</string>
+ <string name="SIM_ACCESS_PG">General</string>
+ <string name="SIM_ACCESS_MATURE">Moderate</string>
<string name="SIM_ACCESS_ADULT">Adult</string>
<string name="SIM_ACCESS_DOWN">Offline</string>
<string name="SIM_ACCESS_MIN">Unknown</string>
@@ -2777,11 +2777,19 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Wild">Wild</string>
<string name="Wrinkles">Wrinkles</string>
- <!-- Favorites Bar -->
+ <!-- Navigation bar location input control.
+ Strings are here because widget xml is not localizable -->
<string name="LocationCtrlAddLandmarkTooltip">Add to My Landmarks</string>
<string name="LocationCtrlEditLandmarkTooltip">Edit My Landmark</string>
<string name="LocationCtrlInfoBtnTooltip">See more info about the current location</string>
<string name="LocationCtrlComboBtnTooltip">My location history</string>
+ <string name="LocationCtrlForSaleTooltip">Buy this land</string>
+ <string name="LocationCtrlVoiceTooltip">Voice not available here</string>
+ <string name="LocationCtrlFlyTooltip">Flying not allowed</string>
+ <string name="LocationCtrlPushTooltip">No pushing</string>
+ <string name="LocationCtrlBuildTooltip">Building/dropping objects not allowed</string>
+ <string name="LocationCtrlScriptsTooltip">Scripts not allowed</string>
+ <string name="LocationCtrlDamageTooltip">Health</string>
<!-- Strings used by the (currently Linux) auto-updater app -->
<string name="UpdaterWindowTitle">
diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
index c0e1944f56..9990324d03 100644
--- a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
+++ b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
@@ -9,5 +9,6 @@
header_image_over="Accordion_Over"
header_image_pressed="Accordion_Press"
header_image_expanded="Accordion_Selected"
- header_text_color="LtGray"
+ header_text_color="LtGray"
+ font="SansSerif"
/>
diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
index 32916c0816..2be37d222a 100644
--- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
@@ -15,4 +15,5 @@
track_bottom="true"
name="chat_history"
type="string"
- word_wrap="true" /> \ No newline at end of file
+ word_wrap="true"
+ font="SansSerif"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
index 5011bf6a61..e5af961a56 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<chiclet_script
- name="script_chiclet">
+ name="script_chiclet"
+ font="SansSerif">
<icon
name="chiclet_icon"
follows="all"
diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml
index 2263866471..b2bd9c38c9 100644
--- a/indra/newview/skins/default/xui/en/widgets/floater.xml
+++ b/indra/newview/skins/default/xui/en/widgets/floater.xml
@@ -1,25 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- See also settings.xml UIFloater* settings for configuration -->
-<floater name="floater"
- bg_opaque_color="FloaterFocusBackgroundColor"
- bg_alpha_color="FloaterDefaultBackgroundColor"
- bg_opaque_image="Window_Foreground"
- bg_alpha_image="Window_Background"
- background_visible="true"
- background_opaque="false"
- header_height="25"
- close_image="Icon_Close_Foreground"
- restore_image="Icon_Restore_Foreground"
- minimize_image="Icon_Minimize_Foreground"
- tear_off_image="tearoffbox.tga"
- dock_image="Icon_Dock_Foreground"
- undock_image="Icon_Undock_Foreground"
- help_image="Icon_Help_Foreground"
- close_pressed_image="Icon_Close_Press"
- restore_pressed_image="Icon_Restore_Press"
- minimize_pressed_image="Icon_Minimize_Press"
- tear_off_pressed_image="tearoff_pressed.tga"
- dock_pressed_image="Icon_Dock_Press"
- undock_pressed_image="Icon_Undock_Press"
- help_pressed_image="Icon_Help_Press"
+<floater
+ name="floater"
+ bg_opaque_color="FloaterFocusBackgroundColor"
+ bg_alpha_color="FloaterDefaultBackgroundColor"
+ bg_opaque_image="Window_Foreground"
+ bg_alpha_image="Window_Background"
+ background_visible="true"
+ background_opaque="false"
+ header_height="25"
+ top="0"
+ left="0"
+ close_image="Icon_Close_Foreground"
+ restore_image="Icon_Restore_Foreground"
+ minimize_image="Icon_Minimize_Foreground"
+ tear_off_image="tearoffbox.tga"
+ dock_image="Icon_Dock_Foreground"
+ undock_image="Icon_Undock_Foreground"
+ help_image="Icon_Help_Foreground"
+ close_pressed_image="Icon_Close_Press"
+ restore_pressed_image="Icon_Restore_Press"
+ minimize_pressed_image="Icon_Minimize_Press"
+ tear_off_pressed_image="tearoff_pressed.tga"
+ dock_pressed_image="Icon_Dock_Press"
+ undock_pressed_image="Icon_Undock_Press"
+ help_pressed_image="Icon_Help_Press"
/>
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index d32952b04f..0e2700cb80 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -20,6 +20,8 @@
follows="left|top"
allow_new_values="true"
>
+ <!-- *NOTE: Tooltips are in strings.xml so they can be localized.
+ See LocationCtrlAddLandmarkTooltip etc. -->
<info_button name="Place Information"
width="16"
height="16"
@@ -50,6 +52,7 @@
top="21"
/>
<voice_icon
+ enabled="true"
name="voice_icon"
width="22"
height="18"
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
index 2bbaa6233f..c65244ae22 100644
--- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- Use this for the top-level menu styling -->
-<menu_item>
-</menu_item>
+<menu_item font="SansSerif" />
diff --git a/indra/newview/skins/default/xui/en/widgets/radio_item.xml b/indra/newview/skins/default/xui/en/widgets/radio_item.xml
index dd848f3acd..3ddf18b2cb 100644
--- a/indra/newview/skins/default/xui/en/widgets/radio_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/radio_item.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<radio_item follows="left|top">
+<radio_item follows="left|top" font="SansSerif">
<radio_item.label_text name="Radio Item label"/>
<radio_item.check_button name="Radio control button"
image_unselected="RadioButton_Off"
diff --git a/indra/newview/skins/default/xui/en/widgets/slider_bar.xml b/indra/newview/skins/default/xui/en/widgets/slider_bar.xml
index 706c89f5ed..89d5950e98 100644
--- a/indra/newview/skins/default/xui/en/widgets/slider_bar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/slider_bar.xml
@@ -8,4 +8,5 @@
track_image_horizontal="SliderTrack_Horiz"
track_image_vertical="SliderTrack_Vert"
track_highlight_horizontal_image="SliderTrack_Horiz"
- track_highlight_vertical_image="SliderTrack_Vert" />
+ track_highlight_vertical_image="SliderTrack_Vert"
+ font="SansSerif" />
diff --git a/indra/newview/skins/default/xui/en/widgets/spinner.xml b/indra/newview/skins/default/xui/en/widgets/spinner.xml
index 7d1a5118cb..ab3f8df5f8 100644
--- a/indra/newview/skins/default/xui/en/widgets/spinner.xml
+++ b/indra/newview/skins/default/xui/en/widgets/spinner.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<spinner text_enabled_color="LabelTextColor"
text_disabled_color="LabelDisabledColor"
+ font="SansSerif"
decimal_digits="3"
label_width="40" >
<spinner.up_button name="SpinCtrl Up"
diff --git a/indra/newview/skins/default/xui/en/widgets/textbase.xml b/indra/newview/skins/default/xui/en/widgets/textbase.xml
index 166e8555fe..f4dc192bc3 100644
--- a/indra/newview/skins/default/xui/en/widgets/textbase.xml
+++ b/indra/newview/skins/default/xui/en/widgets/textbase.xml
@@ -1,2 +1,3 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<textbase clip_partial="false"/>
+<textbase clip_partial="false"
+ font="SansSerif"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml b/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml
index 2f72ad65a1..f4dbb8f404 100644
--- a/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- Global settings for all widgets ("UI Controls") -->
+<!-- The params in this file aren't currently getting loaded in OSX -->
<ui_ctrl
- font="SansSerif"
/>