diff options
Diffstat (limited to 'indra/newview')
114 files changed, 2272 insertions, 1558 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 e24e1a8605..7d98a4b6ce 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -276,7 +276,7 @@ <key>Value</key> <real>0.5</real> </map> - <key>AudioSteamingMedia</key> + <key>AudioStreamingMedia</key> <map> <key>Comment</key> <string>Enable streaming</string> @@ -408,6 +408,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>AvalinePhoneSeparator</key> + <map> + <key>Comment</key> + <string>Separator of phone parts to have Avaline numbers human readable in Voice Control Panel</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string>-</string> + </map> <key>AvatarAxisDeadZone0</key> <map> <key>Comment</key> @@ -4809,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> @@ -9320,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/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index ae89eb4413..448e20b382 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -5608,9 +5608,7 @@ <layer_set body_region="head" width="512" - height="512" - clear_alpha="false" - alpha_tga_file="head_alpha.tga"> + height="512"> <layer name="head bump base" fixed_color = "128,128,128,255" @@ -6609,6 +6607,13 @@ render_pass="bump"> local_texture="head_bodypaint" /> </layer> <layer + name="eyelash alpha" + visibility_mask="TRUE"> + <texture + tga_file="head_alpha.tga" + file_is_mask="TRUE" /> + </layer> + <layer name="head alpha" visibility_mask="TRUE"> <texture @@ -6620,6 +6625,7 @@ render_pass="bump"> local_texture="head_tattoo" /> </layer> + </layer_set> <!-- =========================================================== --> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index d2a56f65dd..5e2e374df6 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2812,7 +2812,7 @@ void LLAgent::endAnimationUpdateUI() LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - LLFloaterCamera::toPrevModeIfInAvatarViewMode(); + LLFloaterCamera::onLeavingMouseLook(); // Only pop if we have pushed... if (TRUE == mViewsPushed) @@ -2915,10 +2915,6 @@ void LLAgent::endAnimationUpdateUI() // JC - Added for always chat in third person option gFocusMgr.setKeyboardFocus(NULL); - //Making sure Camera Controls floater is in the right state - //when entering Mouse Look using wheel scrolling - LLFloaterCamera::updateIfNotInAvatarViewMode(); - LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset); mViewsPushed = TRUE; diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index dc1598aacd..f49f862045 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -116,6 +116,39 @@ BOOL LLAgentWearables::mInitialWearablesUpdateReceived = FALSE; using namespace LLVOAvatarDefines; +// HACK: For EXT-3923: Pants item shows in inventory with skin icon and messes with "current look" +// Some db items are corrupted, have inventory flags = 0, implying wearable type = shape, even though +// wearable type stored in asset is some other value. +// Calling this function whenever a wearable is added to increase visibility if this problem +// turns up in other inventories. +void checkWearableAgainstInventory(LLWearable *wearable) +{ + if (wearable->getItemID().isNull()) + return; + + // Check for wearable type consistent with inventory item wearable type. + LLViewerInventoryItem *item = gInventory.getItem(wearable->getItemID()); + if (item) + { + if (!item->isWearableType()) + { + llwarns << "wearable associated with non-wearable item" << llendl; + } + if (item->getWearableType() != wearable->getType()) + { + llwarns << "type mismatch: wearable " << wearable->getName() + << " has type " << wearable->getType() + << " but inventory item " << item->getName() + << " has type " << item->getWearableType() << llendl; + } + } + else + { + llwarns << "wearable inventory item not found" << wearable->getName() + << " itemID " << wearable->getItemID().asString() << llendl; + } +} + void LLAgentWearables::dump() { llinfos << "LLAgentWearablesDump" << llendl; @@ -657,6 +690,7 @@ LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 index) void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearable *wearable) { + LLWearable *old_wearable = getWearable(type,index); if (!old_wearable) { @@ -680,6 +714,7 @@ void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearab wearable_vec[index] = wearable; old_wearable->setLabelUpdated(); wearableUpdated(wearable); + checkWearableAgainstInventory(wearable); } } @@ -695,6 +730,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl { mWearableDatas[type].push_back(wearable); wearableUpdated(wearable); + checkWearableAgainstInventory(wearable); return mWearableDatas[type].size()-1; } return MAX_WEARABLES_PER_TYPE; @@ -875,7 +911,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(); } @@ -1360,6 +1396,7 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name) LLPointer<LLInventoryCallback> cb = new LLAutoRenameFolder(folder_id); LLAppearanceManager::instance().shallowCopyCategory(LLAppearanceManager::instance().getCOF(),folder_id, cb); + LLAppearanceManager::instance().createBaseOutfitLink(folder_id, NULL); return folder_id; } @@ -1705,6 +1742,7 @@ void LLAgentWearables::setWearableFinal(LLInventoryItem* new_item, LLWearable* n mWearableDatas[type].push_back(new_wearable); llinfos << "Added additional wearable for type " << type << " size is now " << mWearableDatas[type].size() << llendl; + checkWearableAgainstInventory(new_wearable); } else { @@ -2236,6 +2274,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 43b2f34ecd..4d4a89bcd4 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -364,7 +364,7 @@ LLUUID LLAppearanceManager::getCOF() } -const LLViewerInventoryItem* LLAppearanceManager::getCurrentOutfitLink() +const LLViewerInventoryItem* LLAppearanceManager::getBaseOutfitLink() { const LLUUID& current_outfit_cat = getCOF(); LLInventoryModel::cat_array_t cat_array; @@ -444,6 +444,28 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID } } +void LLAppearanceManager::purgeBaseOutfitLink(const LLUUID& category) +{ + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + gInventory.collectDescendents(category, cats, items, + LLInventoryModel::EXCLUDE_TRASH); + for (S32 i = 0; i < items.count(); ++i) + { + LLViewerInventoryItem *item = items.get(i); + if (item->getActualType() != LLAssetType::AT_LINK_FOLDER) + continue; + if (item->getIsLinkType()) + { + LLViewerInventoryCategory* catp = item->getLinkedCategory(); + if(catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) + { + gInventory.purgeObject(item->getUUID()); + } + } + } +} + void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links) { LLInventoryModel::cat_array_t cats; @@ -578,17 +600,9 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append) linkAll(cof, gest_items, link_waiter); // Add link to outfit if category is an outfit. - LLViewerInventoryCategory* catp = gInventory.getCategory(category); if (!append) { - std::string new_outfit_name = ""; - if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) - { - link_inventory_item(gAgent.getID(), category, cof, catp->getName(), - LLAssetType::AT_LINK_FOLDER, link_waiter); - new_outfit_name = catp->getName(); - } - updatePanelOutfitName(new_outfit_name); + createBaseOutfitLink(category, link_waiter); } } @@ -602,6 +616,22 @@ void LLAppearanceManager::updatePanelOutfitName(const std::string& name) } } +void LLAppearanceManager::createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter) +{ + const LLUUID cof = getCOF(); + LLViewerInventoryCategory* catp = gInventory.getCategory(category); + std::string new_outfit_name = ""; + + purgeBaseOutfitLink(cof); + + if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) + { + link_inventory_item(gAgent.getID(), category, cof, catp->getName(), + LLAssetType::AT_LINK_FOLDER, link_waiter); + new_outfit_name = catp->getName(); + } + updatePanelOutfitName(new_outfit_name); +} void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, bool append) { @@ -644,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; @@ -693,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); @@ -959,7 +1009,9 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up if (linked_already) { if (do_update) + { LLAppearanceManager::updateAppearanceFromCOF(); + } return; } else @@ -1013,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) @@ -1049,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 b625d42a50..b954968998 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -62,11 +62,13 @@ public: LLUUID getCOF(); // Finds the folder link to the currently worn outfit - const LLViewerInventoryItem *getCurrentOutfitLink(); + const LLViewerInventoryItem *getBaseOutfitLink(); // Update the displayed outfit name in UI. void updatePanelOutfitName(const std::string& name); + void createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter); + void updateAgentWearables(LLWearableHoldingPattern* holder, bool append); // For debugging - could be moved elsewhere. @@ -94,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(); @@ -114,9 +126,11 @@ private: bool follow_folder_links); void purgeCategory(const LLUUID& category, bool keep_outfit_links); + void purgeBaseOutfitLink(const LLUUID& category); 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..e0356bc091 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1929,8 +1929,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/llavataractions.cpp b/indra/newview/llavataractions.cpp index 2a8c55e5db..c3deb602ee 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -168,8 +168,28 @@ void LLAvatarActions::offerTeleport(const LLUUID& invitee) // static void LLAvatarActions::offerTeleport(const std::vector<LLUUID>& ids) { - if (ids.size() > 0) - handle_lure(ids); + if (ids.size() == 0) + return; + + handle_lure(ids); + + // Record the offer. + for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++) + { + LLUUID target_id = *it; + std::string target_name; + + gCacheName->getFullName(target_id, target_name); + + LLSD args; + args["TO_NAME"] = target_name; + + LLSD payload; + payload["from_id"] = target_id; + payload["SESSION_NAME"] = target_name; + payload["SUPPRESS_TOAST"] = true; + LLNotificationsUtil::add("TeleportOfferSent", args, payload); + } } // static @@ -595,9 +615,11 @@ void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::stri LLSD args; args["TO_NAME"] = target_name; + LLSD payload; + payload["from_id"] = target_id; payload["SESSION_NAME"] = target_name; - payload["SUPPRES_TOST"] = true; + payload["SUPPRESS_TOAST"] = true; LLNotificationsUtil::add("FriendshipOffered", args, payload); } diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index a402f59fa1..1468f6d584 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -47,6 +47,7 @@ #include "llfloaterreg.h" #include "llparticipantlist.h" #include "llspeakers.h" +#include "lltextutil.h" #include "lltransientfloatermgr.h" #include "llviewerwindow.h" #include "llvoicechannel.h" @@ -76,6 +77,12 @@ public: return rv; } + void setName(const std::string& name) + { + const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name); + LLAvatarListItem::setName(formatted_phone); + } + void setSpeakerId(const LLUUID& id) { mSpeakingIndicator->setSpeakerId(id); } }; @@ -270,6 +277,11 @@ void LLCallFloater::updateSession() case IM_NOTHING_SPECIAL: case IM_SESSION_P2P_INVITE: mVoiceType = VC_PEER_TO_PEER; + + if (!im_session->mOtherParticipantIsAvatar) + { + mVoiceType = VC_PEER_TO_PEER_AVALINE; + } break; case IM_SESSION_CONFERENCE_START: case IM_SESSION_GROUP_START: @@ -321,16 +333,13 @@ void LLCallFloater::updateSession() void LLCallFloater::refreshParticipantList() { - bool non_avatar_caller = false; - if (VC_PEER_TO_PEER == mVoiceType) + bool non_avatar_caller = VC_PEER_TO_PEER_AVALINE == mVoiceType; + + if (non_avatar_caller) { LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSpeakerManager->getSessionID()); - non_avatar_caller = !session->mOtherParticipantIsAvatar; - if (non_avatar_caller) - { - mNonAvatarCaller->setSpeakerId(session->mOtherParticipantID); - mNonAvatarCaller->setName(session->mName); - } + mNonAvatarCaller->setSpeakerId(session->mOtherParticipantID); + mNonAvatarCaller->setName(session->mName); } mNonAvatarCaller->setVisible(non_avatar_caller); @@ -390,9 +399,17 @@ void LLCallFloater::updateTitle() title = getString("title_nearby"); break; case VC_PEER_TO_PEER: + case VC_PEER_TO_PEER_AVALINE: { + title = voice_channel->getSessionName(); + + if (VC_PEER_TO_PEER_AVALINE == mVoiceType) + { + title = LLTextUtil::formatPhoneNumber(title); + } + LLStringUtil::format_map_t args; - args["[NAME]"] = voice_channel->getSessionName(); + args["[NAME]"] = title; title = getString("title_peer_2_peer", args); } break; diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h index 8aba93fc43..2b40225906 100644 --- a/indra/newview/llcallfloater.h +++ b/indra/newview/llcallfloater.h @@ -88,7 +88,8 @@ private: VC_LOCAL_CHAT, VC_GROUP_CHAT, VC_AD_HOC_CHAT, - VC_PEER_TO_PEER + VC_PEER_TO_PEER, + VC_PEER_TO_PEER_AVALINE }EVoiceControls; typedef enum e_speaker_state diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 21cadda6e3..dac3280575 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -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 92df281307..60a37ac4af 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -253,10 +253,32 @@ void LLNearbyChatToastPanel::onMouseEnter (S32 x, S32 y, MASK mask) BOOL LLNearbyChatToastPanel::handleMouseDown (S32 x, S32 y, MASK mask) { + return LLPanel::handleMouseDown(x,y,mask); +} + +BOOL LLNearbyChatToastPanel::handleMouseUp (S32 x, S32 y, MASK mask) +{ if(mSourceType != CHAT_SOURCE_AGENT) - return LLPanel::handleMouseDown(x,y,mask); + return LLPanel::handleMouseUp(x,y,mask); + + LLChatMsgBox* text_box = getChild<LLChatMsgBox>("msg_text", false); + S32 local_x = x - text_box->getRect().mLeft; + S32 local_y = y - text_box->getRect().mBottom; + + //if text_box process mouse up (ussually this is click on url) - we didn't show nearby_chat. + if (text_box->pointInView(local_x, local_y) ) + { + if (text_box->handleMouseUp(local_x,local_y,mask) == TRUE) + return TRUE; + else + { + LLFloaterReg::showInstance("nearby_chat",LLSD()); + return FALSE; + } + } + LLFloaterReg::showInstance("nearby_chat",LLSD()); - return LLPanel::handleMouseDown(x,y,mask); + return LLPanel::handleMouseUp(x,y,mask); } void LLNearbyChatToastPanel::setHeaderVisibility(EShowItemHeader e) diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h index 0a85c52401..f4b8655054 100644 --- a/indra/newview/llchatitemscontainerctrl.h +++ b/indra/newview/llchatitemscontainerctrl.h @@ -68,6 +68,7 @@ public: void onMouseLeave (S32 x, S32 y, MASK mask); void onMouseEnter (S32 x, S32 y, MASK mask); BOOL handleMouseDown (S32 x, S32 y, MASK mask); + BOOL handleMouseUp (S32 x, S32 y, MASK mask); virtual BOOL postBuild(); 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/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index effa57b1ef..7d8bb6e104 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -323,7 +323,9 @@ void LLFastTimerView::draw() S32 xleft = margin; S32 ytop = margin; - mAverageCyclesPerTimer = llround(lerp((F32)mAverageCyclesPerTimer, (F32)(LLFastTimer::sTimerCycles / (U64)LLFastTimer::sTimerCalls), 0.1f)); + mAverageCyclesPerTimer = LLFastTimer::sTimerCalls == 0 + ? 0 + : llround(lerp((F32)mAverageCyclesPerTimer, (F32)(LLFastTimer::sTimerCycles / (U64)LLFastTimer::sTimerCalls), 0.1f)); LLFastTimer::sTimerCycles = 0; LLFastTimer::sTimerCalls = 0; diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 6ae6b4877a..4103ccf175 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -644,7 +644,7 @@ LLXMLNodePtr LLFavoritesBarCtrl::getButtonXMLNode() bool success = LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", buttonXMLNode); if (!success) { - llwarns << "Unable to read xml file with button for Favorites Bar: favorites_bar_button.xml" << llendl; + llwarns << "Failed to create Favorites Bar button from favorites_bar_button.xml" << llendl; buttonXMLNode = NULL; } return buttonXMLNode; diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 764aff68c9..9496e94780 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -144,6 +144,11 @@ void LLPanelCameraZoom::onSliderValueChanged() mSavedSliderVal = val; } +void activate_camera_tool() +{ + LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); +}; + // // Member functions // @@ -151,7 +156,7 @@ void LLPanelCameraZoom::onSliderValueChanged() /*static*/ bool LLFloaterCamera::inFreeCameraMode() { LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); - if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA) + if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK) { return true; } @@ -177,27 +182,17 @@ void LLFloaterCamera::update() } -/*static*/ void LLFloaterCamera::updateIfNotInAvatarViewMode() -{ - LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); - if (floater_camera && !floater_camera->inAvatarViewMode()) - { - floater_camera->update(); - } -} - - void LLFloaterCamera::toPrevMode() { switchMode(mPrevMode); } -/*static*/ void LLFloaterCamera::toPrevModeIfInAvatarViewMode() +/*static*/ void LLFloaterCamera::onLeavingMouseLook() { LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); - if (floater_camera && floater_camera->inAvatarViewMode()) + if (floater_camera && floater_camera->inFreeCameraMode()) { - floater_camera->toPrevMode(); + activate_camera_tool(); } } @@ -325,7 +320,7 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode) break; case CAMERA_CTRL_MODE_FREE_CAMERA: - LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); + activate_camera_tool(); break; case CAMERA_CTRL_MODE_AVATAR_VIEW: diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index 5d44b4944d..45d5e9a845 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -61,7 +61,7 @@ public: /* callback for camera presets changing */ static void onClickCameraPresets(const LLSD& param); - static void toPrevModeIfInAvatarViewMode(); + static void onLeavingMouseLook(); /** resets current camera mode to orbit mode */ static void resetCameraMode(); @@ -69,8 +69,6 @@ public: /* determines actual mode and updates ui */ void update(); - static void updateIfNotInAvatarViewMode(); - virtual void onOpen(const LLSD& key); virtual void onClose(bool app_quitting); 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/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index babef5b63d..9cae6f0ebd 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -1221,10 +1221,10 @@ void LLFloaterTools::getMediaState() mNeedMediaTitle = false; } - childSetEnabled("media_tex", bool_has_media & editable); - childSetEnabled( "edit_media", bool_has_media & editable ); - childSetEnabled( "delete_media", bool_has_media & editable ); - childSetEnabled( "add_media", ( ! bool_has_media ) & editable ); + childSetEnabled("media_tex", bool_has_media && editable); + childSetEnabled( "edit_media", bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable ); + childSetEnabled( "delete_media", bool_has_media && editable ); + childSetEnabled( "add_media", ( ! bool_has_media ) && editable ); // TODO: display a list of all media on the face - use 'identical' flag } else // not all face has media but at least one does. @@ -1252,7 +1252,7 @@ void LLFloaterTools::getMediaState() } childSetEnabled("media_tex", TRUE); - childSetEnabled( "edit_media", TRUE); + childSetEnabled( "edit_media", LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo); childSetEnabled( "delete_media", TRUE); childSetEnabled( "add_media", FALSE ); } @@ -1423,7 +1423,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getControls(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_controls(default_media_data); identical = selected_objects->getSelectedTEValue( &func_controls, value_u8 ); @@ -1446,7 +1446,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getFirstClickInteract(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_first_click(default_media_data); identical = selected_objects->getSelectedTEValue( &func_first_click, value_bool ); @@ -1469,7 +1469,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getHomeURL(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_home_url(default_media_data); identical = selected_objects->getSelectedTEValue( &func_home_url, value_str ); @@ -1492,7 +1492,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getCurrentURL(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_current_url(default_media_data); identical = selected_objects->getSelectedTEValue( &func_current_url, value_str ); @@ -1516,7 +1516,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getAutoZoom(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_auto_zoom(default_media_data); identical = selected_objects->getSelectedTEValue( &func_auto_zoom, value_bool ); @@ -1539,7 +1539,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getAutoPlay(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_auto_play(default_media_data); identical = selected_objects->getSelectedTEValue( &func_auto_play, value_bool ); @@ -1563,7 +1563,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getAutoScale();; }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_auto_scale(default_media_data); identical = selected_objects->getSelectedTEValue( &func_auto_scale, value_bool ); @@ -1586,7 +1586,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getAutoLoop(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_auto_loop(default_media_data); identical = selected_objects->getSelectedTEValue( &func_auto_loop, value_bool ); @@ -1609,7 +1609,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getWidthPixels(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_width_pixels(default_media_data); identical = selected_objects->getSelectedTEValue( &func_width_pixels, value_int ); @@ -1632,7 +1632,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getHeightPixels(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_height_pixels(default_media_data); identical = selected_objects->getSelectedTEValue( &func_height_pixels, value_int ); @@ -1655,7 +1655,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getAltImageEnable(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_enable_alt_image(default_media_data); identical = selected_objects->getSelectedTEValue( &func_enable_alt_image, value_bool ); @@ -1678,7 +1678,7 @@ void LLFloaterTools::updateMediaSettings() return 0 != ( mMediaEntry.getPermsInteract() & LLMediaEntry::PERM_OWNER ); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_perms_owner_interact(default_media_data); identical = selected_objects->getSelectedTEValue( &func_perms_owner_interact, value_bool ); @@ -1701,7 +1701,7 @@ void LLFloaterTools::updateMediaSettings() return 0 != ( mMediaEntry.getPermsControl() & LLMediaEntry::PERM_OWNER ); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_perms_owner_control(default_media_data); identical = selected_objects ->getSelectedTEValue( &func_perms_owner_control, value_bool ); @@ -1724,7 +1724,7 @@ void LLFloaterTools::updateMediaSettings() return 0 != ( mMediaEntry.getPermsInteract() & LLMediaEntry::PERM_GROUP ); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_perms_group_interact(default_media_data); identical = selected_objects->getSelectedTEValue( &func_perms_group_interact, value_bool ); @@ -1747,7 +1747,7 @@ void LLFloaterTools::updateMediaSettings() return 0 != ( mMediaEntry.getPermsControl() & LLMediaEntry::PERM_GROUP ); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_perms_group_control(default_media_data); identical = selected_objects->getSelectedTEValue( &func_perms_group_control, value_bool ); @@ -1770,7 +1770,7 @@ void LLFloaterTools::updateMediaSettings() return 0 != ( mMediaEntry.getPermsInteract() & LLMediaEntry::PERM_ANYONE ); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_perms_anyone_interact(default_media_data); identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func_perms_anyone_interact, value_bool ); @@ -1793,7 +1793,7 @@ void LLFloaterTools::updateMediaSettings() return 0 != ( mMediaEntry.getPermsControl() & LLMediaEntry::PERM_ANYONE ); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_perms_anyone_control(default_media_data); identical = selected_objects->getSelectedTEValue( &func_perms_anyone_control, value_bool ); @@ -1816,7 +1816,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getWhiteListEnable(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_whitelist_enable(default_media_data); identical = selected_objects->getSelectedTEValue( &func_whitelist_enable, value_bool ); @@ -1839,7 +1839,7 @@ void LLFloaterTools::updateMediaSettings() return mMediaEntry.getWhiteList(); }; - const LLMediaEntry & mMediaEntry; + const LLMediaEntry &mMediaEntry; } func_whitelist_urls(default_media_data); identical = selected_objects->getSelectedTEValue( &func_whitelist_urls, value_vector_str ); diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 112b23d2df..41f4d1a663 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; } 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/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 3ca459a403..e75d35bea4 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -210,7 +210,6 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL item->setGroupID(id); item->setName(name, mNameFilter); item->setGroupIconID(icon_id); -// item->setContextMenu(mContextMenu); item->childSetVisible("info_btn", false); item->childSetVisible("profile_btn", false); @@ -268,8 +267,9 @@ bool LLGroupList::onContextMenuItemEnable(const LLSD& userdata) LLUUID selected_group_id = getSelectedUUID(); bool real_group_selected = selected_group_id.notNull(); // a "real" (not "none") group is selected + // each group including "none" can be activated if (userdata.asString() == "activate") - return real_group_selected && gAgent.getGroupID() != selected_group_id; + return gAgent.getGroupID() != selected_group_id; return real_group_selected; } @@ -283,7 +283,6 @@ LLGroupListItem::LLGroupListItem() mGroupIcon(NULL), mGroupNameBox(NULL), mInfoBtn(NULL), -//mContextMenu(NULL), //TODO: mGroupID(LLUUID::null) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_list_item.xml"); 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 259f629bdd..fdc5d14d97 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -120,6 +120,12 @@ void LLIMFloater::onFocusLost() void LLIMFloater::onFocusReceived() { LLIMModel::getInstance()->setActiveSessionID(mSessionID); + + // return focus to the input field when active tab in the multitab container is clicked. + if (isChatMultiTab() && mInputEditor) + { + mInputEditor->setFocus(TRUE); + } } // virtual @@ -618,6 +624,15 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void* //in disconnected state IM input editor should be disabled self->mInputEditor->setEnabled(!gDisconnected); } + + // when IM Floater is a part of the multitab container LLTabContainer set focus to the first + // child on tab button's mouse up. This leads input field lost focus. See EXT-3852. + if (isChatMultiTab()) + { + // So, clear control captured mouse to prevent LLTabContainer set focus on the panel's first child. + // do not pass self->mInputEditor, this leads to have "Edit Text" mouse pointer wherever it is. + gFocusMgr.setMouseCapture(NULL); + } } // static diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 40227539d0..daabf1f717 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -82,6 +82,7 @@ #include "llfirstuse.h" #include "llagentui.h" +#include "lltextutil.h" const static std::string IM_TIME("time"); const static std::string IM_TEXT("message"); @@ -92,6 +93,7 @@ const static std::string NO_SESSION("(IM Session Doesn't Exist)"); const static std::string ADHOC_NAME_SUFFIX(" Conference"); std::string LLCallDialogManager::sPreviousSessionlName = ""; +LLIMModel::LLIMSession::SType LLCallDialogManager::sPreviousSessionType = LLIMModel::LLIMSession::P2P_SESSION; std::string LLCallDialogManager::sCurrentSessionlName = ""; LLIMModel::LLIMSession* LLCallDialogManager::sSession = NULL; LLVoiceChannel::EState LLCallDialogManager::sOldState = LLVoiceChannel::STATE_READY; @@ -178,6 +180,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& if (IM_NOTHING_SPECIAL == type || IM_SESSION_P2P_INVITE == type) { mVoiceChannel = new LLVoiceChannelP2P(session_id, name, other_participant_id); + mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID); // check if it was AVALINE call if (!mOtherParticipantIsAvatar) @@ -208,7 +211,10 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& mSpeakers = new LLIMSpeakerMgr(mVoiceChannel); // All participants will be added to the list of people we've recently interacted with. - mSpeakers->addListener(&LLRecentPeople::instance(), "add"); + + // we need to add only _active_ speakers...so comment this. + // may delete this later on cleanup + //mSpeakers->addListener(&LLRecentPeople::instance(), "add"); //we need to wait for session initialization for outgoing ad-hoc and group chat session //correct session id for initiated ad-hoc chat will be received from the server @@ -224,7 +230,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& { mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID); mTextIMPossible = LLVoiceClient::getInstance()->isSessionTextIMPossible(mSessionID); - mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID); } if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) @@ -377,6 +382,10 @@ void LLIMModel::LLIMSession::addMessage(const std::string& from, const LLUUID& f mSpeakers->speakerChatted(from_id); mSpeakers->setSpeakerTyping(from_id, FALSE); } + + if( mSessionType == P2P_SESSION || + mSessionType == ADHOC_SESSION) + LLRecentPeople::instance().add(from_id); } void LLIMModel::LLIMSession::addMessagesFromHistory(const std::list<LLSD>& history) @@ -781,7 +790,7 @@ LLIMSpeakerMgr* LLIMModel::getSpeakerManager( const LLUUID& session_id ) const LLIMSession* session = findIMSession(session_id); if (!session) { - llwarns << "session " << session_id << "does not exist " << llendl; + llwarns << "session " << session_id << " does not exist " << llendl; return NULL; } @@ -1360,6 +1369,13 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id) sCurrentSessionlName = ""; // Empty string results in "Nearby Voice Chat" after substitution return; } + + if (sSession) + { + // store previous session type to process Avaline calls in dialogs + sPreviousSessionType = sSession->mSessionType; + } + sSession = session; sSession->mVoiceChannel->setStateChangedCallback(LLCallDialogManager::onVoiceChannelStateChanged); if(sCurrentSessionlName != session->mName) @@ -1378,6 +1394,7 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id) mCallDialogPayload["session_name"] = sSession->mName; mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID; mCallDialogPayload["old_channel_name"] = sPreviousSessionlName; + mCallDialogPayload["old_session_type"] = sPreviousSessionType; mCallDialogPayload["state"] = LLVoiceChannel::STATE_CALL_STARTED; mCallDialogPayload["disconnected_channel_name"] = sSession->mName; mCallDialogPayload["session_type"] = sSession->mSessionType; @@ -1407,6 +1424,7 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat mCallDialogPayload["session_name"] = sSession->mName; mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID; mCallDialogPayload["old_channel_name"] = sPreviousSessionlName; + mCallDialogPayload["old_session_type"] = sPreviousSessionType; mCallDialogPayload["state"] = new_state; mCallDialogPayload["disconnected_channel_name"] = sSession->mName; mCallDialogPayload["session_type"] = sSession->mSessionType; @@ -1421,6 +1439,11 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat } break; + case LLVoiceChannel::STATE_HUNG_UP: + // this state is coming before session is changed, so, put it into payload map + mCallDialogPayload["old_session_type"] = sSession->mSessionType; + break; + case LLVoiceChannel::STATE_CONNECTED : ocd = LLFloaterReg::findTypedInstance<LLOutgoingCallDialog>("outgoing_call", LLOutgoingCallDialog::OCD_KEY); if (ocd) @@ -1561,7 +1584,15 @@ void LLOutgoingCallDialog::show(const LLSD& key) // tell the user which voice channel they are leaving if (!mPayload["old_channel_name"].asString().empty()) { - childSetTextArg("leaving", "[CURRENT_CHAT]", mPayload["old_channel_name"].asString()); + bool was_avaline_call = LLIMModel::LLIMSession::AVALINE_SESSION == mPayload["old_session_type"].asInteger(); + + std::string old_caller_name = mPayload["old_channel_name"].asString(); + if (was_avaline_call) + { + old_caller_name = LLTextUtil::formatPhoneNumber(old_caller_name); + } + + childSetTextArg("leaving", "[CURRENT_CHAT]", old_caller_name); } else { @@ -1575,10 +1606,18 @@ void LLOutgoingCallDialog::show(const LLSD& key) } std::string callee_name = mPayload["session_name"].asString(); + + LLUUID session_id = mPayload["session_id"].asUUID(); + bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); + if (callee_name == "anonymous") { callee_name = getString("anonymous"); } + else if (!is_avatar) + { + callee_name = LLTextUtil::formatPhoneNumber(callee_name); + } setTitle(callee_name); @@ -1728,16 +1767,21 @@ BOOL LLIncomingCallDialog::postBuild() call_type = getString(mPayload["notify_box_type"]); } + + // check to see if this is an Avaline call + bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); + childSetVisible("Start IM", is_avatar); // no IM for avaline + if (caller_name == "anonymous") { caller_name = getString("anonymous"); } - - setTitle(caller_name + " " + call_type); + else if (!is_avatar) + { + caller_name = LLTextUtil::formatPhoneNumber(caller_name); + } - // check to see if this is an Avaline call - bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); - childSetVisible("Start IM", is_avatar); // no IM for avaline + setTitle(caller_name + " " + call_type); LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name"); caller_name_widget->setValue(caller_name + " " + call_type); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 11860d0efb..20d8e28392 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -475,6 +475,7 @@ public: protected: static std::string sPreviousSessionlName; + static LLIMModel::LLIMSession::SType sPreviousSessionType; static std::string sCurrentSessionlName; static LLIMModel::LLIMSession* sSession; static LLVoiceChannel::EState sOldState; 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 dae980feb1..5f9d479b3e 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. @@ -112,6 +116,7 @@ private: void onClickAddFriend(); void onClickViewProfile(); void onClickIM(); + void onClickCall(); void onClickTeleport(); void onClickInviteToGroup(); void onClickPay(); @@ -204,6 +209,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd) mCommitCallbackRegistrar.add("InspectAvatar.AddFriend", boost::bind(&LLInspectAvatar::onClickAddFriend, this)); mCommitCallbackRegistrar.add("InspectAvatar.IM", boost::bind(&LLInspectAvatar::onClickIM, this)); + mCommitCallbackRegistrar.add("InspectAvatar.Call", boost::bind(&LLInspectAvatar::onClickCall, this)); mCommitCallbackRegistrar.add("InspectAvatar.Teleport", boost::bind(&LLInspectAvatar::onClickTeleport, this)); mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup", boost::bind(&LLInspectAvatar::onClickInviteToGroup, this)); mCommitCallbackRegistrar.add("InspectAvatar.Pay", boost::bind(&LLInspectAvatar::onClickPay, this)); @@ -257,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 @@ -382,11 +386,25 @@ 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; - if (LLVoiceChannel::getCurrentVoiceChannel()) + if (LLVoiceChannel::getCurrentVoiceChannel() && + mAvatarID != gAgent.getID()) { LLUUID session_id = LLVoiceChannel::getCurrentVoiceChannel()->getSessionID(); @@ -497,42 +515,57 @@ void LLInspectAvatar::toggleSelectedVoice(bool enabled) void LLInspectAvatar::updateVolumeSlider() { - // By convention, we only display and toggle voice mutes, not all mutes - bool is_muted = LLMuteList::getInstance()-> - isMuted(mAvatarID, LLMute::flagVoiceChat); - bool voice_enabled = gVoiceClient->getVoiceEnabled(mAvatarID); - LLUICtrl* mute_btn = getChild<LLUICtrl>("mute_btn"); - mute_btn->setEnabled( voice_enabled ); - mute_btn->setValue( is_muted ); + bool voice_enabled = gVoiceClient->getVoiceEnabled(mAvatarID); - LLUICtrl* volume_slider = getChild<LLUICtrl>("volume_slider"); - volume_slider->setEnabled( voice_enabled && !is_muted ); - const F32 DEFAULT_VOLUME = 0.5f; - F32 volume; - if (is_muted) - { - // it's clearer to display their volume as zero - volume = 0.f; - } - else if (!voice_enabled) + // Do not display volume slider and mute button if it + // is ourself or we are not in a voice channel together + if (!voice_enabled || (mAvatarID == gAgent.getID())) { - // use nominal value rather than 0 - volume = DEFAULT_VOLUME; + getChild<LLUICtrl>("mute_btn")->setVisible(false); + getChild<LLUICtrl>("volume_slider")->setVisible(false); } - else + + else { - // actual volume - volume = gVoiceClient->getUserVolume(mAvatarID); + getChild<LLUICtrl>("mute_btn")->setVisible(true); + getChild<LLUICtrl>("volume_slider")->setVisible(true); + + // By convention, we only display and toggle voice mutes, not all mutes + bool is_muted = LLMuteList::getInstance()-> + isMuted(mAvatarID, LLMute::flagVoiceChat); - // *HACK: Voice client doesn't have any data until user actually - // says something. - if (volume == 0.f) + LLUICtrl* mute_btn = getChild<LLUICtrl>("mute_btn"); + + bool is_linden = LLStringUtil::endsWith(mAvatarName, " Linden"); + + mute_btn->setEnabled( !is_linden); + mute_btn->setValue( is_muted ); + + LLUICtrl* volume_slider = getChild<LLUICtrl>("volume_slider"); + volume_slider->setEnabled( !is_muted ); + const F32 DEFAULT_VOLUME = 0.5f; + F32 volume; + if (is_muted) { - volume = DEFAULT_VOLUME; + // it's clearer to display their volume as zero + volume = 0.f; } + else + { + // actual volume + volume = gVoiceClient->getUserVolume(mAvatarID); + + // *HACK: Voice client doesn't have any data until user actually + // says something. + if (volume == 0.f) + { + volume = DEFAULT_VOLUME; + } + } + volume_slider->setValue( (F64)volume ); } - volume_slider->setValue( (F64)volume ); + } void LLInspectAvatar::onClickMuteVolume() @@ -611,6 +644,12 @@ void LLInspectAvatar::onClickIM() closeFloater(); } +void LLInspectAvatar::onClickCall() +{ + LLAvatarActions::startCall(mAvatarID); + closeFloater(); +} + void LLInspectAvatar::onClickTeleport() { LLAvatarActions::offerTeleport(mAvatarID); 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..2a395d79dc 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2228,9 +2228,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 +2627,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/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 2ad82d3e8e..e7043b2d00 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -63,7 +63,7 @@ static const S32 RESIZE_BAR_THICKNESS = 3; LLNearbyChat::LLNearbyChat(const LLSD& key) - : LLDockableFloater(NULL, false, key) + : LLDockableFloater(NULL, false, false, key) ,mChatHistory(NULL) { @@ -137,7 +137,7 @@ std::string appendTime() time_t utc_time; utc_time = time_corrected(); std::string timeStr ="["+ LLTrans::getString("TimeHour")+"]:[" - +LLTrans::getString("TimeMin")+"] "; + +LLTrans::getString("TimeMin")+"]"; LLSD substitution; diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index dd66a6c507..fad0c6a91e 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -112,8 +112,8 @@ bool LLOfferHandler::processNotification(const LLSD& notify) LLHandlerUtil::spawnIMSession(name, from_id); } - if (notification->getPayload().has("SUPPRES_TOST") - && notification->getPayload()["SUPPRES_TOST"]) + if (notification->getPayload().has("SUPPRESS_TOAST") + && notification->getPayload()["SUPPRESS_TOAST"]) { LLNotificationsUtil::cancel(notification); } diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index fff2575893..94de17c17d 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -413,10 +413,13 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) if(tab_land->getDisplayChildren()) tab_land->changeOpenClose(tab_land->getDisplayChildren()); } + + LLGroupData agent_gdatap; + bool is_member = gAgent.getGroupData(mID,agent_gdatap); - tab_roles->canOpenClose(true); - tab_notices->canOpenClose(true); - tab_land->canOpenClose(true); + tab_roles->canOpenClose(is_member); + tab_notices->canOpenClose(is_member); + tab_land->canOpenClose(is_member); getChild<LLUICtrl>("group_name")->setVisible(true); getChild<LLUICtrl>("group_name_editor")->setVisible(false); diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index 279818d52f..b547997e7a 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -70,9 +70,9 @@ void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::E void LLPanelChatControlPanel::updateButtons(bool is_call_started) { - childSetVisible("end_call_btn", is_call_started); - childSetVisible("voice_ctrls_btn", is_call_started); - childSetVisible("call_btn", ! is_call_started); + childSetVisible("end_call_btn_panel", is_call_started); + childSetVisible("voice_ctrls_btn_panel", is_call_started); + childSetVisible("call_btn_panel", ! is_call_started); } LLPanelChatControlPanel::~LLPanelChatControlPanel() 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/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 751705dd57..ada65c98a4 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -411,6 +411,7 @@ BOOL LLPanelPicks::postBuild() LLUICtrl::CommitCallbackRegistry::ScopedRegistrar plus_registar; plus_registar.add("Picks.Plus.Action", boost::bind(&LLPanelPicks::onPlusMenuItemClicked, this, _2)); + mEnableCallbackRegistrar.add("Picks.Plus.Enable", boost::bind(&LLPanelPicks::isActionEnabled, this, _2)); mPlusMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); return TRUE; @@ -430,6 +431,18 @@ void LLPanelPicks::onPlusMenuItemClicked(const LLSD& param) } } +bool LLPanelPicks::isActionEnabled(const LLSD& userdata) const +{ + std::string command_name = userdata.asString(); + + if (command_name == "new_pick" && LLAgentPicksInfo::getInstance()->isPickLimitReached()) + { + return false; + } + + return true; +} + void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab) { if(!mPicksAccTab->getDisplayChildren()) @@ -652,7 +665,6 @@ void LLPanelPicks::updateButtons() if (getAvatarId() == gAgentID) { - childSetEnabled(XML_BTN_NEW, !LLAgentPicksInfo::getInstance()->isPickLimitReached()); childSetEnabled(XML_BTN_DELETE, has_selected); } diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 1b2e35ca46..3f757e482e 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -97,6 +97,7 @@ private: void onClickMap(); void onPlusMenuItemClicked(const LLSD& param); + bool isActionEnabled(const LLSD& userdata) const; void onListCommit(const LLFlatListView* f_list); void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab); diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 5cc9c1951b..4f539f404d 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -127,7 +127,11 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() : mScrollState = SCROLL_NONE; mPanelHandle.bind(this); + + mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout"); + mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime"); } + LLPanelPrimMediaControls::~LLPanelPrimMediaControls() { } @@ -172,6 +176,7 @@ BOOL LLPanelPrimMediaControls::postBuild() LLStringUtil::convertToF32(getString("zoom_near_padding"), mZoomNearPadding); LLStringUtil::convertToF32(getString("zoom_medium_padding"), mZoomMediumPadding); LLStringUtil::convertToF32(getString("zoom_far_padding"), mZoomFarPadding); + LLStringUtil::convertToS32(getString("top_world_view_avoid_zone"), mTopWorldViewAvoidZone); // These are currently removed...but getChild creates a "dummy" widget. // This class handles them missing. @@ -207,11 +212,9 @@ BOOL LLPanelPrimMediaControls::postBuild() } mMediaAddress->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this )); - mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout"); - mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime"); - + mCurrentZoom = ZOOM_NONE; - // clicks on HUD buttons do not remove keyboard focus from media + // clicks on buttons do not remove keyboard focus from media setIsChrome(TRUE); return TRUE; } @@ -373,8 +376,8 @@ void LLPanelPrimMediaControls::updateShape() mVolumeUpCtrl->setVisible(has_focus); mVolumeDownCtrl->setVisible(has_focus); mVolumeCtrl->setEnabled(has_focus); - mVolumeSliderCtrl->setEnabled(has_focus && mVolumeSliderVisible > 0); - mVolumeSliderCtrl->setVisible(has_focus && mVolumeSliderVisible > 0); + mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible()); + mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible()); mWhitelistIcon->setVisible(false); mSecureLockIcon->setVisible(false); @@ -627,36 +630,45 @@ void LLPanelPrimMediaControls::updateShape() update_min_max(min, max, LLVector3(screen_vert.v)); } + // convert screenspace bbox to pixels (in screen coords) + LLRect window_rect = gViewerWindow->getWorldViewRectScaled(); LLCoordGL screen_min; - screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (min.mV[VX] + 1.f) * 0.5f); - screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (min.mV[VY] + 1.f) * 0.5f); + screen_min.mX = llround((F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f); + screen_min.mY = llround((F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f); LLCoordGL screen_max; - screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (max.mV[VX] + 1.f) * 0.5f); - screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (max.mV[VY] + 1.f) * 0.5f); + screen_max.mX = llround((F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f); + screen_max.mY = llround((F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f); - // grow panel so that screenspace bounding box fits inside "media_region" element of HUD - LLRect media_controls_rect; - S32 volume_slider_height = mVolumeSliderCtrl->getRect().getHeight() - /*fudge*/ 2; - getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_controls_rect); - media_controls_rect.mLeft -= mMediaRegion->getRect().mLeft; - media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom - volume_slider_height; - media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop; - media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight; + // grow panel so that screenspace bounding box fits inside "media_region" element of panel + LLRect media_panel_rect; + // Get the height of the controls (less the volume slider) + S32 controls_height = mMediaControlsStack->getRect().getHeight() - mVolumeSliderCtrl->getRect().getHeight(); + getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_panel_rect); + media_panel_rect.mTop += controls_height; - // keep all parts of HUD on-screen - LLRect window_rect = getParent()->getLocalRect(); - media_controls_rect.intersectWith(window_rect); + // keep all parts of panel on-screen + // Area of the top of the world view to avoid putting the controls + window_rect.mTop -= mTopWorldViewAvoidZone; + // Don't include "spacing" bookends on left & right of the media controls + window_rect.mLeft -= mLeftBookend->getRect().getWidth(); + window_rect.mRight += mRightBookend->getRect().getWidth(); + // Don't include the volume slider + window_rect.mBottom -= mVolumeSliderCtrl->getRect().getHeight(); + media_panel_rect.intersectWith(window_rect); // clamp to minimum size, keeping rect inside window - S32 centerX = media_controls_rect.getCenterX(); - S32 centerY = media_controls_rect.getCenterY(); + S32 centerX = media_panel_rect.getCenterX(); + S32 centerY = media_panel_rect.getCenterY(); + // Shrink screen rect by min width and height, to ensure containment window_rect.stretch(-mMinWidth/2, -mMinHeight/2); window_rect.clampPointToRect(centerX, centerY); - media_controls_rect.setCenterAndSize(centerX, centerY, - llmax(mMinWidth, media_controls_rect.getWidth()), llmax(mMinHeight, media_controls_rect.getHeight())); + media_panel_rect.setCenterAndSize(centerX, centerY, + llmax(mMinWidth, media_panel_rect.getWidth()), + llmax(mMinHeight, media_panel_rect.getHeight())); - setShape(media_controls_rect, true); + // Finally set the size of the panel + setShape(media_panel_rect, true); // Test mouse position to see if the cursor is stationary LLCoordWindow cursor_pos_window; @@ -699,13 +711,13 @@ void LLPanelPrimMediaControls::updateShape() /*virtual*/ void LLPanelPrimMediaControls::draw() { - F32 alpha = 1.f; + F32 alpha = getDrawContext().mAlpha; if(mFadeTimer.getStarted()) { F32 time = mFadeTimer.getElapsedTimeF32(); - alpha = llmax(lerp(1.0, 0.0, time / mControlFadeTime), 0.0f); + alpha *= llmax(lerp(1.0, 0.0, time / mControlFadeTime), 0.0f); - if(mFadeTimer.getElapsedTimeF32() >= mControlFadeTime) + if(time >= mControlFadeTime) { if(mClearFaceOnFade) { @@ -726,27 +738,30 @@ void LLPanelPrimMediaControls::draw() // Build rect for icon area in coord system of this panel // Assumes layout_stack is a direct child of this panel mMediaControlsStack->updateLayout(); - LLRect icon_area = mMediaControlsStack->getRect(); - + + // adjust for layout stack spacing + S32 space = mMediaControlsStack->getPanelSpacing() + 1; + LLRect controls_bg_area = mMediaControlsStack->getRect(); + + controls_bg_area.mTop += space; + // adjust to ignore space from volume slider - icon_area.mTop -= mVolumeSliderCtrl->getRect().getHeight(); + controls_bg_area.mBottom += mVolumeSliderCtrl->getRect().getHeight(); // adjust to ignore space from left bookend padding - icon_area.mLeft += mLeftBookend->getRect().getWidth(); + controls_bg_area.mLeft += mLeftBookend->getRect().getWidth() - space; // ignore space from right bookend padding - icon_area.mRight -= mRightBookend->getRect().getWidth(); + controls_bg_area.mRight -= mRightBookend->getRect().getWidth() - space; // draw control background UI image - mBackgroundImage->draw( icon_area, UI_VERTEX_COLOR % alpha); + mBackgroundImage->draw( controls_bg_area, UI_VERTEX_COLOR % alpha); // draw volume slider background UI image if (mVolumeSliderCtrl->getVisible()) { - LLRect volume_slider_rect = mVolumeSliderCtrl->getRect(); - // For some reason the rect is not in the right place (??) - // This translates the bg to under the slider - volume_slider_rect.translate(mVolumeSliderCtrl->getParent()->getRect().mLeft, icon_area.getHeight()); + LLRect volume_slider_rect; + screenRectToLocal(mVolumeSliderCtrl->calcScreenRect(), &volume_slider_rect); mVolumeSliderBackgroundImage->draw(volume_slider_rect, UI_VERTEX_COLOR % alpha); } @@ -1259,6 +1274,11 @@ void LLPanelPrimMediaControls::onToggleMute() { media_impl->setVolume(0.0); } + else if (mVolumeSliderCtrl->getValueF32() == 0.0) + { + media_impl->setVolume(1.0); + mVolumeSliderCtrl->setValue(1.0); + } else { media_impl->setVolume(mVolumeSliderCtrl->getValueF32()); @@ -1271,8 +1291,12 @@ void LLPanelPrimMediaControls::showVolumeSlider() mVolumeSliderVisible++; } - void LLPanelPrimMediaControls::hideVolumeSlider() { mVolumeSliderVisible--; } + +bool LLPanelPrimMediaControls::shouldVolumeSliderBeVisible() +{ + return mVolumeSliderVisible > 0; +} diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h index d899ee4473..419f033628 100644 --- a/indra/newview/llpanelprimmediacontrols.h +++ b/indra/newview/llpanelprimmediacontrols.h @@ -111,6 +111,7 @@ private: void onToggleMute(); void showVolumeSlider(); void hideVolumeSlider(); + bool shouldVolumeSliderBeVisible(); static void onScrollUp(void* user_data); static void onScrollUpHeld(void* user_data); @@ -171,6 +172,7 @@ private: F32 mZoomNearPadding; F32 mZoomMediumPadding; F32 mZoomFarPadding; + S32 mTopWorldViewAvoidZone; LLUICtrl *mMediaPanelScroll; LLButton *mScrollUpCtrl; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 245f694ac6..65a3d9d41b 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -1045,4 +1045,11 @@ void LLTeleportHistoryPanel::onAccordionExpand(LLUICtrl* ctrl, const LLSD& param bool expanded = param.asBoolean(); // Save accordion tab state to restore it in refresh() setAccordionCollapsedByUser(ctrl, !expanded); + + // Reset selection upon accordion being collapsed + // to disable "Teleport" and "Map" buttons for hidden item. + if (!expanded && mLastSelectedFlatlList) + { + mLastSelectedFlatlList->resetSelection(); + } } diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 30b0075c4b..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; @@ -198,7 +205,7 @@ void LLSidepanelAppearance::onFilterEdit(const std::string& search_string) void LLSidepanelAppearance::onOpenOutfitButtonClicked() { - const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getCurrentOutfitLink(); + const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink(); if (!outfit_link) return; if (!outfit_link->getIsLinkType()) @@ -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,9 +318,10 @@ void LLSidepanelAppearance::updateVerbs() void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name) { + mOutfitDirtyTag->setVisible(LLAppearanceManager::getInstance()->isOutfitDirty()); if (name == "") { - const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getCurrentOutfitLink(); + const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink(); if (outfit_link) { const LLViewerInventoryCategory *cat = outfit_link->getLinkedCategory(); 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/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 814508daa9..94fe95d215 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -157,11 +157,12 @@ void LLSidepanelItemInfo::reset() void LLSidepanelItemInfo::refresh() { - LLInventoryItem* item = findItem(); + LLViewerInventoryItem* item = findItem(); if(item) { refreshFromItem(item); updateVerbs(); + return; } else { @@ -170,11 +171,8 @@ void LLSidepanelItemInfo::refresh() setIsEditing(FALSE); } } - - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - bool is_editable = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id); - if (!getIsEditing() || !is_editable) + if (!getIsEditing()) { const std::string no_item_names[]={ "LabelItemName", @@ -212,7 +210,7 @@ void LLSidepanelItemInfo::refresh() } } - if (!is_editable) + if (!item) { const std::string no_edit_mode_names[]={ "BtnCreator", @@ -227,24 +225,26 @@ void LLSidepanelItemInfo::refresh() updateVerbs(); } -void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item) +void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) { //////////////////////// // PERMISSIONS LOOKUP // //////////////////////// // do not enable the UI for incomplete items. - LLViewerInventoryItem* i = (LLViewerInventoryItem*)item; - BOOL is_complete = i->isComplete(); - const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(i->getInventoryType()); - const BOOL is_calling_card = (i->getInventoryType() == LLInventoryType::IT_CALLINGCARD); + BOOL is_complete = item->isComplete(); + const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(item->getInventoryType()); + const BOOL is_calling_card = (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD); const LLPermissions& perm = item->getPermissions(); const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm, GP_OBJECT_MANIPULATE); const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm, GP_OBJECT_SET_SALE) && !cannot_restrict_permissions; - const BOOL is_link = i->getIsLinkType(); + const BOOL is_link = item->getIsLinkType(); + + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + bool not_in_trash = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id); // You need permission to modify the object to modify an inventory // item in it. @@ -261,7 +261,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item) ////////////////////// BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE) - && is_obj_modify && is_complete; + && is_obj_modify && is_complete && not_in_trash; childSetEnabled("LabelItemNameTitle",TRUE); childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards @@ -338,6 +338,64 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item) LLStringUtil::format (timeStr, substitution); childSetText ("LabelAcquiredDate", timeStr); } + + ///////////////////////////////////// + // PERMISSIONS AND SALE ITEM HIDING + ///////////////////////////////////// + + const std::string perm_and_sale_items[]={ + "perms_inv", + "OwnerLabel", + "perm_modify", + "CheckOwnerModify", + "CheckOwnerCopy", + "CheckOwnerTransfer", + "GroupLabel", + "CheckShareWithGroup", + "AnyoneLabel", + "CheckEveryoneCopy", + "NextOwnerLabel", + "CheckNextOwnerModify", + "CheckNextOwnerCopy", + "CheckNextOwnerTransfer", + "CheckPurchase", + "SaleLabel", + "RadioSaleType", + "combobox sale copy", + "Edit Cost", + "TextPrice" + }; + + const std::string debug_items[]={ + "BaseMaskDebug", + "OwnerMaskDebug", + "GroupMaskDebug", + "EveryoneMaskDebug", + "NextMaskDebug" + }; + + // Hide permissions checkboxes and labels and for sale info if in the trash + // or ui elements don't apply to these objects and return from function + if (!not_in_trash || cannot_restrict_permissions) + { + for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t) + { + childSetVisible(perm_and_sale_items[t],false); + } + + for(size_t t=0; t<LL_ARRAY_SIZE(debug_items); ++t) + { + childSetVisible(debug_items[t],false); + } + return; + } + else // Make sure perms and sale ui elements are visible + { + for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t) + { + childSetVisible(perm_and_sale_items[t],true); + } + } /////////////////////// // OWNER PERMISSIONS // @@ -541,7 +599,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item) void LLSidepanelItemInfo::onClickCreator() { - LLInventoryItem* item = findItem(); + LLViewerInventoryItem* item = findItem(); if(!item) return; if(!item->getCreatorUUID().isNull()) { @@ -552,7 +610,7 @@ void LLSidepanelItemInfo::onClickCreator() // static void LLSidepanelItemInfo::onClickOwner() { - LLInventoryItem* item = findItem(); + LLViewerInventoryItem* item = findItem(); if(!item) return; if(item->getPermissions().isGroupOwned()) { @@ -568,7 +626,7 @@ void LLSidepanelItemInfo::onClickOwner() void LLSidepanelItemInfo::onCommitName() { //llinfos << "LLSidepanelItemInfo::onCommitName()" << llendl; - LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem(); + LLViewerInventoryItem* item = findItem(); if(!item) { return; @@ -604,7 +662,7 @@ void LLSidepanelItemInfo::onCommitName() void LLSidepanelItemInfo::onCommitDescription() { //llinfos << "LLSidepanelItemInfo::onCommitDescription()" << llendl; - LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem(); + LLViewerInventoryItem* item = findItem(); if(!item) return; LLLineEditor* labelItemDesc = getChild<LLLineEditor>("LabelItemDesc"); @@ -642,7 +700,7 @@ void LLSidepanelItemInfo::onCommitDescription() void LLSidepanelItemInfo::onCommitPermissions() { //llinfos << "LLSidepanelItemInfo::onCommitPermissions()" << llendl; - LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem(); + LLViewerInventoryItem* item = findItem(); if(!item) return; LLPermissions perm(item->getPermissions()); @@ -751,7 +809,7 @@ void LLSidepanelItemInfo::onCommitSaleType() void LLSidepanelItemInfo::updateSaleInfo() { - LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem(); + LLViewerInventoryItem* item = findItem(); if(!item) return; LLSaleInfo sale_info(item->getSaleInfo()); if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE)) @@ -851,9 +909,9 @@ void LLSidepanelItemInfo::updateSaleInfo() } } -LLInventoryItem* LLSidepanelItemInfo::findItem() const +LLViewerInventoryItem* LLSidepanelItemInfo::findItem() const { - LLInventoryItem* item = NULL; + LLViewerInventoryItem* item = NULL; if(mObjectID.isNull()) { // it is in agent inventory @@ -864,7 +922,7 @@ LLInventoryItem* LLSidepanelItemInfo::findItem() const LLViewerObject* object = gObjectList.findObject(mObjectID); if(object) { - item = (LLInventoryItem*)object->getInventoryObject(mItemID); + item = static_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemID)); } } return item; diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h index 21002327bc..e6dbf400ee 100644 --- a/indra/newview/llsidepaneliteminfo.h +++ b/indra/newview/llsidepaneliteminfo.h @@ -41,7 +41,7 @@ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLButton; -class LLInventoryItem; +class LLViewerInventoryItem; class LLItemPropertiesObserver; class LLViewerObject; class LLPermissions; @@ -63,10 +63,10 @@ protected: /*virtual*/ void refresh(); /*virtual*/ void save(); - LLInventoryItem* findItem() const; + LLViewerInventoryItem* findItem() const; LLViewerObject* findObject() const; - void refreshFromItem(LLInventoryItem* item); + void refreshFromItem(LLViewerInventoryItem* item); private: LLUUID mItemID; // inventory UUID for the inventory item. 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/llstartup.cpp b/indra/newview/llstartup.cpp index eb2275bff0..99fa271b78 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1309,6 +1309,7 @@ bool idle_startup() // Move the progress view in front of the UI gViewerWindow->moveProgressViewToFront(); + // direct logging to the debug console's line buffer LLError::logToFixedBuffer(gDebugView->mDebugConsolep); // set initial visibility of debug console diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index a46ca1f8ac..44cf82540a 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -349,7 +349,6 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID& } // Initialize chiclet. - mChiclet->setRect(LLRect(5, 28, 30, 3)); // *HACK: workaround for (EXT-3599) mChiclet->setChicletSizeChangedCallback(boost::bind(&LLIMWellWindow::RowPanel::onChicletSizeChanged, this, mChiclet, _2)); mChiclet->enableCounterControl(true); mChiclet->setCounter(chicletCounter); @@ -410,6 +409,11 @@ BOOL LLIMWellWindow::RowPanel::handleMouseDown(S32 x, S32 y, MASK mask) return LLPanel::handleMouseDown(x, y, mask); } +// virtual +BOOL LLIMWellWindow::RowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + return mChiclet->handleRightMouseDown(x, y, mask); +} /************************************************************************/ /* ObjectRowPanel implementation */ /************************************************************************/ @@ -553,6 +557,12 @@ BOOL LLIMWellWindow::ObjectRowPanel::handleMouseDown(S32 x, S32 y, MASK mask) return LLPanel::handleMouseDown(x, y, mask); } +// virtual +BOOL LLIMWellWindow::ObjectRowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + return mChiclet->handleRightMouseDown(x, y, mask); +} + /************************************************************************/ /* LLNotificationWellWindow implementation */ /************************************************************************/ diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h index 833e4dd504..ded3abcbf4 100644 --- a/indra/newview/llsyswellwindow.h +++ b/indra/newview/llsyswellwindow.h @@ -217,6 +217,8 @@ private: void onMouseEnter(S32 x, S32 y, MASK mask); void onMouseLeave(S32 x, S32 y, MASK mask); BOOL handleMouseDown(S32 x, S32 y, MASK mask); + BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + private: static const S32 CHICLET_HPAD = 10; void onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param); @@ -245,6 +247,8 @@ private: /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask); /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + private: void onClosePanel(); static EObjectType getObjectType(const LLNotificationPtr& notification); diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 25e5e23e6f..a5ddb0a620 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -1242,11 +1242,11 @@ void LLTextureCtrl::draw() (mTexturep->getDiscardLevel() != 1) && (mTexturep->getDiscardLevel() != 0)) { - LLFontGL* font = LLFontGL::getFontSansSerifBig(); + LLFontGL* font = LLFontGL::getFontSansSerif(); font->renderUTF8( mLoadingPlaceholderString, 0, - llfloor(interior.mLeft+10), - llfloor(interior.mTop-20), + llfloor(interior.mLeft+3), + llfloor(interior.mTop-25), LLColor4::white, LLFontGL::LEFT, LLFontGL::BASELINE, diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 96d1624cd4..110d158e2d 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -266,6 +266,8 @@ void LLToast::onMouseEnter(S32 x, S32 y, MASK mask) { mOnToastHoverSignal(this, MOUSE_ENTER); + setBackgroundOpaque(TRUE); + //toasts fading is management by Screen Channel sendChildToFront(mHideBtn); diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index b1d09eccba..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" @@ -101,16 +102,13 @@ BOOL LLToolPie::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktyp BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) { //left mouse down always picks transparent - gViewerWindow->pickAsync(x, y, mask, leftMouseCallback, TRUE); + mPick = gViewerWindow->pickImmediate(x, y, TRUE); + mPick.mKeyMask = mask; mGrabMouseButtonDown = TRUE; - return TRUE; -} + + pickLeftMouseDownCallback(); -// static -void LLToolPie::leftMouseCallback(const LLPickInfo& pick_info) -{ - LLToolPie::getInstance()->mPick = pick_info; - LLToolPie::getInstance()->pickLeftMouseDownCallback(); + return TRUE; } // Spawn context menus on right mouse down so you can drag over and select @@ -118,8 +116,13 @@ void LLToolPie::leftMouseCallback(const LLPickInfo& pick_info) BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask) { // don't pick transparent so users can't "pay" transparent objects - gViewerWindow->pickAsync(x, y, mask, rightMouseCallback, FALSE); + mPick = gViewerWindow->pickImmediate(x, y, FALSE); + mPick.mKeyMask = mask; + // claim not handled so UI focus stays same + + pickRightMouseDownCallback(); + return FALSE; } @@ -134,13 +137,6 @@ BOOL LLToolPie::handleScrollWheel(S32 x, S32 y, S32 clicks) return LLViewerMediaFocus::getInstance()->handleScrollWheel(x, y, clicks); } -// static -void LLToolPie::rightMouseCallback(const LLPickInfo& pick_info) -{ - LLToolPie::getInstance()->mPick = pick_info; - LLToolPie::getInstance()->pickRightMouseDownCallback(); -} - // True if you selected an object. BOOL LLToolPie::pickLeftMouseDownCallback() { @@ -634,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; @@ -733,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); @@ -823,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); @@ -832,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/lltoolpie.h b/indra/newview/lltoolpie.h index 3660c68552..5f0e28fa95 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -71,9 +71,6 @@ public: LLObjectSelection* getLeftClickSelection() { return (LLObjectSelection*)mLeftClickSelection; } void resetSelection(); - static void leftMouseCallback(const LLPickInfo& pick_info); - static void rightMouseCallback(const LLPickInfo& pick_info); - static void selectionPropertiesReceived(); static void showAvatarInspector(const LLUUID& avatar_id); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index bf96472e7e..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()) @@ -987,7 +990,7 @@ void LLViewerMediaImpl::emitEvent(LLPluginClassMedia* plugin, LLViewerMediaObser bool LLViewerMediaImpl::initializeMedia(const std::string& mime_type) { bool mimeTypeChanged = (mMimeType != mime_type); - bool pluginChanged = (LLMIMETypes::implType(mMimeType) != LLMIMETypes::implType(mime_type)); + bool pluginChanged = (LLMIMETypes::implType(mCurrentMimeType) != LLMIMETypes::implType(mime_type)); if(!mMediaSource || pluginChanged) { @@ -1127,6 +1130,9 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type) // If we got here, we want to ignore previous init failures. mMediaSourceFailed = false; + // Save the MIME type that really caused the plugin to load + mCurrentMimeType = mMimeType; + LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight); if (media_source) @@ -1563,6 +1569,7 @@ void LLViewerMediaImpl::unload() mMediaURL.clear(); mMimeType.clear(); mCurrentMediaURL.clear(); + mCurrentMimeType.clear(); } ////////////////////////////////////////////////////////////////////////////////////////// @@ -2123,7 +2130,7 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla // TODO: may want a different message for this case? LLSD args; - args["PLUGIN"] = LLMIMETypes::implType(mMimeType); + args["PLUGIN"] = LLMIMETypes::implType(mCurrentMimeType); LLNotificationsUtil::add("MediaPluginFailed", args); } break; @@ -2137,7 +2144,7 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla resetPreviousMediaState(); LLSD args; - args["PLUGIN"] = LLMIMETypes::implType(mMimeType); + args["PLUGIN"] = LLMIMETypes::implType(mCurrentMimeType); // SJB: This is getting called every frame if the plugin fails to load, continuously respawining the alert! //LLNotificationsUtil::add("MediaPluginFailed", args); } @@ -2537,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 28fb379960..5e4dd8ff30 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); @@ -187,6 +183,7 @@ public: std::string getMediaURL() const { return mMediaURL; } std::string getCurrentMediaURL(); std::string getHomeURL() { return mHomeURL; } + std::string getMediaEntryURL() { return mMediaEntryURL; } void setHomeURL(const std::string& home_url) { mHomeURL = home_url; }; void clearCache(); std::string getMimeType() { return mMimeType; } @@ -323,6 +320,7 @@ public: std::string mHomeURL; std::string mMimeType; std::string mCurrentMediaURL; // The most current media url from the plugin (via the "location changed" or "navigate complete" events). + std::string mCurrentMimeType; // The MIME type that caused the currently loaded plugin to be loaded. S32 mLastMouseX; // save the last mouse coord we get, so when we lose capture we can simulate a mouseup at that point. S32 mLastMouseY; S32 mMediaWidth; diff --git a/indra/newview/llviewermedia_streamingaudio.cpp b/indra/newview/llviewermedia_streamingaudio.cpp index e9293ac5a4..67b051e536 100644 --- a/indra/newview/llviewermedia_streamingaudio.cpp +++ b/indra/newview/llviewermedia_streamingaudio.cpp @@ -62,7 +62,7 @@ void LLStreamingAudio_MediaPlugins::start(const std::string& url) if (!mMediaPlugin) // lazy-init the underlying media plugin { mMediaPlugin = initializeMedia("audio/mpeg"); // assumes that whatever media implementation supports mp3 also supports vorbis. - llinfos << "steaming audio mMediaPlugin is now " << mMediaPlugin << llendl; + llinfos << "streaming audio mMediaPlugin is now " << mMediaPlugin << llendl; } if(!mMediaPlugin) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 40c74ccf82..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()); @@ -2466,7 +2457,7 @@ class LLViewJoystickFlycam : public view_listener_t class LLViewCheckJoystickFlycam : public view_listener_t { bool handleEvent(const LLSD& userdata) - { + { bool new_value = LLViewerJoystick::getInstance()->getOverrideCamera(); return new_value; } @@ -3704,6 +3695,7 @@ void reset_view_final( BOOL proceed ) } gAgent.resetView(TRUE, TRUE); + gAgent.setLookAt(LOOKAT_TARGET_CLEAR); } class LLViewLookAtLastChatter : public view_listener_t @@ -5856,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(); @@ -5866,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(); @@ -5883,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 @@ -5897,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 diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 6f9e551649..3362142807 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2644,9 +2644,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) LLNotificationsUI::LLNotificationManager::instance().onChat( chat, LLNotificationsUI::NT_NEARBYCHAT); - // adding temporarily so that communications window chat bar - // works until the new chat window is ready - chat.mText = from_name + ": " + chat.mText; LLFloaterChat::addChat(chat, FALSE, FALSE); } else diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index 90a7ee98b9..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)); @@ -182,7 +185,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel) if (!parcel) return; - if (!gSavedSettings.getBOOL("AudioSteamingMedia") || !gSavedSettings.getBOOL("AudioStreamingVideo")) + if (!gSavedSettings.getBOOL("AudioStreamingMedia") || !gSavedSettings.getBOOL("AudioStreamingVideo")) return; std::string media_url = parcel->getMediaURL(); @@ -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); - if(!gSavedSettings.getBOOL("AudioSteamingMedia")) - gSavedSettings.setBOOL("AudioSteamingMedia", 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/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index be68a2ef42..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("AudioSteamingMedia")) - { - // 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 b1ad01f54f..f825eaa8ab 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -2767,7 +2767,7 @@ void LLViewerMediaTexture::updateClass() #if 0 //force to play media. - gSavedSettings.setBOOL("AudioSteamingMedia", true) ; + gSavedSettings.setBOOL("AudioStreamingMedia", true) ; gSavedSettings.setBOOL("AudioStreamingVideo", true) ; #endif 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/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 18cdd23ed9..917d69fe16 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -278,10 +278,14 @@ void LLVoiceChannel::deactivate() if (callStarted()) { setState(STATE_HUNG_UP); - // mute the microphone if required when returning to the proximal channel - if (gSavedSettings.getBOOL("AutoDisengageMic") && sCurrentVoiceChannel == this) + + //Default mic is OFF when leaving voice calls + if (gSavedSettings.getBOOL("AutoDisengageMic") && + sCurrentVoiceChannel == this && + gVoiceClient->getUserPTTState()) { gSavedSettings.setBOOL("PTTCurrentlyEnabled", true); + gVoiceClient->inputUserControlState(true); } } @@ -498,6 +502,13 @@ void LLVoiceChannelGroup::activate() LLRecentPeople::instance().add(buddy_id); } #endif + + //Mic default state is OFF on initiating/joining Ad-Hoc/Group calls + if (gVoiceClient->getUserPTTState() && gVoiceClient->getPTTIsToggle()) + { + gVoiceClient->inputUserControlState(true); + } + } } @@ -811,6 +822,12 @@ void LLVoiceChannelP2P::activate() // Add the party to the list of people with which we've recently interacted. LLRecentPeople::instance().add(mOtherUserID); + + //Default mic is ON on initiating/joining P2P calls + if (!gVoiceClient->getUserPTTState() && gVoiceClient->getPTTIsToggle()) + { + gVoiceClient->inputUserControlState(true); + } } } diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index c2d26a1971..423c46e14c 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -4445,7 +4445,7 @@ void LLVoiceClient::participantUpdatedEvent( participant->mVolume = volume; - // *HACH: mantipov: added while working on EXT-3544 + // *HACK: mantipov: added while working on EXT-3544 /* Sometimes LLVoiceClient::participantUpdatedEvent callback is called BEFORE LLViewerChatterBoxSessionAgentListUpdates::post() sometimes AFTER. @@ -4462,7 +4462,9 @@ void LLVoiceClient::participantUpdatedEvent( in LLCallFloater::draw() */ LLVoiceChannel* voice_cnl = LLVoiceChannel::getCurrentVoiceChannel(); - if (voice_cnl) + + // ignore session ID of local chat + if (voice_cnl && voice_cnl->getSessionID().notNull()) { LLSpeakerMgr* speaker_manager = LLIMModel::getInstance()->getSpeakerManager(voice_cnl->getSessionID()); if (speaker_manager) @@ -5883,6 +5885,10 @@ void LLVoiceClient::setPTTIsToggle(bool PTTIsToggle) mPTTIsToggle = PTTIsToggle; } +bool LLVoiceClient::getPTTIsToggle() +{ + return mPTTIsToggle; +} void LLVoiceClient::setPTTKey(std::string &key) { diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 347fae6156..724179847d 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -193,6 +193,7 @@ static void updatePosition(void); static bool voiceEnabled(); void setUsePTT(bool usePTT); void setPTTIsToggle(bool PTTIsToggle); + bool getPTTIsToggle(); void setPTTKey(std::string &key); void setEarLocation(S32 loc); void setVoiceVolume(F32 volume); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 70bfc67523..55609621b3 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2689,13 +2689,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/navbar/NavBar_BG.png b/indra/newview/skins/default/textures/navbar/NavBar_BG.png Binary files differindex 1df61751a8..38eea783e6 100644 --- a/indra/newview/skins/default/textures/navbar/NavBar_BG.png +++ b/indra/newview/skins/default/textures/navbar/NavBar_BG.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index ad598f25f3..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" /> diff --git a/indra/newview/skins/default/textures/windows/Inspector_I.png b/indra/newview/skins/default/textures/windows/Inspector_I.png Binary files differnew file mode 100644 index 0000000000..b4875fd638 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Inspector_I.png 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 90105f92fd..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,21 +10,17 @@ 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" - pad_right="10" - pad_left="10" top="0" use_ellipses="true" width="140" /> diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml index 53ae24fe3f..d007ceff98 100644 --- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml @@ -287,7 +287,7 @@ <button follows="left|top" height="23" - label="Ok" + label="OK" layout="topleft" left="65" name="apply" diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml index 4380ff8f4b..fbecebc363 100644 --- a/indra/newview/skins/default/xui/en/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml @@ -186,8 +186,8 @@ <button follows="right|bottom" height="20" - label="Ok" - label_selected="Ok" + label="OK" + label_selected="OK" layout="topleft" right="-120" top_delta="9" 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_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 57e92cdeec..243b63db00 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -14,8 +14,8 @@ visible="true" width="360" can_resize="true" - min_width="360" - min_height="350"> + min_width="250" + min_height="190"> <layout_stack follows="all" height="320" 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_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml index 454b1c43b2..22b0a1783f 100644 --- a/indra/newview/skins/default/xui/en/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/en/floater_mute_object.xml @@ -47,7 +47,7 @@ <button follows="bottom|left" height="23" - label="Ok" + label="OK" layout="topleft" left="155" name="OK" 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_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 695021f755..cad7d72ed7 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -131,8 +131,8 @@ <button follows="right|bottom" height="20" - label="Ok" - label_selected="Ok" + label="OK" + label_selected="OK" layout="topleft" right="-120" name="Select" 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 1fa613468f..a4ef807f06 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -30,7 +30,7 @@ </string> <string name="no_one_near"> - No one near + No one near has voice enabled </string> <string name="max_visible_items"> diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml index 2f2964c42b..a666b8a427 100644 --- a/indra/newview/skins/default/xui/en/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml @@ -65,7 +65,7 @@ <slider follows="top|left" height="23" - increment="0.05" + increment="0.01" left="1" max_val="0.95" min_val="0.05" diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml index 01df208850..dde92f23b6 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml @@ -30,6 +30,8 @@ label="Call" enabled="true" name="call"> + <menu_item_call.on_click + function="InspectAvatar.Call"/> </menu_item_call> <menu_item_call label="Teleport" diff --git a/indra/newview/skins/default/xui/en/menu_picks_plus.xml b/indra/newview/skins/default/xui/en/menu_picks_plus.xml index 3065239615..f3b207e36c 100644 --- a/indra/newview/skins/default/xui/en/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/en/menu_picks_plus.xml @@ -11,6 +11,9 @@ <menu_item_call.on_click function="Picks.Plus.Action" userdata="new_pick" /> + <menu_item_call.on_enable + function="Picks.Plus.Enable" + userdata="new_pick" /> </menu_item_call> <menu_item_call name="create_classified" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 58e9d39807..fa7e3e86a3 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -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/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 95a7374e7b..410c398ea5 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -157,7 +157,7 @@ No tutorial is currently available. An error occurred while updating [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer. <usetemplate name="okbutton" - yestext="Ok"/> + yestext="OK"/> </notification> <notification @@ -169,7 +169,7 @@ Could not connect to the [SECOND_LIFE_GRID]. Make sure your Internet connection is working properly. <usetemplate name="okbutton" - yestext="Ok"/> + yestext="OK"/> </notification> <notification @@ -179,7 +179,7 @@ Make sure your Internet connection is working properly. Message Template [PATH] not found. <usetemplate name="okbutton" - yestext="Ok"/> + yestext="OK"/> </notification> <notification @@ -5087,6 +5087,14 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [O <notification icon="notify.tga" + name="TeleportOfferSent" + type="offer"> + Teleport offer sent to [TO_NAME] + </notification> + + + <notification + icon="notify.tga" name="GotoURL" type="notify"> [MESSAGE] @@ -5785,7 +5793,7 @@ Are you sure you want to close all IMs? <usetemplate name="okcancelignore" notext="Cancel" - yestext="Ok"/> + yestext="OK"/> </notification> <notification icon="notifytip.tga" 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 f3a2297151..6c54532a3a 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 @@ -5,56 +5,94 @@ height="215" name="panel_im_control_panel" width="180"> - <avatar_list - color="DkGray2" + <layout_stack + mouse_opaque="false" + border_size="0" + clip="false" follows="all" - height="130" - ignore_online_status="true" + height="215" layout="topleft" left="3" - name="speakers_list" - opaque="false" - show_info_btn="false" - show_profile_btn="false" - show_speaking_indicator="false" - top="10" - width="180" /> - <panel - background_visible="true" - bg_alpha_color="DkGray2" - border="false" - bottom="1" - follows="left|right|bottom" - height="70" - left="0" - left_pad="0" - name="panel_call_buttons" - top_pad="0" - width="180"> - <button - bottom="10" - follows="all" - height="20" - label="Call" - left_delta="10" - name="call_btn" - width="160" /> - <button - bottom="40" - follows="all" - height="20" - label="Leave Call" - name="end_call_btn" - visible="false" - /> - <button - follows="all" - bottom="10" - height="20" - label="Voice Controls" - name="voice_ctrls_btn" - use_ellipses="true" - visible="false" - /> - </panel> + name="vertical_stack" + orientation="vertical" + top="0" + width="177"> + <layout_panel + auto_resize="true" + follows="top|left" + height="130" + layout="topleft" + min_height="0" + mouse_opaque="false" + width="180" + top="0" + name="speakers_list_panel" + user_resize="false"> + <avatar_list + color="DkGray2" + follows="all" + height="130" + ignore_online_status="true" + layout="topleft" + name="speakers_list" + opaque="false" + show_info_btn="false" + show_profile_btn="false" + show_speaking_indicator="false" + width="180" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="160" + name="call_btn_panel" + user_resize="false" + visible="false"> + <button + follows="all" + height="20" + label="Call" + name="call_btn" + width="160" + top="5" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="160" + name="end_call_btn_panel" + user_resize="false" + visible="false"> + <button + follows="all" + height="20" + label="Leave Call" + name="end_call_btn" + top="5"/> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="160" + name="voice_ctrls_btn_panel" + user_resize="false" + visible="false"> + <button + follows="all" + height="20" + label="Voice Controls" + name="voice_ctrls_btn" + top="5" + use_ellipses="true" /> + </layout_panel> + </layout_stack> </panel> 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 86b30ebfce..4073ef158b 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 @@ -5,66 +5,110 @@ height="238" name="panel_im_control_panel" width="180"> - <avatar_list - color="DkGray2" + <layout_stack + mouse_opaque="false" + border_size="0" + clip="false" follows="all" - height="100" - ignore_online_status="true" + height="238" layout="topleft" - left="3" - name="speakers_list" - opaque="false" - show_info_btn="false" - show_profile_btn="false" - show_speaking_indicator="false" - top="10" - width="180" /> - <button - bottom_pad="0" - follows="left|right|bottom" - height="23" - label="Group Profile" - left_delta="10" - name="group_info_btn" - use_ellipses="true" - width="160" /> - <panel - background_visible="true" - bg_alpha_color="DkGray2" - border="false" - follows="left|right|bottom" - height="70" - left="0" - left_pad="0" - name="panel_call_buttons" - top_pad="0" - width="180"> - <button - bottom="10" - follows="all" - height="23" - label="Call Group" - left_delta="10" - name="call_btn" - use_ellipses="true" - width="160" /> - <button - bottom="40" - follows="all" - height="23" - label="Leave Call" - name="end_call_btn" - use_ellipses="true" - visible="false" - /> - <button - bottom="10" - follows="all" - height="23" - label="Open Voice Controls" - name="voice_ctrls_btn" - use_ellipses="true" - visible="false" - /> - </panel> + left="5" + name="vertical_stack" + orientation="vertical" + top="0" + width="175"> + <layout_panel + auto_resize="true" + follows="top|left" + height="100" + layout="topleft" + min_height="0" + mouse_opaque="false" + width="180" + top="0" + name="speakers_list_panel" + user_resize="false"> + <avatar_list + color="DkGray2" + follows="all" + height="100" + ignore_online_status="true" + layout="topleft" + name="speakers_list" + opaque="false" + show_info_btn="false" + show_profile_btn="false" + show_speaking_indicator="false" + width="180" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="28" + layout="topleft" + min_height="28" + width="160" + name="group_info_btn_panel" + user_resize="false"> + <button + follows="left|right|bottom" + height="23" + label="Group Profile" + name="group_info_btn" + use_ellipses="true" + top="5" + width="160" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="28" + layout="topleft" + min_height="28" + width="160" + name="call_btn_panel" + user_resize="false"> + <button + follows="all" + height="23" + label="Call Group" + name="call_btn" + use_ellipses="true" + width="160" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="28" + layout="topleft" + min_height="28" + width="160" + name="end_call_btn_panel" + user_resize="false" + visible="false"> + <button + follows="all" + height="23" + label="Leave Call" + name="end_call_btn" + use_ellipses="true" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="28" + layout="topleft" + min_height="28" + width="160" + name="voice_ctrls_btn_panel" + user_resize="false" + visible="false"> + <button + follows="all" + height="23" + label="Open Voice Controls" + name="voice_ctrls_btn" + use_ellipses="true" /> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml index 9b0b81cd0a..65b2e81d50 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml @@ -93,7 +93,7 @@ bottom="85" follows="bottom" height="20" - label="Ok" + label="OK" layout="topleft" right="-10" name="btn_ok" diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 30e652befd..2e3d5a7320 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -6,84 +6,161 @@ width="110"> <avatar_icon follows="left|top" - height="100" + height="105" left_delta="5" name="avatar_icon" top="-5" - width="100"/> + width="105"/> <text follows="top|left|right" font="SansSerifLarge" - height="22" + height="19" layout="topleft" name="avatar_name" use_ellipses="true" value="Unknown" - width="100" /> - <button - follows="left|top|right" - height="20" - label="Profile" - name="view_profile_btn" - width="100" /> - <button - follows="left|top|right" - height="20" - label="Add Friend" - name="add_friend_btn" - width="100" /> - <button - follows="left|top|right" - height="20" - label="Teleport" - name="teleport_btn" - width="100" /> - <button - follows="left|top|right" - height="20" - label="Share" - name="share_btn" - width="100" /> - <!--Removing pay button to save space - will update spec - verified by Erica/Steve --> - <!-- <button - follows="left|top|right" - height="20" - label="Pay" - name="pay_btn" - width="100" />--> - <panel - background_visible="true" - bg_alpha_color="DkGray2" - border="false" - top_pad="10" - follows="left|bottom|right" - height="70" - left="1" - name="panel_call_buttons" - width="109"> - <button - bottom="10" - follows="left|top|right" - height="20" - label="Call" - left_delta="5" - name="call_btn" - width="100" /> - <button - bottom="35" - follows="left|top|right" + width="110" /> + <layout_stack + mouse_opaque="false" + border_size="0" + clip="false" + follows="all" + height="168" + layout="topleft" + left="5" + name="button_stack" + orientation="vertical" + top_pad="0" + width="105"> + <layout_panel + mouse_opaque="false" + auto_resize="true" + follows="top|left" + height="0" + layout="topleft" + left="2" + min_height="0" + width="100" + top="0" + name="spacer" + user_resize="false" /> + <layout_panel + auto_resize="false" + follows="top|left|right" height="20" - label="Leave Call" - name="end_call_btn" - visible="false" - width="100" /> + layout="topleft" + min_height="20" + width="100" + name="view_profile_btn_panel" + user_resize="false"> + <button + follows="left|top|right" + height="20" + label="Profile" + name="view_profile_btn" + top="0" + width="100" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="100" + name="add_friend_btn_panel" + user_resize="false"> + <button + follows="left|top|right" + height="20" + label="Add Friend" + name="add_friend_btn" + top="5" + width="100" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="100" + name="teleport_btn_panel" + user_resize="false"> <button - bottom="10" - follows="left|top|right" - height="20" - label="Voice Controls" - name="voice_ctrls_btn" - visible="false" - width="100" /> - </panel> + auto_resize="false" + follows="left|top|right" + height="20" + label="Teleport" + name="teleport_btn" + width="100" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="100" + name="share_btn_panel" + user_resize="false"> + <button + auto_resize="true" + follows="left|top|right" + height="20" + label="Share" + name="share_btn" + width="100" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="100" + name="call_btn_panel" + user_resize="false"> + <button + follows="left|top|right" + height="20" + label="Call" + name="call_btn" + width="100" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="100" + name="end_call_btn_panel" + user_resize="false" + visible="false"> + <button + follows="left|top|right" + height="20" + label="Leave Call" + name="end_call_btn" + width="100" /> + </layout_panel> + <layout_panel + auto_resize="false" + follows="top|left|right" + height="25" + layout="topleft" + min_height="25" + width="100" + name="voice_ctrls_btn_panel" + user_resize="false" + visible="false"> + <button + follows="left|top|right" + height="20" + label="Voice Controls" + name="voice_ctrls_btn" + width="100" /> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index ccd754ac5e..7204e57479 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -21,6 +21,7 @@ label="im_header" layout="topleft" left="5" + mouse_opaque="false" name="im_header" top="5" width="295"> @@ -30,7 +31,7 @@ image_name="Generic_Person" layout="topleft" left="3" - mouse_opaque="true" + mouse_opaque="false" name="avatar_icon" top="3" width="18" /> 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 d7792696e7..9d00abd2c9 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -208,7 +208,7 @@ halign="center" layout="topleft" name="Reset Current"> <menu_item_call.on_click - function="Inventory.ResetFilter" /> + function="Inventory.ResetFilters" /> </menu_item_call> <menu_item_call label="Close All Folders" 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 d6d8e9562b..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,36 +15,39 @@ 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 - label="MY OUTFITS" - help_topic="my_outfits_tab" - allow_multi_select="true" - follows="all" - border="false" - left="0" - top="0" - height="500" - width="290" - mouse_opaque="true" - name="outfitslist_accordionpanel" - start_folder="My Outfits" /> <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" + follows="all" + border="false" + left="0" + top="0" + width="314" + mouse_opaque="true" + name="outfitslist_tab" + start_folder="My Outfits" /> </tab_container> <panel background_visible="true" @@ -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_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_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml index 34bd6fb091..2c60271801 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -134,20 +134,20 @@ parameter="ChangeConnectionPort" /> </check_box> <spinner - control_name="BrowserProxyPort" - enabled_control="BrowserProxyEnabled" + control_name="ConnectionPort" + enabled_control="ConnectionPortEnabled" decimal_digits="0" follows="left|top" height="23" increment="1" - initial_value="80" + initial_value="13000" label="Port number:" label_width="75" layout="topleft" left_delta="160" - max_val="12000" - min_val="10" - name="web_proxy_port" + max_val="13050" + min_val="13000" + name="connection_port" top_delta="-2" width="140" /> <text @@ -296,7 +296,8 @@ follows="left|top" height="16" initial_value="false" - label="Web proxy" + control_name="BrowserProxyEnabled" + label="Enable Web Proxy" left_delta="0" mouse_opaque="true" name="web_proxy_enabled" @@ -314,30 +315,34 @@ tool_tip="The name or IP address of the proxy you would like to use" top_pad="4" width="200" /> - <button - follows="left|top" - height="23" - enabled="false" - label="Browse" - label_selected="Browse" - layout="topleft" - left_pad="5" - name="set_proxy" - top_pad="-21" - width="100"> - <button.commit_callback - function="Pref.SetCache" /> - </button> <text type="string" length="1" follows="left|top" height="10" layout="topleft" - left_delta="-203" + left_delta="0" name="Proxy location" top_delta="20" width="300" text_color="LtGray_50"> Proxy location - </text></panel> + </text> + <spinner + control_name="BrowserProxyPort" + enabled_control="BrowserProxyEnabled" + decimal_digits="0" + follows="left|top" + height="23" + increment="1" + initial_value="80" + label="Port number:" + label_width="75" + layout="topleft" + left_delta="230" + max_val="12000" + min_val="10" + name="web_proxy_port" + top_delta="-20" + width="140" /> +</panel> 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 677d0de243..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 @@ -1,54 +1,99 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="left|right|top|bottom" - name="MediaControls" + name="MediaControlsPanel" background_visible="false" height="200" layout="topleft" help_topic="prim_media_controls" mouse_opaque="false" + min_width="300" width="800"> <string name="control_background_image_name">Inspector_Background</string> <string name="skip_step">0.2</string> - <string name="min_width">400</string> - <string name="min_height">120</string> + <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> - <panel - name="media_region" - height="100" - follows="left|right|top|bottom" + <string name="top_world_view_avoid_zone">50</string> + <layout_stack + name="progress_indicator_area" + follows="left|right|top" + height="8" layout="topleft" - mouse_opaque="false" - top="0" /> + animate="false" + left="0" + orientation="horizontal" + top="22"> + <!-- outer layout_panels center the inner one --> + <layout_panel + width="0" + name="left_bookend_bottom" + mouse_opaque="false" + layout="topleft" + user_resize="false" /> + <panel + name="media_progress_indicator" + mouse_opaque="false" + follows="left|right|top" + height="8" + layout="topleft" + left="0" + top="0" + auto_resize="false" + user_resize="false" + min_width="100" + width="200"> + <progress_bar + name="media_progress_bar" + color_bg="1 1 1 1" + color_bar="1 1 1 0.96" + follows="left|right|top" + height="8" + layout="topleft" + top="0" + left="0" + tool_tip="Media is Loading"/> + </panel> + <layout_panel + name="right_bookend_bottom" + width="0" + mouse_opaque="false" + layout="topleft" + user_resize="false" /> + </layout_stack> <layout_stack name="media_controls" - follows="left|right" + follows="left|right|top" animate="false" height="75" layout="topleft" + top="0" left="0" + border_size="1" mouse_opaque="false" - orientation="horizontal" - top="100"> + orientation="horizontal"> <!-- outer layout_panels center the inner one --> <layout_panel name="left_bookend" + top="0" width="0" - mouse_opaque="false" + mouse_opaque="false" layout="topleft" user_resize="false" /> <layout_panel name="back" + top="0" auto_resize="false" user_resize="false" layout="topleft" - mouse_opaque="false" + mouse_opaque="false" min_width="22" - width="22" - top="4"> + width="22"> <button + name="back_btn" + follows="top" image_overlay="Arrow_Left_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -56,50 +101,56 @@ image_unselected="PushButton_Off" hover_glow_amount="0.15" auto_resize="false" - height="22" layout="topleft" tool_tip="Navigate back" - width="22" + top="0" left="0" - top_delta="4"> + width="22" + height="22"> <button.commit_callback function="MediaCtrl.Back" /> </button> </layout_panel> <layout_panel name="fwd" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="10" min_width="22" + top="0" + height="22" width="22"> <button + follows="top" image_overlay="Arrow_Right_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" hover_glow_amount="0.15" + top="0" height="22" - layout="topleft" - tool_tip="Navigate forward" - top_delta="0" min_width="22" - width="22"> + width="22" + layout="topleft" + tool_tip="Navigate forward"> <button.commit_callback function="MediaCtrl.Forward" /> </button> </layout_panel> <layout_panel name="home" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="-2" + top="0" + height="22" min_width="22" width="22"> <button + follows="top" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" image_overlay="Home_Off" @@ -108,6 +159,7 @@ hover_glow_amount="0.15" layout="topleft" tool_tip="Home page" + top="0" height="22" min_width="22" width="22"> @@ -117,22 +169,26 @@ </layout_panel> <layout_panel name="media_stop" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="2" + top="0" + height="22" min_width="22" width="22"> <button + follows="top" image_overlay="Stop_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" hover_glow_amount="0.15" - height="22" layout="topleft" tool_tip="Stop media" + top="0" + height="22" min_width="22" width="22"> <button.commit_callback @@ -141,14 +197,16 @@ </layout_panel> <layout_panel name="reload" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="6" + top="0" + height="22" min_width="22" width="22"> <button - height="22" + follows="top" image_overlay="Refresh_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -157,6 +215,8 @@ hover_glow_amount="0.15" layout="topleft" tool_tip="Reload" + top="0" + height="22" min_width="22" width="22"> <button.commit_callback @@ -165,14 +225,16 @@ </layout_panel> <layout_panel name="stop" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="10" + top="0" + height="22" min_width="22" width="22"> <button - height="22" + follows="top" image_overlay="StopReload_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -181,6 +243,8 @@ hover_glow_amount="0.15" layout="topleft" tool_tip = "Stop loading" + top="0" + height="22" min_width="22" width="22"> <button.commit_callback @@ -189,13 +253,16 @@ </layout_panel> <layout_panel name="play" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="14" + top="0" + height="22" min_width="22" width="24"> <button + follows="top" image_overlay="Play_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -205,7 +272,7 @@ layout="topleft" tool_tip = "Play media" left_delta="2" - top="4" + top="0" height="22" min_width="22" width="22"> @@ -215,13 +282,15 @@ </layout_panel> <layout_panel name="pause" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="18" + top="0" min_width="22" width="24"> <button + follows="top" image_overlay="Pause_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -229,10 +298,10 @@ image_unselected="PushButton_Off" hover_glow_amount="0.15" layout="topleft" + top="0" height="22" width="22" left_delta="-1" - top="4" tool_tip = "Pause media"> <button.commit_callback function="MediaCtrl.Pause" /> @@ -241,16 +310,18 @@ <!-- media URL entry --> <layout_panel name="media_address" + mouse_opaque="false" auto_resize="true" user_resize="false" height="24" follows="left|right|bottom" layout="topleft" + top="0" width="190" min_width="90"> <line_editor name="media_address_url" - follows="left|right" + follows="top|left|right" height="22" top="0" tool_tip="Media URL" @@ -261,17 +332,18 @@ <layout_stack name="media_address_url_icons" animate="false" - follows="right" + follows="top|right" height="20" width="38" - right="-2" - top="-1" - mouse_opaque="false" + top="0" + right="-1" + border_size="0" + mouse_opaque="false" orientation="horizontal"> <layout_panel layout="topleft" width="16" - mouse_opaque="false" + mouse_opaque="false" auto_resize="false" user_resize="false"> <icon @@ -287,7 +359,7 @@ <layout_panel layout="topleft" width="16" - mouse_opaque="false" + mouse_opaque="false" auto_resize="false" user_resize="false"> <icon @@ -303,18 +375,20 @@ </layout_panel> <layout_panel name="media_play_position" + mouse_opaque="false" auto_resize="true" user_resize="false" - follows="left|right|top|bottom" + follows="left|right" layout="topleft" - height="16" + top="0" + height="22" min_width="100" width="200"> <slider_bar name="media_play_slider" follows="left|right|top" - height="20" - bottom="88" + top="0" + height="22" increment="0.01" initial_value="0.5" layout="topleft" @@ -327,12 +401,15 @@ </layout_panel> <layout_panel name="skip_back" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" + top="0" min_width="22" width="22"> <button + follows="top" image_overlay="SkipBackward_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -343,7 +420,7 @@ height="22" layout="topleft" tool_tip="Step back" - top="-14" + top="0" width="22" left="0"> <button.commit_callback @@ -352,12 +429,15 @@ </layout_panel> <layout_panel name="skip_forward" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" + top="0" min_width="22" width="22"> <button + follows="top" image_overlay="SkipForward_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -367,7 +447,7 @@ height="22" layout="topleft" tool_tip="Step forward" - top="-14" + top="0" min_width="22" width="22"> <button.commit_callback @@ -376,29 +456,32 @@ </layout_panel> <layout_panel name="media_volume" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" - top="-50" + top="0" height="72" min_width="22" width="22"> <!-- Note: this is not quite right either...the mute button is not the --> <!-- same as the others because it cannot have the "image_overlay" be --> <!-- two different images. --> + <!-- Note also: the button and the slider must overlap! --> <button + follows="top" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" image_selected="AudioMute_Off" image_unselected="Audio_Off" hover_glow_amount="0.15" name="media_mute_button" - height="22" is_toggle="true" layout="topleft" scale_image="false" tool_tip="Mute This Media" - top="118" + top="0" + height="20" min_width="22" width="22" > <button.commit_callback @@ -411,7 +494,7 @@ <slider orientation="vertical" left="0" - top="-2" + top="16" height="50" layout="topleft" increment="0.01" @@ -428,35 +511,25 @@ function="MediaCtrl.HideVolumeSlider" /> </slider> </layout_panel> - <panel - height="28" - layout="topleft" - auto_resize="false" - min_width="3" - width="3"> - <icon - height="26" - image_name="media_panel_divider.png" - layout="topleft" - top="0" - min_width="3" - width="3" /> - </panel> <layout_panel name="zoom_frame" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" + top="0" height="28" min_width="22" width="22"> <button + follows="top" image_overlay="Zoom_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" hover_glow_amount="0.15" + top="0" height="22" layout="topleft" tool_tip="Zoom into media" @@ -468,18 +541,22 @@ </layout_panel> <layout_panel name="close" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" + top="0" min_width="21" width="21" > <button + follows="top" image_overlay="UnZoom_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" image_selected="PushButton_Selected" image_unselected="PushButton_Off" hover_glow_amount="0.15" + top="0" height="22" layout="topleft" tool_tip ="Zoom Back" @@ -491,12 +568,15 @@ </layout_panel> <layout_panel name="new_window" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" + top="0" min_width="22" width="22"> <button + follows="top" image_overlay="ExternalBrowser_Off" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -506,7 +586,7 @@ height="22" layout="topleft" tool_tip = "Open URL in browser" - top_delta="-4" + top="0" min_width="24" width="24" > <button.commit_callback @@ -516,46 +596,17 @@ <!-- bookend panel --> <layout_panel name="right_bookend" - width="0" - layout="topleft" - user_resize="false" /> - </layout_stack> - <layout_stack - follows="left|right|bottom" - height="20" - layout="topleft" - animate="false" - left="0" - orientation="horizontal" - top="170"> - <!-- outer layout_panels center the inner one --> - <layout_panel - width="0" - layout="topleft" - user_resize="false" /> - <panel - name="media_progress_indicator" - height="20" - layout="topleft" - left="0" + mouse_opaque="false" top="0" - auto_resize="false" - user_resize="false" - min_width="100" - width="200"> - <progress_bar - name="media_progress_bar" - color_bar="1 1 1 0.96" - follows="left|right|top" - top="5" - height="8" - layout="topleft" - left="0" - tool_tip="Media is Loading"/> - </panel> - <layout_panel width="0" layout="topleft" user_resize="false" /> </layout_stack> + <panel + name="media_region" + height="100" + follows="left|right|top|bottom" + layout="topleft" + mouse_opaque="false" + top="30" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 342cf4144f..43947262ec 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -27,173 +27,178 @@ <string name="no_partner_text" value="None" /> - <string + <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 +209,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 +294,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 +303,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 +312,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 +324,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 +333,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 +345,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 +370,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/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" ); + } } |