diff options
Diffstat (limited to 'indra/newview')
52 files changed, 593 insertions, 246 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8edf766132..97c8cbfa7b 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -10347,7 +10347,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <key>VivoxDebugLevel</key> <map> @@ -10655,7 +10655,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>700</integer> + <integer>738</integer> </map> <key>WindowMaximized</key> <map> @@ -10677,7 +10677,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>1000</integer> + <integer>1024</integer> </map> <key>WindowX</key> <map> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2384e6c5ba..11c252406a 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -304,10 +304,7 @@ static std::string gLaunchFileOnQuit; // Used on Win32 for other apps to identify our window (eg, win_setup) const char* const VIEWER_WINDOW_CLASSNAME = "Second Life"; -static const S32 FIRST_RUN_WINDOW_WIDTH = 1024; -//should account for Windows task bar -static const S32 FIRST_RUN_WINDOW_HIGHT = 738; //---------------------------------------------------------------------------- // List of entries from strings.xml to always replace @@ -2374,35 +2371,12 @@ bool LLAppViewer::initWindow() // store setting in a global for easy access and modification gNoRender = gSavedSettings.getBOOL("DisableRendering"); - S32 window_x = gSavedSettings.getS32("WindowX"); - S32 window_y = gSavedSettings.getS32("WindowY"); - S32 window_width = gSavedSettings.getS32("WindowWidth"); - S32 window_height = gSavedSettings.getS32("WindowHeight"); - - bool show_maximized = gSavedSettings.getBOOL("WindowMaximized"); - - bool first_run = gSavedSettings.getBOOL("FirstLoginThisInstall"); - - if (first_run)//for first login - { - window_width = FIRST_RUN_WINDOW_WIDTH;//yep hardcoded - window_height = FIRST_RUN_WINDOW_HIGHT; - - //if screen resolution is lower then first run width/height then show maximized - LLDisplayInfo display_info; - if(display_info.getDisplayWidth() <= FIRST_RUN_WINDOW_WIDTH - || display_info.getDisplayHeight()<=FIRST_RUN_WINDOW_HIGHT) - { - show_maximized = true; - } - } - // always start windowed BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth"); gViewerWindow = new LLViewerWindow(gWindowTitle, VIEWER_WINDOW_CLASSNAME, - window_x, window_y, - window_width, window_height, + gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"), + gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"), FALSE, ignorePixelDepth); LLNotificationsUI::LLNotificationManager::getInstance(); @@ -2413,7 +2387,7 @@ bool LLAppViewer::initWindow() gViewerWindow->toggleFullscreen(FALSE); } - if (show_maximized) + if (gSavedSettings.getBOOL("WindowMaximized")) { gViewerWindow->mWindow->maximize(); gViewerWindow->getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio")); diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 80cf8f1d61..8441796219 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -182,7 +182,10 @@ void LLAssetUploadResponder::uploadFailure(const LLSD& content) // deal with L$ errors if (reason == "insufficient funds") { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs"), LLGlobalEconomy::Singleton::getInstance()->getPriceUpload()); + S32 price = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs", args), price); } else { diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp index fba557c656..589f570d96 100644 --- a/indra/newview/llfloaterbuy.cpp +++ b/indra/newview/llfloaterbuy.cpp @@ -246,7 +246,8 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj, // Compute icon for this item BOOL item_is_multi = FALSE; - if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED ) + if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED + || inv_item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) { item_is_multi = TRUE; } diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp index 1642e6725e..7fddd1fc5f 100644 --- a/indra/newview/llfloaterbuycurrency.cpp +++ b/indra/newview/llfloaterbuycurrency.cpp @@ -234,8 +234,7 @@ void LLFloaterBuyCurrencyUI::updateUI() if (mHasTarget) { childSetVisible("buy_action", true); - childSetTextArg("buy_action", "[NAME]", mTargetName); - childSetTextArg("buy_action", "[PRICE]", llformat("%d",mTargetPrice)); + childSetTextArg("buy_action", "[ACTION]", mTargetName); } } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index e998d10fcc..3487f52f35 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -183,7 +183,6 @@ void LLVoiceSetKeyDialog::onCancel(void* user_data) // a static member and update all our static callbacks void handleNameTagOptionChanged(const LLSD& newvalue); -viewer_media_t get_web_media(); bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response); //bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater); @@ -191,23 +190,14 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator); -viewer_media_t get_web_media() -{ - viewer_media_t media_source = LLViewerMedia::newMediaImpl(LLUUID::null); - media_source->initializeMedia("text/html"); - return media_source; -} - - bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if ( option == 0 ) // YES { // clean web - viewer_media_t media_source = get_web_media(); - if (media_source && media_source->hasMedia()) - media_source->getMediaPlugin()->clear_cache(); + LLViewerMedia::clearAllCaches(); + LLViewerMedia::clearAllCookies(); // clean nav bar history LLNavigationBar::getInstance()->clearHistoryCache(); @@ -429,17 +419,14 @@ void LLFloaterPreference::apply() std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""); childSetText("cache_location", cache_location); - viewer_media_t media_source = get_web_media(); - if (media_source && media_source->hasMedia()) + LLViewerMedia::setCookiesEnabled(childGetValue("cookies_enabled")); + + if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port")) { - media_source->getMediaPlugin()->enable_cookies(childGetValue("cookies_enabled")); - if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port")) - { - bool proxy_enable = childGetValue("web_proxy_enabled"); - std::string proxy_address = childGetValue("web_proxy_editor"); - int proxy_port = childGetValue("web_proxy_port"); - media_source->getMediaPlugin()->proxy_setup(proxy_enable, proxy_address, proxy_port); - } + bool proxy_enable = childGetValue("web_proxy_enabled"); + std::string proxy_address = childGetValue("web_proxy_editor"); + int proxy_port = childGetValue("web_proxy_port"); + LLViewerMedia::setProxyConfig(proxy_enable, proxy_address, proxy_port); } // LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString()); diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 0f3c176cea..42a7eeff26 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -84,6 +84,8 @@ #include "llassetuploadresponders.h" #include "llagentui.h" +#include "lltrans.h" + const U32 INCLUDE_SCREENSHOT = 0x01 << 0; //----------------------------------------------------------------------------- @@ -372,8 +374,7 @@ void LLFloaterReporter::onClickSend(void *userdata) return; } - - LLUploadDialog::modalUploadDialog("Uploading...\n\nReport"); + LLUploadDialog::modalUploadDialog(LLTrans::getString("uploading_abuse_report")); // *TODO don't upload image if checkbox isn't checked std::string url = gAgent.getRegion()->getCapability("SendUserReport"); std::string sshot_url = gAgent.getRegion()->getCapability("SendUserReportWithScreenshot"); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 1f918c72ea..6fedd9ac4d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -103,7 +103,7 @@ std::string ICON_NAME[ICON_NAME_COUNT] = "Inv_Script", "Inv_Clothing", "Inv_Object", - "Inv_Object", + "Inv_Object_Multi", "Inv_Notecard", "Inv_Skin", "Inv_Snapshot", @@ -5358,7 +5358,10 @@ LLUIImagePtr LLLinkItemBridge::getIcon() const { if (LLViewerInventoryItem *item = getItem()) { - return get_item_icon(item->getActualType(), item->getInventoryType(), 0, FALSE); + U32 attachment_point = (item->getFlags() & 0xff); // low byte of inventory flags + bool is_multi = LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags(); + + return get_item_icon(item->getActualType(), item->getInventoryType(), attachment_point, is_multi); } return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE); } diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 2fb8aea4e9..62c2d80609 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -54,7 +54,6 @@ #include "llappviewer.h" #include "lldbstrings.h" #include "llviewerstats.h" -#include "llmutelist.h" #include "llnotificationsutil.h" #include "llcallbacklist.h" #include "llpreview.h" diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 2d3c4b187e..95094f6b52 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -128,68 +128,26 @@ LLMute::LLMute(const LLUUID& id, const std::string& name, EType type, U32 flags) } -std::string LLMute::getDisplayName() const +std::string LLMute::getDisplayType() const { - std::string name_with_suffix = mName; switch (mType) { case BY_NAME: default: - name_with_suffix += " " + LLTrans::getString("MuteByName"); + return LLTrans::getString("MuteByName"); break; case AGENT: - name_with_suffix += " " + LLTrans::getString("MuteAgent"); + return LLTrans::getString("MuteAgent"); break; case OBJECT: - name_with_suffix += " " + LLTrans::getString("MuteObject"); + return LLTrans::getString("MuteObject"); break; case GROUP: - name_with_suffix += " " + LLTrans::getString("MuteGroup"); + return LLTrans::getString("MuteGroup"); break; } - return name_with_suffix; } -void LLMute::setFromDisplayName(const std::string& display_name) -{ - size_t pos = 0; - mName = display_name; - - pos = mName.rfind(" " + LLTrans::getString("MuteGroup")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = GROUP; - return; - } - - pos = mName.rfind(" " + LLTrans::getString("MuteObject")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = OBJECT; - return; - } - - pos = mName.rfind(" " + LLTrans::getString("MuteAgent")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = AGENT; - return; - } - - pos = mName.rfind(" " + LLTrans::getString("MuteByName")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = BY_NAME; - return; - } - - llwarns << "Unable to set mute from display name " << display_name << llendl; - return; -} /* static */ LLMuteList* LLMuteList::getInstance() diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index e1e81a24b4..7cb11e6031 100644 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -63,14 +63,8 @@ public: LLMute(const LLUUID& id, const std::string& name = std::string(), EType type = BY_NAME, U32 flags = 0); - // Returns name + suffix based on type - // For example: "James Tester (resident)" - std::string getDisplayName() const; - - // Converts a UI name into just the agent or object name - // For example: "James Tester (resident)" sets the name to "James Tester" - // and the type to AGENT. - void setFromDisplayName(const std::string& display_name); + // Returns localized type name of muted item + std::string getDisplayType() const; public: LLUUID mID; // agent or object id diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 483756b16e..af711b6943 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -96,11 +96,7 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) params.commit_on_keyboard_movement(false); mList = LLUICtrlFactory::create<LLScrollListCtrl>(params); - - // *HACK: adding list as a child to FloaterViewHolder to make it fully visible without - // making it top control (because it would cause problems). - gViewerWindow->getFloaterViewHolder()->addChild(mList); - mList->setVisible(FALSE); + addChild(mList); //****************************Gesture Part********************************/ @@ -115,7 +111,7 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) setFocusLostCallback(boost::bind(&LLGestureComboList::hideList, this)); } -BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) +BOOL LLGestureComboList::handleKeyHere(KEY key, MASK mask) { BOOL handled = FALSE; @@ -126,7 +122,7 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) } else { - handled = mList->handleKey(key, mask, called_from_parent); + handled = mList->handleKeyHere(key, mask); } return handled; @@ -135,18 +131,17 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) void LLGestureComboList::showList() { LLRect rect = mList->getRect(); - LLRect screen; - mButton->localRectToScreen(getRect(), &screen); + LLRect button_rect = mButton->getRect(); // Calculating amount of space between the navigation bar and gestures combo LLNavigationBar* nb = LLNavigationBar::getInstance(); S32 x, nb_bottom; - nb->localPointToScreen(0, 0, &x, &nb_bottom); + nb->localPointToOtherView(0, 0, &x, &nb_bottom, this); - S32 max_height = nb_bottom - screen.mTop; + S32 max_height = nb_bottom - button_rect.mTop; mList->calcColumnWidths(); - rect.setOriginAndSize(screen.mLeft, screen.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); + rect.setOriginAndSize(button_rect.mLeft, button_rect.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); mList->setRect(rect); mList->fitContents( llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); @@ -156,6 +151,7 @@ void LLGestureComboList::showList() // Show the list and push the button down mButton->setToggleState(TRUE); mList->setVisible(TRUE); + LLUI::addPopup(mList); } void LLGestureComboList::onButtonCommit() @@ -188,6 +184,7 @@ void LLGestureComboList::hideList() mButton->setToggleState(FALSE); mList->setVisible(FALSE); mList->mouseOverHighlightNthItem(-1); + LLUI::removePopup(mList); gFocusMgr.setKeyboardFocus(NULL); } } diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 559c1ee091..dd467d7978 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -70,7 +70,7 @@ public: LLCtrlListInterface* getListInterface() { return (LLCtrlListInterface*)mList; }; virtual void showList(); virtual void hideList(); - virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); + virtual BOOL handleKeyHere(KEY key, MASK mask); S32 getCurrentIndex() const; void onItemSelected(const LLSD& data); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 08ae93c3a6..e199f9f180 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -268,24 +268,23 @@ void LLNearbyChatScreenChannel::showToastsBottom() } break; } - else - { - toast_rect = toast->getRect(); - toast_rect.setLeftTopAndSize(getRect().mLeft , toast_top, toast_rect.getWidth() ,toast_rect.getHeight()); - - toast->setRect(toast_rect); - toast->setIsHidden(false); - toast->setVisible(TRUE); + bottom = toast_top - toast->getTopPad(); + } - if(!toast->hasFocus()) - { - // Fixing Z-order of toasts (EXT-4862) - // Next toast will be positioned under this one. - gFloaterView->sendChildToBack(toast); - } - - bottom = toast->getRect().mTop - toast->getTopPad(); - } + // use reverse order to provide correct z-order and avoid toast blinking + for(std::vector<LLToast*>::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it) + { + LLToast* toast = (*it); + S32 toast_top = bottom + toast->getTopPad(); + + toast_rect = toast->getRect(); + toast_rect.setLeftTopAndSize(getRect().mLeft , toast_top, toast_rect.getWidth() ,toast_rect.getHeight()); + + toast->setRect(toast_rect); + toast->setIsHidden(false); + toast->setVisible(TRUE); + + bottom = toast->getRect().mBottom - margin; } } diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp index 362657a458..a186bc926c 100644 --- a/indra/newview/llpanelblockedlist.cpp +++ b/indra/newview/llpanelblockedlist.cpp @@ -119,8 +119,13 @@ void LLPanelBlockedList::refreshBlockedList() std::vector<LLMute>::iterator it; for (it = mutes.begin(); it != mutes.end(); ++it) { - std::string display_name = it->getDisplayName(); - mBlockedList->addStringUUIDItem(display_name, it->mID, ADD_BOTTOM, TRUE); + LLScrollListItem::Params item_p; + item_p.enabled(TRUE); + item_p.value(it->mID); // link UUID of blocked item with ScrollListItem + item_p.columns.add().column("item_name").value(it->mName);//.type("text"); + item_p.columns.add().column("item_type").value(it->getDisplayType());//.type("text").width(111); + + mBlockedList->addRow(item_p, ADD_BOTTOM); } } @@ -145,9 +150,7 @@ void LLPanelBlockedList::onRemoveBtnClick() { std::string name = mBlockedList->getSelectedItemLabel(); LLUUID id = mBlockedList->getStringUUIDSelectedItem(); - LLMute mute(id); - mute.setFromDisplayName(name); - // now mute.mName has the suffix trimmed off + LLMute mute(id, name); S32 last_selected = mBlockedList->getFirstSelectedIndex(); if (LLMuteList::getInstance()->remove(mute)) diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 021e1f5159..70a7bf644b 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -1893,7 +1893,7 @@ void LLPanelClassifiedEdit::resetControls() LLPanelClassifiedInfo::resetControls(); getChild<LLComboBox>("category")->setCurrentByIndex(0); - getChild<LLIconsComboBox>("content_type")->setCurrentByIndex(0); + getChild<LLComboBox>("content_type")->setCurrentByIndex(0); childSetValue("auto_renew", false); childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING); childSetEnabled("price_for_listing", TRUE); @@ -1928,7 +1928,7 @@ U32 LLPanelClassifiedEdit::getContentType() void LLPanelClassifiedEdit::setContentType(U32 content_type) { - LLIconsComboBox* ct_cb = getChild<LLIconsComboBox>("content_type"); + LLComboBox* ct_cb = getChild<LLComboBox>("content_type"); ct_cb->setCurrentByIndex(content_type); ct_cb->resetDirty(); } @@ -1988,7 +1988,7 @@ U8 LLPanelClassifiedEdit::getFlags() { bool auto_renew = childGetValue("auto_renew").asBoolean(); - LLComboBox* content_cb = getChild<LLIconsComboBox>("content_type"); + LLComboBox* content_cb = getChild<LLComboBox>("content_type"); bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE; return pack_classified_flags_request(auto_renew, false, mature, false); diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 7505581904..c43cbf5819 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -609,7 +609,9 @@ void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* mo { if (price > 0 && price > gStatusBar->getBalance()) { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_costs"), price); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_costs", args), price); } else { @@ -1188,7 +1190,8 @@ public: LLTaskObjectBridge( LLPanelObjectInventory* panel, const LLUUID& uuid, - const std::string& name); + const std::string& name, + U32 flags = 0); virtual LLUIImagePtr getIcon() const; }; @@ -1196,8 +1199,9 @@ public: LLTaskObjectBridge::LLTaskObjectBridge( LLPanelObjectInventory* panel, const LLUUID& uuid, - const std::string& name) : - LLTaskInvFVBridge(panel, uuid, name) + const std::string& name, + U32 flags) : + LLTaskInvFVBridge(panel, uuid, name, flags) { } @@ -1442,9 +1446,15 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* // object->getName()); break; case LLAssetType::AT_OBJECT: + { + item = dynamic_cast<LLInventoryItem*>(object); + U32 flags = ( NULL == item ? 0 : item->getFlags() ); + new_bridge = new LLTaskObjectBridge(panel, object->getUUID(), - object->getName()); + object->getName(), + flags); + } break; case LLAssetType::AT_NOTECARD: new_bridge = new LLTaskNotecardBridge(panel, diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index cdd79b1559..1a1650c38b 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -567,9 +567,13 @@ void LLPanelPlaceProfile::onForSaleBannerClick() if(parcel->getLocalID() == mSelectedParcelID && mLastSelectedRegionID ==selected_region->getRegionID()) { - if(parcel->getSalePrice() - gStatusBar->getBalance() > 0) + S32 price = parcel->getSalePrice(); + + if(price - gStatusBar->getBalance() > 0) { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("buying_selected_land"), parcel->getSalePrice()); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("buying_selected_land", args), price); } else { diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 26b57c003b..f9ba6f625d 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -278,6 +278,11 @@ BOOL LLPanelPlaces::postBuild() mFilterEditor = getChild<LLFilterEditor>("Filter"); if (mFilterEditor) { + //when list item is being clicked the filter editor looses focus + //committing on focus lost leads to detaching list items + //BUT a detached list item cannot be made selected and must not be clicked onto + mFilterEditor->setCommitOnFocusLost(false); + mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false)); } diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index 120b584cd9..9b5e38d0aa 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -68,15 +68,16 @@ const F32 TOTAL_LOGIN_TIME = 10.f; // seconds, wild guess at time from GL contex S32 gLastStartAnimationFrame = 0; // human-style indexing, first image = 1 const S32 ANIMATION_FRAMES = 1; //13; +static LLRegisterPanelClassWrapper<LLProgressView> r("progress_view"); + + // XUI: Translate -LLProgressView::LLProgressView(const LLRect &rect) +LLProgressView::LLProgressView() : LLPanel(), mPercentDone( 0.f ), mMouseDownInActiveArea( false ), mUpdateEvents("LLProgressView") { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_progress.xml"); - reshape(rect.getWidth(), rect.getHeight()); mUpdateEvents.listen("self", boost::bind(&LLProgressView::handleUpdate, this, _1)); } @@ -92,6 +93,9 @@ BOOL LLProgressView::postBuild() getChild<LLTextBox>("message_text")->setClickedCallback(onClickMessage, this); + // hidden initially, until we need it + LLPanel::setVisible(FALSE); + sInstance = this; return TRUE; } @@ -126,19 +130,23 @@ BOOL LLProgressView::handleKeyHere(KEY key, MASK mask) void LLProgressView::setVisible(BOOL visible) { + // hiding progress view if (getVisible() && !visible) { - mFadeTimer.start(); + // hiding progress view, so show menu bars + LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(TRUE); } + // showing progress view else if (!getVisible() && visible) { - gViewerWindow->addPopup(this); - + // showing progress view, so hide menu bars + LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(FALSE); + setFocus(TRUE); mFadeTimer.stop(); mProgressTimer.start(); - LLPanel::setVisible(visible); + LLPanel::setVisible(TRUE); } } @@ -148,7 +156,7 @@ void LLProgressView::draw() static LLTimer timer; // Paint bitmap if we've got one - glPushMatrix(); + glPushMatrix(); if (gStartTexture) { LLGLSUIDefault gls_ui; @@ -189,7 +197,7 @@ void LLProgressView::draw() // Fade is complete, release focus gFocusMgr.releaseFocusIfNeeded( this ); LLPanel::setVisible(FALSE); - gViewerWindow->removePopup(this); + mFadeTimer.stop(); gStartTexture = NULL; } diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h index 6853674d88..374b14be83 100644 --- a/indra/newview/llprogressview.h +++ b/indra/newview/llprogressview.h @@ -44,7 +44,7 @@ class LLProgressBar; class LLProgressView : public LLPanel { public: - LLProgressView(const LLRect& rect); + LLProgressView(); virtual ~LLProgressView(); BOOL postBuild(); diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 32a915608e..dc64296521 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -168,25 +168,25 @@ void LLScrollingPanelParam::draw() LLPanel::draw(); // Draw the hints over the "less" and "more" buttons. - glPushMatrix(); + gGL.pushUIMatrix(); { const LLRect& r = mHintMin->getRect(); F32 left = (F32)(r.mLeft + BTN_BORDER); F32 bot = (F32)(r.mBottom + BTN_BORDER); - glTranslatef(left, bot, 0.f); + gGL.translateUI(left, bot, 0.f); mHintMin->draw(); } - glPopMatrix(); + gGL.popUIMatrix(); - glPushMatrix(); + gGL.pushUIMatrix(); { const LLRect& r = mHintMax->getRect(); F32 left = (F32)(r.mLeft + BTN_BORDER); F32 bot = (F32)(r.mBottom + BTN_BORDER); - glTranslatef(left, bot, 0.f); + gGL.translateUI(left, bot, 0.f); mHintMax->draw(); } - glPopMatrix(); + gGL.popUIMatrix(); // Draw labels on top of the buttons diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 717a8bda1e..6cf9c6b95d 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -37,7 +37,6 @@ #include "llagent.h" #include "llappviewer.h" #include "llimview.h" -#include "llmutelist.h" #include "llsdutil.h" #include "lluicolortable.h" #include "llviewerobjectlist.h" diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index b1b3ae473c..1c7b3a0fe0 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -571,7 +571,7 @@ bool LLTextureFetchWorker::doWork(S32 param) if ((mFetcher->isQuitting() || mImagePriority < 1.0f || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) { - if (mState < WRITE_TO_CACHE) + if (mState < DECODE_IMAGE) { return true; // abort } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index b9509a98f5..af42ed0dc9 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -982,6 +982,119 @@ bool LLViewerMedia::isParcelAudioPlaying() return (LLViewerMedia::hasParcelAudio() && gAudiop && LLAudioEngine::AUDIO_PLAYING == gAudiop->isInternetStreamPlaying()); } +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::clearAllCookies() +{ + // Clear all cookies for all plugins + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + if(pimpl->mMediaSource) + { + pimpl->mMediaSource->clear_cookies(); + } + } + + // FIXME: this may not be sufficient, since the on-disk cookie file won't get written until some browser instance exits cleanly. + // It also won't clear cookies for other accounts, or for any account if we're not logged in, and won't do anything at all if there are no webkit plugins loaded. + // Until such time as we can centralize cookie storage, the following hack should cover these cases: + + // HACK: Look for cookie files in all possible places and delete them. + // NOTE: this assumes knowledge of what happens inside the webkit plugin (it's what adds 'browser_profile' to the path and names the cookie file) + + // Places that cookie files can be: + // <getOSUserAppDir>/browser_profile/cookies + // <getOSUserAppDir>/first_last/browser_profile/cookies (note that there may be any number of these!) + + std::string base_dir = gDirUtilp->getOSUserAppDir() + gDirUtilp->getDirDelimiter(); + std::string target; + std::string filename; + + lldebugs << "base dir = " << base_dir << llendl; + + // The non-logged-in version is easy + target = base_dir; + target += "browser_profile"; + target += gDirUtilp->getDirDelimiter(); + target += "cookies"; + lldebugs << "target = " << target << llendl; + if(LLFile::isfile(target)) + { + LLFile::remove(target); + } + + // the hard part: iterate over all user directories and delete the cookie file from each one + while(gDirUtilp->getNextFileInDir(base_dir, "*_*", filename, false)) + { + target = base_dir; + target += filename; + target += gDirUtilp->getDirDelimiter(); + target += "browser_profile"; + target += gDirUtilp->getDirDelimiter(); + target += "cookies"; + lldebugs << "target = " << target << llendl; + if(LLFile::isfile(target)) + { + LLFile::remove(target); + } + } + + +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::clearAllCaches() +{ + // Clear all plugins' caches + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + pimpl->clearCache(); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setCookiesEnabled(bool enabled) +{ + // Set the "cookies enabled" flag for all loaded plugins + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + if(pimpl->mMediaSource) + { + pimpl->mMediaSource->enable_cookies(enabled); + } + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setProxyConfig(bool enable, const std::string &host, int port) +{ + // Set the proxy config for all loaded plugins + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + if(pimpl->mMediaSource) + { + pimpl->mMediaSource->proxy_setup(enable, host, port); + } + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static bool LLViewerMedia::hasInWorldMedia() { if (sInWorldMediaDisabled) return false; @@ -1321,6 +1434,8 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type) media_source->focus(mHasFocus); media_source->setBackgroundColor(mBackgroundColor); + media_source->proxy_setup(gSavedSettings.getBOOL("BrowserProxyEnabled"), gSavedSettings.getString("BrowserProxyAddress"), gSavedSettings.getS32("BrowserProxyPort")); + if(mClearCache) { mClearCache = false; diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index bc51e713a1..f9870fb3b9 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -133,6 +133,18 @@ public: static bool isParcelMediaPlaying(); static bool isParcelAudioPlaying(); + // Clear all cookies for all plugins + static void clearAllCookies(); + + // Clear all plugins' caches + static void clearAllCaches(); + + // Set the "cookies enabled" flag for all loaded plugins + static void setCookiesEnabled(bool enabled); + + // Set the proxy config for all loaded plugins + static void setProxyConfig(bool enable, const std::string &host, int port); + private: static void onTeleportFinished(); }; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5c40d02f8d..5598a589cc 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -436,7 +436,8 @@ void init_menus() gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT)); gMenuBarView->setBackgroundColor( color ); - gMenuHolder->addChild(gMenuBarView); + LLView* menu_bar_holder = gViewerWindow->getRootView()->getChildView("menu_bar_holder"); + menu_bar_holder->addChild(gMenuBarView); gViewerWindow->setMenuBackgroundColor(false, LLViewerLogin::getInstance()->isInProductionGrid()); @@ -471,9 +472,10 @@ void init_menus() gLoginMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_login.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); gLoginMenuBarView->arrangeAndClear(); LLRect menuBarRect = gLoginMenuBarView->getRect(); - gLoginMenuBarView->setRect(LLRect(menuBarRect.mLeft, menuBarRect.mTop, gViewerWindow->getRootView()->getRect().getWidth() - menuBarRect.mLeft, menuBarRect.mBottom)); + menuBarRect.setLeftTopAndSize(0, menu_bar_holder->getRect().getHeight(), menuBarRect.getWidth(), menuBarRect.getHeight()); + gLoginMenuBarView->setRect(menuBarRect); gLoginMenuBarView->setBackgroundColor( color ); - gMenuHolder->addChild(gLoginMenuBarView); + menu_bar_holder->addChild(gLoginMenuBarView); // tooltips are on top of EVERYTHING, including menus gViewerWindow->getRootView()->sendChildToFront(gToolTipView); @@ -3274,7 +3276,9 @@ void handle_buy_object(LLSaleInfo sale_info) if (price > 0 && price > gStatusBar->getBalance()) { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_object_costs"), price); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_object_costs", args), price); return; } @@ -4404,8 +4408,10 @@ void handle_buy_or_take() } else { + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", total_price); LLFloaterBuyCurrency::buyCurrency( - "Buying this costs", total_price); + LLTrans::getString("BuyingCosts", args), total_price); } } else diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 00762894cd..dfde9a9d1d 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -811,10 +811,10 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt if(!(can_afford_transaction(expected_upload_cost))) { - LLFloaterBuyCurrency::buyCurrency( - llformat(LLTrans::getString("UploadingCosts").c_str(), - data->mAssetInfo.getName().c_str()), - expected_upload_cost); + LLStringUtil::format_map_t args; + args["NAME"] = data->mAssetInfo.getName(); + args["AMOUNT"] = llformat("%d", expected_upload_cost); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("UploadingCosts", args), expected_upload_cost); is_balance_sufficient = FALSE; } else if(region) @@ -1001,7 +1001,9 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty if (balance < expected_upload_cost) { // insufficient funds, bail on this upload - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs"), expected_upload_cost); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", expected_upload_cost); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs", args), expected_upload_cost); return; } } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index bd0012057c..32edbec822 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -105,6 +105,7 @@ #include "llpanelplaceprofile.h" #include <boost/algorithm/string/split.hpp> // +#include <boost/regex.hpp> #if LL_WINDOWS // For Windows specific error handler #include "llwindebug.h" // For the invalid message handler @@ -272,7 +273,9 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_ } else { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("giving"), amount); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", amount); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("giving", args), amount); } } @@ -4498,8 +4501,64 @@ void process_money_balance_reply( LLMessageSystem* msg, void** ) payload["from_id"] = from_id; LLNotificationsUtil::add("PaymentRecived", args, payload); } + //AD *HACK: Parsing incoming string to localize messages that come from server! EXT-5986 + // It's only a temporarily and ineffective measure. It doesn't affect performance much + // because we get here only for specific type of messages, but anyway it is not right to do it! + // *TODO: Server-side changes should be made and this code removed. else { + if(desc.find("You paid")==0) + { + // Regular expression for message parsing- change it in case of server-side changes. + // Each set of parenthesis will later be used to find arguments of message we generate + // in the end of this if- (.*) gives us name of money receiver, (\\d+)-amount of money we pay + // and ([^$]*)- reason of payment + boost::regex expr("You paid (.*)L\\$(\\d+)\\s?([^$]*)."); + boost::match_results <std::string::const_iterator> matches; + if(boost::regex_match(desc, matches, expr)) + { + // Name of full localizable notification string + // there are three types of this string- with name of receiver and reason of payment, + // without name and without reason (but not simultaneously) + // example of string without name - You paid L$100 to create a group. + // example of string without reason - You paid Smdby Linden L$100. + // example of string with reason and name - You paid Smbdy Linden L$100 for a land access pass. + std::string line = "you_paid_ldollars_no_name"; + + // arguments of string which will be in notification + LLStringUtil::format_map_t str_args; + + // extracting amount of money paid (without L$ symbols). It is always present. + str_args["[AMOUNT]"] = std::string(matches[2]); + + // extracting name of person/group you are paying (it may be absent) + std::string name = std::string(matches[1]); + if(!name.empty()) + { + str_args["[NAME]"] = name; + line = "you_paid_ldollars"; + } + + // extracting reason of payment (it may be absent) + std::string reason = std::string(matches[3]); + if (reason.empty()) + { + line = "you_paid_ldollars_no_reason"; + } + else + { + std::string localized_reason; + // if we haven't found localized string for reason of payment leave it as it was + str_args["[REASON]"] = LLTrans::findString(localized_reason, reason) ? localized_reason : reason; + } + + // forming final message string by retrieving localized version from xml + // and applying previously found arguments + line = LLTrans::getString(line, str_args); + args["MESSAGE"] = line; + } + } + LLNotificationsUtil::add("SystemMessage", args); } diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index ea8af223c3..c9b3886fef 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -524,7 +524,10 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const break; case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break; case LLAssetType::AT_CLOTHING: img_name = "Inv_Clothing"; break; - case LLAssetType::AT_OBJECT: img_name = "Inv_Object"; break; + case LLAssetType::AT_OBJECT: + img_name = LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags() ? + "Inv_Object_Multi" : "Inv_Object"; + break; case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break; case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break; case LLAssetType::AT_NOTECARD: img_name = "Inv_Notecard"; break; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index dbbf0219c9..9fbffdac35 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1546,8 +1546,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority() } else { - // Leave the priority as-is - return mDecodePriority; + priority = -1.f; //stop fetching } } else if (cur_discard < 0) diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index adac4b9b40..e7d64c48a0 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1351,7 +1351,8 @@ LLViewerWindow::LLViewerWindow( mStatesDirty(false), mIsFullscreenChecked(false), mCurrResolutionIndex(0), - mViewerWindowListener(new LLViewerWindowListener(this)) + mViewerWindowListener(new LLViewerWindowListener(this)), + mProgressView(NULL) { LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert")); LLNotificationChannel::buildChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal")); @@ -1588,8 +1589,7 @@ void LLViewerWindow::initBase() gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view"); // Add the progress bar view (startup view), which overrides everything - mProgressView = new LLProgressView(full_window); - getRootView()->addChild(mProgressView); + mProgressView = getRootView()->getChild<LLProgressView>("progress_view"); setShowProgress(FALSE); setProgressCancelButtonVisible(FALSE); diff --git a/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png Binary files differnew file mode 100644 index 0000000000..11f4871ad8 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index b1594816b2..a3e5361e76 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -247,6 +247,7 @@ with the same filename but different name <texture name="Inv_Landmark" file_name="icons/Inv_Landmark.png" preload="false" /> <texture name="Inv_Notecard" file_name="icons/Inv_Notecard.png" preload="false" /> <texture name="Inv_Object" file_name="icons/Inv_Object.png" preload="false" /> + <texture name="Inv_Object_Multi" file_name="icons/Inv_Object_Multi.png" preload="false" /> <texture name="Inv_Pants" file_name="icons/Inv_Pants.png" preload="false" /> <texture name="Inv_Script" file_name="icons/Inv_Script.png" preload="false" /> <texture name="Inv_Shirt" file_name="icons/Inv_Shirt.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 961bd6b5e4..e02d32596a 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -182,7 +182,7 @@ width="180" layout="topleft" name="buy_action"> - [NAME] L$ [PRICE] + [ACTION] </text> <text type="string" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 85853f39bb..1ace760816 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -143,12 +143,19 @@ <panel mouse_opaque="false" follows="left|right|top" name="status_bar_container" - tab_stop="false" + tab_stop="false" height="19" left="0" top="0" width="1024" visible="false"/> + <view mouse_opaque="false" + follows="all" + name="menu_bar_holder" + left="0" + top="0" + width="1024" + height="768"/> <notify_box_view top="0" follows="all" height="768" @@ -159,6 +166,15 @@ <panel top="0" follows="all" height="768" + mouse_opaque="true" + name="progress_view" + filename="panel_progress.xml" + class="progress_view" + width="1024" + visible="false"/> + <panel top="0" + follows="all" + height="768" mouse_opaque="false" name="popup_holder" class="popup_holder" diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml index 072ea882e6..d3f6695375 100644 --- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml @@ -39,7 +39,13 @@ name="blocked" tool_tip="List of currently blocked Residents" top="30" - width="270" /> + width="270"> + <scroll_list.columns + name="item_name" /> + <scroll_list.columns + name="item_type" + width="96" /> + </scroll_list> <button follows="left|bottom" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index 19c0da4f08..0eb5c47f85 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -385,7 +385,7 @@ things in this group. There's a broad variety of Abilities. left="0" follows="left|top|right" right="-1" - max_length="295" + max_length="20" name="role_name" top_pad="0" width="300"> @@ -408,7 +408,7 @@ things in this group. There's a broad variety of Abilities. left="0" follows="left|top|right" right="-1" - max_length="295" + max_length="20" name="role_title" top_pad="0" width="300"> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 627e616af5..d1e0746d9d 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -216,7 +216,7 @@ height="16" name="login_help" top_pad="2" right="-10" - width="180"> + width="190"> Need help logging in? </text> <!-- <text follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index c658e0de6f..e604e401f6 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -164,7 +164,7 @@ Automatic position for: label="Opacity" layout="topleft" left="80" - label_width="50" + label_width="60" name="bubble_chat_opacity" width="200" /> <color_swatch 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 15f8b33f5b..fe882730f4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -283,7 +283,7 @@ layout="topleft" left_delta="0" name="external" - value="true" + value="1" tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen." top_delta="20" width="480" /> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 412485e03f..9fcabc7722 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -311,12 +311,15 @@ height="23" label="Add Friend" layout="topleft" - left="2" + left="1" mouse_opaque="false" name="add_friend" + pad_left="1" + pad_right="1" tool_tip="Offer friendship to the Resident" top="5" - width="80" /> + use_ellipses="true" + width="105" /> <button follows="bottom|left" height="23" @@ -325,8 +328,8 @@ name="im" tool_tip="Open instant message session" top="5" - left_pad="3" - width="39" /> + left_pad="0" + width="19" /> <button follows="bottom|left" height="23" @@ -334,9 +337,12 @@ layout="topleft" name="call" tool_tip="Call this Resident" - left_pad="3" + left_pad="0" + pad_left="1" + pad_right="1" top="5" - width="43" /> + use_ellipses="true" + width="48" /> <button enabled="false" follows="bottom|left" @@ -344,10 +350,13 @@ label="Map" layout="topleft" name="show_on_map_btn" + pad_left="1" + pad_right="1" tool_tip="Show the Resident on the map" top="5" - left_pad="3" - width="41" /> + left_pad="0" + use_ellipses="true" + width="33" /> <button follows="bottom|left" height="23" @@ -355,9 +364,12 @@ layout="topleft" name="teleport" tool_tip="Offer teleport" - left_pad="3" + left_pad="0" + pad_left="1" + pad_right="1" top="5" - width="69" /> + use_ellipses="true" + width="81" /> <button follows="bottom|right" height="23" @@ -367,7 +379,6 @@ tool_tip="Pay money to or share inventory with the Resident" right="-1" top="5" - left_pad="3" width="23" /> </layout_panel> <layout_panel 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 0c870e155b..84664eedcc 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -94,10 +94,10 @@ <button follows="right|top" height="16" - image_selected="Pause_Off" - image_unselected="Play_Off" - image_pressed="Play_Press" - image_pressed_selected="Pause_Press" + image_selected="Play_Off" + image_unselected="Pause_Off" + image_pressed="Pause_Press" + image_pressed_selected="Play_Press" is_toggle="true" left_pad="15" top="1" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3a766bb798..47386bd332 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2202,7 +2202,8 @@ Clears (deletes) the media and all params from the given face. <!-- Viewer menu --> <string name="AcquiredItems">Acquired Items</string> <string name="Cancel">Cancel</string> - <string name="UploadingCosts">Uploading %s costs</string> + <string name="UploadingCosts">Uploading [NAME] costs L$ [AMOUNT]</string> + <string name="BuyingCosts">Buying this costs L$ [AMOUNT]</string> <string name="UnknownFileExtension"> Unknown file extension .%s Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh @@ -3050,14 +3051,48 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <!-- Financial operations strings --> <string name="paid_you_ldollars">[NAME] paid you L$[AMOUNT]</string> - <string name="giving">Giving</string> - <string name="uploading_costs">Uploading costs</string> - <string name="this_costs">This costs</string> - <string name="buying_selected_land">Buying selected land</string> - <string name="this_object_costs">This object costs"</string> + <string name="you_paid_ldollars">You paid [NAME] L$[AMOUNT] [REASON].</string> + <string name="you_paid_ldollars_no_reason">You paid [NAME] L$[AMOUNT].</string> + <string name="you_paid_ldollars_no_name">You paid L$[AMOUNT] [REASON].</string> + <string name="for a parcel of land">for a parcel of land</string> + <string name="for a land access pass">for a land access pass</string> + <string name="for deeding land">for deeding land</string> + <string name="to create a group">to create a group</string> + <string name="to join a group">to join a group</string> + <string name="to upload">to upload</string> + + <string name="giving">Giving L$ [AMOUNT]</string> + <string name="uploading_costs">Uploading costs L$ [AMOUNT]</string> + <string name="this_costs">This costs L$ [AMOUNT]</string> + <string name="buying_selected_land">Buying selected land L$ [AMOUNT]</string> + <string name="this_object_costs">This object costs L$ [AMOUNT]</string> <string name="group_role_everyone">Everyone</string> <string name="group_role_officers">Officers</string> <string name="group_role_owners">Owners</string> + <string name="uploading_abuse_report">Uploading... + +Abuse Report</string> + + <!-- names for new inventory items--> + <string name="New Shape">New Shape</string> + <string name="New Skin">New Skin</string> + <string name="New Hair">New Hair</string> + <string name="New Eyes">New Eyes</string> + <string name="New Shirt">New Shirt</string> + <string name="New Pants">New Pants</string> + <string name="New Shoes">New Shoes</string> + <string name="New Socks">New Socks</string> + <string name="New Jacket">New Jacket</string> + <string name="New Gloves">New Gloves</string> + <string name="New Undershirt">New Undershirt</string> + <string name="New Underpants">New Underpants</string> + <string name="New Skirt">New Skirt</string> + <string name="New Alpha">New Alpha</string> + <string name="New Tattoo">New Tattoo</string> + <string name="Invalid Wearable">Invalid Wearable</string> + <string name="New Script">New Script</string> + <string name="New Folder">New Folder</string> + <string name="Contents">Contents</string> </strings> diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index b5acd6299a..16ed27817e 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -449,6 +449,9 @@ musique : <panel.string name="access_estate_defined"> (défini par le domaine </panel.string> + <panel.string name="allow_public_access"> + Autoriser l'accès public ([MATURITY]) + </panel.string> <panel.string name="estate_override"> Au moins une de ces options est définie au niveau du domaine. </panel.string> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml index f234529764..0bbcbe833f 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Modifier la préférence" name="panel_edit_pick"> + <panel.string name="location_notice"> + (mise à jour après enregistrement) + </panel.string> <text name="title"> Modifier la préférence </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Enregistrer [WHAT]" name="save_changes_btn"/> + <button label="Enregistrer" name="save_changes_btn"/> <button label="Annuler" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml index 5faba01339..1a4450cccc 100644 --- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Choses" name="main inventory panel"> - <panel.string name="Title"> - Choses + <panel.string name="ItemcountFetching"> + Récupération de [ITEM_COUNT] objets... [FILTER] </panel.string> - <filter_editor label="Filtrer l'inventaire" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="MON INVENTAIRE" name="All Items"/> - <inventory_panel label="RÉCENT" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Afficher d'autres options"/> - <button name="add_btn" tool_tip="Ajouter un nouvel article"/> - <dnd_button name="trash_btn" tool_tip="Supprimer l'article sélectionné"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] objets [FILTER] + </panel.string> + <text name="ItemcountText"> + Objets : + </text> <menu_bar name="Inventory Menu"> <menu label="Fichier" name="File"> <menu_item_call label="Ouvrir" name="Open"/> @@ -61,4 +57,14 @@ <menu_item_check label="Dossiers système en premier" name="System Folders To Top"/> </menu> </menu_bar> + <filter_editor label="Filtrer l'inventaire" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="MON INVENTAIRE" name="All Items"/> + <inventory_panel label="RÉCENT" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Afficher d'autres options"/> + <button name="add_btn" tool_tip="Ajouter un nouvel article"/> + <dnd_button name="trash_btn" tool_tip="Supprimer l'article sélectionné"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml index a1c4c92618..6bf8a94c68 100644 --- a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml @@ -19,10 +19,17 @@ <button label="Plus >>" label_selected="Moins <<" name="more_less_btn" tool_tip="Options avancées"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media"> + Média près de vous + </text> + <text name="show"> + Afficher : + </text> <combo_box name="show_combo"> <combo_box.item label="Tout" name="All"/> <combo_box.item label="Dans cette parcelle" name="WithinParcel"/> <combo_box.item label="En dehors de la parcelle" name="OutsideParcel"/> + <combo_box.item label="Sur les autres avatars" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> <scroll_list.columns label="Proximité" name="media_proximity"/> @@ -31,19 +38,19 @@ <scroll_list.columns label="Nom" name="media_name"/> <scroll_list.columns label="Débogage" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Arrêter le média sélectionné"/> </layout_panel> <layout_panel name="play"> - <button name="play_btn" tool_tip="Jouer le média sélectionné"/> + <button name="play_btn" tool_tip="Lire le média sélectionné"/> </layout_panel> <layout_panel name="pause"> - <button name="pause_btn" tool_tip="Pauser le média sélectionné"/> + <button name="pause_btn" tool_tip="Suspendre la lecture du média sélectionné"/> </layout_panel> <layout_panel name="volume_slider_ctrl"> - <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio pour le média sélectionné"/> + <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio du média sélectionné"/> </layout_panel> <layout_panel name="mute"> <button name="mute_btn" tool_tip="Couper l'audio sur le média sélectionné"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml index b47ed4bd8b..f8ecfbedac 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -3,6 +3,9 @@ <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string name="middle_mouse"> + Bouton central de la souris + </panel.string> <slider label="Angle de vue" name="camera_fov"/> <slider label="Distance" name="camera_offset_scale"/> <text name="heading2"> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml index 7e6e96aa49..64635fbac0 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml @@ -46,6 +46,12 @@ <check_box initial_value="true" label="Jouer l'animation clavier quand vous écrivez" name="play_typing_animation"/> <check_box label="M'envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/> <check_box label="Activer l'historique des chats en texte brut" name="plain_text_chat_history"/> + <text name="show_ims_in_label"> + Afficher les IM dans : + </text> + <text name="requires_restart_label"> + (redémarrage requis) + </text> <radio_group name="chat_window" tool_tip="Afficher vos messages instantanés dans plusieurs fenêtres ou dans une seule fenêtre avec plusieurs onglets (redémarrage requis)"> <radio_item label="Plusieurs fenêtres" name="radio" value="0"/> <radio_item label="Onglets" name="radio2" value="1"/> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 32aff9dd79..ac78790807 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -23,7 +23,22 @@ Détection du matériel... </string> <string name="StartupLoading"> - Chargement + Chargement de [APP_NAME]... + </string> + <string name="StartupClearingCache"> + Vidage du cache... + </string> + <string name="StartupInitializingTextureCache"> + Initialisation du cache des textures... + </string> + <string name="StartupInitializingVFS"> + Initialisation VFS… + </string> + <string name="ProgressRestoring"> + Restauration... + </string> + <string name="ProgressChangingResolution"> + Changement de la résolution... </string> <string name="Fullbright"> Fullbright (Legacy) @@ -88,6 +103,9 @@ <string name="LoginFailedNoNetwork"> Erreur réseau : impossible d'établir la connexion. Veuillez vérifier votre connexion réseau. </string> + <string name="LoginFailed"> + Échec de la connexion. + </string> <string name="Quit"> Quitter </string> @@ -97,6 +115,24 @@ <string name="AgentLostConnection"> Il y a peut-être des problèmes techniques dans cette région. Veuillez vérifier votre connexion Internet. </string> + <string name="SavingSettings"> + Enregistrement des paramètres... + </string> + <string name="LoggingOut"> + Déconnexion... + </string> + <string name="ShuttingDown"> + Arrêt en cours... + </string> + <string name="YouHaveBeenDisconnected"> + Vous avez été déconnecté de la région où vous étiez. + </string> + <string name="SentToInvalidRegion"> + Vous avez été transféré vers une région non valide. + </string> + <string name="TestingDisconnect"> + Test de déconnexion du client + </string> <string name="TooltipPerson"> Personne </string> @@ -151,6 +187,24 @@ <string name="TooltipAgentUrl"> Cliquez pour afficher le profil de ce résident </string> + <string name="TooltipAgentMute"> + Cliquer pour ignorer ce résident + </string> + <string name="TooltipAgentUnmute"> + Cliquer pour ne plus ignorer ce résident + </string> + <string name="TooltipAgentIM"> + Cliquer pour envoyer un IM à ce résident + </string> + <string name="TooltipAgentPay"> + Cliquer pour payer ce résident + </string> + <string name="TooltipAgentOfferTeleport"> + Cliquer pour proposer une téléportation à ce résident + </string> + <string name="TooltipAgentRequestFriend"> + Cliquer pour demander à ce résident d'être votre ami + </string> <string name="TooltipGroupUrl"> Cliquez pour afficher la description de ce groupe </string> @@ -176,12 +230,31 @@ Cliquez pour exécuter la commande secondlife:// command </string> <string name="CurrentURL" value=" URL actuelle : [CurrentURL]"/> + <string name="TooltipPrice" value="[PRICE] L$-"/> <string name="SLurlLabelTeleport"> Me téléporter vers </string> <string name="SLurlLabelShowOnMap"> Afficher la carte pour </string> + <string name="SLappAgentMute"> + Ignorer + </string> + <string name="SLappAgentUnmute"> + Ne plus ignorer + </string> + <string name="SLappAgentIM"> + IM + </string> + <string name="SLappAgentPay"> + Payer + </string> + <string name="SLappAgentOfferTeleport"> + Proposer une téléportation à + </string> + <string name="SLappAgentRequestFriend"> + Demande d'amitié + </string> <string name="BUTTON_CLOSE_DARWIN"> Fermer (⌘W) </string> @@ -335,6 +408,9 @@ <string name="symbolic link"> lien </string> + <string name="symbolic folder link"> + lien du dossier + </string> <string name="AvatarEditingAppearance"> (Apparence en cours de modification) </string> @@ -849,6 +925,7 @@ Aucun contenu </string> <string name="WornOnAttachmentPoint" value=" (porté sur [ATTACHMENT_POINT])"/> + <string name="ActiveGesture" value="[GESLABEL] (actif)"/> <string name="PermYes"> Oui </string> @@ -948,6 +1025,9 @@ <string name="InvFolder My Outfits"> Mes tenues </string> + <string name="InvFolder Accessories"> + Accessoires + </string> <string name="InvFolder Friends"> Amis </string> @@ -1471,6 +1551,9 @@ <string name="PanelContentsNewScript"> Nouveau script </string> + <string name="PanelContentsTooltip"> + Contenu de l'objet + </string> <string name="BusyModeResponseDefault"> Le résident auquel vous avez envoyé un message est en mode Occupé, ce qui signifie qu'il a demandé à ne pas être dérangé. Votre message restera affiché dans son panneau IM afin qu'il puisse le lire ultérieurement. </string> @@ -3375,4 +3458,31 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. <string name="unread_chat_multiple"> [SOURCES] ont dit quelque chose de nouveau </string> + <string name="paid_you_ldollars"> + [NAME] vous a payé [AMOUNT] L$ + </string> + <string name="giving"> + Giving + </string> + <string name="uploading_costs"> + Chargement des coûts + </string> + <string name="this_costs"> + This costs + </string> + <string name="buying_selected_land"> + Achat du terrain sélectionné + </string> + <string name="this_object_costs"> + This object costs" + </string> + <string name="group_role_everyone"> + Tous + </string> + <string name="group_role_officers"> + Officiers + </string> + <string name="group_role_owners"> + Propriétaires + </string> </strings> diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml index 0e1e2851e3..1fe6ad25ed 100644 --- a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml @@ -67,7 +67,7 @@ <button name="close_btn" tool_tip="Zoom Back"/> </layout_panel> <layout_panel name="new_window"> - <button name="new_window_btn" tool_tip="URLをブラウザで開く"/> + <button name="new_window_btn" tool_tip="URL をブラウザで開く"/> </layout_panel> </layout_stack> </panel> |