diff options
72 files changed, 930 insertions, 591 deletions
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index bd334a6654..41ff5849f4 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1225,17 +1225,32 @@ namespace LLError char** LLCallStacks::sBuffer = NULL ; S32 LLCallStacks::sIndex = 0 ; +#define SINGLE_THREADED 1 + class CallStacksLogLock { public: CallStacksLogLock(); ~CallStacksLogLock(); + +#if SINGLE_THREADED + bool ok() const { return true; } +#else bool ok() const { return mOK; } private: bool mLocked; bool mOK; +#endif }; +#if SINGLE_THREADED + CallStacksLogLock::CallStacksLogLock() + { + } + CallStacksLogLock::~CallStacksLogLock() + { + } +#else CallStacksLogLock::CallStacksLogLock() : mLocked(false), mOK(false) { @@ -1271,6 +1286,7 @@ namespace LLError apr_thread_mutex_unlock(gCallStacksLogMutexp); } } +#endif //static void LLCallStacks::push(const char* function, const int line) diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp index 2629237f7e..a29e9a348e 100644 --- a/indra/llcommon/llworkerthread.cpp +++ b/indra/llcommon/llworkerthread.cpp @@ -404,7 +404,7 @@ void LLWorkerClass::scheduleDelete() void LLWorkerClass::setPriority(U32 priority) { mMutex.lock(); - if (mRequestHandle != LLWorkerThread::nullHandle()) + if (mRequestHandle != LLWorkerThread::nullHandle() && mRequestPriority != priority) { mRequestPriority = priority; mWorkerThread->setPriority(mRequestHandle, priority); diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 0c9b325b68..41ace62964 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -57,11 +57,15 @@ LLPluginClassMedia::LLPluginClassMedia(LLPluginClassMediaOwner *owner) mOwner = owner; mPlugin = NULL; reset(); + + //debug use + mDeleteOK = true ; } LLPluginClassMedia::~LLPluginClassMedia() { + llassert_always(mDeleteOK) ; reset(); } diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index 8c7b00f45b..66853c9940 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -373,6 +373,14 @@ protected: F64 mCurrentRate; F64 mLoadedDuration; +//-------------------------------------- + //debug use only + // +private: + bool mDeleteOK ; +public: + void setDeleteOK(bool flag) { mDeleteOK = flag ;} +//-------------------------------------- }; #endif // LL_LLPLUGINCLASSMEDIA_H diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index ec247b25c3..bea2572ff8 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -297,6 +297,27 @@ void LLFlatListView::setNoItemsCommentText(const std::string& comment_text) mNoItemsCommentTextbox->setValue(comment_text); } +U32 LLFlatListView::size(const bool only_visible_items) const +{ + if (only_visible_items) + { + U32 size = 0; + for (pairs_const_iterator_t + iter = mItemPairs.begin(), + iter_end = mItemPairs.end(); + iter != iter_end; ++iter) + { + if ((*iter)->first->getVisible()) + ++size; + } + return size; + } + else + { + return mItemPairs.size(); + } +} + void LLFlatListView::clear() { // do not use LLView::deleteAllChildren to avoid removing nonvisible items. drag-n-drop for ex. @@ -426,7 +447,7 @@ void LLFlatListView::rearrangeItems() { static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); - setNoItemsCommentVisible(mItemPairs.empty()); + setNoItemsCommentVisible(0==size()); if (mItemPairs.empty()) return; @@ -745,19 +766,43 @@ LLRect LLFlatListView::getLastSelectedItemRect() void LLFlatListView::selectFirstItem () { // No items - no actions! - if (mItemPairs.empty()) return; + if (0 == size()) return; - selectItemPair(mItemPairs.front(), true); - ensureSelectedVisible(); + // Select first visible item + for (pairs_iterator_t + iter = mItemPairs.begin(), + iter_end = mItemPairs.end(); + iter != iter_end; ++iter) + { + // skip invisible items + if ( (*iter)->first->getVisible() ) + { + selectItemPair(*iter, true); + ensureSelectedVisible(); + break; + } + } } void LLFlatListView::selectLastItem () { // No items - no actions! - if (mItemPairs.empty()) return; + if (0 == size()) return; - selectItemPair(mItemPairs.back(), true); - ensureSelectedVisible(); + // Select last visible item + for (pairs_list_t::reverse_iterator + r_iter = mItemPairs.rbegin(), + r_iter_end = mItemPairs.rend(); + r_iter != r_iter_end; ++r_iter) + { + // skip invisible items + if ( (*r_iter)->first->getVisible() ) + { + selectItemPair(*r_iter, true); + ensureSelectedVisible(); + break; + } + } } void LLFlatListView::ensureSelectedVisible() @@ -775,14 +820,14 @@ void LLFlatListView::ensureSelectedVisible() bool LLFlatListView::selectNextItemPair(bool is_up_direction, bool reset_selection) { // No items - no actions! - if ( !mItemPairs.size() ) + if ( 0 == size() ) return false; - - item_pair_t* to_sel_pair = NULL; - item_pair_t* cur_sel_pair = NULL; if ( mSelectedItemPairs.size() ) { + item_pair_t* to_sel_pair = NULL; + item_pair_t* cur_sel_pair = NULL; + // Take the last selected pair cur_sel_pair = mSelectedItemPairs.back(); // Bases on given direction choose next item to select @@ -816,42 +861,42 @@ bool LLFlatListView::selectNextItemPair(bool is_up_direction, bool reset_selecti } } } + + if ( to_sel_pair ) + { + bool select = true; + if ( reset_selection ) + { + // Reset current selection if we were asked about it + resetSelection(); + } + else + { + // If item already selected and no reset request than we should deselect last selected item. + select = (mSelectedItemPairs.end() == std::find(mSelectedItemPairs.begin(), mSelectedItemPairs.end(), to_sel_pair)); + } + // Select/Deselect next item + selectItemPair(select ? to_sel_pair : cur_sel_pair, select); + return true; + } } else { // If there weren't selected items then choose the first one bases on given direction - cur_sel_pair = (is_up_direction) ? mItemPairs.back() : mItemPairs.front(); // Force selection to first item - to_sel_pair = cur_sel_pair; - } - - - if ( to_sel_pair ) - { - bool select = true; - - if ( reset_selection ) - { - // Reset current selection if we were asked about it - resetSelection(); - } + if (is_up_direction) + selectLastItem(); else - { - // If item already selected and no reset request than we should deselect last selected item. - select = (mSelectedItemPairs.end() == std::find(mSelectedItemPairs.begin(), mSelectedItemPairs.end(), to_sel_pair)); - } - - // Select/Deselect next item - selectItemPair(select ? to_sel_pair : cur_sel_pair, select); - + selectFirstItem(); return true; } + return false; } BOOL LLFlatListView::canSelectAll() const { - return !mItemPairs.empty() && mAllowSelection && mMultipleSelection; + return 0 != size() && mAllowSelection && mMultipleSelection; } void LLFlatListView::selectAll() @@ -1167,4 +1212,51 @@ void LLFlatListViewEx::updateNoItemsMessage(const std::string& filter_string) } +void LLFlatListViewEx::setFilterSubString(const std::string& filter_str) +{ + if (0 != LLStringUtil::compareInsensitive(filter_str, mFilterSubString)) + { + mFilterSubString = filter_str; + updateNoItemsMessage(mFilterSubString); + filterItems(); + } +} + +void LLFlatListViewEx::filterItems() +{ + typedef std::vector <LLPanel*> item_panel_list_t; + + std::string cur_filter = mFilterSubString; + LLStringUtil::toUpper(cur_filter); + + LLSD action; + action.with("match_filter", cur_filter); + + item_panel_list_t items; + getItems(items); + + for (item_panel_list_t::iterator + iter = items.begin(), + iter_end = items.end(); + iter != iter_end; ++iter) + { + LLPanel* pItem = (*iter); + // 0 signifies that filter is matched, + // i.e. we don't hide items that don't support 'match_filter' action, separators etc. + if (0 == pItem->notify(action)) + { + pItem->setVisible(true); + } + else + { + // TODO: implement (re)storing of current selection. + selectItem(pItem, false); + pItem->setVisible(false); + } + } + + rearrangeItems(); + notifyParentItemsRectChanged(); +} + //EOF diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 4f718ab0dc..6395805aab 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -264,9 +264,8 @@ public: /** Get number of selected items in the list */ U32 numSelected() const {return mSelectedItemPairs.size(); } - /** Get number of items in the list */ - U32 size() const { return mItemPairs.size(); } - + /** Get number of (visible) items in the list */ + U32 size(const bool only_visible_items = true) const; /** Removes all items from the list */ virtual void clear(); @@ -464,6 +463,17 @@ public: void setNoItemsMsg(const std::string& msg) { mNoItemsMsg = msg; } void setNoFilteredItemsMsg(const std::string& msg) { mNoFilteredItemsMsg = msg; } + /** + * Sets up new filter string and filters the list. + */ + void setFilterSubString(const std::string& filter_str); + + /** + * Filters the list, rearranges and notifies parent about shape changes. + * Derived classes may want to overload rearrangeItems() to exclude repeated separators after filtration. + */ + void filterItems(); + protected: LLFlatListViewEx(const Params& p); @@ -478,6 +488,7 @@ protected: private: std::string mNoFilteredItemsMsg; std::string mNoItemsMsg; + std::string mFilterSubString; }; #endif diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index a96ad7e796..f8fde0319e 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2881,10 +2881,13 @@ void LLSplashScreenWin32::updateImpl(const std::string& mesg) if( output_str_len>1024 ) return; - WCHAR w_mesg[1024]; + WCHAR w_mesg[1025];//big enought to keep null terminatos MultiByteToWideChar (CP_UTF8, 0, mesg.c_str(), mesg.length(), w_mesg, output_str_len); + //looks like MultiByteToWideChar didn't add null terminator to converted string, see EXT-4858 + w_mesg[output_str_len] = 0; + SendDlgItemMessage(mWindow, 666, // HACK: text id WM_SETTEXT, diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6cc06bab09..65cd91e770 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3467,6 +3467,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>FullScreen</key> + <map> + <key>Comment</key> + <string>Run SL in fullscreen mode</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>FullScreenAspectRatio</key> <map> <key>Comment</key> @@ -7985,17 +7996,6 @@ <key>Value</key> <integer>0</integer> </map> - <key>ShowDebugAppearanceEditor</key> - <map> - <key>Comment</key> - <string>Show debugging appearance editor</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>0</integer> - </map> <key>ShowEmptyFoldersWhenSearching</key> <map> <key>Comment</key> @@ -10715,17 +10715,6 @@ <key>Value</key> <integer>1</integer> </map> - <key>WindowFullScreen</key> - <map> - <key>Comment</key> - <string>Run SL in fullscreen mode</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>0</integer> - </map> <key>WindowHeight</key> <map> <key>Comment</key> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 4f7c0c3549..8db0388c64 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2400,7 +2400,7 @@ bool LLAppViewer::initWindow() LLNotificationsUI::LLNotificationManager::getInstance(); - if (gSavedSettings.getBOOL("WindowFullScreen")) + if (gSavedSettings.getBOOL("FullScreen")) { // request to go full screen... which will be delayed until login gViewerWindow->toggleFullscreen(FALSE); @@ -3953,9 +3953,7 @@ void LLAppViewer::idleNetwork() { LLMemType mt_in(LLMemType::MTYPE_IDLE_NETWORK); pingMainloopTimeout("idleNetwork"); - LLError::LLCallStacks::clear() ; - llpushcallstacks ; - + gObjectList.mNumNewObjects = 0; S32 total_decoded = 0; @@ -3965,7 +3963,6 @@ void LLAppViewer::idleNetwork() // deal with any queued name requests and replies. gCacheName->processPending(); - llpushcallstacks ; LLTimer check_message_timer; // Read all available packets from network const S64 frame_count = gFrameCount; // U32->S64 @@ -4035,16 +4032,13 @@ void LLAppViewer::idleNetwork() gPrintMessagesThisFrame = FALSE; } } - llpushcallstacks ; LLViewerStats::getInstance()->mNumNewObjectsStat.addValue(gObjectList.mNumNewObjects); // Retransmit unacknowledged packets. gXferManager->retransmitUnackedPackets(); gAssetStorage->checkForTimeouts(); - llpushcallstacks ; gViewerThrottle.updateDynamicThrottle(); - llpushcallstacks ; // Check that the circuit between the viewer and the agent's current // region is still alive LLViewerRegion *agent_region = gAgent.getRegion(); @@ -4060,7 +4054,6 @@ void LLAppViewer::idleNetwork() mAgentRegionLastID = this_region_id; mAgentRegionLastAlive = this_region_alive; } - llpushcallstacks ; } void LLAppViewer::disconnectViewer() diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index b8222ebb18..1925b818f2 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -34,10 +34,13 @@ #include "llcofwearables.h" +#include "llagentdata.h" #include "llappearancemgr.h" #include "llinventory.h" -#include "llinventoryitemslist.h" #include "llinventoryfunctions.h" +#include "llwearableitemslist.h" + +static LLRegisterPanelClassWrapper<LLCOFAccordionListAdaptor> t_cof_accodion_list_adaptor("accordion_list_adaptor"); static LLRegisterPanelClassWrapper<LLCOFWearables> t_cof_wearables("cof_wearables"); @@ -89,9 +92,18 @@ void LLCOFWearables::onSelectionChange(LLFlatListView* selected_list) onCommit(); } -#include "llwearableitemslist.h" void LLCOFWearables::refresh() { + typedef std::vector<LLSD> values_vector_t; + typedef std::map<LLFlatListView*, values_vector_t> selection_map_t; + + selection_map_t preserve_selection; + + // Save current selection + mAttachments->getSelectedValues(preserve_selection[mAttachments]); + mClothing->getSelectedValues(preserve_selection[mClothing]); + mBodyParts->getSelectedValues(preserve_selection[mBodyParts]); + clear(); LLInventoryModel::cat_array_t cats; @@ -106,6 +118,23 @@ void LLCOFWearables::refresh() LLAppearanceMgr::getInstance()->divvyWearablesByType(cof_items, clothing_by_type); populateClothingList(clothing_by_type); + + // Restore previous selection + for (selection_map_t::iterator + iter = preserve_selection.begin(), + iter_end = preserve_selection.end(); + iter != iter_end; ++iter) + { + LLFlatListView* list = iter->first; + const values_vector_t& values = iter->second; + for (values_vector_t::const_iterator + value_it = values.begin(), + value_it_end = values.end(); + value_it != value_it_end; ++value_it) + { + list->selectItemByValue(*value_it); + } + } } @@ -126,9 +155,10 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel } else if (item_type == LLAssetType::AT_BODYPART) { - item_panel = LLPanelBodyPartsListItem::create(item); + item_panel = buildBodypartListItem(item); + if (!item_panel) continue; + mBodyParts->addItem(item_panel, item->getUUID(), ADD_BOTTOM, false); - addWearableTypeSeparator(mBodyParts); } } @@ -143,17 +173,69 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel mBodyParts->sort(); //*TODO by name } - addListButtonBar(mBodyParts, "panel_bodyparts_list_button_bar.xml"); mBodyParts->notify(REARRANGE); } +//create a clothing list item, update verbs and show/hide line separator +LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last) +{ + llassert(item); + + LLPanelClothingListItem* item_panel = LLPanelClothingListItem::create(item); + if (!item_panel) return NULL; + + //updating verbs + //we don't need to use permissions of a link but of an actual/linked item + if (item->getLinkedItem()) item = item->getLinkedItem(); + + bool allow_modify = item->getPermissions().allowModifyBy(gAgentID); + + item_panel->setShowLockButton(!allow_modify); + item_panel->setShowEditButton(allow_modify); + + item_panel->setShowMoveUpButton(!first); + item_panel->setShowMoveDownButton(!last); + + //setting callbacks + //*TODO move that item panel's inner structure disclosing stuff into the panels + item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable); + item_panel->childSetAction("btn_move_up", mCOFCallbacks.mMoveWearableCloser); + item_panel->childSetAction("btn_move_down", mCOFCallbacks.mMoveWearableFurther); + item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable); + + //turning on gray separator line for the last item in the items group of the same wearable type + item_panel->childSetVisible("wearable_type_separator_panel", last); + + return item_panel; +} + +LLPanelBodyPartsListItem* LLCOFWearables::buildBodypartListItem(LLViewerInventoryItem* item) +{ + llassert(item); + + LLPanelBodyPartsListItem* item_panel = LLPanelBodyPartsListItem::create(item); + if (!item_panel) return NULL; + + //updating verbs + //we don't need to use permissions of a link but of an actual/linked item + if (item->getLinkedItem()) item = item->getLinkedItem(); + + bool allow_modify = item->getPermissions().allowModifyBy(gAgentID); + item_panel->setShowLockButton(!allow_modify); + item_panel->setShowEditButton(allow_modify); + + //setting callbacks + //*TODO move that item panel's inner structure disclosing stuff into the panels + item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable); + item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable); + + return item_panel; +} void LLCOFWearables::populateClothingList(LLAppearanceMgr::wearables_by_type_t& clothing_by_type) { llassert(clothing_by_type.size() == WT_COUNT); - addListButtonBar(mClothing, "panel_clothing_list_button_bar.xml"); - for (U32 type = WT_SHIRT; type < WT_COUNT; ++type) { U32 size = clothing_by_type[type].size(); @@ -165,13 +247,11 @@ void LLCOFWearables::populateClothingList(LLAppearanceMgr::wearables_by_type_t& { LLViewerInventoryItem* item = clothing_by_type[type][i]; - LLPanelInventoryListItemBase* item_panel = LLPanelClothingListItem::create(item); + LLPanelClothingListItem* item_panel = buildClothingListItem(item, i == 0, i == size - 1); if (!item_panel) continue; mClothing->addItem(item_panel, item->getUUID(), ADD_BOTTOM, false); } - - addWearableTypeSeparator(mClothing); } addClothingTypesDummies(clothing_by_type); @@ -179,21 +259,6 @@ void LLCOFWearables::populateClothingList(LLAppearanceMgr::wearables_by_type_t& mClothing->notify(REARRANGE); } -void LLCOFWearables::addListButtonBar(LLFlatListView* list, std::string xml_filename) -{ - llassert(list); - llassert(xml_filename.length()); - - LLPanel::Params params; - LLPanel* button_bar = LLUICtrlFactory::create<LLPanel>(params); - LLUICtrlFactory::instance().buildPanel(button_bar, xml_filename); - - LLRect rc = button_bar->getRect(); - button_bar->reshape(list->getItemsRect().getWidth(), rc.getHeight()); - - list->addItem(button_bar, LLUUID::null, ADD_TOP, false); -} - //adding dummy items for missing wearable types void LLCOFWearables::addClothingTypesDummies(const LLAppearanceMgr::wearables_by_type_t& clothing_by_type) { @@ -208,26 +273,9 @@ void LLCOFWearables::addClothingTypesDummies(const LLAppearanceMgr::wearables_by LLPanelInventoryListItemBase* item_panel = LLPanelDummyClothingListItem::create(w_type); if(!item_panel) continue; mClothing->addItem(item_panel, LLUUID::null, ADD_BOTTOM, false); - addWearableTypeSeparator(mClothing); } } -void LLCOFWearables::addWearableTypeSeparator(LLFlatListView* list) -{ - llassert(list); - - static LLXMLNodePtr separator_xml_node = getXMLNode("panel_wearable_type_separator.xml"); - if (separator_xml_node->isNull()) return; - - LLPanel* separator = LLUICtrlFactory::defaultBuilder<LLPanel>(separator_xml_node, NULL, NULL); - - LLRect rc = separator->getRect(); - rc.setOriginAndSize(0, 0, list->getItemsRect().getWidth(), rc.getHeight()); - separator->setRect(rc); - - list->addItem(separator, LLUUID::null, ADD_BOTTOM, false); -} - LLUUID LLCOFWearables::getSelectedUUID() { if (!mLastSelectedList) return LLUUID::null; @@ -242,17 +290,4 @@ void LLCOFWearables::clear() mBodyParts->clear(); } -LLXMLNodePtr LLCOFWearables::getXMLNode(std::string xml_filename) -{ - LLXMLNodePtr xmlNode = NULL; - bool success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, xmlNode); - if (!success) - { - llwarning("Failed to read xml", 0); - return NULL; - } - - return xmlNode; -} - //EOF diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h index fec6d34db2..2d26bf781f 100644 --- a/indra/newview/llcofwearables.h +++ b/indra/newview/llcofwearables.h @@ -36,12 +36,80 @@ #include "llpanel.h" #include "llinventorymodel.h" #include "llappearancemgr.h" +#include "llwearableitemslist.h" class LLFlatListView; +/** + * Adaptor between LLAccordionCtrlTab and LLFlatListView to facilitate communication between them + * (notify, notifyParent) regarding size changes of a list and selection changes across accordion tabs. + * Besides that it acts as a container for the LLFlatListView and a button bar on top of it. + */ +class LLCOFAccordionListAdaptor : public LLPanel +{ +public: + LLCOFAccordionListAdaptor() : LLPanel() {}; + ~LLCOFAccordionListAdaptor() {}; + + S32 notifyParent(const LLSD& info) + { + LLView* parent = getParent(); + if (!parent) return -1; + + if (!(info.has("action") && "size_changes" == info["action"].asString())) + { + return parent->notifyParent(info); + } + + LLRect rc; + childGetRect("button_bar", rc); + + LLSD params; + params["action"] = "size_changes"; + params["width"] = info["width"]; + params["height"] = info["height"].asInteger() + rc.getHeight(); + + return parent->notifyParent(params); + } + + + S32 notify(const LLSD& info) + { + for (child_list_const_iter_t iter = beginChild(); iter != endChild(); iter++) + { + if (dynamic_cast<LLFlatListView*>(*iter)) + { + return (*iter)->notify(info); + } + } + return LLPanel::notify(info); + }; +}; + + class LLCOFWearables : public LLPanel { public: + + /** + * Represents a collection of callbacks assigned to inventory panel item's buttons + */ + class LLCOFCallbacks + { + public: + LLCOFCallbacks() {}; + virtual ~LLCOFCallbacks() {}; + + typedef boost::function<void (void*)> cof_callback_t; + + cof_callback_t mMoveWearableCloser; + cof_callback_t mMoveWearableFurther; + cof_callback_t mEditWearable; + cof_callback_t mDeleteWearable; + }; + + + LLCOFWearables(); virtual ~LLCOFWearables() {}; @@ -52,17 +120,18 @@ public: void refresh(); void clear(); + LLCOFCallbacks& getCOFCallbacks() { return mCOFCallbacks; } + protected: void populateAttachmentsAndBodypartsLists(const LLInventoryModel::item_array_t& cof_items); void populateClothingList(LLAppearanceMgr::wearables_by_type_t& clothing_by_type); - void addListButtonBar(LLFlatListView* list, std::string xml_filename); void addClothingTypesDummies(const LLAppearanceMgr::wearables_by_type_t& clothing_by_type); - void addWearableTypeSeparator(LLFlatListView* list); void onSelectionChange(LLFlatListView* selected_list); - LLXMLNodePtr getXMLNode(std::string xml_filename); + LLPanelClothingListItem* buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last); + LLPanelBodyPartsListItem* buildBodypartListItem(LLViewerInventoryItem* item); LLFlatListView* mAttachments; LLFlatListView* mClothing; @@ -70,6 +139,8 @@ protected: LLFlatListView* mLastSelectedList; + LLCOFCallbacks mCOFCallbacks; + }; diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 4c1e3461a5..6b7a257a4b 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -1165,6 +1165,17 @@ void LLFavoritesBarCtrl::pastFromClipboard() const void LLFavoritesBarCtrl::onButtonMouseDown(LLUUID id, LLUICtrl* ctrl, S32 x, S32 y, MASK mask) { + // EXT-6997 (Fav bar: Pop-up menu for LM in overflow dropdown is kept after LM was dragged away) + // mInventoryItemsPopupMenuHandle.get() - is a pop-up menu (of items) in already opened dropdown menu. + // We have to check and set visibility of pop-up menu in such a way instead of using + // LLMenuHolderGL::hideMenus() because it will close both menus(dropdown and pop-up), but + // we need to close only pop-up menu while dropdown one should be still opened. + LLMenuGL* menu = (LLMenuGL*)mInventoryItemsPopupMenuHandle.get(); + if(menu && menu->getVisible()) + { + menu->setVisible(FALSE); + } + mDragItemId = id; mStartDrag = TRUE; diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index e2c5ad6d02..2ab83eab79 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1197,7 +1197,7 @@ void LLFloaterPreference::applyResolution() gSavedSettings.setS32("FullScreenWidth", supported_resolutions[resIndex].mWidth); gSavedSettings.setS32("FullScreenHeight", supported_resolutions[resIndex].mHeight); - gViewerWindow->requestResolutionUpdate(gSavedSettings.getBOOL("WindowFullScreen")); + gViewerWindow->requestResolutionUpdate(gSavedSettings.getBOOL("FullScreen")); send_agent_update(TRUE); diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp index 5b653638f2..47fe641680 100644 --- a/indra/newview/llhudrender.cpp +++ b/indra/newview/llhudrender.cpp @@ -78,8 +78,8 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent, LLVector3 up_axis; if (orthographic) { - right_axis.setVec(0.f, -1.f / gViewerWindow->getWorldViewHeightRaw(), 0.f); - up_axis.setVec(0.f, 0.f, 1.f / gViewerWindow->getWorldViewHeightRaw()); + right_axis.setVec(0.f, -1.f / gViewerWindow->getWorldViewHeightScaled(), 0.f); + up_axis.setVec(0.f, 0.f, 1.f / gViewerWindow->getWorldViewHeightScaled()); } else { diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index 8dfdb0788a..9719de4650 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -45,6 +45,7 @@ #include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "lltextutil.h" +#include "lltrans.h" //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -63,6 +64,16 @@ LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInven return list_item; } +void LLPanelInventoryListItemBase::draw() +{ + if (getNeedsRefresh()) + { + updateItem(); + setNeedsRefresh(false); + } + LLPanel::draw(); +} + void LLPanelInventoryListItemBase::updateItem() { setIconImage(mIconImage); @@ -121,7 +132,7 @@ BOOL LLPanelInventoryListItemBase::postBuild() mIconImage = get_item_icon(mItem->getType(), mItem->getInventoryType(), mItem->getFlags(), FALSE); - updateItem(); + setNeedsRefresh(true); setWidgetsVisible(false); reshapeWidgets(); @@ -148,6 +159,34 @@ void LLPanelInventoryListItemBase::onMouseLeave(S32 x, S32 y, MASK mask) LLPanel::onMouseLeave(x, y, mask); } +S32 LLPanelInventoryListItemBase::notify(const LLSD& info) +{ + S32 rv = 0; + if(info.has("match_filter")) + { + mHighlightedText = info["match_filter"].asString(); + + std::string test(mItem->getName()); + LLStringUtil::toUpper(test); + + if(mHighlightedText.empty() || std::string::npos != test.find(mHighlightedText)) + { + rv = 0; // substring is found + } + else + { + rv = -1; + } + + setNeedsRefresh(true); + } + else + { + rv = LLPanel::notify(info); + } + return rv; +} + LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item) : LLPanel() , mItem(item) @@ -156,6 +195,7 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem , mWidgetSpacing(WIDGET_SPACING) , mLeftWidgetsWidth(0) , mRightWidgetsWidth(0) +, mNeedsRefresh(false) { } @@ -278,13 +318,15 @@ LLInventoryItemsList::Params::Params() {} LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p) -: LLFlatListView(p) +: LLFlatListViewEx(p) , mNeedsRefresh(false) { // TODO: mCommitOnSelectionChange is set to "false" in LLFlatListView // but reset to true in all derived classes. This settings might need to // be added to LLFlatListView::Params() and/or set to "true" by default. setCommitOnSelectionChange(true); + + setNoFilteredItemsMsg(LLTrans::getString("InventoryNoMatchingItems")); } // virtual @@ -304,7 +346,7 @@ void LLInventoryItemsList::refreshList(const LLInventoryModel::item_array_t item void LLInventoryItemsList::draw() { - LLFlatListView::draw(); + LLFlatListViewEx::draw(); if(mNeedsRefresh) { refresh(); @@ -332,7 +374,8 @@ void LLInventoryItemsList::refresh() break; } LLViewerInventoryItem* item = gInventory.getItem(*it); - addNewItem(item); + // Do not rearrange items on each adding, let's do that on filter call + addNewItem(item, false); ++nadded; } @@ -342,6 +385,9 @@ void LLInventoryItemsList::refresh() removeItemByUUID(*it); } + // Filter, rearrange and notify parent about shape changes + filterItems(); + bool needs_refresh = add_limit_exceeded; setNeedsRefresh(needs_refresh); } @@ -363,7 +409,7 @@ void LLInventoryItemsList::computeDifference( LLCommonUtils::computeDifference(vnew, vcur, vadded, vremoved); } -void LLInventoryItemsList::addNewItem(LLViewerInventoryItem* item) +void LLInventoryItemsList::addNewItem(LLViewerInventoryItem* item, bool rearrange /*= true*/) { if (!item) { @@ -375,7 +421,7 @@ void LLInventoryItemsList::addNewItem(LLViewerInventoryItem* item) if (!list_item) return; - bool is_item_added = addItem(list_item, item->getUUID()); + bool is_item_added = addItem(list_item, item->getUUID(), ADD_BOTTOM, rearrange); if (!is_item_added) { llwarns << "Couldn't add flat list item." << llendl; diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h index 152aafbd7e..bc04eb6f5b 100644 --- a/indra/newview/llinventoryitemslist.h +++ b/indra/newview/llinventoryitemslist.h @@ -64,13 +64,16 @@ class LLViewerInventoryItem; class LLPanelInventoryListItemBase : public LLPanel { public: - static LLPanelInventoryListItemBase* create(LLViewerInventoryItem* item); + virtual void draw(); + /** - * Called after inventory item was updated, update panel widgets to reflect inventory changes. + * Let item know it need to be refreshed in next draw() */ - virtual void updateItem(); + void setNeedsRefresh(bool needs_refresh){ mNeedsRefresh = needs_refresh; } + + bool getNeedsRefresh(){ return mNeedsRefresh; } /** * Add widget to left side @@ -107,6 +110,11 @@ public: */ /*virtual*/ void setValue(const LLSD& value); + /** + * Handles filter request + */ + /*virtual*/ S32 notify(const LLSD& info); + /* Highlights item */ /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask); /* Removes item highlight */ @@ -125,6 +133,11 @@ protected: */ virtual void init(); + /** + * Called after inventory item was updated, update panel widgets to reflect inventory changes. + */ + virtual void updateItem(); + /** setter for mIconCtrl */ void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; } /** setter for MTitleCtrl */ @@ -178,14 +191,15 @@ private: S32 mLeftWidgetsWidth; S32 mRightWidgetsWidth; + bool mNeedsRefresh; }; ////////////////////////////////////////////////////////////////////////// -class LLInventoryItemsList : public LLFlatListView +class LLInventoryItemsList : public LLFlatListViewEx { public: - struct Params : public LLInitParam::Block<Params, LLFlatListView::Params> + struct Params : public LLInitParam::Block<Params, LLFlatListViewEx::Params> { Params(); }; @@ -225,7 +239,7 @@ protected: /** * Add an item to the list */ - virtual void addNewItem(LLViewerInventoryItem* item); + virtual void addNewItem(LLViewerInventoryItem* item, bool rearrange = true); private: uuid_vec_t mIDs; // IDs of items that were added in refreshList(). diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 86147d65e6..c24d2ee0ea 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -689,7 +689,10 @@ void LLInventoryCategoriesObserver::changed(U32 mask) // Unrecoverable, so just skip this category. llassert(cats != NULL && items != NULL); + + continue; } + const S32 current_num_known_descendents = cats->count() + items->count(); LLCategoryData cat_data = (*iter).second; @@ -708,11 +711,15 @@ void LLInventoryCategoriesObserver::changed(U32 mask) bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t cb) { - S32 version; - S32 current_num_known_descendents; + S32 version = LLViewerInventoryCategory::VERSION_UNKNOWN; + S32 current_num_known_descendents = LLViewerInventoryCategory::DESCENDENT_COUNT_UNKNOWN; bool can_be_added = true; LLViewerInventoryCategory* category = gInventory.getCategory(cat_id); + // If category could not be retrieved it might mean that + // inventory is unusable at the moment so the category is + // stored with VERSION_UNKNOWN and DESCENDENT_COUNT_UNKNOWN, + // it may be updated later. if (category) { // Inventory category version is used to find out if some changes @@ -732,16 +739,10 @@ bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t llassert(cats != NULL && items != NULL); } - current_num_known_descendents = cats->count() + items->count(); - } - else - { - // If category could not be retrieved it might mean that - // inventory is unusable at the moment so the category is - // stored with VERSION_UNKNOWN and DESCENDENT_COUNT_UNKNOWN, - // it may be updated later. - version = LLViewerInventoryCategory::VERSION_UNKNOWN; - current_num_known_descendents = LLViewerInventoryCategory::DESCENDENT_COUNT_UNKNOWN; + else + { + current_num_known_descendents = cats->count() + items->count(); + } } if (can_be_added) diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 95094f6b52..7cb192e026 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -145,6 +145,9 @@ std::string LLMute::getDisplayType() const case GROUP: return LLTrans::getString("MuteGroup"); break; + case EXTERNAL: + return LLTrans::getString("MuteExternal"); + break; } } @@ -303,6 +306,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags) void LLMuteList::updateAdd(const LLMute& mute) { + // External mutes (e.g. Avaline callers) are local only, don't send them to the server. + if (mute.mType == LLMute::EXTERNAL) + { + return; + } + // Update the database LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_UpdateMuteListEntry); @@ -390,6 +399,12 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags) void LLMuteList::updateRemove(const LLMute& mute) { + // External mutes are not sent to the server anyway, no need to remove them. + if (mute.mType == LLMute::EXTERNAL) + { + return; + } + LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_RemoveMuteListEntry); msg->nextBlockFast(_PREHASH_AgentData); @@ -573,9 +588,14 @@ BOOL LLMuteList::saveToFile(const std::string& filename) it != mMutes.end(); ++it) { - it->mID.toString(id_string); - const std::string& name = it->mName; - fprintf(fp, "%d %s %s|%u\n", (S32)it->mType, id_string.c_str(), name.c_str(), it->mFlags); + // Don't save external mutes as they are not sent to the server and probably won't + //be valid next time anyway. + if (it->mType != LLMute::EXTERNAL) + { + it->mID.toString(id_string); + const std::string& name = it->mName; + fprintf(fp, "%d %s %s|%u\n", (S32)it->mType, id_string.c_str(), name.c_str(), it->mFlags); + } } fclose(fp); return TRUE; diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index 7cb11e6031..79b556bdbb 100644 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -45,7 +45,8 @@ class LLMute { public: // Legacy mutes are BY_NAME and have null UUID. - enum EType { BY_NAME = 0, AGENT = 1, OBJECT = 2, GROUP = 3, COUNT = 4 }; + // EXTERNAL mutes are only processed through an external system (e.g. Voice) and not stored. + enum EType { BY_NAME = 0, AGENT = 1, OBJECT = 2, GROUP = 3, EXTERNAL = 4, COUNT = 5 }; // Bits in the mute flags. For backwards compatibility (since any mute list entries that were created before the flags existed // will have a flags field of 0), some of the flags are "inverted". diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index b103ec45d0..18bd610dd9 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -245,6 +245,34 @@ void LLOutfitsList::performAction(std::string action) void LLOutfitsList::setFilterSubString(const std::string& string) { mFilterSubString = string; + + for (outfits_map_t::iterator + iter = mOutfitsMap.begin(), + iter_end = mOutfitsMap.end(); + iter != iter_end; ++iter) + { + LLAccordionCtrlTab* tab = iter->second; + if (tab) + { + LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*> (tab->getAccordionView()); + if (list) + { + list->setFilterSubString(mFilterSubString); + } + + if(!mFilterSubString.empty()) + { + //store accordion tab state when filter is not empty + tab->notifyChildren(LLSD().with("action","store_state")); + tab->setDisplayChildren(true); + } + else + { + //restore accordion state after all those accodrion tab manipulations + tab->notifyChildren(LLSD().with("action","restore_state")); + } + } + } } ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 529a368dc3..67aea5544d 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -455,12 +455,6 @@ void LLPanelLogin::draw() // virtual BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask) { - if (( KEY_RETURN == key ) && (MASK_ALT == mask)) - { - gViewerWindow->toggleFullscreen(FALSE); - return TRUE; - } - if ( KEY_F1 == key ) { LLViewerHelp* vhelp = LLViewerHelp::getInstance(); diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index dbccd243da..daa41e1467 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -128,8 +128,6 @@ LLPanelOutfitEdit::LLPanelOutfitEdit() mSearchFilter(NULL), mCOFWearables(NULL), mInventoryItemsPanel(NULL), - mAddToOutfitBtn(NULL), - mRemoveFromOutfitBtn(NULL), mLookObserver(NULL) { mSavedFolderState = new LLSaveFolderState(); @@ -174,13 +172,20 @@ BOOL LLPanelOutfitEdit::postBuild() mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name"); - childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL); childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL); childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredWearablesPanel, this), NULL); mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list"); mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onOutfitItemSelectionChange, this)); + mCOFWearables->getCOFCallbacks().mEditWearable = boost::bind(&LLPanelOutfitEdit::onEditWearableClicked, this); + mCOFWearables->getCOFCallbacks().mDeleteWearable = boost::bind(&LLPanelOutfitEdit::onRemoveFromOutfitClicked, this); + mCOFWearables->getCOFCallbacks().mMoveWearableCloser = boost::bind(&LLPanelOutfitEdit::moveWearable, this, true); + mCOFWearables->getCOFCallbacks().mMoveWearableFurther = boost::bind(&LLPanelOutfitEdit::moveWearable, this, false); + + mCOFWearables->childSetAction("add_btn", boost::bind(&LLPanelOutfitEdit::toggleAddWearablesPanel, this)); + + mInventoryItemsPanel = getChild<LLInventoryPanel>("inventory_items"); mInventoryItemsPanel->setFilterTypes(ALL_ITEMS_MASK); mInventoryItemsPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); @@ -209,13 +214,6 @@ BOOL LLPanelOutfitEdit::postBuild() mAddToLookBtn->setEnabled(FALSE); mAddToLookBtn->setVisible(FALSE); */ - childSetAction("add_to_outfit_btn", boost::bind(&LLPanelOutfitEdit::onAddToOutfitClicked, this)); - childSetEnabled("add_to_outfit_btn", false); - - mRemoveFromOutfitBtn = getChild<LLButton>("remove_from_outfit_btn"); - mRemoveFromOutfitBtn->setEnabled(FALSE); - mRemoveFromOutfitBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onRemoveFromOutfitClicked, this)); - mEditWearableBtn = getChild<LLButton>("edit_wearable_btn"); mEditWearableBtn->setEnabled(FALSE); mEditWearableBtn->setVisible(FALSE); @@ -233,9 +231,6 @@ BOOL LLPanelOutfitEdit::postBuild() mWearableListManager = new LLFilteredWearableListManager( getChild<LLInventoryItemsList>("filtered_wearables_list"), ALL_ITEMS_MASK); - - childSetAction("move_closer_btn", boost::bind(&LLPanelOutfitEdit::moveWearable, this, true)); - childSetAction("move_further_btn", boost::bind(&LLPanelOutfitEdit::moveWearable, this, false)); return TRUE; } @@ -252,9 +247,9 @@ void LLPanelOutfitEdit::moveWearable(bool closer_to_body) updateLookInfo(); } -void LLPanelOutfitEdit::showAddWearablesPanel() +void LLPanelOutfitEdit::toggleAddWearablesPanel() { - childSetVisible("add_wearables_panel", childGetValue("add_btn")); + childSetVisible("add_wearables_panel", !childIsVisible("add_wearables_panel")); } void LLPanelOutfitEdit::showWearablesFilter() @@ -379,8 +374,6 @@ void LLPanelOutfitEdit::onRemoveFromOutfitClicked(void) LLAppearanceMgr::getInstance()->removeItemFromAvatar(id_to_remove); updateLookInfo(); - - mRemoveFromOutfitBtn->setEnabled(FALSE); } @@ -434,10 +427,7 @@ void LLPanelOutfitEdit::onInventorySelectionChange(const std::deque<LLFolderView case LLAssetType::AT_CLOTHING: case LLAssetType::AT_BODYPART: case LLAssetType::AT_OBJECT: - childSetEnabled("add_to_outfit_btn", true); - break; default: - childSetEnabled("add_to_outfit_btn", false); break; } @@ -470,10 +460,7 @@ void LLPanelOutfitEdit::onOutfitItemSelectionChange(void) { case LLAssetType::AT_CLOTHING: case LLAssetType::AT_OBJECT: - mRemoveFromOutfitBtn->setEnabled(TRUE); - break; default: - mRemoveFromOutfitBtn->setEnabled(FALSE); break; } } diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 21fa849289..0074cd517b 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -90,7 +90,7 @@ public: void moveWearable(bool closer_to_body); - void showAddWearablesPanel(); + void toggleAddWearablesPanel(); void showWearablesFilter(); void showFilteredWearablesPanel(); void saveOutfit(bool as_new = false); @@ -122,8 +122,6 @@ private: LLFilterEditor* mSearchFilter; LLSaveFolderState* mSavedFolderState; std::string mSearchString; - LLButton* mAddToOutfitBtn; - LLButton* mRemoveFromOutfitBtn; LLButton* mEditWearableBtn; LLToggleableMenu* mSaveMenu; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 80964938f5..59c1fb4f3c 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -68,7 +68,6 @@ static const std::string OUTFITS_TAB_NAME = "outfitslist_tab"; static const std::string COF_TAB_NAME = "cof_tab"; static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory"); -bool LLPanelOutfitsInventory::sShowDebugEditor = false; LLPanelOutfitsInventory::LLPanelOutfitsInventory() : @@ -88,7 +87,6 @@ LLPanelOutfitsInventory::~LLPanelOutfitsInventory() // virtual BOOL LLPanelOutfitsInventory::postBuild() { - sShowDebugEditor = gSavedSettings.getBOOL("ShowDebugAppearanceEditor"); initTabPanels(); initListCommandsHandlers(); @@ -133,7 +131,6 @@ void LLPanelOutfitsInventory::updateVerbs() if (mListCommands) { - mListCommands->childSetVisible("edit_current_outfit_btn",sShowDebugEditor); updateListCommands(); } } @@ -307,14 +304,6 @@ void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewIte } } -void LLPanelOutfitsInventory::showEditOutfitPanel() -{ - LLSD key; - key["type"] = "edit_outfit"; - - LLSideTray::getInstance()->showPanel("sidepanel_appearance", key); -} - LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction() { // TODO: add handling "My Outfits" tab. @@ -369,8 +358,6 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() mListCommands->childSetAction("make_outfit_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this)); mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); - mListCommands->childSetAction("edit_current_outfit_btn", boost::bind(&LLPanelOutfitsInventory::showEditOutfitPanel, this)); - LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn"); trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this , _4 // BOOL drop diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index 4234cc45c5..975d99f834 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -65,7 +65,6 @@ public: bool onSaveCommit(const LLSD& notification, const LLSD& response); void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); - void showEditOutfitPanel(); // If a compatible listener type is selected, then return a pointer to that. // Otherwise, return NULL. @@ -131,8 +130,6 @@ private: // List Commands // //////////////////////////////////////////////////////////////////////////////// /// -public: - static bool sShowDebugEditor; }; #endif //LL_LLPANELOUTFITSINVENTORY_H diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index c3748ca81d..a058548459 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -722,7 +722,21 @@ void LLParticipantList::LLParticipantListMenu::toggleMute(const LLSD& userdata, name = speakerp->mDisplayName; - LLMute mute(speaker_id, name, speakerp->mType == LLSpeaker::SPEAKER_AGENT ? LLMute::AGENT : LLMute::OBJECT); + LLMute::EType mute_type; + switch (speakerp->mType) + { + case LLSpeaker::SPEAKER_AGENT: + mute_type = LLMute::AGENT; + break; + case LLSpeaker::SPEAKER_OBJECT: + mute_type = LLMute::OBJECT; + break; + case LLSpeaker::SPEAKER_EXTERNAL: + default: + mute_type = LLMute::EXTERNAL; + break; + } + LLMute mute(speaker_id, name, mute_type); if (!is_muted) { diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index f38df19de0..08098e2adb 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -44,6 +44,7 @@ #include "llfoldervieweventlistener.h" #include "llpaneleditwearable.h" #include "llpaneloutfitsinventory.h" +#include "llsidetray.h" #include "lltextbox.h" #include "lluictrlfactory.h" #include "llviewerregion.h" @@ -115,6 +116,8 @@ BOOL LLSidepanelAppearance::postBuild() mEditAppearanceBtn = getChild<LLButton>("editappearance_btn"); mEditAppearanceBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditAppearanceButtonClicked, this)); + childSetAction("edit_outfit_btn", boost::bind(&LLSidepanelAppearance::onEditOutfitButtonClicked, this)); + mEditBtn = getChild<LLButton>("edit_btn"); mEditBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditButtonClicked, this)); @@ -154,7 +157,7 @@ BOOL LLSidepanelAppearance::postBuild() mCurrentLookName = getChild<LLTextBox>("currentlook_name"); - mOutfitDirtyTag = getChild<LLTextBox>("currentlook_title"); + mOutfitStatus = getChild<LLTextBox>("currentlook_status"); mCurrOutfitPanel = getChild<LLPanel>("panel_currentlook"); @@ -238,6 +241,13 @@ void LLSidepanelAppearance::onEditAppearanceButtonClicked() } } +void LLSidepanelAppearance::onEditOutfitButtonClicked() +{ + LLSD key; + key["type"] = "edit_outfit"; + LLSideTray::getInstance()->showPanel("sidepanel_appearance", key); +} + void LLSidepanelAppearance::onEditButtonClicked() { toggleOutfitEditPanel(FALSE); @@ -339,7 +349,11 @@ void LLSidepanelAppearance::updateVerbs() void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name) { - mOutfitDirtyTag->setVisible(LLAppearanceMgr::getInstance()->isOutfitDirty()); + // Set current outfit status (wearing/unsaved). + bool dirty = LLAppearanceMgr::getInstance()->isOutfitDirty(); + std::string cof_status_str = getString(dirty ? "Unsaved Changes" : "Now Wearing"); + mOutfitStatus->setText(cof_status_str); + if (name == "") { std::string outfit_name; diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index 0a609797fb..0a2d882a0b 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -71,6 +71,7 @@ private: void onOpenOutfitButtonClicked(); void onEditAppearanceButtonClicked(); + void onEditOutfitButtonClicked(); void onEditButtonClicked(); void onEditWearBackClicked(); @@ -90,7 +91,7 @@ private: LLPanel* mCurrOutfitPanel; LLTextBox* mCurrentLookName; - LLTextBox* mOutfitDirtyTag; + LLTextBox* mOutfitStatus; // Used to make sure the user's inventory is in memory. LLCurrentlyWornFetchObserver* mFetchWorn; diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 3d447dd411..7fa04ce574 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -166,6 +166,9 @@ public: mGetReason = reason; } + void setCanUseHTTP(bool can_use_http) {mCanUseHTTP = can_use_http;} + bool getCanUseHTTP()const {return mCanUseHTTP ;} + protected: LLTextureFetchWorker(LLTextureFetch* fetcher, const std::string& url, const LLUUID& id, const LLHost& host, F32 priority, S32 discard, S32 size); @@ -247,15 +250,16 @@ private: S32 mRequestedSize; S32 mDesiredSize; S32 mFileSize; - S32 mCachedSize; - BOOL mLoaded; + S32 mCachedSize; e_request_state mSentRequest; handle_t mDecodeHandle; + BOOL mLoaded; BOOL mDecoded; BOOL mWritten; BOOL mNeedsAux; BOOL mHaveAllData; BOOL mInLocalCache; + bool mCanUseHTTP ; S32 mHTTPFailCount; S32 mRetryAttempt; S32 mActiveCount; @@ -411,6 +415,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher, mNeedsAux(FALSE), mHaveAllData(FALSE), mInLocalCache(FALSE), + mCanUseHTTP(true), mHTTPFailCount(0), mRetryAttempt(0), mActiveCount(0), @@ -640,11 +645,12 @@ bool LLTextureFetchWorker::doWork(S32 param) return false; } mFileSize = 0; - mLoaded = FALSE; - setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it + mLoaded = FALSE; if (mUrl.compare(0, 7, "file://") == 0) { + setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it + // read file from local disk std::string filename = mUrl.substr(7, std::string::npos); CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage); @@ -653,11 +659,13 @@ bool LLTextureFetchWorker::doWork(S32 param) } else if (mUrl.empty()) { + setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it + CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage); mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority, offset, size, responder); } - else + else if(mCanUseHTTP) { if (!(mUrl.compare(0, 7, "http://") == 0)) { @@ -667,6 +675,11 @@ bool LLTextureFetchWorker::doWork(S32 param) setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); mState = SEND_HTTP_REQ; } + else + { + setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); + mState = LOAD_FROM_NETWORK; + } } if (mLoaded) @@ -727,7 +740,7 @@ bool LLTextureFetchWorker::doWork(S32 param) static LLCachedControl<bool> use_http(gSavedSettings,"ImagePipelineUseHTTP"); // if (mHost != LLHost::invalid) get_url = false; - if ( use_http && mUrl.empty())//get http url. + if ( use_http && mCanUseHTTP && mUrl.empty())//get http url. { LLViewerRegion* region = NULL; if (mHost == LLHost::invalid) @@ -750,7 +763,7 @@ bool LLTextureFetchWorker::doWork(S32 param) //llwarns << "Region not found for host: " << mHost << llendl; } } - if (!mUrl.empty()) + if (mCanUseHTTP && !mUrl.empty()) { mState = LLTextureFetchWorker::SEND_HTTP_REQ; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); @@ -891,7 +904,13 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mGetStatus == HTTP_NOT_FOUND) { mHTTPFailCount = max_attempts = 1; // Don't retry - llinfos << "Texture missing from server (404): " << mUrl << llendl; + //llinfos << "Texture missing from server (404): " << mUrl << llendl; + + //roll back to try UDP + mState = INIT ; + mCanUseHTTP = false ; + setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); + return false ; } else if (mGetStatus == HTTP_SERVICE_UNAVAILABLE) { @@ -1471,7 +1490,7 @@ LLTextureFetch::~LLTextureFetch() } bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority, - S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux) + S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux, bool can_use_http) { if (mDebugPause) { @@ -1533,6 +1552,7 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con worker->mNeedsAux = needs_aux; worker->setImagePriority(priority); worker->setDesiredDiscard(desired_discard, desired_size); + worker->setCanUseHTTP(can_use_http) ; if (!worker->haveWork()) { worker->mState = LLTextureFetchWorker::INIT; @@ -1555,6 +1575,7 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con worker->lockWorkMutex(); worker->mActiveCount++; worker->mNeedsAux = needs_aux; + worker->setCanUseHTTP(can_use_http) ; worker->unlockWorkMutex(); } @@ -2215,7 +2236,7 @@ BOOL LLTextureFetch::isFromLocalCache(const LLUUID& id) } S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& requested_priority_p, - U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p) + U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p, bool& can_use_http) { S32 state = LLTextureFetchWorker::INVALID; F32 data_progress = 0.0f; @@ -2253,6 +2274,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r requested_priority = worker->mImagePriority; } fetch_priority = worker->getPriority(); + can_use_http = worker->getCanUseHTTP() ; worker->unlockWorkMutex(); } data_progress_p = data_progress; diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index ef2ec520bf..634e590fe0 100644 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -62,7 +62,7 @@ public: void shutDownImageDecodeThread() ; //called in the main thread after the ImageDecodeThread shuts down. bool createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority, - S32 w, S32 h, S32 c, S32 discard, bool needs_aux); + S32 w, S32 h, S32 c, S32 discard, bool needs_aux, bool can_use_http); void deleteRequest(const LLUUID& id, bool cancel); bool getRequestFinished(const LLUUID& id, S32& discard_level, LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux); @@ -77,7 +77,7 @@ public: // Debug BOOL isFromLocalCache(const LLUUID& id); S32 getFetchState(const LLUUID& id, F32& decode_progress_p, F32& requested_priority_p, - U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p); + U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p, bool& can_use_http); void dump(); S32 getNumRequests() ; S32 getNumHTTPRequests() ; diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index 04d873f91b..cae5e93545 100644 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -891,7 +891,7 @@ void LLToolGrab::handleHoverInactive(S32 x, S32 y, MASK mask) // Look for cursor against the edge of the screen // Only works in fullscreen - if (gSavedSettings.getBOOL("WindowFullScreen")) + if (gSavedSettings.getBOOL("FullScreen")) { if (gAgentCamera.cameraThirdPerson() ) { diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 874995a09e..ee3b27c8da 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -496,12 +496,6 @@ bool toggle_show_favorites_panel(const LLSD& newvalue) return true; } -bool toggle_show_appearance_editor(const LLSD& newvalue) -{ - LLPanelOutfitsInventory::sShowDebugEditor = newvalue.asBoolean(); - return true; -} - bool toggle_show_object_render_cost(const LLSD& newvalue) { LLFloaterTools::sShowObjectCost = newvalue.asBoolean(); @@ -650,7 +644,6 @@ void settings_setup_listeners() gSavedSettings.getControl("ShowSnapshotButton")->getSignal()->connect(boost::bind(&toggle_show_snapshot_button, _2)); gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&toggle_show_navigation_panel, _2)); gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2)); - gSavedSettings.getControl("ShowDebugAppearanceEditor")->getSignal()->connect(boost::bind(&toggle_show_appearance_editor, _2)); gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2)); gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2)); } diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 823466e33e..f0800e82e7 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -169,7 +169,6 @@ void display_startup() void display_update_camera() { LLMemType mt_uc(LLMemType::MTYPE_DISPLAY_UPDATE_CAMERA); - llpushcallstacks ; // TODO: cut draw distance down if customizing avatar? // TODO: cut draw distance on per-parcel basis? diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index c6f8ce2e15..4db05e8a98 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1586,6 +1586,7 @@ void LLViewerMediaImpl::destroyMediaSource() if(mMediaSource) { + mMediaSource->setDeleteOK(true) ; delete mMediaSource; mMediaSource = NULL; } @@ -1737,7 +1738,7 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type) } mMediaSource = media_source; - + mMediaSource->setDeleteOK(false) ; updateVolume(); return true; @@ -1933,13 +1934,13 @@ void LLViewerMediaImpl::updateVolume() } else if (mProximityCamera > gSavedSettings.getF32("MediaRollOffMin")) { - // attenuated_volume = v / ( 1 + (roll_off_rate * (d - min))^2 + // attenuated_volume = 1 / (roll_off_rate * (d - min))^2 // the +1 is there so that for distance 0 the volume stays the same F64 adjusted_distance = mProximityCamera - gSavedSettings.getF32("MediaRollOffMin"); F64 attenuation = gSavedSettings.getF32("MediaRollOffRate") * adjusted_distance; - attenuation = attenuation * attenuation; + attenuation = 1.0 / (attenuation * attenuation); // the attenuation multiplier should never be more than one since that would increase volume - volume = volume * llmin(1.0, 1 /(attenuation + 1)); + volume = volume * llmin(1.0, attenuation); } } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 7c439d7200..7464423f55 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3786,7 +3786,9 @@ class LLViewFullscreen : public view_listener_t { bool handleEvent(const LLSD& userdata) { - gViewerWindow->toggleFullscreen(TRUE); + // we no longer permit full screen mode EXT-6775 + // gViewerWindow->toggleFullscreen(TRUE); + llwarns << "full screen mode no longer supported" << llendl; return true; } }; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index c883087cf2..d925ab0d90 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -492,6 +492,7 @@ void LLViewerTexture::init(bool firstinit) mTextureState = NO_DELETE ; mDontDiscard = FALSE; + mCanResetMaxVirtualSize = true ; mMaxVirtualSize = 0.f; mNeedsGLTexture = FALSE ; mNeedsResetMaxVirtualSize = FALSE ; @@ -540,6 +541,11 @@ void LLViewerTexture::setBoostLevel(S32 level) if(mBoostLevel != LLViewerTexture::BOOST_NONE) { setNoDelete() ; + + if(LLViewerTexture::BOOST_AVATAR_BAKED_SELF == mBoostLevel || LLViewerTexture::BOOST_AVATAR_BAKED == mBoostLevel) + { + mCanResetMaxVirtualSize = false ; + } } if(gAuditTexture) { @@ -613,7 +619,7 @@ void LLViewerTexture::addTextureStats(F32 virtual_size, BOOL needs_gltexture) co void LLViewerTexture::resetTextureStats() { - mMaxVirtualSize = 0.0f; + mMaxVirtualSize = 0.0f ; mAdditionalDecodePriority = 0.f ; mNeedsResetMaxVirtualSize = FALSE ; } @@ -1071,6 +1077,7 @@ void LLViewerFetchedTexture::init(bool firstinit) mRequestedDiscardLevel = -1; mRequestedDownloadPriority = 0.f; mFullyLoaded = FALSE; + mCanUseHTTP = true ; mDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1; mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1; @@ -1665,7 +1672,11 @@ void LLViewerFetchedTexture::updateVirtualSize() setAdditionalDecodePriority(facep->getImportanceToCamera()) ; } } - mNeedsResetMaxVirtualSize = TRUE ; + + if(mCanResetMaxVirtualSize) + { + mNeedsResetMaxVirtualSize = TRUE ; + } reorganizeFaceList() ; reorganizeVolumeList(); } @@ -1746,7 +1757,7 @@ bool LLViewerFetchedTexture::updateFetch() else { mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority, - mFetchPriority, mFetchDeltaTime, mRequestDeltaTime); + mFetchPriority, mFetchDeltaTime, mRequestDeltaTime, mCanUseHTTP); } // We may have data ready regardless of whether or not we are finished (e.g. waiting on write) @@ -1886,7 +1897,7 @@ bool LLViewerFetchedTexture::updateFetch() // bypass texturefetch directly by pulling from LLTextureCache bool fetch_request_created = false; fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), decode_priority, - w, h, c, desired_discard, needsAux()); + w, h, c, desired_discard, needsAux(), mCanUseHTTP); if (fetch_request_created) { @@ -1894,7 +1905,7 @@ bool LLViewerFetchedTexture::updateFetch() mIsFetching = TRUE; mRequestedDiscardLevel = desired_discard; mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority, - mFetchPriority, mFetchDeltaTime, mRequestDeltaTime); + mFetchPriority, mFetchDeltaTime, mRequestDeltaTime, mCanUseHTTP); } // if createRequest() failed, we're finishing up a request for this UUID, @@ -3291,7 +3302,10 @@ F32 LLViewerMediaTexture::getMaxVirtualSize() } } - mNeedsResetMaxVirtualSize = TRUE ; + if(mCanResetMaxVirtualSize) + { + mNeedsResetMaxVirtualSize = TRUE ; + } reorganizeFaceList() ; reorganizeVolumeList(); diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index a09a711cc7..74c46f3070 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -263,6 +263,7 @@ protected: S32 mFullHeight; BOOL mUseMipMaps ; S8 mComponents; + bool mCanResetMaxVirtualSize; mutable F32 mMaxVirtualSize; // The largest virtual size of the image, in pixels - how much data to we need? mutable S8 mNeedsGLTexture; mutable BOOL mNeedsResetMaxVirtualSize ; @@ -456,6 +457,8 @@ public: BOOL isFullyLoaded() const; BOOL hasFetcher() const { return mHasFetcher;} + void setCanUseHTTP(bool can_use_http) {mCanUseHTTP = can_use_http;} + protected: /*virtual*/ void switchToCachedImage(); S32 getCurrentDiscardLevelForFetching() ; @@ -505,6 +508,7 @@ protected: S8 mIsRawImageValid; S8 mHasFetcher; // We've made a fecth request S8 mIsFetching; // Fetch request is active + bool mCanUseHTTP ; //This texture can be fetched through http if true. mutable S8 mIsMissingAsset; // True if we know that there is no image asset with this image id in the database. diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index a96a6bf1b3..7a3f88ed6f 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1915,7 +1915,7 @@ void LLViewerWindow::reshape(S32 width, S32 height) // store the mode the user wants (even if not there yet) - gSavedSettings.setBOOL("WindowFullScreen", mWantFullscreen); + gSavedSettings.setBOOL("FullScreen", mWantFullscreen); // store new settings for the mode we are in, regardless if (!mWindow->getFullscreen()) @@ -4716,7 +4716,7 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size, BOOL was_maximized = gSavedSettings.getBOOL("WindowMaximized"); mWantFullscreen = fullscreen; mShowFullscreenProgress = show_progress_bar; - gSavedSettings.setBOOL("WindowFullScreen", mWantFullscreen); + gSavedSettings.setBOOL("FullScreen", mWantFullscreen); //gResizeScreenTexture = TRUE; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 3f021d1f84..69d2ef7dd7 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -4095,6 +4095,7 @@ void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel { mMaxPixelArea = llmax(pixel_area, mMaxPixelArea); mMinPixelArea = llmin(pixel_area, mMinPixelArea); + imagep->resetTextureStats(); imagep->addTextureStats(pixel_area / texel_area_ratio); imagep->setBoostLevel(boost_level); } diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 298ce3fcec..542ec16547 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -5143,9 +5143,6 @@ LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(con { result->mAvatarIDValid = true; result->mAvatarID = id; - - if(result->updateMuteState()) - mMuteDirty = true; } else { @@ -5154,7 +5151,12 @@ LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(con setUUIDFromStringHash(result->mAvatarID, uri); } } - + + if(result->updateMuteState()) + { + mMuteDirty = true; + } + mParticipantsByUUID.insert(participantUUIDMap::value_type(&(result->mAvatarID), result)); if (LLSpeakerVolumeStorage::getInstance()->getSpeakerVolume(result->mAvatarID, result->mVolume)) @@ -5173,15 +5175,12 @@ bool LLVoiceClient::participantState::updateMuteState() { bool result = false; - if(mAvatarIDValid) + bool isMuted = LLMuteList::getInstance()->isMuted(mAvatarID, LLMute::flagVoiceChat); + if(mOnMuteList != isMuted) { - bool isMuted = LLMuteList::getInstance()->isMuted(mAvatarID, LLMute::flagVoiceChat); - if(mOnMuteList != isMuted) - { - mOnMuteList = isMuted; - mVolumeDirty = true; - result = true; - } + mOnMuteList = isMuted; + mVolumeDirty = true; + result = true; } return result; } diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 56b2791993..bd5d8d9357 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -136,31 +136,6 @@ BOOL LLPanelClothingListItem::postBuild() return TRUE; } -void LLPanelClothingListItem::setShowDeleteButton(bool show) -{ - setShowWidget("btn_delete", show); -} - -void LLPanelClothingListItem::setShowMoveUpButton(bool show) -{ - setShowWidget("btn_move_up", show); -} - -void LLPanelClothingListItem::setShowMoveDownButton(bool show) -{ - setShowWidget("btn_move_down", show); -} - -void LLPanelClothingListItem::setShowLockButton(bool show) -{ - setShowWidget("btn_lock", show); -} - -void LLPanelClothingListItem::setShowEditButton(bool show) -{ - setShowWidget("btn_edit", show); -} - ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -201,16 +176,6 @@ BOOL LLPanelBodyPartsListItem::postBuild() return TRUE; } -void LLPanelBodyPartsListItem::setShowLockButton(bool show) -{ - setShowWidget("btn_lock", show); -} - -void LLPanelBodyPartsListItem::setShowEditButton(bool show) -{ - setShowWidget("btn_edit", show); -} - ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index c4a415dfbf..29532a15c1 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -86,11 +86,13 @@ public: /** * Make button visible during mouse over event. */ - inline void setShowDeleteButton(bool show); - inline void setShowMoveUpButton(bool show); - inline void setShowMoveDownButton(bool show); - inline void setShowLockButton(bool show); - inline void setShowEditButton(bool show); + inline void setShowDeleteButton(bool show) { setShowWidget("btn_delete", show); } + inline void setShowMoveUpButton(bool show) { setShowWidget("btn_move_up", show); } + + inline void setShowMoveDownButton(bool show) { setShowWidget("btn_move_down", show); } + inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); } + inline void setShowEditButton(bool show) { setShowWidget("btn_edit", show); } + protected: @@ -113,8 +115,8 @@ public: /** * Make button visible during mouse over event. */ - inline void setShowLockButton(bool show); - inline void setShowEditButton(bool show); + inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); } + inline void setShowEditButton(bool show) { setShowWidget("btn_edit", show); } protected: LLPanelBodyPartsListItem(LLViewerInventoryItem* item); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 36daca174b..2d2fc38573 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1799,7 +1799,6 @@ void LLPipeline::rebuildPriorityGroups() void LLPipeline::rebuildGroups() { - llpushcallstacks ; // Iterate through some drawables on the non-priority build queue S32 size = (S32) mGroupQ2.size(); S32 min_count = llclamp((S32) ((F32) (size * size)/4096*0.25f), 1, size); @@ -2201,7 +2200,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result) //LLVertexBuffer::unbind(); grabReferences(result); - + llpushcallstacks ; for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) { LLSpatialGroup* group = *iter; @@ -2219,7 +2218,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result) } } } - + llpushcallstacks ; for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) { LLSpatialGroup* group = *iter; @@ -2235,7 +2234,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result) } } - + llpushcallstacks ; if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD) { for (LLCullResult::bridge_list_t::iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) @@ -2249,7 +2248,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result) } } } - + llpushcallstacks ; { LLFastTimer ftm(FTM_STATESORT_DRAWABLE); for (LLCullResult::drawable_list_t::iterator iter = sCull->beginVisibleList(); @@ -2269,6 +2268,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result) } postSort(camera); + llpushcallstacks ; } void LLPipeline::stateSort(LLSpatialGroup* group, LLCamera& camera) @@ -2963,7 +2963,6 @@ U32 LLPipeline::sCurRenderPoolType = 0 ; void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) { - llpushcallstacks ; LLMemType mt(LLMemType::MTYPE_PIPELINE_RENDER_GEOM); LLFastTimer t(FTM_RENDER_GEOMETRY); @@ -7102,8 +7101,7 @@ inline float sgn(float a) } void LLPipeline::generateWaterReflection(LLCamera& camera_in) -{ - llpushcallstacks ; +{ if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate) { BOOL skip_avatar_update = FALSE; @@ -7112,6 +7110,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) skip_avatar_update = TRUE; } + llpushcallstacks ; if (!skip_avatar_update) { gAgentAvatarp->updateAttachmentVisibility(CAMERA_MODE_THIRD_PERSON); @@ -7199,7 +7198,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) glCullFace(GL_FRONT); - static LLCullResult ref_result; U32 ref_mask = 0; if (LLDrawPoolWater::sNeedsDistortionUpdate) @@ -7211,6 +7209,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) (1 << LLPipeline::RENDER_TYPE_WL_SKY)); static LLCullResult result; updateCull(camera, result); + llpushcallstacks ; stateSort(camera, result); mRenderTypeMask = tmp & ((1 << LLPipeline::RENDER_TYPE_SKY) | (1 << LLPipeline::RENDER_TYPE_CLOUDS) | @@ -7245,13 +7244,13 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLGLUserClipPlane clip_plane(plane, mat, projection); LLGLDisable cull(GL_CULL_FACE); updateCull(camera, ref_result, 1); + llpushcallstacks ; stateSort(camera, ref_result); } ref_mask = mRenderTypeMask; mRenderTypeMask = mask; } - if (LLDrawPoolWater::sNeedsDistortionUpdate) { mRenderTypeMask = ref_mask; @@ -7269,7 +7268,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) } camera.setOrigin(camera_in.getOrigin()); - //render distortion map static BOOL last_update = TRUE; if (last_update) @@ -7303,6 +7301,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLGLUserClipPlane clip_plane(LLPlane(-pnorm, -(pd+pad)), mat, projection); static LLCullResult result; updateCull(camera, result, water_clip); + llpushcallstacks ; stateSort(camera, result); gGL.setColorMask(true, true); @@ -7326,7 +7325,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) glClear(GL_DEPTH_BUFFER_BIT); } glClearColor(0.f, 0.f, 0.f, 0.f); - gViewerWindow->setup3DViewport(); mRenderTypeMask = type_mask; LLDrawPoolWater::sNeedsReflectionUpdate = FALSE; @@ -7342,6 +7340,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) { gAgentAvatarp->updateAttachmentVisibility(gAgentCamera.getCameraMode()); } + llpushcallstacks ; } } @@ -7839,7 +7838,6 @@ void LLPipeline::renderHighlight(const LLViewerObject* obj, F32 fade) void LLPipeline::generateHighlight(LLCamera& camera) { //render highlighted object as white into offscreen render target - llpushcallstacks ; if (mHighlightObject.notNull()) { mHighlightSet.insert(HighlightItem(mHighlightObject)); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index df4f33adf0..eefcabdd39 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1565,15 +1565,6 @@ <menu_item_call.on_click function="View.ZoomOut" /> </menu_item_call> - <menu_item_separator/> - <menu_item_call - label="Toggle Fullscreen" - name="Toggle Fullscreen" - > - <!-- Note: shortcut="alt|Enter" was deleted from the preceding node--> - <menu_item_call.on_click - function="View.Fullscreen" /> - </menu_item_call> </menu> <menu_item_separator/> <menu_item_call diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml index 28a6995186..e70abc0975 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 @@ -37,7 +37,7 @@ layout="topleft" name="speakers_list" opaque="false" - show_info_btn="false" + show_info_btn="true" show_profile_btn="false" show_speaking_indicator="false" width="147" /> diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml index 4313d450fb..115964e5f2 100644 --- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="top|right|left" - height="20" + height="22" layout="topleft" left="0" name="wearable_item" @@ -69,4 +69,14 @@ height="20" width="20" tab_stop="false" /> + <panel + background_visible="true" + bg_alpha_color="0.4 0.4 0.4 1.0" + bottom="0" + follows="left|right|top" + height="1" + layout="bottomleft" + left="0" + name="wearable_type_separator_panel" + width="380"/> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml index 8dc67de06f..7cc9c46c08 100644 --- a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="top|right|left" - height="20" + height="23" layout="topleft" left="0" name="wearable_item" @@ -101,4 +101,15 @@ height="20" width="20" tab_stop="false" /> + <panel + background_visible="true" + bg_alpha_color="0.4 0.4 0.4 1.0" + bottom="0" + follows="left|right|top" + height="1" + layout="bottomleft" + left="0" + name="wearable_type_separator_panel" + visible="false" + width="380"/> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml index d8a8dbbea4..86b9ea6e14 100644 --- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml +++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml @@ -3,23 +3,22 @@ background_visible="true" bg_alpha_color="DkGray" border="false" - bottom="0" follows="all" height="200" left="0" name="cof_wearables" - width="313"> + width="311"> <accordion follows="all" - height="373" + height="200" layout="topleft" - left="3" + left="0" single_expansion="true" top="0" name="cof_wearables_accordion" background_visible="true" bg_alpha_color="DkGray2" - width="307"> + width="311"> <accordion_tab layout="topleft" name="tab_attachments" @@ -27,40 +26,82 @@ <flat_list_view allow_select="true" follows="all" - height="150" + height="10" layout="topleft" left="0" name="list_attachments" top="0" - width="307" /> + width="311" /> </accordion_tab> <accordion_tab layout="topleft" name="tab_clothing" title="Clothing"> - <flat_list_view - allow_select="true" + + <!-- *NOTE there should be no any gaps between the button bar and the list - + accordiong-list adaptor won't employ them while calculating new height when the size of the list changes --> + <panel + background_visible="false" + class="accordion_list_adaptor" follows="all" - height="150" + height="45" layout="topleft" left="0" - name="list_clothing" + name="button_bar_adaptor" top="0" - width="307" /> + width="311"> + <panel + bevel="none" + filename="panel_clothing_list_button_bar.xml" + height="35" + name="button_bar" + top="0" + width="311" /> + <flat_list_view + allow_select="true" + follows="all" + height="10" + layout="topleft" + left="0" + name="list_clothing" + top_pad="0" + width="311" /> + </panel> </accordion_tab> <accordion_tab layout="topleft" name="tab_body_parts" title="Body Parts"> - <flat_list_view - allow_select="true" + + <!-- *NOTE there should be no any gaps between the button bar and the list - + accordiong-list adaptor won't employ them while calculating new height when the size of the list changes --> + <panel + background_visible="false" + class="accordion_list_adaptor" follows="all" - height="150" + height="45" layout="topleft" left="0" - name="list_body_parts" + name="button_bar_adaptor" top="0" - width="307" /> + width="311"> + <panel + bevel="none" + filename="panel_bodyparts_list_button_bar.xml" + height="35" + name="button_bar" + top="0" + width="311"/> + <flat_list_view + allow_select="true" + follows="all" + height="10" + layout="topleft" + left="0" + name="list_body_parts" + top_pad="0" + width="311" /> + </panel> </accordion_tab> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml index dbbfa8f2e2..c5a60ced88 100644 --- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="top|right|left" - height="20" + height="22" layout="topleft" left="0" name="dummy_clothing_item" @@ -59,4 +59,14 @@ height="20" width="20" tab_stop="false" /> + <panel + background_visible="true" + bg_alpha_color="0.4 0.4 0.4 1.0" + bottom="0" + follows="left|right|top" + height="1" + layout="bottomleft" + left="0" + name="wearable_type_separator_panel" + width="380"/> </panel> 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 aa7d621e4c..c1dc2aaaf7 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 @@ -36,7 +36,7 @@ layout="topleft" name="speakers_list" opaque="false" - show_info_btn="false" + show_info_btn="true" show_profile_btn="false" show_speaking_indicator="false" width="145" /> diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index a9f588698a..6a212306d6 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -69,19 +69,21 @@ <!-- "HEADER WITH ICON, STATUS TEXT AND OUTFIT NAME" --> <panel + background_visible="true" + bg_alpha_color="DkGray2" bevel_style="none" follows="top|left|right" - height="45" + height="40" label="bottom_panel" layout="topleft" - left="5" + left="6" name="header_panel" top_pad="5" - width="300"> + width="311"> <icon follows="left|top" height="40" - image_name="t-shirt-image" + image_name="TabIcon_Appearance_Off" left="2" mouse_opaque="false" name="outfit_icon" @@ -92,35 +94,35 @@ <panel bevel_style="none" follows="top|right" - height="40" + height="38" label="bottom_panel" layout="topleft" - left_pad="10" + left_pad="5" name="outfit_name_and_status" top="2" - width="200"> + width="270"> <text follows="top|left|right" - font="SansSerif" + font="SansSerifSmallBold" height="13" layout="topleft" name="status" - text_color="Green" - top="0" - value="Editing..." + text_color="EmphasisColor" + top="2" + value="Now editing..." use_ellipses="true" - width="275" /> + width="270" /> <text follows="bottom|left|right" - font="SansSerifHugeBold" + font="SansSerifLargeBold" height="26" layout="topleft" name="curr_outfit_name" text_color="LtGray" - top_pad="0" + top_pad="2" value="[Current Outfit]" use_ellipses="true" - width="275" /> + width="270" /> </panel> </panel> @@ -130,22 +132,21 @@ animate="false" default_tab_group="2" follows="all" - height="470" - width="300" + height="495" + width="313" layout="topleft" orientation="vertical" name="im_panels" tab_group="1" - top_pad="10" + top_pad="5" left="5"> <layout_panel layout="topleft" - follows="left|top|right" height="220" label="IM Control Panel" min_height="100" name="outfit_wearables_panel" - width="300" + width="313" auto_resize="true" user_resize="true"> @@ -157,11 +158,12 @@ follows="left|top|right|bottom" height="193" layout="topleft" - left="0" + left="1" name="cof_wearables_list" top="0" - width="300" /> + width="311" /> + <!-- Button bar --> <panel background_visible="true" bevel_style="none" @@ -171,8 +173,8 @@ layout="topleft" left="0" name="edit_panel" - top_pad="0" - width="300"> + top="193" + width="313"> <button follows="bottom|left" height="25" @@ -185,75 +187,14 @@ name="gear_menu_btn" top="1" width="31" /> - <button - is_toggle="true" - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="AddItem_Off" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="add_btn" - top="1" - width="31" /> - <button - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="new_btn" - top="1" - width="31" /> - <button - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="Movement_Forward_On" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="move_closer_btn" - top="1" - width="31" /> - <button - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="Movement_Backward_On" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="move_further_btn" - top="1" - width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" - image_name="Toolbar_Middle_Off" + image_name="Toolbar_Right_Off" layout="topleft" left_pad="1" - name="dummy_icon" - width="105" /> - <button - follows="bottom|right" - height="25" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="TrashItem_Off" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - layout="topleft" - name="remove_from_outfit_btn" - right="-1" - top="1" - width="31" /> + name="dummy_right_icon" + width="281" /> </panel> </layout_panel> @@ -264,7 +205,7 @@ height="210" min_height="210" name="add_wearables_panel" - width="300" + width="313" tab_group="2" user_resize="true" visible="false"> @@ -448,22 +389,6 @@ name="add_to_outfit_btn" top="1" width="31" /> - <icon - follows="bottom|left" - height="25" - image_name="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="dummy_middle_icon" - width="140" /> - <icon - follows="bottom|left" - height="25" - image_name="Toolbar_Right_Off" - layout="topleft" - left_pad="1" - name="dummy_right_icon" - width="31" /> </panel> </layout_panel> </layout_stack> @@ -472,25 +397,28 @@ follows="left|right|bottom" height="30" layout="topleft" - left="5" - top_pad="10" + left="4" + top_pad="2" name="save_revert_button_bar" width="300"> <button - follows="bottom|left|right" + follows="bottom|left" height="23" label="Save" left="0" layout="topleft" name="save_btn" - width="145" /> + top="0" + width="155" /> <button - follows="bottom|right" + follows="bottom|left" height="23" name="save_flyout_btn" label="" + layout="topleft" left_pad="-20" tab_stop="false" + top="0" image_selected="SegmentedBtn_Right_Selected_Press" image_unselected="SegmentedBtn_Right_Off" image_pressed="SegmentedBtn_Right_Press" @@ -500,10 +428,11 @@ <button follows="bottom|left|right" height="23" - left_pad="15" + left_pad="12" label="Revert" layout="topleft" name="revert_btn" - width="145" /> + top="0" + width="147" /> </panel> </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 b8ad278da7..9e59651bd1 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -5,7 +5,7 @@ background_opaque="true" background_visible="true" follows="all" - height="570" + height="575" label="Things" layout="topleft" min_height="350" @@ -14,7 +14,7 @@ border="false"> <tab_container follows="all" - height="501" + height="509" layout="topleft" left="7" name="appearance_tabs" @@ -22,6 +22,7 @@ tab_height="30" tab_position="top" halign="center" + top="8" width="312"> <panel class="outfits_list" @@ -50,8 +51,8 @@ </tab_container> <panel background_visible="true" - follows="bottom|left" - height="73" + follows="bottom|left|right" + height="57" layout="topleft" left="9" top_pad="-1" @@ -72,7 +73,7 @@ top="1" width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Middle_Off" layout="topleft" @@ -82,7 +83,7 @@ /> <dnd_button - follows="bottom|left" + follows="bottom|right" height="25" image_hover_unselected="Toolbar_Right_Over" image_overlay="TrashItem_Off" @@ -104,7 +105,7 @@ left="0" width="153" /> <button - follows="bottom|right" + follows="bottom|left|right" height="23" label="Wear" layout="topleft" @@ -112,16 +113,6 @@ left_pad="3" tool_tip="Wear selected outfit" width="152" /> - <button - follows="bottom|left" - height="23" - label="Edit Outfit" - layout="topleft" - right="-140" - name="edit_current_outfit_btn" - top="26" - visible="false" - width="50" /> </panel> </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 73650a19dc..e74c70789f 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -15,63 +15,85 @@ width="333"> <string name="No Outfit" value="No Outfit" /> + <string + name="Unsaved Changes" + value="Unsaved changes" /> + <string + name="Now Wearing" + value="Now wearing..." /> <panel - left="0" - top="0" - follows="all" + background_opaque="true" + background_visible="true" + bg_opaque_color="DkGray2" + left="10" + top="5" + follows="left|top|right" layout="topleft" - width="330" + width="303" height="33" name="panel_currentlook" > <button follows="left|top" - top="0" width="1" height="1" + left="205" top="7" width="20" height="20" + label="E" layout="topleft" - left="0" - name="editappearance_btn" /> + name="editappearance_btn" + visible="false" /> <button follows="left|top" - top="0" width="1" height="1" + left="235" top="7" width="20" height="20" + label="O" layout="topleft" - left="0" - name="openoutfit_btn" /> + name="openoutfit_btn" + visible="false" /> <icon follows="top|left" - height="24" + height="32" image_name="TabIcon_Appearance_Off" name="outfit_icon" mouse_opaque="false" visible="true" - left="9" + left="0" top="0" - width="24" /> + width="32" /> <text - font="SansSerifHugeBold" + font="SansSerifSmallBold" + text_color="EmphasisColor" + width="300" + height="10" + follows="top|left" + layout="topleft" + left="35" + top="3" + mouse_opaque="false" + name="currentlook_status" > + (Status) + </text> + <text + font="SansSerifLargeBold" height="20" - left_pad="5" - text_color="LtGray" - top="0" + left="35" + text_color="White" + top="15" use_ellipses="true" - width="305" + width="230" follows="top|left" - word_wrap="true" + word_wrap="false" mouse_opaque="false" name="currentlook_name"> MyOutfit With a really Long Name like MOOSE </text> - <text - font="SansSerifSmall" - text_color="White_50" - width="300" - height="1" - follows="top|left" + <button + follows="left|top" + height="20" + image_overlay="windows/Icon_Gear_Over.png" + label="" layout="topleft" - top_pad="5" - mouse_opaque="false" - name="currentlook_title" > - (unsaved) - </text> + left="265" + name="edit_outfit_btn" + top="7" + width="30" /> </panel> <filter_editor height="23" @@ -87,7 +109,7 @@ width="333"> class="panel_outfits_inventory" filename="panel_outfits_inventory.xml" name="panel_outfits_inventory" - height="505" + height="493" min_height="410" width="320" left="0" @@ -106,7 +128,7 @@ width="333"> <panel class="panel_outfit_edit" filename="panel_outfit_edit.xml" - height="550" + height="565" follows="all" layout="topleft" left="5" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index e0d58a16c8..f544449d02 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2163,10 +2163,11 @@ Clears (deletes) the media and all params from the given face. <string name="BusyModeResponseDefault">The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.</string> <!-- Mute --> - <string name="MuteByName">(by name)</string> + <string name="MuteByName">(By name)</string> <string name="MuteAgent">(Resident)</string> - <string name="MuteObject">(object)</string> - <string name="MuteGroup">(group)</string> + <string name="MuteObject">(Object)</string> + <string name="MuteGroup">(Group)</string> + <string name="MuteExternal">(External)</string> <!-- Region/Estate Covenant --> <string name="RegionNoCovenant">There is no Covenant provided for this Estate.</string> diff --git a/indra/newview/skins/default/xui/ja/floater_world_map.xml b/indra/newview/skins/default/xui/ja/floater_world_map.xml index 0e489be9a8..ce9e7d0777 100644 --- a/indra/newview/skins/default/xui/ja/floater_world_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_world_map.xml @@ -23,7 +23,7 @@ 土地販売 </text> <text name="by_owner_label"> - 所有者にて + 所有者の販売 </text> <text name="auction_label"> 土地オークション @@ -68,7 +68,7 @@ <scroll_list.columns label="" name="sim_name"/> </scroll_list> <button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="選択した場所にテレポートします"/> - <button label="SLurl をコピー" name="copy_slurl" tool_tip="現在地の SLurl をコピーして Web で使用します。"/> + <button label="SLurl をコピー" name="copy_slurl" tool_tip="現在地の SLurl をコピーして Web で使用します"/> <button label="選択を表示する" label_selected="目的地を表示" name="Show Destination" tool_tip="選択した場所を地図の中心に表示します"/> </panel> <panel name="layout_panel_5"> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index ce3ac32568..b4bf1c0ff0 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -2659,7 +2659,7 @@ M キーを押して変更します。 じゅうぶんなスペースができればボタンは表示されます。 </notification> <notification name="ShareNotification"> - 住人選択画面に表示された人に、持ち物からアイテムをドラッグ + 住人選択画面に表示された人に「持ち物」からアイテムをドラッグしてください </notification> <notification name="AvatarRezNotification"> アバター名「 [NAME] 」が [TIME] 秒で出現します。 diff --git a/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml index 0cee35b901..bac885e5d8 100644 --- a/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml +++ b/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- *NOTE: mantipov: this xml is intended to be used inside panel_outfits_list.xml for each outfit folder--> <!-- All accordion tabs in the My Appearance/My Outfits panel will be created from this one at runtume--> -<accordion_tab name="Mockup Tab" title="モックアップタブ"/> +<accordion_tab name="Mockup Tab" title="Mockup Tab"/> diff --git a/indra/newview/skins/default/xui/ja/panel_group_general.xml b/indra/newview/skins/default/xui/ja/panel_group_general.xml index 94efd00770..bfe69cbdd9 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_general.xml @@ -48,7 +48,7 @@ <spinner label="L$" name="spin_enrollment_fee" tool_tip="「入会費」にチェックが入っている場合、新規メンバーは指定された入会費を支払わなければグループに入れません。"/> <combo_box name="group_mature_check" tool_tip="あなたのグループに「Moderate」にレート設定された情報があるかどうかを設定します"> <combo_item name="select_mature"> - - Mature の選択 - + - レーティングの選択 - </combo_item> <combo_box.item label="「Moderate」コンテンツ" name="mature"/> <combo_box.item label="「General」コンテンツ" name="pg"/> diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml index 1d29080687..5af578b640 100644 --- a/indra/newview/skins/default/xui/ja/panel_people.xml +++ b/indra/newview/skins/default/xui/ja/panel_people.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- Side tray panel --> <panel label="人" name="people_panel"> - <string name="no_recent_people" value="最近交流した人はいません。 一緒に何かする仲間もお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/> + <string name="no_recent_people" value="最近交流した人はいません。 一緒に何かする仲間をお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/> <string name="no_filtered_recent_people" value="お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。"/> - <string name="no_one_near" value="近くに誰もいません。 一緒に何かする仲間もお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/> + <string name="no_one_near" value="近くに誰もいません。 一緒に何かする仲間をお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/> <string name="no_one_filtered_near" value="お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。"/> <string name="no_friends_online" value="オンラインのフレンドはいません"/> <string name="no_friends" value="フレンドはいません"/> <string name="no_friends_msg"> 友達を見つけるには、[secondlife:///app/search/people 検索] をするか、住人を右クリックしてフレンド登録してください。 -一緒に何かする仲間もお探しですか? [secondlife:///app/worldmap 世界地図] をお試しください。 +一緒に何かする仲間をお探しですか? [secondlife:///app/worldmap 世界地図] をお試しください。 </string> <string name="no_filtered_friends_msg"> お探しのものは見つかりましたか? [secondlife:///app/search/people 検索] をお試しください。 diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 2ba437b710..560465f808 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -913,7 +913,7 @@ お探しのものは見つかりましたか? [secondlife:///app/search/all 検索] をお試しください。 </string> <string name="FavoritesNoMatchingItems"> - ここにランドマークをドラッグして、お気に入りに追加します。 + ここにランドマークをドラッグしてお気に入りに追加します。 </string> <string name="InventoryNoTexture"> 「持ち物」内にこのテクスチャのコピーがありません @@ -3355,10 +3355,10 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ ビューワの起動に失敗しました </string> <string name="ItemsComingInTooFastFrom"> - [APP_NAME] : アイテムが [FROM_NAME] から一気に読み込まれているため、自動プレビューが [TIME] 秒間無効となります。 + [APP_NAME] : アイテムが [FROM_NAME] から同時にたくさん読み込まれているため、自動プレビューが [TIME] 秒間無効となります。 </string> <string name="ItemsComingInTooFast"> - [APP_NAME] : アイテムが一気に読み込まれているため、自動プレビューが [TIME] 秒間無効となります。 + [APP_NAME] : アイテムが同時にたくさん読み込まれているため、自動プレビューが [TIME] 秒間無効となります。 </string> <string name="IM_logging_string"> -- インスタントメッセージの保存開始 -- diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml index cebf03755b..787836a8bd 100644 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -39,10 +39,10 @@ ID do Leilão: [ID] </panel.string> <panel.string name="need_tier_to_modify"> - Você deve ter sua compra aprovada para modificar este terreno. + Sua compra deve ser aprovada para você modificar este terreno. </panel.string> <panel.string name="group_owned_text"> - (Possuído pelo Grupo) + (Propriedade do grupo) </panel.string> <panel.string name="profile_text"> Perfil... @@ -57,11 +57,11 @@ (nenhum) </panel.string> <panel.string name="sale_pending_text"> - (Venda Pendente) + (Venda pendendo) </panel.string> <panel.string name="no_selection_text"> Nenhum lote selecionado. -Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar seus detalhes. +Vá para o menu Mundo > Sobre o terreno ou selecione outro lote para mostrar os detalhes. </panel.string> <text name="Name:"> Nome: @@ -79,7 +79,7 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se Classificação: </text> <text name="ContentRatingText"> - Adult + Adulto </text> <text name="Owner:"> Proprietário: @@ -94,14 +94,14 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se Leyla Linden </text> <button label="Ajustar" name="Set..."/> - <check_box label="Permitir posse para o grupo" name="check deed" tool_tip="O gerente do grupo pode acionar essa terra ao grupo, então esta será mantida pelo gestor da ilha"/> - <button label="Passar" name="Deed..." tool_tip="Você só pode delegar esta terra se você for um gerente selecionado pelo grupo."/> - <check_box label="Proprietário faz contribuição com delegação" name="check contrib" tool_tip="Quando a terra é delegada ao grupo, o proprietário anterior contribui alocando terra suficiente para mantê-la."/> + <check_box label="Permitir doação para o grupo" name="check deed" tool_tip="Oficiais do grupo podem doar esse terreno ao grupo, passando a administração para o gestor da ilha"/> + <button label="Passar" name="Deed..." tool_tip="Você só pode doar o terreno se você for um dos oficiais do grupo selecionado."/> + <check_box label="Proprietário faz contribuição com doação" name="check contrib" tool_tip="Quando o terreno é doado ao grupo, o proprietário anterior contribui alocando terra suficiente para mantê-la."/> <text name="For Sale:"> - À Venda: + À venda: </text> <text name="Not for sale."> - Não está à Venda. + Não está à venda. </text> <text name="For Sale: Price L$[PRICE]."> Preço: L$[PRICE] (L$[PRICE_PER_SQM]/m²). @@ -111,10 +111,10 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se À venda para: [BUYER] </text> <text name="Sell with landowners objects in parcel."> - À venda (Objetos incluídos). + À venda (objetos incluídos). </text> <text name="Selling with no objects in parcel."> - À venda (Objetos não incluídos). + À venda (objetos não incluídos). </text> <button label="Cancelar venda do terreno" label_selected="Cancelar venda do terreno" left="275" name="Cancel Land Sale" width="165"/> <text name="Claimed:"> @@ -137,7 +137,7 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se </text> <button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/> <button label="Dados do script" name="Scripts..."/> - <button label="Comprar para o Grupo" name="Buy For Group..."/> + <button label="Comprar para o grupo" name="Buy For Group..."/> <button label="Comprar passe..." label_selected="Comprar passe..." left="130" name="Buy Pass..." tool_tip="Um passe concede a você acesso temporário a este terreno." width="125"/> <button label="Abandonar terreno..." label_selected="Abandonar terreno..." name="Abandon Land..."/> <button label="Pedir terreno" name="Reclaim Land..."/> @@ -145,24 +145,22 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se </panel> <panel label="CONTRATO" name="land_covenant_panel"> <panel.string name="can_resell"> - Terrenos comprados nesta região podem ser revendidos. + Permitido para terrenos comprados nesta região. </panel.string> <panel.string name="can_not_resell"> - Terrenos comprados nesta região não podem ser revendidos. + Proibido para terrenos comprados nesta região. </panel.string> <panel.string name="can_change"> - Terrenos comprados nesta região podem ser compartilhados -ou sub-divididos. + Permitido subdividir terrenos comprados nesta região. </panel.string> <panel.string name="can_not_change"> - Terrenos comprados nesta região não podem ser compartilhados -ou sub-divididos. + Proibido compartilhar ou subdividir terrenos comprados nesta região. </panel.string> <text name="estate_section_lbl"> Propriedade: </text> <text name="estate_name_text"> - mainland + continente </text> <text name="estate_owner_lbl"> Dono: @@ -174,7 +172,7 @@ ou sub-divididos. Não há corretor para esta Propriedade. </text_editor> <text name="covenant_timestamp_text"> - Última Alteração: Qua, Dez 31 16:00:00 1969 + Última modificação: Qua, Dez 31 16:00:00 1969 </text> <text name="region_section_lbl"> Região: @@ -192,19 +190,19 @@ ou sub-divididos. Classificação: </text> <text name="region_maturity_text"> - Adult + Adulto </text> <text name="resellable_lbl"> Revender: </text> <text name="resellable_clause"> - Terra nesta região não pode ser revendida. + Proibido revender terrenos nesta região. </text> <text name="changeable_lbl"> Subdividir: </text> <text name="changeable_clause"> - Terra nesta região não pode ser unida/sub-dividida. + Proibido juntar/subdividir terrenos nesta região. </text> </panel> <panel label="OBJETOS" name="land_objects_panel"> @@ -224,13 +222,13 @@ ou sub-divididos. [COUNT] de [MAX] ([AVAILABLE] disponíveis) </text> <text name="Primitives parcel supports:" width="200"> - Prims suportadas pelo lote: + Prims suportados pelo lote: </text> <text left="214" name="object_contrib_text" width="152"> [COUNT] </text> <text name="Primitives on parcel:"> - Prims no Lote: + Prims no lote: </text> <text left="214" name="total_objects_text" width="48"> [COUNT] @@ -242,15 +240,15 @@ ou sub-divididos. [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/> - <button label="Retornar" name="ReturnOwner..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> + <button label="Devolver" name="ReturnOwner..." right="-10" tool_tip="Devolver objetos a seus donos." width="119"/> <text left="14" name="Set to group:" width="180"> - Configurados ao grupo: + Reservado para o grupo: </text> <text left="214" name="group_objects_text" width="48"> [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/> - <button label="Retornar" name="ReturnGroup..." right="-10" tool_tip="Retornar os objetos para seus donos." width="119"/> + <button label="Devolver" name="ReturnGroup..." right="-10" tool_tip="Devolver objetos a seus donos." width="119"/> <text left="14" name="Owned by others:" width="128"> Propriedade de outros: </text> @@ -258,7 +256,7 @@ ou sub-divididos. [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/> - <button label="Retornar" name="ReturnOther..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> + <button label="Devolver" name="ReturnOther..." right="-10" tool_tip="Devolver objetos a seus donos." width="119"/> <text left="14" name="Selected / sat upon:" width="193"> Selecionado/Sentado: </text> @@ -273,7 +271,7 @@ ou sub-divididos. Donos dos objetos: </text> <button label="Atualizar lista" label_selected="Atualizar lista" left="118" name="Refresh List" tool_tip="Refresh Object List"/> - <button label="Retornar objetos..." label_selected="Retornar objetos..." left="230" name="Return objects..."/> + <button label="Devolver objetos..." label_selected="Devolver objetos..." left="230" name="Return objects..."/> <name_list name="owner list"> <name_list.columns label="Tipo" name="type"/> <name_list.columns label="Nome" name="name"/> @@ -299,32 +297,32 @@ Apenas lotes maiores podem ser listados na busca. Conteúdo Adulto </panel.string> <panel.string name="mature_check_mature_tooltip"> - A informação do seu lote ou seu conteúdo são considerados adulto. + Os dados do seu lote ou seu conteúdo são considerados adulto. </panel.string> <panel.string name="mature_check_adult_tooltip"> - A informação do seu lote ou seu conteúdo são considerados adulto. + Os dados do seu lote ou seu conteúdo são considerados adulto. </panel.string> <panel.string name="landing_point_none"> (nenhum) </panel.string> <panel.string name="push_restrict_text"> - Sem empurrar + Proibido empurrar </panel.string> <panel.string name="push_restrict_region_text"> - Sem empurrar (imposição na região) + Proibido empurrar (regulamento da região) </panel.string> <text name="allow_label"> Autorizar outros residentes a: </text> - <check_box label="Editar Terreno" name="edit land check" tool_tip="Se ativado, qualquer um pode modificar a forma da sua terra. É melhor deixar esta opção desativada, uma vez que você sempre pode editar seu próprio terreno."/> - <check_box label="Voar" name="check fly" tool_tip="Se ativado, os Residentes podem voar na sua terra. Se desativado, eles podem voar apenas para dentro e por cima de sua terra."/> + <check_box label="Editar terreno" name="edit land check" tool_tip="Se ativado, qualquer um pode modificar o terreno. É melhor deixar esta opção desativada, uma vez que você sempre pode editar seu próprio terreno."/> + <check_box label="Voar" name="check fly" tool_tip="Se ativado, residentes podem voar sobre seu terreno. Se desativado, eles podem voar apenas até chegar ou sobrevoar o seu terreno."/> <text name="allow_label2"> Criar objetos: </text> <check_box label="Residentes" name="edit objects check"/> <check_box label="Grupo" name="edit group objects check"/> <text name="allow_label3"> - Entrada do objeto: + Entrada de objetos: </text> <check_box label="Residentes" name="all object entry check"/> <check_box label="Grupo" name="group object entry check"/> @@ -334,10 +332,10 @@ Apenas lotes maiores podem ser listados na busca. <check_box label="Residentes" name="check other scripts"/> <check_box label="Grupo" name="check group scripts"/> <text name="land_options_label"> - Opções de terra: + Opções do terreno: </text> - <check_box label="Salvo (sem dano)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, desabilitando combate com danos. Se não ativado, o combate com danos é habilitado."/> - <check_box label="Sem Empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. A ativação dessa opção pode ser útil para prevenir comportamentos desordeiros na sua terra."/> + <check_box label="Seguro (sem danos)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, impedindo lutas com danos. Se não ativado, lutas com danos é habilitado."/> + <check_box label="Proibido empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. Ativar essa opção ajuda a prevenir comportamentos desordeiros no seu terreno."/> <check_box label="Mostrar terreno nos resultados de busca (L$30/semana)" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/> <combo_box left="265" name="land category with adult" width="155"> <combo_box.item label="Qualquer categoria" name="item0"/> @@ -348,7 +346,7 @@ Apenas lotes maiores podem ser listados na busca. <combo_box.item label="Educacional" name="item5"/> <combo_box.item label="Jogos" name="item6"/> <combo_box.item label="Moradia" name="item7"/> - <combo_box.item label="Amigável a Novos Usuários" name="item8"/> + <combo_box.item label="Amigável a novos usuários" name="item8"/> <combo_box.item label="Parques & Natureza" name="item9"/> <combo_box.item label="Residencial" name="item10"/> <combo_box.item label="Compras" name="item11"/> @@ -362,7 +360,7 @@ Apenas lotes maiores podem ser listados na busca. <combo_box.item label="Educacional" name="item5"/> <combo_box.item label="Jogos" name="item6"/> <combo_box.item label="Moradia" name="item7"/> - <combo_box.item label="Amigável a Novos Usuários" name="item8"/> + <combo_box.item label="Amigável a novos usuários" name="item8"/> <combo_box.item label="Parques e Natureza" name="item9"/> <combo_box.item label="Residencial" name="item10"/> <combo_box.item label="Compras" name="item11"/> @@ -376,10 +374,10 @@ Apenas lotes maiores podem ser listados na busca. <text name="landing_point"> Ponto de Aterrissagem: [LANDING] </text> - <button label="Definir" label_selected="Definir" name="Set" tool_tip="Define o ponto de aterrissagem aonde o visitante chega. Define para o ponto em que seu avatar se encontra neste lote."/> + <button label="Definir" label_selected="Definir" name="Set" tool_tip="Define o ponto de aterrissagem de visitantes. Define para o ponto em que seu avatar se encontra neste lote."/> <button label="Limpar" label_selected="Limpar" name="Clear" tool_tip="Limpar o ponto de aterrissagem."/> <text name="Teleport Routing: "> - Rota de Teletransporte: + Rota de teletransporte: </text> <combo_box left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os teletransportes no seu lote." width="160"> <combo_box.item label="Bloqueado" name="Blocked"/> @@ -408,7 +406,7 @@ Textura: </text> <texture_picker label="" left="97" name="media texture" tool_tip="Clique para escolher uma imagem"/> <text name="replace_texture_help"> - Objetos com esta textura vão aparecer no filme ou página da web depois de clicar em Tocar. Selecione outras texturas clicando nas miniaturas. + Objetos com esta textura vão aparecer no filme ou página da web depois de clicar em Tocar. Selecione outras texturas clicando nas miniaturas. </text> <check_box label="Escala automática" left="97" name="media_auto_scale" tool_tip="Marcando esta opção o conteúdo se ajustará ao lote automaticamente. A mídia pode se tornar lenta e com baixa qualidade visual mas nenhum outro ajuste de textura ou alinhamento será necessário."/> <text left="102" name="media_size" tool_tip="Tamanho para desenhar a mídia Web, deixar 0 como padrão." width="115"> @@ -423,7 +421,7 @@ Textura: Opções de Mídia: </text> - <check_box label="Mídia em Repetição" name="media_loop" tool_tip="Executar a mídia repetidamente. Quando a mídia terminar a execução, ela reiniciará do começo."/> + <check_box label="Repetir mídia" name="media_loop" tool_tip="Executar a mídia repetidamente. Quando a mídia chegar ao fim, ela recomeça."/> </panel> <panel label="SOM" name="land_audio_panel"> <check_box label="Ocultar URL" name="hide_music_url" tool_tip="Selecionar esta opção oculta o URL de música a visitantes não autorizados aos dados do terreno."/> diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml index 82f21fac70..91dc034907 100644 --- a/indra/newview/skins/default/xui/pt/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_god_tools.xml @@ -10,7 +10,7 @@ </text> <check_box label="Prelúdio" name="check prelude" tool_tip="Ajustar para tornar esta região um prelúdio."/> <check_box label="Fixar Sol" name="check fixed sun" tool_tip="Fixa a posição do sol (como em Região/Estados) > Terreno."/> - <check_box label="Redefinir Home no teletransporte" name="check reset home" tool_tip="Quando um residente sair, definir o destino com sua posição inicial."/> + <check_box label="Redefinir Início no teletransporte" name="check reset home" tool_tip="Quando um residente sair, definir o destino com sua posição inicial."/> <check_box label="Visível" name="check visible" tool_tip="Ajustar para fazer essa região visível para os não-deuses"/> <check_box label="Dano" name="check damage" tool_tip="Ajustar para permitir dano nesta região"/> <check_box label="Bloquear ratreamento do Tráfego" name="block dwell" tool_tip="Configure isto para fazer a região não computar o tráfego."/> diff --git a/indra/newview/skins/default/xui/pt/floater_postcard.xml b/indra/newview/skins/default/xui/pt/floater_postcard.xml index d3c5b6ec23..9740fbcb4d 100644 --- a/indra/newview/skins/default/xui/pt/floater_postcard.xml +++ b/indra/newview/skins/default/xui/pt/floater_postcard.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Postcard" title="ENVIAR FOTO VIA EMAIL"> <text name="to_label" width="135"> - Email do Destinatário: + Para (email): </text> <line_editor left="143" name="to_form" width="127"/> <text name="from_label"> - Seu Email: + De (email): </text> <line_editor left="143" name="from_form" width="127"/> <text name="name_label"> @@ -16,7 +16,7 @@ Assunto: </text> <line_editor left="143" name="subject_form" width="127"/> - <line_editor label="Digite seu assunto aqui." name="subject_form"/> + <line_editor label="Digite o assunto aqui" name="subject_form"/> <text name="msg_label"> Mensagem: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml index 115192203f..efd90dfaa4 100644 --- a/indra/newview/skins/default/xui/pt/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml @@ -28,7 +28,7 @@ <text name="auction_label"> leilão de terrenos </text> - <button label="Ir para Casa" label_selected="Ir para casa" name="Go Home" tool_tip="Teletransportar para meu início"/> + <button label="Voltar ao meu início" label_selected="Voltar ao meu início" name="Go Home" tool_tip="Teletransportar para meu início"/> <text name="Home_label"> Início </text> diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index 2f3345741c..84ad056df6 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -47,8 +47,8 @@ <menu_item_check label="Coordenadas" name="Coordinates"/> <menu_item_check label="Propriedades do lote" name="Parcel Properties"/> </menu> - <menu_item_call label="Teletransportar para início" name="Teleport Home"/> - <menu_item_call label="Definir como casa" name="Set Home to Here"/> + <menu_item_call label="Teletransportar para meu início" name="Teleport Home"/> + <menu_item_call label="Definir como Início" name="Set Home to Here"/> <menu label="Sol" name="Environment Settings"> <menu_item_call label="Amanhecer" name="Sunrise"/> <menu_item_call label="Meio-dia" name="Noon"/> @@ -297,7 +297,7 @@ <menu_item_call label="Force Owner To Me" name="Force Owner To Me"/> <menu_item_call label="Force Owner Permissive" name="Force Owner Permissive"/> <menu_item_call label="Excluir" name="Delete"/> - <menu_item_call label="Lock" name="Lock"/> + <menu_item_call label="Bloquear" name="Lock"/> </menu> <menu label="Lote" name="Parcel"> <menu_item_call label="Force Owner To Me" name="Owner To Me"/> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index b888510922..039c6b334c 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -426,7 +426,7 @@ O objeto pode estar fora de alcance ou ter sido deletado. </notification> <notification name="StartRegionEmpty"> Oops, você ainda não definiu sua região de partida. -Digite o nome da região na caixa 'Ponto de partida' ou selecione 'Última localização' ou 'Minha casa' como ponto de partida. +Digite o nome da região na caixa 'Ponto de partida' ou selecione 'Última localização' ou 'Meu início' como ponto de partida. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CouldNotStartStopScript"> @@ -1067,7 +1067,7 @@ Você chegou a uma região próxima. <notification name="AvatarMovedHome"> Esse destino não está disponível no momento. Você chegou a uma região próxima. -Pense em usar outra região como casa. +Pense em usar outra região como seu início. </notification> <notification name="ClothingLoading"> As suas roupas estão sendo transferidas. @@ -1127,7 +1127,7 @@ Isso é realmente útil apenas para depuração. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="KickUsersFromRegion"> - Teletransportar para casa todos os residentes nesta região? + Teletransportar para o início todos os residentes nesta região? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="EstateObjectReturn"> @@ -2150,7 +2150,7 @@ Objetos não transferíveis dados ao grupo foram deletados. </notification> <notification name="NotSafe"> A opção 'danos' desta região está ativada. -Você pode se dar mal aqui. Se você morre, você será teletransportado de volta para casa. +Você pode se dar mal aqui. Se você morrer, você será teletransportado de volta para seu início. </notification> <notification name="NoFly"> Esta área desativou a opção de voar. @@ -2608,7 +2608,7 @@ Se você continuar a receber esta mensagem, consulte o [SUPPORT_SITE]. - A memória do seu sistema não suporta os requisitos mínimos exigidos. </global> <global name="You can only set your 'Home Location' on your land or at a mainland Infohub."> - Se você tem um terreno, seu terreno pode ser sua casa. + Se você tem um terreno, seu terreno pode ser seu início. Outra opção é procurar por lugares com a tag 'Infohub' no mapa. </global> </notifications> diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml index 61cdbaef13..588b8deaa3 100644 --- a/indra/newview/skins/default/xui/pt/panel_login.xml +++ b/indra/newview/skins/default/xui/pt/panel_login.xml @@ -25,7 +25,7 @@ </text> <combo_box name="start_location_combo"> <combo_box.item label="Última posição" name="MyLastLocation"/> - <combo_box.item label="Minha casa" name="MyHome"/> + <combo_box.item label="Meu início" name="MyHome"/> </combo_box> <button label="conectar" name="connect_btn"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml index 511c4426bb..01930bf3b3 100644 --- a/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml @@ -3,7 +3,7 @@ <panel name="navigation_panel"> <pull_button name="back_btn" tool_tip="Voltar para região anterior"/> <pull_button name="forward_btn" tool_tip="Avançar uma região"/> - <button name="home_btn" tool_tip="Teletransportar para minha casa"/> + <button name="home_btn" tool_tip="Teletransportar para meu início"/> <location_input label="Onde" name="location_combo"/> <search_combo_box label="Busca" name="search_combo_box" tool_tip="Busca"> <combo_editor label="Buscar no [SECOND_LIFE]" name="search_combo_editor"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml index 9c366fb4fd..6f2cae0476 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml @@ -11,7 +11,7 @@ <text name="heading2"> Posicionamento automático da: </text> - <check_box label="Construir/Editar" name="edit_camera_movement" tool_tip="Use o posicionamento automático da câmera quando entrar e sair do modo de edição"/> + <check_box label="Construção/Edição" name="edit_camera_movement" tool_tip="Use o posicionamento automático da câmera quando entrar e sair do modo de edição"/> <check_box label="Aparência" name="appearance_camera_movement" tool_tip="Use o posicionamento automático da câmera quando em modo de edição"/> <check_box label="Mostre-me em visão de mouse" name="first_person_avatar_visible"/> <check_box label="Teclas de seta sempre me movem" name="arrow_keys_move_avatar_check"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml index 5c69fa8de1..8a34897c9b 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml @@ -17,7 +17,7 @@ <combo_box.item label="日本語 (Japonês) - Beta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> - (Reinicie para mostrar o novo idioma) + (Reinicie para trocar de idioma) </text> <text name="maturity_desired_prompt"> Quero acessar conteúdo: diff --git a/indra/newview/skins/default/xui/pt/panel_side_tray.xml b/indra/newview/skins/default/xui/pt/panel_side_tray.xml index 09ac074b5a..1a424fb7f1 100644 --- a/indra/newview/skins/default/xui/pt/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/pt/panel_side_tray.xml @@ -3,27 +3,27 @@ partially on screen to hold tab buttons. --> <side_tray name="sidebar"> <sidetray_tab description="Exibir ou não barra lateral" name="sidebar_openclose" tab_title="Exibir ou não barra lateral"/> - <sidetray_tab description="Casa." name="sidebar_home" tab_title="Home"> - <panel label="casa" name="panel_home"/> + <sidetray_tab description="Início" name="sidebar_home" tab_title="Início"> + <panel label="Início" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Editar seu perfil público e destaques ." name="sidebar_me" tab_title="My Profile"> + <sidetray_tab description="Edite seu perfil público e destaques." name="sidebar_me" tab_title="Meu perfil"> <panel_container name="panel_container"> <panel label="Eu" name="panel_me"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Encontre seus amigos, contatos e pessoas nas proximidades." name="sidebar_people" tab_title="People"> + <sidetray_tab description="Encontre seus amigos, contatos e pessoas nas proximidades." name="sidebar_people" tab_title="Pessoas"> <panel_container name="panel_container"> <panel label="Perfil do grupo" name="panel_group_info_sidetray"/> <panel label="Residentes& Objetos bloqueados" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Encontre lugares para ir e lugares que você ja visitou." label="Lugares" name="sidebar_places" tab_title="Places"> + <sidetray_tab description="Encontre lugares para ir e lugares que você ja visitou." label="Lugares" name="sidebar_places" tab_title="Lugares"> <panel label="Lugares" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Busca no seu inventário." name="sidebar_inventory" tab_title="My Inventory"> + <sidetray_tab description="Abra seu inventário." name="sidebar_inventory" tab_title="Meu inventário"> <panel label="Editar inventário" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Muda sua aparência e visual atual." name="sidebar_appearance" tab_title="My Appearance"> + <sidetray_tab description="Muda sua aparência e seu visual atual." name="sidebar_appearance" tab_title="Minha aparência"> <panel label="Editar aparência" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml index 92ffee0233..11ea0f4195 100644 --- a/indra/newview/skins/default/xui/pt/teleport_strings.xml +++ b/indra/newview/skins/default/xui/pt/teleport_strings.xml @@ -51,7 +51,7 @@ Se você continuar a receber esta mensagem, por favor consulte o [SUPPORT_SITE]. Transferindo para o destino. </message> <message name="sending_home"> - Enviando solicitação de localização da casa. + Enviando solicitação de localização de início. </message> <message name="sending_landmark"> Enviando solicitação de localização de landmark. |