summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/ignorable_dialogs.xml15
-rw-r--r--indra/newview/app_settings/settings.xml24
-rw-r--r--indra/newview/llagentwearables.cpp234
-rw-r--r--indra/newview/llappearancemgr.cpp108
-rw-r--r--indra/newview/llappearancemgr.h11
-rw-r--r--indra/newview/llappviewer.cpp4
-rw-r--r--indra/newview/llchathistory.cpp10
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp5
-rw-r--r--indra/newview/lldateutil.cpp7
-rw-r--r--indra/newview/llfloaterabout.cpp17
-rw-r--r--indra/newview/llfloaterpreference.cpp20
-rw-r--r--indra/newview/llfloaterpreference.h1
-rw-r--r--indra/newview/llfloaterscriptlimits.cpp101
-rw-r--r--indra/newview/llfloaterscriptlimits.h14
-rw-r--r--indra/newview/llfloaterworldmap.cpp67
-rw-r--r--indra/newview/llfloaterworldmap.h5
-rw-r--r--indra/newview/llfolderview.cpp11
-rw-r--r--indra/newview/llfolderview.h2
-rw-r--r--indra/newview/llfoldervieweventlistener.h1
-rw-r--r--indra/newview/llfolderviewitem.h6
-rw-r--r--indra/newview/llhudtext.cpp4
-rw-r--r--indra/newview/llimfloater.cpp2
-rw-r--r--indra/newview/llinspect.h2
-rw-r--r--indra/newview/llinspectavatar.cpp19
-rw-r--r--indra/newview/llinspectobject.cpp20
-rw-r--r--indra/newview/llinventorybridge.cpp27
-rw-r--r--indra/newview/llinventorybridge.h1
-rw-r--r--indra/newview/llinventorypanel.cpp49
-rw-r--r--indra/newview/llinventorypanel.h2
-rw-r--r--indra/newview/lllogchat.cpp3
-rw-r--r--indra/newview/llnearbychat.cpp2
-rw-r--r--indra/newview/llpanelavatar.cpp6
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp74
-rw-r--r--indra/newview/llpaneloutfitsinventory.h2
-rw-r--r--indra/newview/llscreenchannel.cpp14
-rw-r--r--indra/newview/llscreenchannel.h2
-rw-r--r--indra/newview/llsidepanelappearance.cpp10
-rw-r--r--indra/newview/llsidepanelappearance.h1
-rw-r--r--indra/newview/llsidepaneltaskinfo.cpp6
-rw-r--r--indra/newview/llsyswellwindow.cpp4
-rw-r--r--indra/newview/llsyswellwindow.h3
-rw-r--r--indra/newview/lltoolpie.cpp9
-rw-r--r--indra/newview/llviewermedia.cpp88
-rw-r--r--indra/newview/llviewermedia.h17
-rw-r--r--indra/newview/llviewermenu.cpp29
-rw-r--r--indra/newview/llviewerparcelmedia.cpp19
-rw-r--r--indra/newview/llviewerparcelmediaautoplay.cpp16
-rw-r--r--indra/newview/llviewerparcelmediaautoplay.h2
-rw-r--r--indra/newview/llviewerparcelmgr.cpp24
-rw-r--r--indra/newview/llviewertexture.cpp20
-rw-r--r--indra/newview/llviewerwindow.cpp2
-rw-r--r--indra/newview/llvovolume.cpp23
-rw-r--r--indra/newview/skins/default/colors.xml15
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.pngbin0 -> 250 bytes
-rw-r--r--indra/newview/skins/default/textures/navbar/NavBar_BG.pngbin210 -> 195 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml19
-rw-r--r--indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.pngbin9506 -> 56298 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/Inspector_I.pngbin0 -> 548 bytes
-rw-r--r--indra/newview/skins/default/xui/en/favorites_bar_button.xml8
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml45
-rw-r--r--indra/newview/skins/default/xui/en/floater_avatar_picker.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_help_browser.xml32
-rw-r--r--indra/newview/skins/default/xui/en/floater_map.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_pay_object.xml31
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_notecard.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_widgets.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory_add.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_object.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_control_panel.xml20
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_roles.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_me.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml556
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml30
-rw-r--r--indra/newview/skins/default/xui/en/panel_notes.xml188
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml39
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml18
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml496
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile_view.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml22
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_appearance.xml25
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_script.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml20
-rw-r--r--indra/newview/tests/lldateutil_test.cpp10
103 files changed, 1664 insertions, 1197 deletions
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index ab18febccc..e825f13e82 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -177,21 +177,10 @@
<key>Value</key>
<integer>1</integer>
</map>
- <key>FirstStreamingMusic</key>
+ <key>FirstStreamingMedia</key>
<map>
<key>Comment</key>
- <string>Enables FirstStreamingMusic warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstStreamingVideo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingVideo warning dialog</string>
+ <string>Enables FirstStreamingMedia warning dialog</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 61cb93b675..7d98a4b6ce 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4820,6 +4820,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>MyOutfitsAutofill</key>
+ <map>
+ <key>Comment</key>
+ <string>Always autofill My Outfits from library when empty (else happens just once).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NearMeRange</key>
<map>
<key>Comment</key>
@@ -9331,18 +9342,7 @@
<string>S32</string>
<key>Value</key>
<integer>2</integer>
- </map>
- <key>UILineEditorVPad</key>
- <map>
- <key>Comment</key>
- <string>UI Line Editor Vertical Pad</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>5</integer>
- </map>
+ </map>
<key>UIMaxComboWidth</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index d21965568d..10a2dd132a 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -95,19 +95,38 @@ public:
enum ELibraryOutfitFetchStep {
LOFS_FOLDER = 0,
LOFS_OUTFITS,
+ LOFS_LIBRARY,
+ LOFS_IMPORTED,
LOFS_CONTENTS
};
- LLLibraryOutfitsFetch() : mCurrFetchStep(LOFS_FOLDER), mOutfitsPopulated(false) {}
+ LLLibraryOutfitsFetch() : mCurrFetchStep(LOFS_FOLDER), mOutfitsPopulated(false)
+ {
+ mMyOutfitsID = LLUUID::null;
+ mClothingID = LLUUID::null;
+ mLibraryClothingID = LLUUID::null;
+ mImportedClothingID = LLUUID::null;
+ mImportedClothingName = "Imported Library Clothing";
+ }
~LLLibraryOutfitsFetch() {}
- virtual void done();
+ virtual void done();
void doneIdle();
+ LLUUID mMyOutfitsID;
+ void importedFolderFetch();
protected:
void folderDone(void);
void outfitsDone(void);
+ void libraryDone(void);
+ void importedFolderDone(void);
void contentsDone(void);
enum ELibraryOutfitFetchStep mCurrFetchStep;
- std::vector< std::pair< LLUUID, std::string > > mOutfits;
+ typedef std::vector< std::pair< LLUUID, std::string > > cloth_folder_vec_t;
+ cloth_folder_vec_t mLibraryClothingFolders;
+ cloth_folder_vec_t mImportedClothingFolders;
bool mOutfitsPopulated;
+ LLUUID mClothingID;
+ LLUUID mLibraryClothingID;
+ LLUUID mImportedClothingID;
+ std::string mImportedClothingName;
};
LLAgentWearables gAgentWearables;
@@ -911,7 +930,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
// If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)
// then auto-populate outfits from the library into the My Outfits folder.
- if (LLInventoryModel::getIsFirstTimeInViewer2())
+ if (LLInventoryModel::getIsFirstTimeInViewer2() || gSavedSettings.getBOOL("MyOutfitsAutofill"))
{
gAgentWearables.populateMyOutfitsFolder();
}
@@ -2126,11 +2145,15 @@ void LLAgentWearables::populateMyOutfitsFolder(void)
// Get the complete information on the items in the inventory and
// setup an observer that will wait for that to happen.
LLInventoryFetchDescendentsObserver::folder_ref_t folders;
- const LLUUID my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+ outfits->mMyOutfitsID = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
- folders.push_back(my_outfits_id);
+ folders.push_back(outfits->mMyOutfitsID);
gInventory.addObserver(outfits);
outfits->fetchDescendents(folders);
+ if (outfits->isEverythingComplete())
+ {
+ outfits->done();
+ }
}
void LLLibraryOutfitsFetch::done()
@@ -2144,13 +2167,24 @@ void LLLibraryOutfitsFetch::done()
void LLLibraryOutfitsFetch::doneIdle()
{
gInventory.addObserver(this); // Add this back in since it was taken out during ::done()
+
switch (mCurrFetchStep)
{
case LOFS_FOLDER:
folderDone();
+ mCurrFetchStep = LOFS_OUTFITS;
break;
case LOFS_OUTFITS:
outfitsDone();
+ mCurrFetchStep = LOFS_LIBRARY;
+ break;
+ case LOFS_LIBRARY:
+ libraryDone();
+ mCurrFetchStep = LOFS_IMPORTED;
+ break;
+ case LOFS_IMPORTED:
+ importedFolderDone();
+ mCurrFetchStep = LOFS_CONTENTS;
break;
case LOFS_CONTENTS:
contentsDone();
@@ -2172,67 +2206,217 @@ void LLLibraryOutfitsFetch::doneIdle()
void LLLibraryOutfitsFetch::folderDone(void)
{
- // Early out if we already have items in My Outfits.
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t wearable_array;
- gInventory.collectDescendents(mCompleteFolders.front(), cat_array, wearable_array,
+ gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array,
LLInventoryModel::EXCLUDE_TRASH);
+
+ // Early out if we already have items in My Outfits.
if (cat_array.count() > 0 || wearable_array.count() > 0)
{
mOutfitsPopulated = true;
return;
}
- // Get the UUID of the library's clothing folder
- const LLUUID library_clothing_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true);
+ mClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
+ mLibraryClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true);
mCompleteFolders.clear();
// Get the complete information on the items in the inventory.
LLInventoryFetchDescendentsObserver::folder_ref_t folders;
- folders.push_back(library_clothing_id);
- mCurrFetchStep = LOFS_OUTFITS;
+ folders.push_back(mClothingID);
+ folders.push_back(mLibraryClothingID);
fetchDescendents(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
}
void LLLibraryOutfitsFetch::outfitsDone(void)
{
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t wearable_array;
- gInventory.collectDescendents(mCompleteFolders.front(), cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH);
-
LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ // Collect the contents of the Library's Clothing folder
+ gInventory.collectDescendents(mLibraryClothingID, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+
llassert(cat_array.count() > 0);
for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
iter != cat_array.end();
++iter)
{
const LLViewerInventoryCategory *cat = iter->get();
+
+ // Get the names and id's of every outfit in the library, except for ruth and other "misc" outfits.
if (cat->getName() != "More Outfits" && cat->getName() != "Ruth")
{
+ // Get the name of every outfit in the library
folders.push_back(cat->getUUID());
- mOutfits.push_back(std::make_pair(cat->getUUID(), cat->getName()));
+ mLibraryClothingFolders.push_back(std::make_pair(cat->getUUID(), cat->getName()));
+ }
+ }
+
+ // Collect the contents of your Inventory Clothing folder
+ cat_array.clear();
+ wearable_array.clear();
+ gInventory.collectDescendents(mClothingID, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ // Check if you already have an "Imported Library Clothing" folder
+ for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
+ iter != cat_array.end();
+ ++iter)
+ {
+ const LLViewerInventoryCategory *cat = iter->get();
+ if (cat->getName() == mImportedClothingName)
+ {
+ mImportedClothingID = cat->getUUID();
}
}
+
mCompleteFolders.clear();
+
+ fetchDescendents(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
+}
+
+class LLLibraryOutfitsCopyDone: public LLInventoryCallback
+{
+public:
+ LLLibraryOutfitsCopyDone(LLLibraryOutfitsFetch * fetcher):
+ mFireCount(0), mLibraryOutfitsFetcher(fetcher)
+ {
+ }
+
+ virtual ~LLLibraryOutfitsCopyDone()
+ {
+ if (mLibraryOutfitsFetcher)
+ {
+ gInventory.addObserver(mLibraryOutfitsFetcher);
+ mLibraryOutfitsFetcher->done();
+ }
+ }
+
+ /* virtual */ void fire(const LLUUID& inv_item)
+ {
+ mFireCount++;
+ }
+private:
+ U32 mFireCount;
+ LLLibraryOutfitsFetch * mLibraryOutfitsFetcher;
+};
- mCurrFetchStep = LOFS_CONTENTS;
+void LLLibraryOutfitsFetch::libraryDone(void)
+{
+ // Copy the clothing folders from the library into the imported clothing folder if necessary.
+ if (mImportedClothingID == LLUUID::null)
+ {
+ gInventory.removeObserver(this);
+ LLPointer<LLInventoryCallback> copy_waiter = new LLLibraryOutfitsCopyDone(this);
+ mImportedClothingID = gInventory.createNewCategory(mClothingID,
+ LLFolderType::FT_NONE,
+ mImportedClothingName);
+
+ for (cloth_folder_vec_t::const_iterator iter = mLibraryClothingFolders.begin();
+ iter != mLibraryClothingFolders.end();
+ ++iter)
+ {
+ LLUUID folder_id = gInventory.createNewCategory(mImportedClothingID,
+ LLFolderType::FT_NONE,
+ iter->second);
+ LLAppearanceManager::getInstance()->shallowCopyCategory(iter->first, folder_id, copy_waiter);
+ }
+ }
+ else
+ {
+ // Skip straight to fetching the contents of the imported folder
+ importedFolderFetch();
+ }
+}
+
+void LLLibraryOutfitsFetch::importedFolderFetch(void)
+{
+ // Fetch the contents of the Imported Clothing Folder
+ LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ folders.push_back(mImportedClothingID);
+
+ mCompleteFolders.clear();
+
fetchDescendents(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
}
-void LLLibraryOutfitsFetch::contentsDone(void)
+void LLLibraryOutfitsFetch::importedFolderDone(void)
{
- for(S32 i = 0; i < (S32)mOutfits.size(); ++i)
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+ LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+
+ // Collect the contents of the Imported Clothing folder
+ gInventory.collectDescendents(mImportedClothingID, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
+ iter != cat_array.end();
+ ++iter)
+ {
+ const LLViewerInventoryCategory *cat = iter->get();
+
+ // Get the name of every imported outfit
+ folders.push_back(cat->getUUID());
+ mImportedClothingFolders.push_back(std::make_pair(cat->getUUID(), cat->getName()));
+ }
+
+ mCompleteFolders.clear();
+ fetchDescendents(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
+}
+
+void LLLibraryOutfitsFetch::contentsDone(void)
+{
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+
+ for (cloth_folder_vec_t::const_iterator folder_iter = mImportedClothingFolders.begin();
+ folder_iter != mImportedClothingFolders.end();
+ ++folder_iter)
{
// First, make a folder in the My Outfits directory.
- const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
- LLUUID folder_id = gInventory.createNewCategory(parent_id,
- LLFolderType::FT_OUTFIT,
- mOutfits[i].second);
- LLAppearanceManager::getInstance()->shallowCopyCategory(mOutfits[i].first, folder_id, NULL);
+ LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, folder_iter->second);
+
+ cat_array.clear();
+ wearable_array.clear();
+ // Collect the contents of each imported clothing folder, so we can create new outfit links for it
+ gInventory.collectDescendents(folder_iter->first, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ for (LLInventoryModel::item_array_t::const_iterator wearable_iter = wearable_array.begin();
+ wearable_iter != wearable_array.end();
+ ++wearable_iter)
+ {
+ const LLViewerInventoryItem *item = wearable_iter->get();
+ link_inventory_item(gAgent.getID(),
+ item->getLinkedUUID(),
+ new_outfit_folder_id,
+ item->getName(),
+ LLAssetType::AT_LINK,
+ NULL);
+ }
}
+
mOutfitsPopulated = true;
}
@@ -2274,6 +2458,8 @@ void LLInitialWearablesFetch::processContents()
}
else
{
+ // if we're constructing the COF from the wearables message, we don't have a proper outfit link
+ LLAppearanceManager::instance().setOutfitDirty(true);
processWearablesMessage();
}
delete this;
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 25f1accb22..4d4a89bcd4 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -674,6 +674,10 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder,
void LLAppearanceManager::updateAppearanceFromCOF()
{
+ // update dirty flag to see if the state of the COF matches
+ // the saved outfit stored as a folder link
+ updateIsDirty();
+
dumpCat(getCOF(),"COF, start");
bool follow_folder_links = true;
@@ -723,14 +727,30 @@ void LLAppearanceManager::updateAppearanceFromCOF()
LLDynamicArray<LLFoundData*> found_container;
for(S32 i = 0; i < wear_items.count(); ++i)
{
- found = new LLFoundData(wear_items.get(i)->getLinkedUUID(), // Wear the base item, not the link
- wear_items.get(i)->getAssetUUID(),
- wear_items.get(i)->getName(),
- wear_items.get(i)->getType());
- holder->mFoundList.push_front(found);
- found_container.put(found);
+ LLViewerInventoryItem *item = wear_items.get(i);
+ LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL;
+ if (item && linked_item)
+ {
+ found = new LLFoundData(linked_item->getUUID(),
+ linked_item->getAssetUUID(),
+ linked_item->getName(),
+ linked_item->getType());
+ holder->mFoundList.push_front(found);
+ found_container.put(found);
+ }
+ else
+ {
+ if (!item)
+ {
+ llwarns << "attempt to wear a null item " << llendl;
+ }
+ else if (!linked_item)
+ {
+ llwarns << "attempt to wear a broken link " << item->getName() << llendl;
+ }
+ }
}
- for(S32 i = 0; i < wear_items.count(); ++i)
+ for(S32 i = 0; i < found_container.count(); ++i)
{
holder->append = false;
found = found_container.get(i);
@@ -989,7 +1009,9 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up
if (linked_already)
{
if (do_update)
+ {
LLAppearanceManager::updateAppearanceFromCOF();
+ }
return;
}
else
@@ -1043,6 +1065,75 @@ void LLAppearanceManager::removeCOFItemLinks(const LLUUID& item_id, bool do_upda
}
}
+void LLAppearanceManager::updateIsDirty()
+{
+ LLUUID cof = getCOF();
+ LLUUID base_outfit;
+
+ // find base outfit link
+ const LLViewerInventoryItem* base_outfit_item = getBaseOutfitLink();
+ LLViewerInventoryCategory* catp = NULL;
+ if (base_outfit_item && base_outfit_item->getIsLinkType())
+ {
+ catp = base_outfit_item->getLinkedCategory();
+ }
+ if(catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
+ {
+ base_outfit = catp->getUUID();
+ }
+
+ if(base_outfit.isNull())
+ {
+ // no outfit link found, display "unsaved outfit"
+ mOutfitIsDirty = true;
+ }
+ else
+ {
+ LLInventoryModel::cat_array_t cof_cats;
+ LLInventoryModel::item_array_t cof_items;
+ gInventory.collectDescendents(cof, cof_cats, cof_items,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ LLInventoryModel::cat_array_t outfit_cats;
+ LLInventoryModel::item_array_t outfit_items;
+ gInventory.collectDescendents(base_outfit, outfit_cats, outfit_items,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ if(outfit_items.count() != cof_items.count() -1)
+ {
+ // Current outfit folder should have one more item than the outfit folder.
+ // this one item is the link back to the outfit folder itself.
+ mOutfitIsDirty = true;
+ }
+ else
+ {
+ typedef std::set<LLUUID> item_set_t;
+ item_set_t cof_set;
+ item_set_t outfit_set;
+
+ // sort COF items by UUID
+ for (S32 i = 0; i < cof_items.count(); ++i)
+ {
+ LLViewerInventoryItem *item = cof_items.get(i);
+ // don't add the base outfit link to the list of objects we're comparing
+ if(item != base_outfit_item)
+ {
+ cof_set.insert(item->getLinkedUUID());
+ }
+ }
+
+ // sort outfit folder by UUID
+ for (S32 i = 0; i < outfit_items.count(); ++i)
+ {
+ LLViewerInventoryItem *item = outfit_items.get(i);
+ outfit_set.insert(item->getLinkedUUID());
+ }
+
+ mOutfitIsDirty = (outfit_set != cof_set);
+ }
+ }
+}
+
//#define DUMP_CAT_VERBOSE
void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
@@ -1079,7 +1170,8 @@ void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& it
}
LLAppearanceManager::LLAppearanceManager():
- mAttachmentInvLinkEnabled(false)
+ mAttachmentInvLinkEnabled(false),
+ mOutfitIsDirty(false)
{
}
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 11b910ee11..b954968998 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -96,6 +96,16 @@ public:
// Add COF link to ensemble folder.
void addEnsembleLink(LLInventoryCategory* item, bool do_update = true);
+ //has the current outfit changed since it was loaded?
+ bool isOutfitDirty() { return mOutfitIsDirty; }
+
+ // set false if you just loaded the outfit, true otherwise
+ void setOutfitDirty(bool isDirty) { mOutfitIsDirty = isDirty; }
+
+ // manually compare ouftit folder link to COF to see if outfit has changed.
+ // should only be necessary to do on initial login.
+ void updateIsDirty();
+
protected:
LLAppearanceManager();
~LLAppearanceManager();
@@ -120,6 +130,7 @@ private:
std::set<LLUUID> mRegisteredAttachments;
bool mAttachmentInvLinkEnabled;
+ bool mOutfitIsDirty;
};
#define SUPPORT_ENSEMBLES 0
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index becc30832d..fb1bded795 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -313,6 +313,7 @@ void init_default_trans_args()
{
default_trans_args.insert("SECOND_LIFE"); // World
default_trans_args.insert("APP_NAME");
+ default_trans_args.insert("CAPITALIZED_APP_NAME");
default_trans_args.insert("SECOND_LIFE_GRID");
default_trans_args.insert("SUPPORT_SITE");
}
@@ -1929,8 +1930,7 @@ bool LLAppViewer::initConfiguration()
LLFirstUse::addConfigVariable("FirstSandbox");
LLFirstUse::addConfigVariable("FirstFlexible");
LLFirstUse::addConfigVariable("FirstDebugMenus");
- LLFirstUse::addConfigVariable("FirstStreamingMusic");
- LLFirstUse::addConfigVariable("FirstStreamingVideo");
+ LLFirstUse::addConfigVariable("FirstStreamingMedia");
LLFirstUse::addConfigVariable("FirstSculptedPrim");
LLFirstUse::addConfigVariable("FirstVoice");
LLFirstUse::addConfigVariable("FirstMedia");
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 21cadda6e3..cda3e3a419 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -576,10 +576,10 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
style_params.font.style = "ITALIC";
if (chat.mFromName.size() > 0)
- mEditor->appendText(chat.mFromName + " ", TRUE, style_params);
+ mEditor->appendText(chat.mFromName, TRUE, style_params);
// Ensure that message ends with NewLine, to avoid losing of new lines
// while copy/paste from text chat. See EXT-3263.
- mEditor->appendText(chat.mText.substr(4) + NEW_LINE, FALSE, style_params);
+ mEditor->appendText(chat.mText.substr(3) + NEW_LINE, FALSE, style_params);
}
else
{
@@ -593,6 +593,12 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
mEditor->appendText(message, FALSE, style_params);
}
mEditor->blockUndo();
+
+ // automatically scroll to end when receiving chat from myself
+ if (chat.mFromID == gAgentID)
+ {
+ mEditor->setCursorAndScrollToEnd();
+ }
}
void LLChatHistory::draw()
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 60a37ac4af..9ce3f29853 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -170,10 +170,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
std::string str_sender;
- if(gAgentID != mFromID)
- str_sender = fromName;
- else
- str_sender = LLTrans::getString("You");
+ str_sender = fromName;
str_sender+=" ";
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index 10b7935caf..abb2fdeb9a 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -44,15 +44,18 @@ static S32 DAYS_PER_MONTH_LEAP[] =
static S32 days_from_month(S32 year, S32 month)
{
+ llassert_always(1 <= month);
+ llassert_always(month <= 12);
+
if (year % 4 == 0
&& year % 100 != 0)
{
// leap year
- return DAYS_PER_MONTH_LEAP[month];
+ return DAYS_PER_MONTH_LEAP[month - 1];
}
else
{
- return DAYS_PER_MONTH_NOLEAP[month];
+ return DAYS_PER_MONTH_NOLEAP[month - 1];
}
}
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index e80499688e..aa343b2f69 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -167,20 +167,21 @@ BOOL LLFloaterAbout::postBuild()
// Now build the various pieces
support << getString("AboutHeader", args);
- if (info.has("COMPILER"))
- {
- support << "\n\n" << getString("AboutCompiler", args);
- }
if (info.has("REGION"))
{
support << "\n\n" << getString("AboutPosition", args);
}
support << "\n\n" << getString("AboutSystem", args);
+ support << "\n";
if (info.has("GRAPHICS_DRIVER_VERSION"))
{
- support << "\n\n" << getString("AboutDriver", args);
+ support << "\n" << getString("AboutDriver", args);
+ }
+ support << "\n" << getString("AboutLibs", args);
+ if (info.has("COMPILER"))
+ {
+ support << "\n" << getString("AboutCompiler", args);
}
- support << "\n\n" << getString("AboutLibs", args);
if (info.has("PACKETS_IN"))
{
support << '\n' << getString("AboutTraffic", args);
@@ -193,11 +194,11 @@ BOOL LLFloaterAbout::postBuild()
support_widget->blockUndo();
// Fix views
- support_widget->setCursorPos(0);
support_widget->setEnabled(FALSE);
+ support_widget->startOfDoc();
- credits_widget->setCursorPos(0);
credits_widget->setEnabled(FALSE);
+ credits_widget->startOfDoc();
return TRUE;
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 11dd48056c..d0716f67b8 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -325,6 +325,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
mCommitCallbackRegistrar.add("Pref.AutoDetectAspect", boost::bind(&LLFloaterPreference::onCommitAutoDetectAspect, this));
+ mCommitCallbackRegistrar.add("Pref.ParcelMediaAutoPlayEnable", boost::bind(&LLFloaterPreference::onCommitParcelMediaAutoPlayEnable, this));
mCommitCallbackRegistrar.add("Pref.onSelectAspectRatio", boost::bind(&LLFloaterPreference::onKeystrokeAspectRatio, this));
mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
@@ -986,6 +987,25 @@ void LLFloaterPreference::onCommitAutoDetectAspect()
}
}
+void LLFloaterPreference::onCommitParcelMediaAutoPlayEnable()
+{
+ BOOL autoplay = getChild<LLCheckBoxCtrl>("autoplay_enabled")->get();
+
+ gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, autoplay);
+
+ lldebugs << "autoplay now = " << int(autoplay) << llendl;
+
+ if (autoplay)
+ {
+ // autoplay toggle has gone from FALSE to TRUE; ensure that
+ // the media system is thus actually turned on too.
+ gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
+ llinfos << "autoplay turned on, turned all media subsystems on" << llendl;
+ }
+}
+
void LLFloaterPreference::refresh()
{
LLPanel::refresh();
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 74a53d673c..b2bc34231d 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -132,6 +132,7 @@ public:
// void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator);
void onCommitAutoDetectAspect();
+ void onCommitParcelMediaAutoPlayEnable();
void applyResolution();
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
void getUIColor(LLUICtrl* ctrl, const LLSD& param);
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index 3042fbc6ec..0964ad7f91 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -64,6 +64,8 @@
// summary which only shows available & correct information
#define USE_SIMPLE_SUMMARY
+const S32 SIZE_OF_ONE_KB = 1024;
+
LLFloaterScriptLimits::LLFloaterScriptLimits(const LLSD& seed)
: LLFloater(seed)
{
@@ -130,7 +132,6 @@ void LLFloaterScriptLimits::refresh()
}
}
-
///----------------------------------------------------------------------------
// Base class for panels
///----------------------------------------------------------------------------
@@ -331,6 +332,57 @@ void LLPanelScriptLimitsRegionMemory::setErrorStatus(U32 status, const std::stri
llerrs << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
}
+// callback from the name cache with an owner name to add to the list
+void LLPanelScriptLimitsRegionMemory::onNameCache(
+ const LLUUID& id,
+ const std::string& first_name,
+ const std::string& last_name)
+{
+ std::string name = first_name + " " + last_name;
+
+ LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
+ std::vector<LLSD>::iterator id_itor;
+ for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
+ {
+ LLSD element = *id_itor;
+ if(element["owner_id"].asUUID() == id)
+ {
+ LLScrollListItem* item = list->getItem(element["id"].asUUID());
+
+ if(item)
+ {
+ item->getColumn(2)->setValue(LLSD(name));
+ element["columns"][2]["value"] = name;
+ }
+ }
+ }
+
+ // fill in the url's tab if needed, all urls must have memory so we can do it all here
+ LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
+ if(instance)
+ {
+ LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
+ LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
+
+ LLScrollListCtrl *list = panel->getChild<LLScrollListCtrl>("scripts_list");
+ std::vector<LLSD>::iterator id_itor;
+ for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
+ {
+ LLSD element = *id_itor;
+ if(element["owner_id"].asUUID() == id)
+ {
+ LLScrollListItem* item = list->getItem(element["id"].asUUID());
+
+ if(item)
+ {
+ item->getColumn(2)->setValue(LLSD(name));
+ element["columns"][2]["value"] = name;
+ }
+ }
+ }
+ }
+}
+
void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
{
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
@@ -345,22 +397,40 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
S32 total_objects = 0;
S32 total_size = 0;
+ std::vector<LLUUID> names_requested;
+
for(S32 i = 0; i < number_parcels; i++)
{
std::string parcel_name = content["parcels"][i]["name"].asString();
-
+ LLUUID parcel_id = content["parcels"][i]["id"].asUUID();
S32 number_objects = content["parcels"][i]["objects"].size();
for(S32 j = 0; j < number_objects; j++)
{
- S32 size = content["parcels"][i]["objects"][j]["resources"]["memory"].asInteger() / 1024;
+ S32 size = content["parcels"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB;
total_size += size;
std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString();
LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID();
+ LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID();
+
+ std::string owner_buf;
+
+ BOOL name_is_cached = gCacheName->getFullName(owner_id, owner_buf);
+ if(!name_is_cached)
+ {
+ if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end())
+ {
+ names_requested.push_back(owner_id);
+ gCacheName->get(owner_id, TRUE,
+ boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
+ this, _1, _2, _3));
+ }
+ }
LLSD element;
element["id"] = task_id;
+ element["owner_id"] = owner_id;
element["columns"][0]["column"] = "size";
element["columns"][0]["value"] = llformat("%d", size);
element["columns"][0]["font"] = "SANSSERIF";
@@ -368,18 +438,18 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
element["columns"][1]["value"] = name_buf;
element["columns"][1]["font"] = "SANSSERIF";
element["columns"][2]["column"] = "owner";
- element["columns"][2]["value"] = "";
+ element["columns"][2]["value"] = owner_buf;
element["columns"][2]["font"] = "SANSSERIF";
element["columns"][3]["column"] = "location";
element["columns"][3]["value"] = parcel_name;
element["columns"][3]["font"] = "SANSSERIF";
- list->addElement(element);
- mObjectListIDs.push_back(task_id);
+ list->addElement(element, ADD_SORTED);
+ mObjectListItems.push_back(element);
total_objects++;
}
}
-
+
mParcelMemoryUsed =total_size;
mGotParcelMemoryUsed = TRUE;
populateParcelMemoryText();
@@ -556,7 +626,7 @@ void LLPanelScriptLimitsRegionMemory::clearList()
childSetValue("memory_used", LLSD(msg_empty_string));
childSetValue("parcels_listed", LLSD(msg_empty_string));
- mObjectListIDs.clear();
+ mObjectListItems.clear();
}
// static
@@ -728,7 +798,7 @@ void LLPanelScriptLimitsRegionURLs::setRegionDetails(LLSD content)
S32 total_objects = 0;
S32 total_size = 0;
-
+
for(S32 i = 0; i < number_parcels; i++)
{
std::string parcel_name = content["parcels"][i]["name"].asString();
@@ -744,6 +814,10 @@ void LLPanelScriptLimitsRegionURLs::setRegionDetails(LLSD content)
std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString();
LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID();
+ LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID();
+
+ std::string owner_buf;
+ gCacheName->getFullName(owner_id, owner_buf); //dont care if this fails as the memory tab will request and fill the field
LLSD element;
@@ -755,14 +829,14 @@ void LLPanelScriptLimitsRegionURLs::setRegionDetails(LLSD content)
element["columns"][1]["value"] = name_buf;
element["columns"][1]["font"] = "SANSSERIF";
element["columns"][2]["column"] = "owner";
- element["columns"][2]["value"] = "";
+ element["columns"][2]["value"] = owner_buf;
element["columns"][2]["font"] = "SANSSERIF";
element["columns"][3]["column"] = "location";
element["columns"][3]["value"] = parcel_name;
element["columns"][3]["font"] = "SANSSERIF";
list->addElement(element);
- mObjectListIDs.push_back(task_id);
+ mObjectListItems.push_back(element);
total_objects++;
}
}
@@ -868,7 +942,7 @@ void LLPanelScriptLimitsRegionURLs::clearList()
childSetValue("urls_used", LLSD(msg_empty_string));
childSetValue("parcels_listed", LLSD(msg_empty_string));
- mObjectListIDs.clear();
+ mObjectListItems.clear();
}
// static
@@ -982,7 +1056,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)
S32 size = 0;
if(content["attachments"][i]["objects"][j]["resources"].has("memory"))
{
- size = content["attachments"][i]["objects"][j]["resources"]["memory"].asInteger();
+ size = content["attachments"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB;
}
S32 urls = 0;
if(content["attachments"][i]["objects"][j]["resources"].has("urls"))
@@ -1059,3 +1133,4 @@ void LLPanelScriptLimitsAttachment::onClickRefresh(void* userdata)
return;
}
}
+
diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h
index 88239136e3..7e2b536eb6 100644
--- a/indra/newview/llfloaterscriptlimits.h
+++ b/indra/newview/llfloaterscriptlimits.h
@@ -54,12 +54,12 @@ public:
// from LLPanel
virtual void refresh();
-
+
private:
-
+
LLFloaterScriptLimits(const LLSD& seed);
~LLFloaterScriptLimits();
-
+
protected:
LLTabContainer* mTab;
@@ -167,13 +167,17 @@ public:
private:
+ void onNameCache( const LLUUID& id,
+ const std::string& first_name,
+ const std::string& last_name);
+
LLUUID mParcelId;
BOOL mGotParcelMemoryUsed;
BOOL mGotParcelMemoryMax;
S32 mParcelMemoryMax;
S32 mParcelMemoryUsed;
- std::vector<LLUUID> mObjectListIDs;
+ std::vector<LLSD> mObjectListItems;
protected:
@@ -218,7 +222,7 @@ private:
S32 mParcelURLsMax;
S32 mParcelURLsUsed;
- std::vector<LLUUID> mObjectListIDs;
+ std::vector<LLSD> mObjectListItems;
protected:
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 98f9171237..0781d8ed06 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -100,8 +100,6 @@ enum EPanDirection
// Values in pixels per region
static const F32 ZOOM_MAX = 128.f;
-static const F32 SIM_COORD_DEFAULT = 128.f;
-
//---------------------------------------------------------------------------
// Globals
//---------------------------------------------------------------------------
@@ -189,7 +187,8 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
mInventory(NULL),
mInventoryObserver(NULL),
mFriendObserver(NULL),
- mCompletingRegionName(""),
+ mCompletingRegionName(),
+ mCompletingRegionPos(),
mWaitingForTracker(FALSE),
mIsClosing(FALSE),
mSetToUserPosition(TRUE),
@@ -205,7 +204,6 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
mCommitCallbackRegistrar.add("WMap.AvatarCombo", boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this));
mCommitCallbackRegistrar.add("WMap.Landmark", boost::bind(&LLFloaterWorldMap::onLandmarkComboCommit, this));
mCommitCallbackRegistrar.add("WMap.SearchResult", boost::bind(&LLFloaterWorldMap::onCommitSearchResult, this));
- mCommitCallbackRegistrar.add("WMap.CommitLocation", boost::bind(&LLFloaterWorldMap::onCommitLocation, this));
mCommitCallbackRegistrar.add("WMap.GoHome", boost::bind(&LLFloaterWorldMap::onGoHome, this));
mCommitCallbackRegistrar.add("WMap.Teleport", boost::bind(&LLFloaterWorldMap::onClickTeleportBtn, this));
mCommitCallbackRegistrar.add("WMap.ShowTarget", boost::bind(&LLFloaterWorldMap::onShowTargetBtn, this));
@@ -664,10 +662,6 @@ void LLFloaterWorldMap::updateLocation()
S32 agent_y = llround( (F32)fmod( agentPos.mdV[VY], (F64)REGION_WIDTH_METERS ) );
S32 agent_z = llround( (F32)agentPos.mdV[VZ] );
- childSetValue("spin x", LLSD(agent_x) );
- childSetValue("spin y", LLSD(agent_y) );
- childSetValue("spin z", LLSD(agent_z) );
-
// Set the current SLURL
mSLURL = LLSLURL::buildSLURL(agent_sim_name, agent_x, agent_y, agent_z);
}
@@ -699,9 +693,6 @@ void LLFloaterWorldMap::updateLocation()
F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
- childSetValue("spin x", LLSD(region_x) );
- childSetValue("spin y", LLSD(region_y) );
- childSetValue("spin z", LLSD((F32)pos_global.mdV[VZ]) );
// simNameFromPosGlobal can fail, so don't give the user an invalid SLURL
if ( gotSimName )
@@ -733,9 +724,11 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3
{
// fill in UI based on URL
gFloaterWorldMap->childSetValue("location", region_name);
- childSetValue("spin x", LLSD((F32)x_coord));
- childSetValue("spin y", LLSD((F32)y_coord));
- childSetValue("spin z", LLSD((F32)z_coord));
+
+ // Save local coords to highlight position after region global
+ // position is returned.
+ gFloaterWorldMap->mCompletingRegionPos.set(
+ (F32)x_coord, (F32)y_coord, (F32)z_coord);
// pass sim name to combo box
gFloaterWorldMap->mCompletingRegionName = region_name;
@@ -899,18 +892,6 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
{
list->operateOnAll(LLCtrlListInterface::OP_DELETE);
}
- if (!childHasKeyboardFocus("spin x"))
- {
- childSetValue("spin x", SIM_COORD_DEFAULT);
- }
- if (!childHasKeyboardFocus("spin y"))
- {
- childSetValue("spin y", SIM_COORD_DEFAULT);
- }
- if (!childHasKeyboardFocus("spin z"))
- {
- childSetValue("spin z", 0);
- }
LLWorldMap::getInstance()->cancelTracking();
mCompletingRegionName = "";
}
@@ -1466,21 +1447,6 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
}
}
-void LLFloaterWorldMap::onCommitLocation()
-{
- LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus();
- if ( LLTracker::TRACKING_LOCATION == tracking_status)
- {
- LLVector3d pos_global = LLTracker::getTrackedPositionGlobal();
- F64 local_x = childGetValue("spin x");
- F64 local_y = childGetValue("spin y");
- F64 local_z = childGetValue("spin z");
- pos_global.mdV[VX] += -fmod(pos_global.mdV[VX], 256.0) + local_x;
- pos_global.mdV[VY] += -fmod(pos_global.mdV[VY], 256.0) + local_y;
- pos_global.mdV[VZ] = local_z;
- trackLocation(pos_global);
- }
-}
void LLFloaterWorldMap::onCommitSearchResult()
{
@@ -1503,12 +1469,19 @@ void LLFloaterWorldMap::onCommitSearchResult()
if (info->isName(sim_name))
{
LLVector3d pos_global = info->getGlobalOrigin();
- F64 local_x = childGetValue("spin x");
- F64 local_y = childGetValue("spin y");
- F64 local_z = childGetValue("spin z");
- pos_global.mdV[VX] += local_x;
- pos_global.mdV[VY] += local_y;
- pos_global.mdV[VZ] = local_z;
+
+ const F64 SIM_COORD_DEFAULT = 128.0;
+ LLVector3 pos_local(SIM_COORD_DEFAULT, SIM_COORD_DEFAULT, 0.0f);
+
+ // Did this value come from a trackURL() request?
+ if (!mCompletingRegionPos.isExactlyZero())
+ {
+ pos_local = mCompletingRegionPos;
+ mCompletingRegionPos.clear();
+ }
+ pos_global.mdV[VX] += (F64)pos_local.mV[VX];
+ pos_global.mdV[VY] += (F64)pos_local.mV[VY];
+ pos_global.mdV[VZ] = (F64)pos_local.mV[VZ];
childSetValue("location", sim_name);
trackLocation(pos_global);
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 7feebb583d..00f5e788fb 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -148,7 +148,6 @@ protected:
void updateSearchEnabled();
void onLocationFocusChanged( LLFocusableElement* ctrl );
void onLocationCommit();
- void onCommitLocation();
void onCommitSearchResult();
void cacheLandmarkPosition();
@@ -170,6 +169,10 @@ private:
LLFriendObserver* mFriendObserver;
std::string mCompletingRegionName;
+ // Local position from trackURL() request, used to select final
+ // position once region lookup complete.
+ LLVector3 mCompletingRegionPos;
+
std::string mLastRegionName;
BOOL mWaitingForTracker;
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 112b23d2df..1ea5868491 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -569,6 +569,8 @@ LLFolderViewItem* LLFolderView::getCurSelectedItem( void )
BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus)
{
+ mSignalSelectCallback = take_keyboard_focus ? SIGNAL_KEYBOARD_FOCUS : SIGNAL_NO_KEYBOARD_FOCUS;
+
if( selection == this )
{
return FALSE;
@@ -596,8 +598,6 @@ BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
llassert(mSelectedItems.size() <= 1);
- mSignalSelectCallback = take_keyboard_focus ? SIGNAL_KEYBOARD_FOCUS : SIGNAL_NO_KEYBOARD_FOCUS;
-
return rv;
}
@@ -820,10 +820,11 @@ void LLFolderView::clearSelection()
mSelectThisID.setNull();
}
-BOOL LLFolderView::getSelectionList(std::set<LLUUID> &selection)
+BOOL LLFolderView::getSelectionList(std::set<LLUUID> &selection) const
{
- selected_items_t::iterator item_it;
- for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
+ for (selected_items_t::const_iterator item_it = mSelectedItems.begin();
+ item_it != mSelectedItems.end();
+ ++item_it)
{
selection.insert((*item_it)->getListener()->getUUID());
}
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 2598af4df4..89e1865e35 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -162,7 +162,7 @@ public:
virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
- virtual BOOL getSelectionList(std::set<LLUUID> &selection);
+ virtual BOOL getSelectionList(std::set<LLUUID> &selection) const;
// make sure if ancestor is selected, descendents are not
void sanitizeSelection();
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index 473d0be912..d6c4459e6f 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -62,6 +62,7 @@ public:
virtual PermissionMask getPermissionMask() const = 0;
virtual LLFolderType::EType getPreferredType() const = 0;
virtual LLPointer<LLUIImage> getIcon() const = 0;
+ virtual LLPointer<LLUIImage> getOpenIcon() const { return getIcon(); }
virtual LLFontGL::StyleFlags getLabelStyle() const = 0;
virtual std::string getLabelSuffix() const = 0;
virtual void openItem( void ) = 0;
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 6f8c738a59..03bb296d29 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -237,7 +237,7 @@ public:
virtual void recursiveDeselect(BOOL deselect_self);
// gets multiple-element selection
- virtual BOOL getSelectionList(std::set<LLUUID> &selection){return TRUE;}
+ virtual BOOL getSelectionList(std::set<LLUUID> &selection) const {return TRUE;}
// Returns true is this object and all of its children can be removed (deleted by user)
virtual BOOL isRemovable();
@@ -304,7 +304,7 @@ public:
// Show children (unfortunate that this is called "open")
virtual void setOpen(BOOL open = TRUE) {};
- virtual BOOL isOpen() { return FALSE; }
+ virtual BOOL isOpen() const { return FALSE; }
virtual LLFolderView* getRoot();
BOOL isDescendantOf( const LLFolderViewFolder* potential_ancestor );
@@ -499,7 +499,7 @@ public:
virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse = RECURSE_NO);
// Get the current state of the folder.
- virtual BOOL isOpen() { return mIsOpen; }
+ virtual BOOL isOpen() const { return mIsOpen; }
// special case if an object is dropped on the child.
BOOL handleDragAndDropFromChild(MASK mask,
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 0b5da40be4..08cf86df4a 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -606,7 +606,7 @@ void LLHUDText::addLine(const LLWString &wstr, const LLColor4& color, const LLFo
U32 line_length = 0;
do
{
- S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wline.length(), TRUE);
+ S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
mTextSegments.push_back(LLHUDTextSegment(iter->substr(line_length, segment_length), style, color));
line_length += segment_length;
}
@@ -642,7 +642,7 @@ void LLHUDText::setLabel(const LLWString &wlabel)
U32 line_length = 0;
do
{
- S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wstr.length(), TRUE);
+ S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wstr.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
mLabelSegments.push_back(LLHUDTextSegment(iter->substr(line_length, segment_length), LLFontGL::NORMAL, mColor));
line_length += segment_length;
}
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index fdc5d14d97..b05568f353 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -595,7 +595,7 @@ void LLIMFloater::updateMessages()
std::string time = msg["time"].asString();
LLUUID from_id = msg["from_id"].asUUID();
- std::string from = from_id != gAgentID ? msg["from"].asString() : LLTrans::getString("You");
+ std::string from = msg["from"].asString();
std::string message = msg["message"].asString();
LLChat chat;
diff --git a/indra/newview/llinspect.h b/indra/newview/llinspect.h
index 731e99534b..a1cb9cd71c 100644
--- a/indra/newview/llinspect.h
+++ b/indra/newview/llinspect.h
@@ -55,7 +55,7 @@ public:
/// Inspectors close themselves when they lose focus
/*virtual*/ void onFocusLost();
-private:
+protected:
LLFrameTimer mCloseTimer;
LLFrameTimer mOpenTimer;
};
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 72b36374dd..acbca60103 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -93,6 +93,10 @@ public:
// Update view based on information from avatar properties processor
void processAvatarData(LLAvatarData* data);
+ // override the inspector mouse leave so timer is only paused if
+ // gear menu is not open
+ /* virtual */ void onMouseLeave(S32 x, S32 y, MASK mask);
+
private:
// Make network requests for all the data to display in this view.
// Used on construction and if avatar id changes.
@@ -259,8 +263,6 @@ BOOL LLInspectAvatar::postBuild(void)
}
-
-
// Multiple calls to showInstance("inspect_avatar", foo) will provide different
// LLSD for foo, which we will catch here.
//virtual
@@ -384,6 +386,19 @@ void LLInspectAvatar::processAvatarData(LLAvatarData* data)
mPropertiesRequest = NULL;
}
+// For the avatar inspector, we only want to unpause the fade timer
+// if neither the gear menu or self gear menu are open
+void LLInspectAvatar::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
+ LLMenuGL* gear_menu_self = getChild<LLMenuButton>("gear_self_btn")->getMenu();
+ if ( !(gear_menu && gear_menu->getVisible()) &&
+ !(gear_menu_self && gear_menu_self->getVisible()))
+ {
+ mOpenTimer.unpause();
+ }
+}
+
void LLInspectAvatar::updateModeratorPanel()
{
bool enable_moderator_panel = false;
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index cb35a287e9..dd313c528d 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -41,6 +41,7 @@
#include "llslurl.h"
#include "llviewermenu.h" // handle_object_touch(), handle_buy()
#include "llviewermedia.h"
+#include "llviewermediafocus.h"
#include "llviewerobjectlist.h" // to select the requested object
// Linden libraries
@@ -82,6 +83,10 @@ public:
// Release the selection and do other cleanup
/*virtual*/ void onClose(bool app_quitting);
+ // override the inspector mouse leave so timer is only paused if
+ // gear menu is not open
+ /* virtual */ void onMouseLeave(S32 x, S32 y, MASK mask);
+
private:
// Refresh displayed data with information from selection manager
void update();
@@ -181,7 +186,6 @@ BOOL LLInspectObject::postBuild(void)
return TRUE;
}
-
// Multiple calls to showInstance("inspect_avatar", foo) will provide different
// LLSD for foo, which we will catch here.
//virtual
@@ -214,6 +218,10 @@ void LLInspectObject::onOpen(const LLSD& data)
LLViewerObject* obj = gObjectList.findObject( mObjectID );
if (obj)
{
+ // Media focus and this code fight over the select manager.
+ // Make sure any media is unfocused before changing the selection here.
+ LLViewerMediaFocus::getInstance()->clearFocus();
+
LLSelectMgr::instance().deselectAll();
mObjectSelection = LLSelectMgr::instance().selectObjectAndFamily(obj);
@@ -562,6 +570,16 @@ void LLInspectObject::updateSecureBrowsing()
getChild<LLUICtrl>("secure_browsing")->setVisible(is_secure_browsing);
}
+// For the object inspector, only unpause the fade timer
+// if the gear menu is not open
+void LLInspectObject::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
+ if ( !(gear_menu && gear_menu->getVisible()))
+ {
+ mOpenTimer.unpause();
+ }
+}
void LLInspectObject::onClickBuy()
{
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index d70221b22a..20d7f5214b 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2074,7 +2074,12 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model
{
if ("open" == action)
{
- openItem();
+ LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(folder->getItemByID(mUUID));
+ if (f)
+ {
+ f->setOpen(TRUE);
+ }
+
return;
}
else if ("paste" == action)
@@ -2228,9 +2233,22 @@ LLUIImagePtr LLFolderBridge::getIcon() const
LLUIImagePtr LLFolderBridge::getIcon(LLFolderType::EType preferred_type)
{
// we only have one folder image now
+ if (preferred_type == LLFolderType::FT_OUTFIT)
+ {
+ return LLUI::getUIImage("Inv_LookFolderClosed");
+ }
return LLUI::getUIImage("Inv_FolderClosed");
}
+LLUIImagePtr LLFolderBridge::getOpenIcon() const
+{
+ if (getPreferredType() == LLFolderType::FT_OUTFIT)
+ {
+ return LLUI::getUIImage("Inv_LookFolderOpen");
+ }
+ return LLUI::getUIImage("Inv_FolderOpen");
+}
+
BOOL LLFolderBridge::renameItem(const std::string& new_name)
{
if(!isItemRenameable())
@@ -2614,6 +2632,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
mItems.push_back(std::string("Rename"));
mItems.push_back(std::string("Delete"));
+
+ // EXT-4030: disallow deletion of currently worn outfit
+ const LLViewerInventoryItem *base_outfit_link = LLAppearanceManager::instance().getBaseOutfitLink();
+ if (base_outfit_link && (cat == base_outfit_link->getLinkedCategory()))
+ {
+ mDisabledItems.push_back(std::string("Delete"));
+ }
}
}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index cc1fa45b26..fced0047e8 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -289,6 +289,7 @@ public:
virtual LLFolderType::EType getPreferredType() const;
virtual LLUIImagePtr getIcon() const;
+ virtual LLUIImagePtr getOpenIcon() const;
static LLUIImagePtr getIcon(LLFolderType::EType preferred_type);
virtual BOOL renameItem(const std::string& new_name);
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 164e72e621..498a29728c 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -433,11 +433,10 @@ void LLInventoryPanel::initializeViews()
{
mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
}
- llinfos << this << " Generating views for start folder " << mStartFolderString << llendl;
rebuildViewsFor(mStartFolderID);
mViewsInitialized = true;
- defaultOpenInventory();
+ openStartFolderOrMyInventory();
}
void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
@@ -491,13 +490,14 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
if (new_listener)
{
- LLFolderViewFolder::Params p;
- p.name = new_listener->getDisplayName();
- p.icon = new_listener->getIcon();
- p.root = mFolders;
- p.listener = new_listener;
- p.tool_tip = p.name;
- LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+ LLFolderViewFolder::Params params;
+ params.name = new_listener->getDisplayName();
+ params.icon = new_listener->getIcon();
+ params.icon_open = new_listener->getOpenIcon();
+ params.root = mFolders;
+ params.listener = new_listener;
+ params.tool_tip = params.name;
+ LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(params);
folderp->setItemSortOrder(mFolders->getSortOrder());
itemp = folderp;
@@ -523,12 +523,13 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
if (new_listener)
{
LLFolderViewItem::Params params;
- params.name(new_listener->getDisplayName());
- params.icon(new_listener->getIcon());
- params.creation_date(new_listener->getCreationDate());
- params.root(mFolders);
- params.listener(new_listener);
- params.rect(LLRect (0, 0, 0, 0));
+ params.name = new_listener->getDisplayName();
+ params.icon = new_listener->getIcon();
+ params.icon_open = new_listener->getOpenIcon();
+ params.creation_date = new_listener->getCreationDate();
+ params.root = mFolders;
+ params.listener = new_listener;
+ params.rect = LLRect (0, 0, 0, 0);
params.tool_tip = params.name;
itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
}
@@ -575,7 +576,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
}
// bit of a hack to make sure the inventory is open.
-void LLInventoryPanel::defaultOpenInventory()
+void LLInventoryPanel::openStartFolderOrMyInventory()
{
if (mStartFolderString != "")
{
@@ -583,13 +584,17 @@ void LLInventoryPanel::defaultOpenInventory()
}
else
{
- // Get the first child (it should be "My Inventory") and
- // open it up by name (just to make sure the first child is actually a folder).
- LLView* first_child = mFolders->getFirstChild();
- if (first_child)
+ // Find My Inventory folder and open it up by name
+ for (LLView *child = mFolders->getFirstChild(); child; child = mFolders->findNextSibling(child))
{
- const std::string& first_child_name = first_child->getName();
- mFolders->openFolder(first_child_name);
+ LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
+ if (fchild && fchild->getListener() &&
+ (fchild->getListener()->getUUID() == gInventory.getRootFolderID()))
+ {
+ const std::string& child_name = child->getName();
+ mFolders->openFolder(child_name);
+ break;
+ }
}
}
}
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 4f7f0a79f6..09533b52f1 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -167,7 +167,7 @@ public:
static LLInventoryPanel *getActiveInventoryPanel(BOOL auto_open = TRUE);
protected:
- void defaultOpenInventory(); // open the first level of inventory
+ void openStartFolderOrMyInventory(); // open the first level of inventory
LLInventoryModel* mInventory;
LLInventoryObserver* mInventoryObserver;
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index fc9654e9ad..92f19c9232 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -59,9 +59,6 @@ const static std::string NEW_LINE_SPACE_PREFIX("\n ");
const static std::string TWO_SPACES(" ");
const static std::string MULTI_LINE_PREFIX(" ");
-//viewer 1.23 may have used "You" for Agent's entries
-const static std::string YOU("You");
-
/**
* Chat log lines - timestamp and name are optional but message text is mandatory.
*
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index e7043b2d00..fc0e51b76d 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -178,7 +178,7 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive)
if (!chat.mMuted)
{
- tmp_chat.mFromName = chat.mFromID != gAgentID ? chat.mFromName : LLTrans::getString("You");
+ tmp_chat.mFromName = chat.mFromName;
if (chat.mChatStyle == CHAT_STYLE_IRC)
{
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index f3d6dbbb46..a55979bb89 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -594,8 +594,10 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g
if (it != mGroups.begin())
groups += ", ";
-
- std::string group_url="[secondlife:///app/group/" + it->second.asString() + "/about " + it->first + "]";
+ std::string group_url= it->second.notNull()
+ ? "[secondlife:///app/group/" + it->second.asString() + "/about " + it->first + "]"
+ : getString("no_group_text");
+
groups += group_url;
}
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 8e14074de1..a1c12412b5 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -84,6 +84,14 @@ BOOL LLPanelOutfitsInventory::postBuild()
return TRUE;
}
+// virtual
+void LLPanelOutfitsInventory::onOpen(const LLSD& key)
+{
+ // Make sure we know which tab is selected, update the filter,
+ // and update verbs.
+ onTabChange();
+}
+
void LLPanelOutfitsInventory::updateVerbs()
{
if (mParent)
@@ -94,6 +102,7 @@ void LLPanelOutfitsInventory::updateVerbs()
if (mListCommands)
{
mListCommands->childSetVisible("look_edit_btn",sShowDebugEditor);
+ updateListCommands();
}
}
@@ -176,7 +185,6 @@ void LLPanelOutfitsInventory::onNew()
void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
{
- updateListCommands();
updateVerbs();
if (getRootFolder()->needsAutoRename() && items.size())
{
@@ -264,9 +272,11 @@ void LLPanelOutfitsInventory::updateListCommands()
{
bool trash_enabled = isActionEnabled("delete");
bool wear_enabled = isActionEnabled("wear");
+ bool make_outfit_enabled = isActionEnabled("make_outfit");
mListCommands->childSetEnabled("trash_btn", trash_enabled);
mListCommands->childSetEnabled("wear_btn", wear_enabled);
+ mListCommands->childSetEnabled("make_outfit_btn", make_outfit_enabled);
}
void LLPanelOutfitsInventory::onGearButtonClick()
@@ -303,6 +313,8 @@ void LLPanelOutfitsInventory::onClipboardAction(const LLSD& userdata)
{
std::string command_name = userdata.asString();
getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name);
+ updateListCommands();
+ updateVerbs();
}
void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
@@ -323,6 +335,7 @@ void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
{
onWearButtonClick();
}
+ // Note: This option has been removed from the gear menu.
if (command_name == "add")
{
onAdd();
@@ -343,20 +356,22 @@ void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
{
onClipboardAction("delete");
}
+ updateListCommands();
+ updateVerbs();
}
BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
{
const std::string command_name = userdata.asString();
- if (command_name == "delete")
+ if (command_name == "delete" || command_name == "remove")
{
BOOL can_delete = FALSE;
LLFolderView *folder = getActivePanel()->getRootFolder();
if (folder)
{
- can_delete = TRUE;
std::set<LLUUID> selection_set;
folder->getSelectionList(selection_set);
+ can_delete = (selection_set.size() > 0);
for (std::set<LLUUID>::iterator iter = selection_set.begin();
iter != selection_set.end();
++iter)
@@ -375,9 +390,9 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
LLFolderView *folder = getActivePanel()->getRootFolder();
if (folder)
{
- can_delete = TRUE;
std::set<LLUUID> selection_set;
folder->getSelectionList(selection_set);
+ can_delete = (selection_set.size() > 0);
for (std::set<LLUUID>::iterator iter = selection_set.begin();
iter != selection_set.end();
++iter)
@@ -391,10 +406,24 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
}
return FALSE;
}
+ if (command_name == "rename" ||
+ command_name == "delete_outfit")
+ {
+ return (getCorrectListenerForAction() != NULL) && hasItemsSelected();
+ }
+
+ if (command_name == "wear" ||
+ command_name == "make_outfit")
+ {
+ const BOOL is_my_outfits = (mActivePanel->getName() == "outfitslist_tab");
+ if (!is_my_outfits)
+ {
+ return FALSE;
+ }
+ }
+
if (command_name == "edit" ||
- command_name == "wear" ||
- command_name == "add" ||
- command_name == "remove"
+ command_name == "add"
)
{
return (getCorrectListenerForAction() != NULL);
@@ -402,6 +431,19 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
return TRUE;
}
+bool LLPanelOutfitsInventory::hasItemsSelected()
+{
+ bool has_items_selected = false;
+ LLFolderView *folder = getActivePanel()->getRootFolder();
+ if (folder)
+ {
+ std::set<LLUUID> selection_set;
+ folder->getSelectionList(selection_set);
+ has_items_selected = (selection_set.size() > 0);
+ }
+ return has_items_selected;
+}
+
bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
{
*accept = ACCEPT_NO;
@@ -425,17 +467,17 @@ bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropTy
void LLPanelOutfitsInventory::initTabPanels()
{
mTabPanels.resize(2);
+
+ LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_tab");
+ cof_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ mTabPanels[0] = cof_panel;
- LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_accordionpanel");
+ LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_tab");
myoutfits_panel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, LLInventoryFilter::FILTERTYPE_CATEGORY);
myoutfits_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mTabPanels[0] = myoutfits_panel;
- mActivePanel = myoutfits_panel;
+ mTabPanels[1] = myoutfits_panel;
-
- LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_accordionpanel");
- cof_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mTabPanels[1] = cof_panel;
+ mActivePanel = mTabPanels[0];
for (tabpanels_vec_t::iterator iter = mTabPanels.begin();
iter != mTabPanels.end();
@@ -479,9 +521,7 @@ void LLPanelOutfitsInventory::onTabChange()
return;
}
mActivePanel->setFilterSubString(mFilterSubString);
-
- bool is_my_outfits = (mActivePanel->getName() == "outfitslist_accordionpanel");
- mListCommands->childSetEnabled("make_outfit_btn", is_my_outfits);
+ updateVerbs();
}
LLInventoryPanel* LLPanelOutfitsInventory::getActivePanel()
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index 1e084750a0..b117311775 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -53,6 +53,7 @@ public:
virtual ~LLPanelOutfitsInventory();
/*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
void onSearchEdit(const std::string& string);
void onAdd();
@@ -114,6 +115,7 @@ protected:
BOOL isActionEnabled(const LLSD& command_name);
void onCustomAction(const LLSD& command_name);
bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
+ bool hasItemsSelected();
private:
LLPanel* mListCommands;
LLMenuGL* mMenuGearDefault;
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index da3f1543dd..d0b537cdfc 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -357,7 +357,6 @@ void LLScreenChannel::loadStoredToastByNotificationIDToChannel(LLUUID id)
toast->setIsHidden(false);
toast->resetTimer();
mToastList.push_back((*it));
- mStoredToastList.erase(it);
redrawToasts();
}
@@ -779,6 +778,19 @@ void LLScreenChannel::hideToastsFromScreen()
}
//--------------------------------------------------------------------------
+void LLScreenChannel::hideToast(const LLUUID& notification_id)
+{
+ std::vector<ToastElem>::iterator it = find(mToastList.begin(), mToastList.end(), notification_id);
+ if(mToastList.end() != it)
+ {
+ ToastElem te = *it;
+ te.toast->setVisible(FALSE);
+ te.toast->stopTimer();
+ mToastList.erase(it);
+ }
+}
+
+//--------------------------------------------------------------------------
void LLScreenChannel::removeToastsFromChannel()
{
hideToastsFromScreen();
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
index 38f27f756b..661b9e4e60 100644
--- a/indra/newview/llscreenchannel.h
+++ b/indra/newview/llscreenchannel.h
@@ -176,6 +176,8 @@ public:
void modifyToastByNotificationID(LLUUID id, LLPanel* panel);
// hide all toasts from screen, but not remove them from a channel
void hideToastsFromScreen();
+ // hide toast by notification id
+ void hideToast(const LLUUID& notification_id);
// removes all toasts from a channel
void removeToastsFromChannel();
// show all toasts in a channel
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index e2ce534c4f..0ae62843ac 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -151,6 +151,8 @@ BOOL LLSidepanelAppearance::postBuild()
}
mCurrentLookName = getChild<LLTextBox>("currentlook_name");
+
+ mOutfitDirtyTag = getChild<LLTextBox>("currentlook_title");
mCurrOutfitPanel = getChild<LLPanel>("panel_currentlook");
@@ -166,6 +168,11 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)
refreshCurrentOutfitName();
updateVerbs();
+ if (mPanelOutfitsInventory)
+ {
+ mPanelOutfitsInventory->onOpen(key);
+ }
+
if(key.size() == 0)
return;
@@ -208,7 +215,7 @@ void LLSidepanelAppearance::onOpenOutfitButtonClicked()
if (tab_outfits)
{
tab_outfits->changeOpenClose(FALSE);
- LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_accordionpanel");
+ LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_tab");
if (inventory_panel)
{
LLFolderView *folder = inventory_panel->getRootFolder();
@@ -311,6 +318,7 @@ void LLSidepanelAppearance::updateVerbs()
void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
{
+ mOutfitDirtyTag->setVisible(LLAppearanceManager::getInstance()->isOutfitDirty());
if (name == "")
{
const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink();
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index 8ef2088eda..9524b0ece9 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -86,6 +86,7 @@ private:
LLPanel* mCurrOutfitPanel;
LLTextBox* mCurrentLookName;
+ LLTextBox* mOutfitDirtyTag;
// Used to make sure the user's inventory is in memory.
LLCurrentlyWornFetchObserver* mFetchWorn;
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 50cec3184d..0b8f66c5f3 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -215,6 +215,10 @@ void LLSidepanelTaskInfo::disableAll()
childSetVisible("E:", FALSE);
childSetVisible("N:", FALSE);
childSetVisible("F:", FALSE);
+
+ mOpenBtn->setEnabled(FALSE);
+ mPayBtn->setEnabled(FALSE);
+ mBuyBtn->setEnabled(FALSE);
}
void LLSidepanelTaskInfo::refresh()
@@ -1119,6 +1123,8 @@ void LLSidepanelTaskInfo::updateVerbs()
*/
mOpenBtn->setEnabled(enable_object_open());
+ mPayBtn->setEnabled(enable_pay_object());
+ mBuyBtn->setEnabled(enable_buy_object());
}
void LLSidepanelTaskInfo::onOpenButtonClicked()
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index 44cf82540a..b5884e8364 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -701,7 +701,11 @@ void LLNotificationWellWindow::onItemClick(LLSysWellItem* item)
{
LLUUID id = item->getID();
if(mChannel)
+ {
+ mChannel->hideToast(mLoadedToastId);
mChannel->loadStoredToastByNotificationIDToChannel(id);
+ mLoadedToastId = id;
+ }
}
void LLNotificationWellWindow::onItemClose(LLSysWellItem* item)
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index ded3abcbf4..0c81d1f369 100644
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -162,6 +162,9 @@ private:
void onItemClick(LLSysWellItem* item);
void onItemClose(LLSysWellItem* item);
+ // ID of a toast loaded by user (by clicking notification well item)
+ LLUUID mLoadedToastId;
+
};
/**
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 5f66e6b409..412878eef5 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -68,6 +68,7 @@
#include "llviewermedia.h"
#include "llvoavatarself.h"
#include "llviewermediafocus.h"
+#include "llvovolume.h"
#include "llworld.h"
#include "llui.h"
#include "llweb.h"
@@ -629,12 +630,14 @@ static bool needs_tooltip(LLSelectNode* nodep)
return false;
LLViewerObject* object = nodep->getObject();
+ LLVOVolume* vovolume = dynamic_cast<LLVOVolume*>(object);
LLViewerObject *parent = (LLViewerObject *)object->getParent();
if (object->flagHandleTouch()
|| (parent && parent->flagHandleTouch())
|| object->flagTakesMoney()
|| (parent && parent->flagTakesMoney())
|| object->flagAllowInventoryAdd()
+ || (vovolume && vovolume->hasMedia())
)
{
return true;
@@ -728,10 +731,11 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
LLInspector::Params p;
p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
p.message(avatar_name);
- p.image(LLUI::getUIImage("Info"));
+ p.image.name("Inspector_I");
p.click_callback(boost::bind(showAvatarInspector, hover_object->getID()));
p.visible_time_near(6.f);
p.visible_time_far(3.f);
+ p.delay_time(0.35f);
p.wrap(false);
LLToolTipMgr::instance().show(p);
@@ -818,7 +822,7 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
LLInspector::Params p;
p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
p.message(tooltip_msg);
- p.image(LLUI::getUIImage("Info_Off"));
+ p.image.name("Inspector_I");
p.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace));
p.time_based_media(is_time_based_media);
p.web_based_media(is_web_based_media);
@@ -827,6 +831,7 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
p.click_homepage_callback(boost::bind(VisitHomePage, mHoverPick));
p.visible_time_near(6.f);
p.visible_time_far(3.f);
+ p.delay_time(0.35f);
p.wrap(false);
LLToolTipMgr::instance().show(p);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 0fc0afed3e..7e8c8eb92e 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -170,12 +170,15 @@ public:
// accept this and go past it in the MIME type probe
// 302 means the resource can be found temporarily in a different place - added this for join.secondlife.com
// 499 is a code specifc to join.secondlife.com (????) apparently safe to ignore
- if( ((status >= 200) && (status < 300)) ||
- ((status >= 400) && (status < 499)) ||
- (status == 500) ||
- (status == 302) ||
- (status == 499)
- )
+// if( ((status >= 200) && (status < 300)) ||
+// ((status >= 400) && (status < 499)) ||
+// (status == 500) ||
+// (status == 302) ||
+// (status == 499)
+// )
+ // We now no longer check the error code returned from the probe.
+ // If we have a mime type, use it. If not, default to the web plugin and let it handle error reporting.
+ if(1)
{
// The probe was successful.
if(mime_type.empty())
@@ -2541,76 +2544,3 @@ void LLViewerMediaImpl::setTextureID(LLUUID id)
}
}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-void LLViewerMedia::toggleMusicPlay(void*)
-{
-// FIXME: This probably doesn't belong here
-#if 0
- if (mMusicState != PLAYING)
- {
- mMusicState = PLAYING; // desired state
- if (gAudiop)
- {
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if ( parcel )
- {
- gAudiop->startInternetStream(parcel->getMusicURL());
- }
- }
- }
- else
- {
- mMusicState = STOPPED; // desired state
- if (gAudiop)
- {
- gAudiop->stopInternetStream();
- }
- }
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-void LLViewerMedia::toggleMediaPlay(void*)
-{
-// FIXME: This probably doesn't belong here
-#if 0
- if (LLViewerMedia::isMediaPaused())
- {
- LLViewerParcelMedia::start();
- }
- else if(LLViewerMedia::isMediaPlaying())
- {
- LLViewerParcelMedia::pause();
- }
- else
- {
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (parcel)
- {
- LLViewerParcelMedia::play(parcel);
- }
- }
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-void LLViewerMedia::mediaStop(void*)
-{
-// FIXME: This probably doesn't belong here
-#if 0
- LLViewerParcelMedia::stop();
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-bool LLViewerMedia::isMusicPlaying()
-{
-// FIXME: This probably doesn't belong here
-// FIXME: make this work
- return false;
-}
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 9119b783c2..b103c48bd8 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -99,14 +99,10 @@ class LLViewerMedia
static void setVolume(F32 volume);
static void updateMedia(void* dummy_arg = NULL);
- static bool isMusicPlaying();
static void initClass();
static void cleanupClass();
- static void toggleMusicPlay(void*);
- static void toggleMediaPlay(void*);
- static void mediaStop(void*);
static F32 getVolume();
static void muteListChanged();
static void setInWorldMediaDisabled(bool disabled);
@@ -127,7 +123,10 @@ class LLViewerMediaImpl
{
LOG_CLASS(LLViewerMediaImpl);
public:
-
+
+ friend class LLViewerMedia;
+ friend class LLMimeDiscoveryResponder;
+
LLViewerMediaImpl(
const LLUUID& texture_id,
S32 media_width,
@@ -206,11 +205,15 @@ public:
bool isMediaPaused();
bool hasMedia() const;
bool isMediaFailed() const { return mMediaSourceFailed; };
+ void setMediaFailed(bool val) { mMediaSourceFailed = val; }
void resetPreviousMediaState();
void setDisabled(bool disabled);
bool isMediaDisabled() const { return mIsDisabled; };
-
+
+ void setInNearbyMediaList(bool in_list) { mInNearbyMediaList = in_list; }
+ bool getInNearbyMediaList() { return mInNearbyMediaList; }
+
// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
bool isForcedUnloaded() const;
@@ -315,7 +318,7 @@ public:
void setNavState(EMediaNavState state);
void cancelMimeTypeProbe();
-public:
+private:
// a single media url with some data and an impl.
LLPluginClassMedia* mMediaSource;
LLUUID mTextureId;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 5445a79137..1bff04352c 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -62,6 +62,7 @@
#include "llfloaterreporter.h"
#include "llfloatersearch.h"
#include "llfloaterscriptdebug.h"
+#include "llfloatersnapshot.h"
#include "llfloatertools.h"
#include "llfloaterworldmap.h"
#include "llavataractions.h"
@@ -436,17 +437,7 @@ void init_menus()
gMenuBarView->setBackgroundColor( color );
gMenuHolder->addChild(gMenuBarView);
-
- // menu holder appears on top of menu bar so you can see the menu title
- // flash when an item is triggered (the flash occurs in the holder)
- gViewerWindow->getRootView()->addChild(gMenuHolder);
-
- // This removes tool tip view from main view and adds it
- // to root view in front of menu holder.
- // Otherwise tool tips for menu items would be overlapped by menu, since
- // main view is behind of menu holder now.
- gViewerWindow->getRootView()->addChild(gToolTipView);
-
+
gViewerWindow->setMenuBackgroundColor(false,
LLViewerLogin::getInstance()->isInProductionGrid());
@@ -5857,8 +5848,12 @@ void confirm_replace_attachment(S32 option, void* user_data)
}
}
-bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
+void callback_attachment_drop(const LLSD& notification, const LLSD& response)
{
+ // Ensure user confirmed the drop
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option != 0) return;
+
// Called when the user clicked on an object attached to them
// and selected "Drop".
LLUUID object_id = notification["payload"]["object_id"].asUUID();
@@ -5867,7 +5862,7 @@ bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
if (!object)
{
llwarns << "handle_drop_attachment() - no object to drop" << llendl;
- return true;
+ return;
}
LLViewerObject *parent = (LLViewerObject*)object->getParent();
@@ -5884,13 +5879,13 @@ bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
if (!object)
{
llwarns << "handle_detach() - no object to detach" << llendl;
- return true;
+ return;
}
if (object->isAvatar())
{
llwarns << "Trying to detach avatar from avatar." << llendl;
- return true;
+ return;
}
// reselect the object
@@ -5898,7 +5893,7 @@ bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
LLSelectMgr::getInstance()->sendDropAttachment();
- return true;
+ return;
}
class LLAttachmentDrop : public view_listener_t
@@ -7954,8 +7949,8 @@ void initialize_menus()
enable.add("Avatar.EnableMute", boost::bind(&enable_object_mute));
enable.add("Object.EnableMute", boost::bind(&enable_object_mute));
-
enable.add("Object.EnableBuy", boost::bind(&enable_buy_object));
+ commit.add("Object.ZoomIn", boost::bind(&handle_look_at_selection, "zoom"));
// Attachment pie menu
enable.add("Attachment.Label", boost::bind(&onEnableAttachmentLabel, _1, _2));
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 86f0f4e04e..0f7903a7a5 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -34,6 +34,7 @@
#include "llviewerparcelmedia.h"
#include "llagent.h"
+#include "llaudioengine.h"
#include "llviewercontrol.h"
#include "llviewermedia.h"
#include "llviewerregion.h"
@@ -109,7 +110,9 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
std::string mediaCurrentUrl = std::string( parcel->getMediaCurrentURL());
// First use warning
- if( ! mediaUrl.empty() && gWarningSettings.getBOOL("FirstStreamingVideo") )
+ if( (!mediaUrl.empty() ||
+ !parcel->getMusicURL().empty())
+ && gWarningSettings.getBOOL("FirstStreamingMedia") )
{
LLNotificationsUtil::add("ParcelCanPlayMedia", LLSD(), LLSD(),
boost::bind(callback_play_media, _1, _2, parcel));
@@ -593,16 +596,28 @@ bool callback_play_media(const LLSD& notification, const LLSD& response, LLParce
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (option == 0)
{
+ // user has elected to automatically play media.
+ gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, TRUE);
gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
if(!gSavedSettings.getBOOL("AudioStreamingMedia"))
gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
+ // play media right now, if available
LLViewerParcelMedia::play(parcel);
+ // play music right now, if available
+ if (parcel)
+ {
+ std::string music_url = parcel->getMusicURL();
+ if (gAudiop && !music_url.empty())
+ gAudiop->startInternetStream(music_url);
+ }
}
else
{
gSavedSettings.setBOOL("AudioStreamingVideo", FALSE);
+ gSavedSettings.setBOOL("AudioStreamingMusic", FALSE);
}
- gWarningSettings.setBOOL("FirstStreamingVideo", FALSE);
+ gWarningSettings.setBOOL("FirstStreamingMedia", FALSE);
return false;
}
diff --git a/indra/newview/llviewerparcelmediaautoplay.cpp b/indra/newview/llviewerparcelmediaautoplay.cpp
index 1b79b47905..ad2723b66b 100644
--- a/indra/newview/llviewerparcelmediaautoplay.cpp
+++ b/indra/newview/llviewerparcelmediaautoplay.cpp
@@ -35,6 +35,7 @@
#include "llviewerparcelmedia.h"
#include "llviewercontrol.h"
#include "llviewermedia.h"
+#include "llviewerregion.h"
#include "llparcel.h"
#include "llviewerparcelmgr.h"
#include "lluuid.h"
@@ -48,6 +49,8 @@ const F32 AUTOPLAY_SPEED = 0.1f; // how slow should the agent be moving t
LLViewerParcelMediaAutoPlay::LLViewerParcelMediaAutoPlay() :
LLEventTimer(1),
+
+ mLastParcelID(-1),
mPlayed(FALSE),
mTimeInParcel(0)
{
@@ -81,9 +84,18 @@ void LLViewerParcelMediaAutoPlay::playStarted()
BOOL LLViewerParcelMediaAutoPlay::tick()
{
LLParcel *this_parcel = NULL;
+ LLViewerRegion *this_region = NULL;
std::string this_media_url;
LLUUID this_media_texture_id;
S32 this_parcel_id = 0;
+ LLUUID this_region_id;
+
+ this_region = gAgent.getRegion();
+
+ if (this_region)
+ {
+ this_region_id = this_region->getRegionID();
+ }
this_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
@@ -96,12 +108,14 @@ BOOL LLViewerParcelMediaAutoPlay::tick()
this_parcel_id = this_parcel->getLocalID();
}
- if (this_parcel_id != mLastParcelID)
+ if (this_parcel_id != mLastParcelID ||
+ this_region_id != mLastRegionID)
{
// we've entered a new parcel
mPlayed = FALSE; // we haven't autoplayed yet
mTimeInParcel = 0; // reset our timer
mLastParcelID = this_parcel_id;
+ mLastRegionID = this_region_id;
}
mTimeInParcel += mPeriod; // increase mTimeInParcel by the amount of time between ticks
diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h
index 16279e7f1f..1d80b4756c 100644
--- a/indra/newview/llviewerparcelmediaautoplay.h
+++ b/indra/newview/llviewerparcelmediaautoplay.h
@@ -34,6 +34,7 @@
#define LLVIEWERPARCELMEDIAAUTOPLAY_H
#include "lltimer.h"
+#include "lluuid.h"
// timer to automatically play media
class LLViewerParcelMediaAutoPlay : LLEventTimer
@@ -47,6 +48,7 @@ class LLViewerParcelMediaAutoPlay : LLEventTimer
private:
S32 mLastParcelID;
+ LLUUID mLastRegionID;
BOOL mPlayed;
F32 mTimeInParcel;
};
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 87a9eae028..5a5c4e7480 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -44,6 +44,7 @@
#include "llparcel.h"
#include "llsecondlifeurls.h"
#include "message.h"
+#include "llfloaterreg.h"
// Viewer includes
#include "llagent.h"
@@ -52,6 +53,7 @@
#include "llfirstuse.h"
#include "llfloaterbuyland.h"
#include "llfloatergroups.h"
+#include "llfloaternearbymedia.h"
#include "llfloatersellland.h"
#include "llfloatertools.h"
#include "llparcelselection.h"
@@ -1735,7 +1737,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
else if (!gAudiop->getInternetStreamURL().empty())
{
- llinfos << "Stopping parcel music" << llendl;
+ llinfos << "Stopping parcel music (parcel stream URL is empty)" << llendl;
gAudiop->startInternetStream(LLStringUtil::null);
}
}
@@ -1754,15 +1756,19 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
void optionally_start_music(const std::string& music_url)
{
- if (gSavedSettings.getBOOL("AudioStreamingMusic") && gSavedSettings.getBOOL("AudioStreamingMedia"))
- {
- // Make the user click the start button on the overlay bar. JC
- // llinfos << "Starting parcel music " << music_url << llendl;
-
- // now only play music when you enter a new parcel if the control is in PLAY state
- // changed as part of SL-4878
- if ( gOverlayBar && gOverlayBar->musicPlaying())
+ if (gSavedSettings.getBOOL("AudioStreamingMusic") &&
+ gSavedSettings.getBOOL("AudioStreamingMedia"))
+ {
+ // only play music when you enter a new parcel if the UI control for this
+ // was not *explicitly* stopped by the user. (part of SL-4878)
+ LLFloaterNearbyMedia *nearby_media_floater = LLFloaterReg::findTypedInstance<LLFloaterNearbyMedia>("nearby_media");
+ if ((nearby_media_floater &&
+ nearby_media_floater->getParcelAudioAutoStart()) ||
+ // or they have expressed no opinion in the UI, but have autoplay on...
+ (!nearby_media_floater &&
+ gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING)))
{
+ llinfos << "Starting parcel music " << music_url << llendl;
gAudiop->startInternetStream(music_url);
}
}
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index f825eaa8ab..1edaeec848 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -3007,7 +3007,7 @@ void LLViewerMediaTexture::addFace(LLFace* facep)
LLViewerTexture::addFace(facep) ;
const LLTextureEntry* te = facep->getTextureEntry() ;
- if(te)
+ if(te && te->getID().notNull())
{
LLViewerTexture* tex = gTextureList.findImage(te->getID()) ;
if(tex)
@@ -3024,7 +3024,10 @@ void LLViewerMediaTexture::addFace(LLFace* facep)
return ;
}
- llerrs << "The face does not have a valid texture before media texture." << llendl ;
+ if(te && te->getID().notNull()) //should have a texture
+ {
+ llerrs << "The face does not have a valid texture before media texture." << llendl ;
+ }
}
//virtual
@@ -3033,7 +3036,7 @@ void LLViewerMediaTexture::removeFace(LLFace* facep)
LLViewerTexture::removeFace(facep) ;
const LLTextureEntry* te = facep->getTextureEntry() ;
- if(te)
+ if(te && te->getID().notNull())
{
LLViewerTexture* tex = gTextureList.findImage(te->getID()) ;
if(tex)
@@ -3094,7 +3097,10 @@ void LLViewerMediaTexture::removeFace(LLFace* facep)
}
}
- llerrs << "mTextureList texture reference number is corrupted." << llendl ;
+ if(te && te->getID().notNull()) //should have a texture
+ {
+ llerrs << "mTextureList texture reference number is corrupted." << llendl ;
+ }
}
void LLViewerMediaTexture::stopPlaying()
@@ -3130,11 +3136,15 @@ void LLViewerMediaTexture::switchTexture(LLFace* facep)
const LLTextureEntry* te = facep->getTextureEntry() ;
if(te)
{
- LLViewerTexture* tex = gTextureList.findImage(te->getID()) ;
+ LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID()) : NULL ;
if(!tex && te->getID() != mID)//try parcel media.
{
tex = gTextureList.findImage(mID) ;
}
+ if(!tex)
+ {
+ tex = LLViewerFetchedTexture::sDefaultImagep ;
+ }
facep->switchTexture(tex) ;
}
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 1400253176..83cbc8a1f9 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1897,7 +1897,7 @@ void LLViewerWindow::draw()
if (!gSavedSettings.getBOOL("RenderUIBuffer"))
{
- LLUI::sDirtyRect = this->getWindowRectRaw();
+ LLUI::sDirtyRect = getWindowRectScaled();
}
// HACK for timecode debugging
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 70bfc67523..d23bcf9006 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1852,12 +1852,22 @@ void LLVOVolume::mediaNavigateBounceBack(U8 texture_index)
if (mep && impl)
{
std::string url = mep->getCurrentURL();
- if (url.empty())
+ // If the url we're trying to "bounce back" to is either empty or not
+ // allowed by the whitelist, try the home url. If *that* doesn't work,
+ // set the media as failed and unload it
+ if (url.empty() || !mep->checkCandidateUrl(url))
{
url = mep->getHomeURL();
}
- if (! url.empty())
- {
+ if (url.empty() || !mep->checkCandidateUrl(url))
+ {
+ // The url to navigate back to is not good, and we have nowhere else
+ // to go.
+ LL_WARNS("MediaOnAPrim") << "FAILED to bounce back URL \"" << url << "\" -- unloading impl" << LL_ENDL;
+ impl->setMediaFailed(true);
+ }
+ else {
+ // Okay, navigate now
LL_INFOS("MediaOnAPrim") << "bouncing back to URL: " << url << LL_ENDL;
impl->navigateTo(url, "", false, true);
}
@@ -2689,13 +2699,16 @@ U32 LLVOVolume::getRenderCost(std::set<LLUUID> &textures) const
const LLTextureEntry* te = face->getTextureEntry();
const LLViewerTexture* img = face->getTexture();
- textures.insert(img->getID());
+ if (img)
+ {
+ textures.insert(img->getID());
+ }
if (face->getPoolType() == LLDrawPool::POOL_ALPHA)
{
alpha++;
}
- else if (img->getPrimaryFormat() == GL_ALPHA)
+ else if (img && img->getPrimaryFormat() == GL_ALPHA)
{
invisi = 1;
}
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index cb511c2f0b..887cff56f6 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -64,14 +64,14 @@
value="0 0 1 1" />
<color
name="Yellow"
- value="0.114 0.65 0.1" />
+ value="1 1 0 1" />
<color
name="Green"
- value="0 .39 .10 1" />
+ value="0 1 0 1" />
<color
name="Transparent"
value="0 0 0 0" />
- <!-- Make potentially unused colors show up bright purple.
+ <!-- This color name makes potentially unused colors show up bright purple.
Leave this here until all Unused? are removed below, otherwise
the viewer generates many warnings on startup. -->
<color
@@ -168,6 +168,9 @@
name="ChatHistoryTextColor"
reference="LtGray" />
<color
+ name="ChicletFlashColor"
+ reference="0.114 0.65 0.1" />
+ <color
name="ColorDropShadow"
reference="Black_50" />
<color
@@ -229,7 +232,7 @@
value="1 0 0 1" />
<color
name="ColorPaletteEntry20"
- reference="Unused?" />
+ reference=".5 .5 1 0" />
<color
name="ColorPaletteEntry21"
value="0 1 0 1" />
@@ -367,7 +370,7 @@
reference="Unused?" />
<color
name="HighlightChildColor"
- reference="Unused?" />
+ reference="Yellow" />
<color
name="HighlightInspectColor"
value="1 0.5 0 1" />
@@ -619,7 +622,7 @@
value="0.13 0.42 0.77 1" />
<color
name="SilhouetteParentColor"
- reference="Unused?" />
+ reference="Yellow" />
<color
name="SliderDisabledThumbColor"
reference="White_25" />
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png
new file mode 100644
index 0000000000..447e0af0be
--- /dev/null
+++ b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/navbar/NavBar_BG.png b/indra/newview/skins/default/textures/navbar/NavBar_BG.png
index 1df61751a8..38eea783e6 100644
--- a/indra/newview/skins/default/textures/navbar/NavBar_BG.png
+++ b/indra/newview/skins/default/textures/navbar/NavBar_BG.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index cc87d5c105..75424e71f5 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -71,7 +71,7 @@ with the same filename but different name
<texture name="Audio_Press" file_name="icons/Audio_Press.png" preload="false" />
<texture name="Avaline_Icon" file_name="icons/avaline_default_icon.jpg" preload="true" />
-
+
<texture name="BackArrow_Disabled" file_name="icons/BackArrow_Disabled.png" preload="false" />
<texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" />
<texture name="BackArrow_Press" file_name="icons/BackArrow_Press.png" preload="false" />
@@ -222,7 +222,8 @@ with the same filename but different name
<texture name="Inspector_Background" file_name="windows/Inspector_Background.png" preload="false"
scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />
<texture name="Inspector_Hover" file_name="windows/Inspector_Hover.png" preload="false" />
-
+ <texture name="Inspector_I" file_name="windows/Inspector_I.png" preload="false" />
+
<texture name="Inv_Acessories" file_name="icons/Inv_Accessories.png" preload="false" />
<texture name="Inv_Alpha" file_name="icons/Inv_Alpha.png" preload="false" />
<texture name="Inv_Animation" file_name="icons/Inv_Animation.png" preload="false" />
@@ -305,8 +306,8 @@ with the same filename but different name
<texture name="Movement_Up_Off" file_name="bottomtray/Movement_Up_Off.png" preload="false" />
<texture name="Movement_Up_On" file_name="bottomtray/Movement_Up_On.png" preload="false" />
- <texture name="NavBar_BG_NoFav" file_name="navbar/NavBar_BG_NoFav.png" preload="false" />
- <texture name="NavBar_BG" file_name="navbar/NavBar_BG.png" preload="false" />
+ <texture name="NavBar_BG_NoFav" file_name="navbar/NavBar_BG_NoFav.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
+ <texture name="NavBar_BG" file_name="navbar/NavBar_BG.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="NearbyVoice_Lvl1" file_name="bottomtray/NearbyVoice_Lvl1.png" preload="false" />
<texture name="NearbyVoice_Lvl2" file_name="bottomtray/NearbyVoice_Lvl2.png" preload="false" />
@@ -351,7 +352,7 @@ with the same filename but different name
<texture name="Parcel_Build_Dark" file_name="icons/Parcel_Build_Dark.png" preload="false" />
<texture name="Parcel_BuildNo_Dark" file_name="icons/Parcel_BuildNo_Dark.png" preload="false" />
- <texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Damage_Dark.png" preload="false" />
+ <texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Health_Dark.png" preload="false" />
<texture name="Parcel_DamageNo_Dark" file_name="icons/Parcel_DamageNo_Dark.png" preload="false" />
<texture name="Parcel_Evry_Dark" file_name="icons/Parcel_Evry_Dark.png" preload="false" />
<texture name="Parcel_Exp_Dark" file_name="icons/Parcel_Exp_Dark.png" preload="false" />
@@ -552,9 +553,9 @@ with the same filename but different name
<texture name="TabTop_Divider" file_name="containers/TabTop_Divider.png" preload="false" />
<texture name="TabTop_Left_Press" file_name="containers/TabTop_Left_Press.png" preload="false" />
<texture name="TabTop_Middle_Press" file_name="containers/TabTop_Middle_Press.png" preload="false" />
- <texture name="TabTop_Right_Off" file_name="containers/TabTop_Right_Off.png" preload="false" />
+ <texture name="TabTop_Right_Off" file_name="containers/TabTop_Right_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" />
<texture name="TabTop_Right_Press" file_name="containers/TabTop_Right_Press.png" preload="false" />
- <texture name="TabTop_Right_Selected" file_name="containers/TabTop_Right_Selected.png" preload="false" />
+ <texture name="TabTop_Right_Selected" file_name="containers/TabTop_Right_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" />
<texture name="TabTop_Middle_Off" file_name="containers/TabTop_Middle_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="120" scale.bottom="9" />
<texture name="TabTop_Middle_Selected" file_name="containers/TabTop_Middle_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="96" scale.bottom="9" />
<texture name="TabTop_Left_Off" file_name="containers/TabTop_Left_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="120" scale.bottom="9" />
@@ -574,7 +575,6 @@ with the same filename but different name
<texture name="TimeBasedMediaBackground" file_name="windows/TimeBasedMediaBackground.png" preload="false" />
-
<texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" />
<texture name="Toast_Background" file_name="windows/Toast_Background.png" preload="true"
scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />
@@ -604,8 +604,9 @@ with the same filename but different name
<texture name="TrashItem_Off" file_name="icons/TrashItem_Off.png" preload="false" />
<texture name="TrashItem_Press" file_name="icons/TrashItem_Press.png" preload="false" />
- <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
+ <texture name="Unread_Chiclet" file_name="bottomtray/Unread_Chiclet.png" preload="false" />
<texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" />
+ <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
<texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
diff --git a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
index a1d602f6f0..61f9b076ce 100644
--- a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
+++ b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Inspector_I.png b/indra/newview/skins/default/textures/windows/Inspector_I.png
new file mode 100644
index 0000000000..b4875fd638
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/Inspector_I.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
index dcf9847adb..dfb0695ec3 100644
--- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml
+++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
@@ -10,18 +10,16 @@
image_disabled_selected="transparent.j2c"
image_selected="transparent.j2c"
image_unselected="transparent.j2c"
- image_hover_selected="Favorite_Link_Over"
- image_hover_unselected="Favorite_Link_Over"
image_pressed="Favorite_Link_Over"
- image_pressed_selected="Favorite_Link_Over"
hover_glow_amount="0.15"
label_shadow="false"
layout="topleft"
left="0"
name="favorites_bar_btn"
- pad_bottom="-1"
+ pad_bottom="1"
pad_left="11"
- pad_right="7"
+ pad_right="9"
+ scale_image="true"
tab_stop="false"
top="0"
use_ellipses="true"
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index 2ff99dcf5a..fac7aef690 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -6,7 +6,7 @@
name="floater_about"
help_topic="floater_about"
save_rect="true"
- title="ABOUT [APP_NAME]"
+ title="ABOUT [CAPITALIZED_APP_NAME]"
width="470">
<floater.string
name="AboutHeader">
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 cc955369e2..33fdd923ad 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -110,7 +110,7 @@
</text>
<line_editor
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left_pad="2"
max_length="63"
@@ -145,7 +145,7 @@
layout="topleft"
left="10"
name="LandType"
- top="84"
+ top_pad="5"
width="100">
Type:
</text>
@@ -192,7 +192,7 @@
layout="topleft"
left="10"
name="Owner:"
- top="124"
+ top_pad="5"
width="100">
Owner:
</text>
@@ -202,7 +202,7 @@
follows="left|top"
height="16"
layout="topleft"
- left_pad="5"
+ left_pad="2"
name="OwnerText"
width="240">
Leyla Linden
@@ -232,6 +232,7 @@
layout="topleft"
left="10"
name="Group:"
+ top_pad="7"
width="100">
Group:
</text>
@@ -240,10 +241,11 @@
enabled="false"
follows="left|top"
height="16"
- left_pad="5"
+ left_pad="2"
layout="topleft"
name="GroupText"
- width="240" />
+ width="240">
+Leyla Linden </text>
<button
follows="right"
height="16"
@@ -267,10 +269,10 @@
height="23"
label="Allow Deed to Group"
layout="topleft"
- left="96"
+ left="108"
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"
+ top_pad="3"
width="146" />
<button
enabled="false"
@@ -289,7 +291,7 @@
height="16"
label="Owner Makes Contribution With Deed"
layout="topleft"
- left="96"
+ left="108"
name="check contrib"
tool_tip="When the land is deeded to the group, the former owner contributes enough land allocation to support it."
width="199" />
@@ -352,7 +354,7 @@
layout="topleft"
left_delta="-199"
name="For sale to"
- top_delta="6"
+ top_delta="2"
width="186">
For sale to: [BUYER]
</text>
@@ -364,7 +366,7 @@
layout="topleft"
left_delta="0"
name="Sell with landowners objects in parcel."
- top_pad="8"
+ top_pad="0"
width="186">
Objects included in sale
</text>
@@ -389,6 +391,7 @@
right="-10"
name="Cancel Land Sale"
left_pad="5"
+ top_pad="-10"
width="145" />
<text
type="string"
@@ -422,7 +425,7 @@
layout="topleft"
left="10"
name="PriceLabel"
- top="288"
+ top_pad="5"
width="100">
Area:
</text>
@@ -470,7 +473,7 @@
layout="topleft"
left_delta="82"
name="Buy Land..."
- top="328"
+ top_pad="7"
width="100" />
<button
enabled="true"
@@ -480,7 +483,7 @@
layout="topleft"
left="10"
name="Scripts..."
- top="352"
+ top_pad="1"
width="100" />
<button
enabled="false"
@@ -490,7 +493,7 @@
layout="topleft"
right="-10"
name="Buy For Group..."
- top="352"
+ top_delta="0"
width="180" />
<button
enabled="false"
@@ -510,7 +513,7 @@
layout="topleft"
right="-10"
name="Abandon Land..."
- top="328"
+ top_pad="-47"
width="180" />
<button
follows="left|top"
@@ -519,7 +522,7 @@
layout="topleft"
left_delta="0"
name="Reclaim Land..."
- top_delta="-50"
+ top_delta="-48"
width="180" />
<button
enabled="false"
@@ -530,7 +533,7 @@
left_delta="0"
name="Linden Sale..."
tool_tip="Land must be owned, set content, and not already for auction."
- top_pad="4"
+ top_pad="2"
width="180" />
</panel>
<panel
@@ -2022,7 +2025,7 @@ Only large parcels can be listed in search.
multi_select="true"
name="AccessList"
tool_tip="([LISTED] listed, [MAX] max)"
- width="240" />
+ width="230" />
<button
follows="bottom"
height="23"
@@ -2047,7 +2050,7 @@ Only large parcels can be listed in search.
follows="top|right"
height="170"
width="240"
- left_pad="8">
+ left_pad="2">
<text
type="string"
length="1"
@@ -2071,7 +2074,7 @@ Only large parcels can be listed in search.
multi_select="true"
name="BannedList"
tool_tip="([LISTED] listed, [MAX] max)"
- width="240" />
+ width="230" />
<button
follows="bottom"
height="23"
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index 953bd08dd4..f59badfcb4 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -47,7 +47,7 @@
label="Search"
layout="topleft"
left="6"
- help_topic="avatarpicker_search_tab"
+ help_topic="avatarpicker"
name="SearchPanel"
top="150"
width="132">
@@ -98,7 +98,7 @@
label="Friends"
layout="topleft"
left="6"
- help_topic="avatarpicker_friends_tab"
+ help_topic="avatarpicker"
name="FriendsPanel"
top="150"
width="132">
@@ -144,7 +144,7 @@
label="Near Me"
layout="topleft"
left="6"
- help_topic="avatarpicker_near_me_tab"
+ help_topic="avatarpicker"
name="NearMePanel"
top="150"
width="132">
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index 55a6179afb..446b7138c4 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
can_resize="true"
- height="400"
+ height="480"
layout="topleft"
min_height="140"
min_width="467"
@@ -21,7 +21,7 @@
http://support.secondlife.com
</floater.string>
<layout_stack
- bottom="400"
+ bottom="480"
follows="left|right|top|bottom"
layout="topleft"
left="10"
@@ -29,42 +29,22 @@
top="20"
width="600">
<layout_panel
- height="20"
+ height="1"
layout="topleft"
left_delta="0"
name="external_controls"
top_delta="0"
user_resize="false"
- width="570">
+ width="590">
<web_browser
- bottom="-10"
+ bottom="-4"
follows="left|right|top|bottom"
layout="topleft"
left="0"
name="browser"
top="0"
start_url="data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#2A2A2A%22%3E%3C/body%3E%3C/html%3E"
- width="570" />
- <button
- follows="bottom|left"
- height="20"
- label="Open in My Web Browser"
- layout="topleft"
- left_delta="0"
- name="open_browser"
- top_pad="5"
- width="185" />
-<!--
- <button
- follows="bottom|right"
- height="20"
- label="Close"
- layout="topleft"
- left_pad="290"
- name="close"
- top_delta="0"
- width="70" />
--->
+ width="590" />
</layout_panel>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml
index 7b4c5f38a1..3a5ceed5fb 100644
--- a/indra/newview/skins/default/xui/en/floater_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_map.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
+ can_minimize="false"
can_resize="true"
follows="top|right"
height="225"
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index 1946920a9c..455018f467 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -30,25 +30,25 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
height="16"
layout="topleft"
left_pad="7"
+ top_delta="3"
name="payee_name"
- width="210">
- [FIRST] [LAST]
+ width="184">
+ Ericacita Moostopolison
</text>
<text
type="string"
length="1"
follows="left|top"
halign="left"
- height="16"
+ height="14"
layout="topleft"
- left="30"
+ left="34"
name="object_name_label"
top_pad="0"
- width="150">
+ width="180">
Via object:
</text>
<icon
@@ -59,20 +59,21 @@
name="icon_object"
tool_tip="Objects"
top_pad="0"
- left="30"
+ left="10"
/>
<text
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="18"
+ height="16"
layout="topleft"
- left_pad="5"
+ left_pad="7"
name="object_name_text"
- top_delta="0"
- width="210">
- ...
+ top_delta="3"
+ use_ellipses="true"
+ word_wrap="false"
+ width="188">
+ My awesome object with a really damn long name
</text>
<button
height="23"
@@ -112,7 +113,7 @@
type="string"
length="1"
follows="left|top"
- height="18"
+ height="14"
layout="topleft"
left="25"
name="amount text"
@@ -123,7 +124,7 @@
<line_editor
border_style="line"
follows="left|top|right"
- height="19"
+ height="21"
top_pad="0"
layout="topleft"
left="120"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index 06dbdc9539..ead5b8c8f2 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -11,15 +11,15 @@
min_width="234"
name="preview notecard"
help_topic="preview_notecard"
- title="NOTE:"
+ title="NOTECARD:"
width="400">
<floater.string
name="no_object">
- Unable to find object containing this note.
+ Unable to find object containing this notecard.
</floater.string>
<floater.string
name="not_allowed">
- You do not have permission to view this note.
+ You do not have permission to view this notecard.
</floater.string>
<floater.string
name="Title">
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index 84adabe4fa..2f88c234cc 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -123,6 +123,12 @@
layout="topleft"
tool_tip="checkbox"
name="test_checkbox" />
+ <check_box
+ top_pad="5"
+ enabled="false"
+ label="Checkbox Disabled"
+ tool_tip="checkbox disabled"
+ name="test_checkbox_disabled" />
<!-- "combo_box" is a pop-menu of items. Optionally the box itself can
contain a general purpose line input editor, allowing the user to
provide input that is not a list item. -->
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index e55453f772..a1e190fc5e 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2675,7 +2675,7 @@ even though the user gets a free copy.
height="18"
layout="topleft"
left="10"
- use_ellipsis="true"
+ use_ellipses="true"
read_only="true"
name="media_info"
width="180" />
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index a4ef807f06..b9649e9c57 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -8,6 +8,7 @@
min_height="122"
min_width="190"
name="floater_voice_controls"
+ help_topic="floater_voice_controls"
title="Voice Controls"
save_visibility="true"
single_instance="true"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index d29dfa7034..1e10467148 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -85,7 +85,7 @@
parameter="lsl" />
</menu_item_call>
<menu_item_call
- label="New Note"
+ label="New Notecard"
layout="topleft"
name="New Note">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index b07a8bb512..5ad099e2d9 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -71,7 +71,7 @@
parameter="lsl" />
</menu_item_call>
<menu_item_call
- label="New Note"
+ label="New Notecard"
layout="topleft"
name="New Note">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 690167bc33..a0dec346a4 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -223,6 +223,7 @@
parameter="test_inspectors" />
</menu_item_call>
</menu>
+<!--
<menu_item_check
label="Reg In Client Test (restart)"
name="Reg In Client Test (restart)">
@@ -232,6 +233,7 @@
function="ToggleControl"
parameter="RegInClient" />
</menu_item_check>
+-->
<menu_item_separator />
<menu_item_call
label="Set Window Size..."
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index 62500c5116..35518cd13b 100644
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -57,6 +57,12 @@
<menu_item_call.on_enable
function="Object.EnableInspect" />
</menu_item_call>
+ <menu_item_call
+ label="Zoom In"
+ name="Zoom In">
+ <menu_item_call.on_click
+ function="Object.ZoomIn" />
+ </menu_item_call>
<menu_item_separator layout="topleft" />
<context_menu
label="Put On &gt;"
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 5f2e6e0f6c..c4da1df017 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -63,4 +63,10 @@
function="Avatar.EnableItem"
parameter="can_block" />
</menu_item_check>
+ <menu_item_call
+ label="Offer Teleport"
+ name="teleport">
+ <menu_item_call.on_click
+ function="Avatar.OfferTeleport"/>
+ </menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 4e495bab3f..fa7e3e86a3 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -307,7 +307,7 @@
<menu_item_separator
layout="topleft" />
<menu_item_call
- label="Buy Land"
+ label="Buy This Land"
layout="topleft"
name="Buy Land">
<menu_item_call.on_click
@@ -2816,8 +2816,7 @@
<menu_item_call
label="Dump Focus Holder"
layout="topleft"
- name="Dump Focus Holder"
- shortcut="control|alt|F">
+ name="Dump Focus Holder">
<menu_item_call.on_click
function="Advanced.DumpFocusHolder" />
</menu_item_call>
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index 6c54532a3a..28a6995186 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -4,7 +4,7 @@
follows="all"
height="215"
name="panel_im_control_panel"
- width="180">
+ width="150">
<layout_stack
mouse_opaque="false"
border_size="0"
@@ -16,15 +16,16 @@
name="vertical_stack"
orientation="vertical"
top="0"
- width="177">
+ width="147">
<layout_panel
auto_resize="true"
follows="top|left"
height="130"
layout="topleft"
+ left="0"
min_height="0"
mouse_opaque="false"
- width="180"
+ width="147"
top="0"
name="speakers_list_panel"
user_resize="false">
@@ -39,7 +40,7 @@
show_info_btn="false"
show_profile_btn="false"
show_speaking_indicator="false"
- width="180" />
+ width="147" />
</layout_panel>
<layout_panel
auto_resize="false"
@@ -47,7 +48,7 @@
height="25"
layout="topleft"
min_height="25"
- width="160"
+ width="130"
name="call_btn_panel"
user_resize="false"
visible="false">
@@ -56,7 +57,7 @@
height="20"
label="Call"
name="call_btn"
- width="160"
+ width="130"
top="5" />
</layout_panel>
<layout_panel
@@ -65,7 +66,7 @@
height="25"
layout="topleft"
min_height="25"
- width="160"
+ width="130"
name="end_call_btn_panel"
user_resize="false"
visible="false">
@@ -82,7 +83,7 @@
height="25"
layout="topleft"
min_height="25"
- width="160"
+ width="130"
name="voice_ctrls_btn_panel"
user_resize="false"
visible="false">
diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
index 970a2e6a8a..003e1baa7e 100644
--- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
@@ -5,6 +5,7 @@
height="305"
layout="topleft"
name="block_list_panel"
+ help_topic="blocked_list"
min_height="350"
min_width="240"
width="280">
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index b92aa10ffc..aeaa049f1f 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -350,7 +350,7 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
-->
<button
auto_resize="true"
- flash_color="Yellow"
+ flash_color="ChicletFlashColor"
follows="right"
halign="center"
height="23"
@@ -403,7 +403,7 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
halign="center"
height="23"
follows="right"
- flash_color="Yellow"
+ flash_color="ChicletFlashColor"
label_color="Black"
left="5"
name="Unread"
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 4073ef158b..aa7d621e4c 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -4,7 +4,7 @@
follows="all"
height="238"
name="panel_im_control_panel"
- width="180">
+ width="150">
<layout_stack
mouse_opaque="false"
border_size="0"
@@ -16,7 +16,7 @@
name="vertical_stack"
orientation="vertical"
top="0"
- width="175">
+ width="145">
<layout_panel
auto_resize="true"
follows="top|left"
@@ -24,7 +24,7 @@
layout="topleft"
min_height="0"
mouse_opaque="false"
- width="180"
+ width="145"
top="0"
name="speakers_list_panel"
user_resize="false">
@@ -39,7 +39,7 @@
show_info_btn="false"
show_profile_btn="false"
show_speaking_indicator="false"
- width="180" />
+ width="145" />
</layout_panel>
<layout_panel
auto_resize="false"
@@ -47,7 +47,7 @@
height="28"
layout="topleft"
min_height="28"
- width="160"
+ width="130"
name="group_info_btn_panel"
user_resize="false">
<button
@@ -57,7 +57,7 @@
name="group_info_btn"
use_ellipses="true"
top="5"
- width="160" />
+ width="130" />
</layout_panel>
<layout_panel
auto_resize="false"
@@ -65,7 +65,7 @@
height="28"
layout="topleft"
min_height="28"
- width="160"
+ width="130"
name="call_btn_panel"
user_resize="false">
<button
@@ -74,7 +74,7 @@
label="Call Group"
name="call_btn"
use_ellipses="true"
- width="160" />
+ width="130" />
</layout_panel>
<layout_panel
auto_resize="false"
@@ -82,7 +82,7 @@
height="28"
layout="topleft"
min_height="28"
- width="160"
+ width="130"
name="end_call_btn_panel"
user_resize="false"
visible="false">
@@ -99,7 +99,7 @@
height="28"
layout="topleft"
min_height="28"
- width="160"
+ width="130"
name="voice_ctrls_btn_panel"
user_resize="false"
visible="false">
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 9548119d58..a5bab3232c 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -258,7 +258,7 @@ things in this group. There&apos;s a broad variety of Abilities.
name="static"
top_pad="5"
width="300">
- Assigned Members
+ Assigned Roles
</text>
<scroll_list
draw_stripes="true"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 58437cd4d2..9d00abd2c9 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -262,7 +262,7 @@ halign="center"
parameter="lsl" />
</menu_item_call>
<menu_item_call
- label="New Note"
+ label="New Notecard"
layout="topleft"
name="New Note">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml
index a99777848b..e779e37419 100644
--- a/indra/newview/skins/default/xui/en/panel_me.xml
+++ b/indra/newview/skins/default/xui/en/panel_me.xml
@@ -26,7 +26,7 @@
</text> -->
<tab_container
follows="all"
- height="575"
+ height="570"
halign="center"
layout="topleft"
left="10"
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 10381d3987..8327edfdd0 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -31,244 +31,194 @@
name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container
- color="DkGray2"
+ <layout_stack
+ name="layout"
+ orientation="vertical"
follows="all"
- height="485"
layout="topleft"
- name="profile_scroll"
- reserve_scroll_corner="false"
- opaque="true"
+ left="0"
top="0"
- width="313">
- <panel
- name="scroll_content_panel"
- follows="left|top|right"
- height="485"
+ height="535"
+ width="313"
+ border_size="0">
+ <layout_panel
+ name="profile_stack"
+ follows="all"
layout="topleft"
top="0"
left="0"
- width="297">
- <panel
- follows="left|top"
- height="117"
+ height="505"
+ width="313">
+ <scroll_container
+ color="DkGray2"
+ follows="all"
layout="topleft"
- left="10"
- name="second_life_image_panel"
- top="0"
- width="280">
- <texture_picker
- allow_no_texture="true"
- default_image_name="None"
- enabled="false"
- follows="top|left"
+ left="0"
+ name="profile_scroll"
+ opaque="true"
+ height="505"
+ width="313"
+ top="0">
+ <panel
+ layout="topleft"
+ follows="left|top|right"
+ name="scroll_content_panel"
+ top="0"
+ left="0"
+ width="303">
+ <panel
+ follows="left|top|right"
+ height="117"
+ layout="topleft"
+ left="10"
+ name="second_life_image_panel"
+ top="0"
+ width="300">
+ <texture_picker
+ allow_no_texture="true"
+ default_image_name="None"
+ enabled="false"
+ follows="top|left"
+ height="117"
+ layout="topleft"
+ left="0"
+ name="2nd_life_pic"
+ top="10"
+ width="102" />
+ <icon
+ height="102"
+ image_name="Blank"
+ layout="topleft"
+ name="2nd_life_edit_icon"
+ label=""
+ left="0"
+ tool_tip="Click the Edit Profile button below to change image"
+ top="10"
+ width="102" />
+ <text
+ follows="left|top|right"
+ font.style="BOLD"
+ height="15"
+ layout="topleft"
+ left_pad="10"
+ name="title_sl_descr_text"
+ text_color="white"
+ top_delta="0"
+ value="[SECOND_LIFE]:"
+ width="180" />
+ <expandable_text
+ follows="left|top|right"
+ height="95"
+ layout="topleft"
+ left="107"
+ textbox.max_length="512"
+ name="sl_description_edit"
+ top_pad="-3"
+ width="188"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
+ </expandable_text>
+ </panel>
+ <panel
+ follows="left|top|right"
height="117"
layout="topleft"
- left="0"
- name="2nd_life_pic"
- top="10"
- width="102" />
- <icon
- height="102"
- image_name="Blank"
- layout="topleft"
- name="2nd_life_edit_icon"
- label=""
- left="0"
- tool_tip="Click the Edit Profile button below to change image"
- top="10"
- width="102" />
+ top_pad="10"
+ left="10"
+ name="first_life_image_panel"
+ width="300">
+ <texture_picker
+ allow_no_texture="true"
+ default_image_name="None"
+ enabled="false"
+ follows="top|left"
+ height="117"
+ layout="topleft"
+ left="0"
+ name="real_world_pic"
+ width="102" />
+ <icon
+ height="102"
+ image_name="Blank"
+ layout="topleft"
+ name="real_world_edit_icon"
+ label=""
+ left="0"
+ tool_tip="Click the Edit Profile button below to change image"
+ top="4"
+ width="102" />
+ <text
+ follows="left|top|right"
+ font.style="BOLD"
+ height="15"
+ layout="topleft"
+ left_pad="10"
+ name="title_rw_descr_text"
+ text_color="white"
+ top_delta="0"
+ value="Real World:"
+ width="180" />
+ <expandable_text
+ follows="left|top|right"
+ height="95"
+ layout="topleft"
+ left="107"
+ textbox.max_length="512"
+ name="fl_description_edit"
+ top_pad="-3"
+ width="188"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
+ </expandable_text>
+ </panel>
<text
- follows="left|top|right"
- font.style="BOLD"
+ follows="left|top"
height="15"
+ font.style="BOLD"
+ font="SansSerifMedium"
layout="topleft"
- left_pad="10"
- name="title_sl_descr_text"
- text_color="white"
- top_delta="0"
- value="[SECOND_LIFE]:"
- width="165" />
- <expandable_text
- follows="left|top|right"
- height="95"
- layout="topleft"
- left="107"
- textbox.max_length="512"
- name="sl_description_edit"
- top_pad="-3"
- width="173"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
- </expandable_text>
- </panel>
- <panel
- follows="left|top"
- height="117"
- layout="topleft"
- top_pad="10"
- left="10"
- name="first_life_image_panel"
- width="280">
- <texture_picker
- allow_no_texture="true"
- default_image_name="None"
- enabled="false"
- follows="top|left"
- height="117"
- layout="topleft"
- left="0"
- name="real_world_pic"
- width="102" />
- <icon
- height="102"
- image_name="Blank"
- layout="topleft"
- name="real_world_edit_icon"
- label=""
- left="0"
- tool_tip="Click the Edit Profile button below to change image"
- top="4"
- width="102" />
+ left="10"
+ name="homepage_edit"
+ top_pad="0"
+ value="http://librarianavengers.org"
+ width="300"
+ word_wrap="false"
+ use_ellipses="true"
+ />
<text
- follows="left|top|right"
- font.style="BOLD"
- height="15"
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
layout="topleft"
- left_pad="10"
- name="title_rw_descr_text"
+ left="10"
+ name="title_member_text"
text_color="white"
- top_delta="0"
- value="Real World:"
- width="165" />
- <expandable_text
- follows="left|top|right"
- height="95"
+ top_pad="10"
+ value="Resident Since:"
+ width="300" />
+ <text
+ follows="left|top"
+ height="15"
layout="topleft"
- left="107"
- textbox.max_length="512"
- name="fl_description_edit"
- top_pad="-3"
- width="173"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
- </expandable_text>
- </panel>
-
-
- <!-- <panel
- name="lifes_images_panel"
- follows="left|top|right"
- height="244"
- layout="topleft"
- top="0"
- left="0"
- width="285">
- <panel
- follows="left|top"
- height="117"
- layout="topleft"
- left="10"
- name="second_life_image_panel"
- top="0"
- width="285">
- <text
- follows="left|top|right"
- font.style="BOLD"
+ left="10"
+ name="register_date"
+ value="05/31/2376"
+ width="300"
+ word_wrap="true" />
+ <text
+ follows="left|top"
+ font.style="BOLD"
height="15"
layout="topleft"
- left="0"
- name="second_life_photo_title_text"
+ left="10"
+ name="title_acc_status_text"
text_color="white"
- value="[SECOND_LIFE]:"
- width="170" />
- <texture_picker
- allow_no_texture="true"
- default_image_name="None"
- enabled="false"
- follows="top|left"
- height="117"
- layout="topleft"
- left="0"
- name="2nd_life_pic"
- top_pad="0"
- width="102" />
- </panel>
- <icon
- height="18"
- image_name="AddItem_Off"
- layout="topleft"
- name="2nd_life_edit_icon"
- label=""
- left="87"
- tool_tip="Click to select an image"
- top="25"
- width="18" />
- </panel> -->
-
-
-
-
- <text
- type="string"
- follows="left|top"
- font="SansSerifSmall"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="me_homepage_text"
- text_color="white"
- top_pad="0"
- width="280">
- Homepage:
- </text>
- <text
- follows="left|top"
- height="15"
- layout="topleft"
- left="10"
- name="homepage_edit"
- top_pad="0"
- value="http://librarianavengers.org"
- width="280"
- word_wrap="false"
- use_ellipses="true"
- />
- <text
- follows="left|top"
- font.style="BOLD"
- height="10"
- layout="topleft"
- left="10"
- name="title_member_text"
- text_color="white"
- top_pad="10"
- value="Member Since:"
- width="280" />
- <text
- follows="left|top"
- height="15"
- layout="topleft"
- left="10"
- name="register_date"
- value="05/31/2376"
- width="280"
- word_wrap="true" />
- <text
- follows="left|top"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="title_acc_status_text"
- text_color="white"
- top_pad="10"
- value="Account Status:"
- width="280" />
- <!-- <text
+ top_pad="5"
+ value="Account Status:"
+ width="300" />
+ <!-- <text
type="string"
follows="left|top"
font="SansSerifSmall"
@@ -279,81 +229,82 @@
top_delta="0"
value="Go to Dashboard"
width="100"/> -->
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="acc_status_text"
- top_pad="0"
- value="Resident. No payment info on file."
- width="280"
- word_wrap="true" />
- <text
- follows="left|top"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="title_partner_text"
- text_color="white"
- top_pad="5"
- value="Partner:"
- width="280" />
- <panel
- follows="left|top"
- height="15"
- layout="topleft"
- left="10"
- name="partner_data_panel"
- top_pad="0"
- width="280">
+ <text
+ follows="left|top"
+ height="28"
+ layout="topleft"
+ left="10"
+ name="acc_status_text"
+ top_pad="0"
+ width="300"
+ word_wrap="true">
+ Resident. No payment info on file.
+ Linden.
+ </text>
<text
follows="left|top"
- height="10"
+ font.style="BOLD"
+ height="15"
layout="topleft"
- left="0"
- name="partner_text"
- top="0"
- value="[FIRST] [LAST]"
- width="280"
- word_wrap="true" />
- </panel>
- <text
- follows="left|top"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="title_groups_text"
- text_color="white"
- top_pad="8"
- value="Groups:"
- width="280" />
- <expandable_text
- follows="left|top|bottom"
- height="60"
- layout="topleft"
- left="10"
- name="sl_groups"
- top_pad="0"
- width="280"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
- </expandable_text>
- </panel>
- </scroll_container>
- <panel
+ left="10"
+ name="title_partner_text"
+ text_color="white"
+ top_pad="3"
+ value="Partner:"
+ width="300" />
+ <panel
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="10"
+ name="partner_data_panel"
+ top_pad="0"
+ width="300">
+ <text
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="0"
+ name="partner_text"
+ top="0"
+ value="[FIRST] [LAST]"
+ width="300"
+ word_wrap="true" />
+ </panel>
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="13"
+ layout="topleft"
+ left="10"
+ name="title_groups_text"
+ text_color="white"
+ top_pad="3"
+ value="Groups:"
+ width="300" />
+ <expandable_text
+ follows="all"
+ height="113"
+ layout="topleft"
+ left="7"
+ name="sl_groups"
+ top_pad="0"
+ width="298"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. Aenean viverra tulip moosetop. Slan de heelish marfnik tooplod. Sum sum to whop de wompam booster copm.
+ </expandable_text>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <!-- <layout_panel
follows="bottom|left"
layout="topleft"
left="0"
name="profile_buttons_panel"
- top_pad="2"
- bottom="10"
- height="23"
- width="303">
- <button
+ height="28"
+ width="313">
+ <button
follows="bottom|left"
height="23"
label="Add Friend"
@@ -361,8 +312,9 @@
left="0"
mouse_opaque="false"
name="add_friend"
+ tool_tip="Offer friendship to the resident"
top="5"
- width="75" />
+ width="80" />
<button
follows="bottom|left"
height="23"
@@ -370,7 +322,7 @@
layout="topleft"
name="im"
top="5"
- left_pad="5"
+ left_pad="3"
width="45" />
<button
follows="bottom|left"
@@ -378,7 +330,7 @@
label="Call"
layout="topleft"
name="call"
- left_pad="5"
+ left_pad="3"
top="5"
width="45" />
<button
@@ -389,7 +341,7 @@
layout="topleft"
name="show_on_map_btn"
top="5"
- left_pad="5"
+ left_pad="3"
width="45" />
<button
follows="bottom|left"
@@ -397,23 +349,25 @@
label="Teleport"
layout="topleft"
name="teleport"
- left_pad="5"
+ left_pad="3"
top="5"
- width="80" />
- </panel>
- <panel
+ width="85" />
+ </panel>-->
+ <layout_panel
follows="bottom|left"
layout="topleft"
left="0"
- top_pad="-17"
+ top_pad="0"
name="profile_me_buttons_panel"
visible="false"
- height="23"
- width="303">
+ auto_resize="false"
+ height="28"
+ width="313">
<button
follows="bottom|right"
height="23"
- left="10"
+ left="20"
+ top="0"
label="Edit Profile"
name="edit_profile_btn"
tool_tip="Edit your personal information"
@@ -425,7 +379,7 @@
left_pad="10"
name="edit_appearance_btn"
tool_tip="Create/edit your appearance: physical data, clothes and etc."
- right="-10"
width="130" />
- </panel>
+ </layout_panel>
+</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 0f9b095d8c..e2884dbedc 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -29,12 +29,12 @@
visible="false"
left="0"
top="0"
- height="60"
+ height="50"
width="600"/>
<panel
background_visible="false"
follows="left|top|right"
- top="5"
+ top="3"
height="23"
layout="topleft"
name="navigation_panel"
@@ -42,28 +42,17 @@
<button
follows="left|top"
height="23"
- image_disabled="PushButton_Disabled"
- image_disabled_selected="PushButton_Disabled"
image_overlay="Arrow_Left_Off"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- hover_glow_amount="0.15"
layout="topleft"
left="10"
name="back_btn"
tool_tip="Go back to previous location"
top="3"
width="31" />
-
<button
follows="left|top"
height="23"
- image_disabled="PushButton_Disabled"
- image_disabled_selected="PushButton_Disabled"
image_overlay="Arrow_Right_Off"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- hover_glow_amount="0.15"
layout="topleft"
left_pad="0"
name="forward_btn"
@@ -73,12 +62,7 @@
<button
follows="left|top"
height="23"
- image_disabled="PushButton_Disabled"
- image_disabled_selected="PushButton_Disabled"
image_overlay="Home_Off"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- hover_glow_amount="0.15"
layout="topleft"
left_pad="7"
name="home_btn"
@@ -146,7 +130,6 @@
name="search_combo_editor"/>
</search_combo_box>
</panel>
-
<favorites_bar
follows="left|right|top"
font="SansSerifSmall"
@@ -154,16 +137,17 @@
layout="topleft"
left="0"
name="favorite"
- image_drag_indication="arrow_down.tga"
- bottom="57"
+ image_drag_indication="Accordion_ArrowOpened_Off"
+ bottom="55"
width="590">
<chevron_button name=">>"
image_unselected="TabIcon_Close_Off"
image_selected="TabIcon_Close_Off"
tab_stop="false"
- follows="left|bottom"
- tool_tip="Show more of My Favorites"
+ follows="left|bottom"
+ tool_tip="Show more of My Favorites"
width="15"
+ top="15"
height="15"/>
</favorites_bar>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml
index f15e75dee9..73528b28ad 100644
--- a/indra/newview/skins/default/xui/en/panel_notes.xml
+++ b/indra/newview/skins/default/xui/en/panel_notes.xml
@@ -19,94 +19,94 @@
height="517"
width="313"
border_size="0">
- <panel
- name="notes_stack"
+ <layout_panel
+ name="notes_stack"
+ follows="all"
+ layout="topleft"
+ top="0"
+ left="0"
+ height="475"
+ width="313">
+ <scroll_container
+ color="DkGray2"
follows="all"
layout="topleft"
- top="0"
left="0"
+ name="profile_scroll"
+ opaque="true"
height="475"
- width="313">
- <scroll_container
- color="DkGray2"
- follows="all"
+ width="313"
+ top="0">
+ <panel
+ height="450"
+ layout="topleft"
+ name="profile_scroll_panel"
+ top="0"
+ left="0"
+ width="303">
+ <text
+ follows="left|top"
+ font="SansSerifBold"
+ height="16"
layout="topleft"
- left="0"
- name="profile_scroll"
- opaque="true"
- height="475"
- width="313"
- top="0">
- <panel
- height="450"
- layout="topleft"
- name="profile_scroll_panel"
- top="0"
- left="0"
- width="303">
- <text
- follows="left|top"
- font="SansSerifBold"
- height="16"
- layout="topleft"
- left="10"
- name="status_message"
- text_color="white"
- top="20"
- value="My private notes:"
- width="293" />
- <text_editor
- follows="left|top"
- height="120"
- layout="topleft"
- left="10"
- max_length="1000"
- name="notes_edit"
- text_color="DkGray"
- top_pad="10"
- width="280"
- word_wrap="true" />
- <text
- follows="left|top"
- font="SansSerifBold"
- height="16"
- layout="topleft"
- left="10"
- name="status_message2"
- text_color="white"
- top_pad="30"
- value="Allow this person to:"
- width="293" />
- <check_box
- enabled="false"
- height="16"
- label="See my online status"
- layout="topleft"
- left="20"
- name="status_check"
- width="293" />
- <check_box
- enabled="false"
- height="16"
- label="See me on the map"
- layout="topleft"
- left="20"
- name="map_check"
- width="293" />
- <check_box
- enabled="false"
- height="16"
- label="Edit, delete or take my objects"
- layout="topleft"
- left="20"
- name="objects_check"
- width="293" />
- </panel>
- </scroll_container>
- </panel>
- <panel
- follows="bottom|left"
- height="30"
+ left="10"
+ name="status_message"
+ text_color="white"
+ top="20"
+ value="My private notes:"
+ width="293" />
+ <text_editor
+ follows="left|top"
+ height="120"
+ layout="topleft"
+ left="10"
+ max_length="1000"
+ name="notes_edit"
+ text_color="DkGray"
+ top_pad="10"
+ width="280"
+ word_wrap="true" />
+ <text
+ follows="left|top"
+ font="SansSerifBold"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="status_message2"
+ text_color="white"
+ top_pad="30"
+ value="Allow this person to:"
+ width="293" />
+ <check_box
+ enabled="false"
+ height="16"
+ label="See my online status"
+ layout="topleft"
+ left="20"
+ name="status_check"
+ width="293" />
+ <check_box
+ enabled="false"
+ height="16"
+ label="See me on the map"
+ layout="topleft"
+ left="20"
+ name="map_check"
+ width="293" />
+ <check_box
+ enabled="false"
+ height="16"
+ label="Edit, delete or take my objects"
+ layout="topleft"
+ left="20"
+ name="objects_check"
+ width="293" />
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel
+ follows="bottom|left"
+ height="30"
layout="topleft"
left="0"
name="notes_buttons_panel"
@@ -115,14 +115,14 @@
<button
follows="bottom|left"
height="23"
- label="Add"
+ label="Add Friend"
layout="topleft"
left="0"
mouse_opaque="false"
name="add_friend"
tool_tip="Offer friendship to the resident"
top="5"
- width="55" />
+ width="80" />
<button
follows="bottom|left"
height="23"
@@ -131,8 +131,8 @@
name="im"
tool_tip="Open instant message session"
top="5"
- left_pad="5"
- width="40" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -140,9 +140,9 @@
layout="topleft"
name="call"
tool_tip="Call this resident"
- left_pad="5"
+ left_pad="3"
top="5"
- width="55" />
+ width="45" />
<button
enabled="false"
follows="bottom|left"
@@ -152,8 +152,8 @@
name="show_on_map_btn"
tool_tip="Show the resident on the map"
top="5"
- left_pad="5"
- width="50" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -161,9 +161,9 @@
layout="topleft"
name="teleport"
tool_tip="Offer teleport"
- left_pad="5"
+ left_pad="3"
top="5"
- width="90" />
- </panel>
+ width="80" />
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index 7e512f9594..fd540bdc7e 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-
<panel name="Outfits"
background_visible="true"
follows="all"
@@ -8,7 +7,7 @@
layout="topleft"
min_height="350"
min_width="240"
- width="330"
+ width="320"
border="false">
<tab_container
follows="all"
@@ -16,24 +15,28 @@
layout="topleft"
left="10"
name="appearance_tabs"
- tab_min_width="100"
+ tab_min_width="140"
tab_height="30"
tab_position="top"
halign="center"
width="313">
<inventory_panel
+ follows="all"
+ background_visible="true"
+ background_opaque="true"
label="WEARING"
help_topic="now_wearing_tab"
allow_multi_select="true"
border="false"
- height="500"
- width="290"
left="0"
top="0"
mouse_opaque="true"
name="cof_accordionpanel"
- start_folder="Current Outfit" />
+ start_folder="Current Outfit"
+ width="313" />
<inventory_panel
+ background_visible="true"
+ background_opaque="true"
label="MY OUTFITS"
help_topic="my_outfits_tab"
allow_multi_select="true"
@@ -41,10 +44,9 @@
border="false"
left="0"
top="0"
- height="500"
- width="290"
+ width="314"
mouse_opaque="true"
- name="outfitslist_accordionpanel"
+ name="outfitslist_tab"
start_folder="My Outfits" />
</tab_container>
<panel
@@ -83,23 +85,13 @@
<button
follows="bottom|left"
height="23"
- label="Edit Look"
- layout="topleft"
- left="10"
- name="look_edit_btn"
- top="26"
- visible="false"
- width="90" />
- <button
- follows="bottom|left"
- height="23"
- label="Make Outfit"
+ label="Save Outfit"
layout="topleft"
name="make_outfit_btn"
tool_tip="Save appearance as an outfit"
top="26"
- right="-110"
- width="90" />
+ left='10'
+ width="120" />
<button
follows="bottom|right"
height="23"
@@ -107,8 +99,9 @@
layout="topleft"
name="wear_btn"
right="-10"
+ left_pad="10"
top="26"
tool_tip="Wear selected outfit"
- width="90" />
+ width="120" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml
index 7b88fca7c3..2c7a51f0e7 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml
@@ -18,17 +18,6 @@
parameter="wear" />
</menu_item_call>
<menu_item_call
- label="Add To Current Outfit"
- layout="topleft"
- name="add">
- <on_click
- function="panel_outfits_inventory_gear_default.Custom.Action"
- parameter="add" />
- <on_enable
- function="panel_outfits_inventory_gear_default.Enable"
- parameter="add" />
- </menu_item_call>
- <menu_item_call
label="Remove From Current Outfit"
layout="topleft"
name="remove">
@@ -54,7 +43,7 @@
parameter="rename" />
</menu_item_call>
<menu_item_call
- label="Remove"
+ label="Remove Link"
layout="topleft"
name="remove_link">
<on_click
@@ -65,7 +54,7 @@
parameter="remove_link" />
</menu_item_call>
<menu_item_call
- label="Delete"
+ label="Delete Outfit"
layout="topleft"
name="delete">
<on_click
@@ -73,6 +62,6 @@
parameter="delete" />
<on_enable
function="panel_outfits_inventory_gear_default.Enable"
- parameter="delete" />
+ parameter="delete_outfit" />
</menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 08a10553a8..adf22f825f 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -400,7 +400,7 @@ background_visible="true"
layout="topleft"
name="group_info_btn"
tool_tip="Show group information"
- width="110" />
+ width="102" />
<button
follows="bottom|left"
top="4"
@@ -410,7 +410,7 @@ background_visible="true"
layout="topleft"
name="chat_btn"
tool_tip="Open chat session"
- width="110" />
+ width="102" />
<button
follows="bottom|left"
top="4"
@@ -420,6 +420,6 @@ background_visible="true"
layout="topleft"
name="group_call_btn"
tool_tip="Call this group"
- width="110" />
+ width="102" />
</panel>
</panel>
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 25d7ba0903..5dd93d0f7e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -85,7 +85,10 @@
left="30"
name="autoplay_enabled"
top_pad="10"
- width="350" />
+ width="350">
+ <check_box.commit_callback
+ function="Pref.ParcelMediaAutoPlayEnable" />
+ </check_box>
<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 4cef1f9c60..075d9232b1 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
@@ -14,7 +14,7 @@
<string name="min_width">300</string>
<string name="min_height">75</string>
<string name="zoom_near_padding">1.0</string>
- <string name="zoom_medium_padding">1.25</string>
+ <string name="zoom_medium_padding">1.1</string>
<string name="zoom_far_padding">1.5</string>
<string name="top_world_view_avoid_zone">50</string>
<layout_stack
@@ -113,6 +113,7 @@
</layout_panel>
<layout_panel
name="fwd"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -140,6 +141,7 @@
</layout_panel>
<layout_panel
name="home"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -167,6 +169,7 @@
</layout_panel>
<layout_panel
name="media_stop"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -194,6 +197,7 @@
</layout_panel>
<layout_panel
name="reload"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -221,6 +225,7 @@
</layout_panel>
<layout_panel
name="stop"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -248,6 +253,7 @@
</layout_panel>
<layout_panel
name="play"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -276,6 +282,7 @@
</layout_panel>
<layout_panel
name="pause"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -303,6 +310,7 @@
<!-- media URL entry -->
<layout_panel
name="media_address"
+ mouse_opaque="false"
auto_resize="true"
user_resize="false"
height="24"
@@ -367,6 +375,7 @@
</layout_panel>
<layout_panel
name="media_play_position"
+ mouse_opaque="false"
auto_resize="true"
user_resize="false"
follows="left|right"
@@ -392,6 +401,7 @@
</layout_panel>
<layout_panel
name="skip_back"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -419,6 +429,7 @@
</layout_panel>
<layout_panel
name="skip_forward"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -445,6 +456,7 @@
</layout_panel>
<layout_panel
name="media_volume"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -501,6 +513,7 @@
</layout_panel>
<layout_panel
name="zoom_frame"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -528,6 +541,7 @@
</layout_panel>
<layout_panel
name="close"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -554,6 +568,7 @@
</layout_panel>
<layout_panel
name="new_window"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false"
layout="topleft"
@@ -581,6 +596,7 @@
<!-- bookend panel -->
<layout_panel
name="right_bookend"
+ mouse_opaque="false"
top="0"
width="0"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 342cf4144f..59400663b8 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -27,173 +27,181 @@
<string
name="no_partner_text"
value="None" />
- <string
+ <string
+ name="no_group_text"
+ value="None" />
+ <string
name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container
- color="DkGray2"
+ <layout_stack
+ name="layout"
+ orientation="vertical"
follows="all"
- height="485"
layout="topleft"
- name="profile_scroll"
- reserve_scroll_corner="true"
- opaque="true"
+ left="0"
top="0"
- width="313">
- <panel
- name="scroll_content_panel"
- follows="left|top|right"
- height="485"
+ height="517"
+ width="313"
+ border_size="0">
+ <layout_panel
+ name="profile_stack"
+ follows="all"
layout="topleft"
top="0"
left="0"
+ height="505"
width="313">
- <panel
- follows="left|top"
- height="117"
+ <scroll_container
+ color="DkGray2"
+ follows="all"
layout="topleft"
- left="10"
- name="second_life_image_panel"
- top="0"
- width="280">
- <texture_picker
- allow_no_texture="true"
- default_image_name="None"
- enabled="false"
- follows="top|left"
- height="102"
+ left="0"
+ name="profile_scroll"
+ opaque="true"
+ height="505"
+ width="313"
+ top="0">
+ <panel
+ layout="topleft"
+ follows="left|top|right"
+ name="profile_scroll_panel"
+ top="0"
+ left="0"
+ width="303">
+ <panel
+ follows="left|top|right"
+ height="117"
+ layout="topleft"
+ left="10"
+ name="second_life_image_panel"
+ top="0"
+ width="303">
+ <texture_picker
+ allow_no_texture="true"
+ default_image_name="None"
+ enabled="false"
+ follows="top|left"
+ height="117"
+ layout="topleft"
+ left="0"
+ name="2nd_life_pic"
+ top="10"
+ width="102" />
+ <text
+ follows="left|top|right"
+ font.style="BOLD"
+ height="15"
+ layout="topleft"
+ left_pad="10"
+ name="title_sl_descr_text"
+ text_color="white"
+ top_delta="0"
+ value="[SECOND_LIFE]:"
+ width="180" />
+ <expandable_text
+ follows="left|top|right"
+ height="95"
+ layout="topleft"
+ left="107"
+ textbox.max_length="512"
+ name="sl_description_edit"
+ top_pad="-3"
+ width="185"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
+ </expandable_text>
+ </panel>
+ <panel
+ follows="left|top|right"
+ height="117"
layout="topleft"
- left="0"
- name="2nd_life_pic"
- top="10"
- width="102" />
+ top_pad="10"
+ left="10"
+ name="first_life_image_panel"
+ width="303">
+ <texture_picker
+ allow_no_texture="true"
+ default_image_name="None"
+ enabled="false"
+ follows="top|left"
+ height="117"
+ layout="topleft"
+ left="0"
+ name="real_world_pic"
+ width="102" />
+ <text
+ follows="left|top|right"
+ font.style="BOLD"
+ height="15"
+ layout="topleft"
+ left_pad="10"
+ name="title_rw_descr_text"
+ text_color="white"
+ top_delta="0"
+ value="Real World:"
+ width="180" />
+ <expandable_text
+ follows="left|top|right"
+ height="95"
+ layout="topleft"
+ left="107"
+ textbox.max_length="512"
+ name="fl_description_edit"
+ top_pad="-3"
+ width="185"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
+ </expandable_text>
+ </panel>
<text
- follows="left|top|right"
- font.style="BOLD"
- height="15"
+ follows="left|top"
+ height="15"
+ font.style="BOLD"
+ font="SansSerifMedium"
+ layout="topleft"
+ left="10"
+ name="homepage_edit"
+ top_pad="0"
+ value="http://librarianavengers.org"
+ width="300"
+ word_wrap="false"
+ use_ellipses="true"
+ />
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
layout="topleft"
- left_pad="10"
- name="title_sl_descr_text"
+ left="10"
+ name="title_member_text"
text_color="white"
- top_delta="0"
- value="[SECOND_LIFE]:"
- width="165" />
- <expandable_text
- follows="left|top|right"
- height="95"
- layout="topleft"
- left="107"
- textbox.max_length="512"
- name="sl_description_edit"
- top_pad="-3"
- width="173"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
- </expandable_text>
- </panel>
- <panel
- follows="left|top"
- height="117"
- layout="topleft"
- top_pad="10"
- left="10"
- name="first_life_image_panel"
- width="280">
- <texture_picker
- allow_no_texture="true"
- default_image_name="None"
- enabled="false"
- follows="top|left"
- height="102"
+ top_pad="10"
+ value="Resident Since:"
+ width="300" />
+ <text
+ follows="left|top"
+ height="15"
layout="topleft"
- left="0"
- name="real_world_pic"
- width="102" />
+ left="10"
+ name="register_date"
+ value="05/31/2376"
+ width="300"
+ word_wrap="true" />
<text
- follows="left|top|right"
- font.style="BOLD"
+ follows="left|top"
+ font.style="BOLD"
height="15"
layout="topleft"
- left_pad="10"
- name="title_rw_descr_text"
+ left="10"
+ name="title_acc_status_text"
text_color="white"
- top_delta="0"
- value="Real World:"
- width="165" />
- <expandable_text
- follows="left|top|right"
- height="95"
- layout="topleft"
- left="107"
- textbox.max_length="512"
- name="fl_description_edit"
- top_pad="-3"
- width="173"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
- </expandable_text>
- </panel>
- <text
- type="string"
- follows="left|top"
- font="SansSerifSmall"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="me_homepage_text"
- text_color="white"
- top_pad="0"
- width="280">
- Homepage:
- </text>
- <text
- follows="left|top"
- height="15"
- layout="topleft"
- left="10"
- name="homepage_edit"
- top_pad="0"
- value="http://librarianavengers.org"
- width="280"
- word_wrap="false"
- use_ellipses="true"
- />
- <text
- follows="left|top"
- font.style="BOLD"
- height="10"
- layout="topleft"
- left="10"
- name="title_member_text"
- text_color="white"
- top_pad="10"
- value="Member Since:"
- width="280" />
- <text
- follows="left|top"
- height="15"
- layout="topleft"
- left="10"
- name="register_date"
- value="05/31/1976"
- width="280"
- word_wrap="true" />
- <text
- follows="left|top"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="title_acc_status_text"
- text_color="white"
- top_pad="10"
- value="Account Status:"
- width="280" />
- <!-- <text
+ top_pad="5"
+ value="Account Status:"
+ width="300" />
+ <!-- <text
type="string"
follows="left|top"
font="SansSerifSmall"
@@ -204,80 +212,81 @@
top_delta="0"
value="Go to Dashboard"
width="100"/> -->
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="acc_status_text"
- top_pad="0"
- value="Resident. No payment info on file."
- width="280"
- word_wrap="true" />
- <text
- follows="left|top"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="title_partner_text"
- text_color="white"
- top_pad="5"
- value="Partner:"
- width="280" />
- <panel
- follows="left|top"
- height="15"
- layout="topleft"
- left="10"
- name="partner_data_panel"
- top_pad="0"
- width="280">
<text
follows="left|top"
- height="10"
+ height="28"
layout="topleft"
- left="0"
- name="partner_text"
- top="0"
- value="[FIRST] [LAST]"
- width="280"
- word_wrap="true" />
- </panel>
- <text
- follows="left|top"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="title_groups_text"
- text_color="white"
- top_pad="8"
- value="Groups:"
- width="280" />
- <expandable_text
- follows="left|top|bottom"
- height="60"
+ left="10"
+ name="acc_status_text"
+ top_pad="0"
+ width="300"
+ word_wrap="true">
+ Resident. No payment info on file.
+ Linden.
+ </text>
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="15"
+ layout="topleft"
+ left="10"
+ name="title_partner_text"
+ text_color="white"
+ top_pad="3"
+ value="Partner:"
+ width="300" />
+ <panel
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="10"
+ name="partner_data_panel"
+ top_pad="0"
+ width="300">
+ <text
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="0"
+ name="partner_text"
+ top="0"
+ value="[FIRST] [LAST]"
+ width="300"
+ word_wrap="true" />
+ </panel>
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="13"
+ layout="topleft"
+ left="10"
+ name="title_groups_text"
+ text_color="white"
+ top_pad="3"
+ value="Groups:"
+ width="300" />
+ <expandable_text
+ follows="all"
+ height="113"
+ layout="topleft"
+ left="7"
+ name="sl_groups"
+ top_pad="0"
+ width="298"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. Aenean viverra tulip moosetop. Slan de heelish marfnik tooplod. Sum sum to whop de wompam booster copm.
+ </expandable_text>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel
+ follows="bottom|left"
+ height="28"
layout="topleft"
- left="10"
- name="sl_groups"
- top_pad="0"
- width="280"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
- </expandable_text>
- </panel>
- </scroll_container>
- <panel
- follows="bottom|left"
- layout="topleft"
- left="0"
- name="profile_buttons_panel"
- top_pad="2"
- bottom="0"
- height="19"
- width="303">
+ name="profile_buttons_panel"
+ auto_resize="false"
+ width="313">
<button
follows="bottom|left"
height="23"
@@ -288,7 +297,7 @@
name="add_friend"
tool_tip="Offer friendship to the resident"
top="5"
- width="77" />
+ width="80" />
<button
follows="bottom|left"
height="23"
@@ -297,8 +306,8 @@
name="im"
tool_tip="Open instant message session"
top="5"
- left_pad="5"
- width="33" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -306,9 +315,9 @@
layout="topleft"
name="call"
tool_tip="Call this resident"
- left_pad="5"
+ left_pad="3"
top="5"
- width="40" />
+ width="45" />
<button
enabled="false"
follows="bottom|left"
@@ -318,8 +327,8 @@
name="show_on_map_btn"
tool_tip="Show the resident on the map"
top="5"
- left_pad="5"
- width="44" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -327,10 +336,10 @@
layout="topleft"
name="teleport"
tool_tip="Offer teleport"
- left_pad="5"
+ left_pad="3"
top="5"
- width="67" />
- <button
+ width="85" />
+ <!-- <button
follows="bottom|right"
height="23"
label="▼"
@@ -339,23 +348,24 @@
tool_tip="Pay money to or share inventory with the resident"
right="-1"
top="5"
- width="21" />
- </panel>
- <panel
- follows="bottom|left"
- layout="topleft"
- left="0"
- top_pad="-17"
- name="profile_me_buttons_panel"
- visible="false"
- height="19"
- width="303">
+ left_pad="3"
+ width="23" />-->
+ </layout_panel>
+ <layout_panel
+ follows="bottom|left"
+ height="28"
+ layout="topleft"
+ name="profile_me_buttons_panel"
+ visible="false"
+ width="313">
<button
follows="bottom|right"
height="23"
- left="10"
+ left="20"
+ top="0"
label="Edit Profile"
name="edit_profile_btn"
+ tool_tip="Edit your personal information"
width="130" />
<button
follows="bottom|right"
@@ -363,7 +373,9 @@
label="Edit Appearance"
left_pad="10"
name="edit_appearance_btn"
- right="-10"
+ tool_tip="Create/edit your appearance: physical data, clothes and etc."
width="130" />
- </panel>
-</panel>
+ </layout_panel>
+
+</layout_stack>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 6324ec2bd8..c51447eaf0 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -26,8 +26,8 @@
top="2"
width="23" />
<text_editor
- allow_scroll="false"
- bg_visible="false"
+ allow_scroll="false"
+ bg_visible="false"
read_only = "true"
follows="top|left|right"
font="SansSerifHugeBold"
@@ -55,7 +55,7 @@
halign="center"
layout="topleft"
left="10"
- min_width="333"
+ min_width="333"
name="tabs"
tab_min_width="80"
tab_height="30"
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 3578c4326d..00f54feabd 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -3,7 +3,7 @@
background_opaque="true"
background_visible="true"
bg_opaque_color="MouseGray"
- follows="all"
+ follows="top|right"
height="19"
layout="topleft"
left="0"
@@ -44,15 +44,17 @@
halign="right"
follows="right|top"
image_selected="BuyArrow_Over"
- image_unselected="BuyArrow_Off"
+ image_unselected="BuyArrow_Over"
image_pressed="BuyArrow_Press"
height="16"
- right="-120"
+ right="-128"
+ label_color="White"
+ label_shadow="false"
name="buycurrency"
pad_right="20px"
tool_tip="My Balance: Click to buy more L$"
- top="0"
- width="90" />
+ top="3"
+ width="100" />
<text
type="string"
font="SansSerifSmall"
@@ -62,25 +64,25 @@
height="16"
top="4"
layout="topleft"
- left_pad="-7"
+ left_pad="0"
name="TimeText"
text_color="TimeTextColor"
tool_tip="Current time (Pacific)"
- width="80">
+ width="85">
12:00 AM
</text>
<button
follows="right|bottom"
height="16"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_pressed="Audio_Press"
+ image_unselected="Audio_Off"
is_toggle="true"
left_pad="18"
top="1"
name="volume_btn"
tool_tip="Global Volume Control"
width="16" />
-
<text
enabled="true"
follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index 44248eedd5..fab1f11273 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -52,25 +52,25 @@ width="333">
text_color="white"
top="3"
use_ellipses="true"
- width="290"
+ width="305"
follows="top|left"
word_wrap="true"
mouse_opaque="false"
name="currentlook_name">
MyOutfit With a really Long Name like MOOSE
</text>
- <!-- <text
- text_color="LtGray_50"
- width="290"
- left="40"
+ <text
+ font="SansSerifSmall"
+ text_color="White_50"
+ width="300"
height="1"
follows="top|left"
layout="topleft"
- top_pad="-2"
+ top_pad="5"
mouse_opaque="false"
name="currentlook_title" >
- (current outfit)
- </text>-->
+ (unsaved)
+ </text>
</panel>
<filter_editor
height="23"
@@ -80,18 +80,18 @@ width="333">
label="Filter Outfits"
max_length="300"
name="Filter"
- top_pad="0"
+ top_pad="10"
width="303" />
<panel
class="panel_outfits_inventory"
filename="panel_outfits_inventory.xml"
name="panel_outfits_inventory"
- height="515"
+ height="505"
min_height="410"
width="320"
+ left="0"
top_pad="0"
- follows="all"
- />
+ follows="all" />
<!-- <button
follows="bottom|left"
height="23"
@@ -120,4 +120,3 @@ width="333">
top="35"
visible="false" />
</panel>
-
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index b738e72423..51974be854 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -28,7 +28,7 @@
name="panel_main_inventory"
top="0"
label=""
- height="500"
+ height="545"
width="330" />
<panel
height="25"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 447901f984..f2f23a3847 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -8,6 +8,7 @@
<!-- Default Args - these arguments will be replaced in all strings -->
<string name="SECOND_LIFE">Second Life</string>
<string name="APP_NAME">Second Life</string>
+ <string name="CAPITALIZED_APP_NAME">SECOND LIFE</string>
<string name="SECOND_LIFE_GRID">Second Life Grid</string>
<string name="SUPPORT_SITE">Second Life Support Portal</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
index 7cb973f4c8..af0d338256 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
@@ -33,7 +33,7 @@
<chiclet_im_adhoc.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
index a9b567225e..b1988a2d20 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
@@ -34,7 +34,7 @@
<chiclet_im_group.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
index 9283594a4c..52fbce0de7 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
@@ -33,7 +33,7 @@
<chiclet_im_p2p.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
index 5a22563758..33f85a964c 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
@@ -14,7 +14,7 @@
<chiclet_offer.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
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 05a23b95f9..560c8e6ea5 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
@@ -14,7 +14,7 @@
<chiclet_script.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
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 1368c6826d..67bb7c1896 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -3,15 +3,12 @@
*TODO: Replace hardcoded buttons width/height with getting this info from the button images.
Currently that doesn't work because LLUIImage::getWidth/getHeight() return 1 for the images.
-->
-
-
-
<location_input font="SansSerifSmall"
add_landmark_image_enabled="Favorite_Star_Active"
add_landmark_image_disabled="Favorite_Star_Off"
add_landmark_image_hover="Favorite_Star_Over"
add_landmark_image_selected="Favorite_Star_Press"
- add_landmark_hpad="12"
+ add_landmark_hpad="12"
icon_hpad="2"
allow_text_entry="true"
list_position="below"
@@ -26,8 +23,8 @@
name="Place Information"
width="16"
height="16"
- left="4"
- top="20"
+ left="6"
+ top="20"
follows="left|top"
hover_glow_amount="0.15"
image_unselected="Info_Off"
@@ -55,7 +52,7 @@
top="21"
/>
<voice_icon
- enabled="true"
+ enabled="true"
name="voice_icon"
width="22"
height="18"
@@ -97,11 +94,12 @@
/>
<damage_icon
name="damage_icon"
- width="20"
- height="16"
- top="20"
+ width="14"
+ height="13"
+ top="22"
+ left="2"
follows="right|top"
- image_name="Parcel_Damage_Light"
+ image_name="Parcel_Damage_Dark"
/>
<!-- Default text color is invisible on top of nav bar background -->
<damage_text
diff --git a/indra/newview/tests/lldateutil_test.cpp b/indra/newview/tests/lldateutil_test.cpp
index 142a5eb5e6..7ba82fbd2c 100644
--- a/indra/newview/tests/lldateutil_test.cpp
+++ b/indra/newview/tests/lldateutil_test.cpp
@@ -179,4 +179,14 @@ namespace tut
LLDateUtil::ageFromDate("12/31/2009", mNow),
"Joined today" );
}
+
+ template<> template<>
+ void dateutil_object_t::test<5>()
+ {
+ set_test_name("2010 rollover");
+ LLDate now(std::string("2010-01-04T12:00:00Z"));
+ ensure_equals("days",
+ LLDateUtil::ageFromDate("12/13/2009", now),
+ "3 weeks old" );
+ }
}