From edb1be15b03533610787355d643f74d8feb92428 Mon Sep 17 00:00:00 2001 From: Vladimir Pchelko <pchelko@productengine.com> Date: Wed, 23 Jun 2010 15:06:54 +0300 Subject: EXT-7776 ADDITIONAL FIX Change "revert_button" label to "Undo Changes" Reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/578/ --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/panel_edit_wearable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 1ab9f722d0..06255353a7 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -390,7 +390,7 @@ <button follows="bottomleft" height="23" - label="Revert" + label="Undo Changes" layout="topleft" left_pad="7" name="revert_button" -- cgit v1.2.3 From 08381a276dbf0544692c44236b40f57ec111aefc Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 23 Jun 2010 15:30:48 +0300 Subject: EXT-7755 ADDITIONAL FIX Fixed issues with wrong title after an outfit from the Inventory is worn, "Wear..." menu items state is made consistent with "Wear" button. * Empty string is replaced with "Changing outfits" while changing COF; * Fixed title to show "No Outfit" after an outfit from the Inventory is worn; * Fixed bug with visible indicator after an empty folder is DnD from the Inventory "Clothing" * Updated context and Gear "Wear..." menu items to take into account "isCOFChangeInProgress" state in on_enable callbacks Reviewed by Neal Orman at https://codereview.productengine.com/secondlife/r/625/ --HG-- branch : product-engine --- indra/newview/llappearancemgr.cpp | 3 ++- indra/newview/llappearancemgr.h | 3 +++ indra/newview/lloutfitslist.cpp | 5 +++++ indra/newview/llpaneloutfitsinventory.cpp | 16 +++++++++++++--- indra/newview/llpaneloutfitsinventory.h | 4 +++- indra/newview/llsidepanelappearance.cpp | 10 ++++++++-- indra/newview/skins/default/xui/en/menu_outfit_tab.xml | 3 +++ .../skins/default/xui/en/sidepanel_appearance.xml | 3 +++ 8 files changed, 40 insertions(+), 7 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 3947be49bb..f088a620d6 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1697,9 +1697,10 @@ void LLAppearanceMgr::getUserDescendents(const LLUUID& category, void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append) { - gAgentWearables.notifyLoadingStarted(); if(!category) return; + gAgentWearables.notifyLoadingStarted(); + llinfos << "wearInventoryCategory( " << category->getName() << " )" << llendl; diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index ab4ff1bcfc..982aa02cd0 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -360,6 +360,9 @@ public: << llendl; //dec_busy_count(); gInventory.removeObserver(this); + + // lets notify observers that loading is finished. + gAgentWearables.notifyLoadingFinished(); delete this; return; } diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 6542afc366..b3d39f2a4a 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -103,8 +103,13 @@ protected: { return get_is_category_renameable(&gInventory, outfit_cat_id); } + else if ("wear_replace" == param) + { + return !gAgentWearables.isCOFChangeInProgress(); + } else if ("wear_add" == param) { + if (gAgentWearables.isCOFChangeInProgress()) return false; return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id); } else if ("take_off" == param) diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index d382c77430..77c135c716 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -72,11 +72,13 @@ static const std::string COF_TAB_NAME = "cof_tab"; static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory"); +class LLPanelOutfitsInventory; class LLOutfitListGearMenu { public: - LLOutfitListGearMenu(LLOutfitsList* olist) + LLOutfitListGearMenu(LLOutfitsList* olist, LLPanelOutfitsInventory* parent_panel) : mOutfitList(olist), + mMyOutfitsPanel(parent_panel), mMenu(NULL) { llassert_always(mOutfitList); @@ -209,6 +211,11 @@ private: { return LLAppearanceMgr::getCanRemoveFromCOF(selected_outfit_id); } + else if ("wear" == param) + { + return mMyOutfitsPanel->isActionEnabled(param); + } + return true; } @@ -233,6 +240,7 @@ private: LLOutfitsList* mOutfitList; LLMenuGL* mMenu; + LLPanelOutfitsInventory* mMyOutfitsPanel; }; LLPanelOutfitsInventory::LLPanelOutfitsInventory() : @@ -550,13 +558,13 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() , _7 // EAcceptance* accept )); - mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel); + mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel, this); } void LLPanelOutfitsInventory::updateListCommands() { bool trash_enabled = isActionEnabled("delete"); - bool wear_enabled = !gAgentWearables.isCOFChangeInProgress() && isActionEnabled("wear"); + bool wear_enabled = isActionEnabled("wear"); bool wear_visible = !isCOFPanelActive(); bool make_outfit_enabled = isActionEnabled("save_outfit"); @@ -710,6 +718,8 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) if (command_name == "wear") { + if (gAgentWearables.isCOFChangeInProgress()) return FALSE; + if (isCOFPanelActive()) { return FALSE; diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index eabfda7f8c..287fcbf4bb 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -112,6 +112,9 @@ private: ////////////////////////////////////////////////////////////////////////////////// // List Commands // +public: + BOOL isActionEnabled(const LLSD& command_name); + protected: void initListCommandsHandlers(); void updateListCommands(); @@ -119,7 +122,6 @@ protected: void showGearMenu(); void onTrashButtonClick(); void onClipboardAction(const LLSD& userdata); - BOOL isActionEnabled(const LLSD& command_name); void onCustomAction(const LLSD& command_name); bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept); bool hasItemsSelected(); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 0d1be91125..ea5796d766 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -390,8 +390,8 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name) return; } - std::string look_name = gAgentWearables.isCOFChangeInProgress() ? "" : getString("No Outfit"); - mCurrentLookName->setText(look_name); + std::string string_name = gAgentWearables.isCOFChangeInProgress() ? "Changing outfits" : "No Outfit"; + mCurrentLookName->setText(getString(string_name)); mOpenOutfitBtn->setEnabled(FALSE); } else @@ -475,6 +475,12 @@ void LLSidepanelAppearance::setWearablesLoading(bool val) { childSetVisible("wearables_loading_indicator", val); childSetVisible("edit_outfit_btn", !val); + + if (!val) + { + // refresh outfit name when COF is already changed. + refreshCurrentOutfitName(); + } } void LLSidepanelAppearance::showDefaultSubpart() diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml index 9c3151fe07..8c8bb29baf 100644 --- a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml +++ b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml @@ -8,6 +8,9 @@ name="wear_replace"> <on_click function="Outfit.WearReplace" /> + <on_enable + function="Outfit.OnEnable" + parameter="wear_replace" /> <on_visible function="Outfit.OnVisible" parameter="wear_replace" /> diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index e189d11d35..9a07d3a48a 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -21,6 +21,9 @@ width="333"> <string name="Now Wearing" value="Now wearing..." /> + <string + name="Changing outfits" + value="Changing outfits" /> <panel background_opaque="true" background_visible="true" -- cgit v1.2.3 From 719667cdb82a68d4453cd4382374d94f35d68336 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Wed, 23 Jun 2010 15:34:32 +0300 Subject: EXT-4374 ADDITIONAL FIX Updated initial fix with refreshing from inventory item when a gesture asset is loaded. Reviewed by Loren Shih at https://codereview.productengine.com/secondlife/r/629/ --HG-- branch : product-engine --- indra/newview/llpreviewgesture.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index ff315d3c53..a7b4873fed 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -876,6 +876,7 @@ void LLPreviewGesture::onLoadComplete(LLVFS *vfs, self->mDirty = FALSE; self->refresh(); + self->refreshFromItem(); // to update description and title } else { -- cgit v1.2.3 From d5fb82283997f50d81af7dbf364783a5961b75d5 Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Wed, 23 Jun 2010 17:29:37 +0300 Subject: Linux build fix. --HG-- branch : product-engine --- indra/newview/llappearancemgr.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 982aa02cd0..61779d5c0e 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -34,10 +34,12 @@ #define LL_LLAPPEARANCEMGR_H #include "llsingleton.h" + +#include "llagentwearables.h" +#include "llcallbacklist.h" #include "llinventorymodel.h" #include "llinventoryobserver.h" #include "llviewerinventory.h" -#include "llcallbacklist.h" class LLWearable; class LLWearableHoldingPattern; -- cgit v1.2.3 From ce9ac6501461eca8acd2c1074d71a9ed6df13df3 Mon Sep 17 00:00:00 2001 From: Yuri Chebotarev <ychebotarev@productengine.com> Date: Wed, 23 Jun 2010 17:43:43 +0300 Subject: EXT-7963 FIX introduce new variable "keep_selection_visible_on_reshape" and use it for "edit outfit" flatlist controls. reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/641/ --HG-- branch : product-engine --- indra/llui/llflatlistview.cpp | 8 ++++++++ indra/llui/llflatlistview.h | 5 +++++ indra/newview/skins/default/xui/en/panel_cof_wearables.xml | 3 +++ 3 files changed, 16 insertions(+) diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 2433c14315..c7463e581c 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -50,14 +50,21 @@ LLFlatListView::Params::Params() allow_select("allow_select"), multi_select("multi_select"), keep_one_selected("keep_one_selected"), + keep_selection_visible_on_reshape("keep_selection_visible_on_reshape",false), no_items_text("no_items_text") {}; void LLFlatListView::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) { + S32 delta = height - getRect().getHeight(); LLScrollContainer::reshape(width, height, called_from_parent); setItemsNoScrollWidth(width); rearrangeItems(); + + if(delta!= 0 && mKeepSelectionVisibleOnReshape) + { + ensureSelectedVisible(); + } } const LLRect& LLFlatListView::getItemsRect() const @@ -380,6 +387,7 @@ LLFlatListView::LLFlatListView(const LLFlatListView::Params& p) , mPrevNotifyParentRect(LLRect()) , mNoItemsCommentTextbox(NULL) , mIsConsecutiveSelection(false) + , mKeepSelectionVisibleOnReshape(p.keep_selection_visible_on_reshape) { mBorderThickness = getBorderWidth(); diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index f4e0426f15..0820a7ab67 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -105,6 +105,9 @@ public: /** don't allow to deselect all selected items (for mouse events on items only) */ Optional<bool> keep_one_selected; + /** try to keep selection visible after reshape */ + Optional<bool> keep_selection_visible_on_reshape; + /** padding between items */ Optional<U32> item_pad; @@ -412,6 +415,8 @@ private: bool mIsConsecutiveSelection; + bool mKeepSelectionVisibleOnReshape; + /** All pairs of the list */ pairs_list_t mItemPairs; 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 f016c27b0a..d2c8ab159f 100644 --- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml +++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml @@ -31,6 +31,7 @@ item_pad="3" layout="topleft" left="0" + keep_selection_visible_on_reshape="true" multi_select="true" name="list_attachments" top="0" @@ -45,6 +46,7 @@ follows="all" height="10" item_pad="3" + keep_selection_visible_on_reshape="true" layout="topleft" left="0" multi_select="true" @@ -61,6 +63,7 @@ follows="all" height="10" item_pad="3" + keep_selection_visible_on_reshape="true" layout="topleft" left="0" multi_select="true" -- cgit v1.2.3 From cc0e5419466a5f685b102cb1bda176c48e6577c8 Mon Sep 17 00:00:00 2001 From: Yuri Chebotarev <ychebotarev@productengine.com> Date: Wed, 23 Jun 2010 17:45:02 +0300 Subject: EXT-7988 FIX xml change - add green color reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/634/ --HG-- branch : product-engine --- indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml index dbe1ea2874..49c2abe1a5 100644 --- a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml @@ -14,5 +14,6 @@ <!-- style for inventory list item WORN on avatar --> <worn_style font="SansSerifSmall" - font.style="BOLD" /> + font.style="BOLD" + color="green" /> </inventory_list_item> -- cgit v1.2.3 From 4a0950e2d75a32d5eb4452520bff35967dc67ab2 Mon Sep 17 00:00:00 2001 From: Yuri Chebotarev <ychebotarev@productengine.com> Date: Wed, 23 Jun 2010 17:46:17 +0300 Subject: EXT-7973 FIX Hide "edit" menu item if there are unworn items in selection reviewed by Mike Antipov by https://codereview.productengine.com/secondlife/r/637/ --HG-- branch : product-engine --- indra/newview/llwearableitemslist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 832d4a2fe6..6aa6ebaa54 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -657,7 +657,7 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu setMenuItemVisible(menu, "wear_add", mask == MASK_CLOTHING && n_worn == 0); setMenuItemEnabled(menu, "wear_add", n_items == 1 && canAddWearable(ids.front())); setMenuItemVisible(menu, "wear", n_worn == 0); - setMenuItemVisible(menu, "edit", !standalone && mask & (MASK_CLOTHING|MASK_BODYPART)); + setMenuItemVisible(menu, "edit", !standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items); setMenuItemEnabled(menu, "edit", n_editable == 1 && n_worn == 1 && n_items == 1); setMenuItemVisible(menu, "create_new", mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1); setMenuItemVisible(menu, "show_original", !standalone); -- cgit v1.2.3 From 887b2858d4d180d3679f1eb39fd37be5a551615e Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Fri, 11 Jun 2010 20:02:42 +0300 Subject: EXT-7779 FIXED Changed wearing panel from inventory panel to a flat list similar to My Outfits view. - Added common interface for My Outfits and Wearing tabs. - Changed LLPanelOutfitsInventory to use common interface for My Outfits and Wearing tabs. - Removed dependency on outfits side panel from inventory bridge context menus. - Removed unused LLShowCreatedOutfit class from llagentwearables.cpp. - Restored opening newly created outfit in My Outfits tab. - Fixed worn items indication for Wearing tab items. Revieved by Neal Orman at https://codereview.productengine.com/secondlife/r/604/. --HG-- branch : product-engine --- indra/newview/CMakeLists.txt | 3 + indra/newview/llagentwearables.cpp | 40 -- indra/newview/llappearancemgr.cpp | 17 +- indra/newview/llinventorybridge.cpp | 64 +--- indra/newview/llinventorybridge.h | 1 - indra/newview/lloutfitslist.cpp | 78 +++- indra/newview/lloutfitslist.h | 22 +- indra/newview/llpanelappearancetab.h | 22 +- indra/newview/llpaneloutfitsinventory.cpp | 424 ++------------------- indra/newview/llpaneloutfitsinventory.h | 54 +-- indra/newview/llpanelwearing.cpp | 130 +++++++ indra/newview/llpanelwearing.h | 73 ++++ indra/newview/llwearableitemslist.cpp | 15 +- indra/newview/llwearableitemslist.h | 11 +- .../default/xui/en/panel_outfits_inventory.xml | 37 +- 15 files changed, 400 insertions(+), 591 deletions(-) create mode 100644 indra/newview/llpanelwearing.cpp create mode 100644 indra/newview/llpanelwearing.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index c1b2d680be..ce42cb6038 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -363,6 +363,7 @@ set(viewer_SOURCE_FILES llpaneltopinfobar.cpp llpanelvolume.cpp llpanelvolumepulldown.cpp + llpanelwearing.cpp llparcelselection.cpp llparticipantlist.cpp llpatchvertexarray.cpp @@ -830,6 +831,7 @@ set(viewer_HEADER_FILES lloutfitslist.h lloutfitobserver.h lloutputmonitorctrl.h + llpanelappearancetab.h llpanelavatar.h llpanelavatartag.h llpanelblockedlist.h @@ -883,6 +885,7 @@ set(viewer_HEADER_FILES llpaneltopinfobar.h llpanelvolume.h llpanelvolumepulldown.h + llpanelwearing.h llparcelselection.h llparticipantlist.h llpatchvertexarray.h diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 5728256dba..017fcf6e2b 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -48,7 +48,6 @@ #include "llmd5.h" #include "llnotificationsutil.h" #include "lloutfitobserver.h" -#include "llpaneloutfitsinventory.h" #include "llsidepanelappearance.h" #include "llsidetray.h" #include "lltexlayer.h" @@ -1232,45 +1231,6 @@ void LLAgentWearables::createStandardWearablesAllDone() gAgentAvatarp->onFirstTEMessageReceived(); } - -class LLShowCreatedOutfit: public LLInventoryCallback -{ -public: - LLShowCreatedOutfit(LLUUID& folder_id): - mFolderID(folder_id) - { - } - - virtual ~LLShowCreatedOutfit() - { - LLSD key; - LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key); - LLPanelOutfitsInventory *outfit_panel = - dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory")); - // TODO: add handling "My Outfits" tab. - if (outfit_panel && outfit_panel->isCOFPanelActive()) - { - outfit_panel->getRootFolder()->clearSelection(); - outfit_panel->getRootFolder()->setSelectionByID(mFolderID, TRUE); - } - LLAccordionCtrlTab* tab_outfits = outfit_panel ? outfit_panel->findChild<LLAccordionCtrlTab>("tab_outfits") : 0; - if (tab_outfits && !tab_outfits->getDisplayChildren()) - { - tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren()); - } - - LLAppearanceMgr::instance().updateIsDirty(); - LLAppearanceMgr::instance().updatePanelOutfitName(""); - } - - virtual void fire(const LLUUID&) - { - } - -private: - LLUUID mFolderID; -}; - void LLAgentWearables::makeNewOutfitDone(S32 type, U32 index) { LLUUID first_item_id = getWearableItemID((LLWearableType::EType)type, index); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index f088a620d6..597076503d 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -45,7 +45,7 @@ #include "llinventoryobserver.h" #include "llnotificationsutil.h" #include "lloutfitobserver.h" -#include "llpaneloutfitsinventory.h" +#include "lloutfitslist.h" #include "llselectmgr.h" #include "llsidepanelappearance.h" #include "llsidetray.h" @@ -2306,18 +2306,11 @@ public: { LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key); } - LLPanelOutfitsInventory *outfit_panel = - dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory")); - if (outfit_panel) + LLOutfitsList *outfits_list = + dynamic_cast<LLOutfitsList*>(LLSideTray::getInstance()->getPanel("outfitslist_tab")); + if (outfits_list) { - outfit_panel->getRootFolder()->clearSelection(); - outfit_panel->getRootFolder()->setSelectionByID(mFolderID, TRUE); - } - - LLAccordionCtrlTab* tab_outfits = outfit_panel ? outfit_panel->findChild<LLAccordionCtrlTab>("tab_outfits") : 0; - if (tab_outfits && !tab_outfits->getDisplayChildren()) - { - tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren()); + outfits_list->setSelectedOutfitByUUID(mFolderID); } LLAppearanceMgr::getInstance()->updateIsDirty(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index afaeddaaeb..a5f24c55fe 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -72,7 +72,6 @@ #include "llviewerwindow.h" #include "llvoavatarself.h" #include "llwearablelist.h" -#include "llpaneloutfitsinventory.h" typedef std::pair<LLUUID, LLUUID> two_uuids_t; typedef std::list<two_uuids_t> two_uuids_list_t; @@ -511,17 +510,6 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, { const LLInventoryObject *obj = getInventoryObject(); - bool is_sidepanel = isInOutfitsSidePanel(); - if (is_sidepanel) - { - // Sidepanel includes restricted menu. - if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID)) - { - items.push_back(std::string("Remove Link")); - } - return; - } - if (obj) { if (obj->getIsLinkType()) @@ -948,16 +936,6 @@ void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid) } } -BOOL LLInvFVBridge::isInOutfitsSidePanel() const -{ - LLInventoryPanel *my_panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); - LLPanelOutfitsInventory *outfit_panel = - dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory")); - if (!outfit_panel) - return FALSE; - return outfit_panel->isTabPanel(my_panel); -} - BOOL LLInvFVBridge::canShare() const { const LLInventoryModel* model = getInventoryModel(); @@ -2430,17 +2408,8 @@ void LLFolderBridge::folderOptionsMenu() const bool is_ensemble = (type == LLFolderType::FT_NONE || LLFolderType::lookupIsEnsembleType(type)); - // calling card related functionality for folders. - - const bool is_sidepanel = isInOutfitsSidePanel(); - if (is_sidepanel) - { - mItems.push_back("Rename"); - addDeleteContextMenuOptions(mItems, disabled_items); - } - // Only enable calling-card related options for non-system folders. - if (!is_sidepanel && !is_system_folder) + if (!is_system_folder) { LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD); if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard)) @@ -2469,10 +2438,7 @@ void LLFolderBridge::folderOptionsMenu() checkFolderForContentsOfType(model, is_object) || checkFolderForContentsOfType(model, is_gesture) ) { - if (!is_sidepanel) - { - mItems.push_back(std::string("Folder Wearables Separator")); - } + mItems.push_back(std::string("Folder Wearables Separator")); // Only enable add/replace outfit for non-system folders. if (!is_system_folder) @@ -3763,13 +3729,6 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { disabled_items.push_back(std::string("Share")); } - bool is_sidepanel = isInOutfitsSidePanel(); - - if (!is_sidepanel) - { - addOpenRightClickMenuOption(items); - items.push_back(std::string("Properties")); - } getClipboardEntries(true, items, disabled_items, flags); @@ -4071,12 +4030,8 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { disabled_items.push_back(std::string("Share")); } - bool is_sidepanel = isInOutfitsSidePanel(); - if (!is_sidepanel) - { - items.push_back(std::string("Properties")); - } + items.push_back(std::string("Properties")); getClipboardEntries(true, items, disabled_items, flags); @@ -4431,24 +4386,17 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { disabled_items.push_back(std::string("Share")); } - bool is_sidepanel = isInOutfitsSidePanel(); - if (can_open && !is_sidepanel) + if (can_open) { addOpenRightClickMenuOption(items); } - if (!is_sidepanel) - { - items.push_back(std::string("Properties")); - } + items.push_back(std::string("Properties")); getClipboardEntries(true, items, disabled_items, flags); - if (!is_sidepanel) - { - items.push_back(std::string("Wearable Separator")); - } + items.push_back(std::string("Wearable Separator")); items.push_back(std::string("Wearable Edit")); diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 64d0f8d254..97e87c2f3b 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -74,7 +74,6 @@ public: U32 flags = 0x00); virtual ~LLInvFVBridge() {} - BOOL isInOutfitsSidePanel() const; // allow context menus to be customized for side panel BOOL canShare() const; //-------------------------------------------------------------------- diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index b3d39f2a4a..a285926a8b 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -162,7 +162,7 @@ protected: static LLRegisterPanelClassWrapper<LLOutfitsList> t_outfits_list("outfits_list"); LLOutfitsList::LLOutfitsList() - : LLPanel() + : LLPanelAppearanceTab() , mAccordion(NULL) , mListCommands(NULL) , mIsInitialized(false) @@ -313,7 +313,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) // If filter is currently applied we store the initial tab state and // open it to show matched items if any. - if (!mFilterSubString.empty()) + if (!sFilterSubString.empty()) { tab->notifyChildren(LLSD().with("action","store_state")); tab->setDisplayChildren(true); @@ -323,7 +323,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) // filter to the newly added list. list->setForceRefresh(true); - list->setFilterSubString(mFilterSubString); + list->setFilterSubString(sFilterSubString); } } @@ -415,14 +415,74 @@ void LLOutfitsList::performAction(std::string action) } } +void LLOutfitsList::removeSelected() +{ + if (mSelectedOutfitUUID.notNull()) + { + remove_category(&gInventory, mSelectedOutfitUUID); + } +} + +void LLOutfitsList::setSelectedOutfitByUUID(const LLUUID& outfit_uuid) +{ + for (outfits_map_t::iterator iter = mOutfitsMap.begin(); + iter != mOutfitsMap.end(); + ++iter) + { + if (outfit_uuid == iter->first) + { + LLAccordionCtrlTab* tab = iter->second; + if (!tab) continue; + + LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView()); + if (!list) continue; + + tab->setFocus(TRUE); + changeOutfitSelection(list, outfit_uuid); + + tab->setDisplayChildren(true); + } + } +} + +// virtual void LLOutfitsList::setFilterSubString(const std::string& string) { applyFilter(string); - mFilterSubString = string; + sFilterSubString = string; +} + +bool LLOutfitsList::isActionEnabled(const LLSD& userdata) +{ + const std::string command_name = userdata.asString(); + if (command_name == "delete") + { + return !mItemSelected && LLAppearanceMgr::instance().getCanRemoveOutfit(mSelectedOutfitUUID); + } + if (command_name == "rename") + { + return get_is_category_renameable(&gInventory, mSelectedOutfitUUID); + } + if (command_name == "save_outfit") + { + bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked(); + bool outfit_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty(); + // allow save only if outfit isn't locked and is dirty + return !outfit_locked && outfit_dirty; + } + if (command_name == "wear") + { + return mSelectedOutfitUUID.notNull(); + } + if (command_name == "take_off") + { + return LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID; + } + return false; } -boost::signals2::connection LLOutfitsList::addSelectionChangeCallback(selection_change_callback_t cb) +boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb) { return mSelectionChangeSignal.connect(cb); } @@ -558,7 +618,7 @@ void LLOutfitsList::restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl) { - if (!ctrl || mFilterSubString.empty()) + if (!ctrl || sFilterSubString.empty()) return; for (outfits_map_t::iterator @@ -572,7 +632,7 @@ void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl) LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView()); if (list != ctrl) continue; - applyFilterToTab(iter->first, tab, mFilterSubString); + applyFilterToTab(iter->first, tab, sFilterSubString); } } @@ -588,7 +648,7 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring) LLAccordionCtrlTab* tab = iter->second; if (!tab) continue; - bool more_restrictive = mFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, mFilterSubString.size()).compare(mFilterSubString); + bool more_restrictive = sFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, sFilterSubString.size()).compare(sFilterSubString); // Restore tab visibility in case of less restrictive filter // to compare it with updated string if it was previously hidden. @@ -603,7 +663,7 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring) list->setFilterSubString(new_filter_substring); } - if(mFilterSubString.empty() && !new_filter_substring.empty()) + if(sFilterSubString.empty() && !new_filter_substring.empty()) { //store accordion tab state when filter is not empty tab->notifyChildren(LLSD().with("action","store_state")); diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index a6b9a66836..14a1aab415 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -37,12 +37,14 @@ // newview #include "llinventorymodel.h" -#include "llinventoryobserver.h" +#include "llpanelappearancetab.h" class LLAccordionCtrlTab; +class LLInventoryCategoriesObserver; class LLWearableItemsList; class LLListContextMenu; + /** * @class LLOutfitTabNameComparator * @@ -66,9 +68,9 @@ public: * which displays each outfit in an accordion tab with a flat list * of items inside it. * - * Starts fetching nevessary inventory content on first openning. + * Starts fetching necessary inventory content on first opening. */ -class LLOutfitsList : public LLPanel +class LLOutfitsList : public LLPanelAppearanceTab { public: typedef boost::function<void (const LLUUID&)> selection_change_callback_t; @@ -88,11 +90,17 @@ public: void performAction(std::string action); - void setFilterSubString(const std::string& string); + void removeSelected(); + + void setSelectedOutfitByUUID(const LLUUID& outfit_uuid); + + /*virtual*/ void setFilterSubString(const std::string& string); + + /*virtual*/ bool isActionEnabled(const LLSD& userdata); const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; } - boost::signals2::connection addSelectionChangeCallback(selection_change_callback_t cb); + boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb); /** * Returns true if there is a selection inside currently selected outfit @@ -184,13 +192,11 @@ private: LLUUID mHighlightedOutfitUUID; selection_change_signal_t mSelectionChangeSignal; - std::string mFilterSubString; - typedef std::map<LLUUID, LLAccordionCtrlTab*> outfits_map_t; typedef outfits_map_t::value_type outfits_map_value_t; outfits_map_t mOutfitsMap; - LLListContextMenu* mOutfitMenu; + LLListContextMenu* mOutfitMenu; bool mIsInitialized; /** diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h index c2f8dbd074..af984c521c 100644 --- a/indra/newview/llpanelappearancetab.h +++ b/indra/newview/llpanelappearancetab.h @@ -1,6 +1,6 @@ /** - * @file llpanelplacestab.h - * @brief Tabs interface for Side Bar "Places" panel + * @file llpanelappearancetab.h + * @brief Tabs interface for Side Bar "My Appearance" panel * * $LicenseInfo:firstyear=2009&license=viewergpl$ * @@ -34,28 +34,20 @@ #include "llpanel.h" -#include "llpanelappearance.h" - class LLPanelAppearanceTab : public LLPanel { public: - LLPanelAppearanceTab(LLPanelAppearance *parent) : - LLPanel(), - mParent(parent) - {} + LLPanelAppearanceTab() : LLPanel() {} virtual ~LLPanelAppearanceTab() {} - virtual void onSearchEdit(const std::string& string) = 0; - virtual void updateVerbs() = 0; // Updates buttons at the bottom of Appearance panel - virtual void onWear() = 0; - virtual void onEdit() = 0; - virtual void onNew() = 0; + virtual void setFilterSubString(const std::string& string) = 0; - bool isTabVisible(); // Check if parent TabContainer is visible. + virtual bool isActionEnabled(const LLSD& userdata) = 0; + static const std::string& getFilterSubString() { return sFilterSubString; } protected: - LLPanelAppearance* mParent; + static std::string sFilterSubString; }; #endif //LL_LLPANELAPPEARANCETAB_H diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 77c135c716..57c82b7ac4 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -33,40 +33,23 @@ #include "llpaneloutfitsinventory.h" -#include "llagent.h" -#include "llagentwearables.h" -#include "llappearancemgr.h" +#include "llmenugl.h" +#include "llnotificationsutil.h" +#include "lltabcontainer.h" -#include "llbutton.h" -#include "llfloaterreg.h" -#include "llfloaterworldmap.h" -#include "llfloaterinventory.h" -#include "llfoldervieweventlistener.h" -#include "llinventorybridge.h" #include "llinventoryfunctions.h" #include "llinventorymodelbackgroundfetch.h" -#include "llinventorypanel.h" -#include "lllandmark.h" -#include "lllineeditor.h" -#include "llmodaldialog.h" -#include "llnotificationsutil.h" +#include "llagentwearables.h" +#include "llappearancemgr.h" #include "lloutfitobserver.h" #include "lloutfitslist.h" +#include "llpanelwearing.h" #include "llsaveoutfitcombobtn.h" #include "llsidepanelappearance.h" #include "llsidetray.h" -#include "lltabcontainer.h" #include "llviewerfoldertype.h" -#include "llviewerjointattachment.h" -#include "llvoavatarself.h" - -// List Commands -#include "lldndbutton.h" -#include "llmenugl.h" #include "llviewermenu.h" -#include "llviewercontrol.h" - static const std::string OUTFITS_TAB_NAME = "outfitslist_tab"; static const std::string COF_TAB_NAME = "cof_tab"; @@ -246,11 +229,10 @@ private: LLPanelOutfitsInventory::LLPanelOutfitsInventory() : mMyOutfitsPanel(NULL), mCurrentOutfitPanel(NULL), + mActivePanel(NULL), mGearMenu(NULL), mInitialized(false) { - mSavedFolderState = new LLSaveFolderState(); - mSavedFolderState->setApply(FALSE); gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoaded, this)); gAgentWearables.addLoadingStartedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoading, this)); @@ -263,7 +245,6 @@ LLPanelOutfitsInventory::LLPanelOutfitsInventory() : LLPanelOutfitsInventory::~LLPanelOutfitsInventory() { delete mGearMenu; - delete mSavedFolderState; } // virtual @@ -305,7 +286,8 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key) // and update verbs. onTabChange(); - // Auto open the first outfit newly created so new users can see sample outfit contents + // *TODO: Auto open the first outfit newly created so new users can see sample outfit contents + /* static bool should_open_outfit = true; if (should_open_outfit && gAgent.isFirstLogin()) { @@ -325,6 +307,7 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key) } } should_open_outfit = false; + */ } void LLPanelOutfitsInventory::updateVerbs() @@ -338,93 +321,30 @@ void LLPanelOutfitsInventory::updateVerbs() // virtual void LLPanelOutfitsInventory::onSearchEdit(const std::string& string) { - mFilterSubString = string; + if (!mActivePanel) return; - // TODO: add handling "My Outfits" tab. - if (!isCOFPanelActive()) - { - mMyOutfitsPanel->setFilterSubString(string); - return; - } + mFilterSubString = string; if (string == "") { - getActivePanel()->setFilterSubString(LLStringUtil::null); - - // re-open folders that were initially open - mSavedFolderState->setApply(TRUE); - getRootFolder()->applyFunctorRecursively(*mSavedFolderState); - LLOpenFoldersWithSelection opener; - getRootFolder()->applyFunctorRecursively(opener); - getRootFolder()->scrollToShowSelection(); + mActivePanel->setFilterSubString(LLStringUtil::null); } LLInventoryModelBackgroundFetch::instance().start(); - if (getActivePanel()->getFilterSubString().empty() && string.empty()) + if (mActivePanel->getFilterSubString().empty() && string.empty()) { // current filter and new filter empty, do nothing return; } - // save current folder open state if no filter currently applied - if (getRootFolder()->getFilterSubString().empty()) - { - mSavedFolderState->setApply(FALSE); - getRootFolder()->applyFunctorRecursively(*mSavedFolderState); - } - // set new filter string - getActivePanel()->setFilterSubString(string); + mActivePanel->setFilterSubString(string); } void LLPanelOutfitsInventory::onWearButtonClick() { - // TODO: Remove if/else, add common interface - // for "My Outfits" and "Wearing" tabs. - if (!isCOFPanelActive()) - { - mMyOutfitsPanel->performAction("replaceoutfit"); - } - else - { - LLFolderViewEventListener* listenerp = getCorrectListenerForAction(); - if (listenerp) - { - listenerp->performAction(NULL, "replaceoutfit"); - } - } -} - -void LLPanelOutfitsInventory::onAdd() -{ - // TODO: Remove if/else, add common interface - // for "My Outfits" and "Wearing" tabs. - if (!isCOFPanelActive()) - { - mMyOutfitsPanel->performAction("addtooutfit"); - } - else - { - LLFolderViewEventListener* listenerp = getCorrectListenerForAction(); - if (listenerp) - { - listenerp->performAction(NULL, "addtooutfit"); - } - } -} - -void LLPanelOutfitsInventory::onRemove() -{ - LLFolderViewEventListener* listenerp = getCorrectListenerForAction(); - if (listenerp) - { - listenerp->performAction(NULL, "removefromoutfit"); - } -} - -void LLPanelOutfitsInventory::onEdit() -{ + mMyOutfitsPanel->performAction("replaceoutfit"); } bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response) @@ -454,8 +374,6 @@ bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& return false; } - - void LLPanelOutfitsInventory::onSave() { std::string outfit_name; @@ -483,57 +401,6 @@ void LLPanelOutfitsInventory::onSave() }*/ } -void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action) -{ - updateVerbs(); - - // TODO: add handling "My Outfits" tab. - if (!isCOFPanelActive()) - return; - - if (getRootFolder()->needsAutoRename() && items.size()) - { - getRootFolder()->startRenamingSelectedItem(); - getRootFolder()->setNeedsAutoRename(FALSE); - } -} - -LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction() -{ - // TODO: add handling "My Outfits" tab. - if (!isCOFPanelActive()) - return NULL; - - LLFolderViewItem* current_item = getRootFolder()->getCurSelectedItem(); - if (!current_item) - return NULL; - - LLFolderViewEventListener* listenerp = current_item->getListener(); - if (getIsCorrectType(listenerp)) - { - return listenerp; - } - return NULL; -} - -bool LLPanelOutfitsInventory::getIsCorrectType(const LLFolderViewEventListener *listenerp) const -{ - if (listenerp->getInventoryType() == LLInventoryType::IT_CATEGORY) - { - LLViewerInventoryCategory *cat = gInventory.getCategory(listenerp->getUUID()); - if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) - { - return true; - } - } - return false; -} - -LLFolderView *LLPanelOutfitsInventory::getRootFolder() -{ - return getActivePanel()->getRootFolder(); -} - //static LLPanelOutfitsInventory* LLPanelOutfitsInventory::findInstance() { @@ -551,13 +418,6 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); - LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn"); - trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this - , _4 // BOOL drop - , _5 // EDragAndDropType cargo_type - , _7 // EAcceptance* accept - )); - mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel, this); } @@ -568,6 +428,9 @@ void LLPanelOutfitsInventory::updateListCommands() bool wear_visible = !isCOFPanelActive(); bool make_outfit_enabled = isActionEnabled("save_outfit"); + // *TODO: Enable gear menu for Wearing tab. + childSetEnabled("options_gear_btn", wear_visible); + mListCommands->childSetEnabled("trash_btn", trash_enabled); mListCommands->childSetEnabled("wear_btn", wear_enabled); mListCommands->childSetVisible("wear_btn", wear_visible); @@ -584,263 +447,52 @@ void LLPanelOutfitsInventory::showGearMenu() void LLPanelOutfitsInventory::onTrashButtonClick() { - onClipboardAction("delete"); -} + mMyOutfitsPanel->removeSelected(); -void LLPanelOutfitsInventory::onClipboardAction(const LLSD& userdata) -{ - std::string command_name = userdata.asString(); - if (isCOFPanelActive()) - { - getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name); - } - else // "My Outfits" tab active - { - if (command_name == "delete") - { - const LLUUID& selected_outfit_id = mMyOutfitsPanel->getSelectedOutfitUUID(); - if (selected_outfit_id.notNull()) - { - remove_category(&gInventory, selected_outfit_id); - } - } - else - { - llwarns << "Unrecognized action" << llendl; - } - } - updateListCommands(); - updateVerbs(); + updateListCommands(); + updateVerbs(); } -void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata) +bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) { - if (!isActionEnabled(userdata)) - return; - - const std::string command_name = userdata.asString(); - if (command_name == "new") - { - onSave(); - } - if (command_name == "edit") - { - onEdit(); - } - if (command_name == "wear") - { - onWearButtonClick(); - } - // Note: This option has been removed from the gear menu. - if (command_name == "add") - { - onAdd(); - } - if (command_name == "remove") - { - onRemove(); - } - if (command_name == "rename") - { - onClipboardAction("rename"); - } - if (command_name == "remove_link") - { - onClipboardAction("delete"); - } - if (command_name == "delete") - { - onClipboardAction("delete"); - } - updateListCommands(); - updateVerbs(); -} - -BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) -{ - const std::string command_name = userdata.asString(); - if (command_name == "delete" || command_name == "remove") - { - BOOL can_delete = FALSE; - - if (isCOFPanelActive()) - { - LLFolderView* root = getActivePanel()->getRootFolder(); - if (root) - { - std::set<LLUUID> selection_set = root->getSelectionList(); - can_delete = (selection_set.size() > 0); - for (std::set<LLUUID>::iterator iter = selection_set.begin(); - iter != selection_set.end(); - ++iter) - { - const LLUUID &item_id = (*iter); - LLFolderViewItem *item = root->getItemByID(item_id); - can_delete &= item->getListener()->isItemRemovable(); - } - } - } - else // "My Outfits" tab active - { - const LLUUID& selected_outfit = mMyOutfitsPanel->getSelectedOutfitUUID(); - // first condition prevents trash btn from enabling when items are selected inside outfit (EXT-7847) - can_delete = !mMyOutfitsPanel->hasItemSelected() && LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit); - } - - return can_delete; - } - if (command_name == "remove_link") - { - BOOL can_delete = FALSE; - LLFolderView* root = getActivePanel()->getRootFolder(); - if (root) - { - std::set<LLUUID> selection_set = root->getSelectionList(); - can_delete = (selection_set.size() > 0); - for (std::set<LLUUID>::iterator iter = selection_set.begin(); - iter != selection_set.end(); - ++iter) - { - const LLUUID &item_id = (*iter); - LLViewerInventoryItem *item = gInventory.getItem(item_id); - if (!item || !item->getIsLinkType()) - return FALSE; - } - return can_delete; - } - return FALSE; - } - if (command_name == "rename" || - command_name == "delete_outfit") - { - return (getCorrectListenerForAction() != NULL) && hasItemsSelected(); - } - - if (command_name == "wear") - { + return mActivePanel && mActivePanel->isActionEnabled(userdata); if (gAgentWearables.isCOFChangeInProgress()) return FALSE; - if (isCOFPanelActive()) - { - return FALSE; - } - return hasItemsSelected(); - } - if (command_name == "save_outfit") - { - bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked(); - bool outfit_dirty =LLAppearanceMgr::getInstance()->isOutfitDirty(); - // allow save only if outfit isn't locked and is dirty - return !outfit_locked && outfit_dirty; - } - - if (command_name == "edit" || - command_name == "add" - ) - { - return (getCorrectListenerForAction() != NULL); - } - return TRUE; -} - -bool LLPanelOutfitsInventory::hasItemsSelected() -{ - bool has_items_selected = false; - - if (isCOFPanelActive()) - { - LLFolderView* root = getActivePanel()->getRootFolder(); - if (root) - { - std::set<LLUUID> selection_set = root->getSelectionList(); - has_items_selected = (selection_set.size() > 0); - } - } - else // My Outfits Tab is active - { - has_items_selected = mMyOutfitsPanel->getSelectedOutfitUUID().notNull(); - } - return has_items_selected; -} - -bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept) -{ - *accept = ACCEPT_NO; - - const bool is_enabled = isActionEnabled("delete"); - if (is_enabled) *accept = ACCEPT_YES_MULTI; - - if (is_enabled && drop) - { - onClipboardAction("delete"); - } - return true; } - -// List Commands // -//////////////////////////////////////////////////////////////////////////////// +// List Commands // +////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// -// Tab panels // +// Tab panels // void LLPanelOutfitsInventory::initTabPanels() { - mCurrentOutfitPanel = getChild<LLInventoryPanel>(COF_TAB_NAME); - mCurrentOutfitPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); - mCurrentOutfitPanel->setSelectCallback(boost::bind(&LLPanelOutfitsInventory::onTabSelectionChange, this, mCurrentOutfitPanel, _1, _2)); + mCurrentOutfitPanel = getChild<LLPanelWearing>(COF_TAB_NAME); + mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); mMyOutfitsPanel = getChild<LLOutfitsList>(OUTFITS_TAB_NAME); - mMyOutfitsPanel->addSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); + mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs"); mAppearanceTabs->setCommitCallback(boost::bind(&LLPanelOutfitsInventory::onTabChange, this)); } -void LLPanelOutfitsInventory::onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action) -{ - if (user_action && items.size() > 0) - { - // TODO: add handling "My Outfits" tab. - if (isCOFPanelActive()) - { - onSelectionChange(items, user_action); - } - else - { - mCurrentOutfitPanel->getRootFolder()->clearSelection(); - } - } -} - void LLPanelOutfitsInventory::onTabChange() { - // TODO: add handling "My Outfits" tab. - if (isCOFPanelActive()) - { - mCurrentOutfitPanel->setFilterSubString(mFilterSubString); - } - else - { - mMyOutfitsPanel->setFilterSubString(mFilterSubString); - mMyOutfitsPanel->onOpen(LLSD()); - } + mActivePanel = dynamic_cast<LLPanelAppearanceTab*>(mAppearanceTabs->getCurrentPanel()); + if (!mActivePanel) return; + + mActivePanel->setFilterSubString(mFilterSubString); + mActivePanel->onOpen(LLSD()); updateVerbs(); } -BOOL LLPanelOutfitsInventory::isTabPanel(LLInventoryPanel *panel) const +bool LLPanelOutfitsInventory::isCOFPanelActive() const { - // TODO: add handling "My Outfits" tab. - if (mCurrentOutfitPanel == panel) - { - return TRUE; - } - return FALSE; -} + if (!mActivePanel) return false; -BOOL LLPanelOutfitsInventory::isCOFPanelActive() const -{ - return (childGetVisibleTab("appearance_tabs")->getName() == COF_TAB_NAME); + return mActivePanel->getName() == COF_TAB_NAME; } void LLPanelOutfitsInventory::setWearablesLoading(bool val) diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index 287fcbf4bb..ff5d8b96bc 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -34,20 +34,15 @@ #define LL_LLPANELOUTFITSINVENTORY_H #include "llpanel.h" -#include "llinventoryobserver.h" -class LLFolderView; -class LLFolderViewItem; -class LLFolderViewEventListener; -class LLInventoryPanel; class LLOutfitsList; -class LLSaveFolderState; -class LLButton; +class LLOutfitListGearMenu; +class LLPanelAppearanceTab; +class LLPanelWearing; class LLMenuGL; class LLSidepanelAppearance; class LLTabContainer; class LLSaveOutfitComboBtn; -class LLOutfitListGearMenu; class LLPanelOutfitsInventory : public LLPanel { @@ -60,55 +55,36 @@ public: /*virtual*/ void onOpen(const LLSD& key); void onSearchEdit(const std::string& string); - void onAdd(); - void onRemove(); - void onEdit(); void onSave(); bool onSaveCommit(const LLSD& notification, const LLSD& response); - void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); - - // If a compatible listener type is selected, then return a pointer to that. - // Otherwise, return NULL. - LLFolderViewEventListener* getCorrectListenerForAction(); - - LLFolderView* getRootFolder(); static LLSidepanelAppearance* getAppearanceSP(); static LLPanelOutfitsInventory* findInstance(); protected: void updateVerbs(); - bool getIsCorrectType(const LLFolderViewEventListener *listenerp) const; private: - LLSaveFolderState* mSavedFolderState; LLTabContainer* mAppearanceTabs; std::string mFilterSubString; std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn; -public: - ////////////////////////////////////////////////////////////////////////////////// - // tab panels - // TODO: change getActivePanel() to return the active tab instead of returning - // a pointer to "Wearing" inventory panel. - LLInventoryPanel* getActivePanel() { return mCurrentOutfitPanel; } - - BOOL isTabPanel(LLInventoryPanel *panel) const; - BOOL isCOFPanelActive() const; + ////////////////////////////////////////////////////////////////////////////////// + // tab panels // protected: void initTabPanels(); - void onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action); void onTabChange(); + bool isCOFPanelActive() const; private: + LLPanelAppearanceTab* mActivePanel; LLOutfitsList* mMyOutfitsPanel; - LLInventoryPanel* mCurrentOutfitPanel; + LLPanelWearing* mCurrentOutfitPanel; - // tab panels // - //////////////////////////////////////////////////////////////////////////////// - + // tab panels // + ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// // List Commands // @@ -121,10 +97,7 @@ protected: void onWearButtonClick(); void showGearMenu(); void onTrashButtonClick(); - void onClipboardAction(const LLSD& userdata); - void onCustomAction(const LLSD& command_name); - bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept); - bool hasItemsSelected(); + bool isActionEnabled(const LLSD& userdata); void setWearablesLoading(bool val); void onWearablesLoaded(); void onWearablesLoading(); @@ -132,9 +105,8 @@ private: LLPanel* mListCommands; LLOutfitListGearMenu* mGearMenu; LLMenuGL* mMenuAdd; - // List Commands // - //////////////////////////////////////////////////////////////////////////////// - /// + // List Commands // + ////////////////////////////////////////////////////////////////////////////////// bool mInitialized; }; diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp new file mode 100644 index 0000000000..27f13a8093 --- /dev/null +++ b/indra/newview/llpanelwearing.cpp @@ -0,0 +1,130 @@ +/** + * @file llpanelwearing.cpp + * @brief List of agent's worn items. + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelwearing.h" + +#include "llappearancemgr.h" +#include "llinventorymodel.h" +#include "llinventoryobserver.h" +#include "llwearableitemslist.h" + + +std::string LLPanelAppearanceTab::sFilterSubString = LLStringUtil::null; + +static LLRegisterPanelClassWrapper<LLPanelWearing> t_panel_wearing("panel_wearing"); + +LLPanelWearing::LLPanelWearing() + : LLPanelAppearanceTab() + , mCOFItemsList(NULL) + , mIsInitialized(false) +{ + mCategoriesObserver = new LLInventoryCategoriesObserver(); +} + +LLPanelWearing::~LLPanelWearing() +{ + if (gInventory.containsObserver(mCategoriesObserver)) + { + gInventory.removeObserver(mCategoriesObserver); + delete mCategoriesObserver; + } +} + +BOOL LLPanelWearing::postBuild() +{ + mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list"); + return TRUE; +} + +//virtual +void LLPanelWearing::onOpen(const LLSD& /*info*/) +{ + if (!mIsInitialized) + { + // *TODO: I'm not sure is this check necessary but it never match while developing. + if (!gInventory.isInventoryUsable()) + return; + + const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + + // *TODO: I'm not sure is this check necessary but it never match while developing. + LLViewerInventoryCategory* category = gInventory.getCategory(cof); + if (!category) + return; + + gInventory.addObserver(mCategoriesObserver); + + // Start observing changes in Current Outfit category. + mCategoriesObserver->addCategory(cof, boost::bind(&LLWearableItemsList::updateList, mCOFItemsList, cof)); + + // Fetch Current Outfit contents and refresh the list to display + // initially fetched items. If not all items are fetched now + // the observer will refresh the list as soon as the new items + // arrive. + category->fetch(); + + mCOFItemsList->updateList(cof); + + mIsInitialized = true; + } +} + +// virtual +void LLPanelWearing::setFilterSubString(const std::string& string) +{ + sFilterSubString = string; + mCOFItemsList->setFilterSubString(sFilterSubString); +} + +bool LLPanelWearing::isActionEnabled(const LLSD& userdata) +{ + const std::string command_name = userdata.asString(); + + if (command_name == "save_outfit") + { + bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked(); + bool outfit_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty(); + // allow save only if outfit isn't locked and is dirty + return !outfit_locked && outfit_dirty; + } + return false; +} + +boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb) +{ + if (!mCOFItemsList) return boost::signals2::connection(); + + return mCOFItemsList->setCommitCallback(cb); +} + +// EOF diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h new file mode 100644 index 0000000000..15d0a3dd6d --- /dev/null +++ b/indra/newview/llpanelwearing.h @@ -0,0 +1,73 @@ +/** + * @file llpanelwearing.h + * @brief List of agent's worn items. + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLPANELWEARING_H +#define LL_LLPANELWEARING_H + +#include "llpanel.h" + +// newview +#include "llpanelappearancetab.h" + +class LLInventoryCategoriesObserver; +class LLWearableItemsList; + +/** + * @class LLPanelWearing + * + * A list of agents's currently worn items represented by + * a flat list view. + * Starts fetching necessary inventory content on first opening. + */ +class LLPanelWearing : public LLPanelAppearanceTab +{ +public: + LLPanelWearing(); + virtual ~LLPanelWearing(); + + /*virtual*/ BOOL postBuild(); + + /*virtual*/ void onOpen(const LLSD& info); + + /*virtual*/ void setFilterSubString(const std::string& string); + + /*virtual*/ bool isActionEnabled(const LLSD& userdata); + + boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb); + +private: + LLInventoryCategoriesObserver* mCategoriesObserver; + LLWearableItemsList* mCOFItemsList; + + bool mIsInitialized; +}; + +#endif //LL_LLPANELWEARING_H diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 6aa6ebaa54..da15b93697 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -95,19 +95,22 @@ LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item) ////////////////////////////////////////////////////////////////////////// // static -LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryItem* item) +LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryItem* item, + bool worn_indication_enabled) { LLPanelWearableOutfitItem* list_item = NULL; if (item) { - list_item = new LLPanelWearableOutfitItem(item); + list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled); list_item->init(); } return list_item; } -LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item) +LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item, + bool worn_indication_enabled) : LLPanelInventoryListItemBase(item) +, mWornIndicationEnabled(worn_indication_enabled) { } @@ -117,7 +120,7 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name, { std::string search_label = name; - if (get_is_item_worn(mInventoryItemUUID)) + if (mWornIndicationEnabled && get_is_item_worn(mInventoryItemUUID)) { search_label += LLTrans::getString("worn"); item_state = IS_WORN; @@ -444,6 +447,7 @@ static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_i LLWearableItemsList::Params::Params() : standalone("standalone", true) +, worn_indication_enabled("worn_indication_enabled", true) {} LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p) @@ -456,6 +460,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p) // Use built-in context menu. setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3)); } + mWornIndicationEnabled = p.worn_indication_enabled; } // virtual @@ -471,7 +476,7 @@ void LLWearableItemsList::addNewItem(LLViewerInventoryItem* item, bool rearrange llassert(item != NULL); } - LLPanelWearableOutfitItem *list_item = LLPanelWearableOutfitItem::create(item); + LLPanelWearableOutfitItem *list_item = LLPanelWearableOutfitItem::create(item, mWornIndicationEnabled); if (!list_item) return; diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 2bfb90e3ec..eb82418454 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -82,7 +82,8 @@ class LLPanelWearableOutfitItem : public LLPanelInventoryListItemBase { LOG_CLASS(LLPanelWearableOutfitItem); public: - static LLPanelWearableOutfitItem* create(LLViewerInventoryItem* item); + static LLPanelWearableOutfitItem* create(LLViewerInventoryItem* item, + bool worn_indication_enabled); /** * Updates item name and (worn) suffix. @@ -91,7 +92,11 @@ public: EItemState item_state = IS_DEFAULT); protected: - LLPanelWearableOutfitItem(LLViewerInventoryItem* item); + LLPanelWearableOutfitItem(LLViewerInventoryItem* item, + bool worn_indication_enabled); + +private: + bool mWornIndicationEnabled; }; class LLPanelDeletableWearableListItem : public LLPanelWearableListItem @@ -352,6 +357,7 @@ public: struct Params : public LLInitParam::Block<Params, LLInventoryItemsList::Params> { Optional<bool> standalone; + Optional<bool> worn_indication_enabled; Params(); }; @@ -377,6 +383,7 @@ protected: void onRightClick(S32 x, S32 y); bool mIsStandalone; + bool mWornIndicationEnabled; }; #endif //LL_LLWEARABLEITEMSLIST_H 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 a59070496e..9cd14c00fc 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -34,22 +34,31 @@ follows="all" label="MY OUTFITS" layout="topleft" - width="315" /> - <inventory_panel - follows="all" + width="312" /> + <panel background_visible="true" - background_opaque="true" - label="WEARING" + class="panel_wearing" + follows="all" + height="490" help_topic="now_wearing_tab" - allow_multi_select="true" - border="false" - left="0" - top="0" - mouse_opaque="true" + label="WEARING" + layout="topleft" name="cof_tab" - start_folder="Current Outfit" - use_label_suffix="true" - width="315" /> + width="312"> + <wearable_items_list + allow_select="true" + follows="all" + height="490" + keep_one_selected="true" + left="1" + multi_select="true" + name="cof_items_list" + top="0" + translate="false" + width="310" + worn_indication_enabled="false" + /> + </panel> </tab_container> <panel background_visible="true" @@ -84,7 +93,7 @@ width="241" /> - <dnd_button + <button follows="bottom|right" height="25" image_hover_unselected="Toolbar_Right_Over" -- cgit v1.2.3 From 2583a4d6ea60aeefa1d21f578d6fbf1f2f68c72a Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk <slitovchuk@productengine.com> Date: Tue, 22 Jun 2010 16:34:27 +0300 Subject: EXT-4295 FIXED Added gear and context menus for Wearing tab. - Moved My Outfits gear menu from llpaneloutfitsinventory.cpp to lloutfitslist.cpp Revieved by Neal Orman and Mike Antipov at https://codereview.productengine.com/secondlife/r/604/. --HG-- branch : product-engine --- indra/newview/lloutfitslist.cpp | 165 +++++++++++++++++- indra/newview/lloutfitslist.h | 4 + indra/newview/llpanelappearancetab.h | 2 + indra/newview/llpaneloutfitsinventory.cpp | 186 +-------------------- indra/newview/llpaneloutfitsinventory.h | 4 - indra/newview/llpanelwearing.cpp | 84 ++++++++++ indra/newview/llpanelwearing.h | 8 + .../skins/default/xui/en/menu_wearing_gear.xml | 12 ++ .../skins/default/xui/en/menu_wearing_tab.xml | 12 ++ .../default/xui/en/panel_outfits_inventory.xml | 1 + 10 files changed, 284 insertions(+), 194 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/menu_wearing_gear.xml create mode 100644 indra/newview/skins/default/xui/en/menu_wearing_tab.xml diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index a285926a8b..b8489d450b 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -70,7 +70,148 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL ////////////////////////////////////////////////////////////////////////// -class OutfitContextMenu : public LLListContextMenu +class LLOutfitListGearMenu +{ +public: + LLOutfitListGearMenu(LLOutfitsList* olist) + : mOutfitList(olist), + mMenu(NULL) + { + llassert_always(mOutfitList); + + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + + registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this)); + registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this)); + registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this)); + registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this)); + registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2)); + + enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitsList::isActionEnabled, mOutfitList, _2)); + enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2)); + + mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( + "menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + llassert(mMenu); + } + + void show(LLView* spawning_view) + { + if (!mMenu) return; + + updateItemsVisibility(); + mMenu->buildDrawLabels(); + mMenu->updateParent(LLMenuGL::sMenuContainer); + S32 menu_x = 0; + S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight(); + LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y); + } + + void updateItemsVisibility() + { + if (!mMenu) return; + + bool have_selection = getSelectedOutfitID().notNull(); + mMenu->setItemVisible("sepatator1", have_selection); + mMenu->setItemVisible("sepatator2", have_selection); + mMenu->arrangeAndClear(); // update menu height + } + +private: + const LLUUID& getSelectedOutfitID() + { + return mOutfitList->getSelectedOutfitUUID(); + } + + LLViewerInventoryCategory* getSelectedOutfit() + { + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.isNull()) + { + return NULL; + } + + LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id); + return cat; + } + + void onWear() + { + LLViewerInventoryCategory* selected_outfit = getSelectedOutfit(); + if (selected_outfit) + { + LLAppearanceMgr::instance().wearInventoryCategory( + selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE); + } + } + + void onTakeOff() + { + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.notNull()) + { + LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id); + } + } + + void onRename() + { + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.notNull()) + { + LLAppearanceMgr::instance().renameOutfit(selected_outfit_id); + } + } + + void onDelete() + { + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.notNull()) + { + remove_category(&gInventory, selected_outfit_id); + } + } + + void onCreate(const LLSD& data) + { + LLWearableType::EType type = LLWearableType::typeNameToType(data.asString()); + if (type == LLWearableType::WT_NONE) + { + llwarns << "Invalid wearable type" << llendl; + return; + } + + LLAgentWearables::createWearable(type, true); + } + + bool onVisible(LLSD::String param) + { + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.isNull()) // no selection or invalid outfit selected + { + return false; + } + + // *TODO This condition leads to menu item behavior inconsistent with + // "Wear" button behavior and should be modified or removed. + bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id; + + if ("wear" == param) + { + return !is_worn; + } + + return true; + } + + LLOutfitsList* mOutfitList; + LLMenuGL* mMenu; +}; + +////////////////////////////////////////////////////////////////////////// + +class LLOutfitContextMenu : public LLListContextMenu { protected: /* virtual */ LLContextMenu* createMenu() @@ -89,8 +230,8 @@ protected: registrar.add("Outfit.Rename", boost::bind(renameOutfit, selected_id)); registrar.add("Outfit.Delete", boost::bind(deleteOutfit, selected_id)); - enable_registrar.add("Outfit.OnEnable", boost::bind(&OutfitContextMenu::onEnable, this, _2)); - enable_registrar.add("Outfit.OnVisible", boost::bind(&OutfitContextMenu::onVisible, this, _2)); + enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitContextMenu::onEnable, this, _2)); + enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitContextMenu::onVisible, this, _2)); return createFromFile("menu_outfit_tab.xml"); } @@ -170,11 +311,13 @@ LLOutfitsList::LLOutfitsList() { mCategoriesObserver = new LLInventoryCategoriesObserver(); - mOutfitMenu = new OutfitContextMenu(); + mGearMenu = new LLOutfitListGearMenu(this); + mOutfitMenu = new LLOutfitContextMenu(); } LLOutfitsList::~LLOutfitsList() { + delete mGearMenu; delete mOutfitMenu; if (gInventory.containsObserver(mCategoriesObserver)) @@ -453,8 +596,11 @@ void LLOutfitsList::setFilterSubString(const std::string& string) sFilterSubString = string; } +// virtual bool LLOutfitsList::isActionEnabled(const LLSD& userdata) { + if (mSelectedOutfitUUID.isNull()) return false; + const std::string command_name = userdata.asString(); if (command_name == "delete") { @@ -473,7 +619,7 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata) } if (command_name == "wear") { - return mSelectedOutfitUUID.notNull(); + return !gAgentWearables.isCOFChangeInProgress(); } if (command_name == "take_off") { @@ -482,6 +628,13 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata) return false; } +// virtual +void LLOutfitsList::showGearMenu(LLView* spawning_view) +{ + if (!mGearMenu) return; + mGearMenu->show(spawning_view); +} + boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb) { return mSelectionChangeSignal.connect(cb); @@ -761,7 +914,7 @@ void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y) uuid_vec_t selected_uuids; - // Collect seleted items from all selected lists. + // Collect selected items from all selected lists. for (wearables_lists_map_t::iterator iter = mSelectedListsMap.begin(); iter != mSelectedListsMap.end(); ++iter) diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index 14a1aab415..d207624792 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -41,6 +41,7 @@ class LLAccordionCtrlTab; class LLInventoryCategoriesObserver; +class LLOutfitListGearMenu; class LLWearableItemsList; class LLListContextMenu; @@ -98,6 +99,8 @@ public: /*virtual*/ bool isActionEnabled(const LLSD& userdata); + /*virtual*/ void showGearMenu(LLView* spawning_view); + const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; } boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb); @@ -196,6 +199,7 @@ private: typedef outfits_map_t::value_type outfits_map_value_t; outfits_map_t mOutfitsMap; + LLOutfitListGearMenu* mGearMenu; LLListContextMenu* mOutfitMenu; bool mIsInitialized; diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h index af984c521c..f1901a63a4 100644 --- a/indra/newview/llpanelappearancetab.h +++ b/indra/newview/llpanelappearancetab.h @@ -44,6 +44,8 @@ public: virtual bool isActionEnabled(const LLSD& userdata) = 0; + virtual void showGearMenu(LLView* spawning_view) = 0; + static const std::string& getFilterSubString() { return sFilterSubString; } protected: diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 57c82b7ac4..2f1cad8a75 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -33,7 +33,6 @@ #include "llpaneloutfitsinventory.h" -#include "llmenugl.h" #include "llnotificationsutil.h" #include "lltabcontainer.h" @@ -48,189 +47,16 @@ #include "llsidepanelappearance.h" #include "llsidetray.h" #include "llviewerfoldertype.h" -#include "llviewermenu.h" 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"); -class LLPanelOutfitsInventory; -class LLOutfitListGearMenu -{ -public: - LLOutfitListGearMenu(LLOutfitsList* olist, LLPanelOutfitsInventory* parent_panel) - : mOutfitList(olist), - mMyOutfitsPanel(parent_panel), - mMenu(NULL) - { - llassert_always(mOutfitList); - - LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; - LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; - - registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this)); - registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this)); - registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this)); - registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this)); - registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2)); - - enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenu::onEnable, this, _2)); - enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2)); - - mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( - "menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - llassert(mMenu); - } - - LLMenuGL* getMenu() { return mMenu; } - - void show(LLView* spawning_view) - { - if (!mMenu) return; - - updateItemsVisibility(); - mMenu->buildDrawLabels(); - mMenu->updateParent(LLMenuGL::sMenuContainer); - S32 menu_x = 0; - S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight(); - LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y); - } - - void updateItemsVisibility() - { - if (!mMenu) return; - - bool have_selection = getSelectedOutfitID().notNull(); - mMenu->setItemVisible("sepatator1", have_selection); - mMenu->setItemVisible("sepatator2", have_selection); - mMenu->arrangeAndClear(); // update menu height - } - -private: - const LLUUID& getSelectedOutfitID() - { - return mOutfitList->getSelectedOutfitUUID(); - } - - LLViewerInventoryCategory* getSelectedOutfit() - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.isNull()) - { - return NULL; - } - - LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id); - return cat; - } - - void onWear() - { - LLViewerInventoryCategory* selected_outfit = getSelectedOutfit(); - if (selected_outfit) - { - LLAppearanceMgr::instance().wearInventoryCategory( - selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE); - } - } - - void onTakeOff() - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.notNull()) - { - LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id); - } - } - - void onRename() - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.notNull()) - { - LLAppearanceMgr::instance().renameOutfit(selected_outfit_id); - } - } - - void onDelete() - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.notNull()) - { - remove_category(&gInventory, selected_outfit_id); - } - } - - void onCreate(const LLSD& data) - { - LLWearableType::EType type = LLWearableType::typeNameToType(data.asString()); - if (type == LLWearableType::WT_NONE) - { - llwarns << "Invalid wearable type" << llendl; - return; - } - - LLAgentWearables::createWearable(type, true); - } - - bool onEnable(LLSD::String param) - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.isNull()) // no selection or invalid outfit selected - { - return false; - } - - if ("rename" == param) - { - return get_is_category_renameable(&gInventory, selected_outfit_id); - } - else if ("delete" == param) - { - return LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit_id); - } - else if ("take_off" == param) - { - return LLAppearanceMgr::getCanRemoveFromCOF(selected_outfit_id); - } - else if ("wear" == param) - { - return mMyOutfitsPanel->isActionEnabled(param); - } - - - return true; - } - - bool onVisible(LLSD::String param) - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.isNull()) // no selection or invalid outfit selected - { - return false; - } - - bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id; - - if ("wear" == param) - { - return !is_worn; - } - - return true; - } - - LLOutfitsList* mOutfitList; - LLMenuGL* mMenu; - LLPanelOutfitsInventory* mMyOutfitsPanel; -}; - LLPanelOutfitsInventory::LLPanelOutfitsInventory() : mMyOutfitsPanel(NULL), mCurrentOutfitPanel(NULL), mActivePanel(NULL), - mGearMenu(NULL), mInitialized(false) { gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoaded, this)); @@ -244,7 +70,6 @@ LLPanelOutfitsInventory::LLPanelOutfitsInventory() : LLPanelOutfitsInventory::~LLPanelOutfitsInventory() { - delete mGearMenu; } // virtual @@ -417,8 +242,6 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::showGearMenu, this)); mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); - - mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel, this); } void LLPanelOutfitsInventory::updateListCommands() @@ -428,9 +251,6 @@ void LLPanelOutfitsInventory::updateListCommands() bool wear_visible = !isCOFPanelActive(); bool make_outfit_enabled = isActionEnabled("save_outfit"); - // *TODO: Enable gear menu for Wearing tab. - childSetEnabled("options_gear_btn", wear_visible); - mListCommands->childSetEnabled("trash_btn", trash_enabled); mListCommands->childSetEnabled("wear_btn", wear_enabled); mListCommands->childSetVisible("wear_btn", wear_visible); @@ -439,10 +259,10 @@ void LLPanelOutfitsInventory::updateListCommands() void LLPanelOutfitsInventory::showGearMenu() { - if (!mGearMenu) return; + if (!mActivePanel) return; LLView* spawning_view = getChild<LLView>("options_gear_btn"); - mGearMenu->show(spawning_view); + mActivePanel->showGearMenu(spawning_view); } void LLPanelOutfitsInventory::onTrashButtonClick() @@ -456,8 +276,6 @@ void LLPanelOutfitsInventory::onTrashButtonClick() bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) { return mActivePanel && mActivePanel->isActionEnabled(userdata); - if (gAgentWearables.isCOFChangeInProgress()) return FALSE; - } // List Commands // ////////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index ff5d8b96bc..a50e047140 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -88,9 +88,6 @@ private: ////////////////////////////////////////////////////////////////////////////////// // List Commands // -public: - BOOL isActionEnabled(const LLSD& command_name); - protected: void initListCommandsHandlers(); void updateListCommands(); @@ -103,7 +100,6 @@ protected: void onWearablesLoading(); private: LLPanel* mListCommands; - LLOutfitListGearMenu* mGearMenu; LLMenuGL* mMenuAdd; // List Commands // ////////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp index 27f13a8093..b8852890ad 100644 --- a/indra/newview/llpanelwearing.cpp +++ b/indra/newview/llpanelwearing.cpp @@ -36,8 +36,64 @@ #include "llappearancemgr.h" #include "llinventorymodel.h" #include "llinventoryobserver.h" +#include "llsidetray.h" +#include "llviewermenu.h" #include "llwearableitemslist.h" +// Context menu and Gear menu helper. +static void edit_outfit() +{ + LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); +} + +////////////////////////////////////////////////////////////////////////// + +class LLWearingGearMenu +{ +public: + LLWearingGearMenu() + : mMenu(NULL) + { + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + + registrar.add("Gear.Edit", boost::bind(&edit_outfit)); + + mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( + "menu_wearing_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + llassert(mMenu); + } + + void show(LLView* spawning_view) + { + if (!mMenu) return; + + mMenu->buildDrawLabels(); + mMenu->updateParent(LLMenuGL::sMenuContainer); + S32 menu_x = 0; + S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight(); + LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y); + } + +private: + LLMenuGL* mMenu; +}; + +////////////////////////////////////////////////////////////////////////// + +class LLWearingContextMenu : public LLListContextMenu +{ +protected: + /* virtual */ LLContextMenu* createMenu() + { + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + + registrar.add("Wearing.Edit", boost::bind(&edit_outfit)); + + return createFromFile("menu_wearing_tab.xml"); + } +}; + +////////////////////////////////////////////////////////////////////////// std::string LLPanelAppearanceTab::sFilterSubString = LLStringUtil::null; @@ -49,10 +105,16 @@ LLPanelWearing::LLPanelWearing() , mIsInitialized(false) { mCategoriesObserver = new LLInventoryCategoriesObserver(); + + mGearMenu = new LLWearingGearMenu(); + mContextMenu = new LLWearingContextMenu(); } LLPanelWearing::~LLPanelWearing() { + delete mGearMenu; + delete mContextMenu; + if (gInventory.containsObserver(mCategoriesObserver)) { gInventory.removeObserver(mCategoriesObserver); @@ -63,6 +125,8 @@ LLPanelWearing::~LLPanelWearing() BOOL LLPanelWearing::postBuild() { mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list"); + mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3)); + return TRUE; } @@ -106,6 +170,7 @@ void LLPanelWearing::setFilterSubString(const std::string& string) mCOFItemsList->setFilterSubString(sFilterSubString); } +// virtual bool LLPanelWearing::isActionEnabled(const LLSD& userdata) { const std::string command_name = userdata.asString(); @@ -120,6 +185,13 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata) return false; } +// virtual +void LLPanelWearing::showGearMenu(LLView* spawning_view) +{ + if (!mGearMenu) return; + mGearMenu->show(spawning_view); +} + boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb) { if (!mCOFItemsList) return boost::signals2::connection(); @@ -127,4 +199,16 @@ boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_ca return mCOFItemsList->setCommitCallback(cb); } +void LLPanelWearing::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y) +{ + LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(ctrl); + if (!list) return; + + uuid_vec_t selected_uuids; + + list->getSelectedUUIDs(selected_uuids); + + mContextMenu->show(ctrl, selected_uuids, x, y); +} + // EOF diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h index 15d0a3dd6d..1573990d13 100644 --- a/indra/newview/llpanelwearing.h +++ b/indra/newview/llpanelwearing.h @@ -38,7 +38,9 @@ #include "llpanelappearancetab.h" class LLInventoryCategoriesObserver; +class LLListContextMenu; class LLWearableItemsList; +class LLWearingGearMenu; /** * @class LLPanelWearing @@ -61,11 +63,17 @@ public: /*virtual*/ bool isActionEnabled(const LLSD& userdata); + /*virtual*/ void showGearMenu(LLView* spawning_view); + boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb); private: + void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y); + LLInventoryCategoriesObserver* mCategoriesObserver; LLWearableItemsList* mCOFItemsList; + LLWearingGearMenu* mGearMenu; + LLListContextMenu* mContextMenu; bool mIsInitialized; }; diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml new file mode 100644 index 0000000000..84431a2f69 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + layout="topleft" + name="Gear Wearing"> + <menu_item_call + label="Edit Outfit" + layout="topleft" + name="edit"> + <on_click + function="Gear.Edit" /> + </menu_item_call> +</menu> diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml new file mode 100644 index 0000000000..85505f9972 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Wearing"> + <menu_item_call + label="Edit Outfit" + layout="topleft" + name="edit"> + <on_click + function="Wearing.Edit" /> + </menu_item_call> +</context_menu> 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 9cd14c00fc..b365540d1f 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -53,6 +53,7 @@ left="1" multi_select="true" name="cof_items_list" + standalone="false" top="0" translate="false" width="310" -- cgit v1.2.3 From 2af4dae64eef9940a564def2628de45516316219 Mon Sep 17 00:00:00 2001 From: Eli Linden <eli@lindenlab.com> Date: Wed, 23 Jun 2010 11:59:13 -0700 Subject: CT-575 WIP DA translation for set 12 --- .../skins/default/xui/da/floater_camera.xml | 25 ++---- .../skins/default/xui/da/floater_incoming_call.xml | 8 +- .../skins/default/xui/da/floater_snapshot.xml | 23 ++++-- .../default/xui/da/floater_voice_controls.xml | 8 +- .../skins/default/xui/da/inspect_object.xml | 11 ++- .../skins/default/xui/da/menu_hide_navbar.xml | 1 + .../skins/default/xui/da/menu_inventory.xml | 1 + .../skins/default/xui/da/menu_save_outfit.xml | 2 +- indra/newview/skins/default/xui/da/menu_viewer.xml | 17 ++-- .../newview/skins/default/xui/da/notifications.xml | 96 ++++++++++++++++++++-- .../skins/default/xui/da/panel_edit_shape.xml | 13 ++- .../skins/default/xui/da/panel_edit_wearable.xml | 7 +- .../skins/default/xui/da/panel_outfit_edit.xml | 18 ++-- .../default/xui/da/panel_outfits_inventory.xml | 3 +- .../newview/skins/default/xui/da/panel_places.xml | 4 +- .../default/xui/da/panel_preferences_advanced.xml | 2 +- .../skins/default/xui/da/panel_status_bar.xml | 6 +- .../skins/default/xui/da/sidepanel_inventory.xml | 10 +-- indra/newview/skins/default/xui/da/strings.xml | 52 ++++++++++-- 19 files changed, 225 insertions(+), 82 deletions(-) diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml index 37e3307960..a1b98ec4ce 100644 --- a/indra/newview/skins/default/xui/da/floater_camera.xml +++ b/indra/newview/skins/default/xui/da/floater_camera.xml @@ -9,35 +9,28 @@ <floater.string name="move_tooltip"> Flyt kamera op og ned, til venstre og højre </floater.string> - <floater.string name="orbit_mode_title"> - Kredsløb + <floater.string name="camera_modes_title"> + Kamera valg </floater.string> <floater.string name="pan_mode_title"> - Panorér + Kredsløb zoom panorering </floater.string> - <floater.string name="avatar_view_mode_title"> + <floater.string name="presets_mode_title"> Forvalg </floater.string> <floater.string name="free_mode_title"> Se objekt </floater.string> <panel name="controls"> - <joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, til venstre og højre"/> <panel name="zoom" tool_tip="Zoom kamera mod fokus"> + <joystick_rotate name="cam_rotate_stick" tool_tip="Kamera kredser rundt om fokus"/> <slider_bar name="zoom_slider" tool_tip="Zoom kamera mod fokus"/> - </panel> - <joystick_rotate name="cam_rotate_stick" tool_tip="Kreds kamera omkring fokus"/> - <panel name="camera_presets"> - <button name="rear_view" tool_tip="Se bagfra"/> - <button name="group_view" tool_tip="Se som gruppe"/> - <button name="front_view" tool_tip="Se forfra"/> - <button name="mouselook_view" tool_tip="Førsteperson"/> + <joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, venstre og højre"/> </panel> </panel> <panel name="buttons"> - <button label="" name="orbit_btn" tool_tip="Rotér kamera"/> - <button label="" name="pan_btn" tool_tip="Panorér kamera"/> - <button label="" name="avatarview_btn" tool_tip="Forvalg"/> - <button label="" name="freecamera_btn" tool_tip="Se objekt"/> + <button label="" name="presets_btn" tool_tip="Forvalg"/> + <button label="" name="pan_btn" tool_tip="Kredsløb zoom panorering"/> + <button label="" name="avatarview_btn" tool_tip="Kamera valg"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml index 2349174db2..7a3c3e466a 100644 --- a/indra/newview/skins/default/xui/da/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/da/floater_incoming_call.xml @@ -16,7 +16,13 @@ har sluttet sig til stemme chat opkald med en konference chat. </floater.string> <floater.string name="VoiceInviteGroup"> - deltager nu i Stemme chat opkald med denne gruppe [GROUP]. + netop tilsuttet stemme kanal for '[GROUP]'. + </floater.string> + <floater.string name="VoiceInviteQuestionGroup"> + Ønsker du at forlade [CURRENT_CHAT] og tilsutte dig kald med '[GROUP]'? + </floater.string> + <floater.string name="VoiceInviteQuestionDefault"> + Ønsker du at forlade [CURRENT_CHAT] og tilslutte dig denne stemmechat? </floater.string> <text name="question"> Ønsker du at forlade [CURRENT_CHAT] og slutte dig til denne stemme chat? diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml index 7f7fb8ddf0..a62bd60757 100644 --- a/indra/newview/skins/default/xui/da/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml @@ -5,12 +5,19 @@ </floater.string> <button label="Tag nyt foto" name="new_snapshot_btn"/> <line_editor label="Beskrivelse" name="description"/> - <button label="Del foto" name="share"/> - <button label="Del på internettet" name="share_to_web"/> - <button label="Gem til beholdning" name="save_to_inventory"/> - <button label="Gem foto" name="save"/> - <button label="Email foto" name="share_to_email"/> - <button label="Gem på computer" name="save_to_computer"/> - <button label="Sæt som profil billede" name="set_profile_pic"/> - <button label="Tilbage" name="cancel"/> + <panel name="panel_snapshot_main"> + <button label="Del foto" name="share"/> + <button label="Gem foto" name="save"/> + <button label="Sæt til profilbillede" name="set_profile_pic"/> + </panel> + <panel name="panel_snapshot_share"> + <button label="Del på internettet" name="share_to_web"/> + <button label="E-mail foto" name="share_to_email"/> + <button label="Tilbage" name="cancel_share"/> + </panel> + <panel name="panel_snapshot_save"> + <button label="Gem til min beholdning" name="save_to_inventory"/> + <button label="Gem til min computer" name="save_to_computer"/> + <button label="Tilbage" name="cancel_save"/> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml index 05e9eb6cdd..2e59dfd649 100644 --- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml @@ -19,8 +19,10 @@ <layout_panel name="my_panel"> <text name="user_text" value="Min avatar:"/> </layout_panel> - <layout_panel name="leave_call_btn_panel"> - <button label="Forlad opkald" name="leave_call_btn"/> - </layout_panel> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Forlad opkald" name="leave_call_btn"/> + </layout_panel> + </layout_stack> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/da/inspect_object.xml b/indra/newview/skins/default/xui/da/inspect_object.xml index 8cbcf6cac8..78ccc5b869 100644 --- a/indra/newview/skins/default/xui/da/inspect_object.xml +++ b/indra/newview/skins/default/xui/da/inspect_object.xml @@ -8,8 +8,8 @@ Af [CREATOR] </string> <string name="CreatorAndOwner"> - af [CREATOR] -ejer [OWNER] + Af [CREATOR] +Owner [OWNER] </string> <string name="Price"> L$[AMOUNT] @@ -23,6 +23,13 @@ ejer [OWNER] <string name="Sit"> Sid </string> + <text name="object_name" value="Test objekt navn der reelt er to linier og meget lang"/> + <text name="price_text"> + L$30,000 + </text> + <text name="object_description"> + Dette er en meget lang beskrivelse af et objekt udformet så den fylder mindst 80 karakterer i længden eller endda nærmere 120 på dette sted. Man kan aldrig vide.... + </text> <button label="Køb" name="buy_btn"/> <button label="Betal" name="pay_btn"/> <button label="Tag kopi" name="take_free_copy_btn"/> diff --git a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml index 45276adda4..d96a8a8a17 100644 --- a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml @@ -2,4 +2,5 @@ <menu name="hide_navbar_menu"> <menu_item_check label="Vis navigationsbjælke" name="ShowNavbarNavigationPanel"/> <menu_item_check label="Vis favoritbjælke" name="ShowNavbarFavoritesPanel"/> + <menu_item_check label="Vis min lokation bjælke" name="ShowMiniLocationPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml index ff70ec7886..2eafeb3fcc 100644 --- a/indra/newview/skins/default/xui/da/menu_inventory.xml +++ b/indra/newview/skins/default/xui/da/menu_inventory.xml @@ -78,6 +78,7 @@ <menu label="Vedhæft til HUD" name="Attach To HUD"/> <menu_item_call label="Redigér" name="Wearable Edit"/> <menu_item_call label="Tag på" name="Wearable Wear"/> + <menu_item_call label="Tilføj" name="Wearable Add"/> <menu_item_call label="Tag af" name="Take Off"/> <menu_item_call label="--ingen valg--" name="--no options--"/> </menu> diff --git a/indra/newview/skins/default/xui/da/menu_save_outfit.xml b/indra/newview/skins/default/xui/da/menu_save_outfit.xml index 3d89715ea8..188229b586 100644 --- a/indra/newview/skins/default/xui/da/menu_save_outfit.xml +++ b/indra/newview/skins/default/xui/da/menu_save_outfit.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="save_outfit_menu"> <menu_item_call label="Gem" name="save_outfit"/> - <menu_item_call label="Gem som ny" name="save_as_new_outfit"/> + <menu_item_call label="Gem som" name="save_as_new_outfit"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml index a061292eb0..6449a00f2f 100644 --- a/indra/newview/skins/default/xui/da/menu_viewer.xml +++ b/indra/newview/skins/default/xui/da/menu_viewer.xml @@ -9,6 +9,7 @@ <menu_item_check label="Beholdning" name="Inventory"/> <menu_item_check label="Min beholdning" name="ShowSidetrayInventory"/> <menu_item_check label="Mine bevægelser" name="Gestures"/> + <menu_item_check label="Min stemme" name="ShowVoice"/> <menu label="Min status" name="Status"> <menu_item_call label="Væk" name="Set Away"/> <menu_item_call label="Optaget" name="Set Busy"/> @@ -68,6 +69,12 @@ <menu_item_call label="Sammenkæd" name="Link"/> <menu_item_call label="Adskil" name="Unlink"/> <menu_item_check label="Redigér sammekædede objekter" name="Edit Linked Parts"/> + <menu label="Vis lænkede dele" name="Select Linked Parts"> + <menu_item_call label="Vælg næste del" name="Select Next Part"/> + <menu_item_call label="Vælg forrige del" name="Select Previous Part"/> + <menu_item_call label="Inkludér næste del" name="Include Next Part"/> + <menu_item_call label="Inkludér forrige del" name="Include Previous Part"/> + </menu> <menu_item_call label="Fokusér på valgte" name="Focus on Selection"/> <menu_item_call label="Zoom til valgte" name="Zoom to Selection"/> <menu label="Objekt" name="Object"> @@ -98,11 +105,11 @@ <menu_item_call label="Benyt valgte som grundlag for gitter" name="Use Selection for Grid"/> <menu_item_call label="Gitter indstillinger" name="Grid Options"/> </menu> - <menu label="Vis lænkede dele" name="Select Linked Parts"> - <menu_item_call label="Vælg næste del" name="Select Next Part"/> - <menu_item_call label="Vælg forrige del" name="Select Previous Part"/> - <menu_item_call label="Inkludér næste del" name="Include Next Part"/> - <menu_item_call label="Inkludér forrige del" name="Include Previous Part"/> + <menu label="Send" name="Upload"> + <menu_item_call label="Billede (L$[COST])..." name="Upload Image"/> + <menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/> + <menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Mange (L$[COST] pr. fil)..." name="Bulk Upload"/> </menu> </menu> <menu label="Hjælp" name="Help"> diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 72a1ab6a29..76cf73e1e6 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -267,6 +267,11 @@ Dette skyldes ofte nyt hardware som endnu ikke er blevet testet med [APP_NAME]. Grafik kvaliteten sættes til 'lav' for at undgå typiske problemer med drivere. Dette vil slå visse grafik funktioner fra. Vi anbefaler at opdatere driverne til dit grafikkort. Grafik kvaliteten kan forbedres i indstillinger > Grafik. + </notification> + <notification name="CannotCopyWarning"> + Du har ikke rettigheder til at kopiere følgende genstande: +[ITEMS] +og du vil miste dem fra din beholdning hvis du forærer dem væk. Er du sikker på at du vil tilbyde disse genstande? </notification> <notification name="CannotGiveCategory"> Du har ikke tilladelse til at videreføre den valgte mappe. @@ -412,6 +417,26 @@ Tilbyd venskab til [NAME]? <button name="Cancel" text="Annullér"/> </form> </notification> + <notification label="Gem" name="SaveWearableAs"> + Gem genstand til beholdning som: + <form name="form"> + <input name="message"> + [DESC] (ny) + </input> + <button name="Offer" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification label="Omdøb sæt" name="RenameOutfit"> + Nyt navn til sæt: + <form name="form"> + <input name="new_name"> + [NAME] + </input> + <button name="Offer" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> <notification name="ConfirmItemDeleteHasLinks"> Mindst en af genstandene har lænkede genstande der peger på den. Hvis du sletter denne genstand, vil lænkninger ikke virke mere. Det anbefales kraftigt at fjerne lænkninger først. @@ -677,9 +702,9 @@ Gå til 'Knowledge Base' for mere information om indholdsratings. Du har ikke adgang til denne region på grund af din valgte indholdsrating. </notification> <notification name="RegionEntryAccessBlocked_Change"> - Du har ikke adgang til den region, da din indholdsrating ikke tillader dette. + Du har ikke adgang til denne region på grund af din opsætning af indholdsrating. -Klik på "Ændre præference" for at forhøje din indholdsrating for direkte adgang nu. Ved at gøre dette vil du få lov til at søge og få adgang til [REGIONMATURITY] indhold. Hvis du ønsker at ændre denne opsætning senere, kan du gøre dette fra Mig > Indstillinger > Generelt. +For at få adgang til den ønskede region skal du ændre din indholdsrating. Dette vil give dig ret til at søge og får tilgang til indhold af typen [REGIONMATURITY]. For at omgøre ændringer gå til Mig > Indstillinger > Generelt. <form name="form"> <button name="OK" text="Ændre indstillinger"/> <button name="Cancel" text="Luk"/> @@ -1460,6 +1485,21 @@ Klik på Acceptér for at deltage eller Afvis for at afvise invitationen. Klik p <notification name="VoiceLoginRetry"> Vi laver en stemmekanal til dig. Det kan tage op til et minut. </notification> + <notification name="VoiceEffectsExpired"> + En eller flere af dine stemme "morphs" er udløbet. +[[URL] Click here] for at forny dit abbonnement. + </notification> + <notification name="VoiceEffectsExpiredInUse"> + Den aktive stemme "morph" er udløbet og din normale stemme opsætning er genaktiveret. +[[URL] Click here] for at forny dit abbonnement. + </notification> + <notification name="VoiceEffectsWillExpire"> + En eller flere af dine stemme "morphs" vil udløbe om mindre end [INTERVAL] dage. +[[URL] Click here] for at forny dit abbonnement. + </notification> + <notification name="VoiceEffectsNew"> + Nye stemme "morphs" er tilgængelige! + </notification> <notification name="Cannot enter parcel: not a group member"> Kun medlemmer af en bestemt gruppe kan besøge dette område. </notification> @@ -1526,18 +1566,36 @@ De vil blive blokeret nogle få sekunder af sikkerhedsmæssige årsager. Knappen vil blive vist når der er nok plads til den. </notification> <notification name="ShareNotification"> - Træk genstande fra beholdning til en person i beboer vælgeren + Vælg beboere at dele med. + </notification> + <notification name="ShareItemsConfirmation"> + Er du sikker på at du vil dele følgende genstande: + +[ITEMS] + +Med følgende beboere: + +[RESIDENTS] + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Ok"/> + </notification> + <notification name="ItemsShared"> + Genstande er nu delt. </notification> <notification name="DeedToGroupFail"> Dedikering til gruppe fejlede. </notification> <notification name="AvatarRezNotification"> ( [EXISTENCE] sekunder i live ) -Avatar '[NAME]' declouded in [TIME] seconds. +Avatar '[NAME]' var ikke sky mere, efter [TIME] sekunder. </notification> - <notification name="AvatarRezSelfNotification"> - ( [EXISTENCE] sekunder i live ) -Du afsluttede klargøring af dit sæt på [TIME] sekunder. + <notification name="AvatarRezSelfBakedDoneNotification"> + ( [EXISTENCE] seconds alive ) +Du blev færdig med at fremvise dit sæt efter [TIME] sekunder. + </notification> + <notification name="AvatarRezSelfBakedUpdateNotification"> + ( [EXISTENCE] seconds alive ) +Du sendte en opdatering af dit udseende efter [TIME] sekunder. +[STATUS] </notification> <notification name="AvatarRezCloudNotification"> ( [EXISTENCE] sekunder i live ) @@ -1559,9 +1617,31 @@ Avatar '[NAME]' skiftede til udseende modus. ( [EXISTENCE] sekunder i live ) Avatar '[NAME]' har forladt udseende modus. </notification> + <notification name="NoConnect"> + Vi har problemer med at oprette forbindelse via [PROTOCOL] [HOSTID]. +Check venligst din netværks- og firewallsetup. + <form name="form"> + <button name="OK" text="OK"/> + </form> + </notification> + <notification name="NoVoiceConnect"> + Vi har problemer med at oprette forbindelse til din stemme server: + +[HOSTID] + +Stemme kommunikation vil ikke være tilgængelig. +Check venligst din netværks- og firewall setup. + <form name="form"> + <button name="OK" text="OK"/> + </form> + </notification> <notification name="AvatarRezLeftNotification"> ( [EXISTENCE] sekunder i live ) Avatar '[NAME]' forsvandt helt "uploaded". + </notification> + <notification name="AvatarRezSelfBakeNotification"> + ( [EXISTENCE] seconds alive ) +Du sendte en [RESOLUTION] tekstur til '[BODYREGION]' efter [TIME] sekunder. </notification> <notification name="ConfirmLeaveCall"> Er du sikker på at du vil forlade dette opkald? @@ -1574,7 +1654,7 @@ vil have lyden slukket - selv efter de har forladt kaldet. Sluk for alles lyd? - <usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="OK" yestext="Annullér"/> + <usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="Annullér" yestext="Ok"/> </notification> <global name="UnsupportedGLRequirements"> Det ser ikke ud til at din hardware opfylder minimumskravene til [APP_NAME]. [APP_NAME] kræver et OpenGL grafikkort som understøter 'multitexture'. Check eventuelt om du har de nyeste drivere for grafikkortet, og de nyeste service-packs og patches til dit operativsystem. diff --git a/indra/newview/skins/default/xui/da/panel_edit_shape.xml b/indra/newview/skins/default/xui/da/panel_edit_shape.xml index 4360fe35f5..7c1ffe5cfa 100644 --- a/indra/newview/skins/default/xui/da/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/da/panel_edit_shape.xml @@ -1,8 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shape_panel"> - <text name="avatar_height"> - [HEIGHT] meter høj - </text> + <string name="meters"> + Meter + </string> + <string name="feet"> + Fod + </string> + <string name="height"> + Højde: + </string> + <text name="avatar_height"/> <panel label="Trøje" name="accordion_panel"> <accordion name="wearable_accordion"> <accordion_tab name="shape_body_tab" title="Krop"/> diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml index 8e6990fe31..f927f918a1 100644 --- a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml @@ -72,7 +72,7 @@ <string name="jacket_desc_text"> Jakke: </string> - <string name="skirt_skirt_desc_text"> + <string name="skirt_desc_text"> Nederdel: </string> <string name="gloves_desc_text"> @@ -100,11 +100,6 @@ <icon name="male_icon" tool_tip="Mandlig"/> <icon name="female_icon" tool_tip="Kvindelig"/> </panel> - <panel label="gear_buttom_panel" name="gear_buttom_panel"> - <button name="friends_viewsort_btn" tool_tip="Valg"/> - <button name="add_btn" tool_tip="TODO"/> - <button name="del_btn" tool_tip="TODO"/> - </panel> <panel name="button_panel"> <button label="Gem som" name="save_as_button"/> <button label="Vend tilbage" name="revert_button"/> diff --git a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml index 9aa9fd14cc..a02c9ba399 100644 --- a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml @@ -13,7 +13,7 @@ <string name="Filter.All" value="Alle"/> <string name="Filter.Clothes/Body" value="Tøj/Krop"/> <string name="Filter.Objects" value="Objekter"/> - <button label="redigér" name="edit_wearable_btn"/> + <string name="Filter.Custom" value="Tilpasset filter"/> <text name="title" value="Redigér sæt"/> <panel label="bottom_panel" name="header_panel"> <panel label="bottom_panel" name="outfit_name_and_status"> @@ -23,20 +23,16 @@ </panel> <layout_stack name="im_panels"> <layout_panel label="IM kontrolpanel" name="outfit_wearables_panel"> - <panel label="bottom_panel" name="edit_panel"/> - </layout_panel> - <layout_panel name="add_wearables_panel"> - <text name="add_to_outfit_label" value="Tilføj til sæt:"/> <layout_stack name="filter_panels"> - <layout_panel label="IM kontrolpanel" name="filter_panel"> - <filter_editor label="Filter" name="look_item_filter"/> + <layout_panel name="add_button_and_combobox"> + <button label="Tilføj mere..." name="show_add_wearables_btn"/> + </layout_panel> + <layout_panel name="filter_panel"> + <filter_editor label="Filtrér tøj i beholdning" name="look_item_filter"/> </layout_panel> </layout_stack> - <panel label="add_wearables_button_bar" name="add_wearables_button_bar"> - <button label="F" name="folder_view_btn"/> - <button label="L" name="list_view_btn"/> - </panel> </layout_panel> + <layout_panel name="add_wearables_panel"/> </layout_stack> <panel name="save_revert_button_bar"> <button label="Gem" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml index 681701aba2..4bc9ff99a9 100644 --- a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml @@ -7,8 +7,7 @@ <panel name="bottom_panel"> <button name="options_gear_btn" tool_tip="Vis flere muligheder"/> <dnd_button name="trash_btn" tool_tip="Fjern valgte genstand"/> - <button label="Gem sæt" name="make_outfit_btn" tool_tip="Gem udseende som nyt sæt"/> + <button label="Gem som" name="save_btn"/> <button label="Tag på" name="wear_btn" tool_tip="Tag valgte sæt på"/> - <button label="Redigér sæt" name="edit_current_outfit_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml index c06176f994..ac15da1717 100644 --- a/indra/newview/skins/default/xui/da/panel_places.xml +++ b/indra/newview/skins/default/xui/da/panel_places.xml @@ -5,12 +5,12 @@ <filter_editor label="Filtrér mine steder" name="Filter"/> <panel name="button_panel"> <button label="Teleportér" name="teleport_btn" tool_tip="Teleportér til det valgte område"/> - <button label="Kort" name="map_btn"/> + <button label="Kort" name="map_btn" tool_tip="Vis dette område på verdenskortet"/> <button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/> <button label="▼" name="overflow_btn" tool_tip="Vise flere valgmuligheder"/> <button label="Gem" name="save_btn"/> <button label="Annullér" name="cancel_btn"/> <button label="Luk" name="close_btn"/> - <button label="Profil" name="profile_btn"/> + <button label="Profil" name="profile_btn" tool_tip="Vis profil for stedet"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml index 807d7939b8..b267c75673 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml @@ -13,7 +13,7 @@ </text> <check_box label="Byg/Redigér" name="edit_camera_movement" tool_tip="Benyt automatisk kamera positionering ved start og slut af editerings modus"/> <check_box label="Udseende" name="appearance_camera_movement" tool_tip="Benyt automatisk kamera positionering ved redigering"/> - <check_box initial_value="1" label="Sidepanel" name="appearance_sidebar_positioning" tool_tip="Benyt automatisk positionering af kamera"/> + <check_box initial_value="sand" label="Sidepanel" name="appearance_sidebar_positioning" tool_tip="Benyt automatisk positionering af kamera"/> <check_box label="Vis avatar i førsteperson" name="first_person_avatar_visible"/> <check_box label="Piletaster bruges altid til bevægelse" name="arrow_keys_move_avatar_check"/> <check_box label="Tast-tast-hold for at løbe" name="tap_tap_hold_to_run"/> diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml index 08ffafd5a6..8633f12d24 100644 --- a/indra/newview/skins/default/xui/da/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/da/panel_status_bar.xml @@ -21,8 +21,10 @@ <panel.string name="buycurrencylabel"> L$ [AMT] </panel.string> - <button label="" label_selected="" name="buycurrency" tool_tip="Min balance"/> - <button label="Køb L$" name="buyL" tool_tip="Klik for at købe flere L$"/> + <panel name="balance_bg"> + <text name="balance" tool_tip="Min status" value="L$20"/> + <button label="KØB L$" name="buyL" tool_tip="Klik for at købe flere L$"/> + </panel> <text name="TimeText" tool_tip="Nuværende tid (Pacific)"> 24:00 PST </text> diff --git a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml index 767d74ca3f..64ee3f0428 100644 --- a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml @@ -2,12 +2,12 @@ <panel label="Ting" name="objects panel"> <panel label="" name="sidepanel__inventory_panel"> <panel name="button_panel"> - <button label="Profil" name="info_btn"/> - <button label="Del" name="share_btn"/> - <button label="Køb ind" name="shop_btn"/> - <button label="Bær" name="wear_btn"/> + <button label="Profil" name="info_btn" tool_tip="Vis objekt profil"/> + <button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/> + <button label="Køb ind" name="shop_btn" tool_tip="Åben hjemmeside for markedsplads"/> + <button label="Bær" name="wear_btn" tool_tip="Tag valgte sæt på"/> <button label="Afspil" name="play_btn"/> - <button label="Teleportér" name="teleport_btn"/> + <button label="Teleportér" name="teleport_btn" tool_tip="Teleport til det valgte område"/> </panel> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 5ceb0612a8..af0f685826 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -95,7 +95,7 @@ Et ugyldig hostnavn blev brugt for at få adgang til serveren. Check venligst din SLURL eller navnet på hosten. </string> <string name="CertExpired"> - Certifikat returneret fra nettet ser ud til at være udløbet. Check venligst din systemtid eller kontakt administratoren af dette net. + Det certifikat der blev returneret ser ud til at være udløbet. Check venligst din systemtid på computeren. </string> <string name="CertKeyUsage"> Det certifikat der blev returneret af serveren kan ikke benyttes til SSL. Kontakt venligst administrator af dette net. @@ -104,7 +104,7 @@ For mange certifikater i serverens certifikat streng. Kontakt venligst administrator af dette net. </string> <string name="CertInvalidSignature"> - Certifikat signaturen returneret på dette net kan ikke bekræftes. Kontakt venligst administrator af dette net. + Signaturen på certifkat der blev returneret af Second Life serveren kunne ikke bekræftes. </string> <string name="LoginFailedNoNetwork"> Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse. @@ -729,6 +729,12 @@ <string name="land_type_unknown"> (ukendt) </string> + <string name="Estate / Full Region"> + Estate / Hel region + </string> + <string name="Mainland / Full Region"> + Mainland / Hel region + </string> <string name="all_files"> Alle filer </string> @@ -873,6 +879,9 @@ <string name="NewWearable"> Ny [WEARABLE_ITEM] </string> + <string name="CreateNewWearable"> + Opret [WEARABLE_TYPE] + </string> <string name="next"> Næste </string> @@ -3445,6 +3454,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. <string name="session_initialization_timed_out_error"> Initialisering af session er "timed out" </string> + <string name="voice_morphing_url"> + http://secondlife.com/landing/voicemorphing + </string> <string name="paid_you_ldollars"> [NAME] betalte dig L$[AMOUNT] </string> @@ -3615,16 +3627,16 @@ Krænkelsesanmeldelse <string name="Male - Wow"> Mand - Wow </string> - <string name="FeMale - Excuse me"> + <string name="Female - Excuse me"> Kvinde - Undskyld mig </string> - <string name="FeMale - Get lost"> + <string name="Female - Get lost"> Kvinde - Skrid! </string> - <string name="FeMale - Blow kiss"> + <string name="Female - Blow kiss"> Kvinde - Pust et kys </string> - <string name="FeMale - Boo"> + <string name="Female - Boo"> Kvinde - Boo </string> <string name="Female - Bored"> @@ -3657,4 +3669,32 @@ Krænkelsesanmeldelse <string name="texture_load_dimensions_error"> Kan ikke hente billeder større end [WIDTH]*[HEIGHT] </string> + <string name="words_separator" value=","/> + <string name="server_is_down"> + Desværre er noget gået galt. + + Check venligst status.secondlifegrid.net for at se om der skulle være driftsproblemer. + Hvis du bliver ved med at have problemer, check venligst din firewall- og netværksopsætning. + </string> + <string name="dateTimeWeekdaysNames"> + Søndag:Mandag:Tirsdag:Onsdag:Torsdag:Fredag:Lørdag + </string> + <string name="dateTimeWeekdaysShortNames"> + Søn:Man:Tir:Ons:Tor:Fre:Lør + </string> + <string name="dateTimeMonthNames"> + Januar:Februar:Marts:April:Maj:Juni:Juli:August:September:Oktober:November:December + </string> + <string name="dateTimeMonthShortNames"> + Jan:Feb:Mar:Apr:Maj:Jun:Jul:Aug:Sep:Okt:Nov:Dec + </string> + <string name="dateTimeDayFormat"> + [MDAY] + </string> + <string name="dateTimeAM"> + AM + </string> + <string name="dateTimePM"> + PM + </string> </strings> -- cgit v1.2.3 From 4f2d241c1781bc7d580b03a89318aafd4519d4d5 Mon Sep 17 00:00:00 2001 From: Eli Linden <eli@lindenlab.com> Date: Wed, 23 Jun 2010 11:59:33 -0700 Subject: CT-575 WIP DA translation for set 12, new files --- .../skins/default/xui/da/floater_voice_effect.xml | 29 ++++++++++++++++++++++ .../skins/default/xui/da/menu_cof_attachment.xml | 4 +++ .../skins/default/xui/da/menu_cof_body_part.xml | 5 ++++ .../skins/default/xui/da/menu_cof_clothing.xml | 7 ++++++ .../newview/skins/default/xui/da/menu_cof_gear.xml | 5 ++++ .../skins/default/xui/da/menu_outfit_gear.xml | 26 +++++++++++++++++++ .../skins/default/xui/da/menu_outfit_tab.xml | 9 +++++++ .../default/xui/da/menu_wearable_list_item.xml | 13 ++++++++++ .../skins/default/xui/da/panel_voice_effect.xml | 15 +++++++++++ 9 files changed, 113 insertions(+) create mode 100644 indra/newview/skins/default/xui/da/floater_voice_effect.xml create mode 100644 indra/newview/skins/default/xui/da/menu_cof_attachment.xml create mode 100644 indra/newview/skins/default/xui/da/menu_cof_body_part.xml create mode 100644 indra/newview/skins/default/xui/da/menu_cof_clothing.xml create mode 100644 indra/newview/skins/default/xui/da/menu_cof_gear.xml create mode 100644 indra/newview/skins/default/xui/da/menu_outfit_gear.xml create mode 100644 indra/newview/skins/default/xui/da/menu_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/da/menu_wearable_list_item.xml create mode 100644 indra/newview/skins/default/xui/da/panel_voice_effect.xml diff --git a/indra/newview/skins/default/xui/da/floater_voice_effect.xml b/indra/newview/skins/default/xui/da/floater_voice_effect.xml new file mode 100644 index 0000000000..543224c6f6 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_voice_effect.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater label="Steder" name="voice_effects" title="SE STEMME "MORPH""> + <string name="no_voice_effect"> + (Ingen stemme "morph") + </string> + <string name="active_voice_effect"> + (Aktiv) + </string> + <string name="unsubscribed_voice_effect"> + (Ikke aktiveret) + </string> + <string name="new_voice_effect"> + (Ny!) + </string> + <text name="status_text"> + For at se stemme "morph" effekter, skal du klikke på "optag" kanppen for at optage en stump stemme, derefter klik på en stemme "morph" på listen for at høre hvordan det vil lyde. + +For at vende tilbage til lokal stemme-chat luk dette vindue. + </text> + <button label="Optage prøve" name="record_btn" tool_tip="Optag en stemmeprøve."/> + <button label="Stop" name="record_stop_btn"/> + <text name="voice_morphing_link"> + [[URL] Hent stemme "morph"] + </text> + <scroll_list name="voice_effect_list" tool_tip="Optag en prøve med din stemme og klik på en effekt for at teste."> + <scroll_list.columns label="Stemme "morph"" name="name"/> + <scroll_list.columns label="Udløber" name="expires"/> + </scroll_list> +</floater> diff --git a/indra/newview/skins/default/xui/da/menu_cof_attachment.xml b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml new file mode 100644 index 0000000000..9d7fc0f223 --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Attachment"> + <menu_item_call label="Tag af" name="detach"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/da/menu_cof_body_part.xml b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml new file mode 100644 index 0000000000..0e90d5a3ae --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Body"> + <menu_item_call label="Erstat" name="replace"/> + <menu_item_call label="Redigér" name="edit"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/da/menu_cof_clothing.xml b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml new file mode 100644 index 0000000000..73d97cd167 --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Clothing"> + <menu_item_call label="Tag af" name="take_off"/> + <menu_item_call label="Flyt et lag op" name="move_up"/> + <menu_item_call label="Flyt et lag ned" name="move_down"/> + <menu_item_call label="Redigér" name="edit"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/da/menu_cof_gear.xml b/indra/newview/skins/default/xui/da/menu_cof_gear.xml new file mode 100644 index 0000000000..f44369fd84 --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_cof_gear.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear COF"> + <menu label="Nyt tøj" name="COF.Gear.New_Clothes"/> + <menu label="Nye kropsdele" name="COF.Geear.New_Body_Parts"/> +</menu> diff --git a/indra/newview/skins/default/xui/da/menu_outfit_gear.xml b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml new file mode 100644 index 0000000000..3ed0df9041 --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear Outfit"> + <menu_item_call label="Tag på - Erstat nuværende sæt" name="wear"/> + <menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/> + <menu label="Nyt tøj" name="New Clothes"> + <menu_item_call label="Ny trøje" name="New Shirt"/> + <menu_item_call label="Nye bukser" name="New Pants"/> + <menu_item_call label="Nye sko" name="New Shoes"/> + <menu_item_call label="Nye strømper" name="New Socks"/> + <menu_item_call label="Ny jakke" name="New Jacket"/> + <menu_item_call label="Ny nederdel" name="New Skirt"/> + <menu_item_call label="Nye handsker" name="New Gloves"/> + <menu_item_call label="Ny undertrøje" name="New Undershirt"/> + <menu_item_call label="Nye underbukser" name="New Underpants"/> + <menu_item_call label="Ny alpha" name="New Alpha"/> + <menu_item_call label="Ny tatovering" name="New Tattoo"/> + </menu> + <menu label="Nye kropsdele" name="New Body Parts"> + <menu_item_call label="Ny figur" name="New Shape"/> + <menu_item_call label="Nyt hud" name="New Skin"/> + <menu_item_call label="Nyt hår" name="New Hair"/> + <menu_item_call label="Nye øjne" name="New Eyes"/> + </menu> + <menu_item_call label="Omdøb sæt" name="rename"/> + <menu_item_call label="Slet sæt" name="delete_outfit"/> +</menu> diff --git a/indra/newview/skins/default/xui/da/menu_outfit_tab.xml b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml new file mode 100644 index 0000000000..35bb1ae685 --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Outfit"> + <menu_item_call label="Tag på - Erstat nuværende sæt" name="wear_replace"/> + <menu_item_call label="Tag på - Tilføj til nuværende sæt" name="wear_add"/> + <menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/> + <menu_item_call label="Redigér sæt" name="edit"/> + <menu_item_call label="Omdøb" name="rename"/> + <menu_item_call label="Slet sæt" name="delete"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml new file mode 100644 index 0000000000..6ec5e50e5b --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Outfit Wearable Context Menu"> + <menu_item_call label="Tag på" name="wear"/> + <menu_item_call label="Tilføj" name="wear_add"/> + <menu_item_call label="Tag af" name="take_off_or_detach"/> + <menu_item_call label="Tag af" name="detach"/> + <context_menu label="Vedhæft til ▶" name="wearable_attach_to"/> + <context_menu label="Vedhæft på HUD ▶" name="wearable_attach_to_hud"/> + <menu_item_call label="Tag af" name="take_off"/> + <menu_item_call label="Redigér" name="edit"/> + <menu_item_call label="Objekt profil" name="object_profile"/> + <menu_item_call label="Vis original" name="show_original"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/da/panel_voice_effect.xml b/indra/newview/skins/default/xui/da/panel_voice_effect.xml new file mode 100644 index 0000000000..8800d2e12d --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_voice_effect.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_voice_effect"> + <string name="no_voice_effect"> + Ingen stemme "morph" + </string> + <string name="preview_voice_effects"> + Se stemme "morph" ▶ + </string> + <string name="get_voice_effects"> + Hente stemme "morph" ▶ + </string> + <combo_box name="voice_effect" tool_tip="Vælg en stemme "morph" effekt for at ændre din stemme."> + <combo_box.item label="Ingen stemme "morph"" name="no_voice_effect"/> + </combo_box> +</panel> -- cgit v1.2.3 From 537678a8d81082ea5621f097ffd477ef291a0f02 Mon Sep 17 00:00:00 2001 From: Eli Linden <eli@lindenlab.com> Date: Wed, 23 Jun 2010 14:11:02 -0700 Subject: ND-47489 WIP FR translation for set 12 --- .../skins/default/xui/fr/floater_camera.xml | 25 +++--- .../skins/default/xui/fr/floater_incoming_call.xml | 8 +- .../skins/default/xui/fr/floater_snapshot.xml | 23 ++++-- .../default/xui/fr/floater_voice_controls.xml | 8 +- .../skins/default/xui/fr/inspect_object.xml | 10 +-- .../skins/default/xui/fr/menu_hide_navbar.xml | 1 + .../skins/default/xui/fr/menu_inventory.xml | 1 + .../skins/default/xui/fr/menu_save_outfit.xml | 2 +- indra/newview/skins/default/xui/fr/menu_viewer.xml | 17 ++-- .../newview/skins/default/xui/fr/notifications.xml | 91 ++++++++++++++++++++-- .../skins/default/xui/fr/panel_edit_shape.xml | 13 +++- .../skins/default/xui/fr/panel_edit_wearable.xml | 9 +-- .../skins/default/xui/fr/panel_outfit_edit.xml | 18 ++--- .../default/xui/fr/panel_outfits_inventory.xml | 3 +- .../newview/skins/default/xui/fr/panel_places.xml | 4 +- .../default/xui/fr/panel_preferences_advanced.xml | 2 +- .../skins/default/xui/fr/panel_status_bar.xml | 6 +- .../skins/default/xui/fr/sidepanel_inventory.xml | 10 +-- indra/newview/skins/default/xui/fr/strings.xml | 52 +++++++++++-- 19 files changed, 218 insertions(+), 85 deletions(-) diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml index 558551b649..b0834fe170 100644 --- a/indra/newview/skins/default/xui/fr/floater_camera.xml +++ b/indra/newview/skins/default/xui/fr/floater_camera.xml @@ -9,35 +9,28 @@ <floater.string name="move_tooltip"> Déplacer la caméra vers le haut et le bas, la gauche et la droite </floater.string> - <floater.string name="orbit_mode_title"> - Faire tourner + <floater.string name="camera_modes_title"> + Modes </floater.string> <floater.string name="pan_mode_title"> - Faire un panoramique + Rotation - Zoom - Panoramique </floater.string> - <floater.string name="avatar_view_mode_title"> + <floater.string name="presets_mode_title"> Préréglages </floater.string> <floater.string name="free_mode_title"> Voir l'objet </floater.string> <panel name="controls"> - <joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/> <panel name="zoom" tool_tip="Zoomer en direction du point central"> + <joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/> <slider_bar name="zoom_slider" tool_tip="Zoomer en direction du point central"/> - </panel> - <joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/> - <panel name="camera_presets"> - <button name="rear_view" tool_tip="Vue arrière"/> - <button name="group_view" tool_tip="Vue Groupe"/> - <button name="front_view" tool_tip="Vue frontale"/> - <button name="mouselook_view" tool_tip="Vue subjective"/> + <joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/> </panel> </panel> <panel name="buttons"> - <button label="" name="orbit_btn" tool_tip="Faire tourner la caméra"/> - <button label="" name="pan_btn" tool_tip="Faire un panoramique"/> - <button label="" name="avatarview_btn" tool_tip="Préréglages"/> - <button label="" name="freecamera_btn" tool_tip="Voir l'objet"/> + <button label="" name="presets_btn" tool_tip="Préréglages"/> + <button label="" name="pan_btn" tool_tip="Rotation - Zoom - Panoramique"/> + <button label="" name="avatarview_btn" tool_tip="Modes"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml index 110c61aedc..43a7424851 100644 --- a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml @@ -16,7 +16,13 @@ a rejoint un chat vocal avec conférence. </floater.string> <floater.string name="VoiceInviteGroup"> - a rejoint un chat vocal avec le groupe [GROUP]. + vient de rejoindre le canal vocal [GROUP]. + </floater.string> + <floater.string name="VoiceInviteQuestionGroup"> + Voulez-vous quitter [CURRENT_CHAT] et rejoindre l'appel avec [GROUP] ? + </floater.string> + <floater.string name="VoiceInviteQuestionDefault"> + Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ? </floater.string> <text name="question"> Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ? diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml index 381a513bda..033ee7443c 100644 --- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml @@ -5,12 +5,19 @@ </floater.string> <button label="Rafraîchir" name="new_snapshot_btn"/> <line_editor label="Description" name="description"/> - <button label="Partager" name="share"/> - <button label="Partage Web" name="share_to_web"/> - <button label="Dans mon inventaire" name="save_to_inventory"/> - <button label="Enregistrer" name="save"/> - <button label="Envoi par e-mail" name="share_to_email"/> - <button label="Sur mon ordinateur" name="save_to_computer"/> - <button label="Image de profil" name="set_profile_pic"/> - <button label="Précédent" name="cancel"/> + <panel name="panel_snapshot_main"> + <button label="Partager" name="share"/> + <button label="Enregistrer" name="save"/> + <button label="Image de profil" name="set_profile_pic"/> + </panel> + <panel name="panel_snapshot_share"> + <button label="Partage Web" name="share_to_web"/> + <button label="Envoi par e-mail" name="share_to_email"/> + <button label="Précédent" name="cancel_share"/> + </panel> + <panel name="panel_snapshot_save"> + <button label="Dans mon inventaire" name="save_to_inventory"/> + <button label="Sur mon ordinateur" name="save_to_computer"/> + <button label="Précédent" name="cancel_save"/> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml index 1a7bc228fa..5c26527ed6 100644 --- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml @@ -19,8 +19,10 @@ <layout_panel name="my_panel"> <text name="user_text" value="Mon avatar :"/> </layout_panel> - <layout_panel name="leave_call_btn_panel"> - <button label="Quitter l'appel" name="leave_call_btn"/> - </layout_panel> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Quitter l'appel" name="leave_call_btn"/> + </layout_panel> + </layout_stack> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/fr/inspect_object.xml b/indra/newview/skins/default/xui/fr/inspect_object.xml index e50de400fd..b66af7a2bf 100644 --- a/indra/newview/skins/default/xui/fr/inspect_object.xml +++ b/indra/newview/skins/default/xui/fr/inspect_object.xml @@ -8,8 +8,8 @@ Par [CREATOR] </string> <string name="CreatorAndOwner"> - par [CREATOR] -propriétaire [OWNER] + De [CREATOR] +Propriétaire [OWNER] </string> <string name="Price"> [AMOUNT] L$ @@ -23,16 +23,16 @@ propriétaire [OWNER] <string name="Sit"> M'asseoir </string> - <text name="object_name" value="Nom d'objet de test vraiment très long"/> + <text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/> <text name="object_creator"> par secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about </text> <text name="price_text"> - 300 000 L$ + 30 000 L$ </text> <text name="object_description"> - Cette description d'objet est vraiment très longue : elle compte au moins 80 caractères, voire plus de 120, vraiment très très longue. Who knows, really? + This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really? </text> <text name="object_media_url"> http://www.superdupertest.com diff --git a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml index 3a7126fe50..86a2ddd185 100644 --- a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml @@ -2,4 +2,5 @@ <menu name="hide_navbar_menu"> <menu_item_check label="Afficher la barre de navigation" name="ShowNavbarNavigationPanel"/> <menu_item_check label="Afficher la barre des Favoris" name="ShowNavbarFavoritesPanel"/> + <menu_item_check label="Afficher la mini-barre d'emplacement" name="ShowMiniLocationPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml index 4b9a05edd6..8b0d726e51 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml @@ -81,6 +81,7 @@ <menu label="Attacher au HUD " name="Attach To HUD"/> <menu_item_call label="Éditer" name="Wearable Edit"/> <menu_item_call label="Porter" name="Wearable Wear"/> + <menu_item_call label="Ajouter" name="Wearable Add"/> <menu_item_call label="Enlever" name="Take Off"/> <menu_item_call label="--aucune option--" name="--no options--"/> </menu> diff --git a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml index fbec933382..f78db411b3 100644 --- a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml +++ b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="save_outfit_menu"> <menu_item_call label="Enregistrer" name="save_outfit"/> - <menu_item_call label="Enregistrer comme nouvelle" name="save_as_new_outfit"/> + <menu_item_call label="Enregistrer sous" name="save_as_new_outfit"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 4c7cdefbe8..0976f0c72a 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -11,6 +11,7 @@ <menu_item_check label="Mon inventaire" name="Inventory"/> <menu_item_check label="Mon inventaire" name="ShowSidetrayInventory"/> <menu_item_check label="Mes gestes" name="Gestures"/> + <menu_item_check label="Ma voix" name="ShowVoice"/> <menu label="Mon statut" name="Status"> <menu_item_call label="Absent" name="Set Away"/> <menu_item_call label="Occupé" name="Set Busy"/> @@ -70,6 +71,12 @@ <menu_item_call label="Lien" name="Link"/> <menu_item_call label="Annuler le lien" name="Unlink"/> <menu_item_check label="Modifier les parties liées" name="Edit Linked Parts"/> + <menu label="Sélectionner les parties liées" name="Select Linked Parts"> + <menu_item_call label="Sélectionner la partie suivante" name="Select Next Part"/> + <menu_item_call label="Sélectionner la partie précédente" name="Select Previous Part"/> + <menu_item_call label="Inclure la partie suivante" name="Include Next Part"/> + <menu_item_call label="Inclure la partie précédente" name="Include Previous Part"/> + </menu> <menu_item_call label="Point central sur la sélection" name="Focus on Selection"/> <menu_item_call label="Zoomer sur la sélection" name="Zoom to Selection"/> <menu label="Objet" name="Object"> @@ -100,11 +107,11 @@ <menu_item_call label="Utiliser la sélection pour la grille" name="Use Selection for Grid"/> <menu_item_call label="Options de la grille" name="Grid Options"/> </menu> - <menu label="Sélectionner les parties liées" name="Select Linked Parts"> - <menu_item_call label="Sélectionner la partie suivante" name="Select Next Part"/> - <menu_item_call label="Sélectionner la partie précédente" name="Select Previous Part"/> - <menu_item_call label="Inclure la partie suivante" name="Include Next Part"/> - <menu_item_call label="Inclure la partie précédente" name="Include Previous Part"/> + <menu label="Charger" name="Upload"> + <menu_item_call label="Image ([COST] L$)..." name="Upload Image"/> + <menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/> + <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/> </menu> </menu> <menu label="Aide" name="Help"> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index bb1c4242ee..32f779f538 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -474,7 +474,9 @@ La qualité des graphiques peut être augmentée à la section Préférences > Le terraformage est interdit dans la région [REGION]. </notification> <notification name="CannotCopyWarning"> - Vous n'êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ? + Vous n'êtes pas autorisé à copier les articles suivants : +[ITEMS]. +Ceux-ci disparaîtront donc de votre inventaire si vous les donnez. Voulez-vous vraiment offrir ces articles ? <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> </notification> <notification name="CannotGiveItem"> @@ -943,6 +945,26 @@ Proposer à [NAME] de devenir votre ami(e) ? <button name="Cancel" text="Annuler"/> </form> </notification> + <notification label="Enregistrer l'article à porter" name="SaveWearableAs"> + Enregistrer l'article dans mon inventaire comme : + <form name="form"> + <input name="message"> + [DESC] (nouv.) + </input> + <button name="Offer" text="OK"/> + <button name="Cancel" text="Annuler"/> + </form> + </notification> + <notification label="Renommer la tenue" name="RenameOutfit"> + Nouveau nom de la tenue : + <form name="form"> + <input name="new_name"> + [NAME] + </input> + <button name="Offer" text="OK"/> + <button name="Cancel" text="Annuler"/> + </form> + </notification> <notification name="RemoveFromFriends"> Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d'amis ? <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> @@ -1555,7 +1577,7 @@ Souhaitez-vous en savoir plus sur les différentes catégories d'accès ? <notification name="RegionEntryAccessBlocked_Change"> La catégorie de contenu définie dans vos préférences ne vous permet pas de pénétrer dans cette région. -Pour cela, cliquez sur Modifier les préférences afin de spécifier une catégorie plus élevée. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour modifier ce paramètre ultérieurement, accédez à Moi > Préférences > Général, le moment voulu. +Pour cela, vous devez modifier votre paramètre de catégorie de contenu. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour annuler vos modifications, accédez à Moi > Préférences > Général. <form name="form"> <button name="OK" text="Modifier les préférences"/> <button default="true" name="Cancel" text="Fermer"/> @@ -2573,6 +2595,21 @@ Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignore <notification name="VoiceLoginRetry"> Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants. </notification> + <notification name="VoiceEffectsExpired"> + Au moins l'un des effets de voix auxquels vous êtes abonné a expiré. +[[URL] Cliquez ici] pour renouveler votre abonnement. + </notification> + <notification name="VoiceEffectsExpiredInUse"> + L'effet de voix actif a expiré. Vos paramètres de voix normaux ont été rétablis. +[[URL] Cliquez ici] pour renouveler votre abonnement. + </notification> + <notification name="VoiceEffectsWillExpire"> + Au moins l'un de vos effets de voix expirera dans moins de [INTERVAL] jours. +[[URL] Cliquez ici] pour renouveler votre abonnement. + </notification> + <notification name="VoiceEffectsNew"> + De nouveaux effets de voix sont disponibles ! + </notification> <notification name="Cannot enter parcel: not a group member"> Seuls les membres d'un certain groupe peuvent visiter cette zone. </notification> @@ -2639,18 +2676,36 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité. Le bouton sera affiché quand il y aura suffisamment de place. </notification> <notification name="ShareNotification"> - Faire glisser des articles de l'inventaire sur une personne dans le sélecteur de résident + Sélectionnez les résidents avec lesquels partager l'élément. + </notification> + <notification name="ShareItemsConfirmation"> + Voulez-vous vraiment partager les articles suivants : + +[ITEMS] + +avec les résidents suivants : + +[RESIDENTS] ? + <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Ok"/> + </notification> + <notification name="ItemsShared"> + Articles partagés. </notification> <notification name="DeedToGroupFail"> Échec de cession au groupe. </notification> <notification name="AvatarRezNotification"> ([EXISTENCE] secondes d'existence) -Nuage de l'avatar [NAME] disparu en [TIME] secondes. +Nuage de l'avatar [NAME] disparu au bout de [TIME] secondes. </notification> - <notification name="AvatarRezSelfNotification"> + <notification name="AvatarRezSelfBakedDoneNotification"> ([EXISTENCE] secondes d'existence) -Vous avez terminé de figer votre tenue en [TIME] secondes. +Tenue figée au bout de [TIME] secondes. + </notification> + <notification name="AvatarRezSelfBakedUpdateNotification"> + ([EXISTENCE] secondes d'existence) +Mise à jour de votre apparence transmise au bout de [TIME] secondes. +[STATUS] </notification> <notification name="AvatarRezCloudNotification"> ([EXISTENCE] secondes d'existence) @@ -2672,9 +2727,31 @@ L'avatar [NAME] est entré en mode Apparence. ([EXISTENCE] secondes d'existence) L'avatar [NAME] a quitté le mode Apparence. </notification> + <notification name="NoConnect"> + Problèmes de connexion via [PROTOCOL] [HOSTID]. +Veuillez vérifier la configuration de votre réseau et de votre pare-feu. + <form name="form"> + <button name="OK" text="OK"/> + </form> + </notification> + <notification name="NoVoiceConnect"> + Problèmes de connexion à votre serveur vocal : + +[HOSTID] + +Aucune communication vocale n'est disponible. +Veuillez vérifier la configuration de votre réseau et de votre pare-feu. + <form name="form"> + <button name="OK" text="OK"/> + </form> + </notification> <notification name="AvatarRezLeftNotification"> ([EXISTENCE] secondes d'existence) Départ de l'avatar [NAME] entièrement chargé. + </notification> + <notification name="AvatarRezSelfBakeNotification"> + ([EXISTENCE] secondes d'existence) +Texture figée de [RESOLUTION] chargée pour [BODYREGION] au bout de [TIME] secondes. </notification> <notification name="ConfirmLeaveCall"> Voulez-vous vraiment quitter cet appel ? @@ -2686,7 +2763,7 @@ Les résidents rejoignant l'appel ultérieurement seront également ignorés, même si vous quittez l'appel. Ignorer les autres ? - <usetemplate ignoretext="Confirmer avant d'ignorer les autres lors d'un appel de groupe" name="okcancelignore" notext="Ok" yestext="Annuler"/> + <usetemplate ignoretext="Confirmer avant d'ignorer les autres lors d'un appel de groupe" name="okcancelignore" notext="Annuler" yestext="Ok"/> </notification> <global name="UnsupportedCPU"> - Votre processeur ne remplit pas les conditions minimum requises. diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml index 88f0635d97..6a5f71a36b 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml @@ -1,8 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shape_panel"> - <text name="avatar_height"> - Taille : [HEIGHT] mètres - </text> + <string name="meters"> + mètres + </string> + <string name="feet"> + pieds + </string> + <string name="height"> + Taille : + </string> + <text name="avatar_height"/> <panel label="Chemise" name="accordion_panel"> <accordion name="wearable_accordion"> <accordion_tab name="shape_body_tab" title="Corps"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml index e0762bd791..60c46a9f2e 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml @@ -72,8 +72,8 @@ <string name="jacket_desc_text"> Veste : </string> - <string name="skirt_skirt_desc_text"> - Jupe : + <string name="skirt_desc_text"> + Jupe : </string> <string name="gloves_desc_text"> Gants : @@ -100,11 +100,6 @@ <icon name="male_icon" tool_tip="Homme"/> <icon name="female_icon" tool_tip="Femme"/> </panel> - <panel label="gear_buttom_panel" name="gear_buttom_panel"> - <button name="friends_viewsort_btn" tool_tip="Options"/> - <button name="add_btn" tool_tip="TODO"/> - <button name="del_btn" tool_tip="TODO"/> - </panel> <panel name="button_panel"> <button label="Enregistrer sous" name="save_as_button"/> <button label="Rétablir" name="revert_button" width="130"/> diff --git a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml index 4c869d05c8..0764cfb6e7 100644 --- a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml @@ -13,7 +13,7 @@ <string name="Filter.All" value="Tout"/> <string name="Filter.Clothes/Body" value="Habits/Corps"/> <string name="Filter.Objects" value="Objets"/> - <button label="modifier" name="edit_wearable_btn"/> + <string name="Filter.Custom" value="Filtre personnalisé"/> <text name="title" value="Modifier la tenue"/> <panel label="bottom_panel" name="header_panel"> <panel label="bottom_panel" name="outfit_name_and_status"> @@ -23,20 +23,16 @@ </panel> <layout_stack name="im_panels"> <layout_panel label="Panneau de contrôle IM" name="outfit_wearables_panel"> - <panel label="bottom_panel" name="edit_panel"/> - </layout_panel> - <layout_panel name="add_wearables_panel"> - <text name="add_to_outfit_label" value="Ajouter à la tenue :"/> <layout_stack name="filter_panels"> - <layout_panel label="Panneau de contrôle IM" name="filter_panel"> - <filter_editor label="Filtre" name="look_item_filter"/> + <layout_panel name="add_button_and_combobox"> + <button label="Ajouter plus..." name="show_add_wearables_btn"/> + </layout_panel> + <layout_panel name="filter_panel"> + <filter_editor label="Filtrer ce qui peut être porté dans l'inventaire" name="look_item_filter"/> </layout_panel> </layout_stack> - <panel label="add_wearables_button_bar" name="add_wearables_button_bar"> - <button label="D" name="folder_view_btn"/> - <button label="L" name="list_view_btn"/> - </panel> </layout_panel> + <layout_panel name="add_wearables_panel"/> </layout_stack> <panel name="save_revert_button_bar"> <button label="Enregistrer" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml index f4fa3a2838..22e6adfb89 100644 --- a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml @@ -7,8 +7,7 @@ <panel name="bottom_panel"> <button name="options_gear_btn" tool_tip="Afficher d'autres options"/> <dnd_button name="trash_btn" tool_tip="Supprimer l'objet sélectionné"/> - <button label="Enregistrer la tenue" name="make_outfit_btn" tool_tip="Enregistrer l'apparence comme tenue"/> + <button label="Enregistrer sous" name="save_btn"/> <button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/> - <button label="Modifier tenue" name="edit_current_outfit_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml index 9990c4612d..efb06cfce9 100644 --- a/indra/newview/skins/default/xui/fr/panel_places.xml +++ b/indra/newview/skins/default/xui/fr/panel_places.xml @@ -5,12 +5,12 @@ <filter_editor label="Filtrer les endroits" name="Filter"/> <panel name="button_panel"> <button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu'à la zone sélectionnée"/> - <button label="Carte" name="map_btn"/> + <button label="Carte" name="map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/> <button label="Éditer" name="edit_btn" tool_tip="Modifier les informations du repère"/> <button label="▼" name="overflow_btn" tool_tip="Afficher d'autres options"/> <button label="Enregistrer" name="save_btn"/> <button label="Annuler" name="cancel_btn"/> <button label="Fermer" name="close_btn"/> - <button label="Profil" name="profile_btn"/> + <button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l'endroit"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml index 6b8e68bd98..9af3a8a5d8 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -13,7 +13,7 @@ </text> <check_box label="Construire/Modifier" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/> <check_box label="Apparence" name="appearance_camera_movement" tool_tip="Utiliser le positionnement automatique de la caméra quand je suis en mode Édition"/> - <check_box label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/> + <check_box initial_value="true" label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/> <check_box label="Afficher en vue subjective" name="first_person_avatar_visible"/> <check_box label="Les touches de direction me font toujours me déplacer" name="arrow_keys_move_avatar_check"/> <check_box label="Appuyer deux fois et maintenir enfoncé pour courir" name="tap_tap_hold_to_run"/> diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml index dffb1d4238..3c56fa68e7 100644 --- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml @@ -21,8 +21,10 @@ <panel.string name="buycurrencylabel"> [AMT] L$ </panel.string> - <button label="" label_selected="" name="buycurrency" tool_tip="Mon solde"/> - <button label="Acheter L$" name="buyL" tool_tip="Cliquez pour acheter plus de L$"/> + <panel name="balance_bg"> + <text name="balance" tool_tip="Mon solde" value="20 L$"/> + <button label="ACHETER L$" name="buyL" tool_tip="Cliquer pour acheter plus de L$"/> + </panel> <text name="TimeText" tool_tip="Heure actuelle (Pacifique)"> 00h00 PST </text> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml index 893b64d4b2..ebee1af45b 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml @@ -2,12 +2,12 @@ <panel label="Choses" name="objects panel"> <panel label="" name="sidepanel__inventory_panel"> <panel name="button_panel"> - <button label="Profil" name="info_btn"/> - <button label="Partager" name="share_btn"/> - <button label="Acheter" name="shop_btn"/> - <button label="Porter" name="wear_btn"/> + <button label="Profil" name="info_btn" tool_tip="Afficher le profil de l'objet"/> + <button label="Partager" name="share_btn" tool_tip="Partager un article de l'inventaire"/> + <button label="Acheter" name="shop_btn" tool_tip="Accéder à la place du marché sur le Web"/> + <button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/> <button label="Jouer" name="play_btn"/> - <button label="Téléporter" name="teleport_btn"/> + <button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu'à la zone sélectionnée"/> </panel> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 15d5847c58..d95cfaedb4 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -107,7 +107,7 @@ Nom d'hôte non valide utilisé pour accéder au serveur. Vérifiez votre nom d'hôte de grille ou SLURL. </string> <string name="CertExpired"> - Il semble que le certificat renvoyé par la grille ait expiré. Vérifiez votre horloge système ou contactez l'administrateur de la grille. + Il semble que le certificat renvoyé par la grille ait expiré. Vérifiez votre horloge système ou contactez l'administrateur de la grille. </string> <string name="CertKeyUsage"> Impossible d'utiliser le certificat renvoyé par le serveur pour SSL. Contactez l'administrateur de la grille. @@ -116,7 +116,7 @@ Certificats trop nombreux dans la chaîne des certificats du serveur. Contactez l'administrateur de la grille. </string> <string name="CertInvalidSignature"> - Impossible de vérifier la signature de certificat renvoyée par le serveur de la grille. Contactez l'administrateur de la grille. + Impossible de vérifier la signature de certificat renvoyée par le serveur de la grille. Contactez l'administrateur de la grille. </string> <string name="LoginFailedNoNetwork"> Erreur réseau : impossible d'établir la connexion. Veuillez vérifier votre connexion réseau. @@ -753,6 +753,12 @@ <string name="land_type_unknown"> (inconnu) </string> + <string name="Estate / Full Region"> + Domaine / Région entière + </string> + <string name="Mainland / Full Region"> + Continent / Région entière + </string> <string name="all_files"> Tous fichiers </string> @@ -897,6 +903,9 @@ <string name="NewWearable"> Nouv. [WEARABLE_ITEM] </string> + <string name="CreateNewWearable"> + Créer [WEARABLE_TYPE] + </string> <string name="next"> Suivant </string> @@ -3550,6 +3559,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. <string name="session_initialization_timed_out_error"> Expiration du délai d'initialisation de la session </string> + <string name="voice_morphing_url"> + http://secondlife.com/landing/voicemorphing + </string> <string name="paid_you_ldollars"> [NAME] vous a payé [AMOUNT] L$ </string> @@ -3720,16 +3732,16 @@ de l'infraction signalée <string name="Male - Wow"> Homme - Ouah ! </string> - <string name="FeMale - Excuse me"> + <string name="Female - Excuse me"> Femme - Demander pardon </string> - <string name="FeMale - Get lost"> + <string name="Female - Get lost"> Femme - Dire d'aller au diable </string> - <string name="FeMale - Blow kiss"> + <string name="Female - Blow kiss"> Femme - Envoyer un baiser </string> - <string name="FeMale - Boo"> + <string name="Female - Boo"> Femme - Hou ! </string> <string name="Female - Bored"> @@ -3762,4 +3774,32 @@ de l'infraction signalée <string name="texture_load_dimensions_error"> Impossible de charger des images de taille supérieure à [WIDTH]*[HEIGHT] </string> + <string name="words_separator" value=","/> + <string name="server_is_down"> + Malgré nos efforts, une erreur inattendue s'est produite. + + Veuillez vous reporter à status.secondlifegrid.net afin de déterminer si un problème connu existe avec ce service. + Si le problème persiste, vérifiez la configuration de votre réseau et de votre pare-feu. + </string> + <string name="dateTimeWeekdaysNames"> + Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday + </string> + <string name="dateTimeWeekdaysShortNames"> + Sun:Mon:Tue:Wed:Thu:Fri:Sat + </string> + <string name="dateTimeMonthNames"> + January:February:March:April:May:June:July:August:September:October:November:December + </string> + <string name="dateTimeMonthShortNames"> + Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec + </string> + <string name="dateTimeDayFormat"> + [MDAY] + </string> + <string name="dateTimeAM"> + AM + </string> + <string name="dateTimePM"> + PM + </string> </strings> -- cgit v1.2.3 From 049d84838c2dbfc69c10d1b7d541b9811c8ae727 Mon Sep 17 00:00:00 2001 From: Eli Linden <eli@lindenlab.com> Date: Wed, 23 Jun 2010 14:11:11 -0700 Subject: ND-47489 WIP FR translation for set 12 --- .../skins/default/xui/fr/floater_voice_effect.xml | 29 ++++++++++++++++++++++ .../skins/default/xui/fr/menu_cof_attachment.xml | 4 +++ .../skins/default/xui/fr/menu_cof_body_part.xml | 5 ++++ .../skins/default/xui/fr/menu_cof_clothing.xml | 7 ++++++ .../newview/skins/default/xui/fr/menu_cof_gear.xml | 5 ++++ .../skins/default/xui/fr/menu_outfit_gear.xml | 26 +++++++++++++++++++ .../skins/default/xui/fr/menu_outfit_tab.xml | 9 +++++++ .../default/xui/fr/menu_wearable_list_item.xml | 13 ++++++++++ .../skins/default/xui/fr/panel_voice_effect.xml | 15 +++++++++++ 9 files changed, 113 insertions(+) create mode 100644 indra/newview/skins/default/xui/fr/floater_voice_effect.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_attachment.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_body_part.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_clothing.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_gear.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_outfit_gear.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_voice_effect.xml diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml new file mode 100644 index 0000000000..d7f0ff7f6b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater label="Endroits" name="voice_effects" title="APERÇU DES EFFETS DE VOIX"> + <string name="no_voice_effect"> + (Aucun effet de voix) + </string> + <string name="active_voice_effect"> + (Actif) + </string> + <string name="unsubscribed_voice_effect"> + (Pas d'abonnement) + </string> + <string name="new_voice_effect"> + (Nouveau !) + </string> + <text name="status_text"> + Pour obtenir un aperçu des effets, enregistrez un court extrait de votre voix en cliquant sur le bouton ci-dessous, puis cliquez sur l'une des entrées de la liste. Vous entendrez alors le son de votre voix transformée. + +Pour vous reconnecter au chat vocal près de vous, fermez cette fenêtre. + </text> + <button label="Enregistrer un extrait" name="record_btn" tool_tip="Enregistrez un extrait de votre voix."/> + <button label="Arrêter" name="record_stop_btn"/> + <text name="voice_morphing_link"> + [[URL] Obtenir un effet de voix] + </text> + <scroll_list name="voice_effect_list" tool_tip="Enregistrez un extrait de votre voix, puis cliquez sur un effet pour obtenir un aperçu."> + <scroll_list.columns label="Effet de voix" name="name"/> + <scroll_list.columns label="Date d'expiration" name="expires"/> + </scroll_list> +</floater> diff --git a/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml new file mode 100644 index 0000000000..a4ead48b6b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Attachment"> + <menu_item_call label="Détacher" name="detach"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml new file mode 100644 index 0000000000..4b6907fcc6 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Body"> + <menu_item_call label="Remplacer" name="replace"/> + <menu_item_call label="Modifier" name="edit"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml new file mode 100644 index 0000000000..c5641c756a --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Clothing"> + <menu_item_call label="Enlever" name="take_off"/> + <menu_item_call label="Couche supérieure" name="move_up"/> + <menu_item_call label="Couche inférieure" name="move_down"/> + <menu_item_call label="Modifier" name="edit"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_cof_gear.xml b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml new file mode 100644 index 0000000000..8276d57025 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear COF"> + <menu label="Nouveaux habits" name="COF.Gear.New_Clothes"/> + <menu label="Nouvelles parties du corps" name="COF.Geear.New_Body_Parts"/> +</menu> diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml new file mode 100644 index 0000000000..93730c6206 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear Outfit"> + <menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear"/> + <menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/> + <menu label="Nouveaux habits" name="New Clothes"> + <menu_item_call label="Nouvelle chemise" name="New Shirt"/> + <menu_item_call label="Nouveau pantalon" name="New Pants"/> + <menu_item_call label="Nouvelles chaussures" name="New Shoes"/> + <menu_item_call label="Nouvelles chaussettes" name="New Socks"/> + <menu_item_call label="Nouvelle veste" name="New Jacket"/> + <menu_item_call label="Nouvelle jupe" name="New Skirt"/> + <menu_item_call label="Nouveaux gants" name="New Gloves"/> + <menu_item_call label="Nouveau débardeur" name="New Undershirt"/> + <menu_item_call label="Nouveau caleçon" name="New Underpants"/> + <menu_item_call label="Nouvel alpha" name="New Alpha"/> + <menu_item_call label="Nouveau tatouage" name="New Tattoo"/> + </menu> + <menu label="Nouvelles parties du corps" name="New Body Parts"> + <menu_item_call label="Nouvelle silhouette" name="New Shape"/> + <menu_item_call label="Nouvelle peau" name="New Skin"/> + <menu_item_call label="Nouveaux cheveux" name="New Hair"/> + <menu_item_call label="Nouveaux yeux" name="New Eyes"/> + </menu> + <menu_item_call label="Renommer la tenue" name="rename"/> + <menu_item_call label="Supprimer la tenue" name="delete_outfit"/> +</menu> diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml new file mode 100644 index 0000000000..a68715108f --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Outfit"> + <menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear_replace"/> + <menu_item_call label="Porter - Ajouter à la tenue actuelle" name="wear_add"/> + <menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/> + <menu_item_call label="Modifier la tenue" name="edit"/> + <menu_item_call label="Renommer" name="rename"/> + <menu_item_call label="Supprimer la tenue" name="delete"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml new file mode 100644 index 0000000000..207ba79148 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Outfit Wearable Context Menu"> + <menu_item_call label="Porter" name="wear"/> + <menu_item_call label="Ajouter" name="wear_add"/> + <menu_item_call label="Enlever / Détacher" name="take_off_or_detach"/> + <menu_item_call label="Détacher" name="detach"/> + <context_menu label="Attacher à ▶" name="wearable_attach_to"/> + <context_menu label="Attacher au HUD ▶" name="wearable_attach_to_hud"/> + <menu_item_call label="Enlever" name="take_off"/> + <menu_item_call label="Modifier" name="edit"/> + <menu_item_call label="Profil de l'objet" name="object_profile"/> + <menu_item_call label="Afficher l'original" name="show_original"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/fr/panel_voice_effect.xml b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml new file mode 100644 index 0000000000..01734295f2 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_voice_effect"> + <string name="no_voice_effect"> + Aucun effet de voix + </string> + <string name="preview_voice_effects"> + Aperçu des effets de voix ▶ + </string> + <string name="get_voice_effects"> + Obtenir un effet de voix ▶ + </string> + <combo_box name="voice_effect" tool_tip="Sélectionnez un effet pour modifier le son de votre voix."> + <combo_box.item label="Aucun effet de voix" name="no_voice_effect"/> + </combo_box> +</panel> -- cgit v1.2.3 From c964abf525f81bc1263eaf3a447b40c63d08c9ac Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" <nyx@lindenlab.com> Date: Wed, 23 Jun 2010 18:35:29 -0400 Subject: EXT-7988 FIX wrong highlight color for worn items green is too green. EmphasisColor is the new green. Reviewed by Erica --- indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml index 49c2abe1a5..50be0ac1a1 100644 --- a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml @@ -15,5 +15,5 @@ <worn_style font="SansSerifSmall" font.style="BOLD" - color="green" /> + color="EmphasisColor" /> </inventory_list_item> -- cgit v1.2.3 From 9aad53a4370b7647e4f907be7c3dc908906491b9 Mon Sep 17 00:00:00 2001 From: Andrew Dyukov <adyukov@productengine.com> Date: Thu, 24 Jun 2010 01:52:26 +0300 Subject: EXT-7158 FIXED Implemented showing of full outfit content if its name or any item(s) inside it match current filter. - Added availability to force showing unmatched items to LLFlatListViewEx - Applied it to wearable items lists in LLOutfitsList - Changed condition for outfit accordion tab showing (because now all items are visible, so checking their number doesn't help). Used here check for a flag added in this fix, which tells whether last applied filter found any matches in the list. Reviewed by Neal Orman at https://codereview.productengine.com/secondlife/r/648/ --HG-- branch : product-engine --- indra/llui/llflatlistview.cpp | 21 ++++++++++++++++++++- indra/llui/llflatlistview.h | 17 +++++++++++++++++ indra/newview/lloutfitslist.cpp | 7 ++++++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index c7463e581c..f22b49f30f 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -1226,6 +1226,8 @@ LLFlatListViewEx::LLFlatListViewEx(const Params& p) : LLFlatListView(p) , mNoFilteredItemsMsg(p.no_filtered_items_msg) , mNoItemsMsg(p.no_items_msg) +, mForceShowingUnmatchedItems(false) +, mLastFilterSucceded(false) { } @@ -1250,6 +1252,16 @@ void LLFlatListViewEx::updateNoItemsMessage(const std::string& filter_string) } +bool LLFlatListViewEx::getForceShowingUnmatchedItems() +{ + return mForceShowingUnmatchedItems; +} + +void LLFlatListViewEx::setForceShowingUnmatchedItems(bool show) +{ + mForceShowingUnmatchedItems = show; +} + void LLFlatListViewEx::setFilterSubString(const std::string& filter_str) { if (0 != LLStringUtil::compareInsensitive(filter_str, mFilterSubString)) @@ -1273,6 +1285,7 @@ void LLFlatListViewEx::filterItems() item_panel_list_t items; getItems(items); + mLastFilterSucceded = false; for (item_panel_list_t::iterator iter = items.begin(), iter_end = items.end(); @@ -1283,13 +1296,14 @@ void LLFlatListViewEx::filterItems() // i.e. we don't hide items that don't support 'match_filter' action, separators etc. if (0 == pItem->notify(action)) { + mLastFilterSucceded = true; pItem->setVisible(true); } else { // TODO: implement (re)storing of current selection. selectItem(pItem, false); - pItem->setVisible(false); + pItem->setVisible(mForceShowingUnmatchedItems); } } @@ -1297,4 +1311,9 @@ void LLFlatListViewEx::filterItems() notifyParentItemsRectChanged(); } +bool LLFlatListViewEx::wasLasFilterSuccessfull() +{ + return mLastFilterSucceded; +} + //EOF diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 0820a7ab67..caeddfc179 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -470,6 +470,10 @@ public: void setNoItemsMsg(const std::string& msg) { mNoItemsMsg = msg; } void setNoFilteredItemsMsg(const std::string& msg) { mNoFilteredItemsMsg = msg; } + bool getForceShowingUnmatchedItems(); + + void setForceShowingUnmatchedItems(bool show); + /** * Sets up new filter string and filters the list. */ @@ -481,6 +485,11 @@ public: */ void filterItems(); + /** + * Returns true if last call of filterItems() found at least one matching item + */ + bool wasLasFilterSuccessfull(); + protected: LLFlatListViewEx(const Params& p); @@ -496,6 +505,14 @@ private: std::string mNoFilteredItemsMsg; std::string mNoItemsMsg; std::string mFilterSubString; + /** + * Show list items that don't match current filter + */ + bool mForceShowingUnmatchedItems; + /** + * True if last call of filterItems() found at least one matching item + */ + bool mLastFilterSucceded; }; #endif diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index b8489d450b..67442dd573 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -439,6 +439,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) // Setting callback to reset items selection inside outfit on accordion collapsing and expanding (EXT-7875) tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::resetItemSelection, this, list, cat_id)); + // force showing list items that don't match current filter(EXT-7158) + list->setForceShowingUnmatchedItems(true); + // Setting list commit callback to monitor currently selected wearable item. list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1)); @@ -850,6 +853,8 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring) restoreOutfitSelection(tab, iter->first); } } + + mAccordion->arrange(); } void LLOutfitsList::applyFilterToTab( @@ -873,7 +878,7 @@ void LLOutfitsList::applyFilterToTab( { // hide tab if its title doesn't pass filter // and it has no visible items - tab->setVisible(list->size() > 0); + tab->setVisible(list->wasLasFilterSuccessfull()); // remove title highlighting because it might // have been previously highlighted by less restrictive filter -- cgit v1.2.3 From be059c2111d1eb880a8b0e5565690ff528d30587 Mon Sep 17 00:00:00 2001 From: "jonathanwolk@149.2.168.192.in-addr.arpa" <jonathanwolk@149.2.168.192.in-addr.arpa> Date: Wed, 23 Jun 2010 16:14:22 -0700 Subject: Fix for EXT-6954 'rendering artifact when editing an object.' Reviewed by qarl --- indra/newview/llmanip.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index 957e88960d..a43118755e 100644 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -435,12 +435,12 @@ void LLManip::renderXYZ(const LLVector3 &vec) S32 vertical_offset = window_center_y - VERTICAL_OFFSET; - glPushMatrix(); + gGL.pushMatrix(); { LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square"); gViewerWindow->setup2DRender(); const LLVector2& display_scale = gViewerWindow->getDisplayScale(); - glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f); + gGL.scalef(display_scale.mV[VX], display_scale.mV[VY], 1.f); gGL.color4f(0.f, 0.f, 0.f, 0.7f); imagep->draw( @@ -450,7 +450,7 @@ void LLManip::renderXYZ(const LLVector3 &vec) PAD * 2 + 10, LLColor4(0.f, 0.f, 0.f, 0.7f) ); } - glPopMatrix(); + gGL.popMatrix(); gViewerWindow->setup3DRender(); -- cgit v1.2.3 From 0aabcc81346390fe312bf03355744a6e13ab0927 Mon Sep 17 00:00:00 2001 From: Richard Nelson <none@none> Date: Wed, 23 Jun 2010 16:50:06 -0700 Subject: EXT-7767 FIX Outfit editor doesn't appear to have a default camera view --- indra/newview/llagentcamera.cpp | 74 ++++++++++++++++++++++------------------- indra/newview/llagentcamera.h | 3 +- indra/newview/llmorphview.cpp | 2 -- indra/newview/llmorphview.h | 7 ++-- indra/newview/llvoavatar.cpp | 2 +- 5 files changed, 43 insertions(+), 45 deletions(-) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 9cf0a659c1..70f9fa03e4 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -156,7 +156,6 @@ LLAgentCamera::LLAgentCamera() : mFocusObjectOffset(), mFocusDotRadius( 0.1f ), // meters mTrackFocusObject(TRUE), - mUIOffset(0.f), mAtKey(0), // Either 1, 0, or -1... indicates that movement-key is pressed mWalkKey(0), // like AtKey, but causes less forward thrust @@ -1407,13 +1406,6 @@ void LLAgentCamera::updateCamera() // llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl; - F32 ui_offset = 0.f; - if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) - { - ui_offset = calcCustomizeAvatarUIOffset( camera_pos_global ); - } - - LLVector3 focus_agent = gAgent.getPosAgentFromGlobal(mFocusGlobal); mCameraPositionAgent = gAgent.getPosAgentFromGlobal(camera_pos_global); @@ -1424,9 +1416,6 @@ void LLAgentCamera::updateCamera() LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent); //LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent); //end Ventrella - - //RN: translate UI offset after camera is oriented properly - LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset); // Change FOV LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor)); @@ -1531,18 +1520,6 @@ void LLAgentCamera::validateFocusObject() } } -//----------------------------------------------------------------------------- -// calcCustomizeAvatarUIOffset() -//----------------------------------------------------------------------------- -F32 LLAgentCamera::calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global) -{ - F32 ui_offset = 0.f; - - F32 range = (F32)dist_vec(camera_pos_global, getFocusGlobal()); - mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f)); - return mUIOffset * range; -} - //----------------------------------------------------------------------------- // calcFocusPositionTargetGlobal() //----------------------------------------------------------------------------- @@ -2332,6 +2309,18 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came LLVOAvatarSelf::onCustomizeStart(); } + + // default focus point for customize avatar + LLVector3 focus_target; + if (isAgentAvatarValid()) + { + focus_target = gAgentAvatarp->mHeadp->getWorldPosition(); + } + else + { + focus_target = gAgent.getPositionAgent(); + } + if (isAgentAvatarValid()) { if(avatar_animate) @@ -2339,7 +2328,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came // slamming the avatar's axis to the camera so that when the rotation // completes it correctly points to the front of the avatar // Remove any pitch or rotation from the avatar - LLVector3 at = LLViewerCamera::getInstance()->getAtAxis(); + LLVector3 at = gAgent.getAtAxis(); at.mV[VZ] = 0.f; at.normalize(); gAgent.resetAxes(at); @@ -2351,17 +2340,25 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came if (turn_motion) { - mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP; + setAnimationDuration(turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP); } else { - mAnimationDuration = gSavedSettings.getF32("ZoomTime"); + setAnimationDuration(gSavedSettings.getF32("ZoomTime")); } } - // this is what sets the avatar as the mFocusTargetGlobal - setFocusGlobal(LLVector3d::zero); + LLVector3 agent_at = gAgent.getAtAxis(); + agent_at.mV[VZ] = 0.f; + agent_at.normalize(); + + LLVector3d camera_offset(agent_at * -1.0); + // push camera up and out from avatar + camera_offset.mdV[VZ] = 0.1f; + camera_offset *= 3.5f; + LLVector3d focus_target_global = gAgent.getPosGlobalFromAgent(focus_target); + setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID()); gAgentAvatarp->updateMeshTextures(); } @@ -2391,6 +2388,19 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset) // Focus point management // +void LLAgentCamera::setAnimationDuration(F32 duration) +{ + if (mCameraAnimating) + { + F32 animation_left = llmax(0.f, mAnimationDuration - mAnimationTimer.getElapsedTimeF32()); + mAnimationDuration = llmax(duration, animation_left); + } + else + { + mAnimationDuration = duration; + } +} + //----------------------------------------------------------------------------- // startCameraAnimation() //----------------------------------------------------------------------------- @@ -2398,9 +2408,9 @@ void LLAgentCamera::startCameraAnimation() { mAnimationCameraStartGlobal = getCameraPositionGlobal(); mAnimationFocusStartGlobal = mFocusGlobal; + setAnimationDuration(gSavedSettings.getF32("ZoomTime")); mAnimationTimer.reset(); mCameraAnimating = TRUE; - mAnimationDuration = gSavedSettings.getF32("ZoomTime"); } //----------------------------------------------------------------------------- @@ -2546,12 +2556,6 @@ void LLAgentCamera::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, con if (focus_delta_squared > ANIM_EPSILON_SQUARED) { startCameraAnimation(); - - if (CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode) - { - // Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize. - mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal )); - } } //LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) ); diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 7afb5c0ed9..aba8b0b67f 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -184,7 +184,7 @@ private: public: void setCameraAnimating(BOOL b) { mCameraAnimating = b; } BOOL getCameraAnimating() { return mCameraAnimating; } - void setAnimationDuration(F32 seconds) { mAnimationDuration = seconds; } + void setAnimationDuration(F32 seconds); void startCameraAnimation(); void stopCameraAnimation(); private: @@ -225,7 +225,6 @@ private: LLVector3 mFocusObjectOffset; F32 mFocusDotRadius; // Meters BOOL mTrackFocusObject; - F32 mUIOffset; //-------------------------------------------------------------------- // Lookat / Pointat diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp index 4c28e98e62..61fc932bab 100644 --- a/indra/newview/llmorphview.cpp +++ b/indra/newview/llmorphview.cpp @@ -75,7 +75,6 @@ LLMorphView::LLMorphView(const LLMorphView::Params& p) mOldCameraNearClip( 0.f ), mCameraPitch( 0.f ), mCameraYaw( 0.f ), - mCameraDist( -1.f ), mCameraDrivenByKeys( FALSE ) {} @@ -86,7 +85,6 @@ void LLMorphView::initialize() { mCameraPitch = 0.f; mCameraYaw = 0.f; - mCameraDist = -1.f; if (!isAgentAvatarValid() || gAgentAvatarp->isDead()) { diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h index 493f906c6b..f0f04dfda3 100644 --- a/indra/newview/llmorphview.h +++ b/indra/newview/llmorphview.h @@ -53,7 +53,6 @@ public: }; LLMorphView(const LLMorphView::Params&); - void initialize(); void shutdown(); // inherited methods @@ -64,12 +63,13 @@ public: void setCameraOffset(const LLVector3d& camera_offset) {mCameraOffset = camera_offset;} void setCameraTargetOffset(const LLVector3d& camera_target_offset) {mCameraTargetOffset = camera_target_offset;} - void setCameraDistToDefault() { mCameraDist = -1.f; } void updateCamera(); void setCameraDrivenByKeys( BOOL b ); protected: + void initialize(); + LLJoint* mCameraTargetJoint; LLVector3d mCameraOffset; LLVector3d mCameraTargetOffset; @@ -82,9 +82,6 @@ protected: F32 mCameraPitch; F32 mCameraYaw; - // camera zoom - F32 mCameraDist; - BOOL mCameraDrivenByKeys; }; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4ef166fb71..f2f91dcc4a 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3201,7 +3201,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE; } - if (!visible) + if (!visible && !isSelf()) { updateMotions(LLCharacter::HIDDEN_UPDATE); return FALSE; -- cgit v1.2.3 From bb083dfca471edde7d44f161be2aabca92e72d02 Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" <nyx@lindenlab.com> Date: Wed, 23 Jun 2010 20:53:24 -0400 Subject: EXT-7958 FIX fixed shop button in the appearance sidepanel updated icon, and fixed XUI so it displays properly. Code reviewed by Monroe --- indra/newview/llpaneloutfitedit.cpp | 3 ++- indra/newview/skins/default/textures/icons/Shop.png | Bin 647 -> 3104 bytes .../skins/default/xui/en/panel_outfit_edit.xml | 18 +++++++++++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index aac020087b..ea7d233333 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -328,7 +328,8 @@ BOOL LLPanelOutfitEdit::postBuild() childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL); childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL); childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL); - childSetCommitCallback("shop_btn", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL); + childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL); + childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL); mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list"); mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this)); diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png index d7e0001dc6..9d091fed44 100644 Binary files a/indra/newview/skins/default/textures/icons/Shop.png and b/indra/newview/skins/default/textures/icons/Shop.png differ 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 d6549adfef..4abd7dceac 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -391,12 +391,12 @@ It is calculated as border_size + 2*UIResizeBarOverlap follows="bottom|right" height="25" image_hover_unselected="Toolbar_Middle_Over" - image_overlay="AddItem_Off" + image_overlay="Shop" image_selected="Toolbar_Middle_Selected" image_unselected="Toolbar_Middle_Off" layout="topleft" left_pad="0" - name="shop_btn" + name="shop_btn_1" top="1" width="31" /> </panel> @@ -472,8 +472,20 @@ It is calculated as border_size + 2*UIResizeBarOverlap layout="topleft" left_pad="1" name="dummy_right_icon" - width="184" > + width="153" > </icon> + <button + follows="bottom|right" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="Shop" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" + layout="topleft" + left_pad="0" + name="shop_btn_2" + top="1" + width="31" /> </panel> <!-- SAVE AND REVERT BUTTONS --> -- cgit v1.2.3 From 6dd35018d2f7aa84973b8e7ff743e8de6454f01c Mon Sep 17 00:00:00 2001 From: Richard Nelson <none@none> Date: Wed, 23 Jun 2010 18:32:31 -0700 Subject: EXT-7767 FIX Outfit editor doesn't appear to have a default camera view added some comments and cleaned up code based on review --- indra/newview/llagentcamera.cpp | 7 ++++--- indra/newview/llagentcamera.h | 1 - indra/newview/llpaneleditwearable.cpp | 1 - indra/newview/lltoolfocus.cpp | 1 - indra/newview/llvoavatar.cpp | 3 +++ 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 70f9fa03e4..e1a0162441 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -95,6 +95,8 @@ const F32 OBJECT_MIN_ZOOM = 0.02f; const F32 APPEARANCE_MIN_ZOOM = 0.39f; const F32 APPEARANCE_MAX_ZOOM = 8.f; +const F32 CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST = 3.5f; + const F32 GROUND_TO_AIR_CAMERA_TRANSITION_TIME = 0.5f; const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f; @@ -2325,8 +2327,6 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came { if(avatar_animate) { - // slamming the avatar's axis to the camera so that when the rotation - // completes it correctly points to the front of the avatar // Remove any pitch or rotation from the avatar LLVector3 at = gAgent.getAtAxis(); at.mV[VZ] = 0.f; @@ -2356,7 +2356,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came LLVector3d camera_offset(agent_at * -1.0); // push camera up and out from avatar camera_offset.mdV[VZ] = 0.1f; - camera_offset *= 3.5f; + camera_offset *= CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST; LLVector3d focus_target_global = gAgent.getPosGlobalFromAgent(focus_target); setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID()); @@ -2392,6 +2392,7 @@ void LLAgentCamera::setAnimationDuration(F32 duration) { if (mCameraAnimating) { + // do not cut any existing camera animation short F32 animation_left = llmax(0.f, mAnimationDuration - mAnimationTimer.getElapsedTimeF32()); mAnimationDuration = llmax(duration, animation_left); } diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index aba8b0b67f..3b8f88733a 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -137,7 +137,6 @@ public: F32 getCameraMinOffGround(); // Minimum height off ground for this mode, meters void setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; } BOOL calcCameraMinDistance(F32 &obj_min_distance); - F32 calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global); F32 getCurrentCameraBuildOffset() { return (F32)mCameraFocusOffset.length(); } void clearCameraLag() { mCameraLag.clearVec(); } private: diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 71edd39348..ae54909945 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -1127,7 +1127,6 @@ void LLPanelEditWearable::changeCamera(U8 subpart) } // Update the camera - gMorphView->setCameraDistToDefault(); gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) ); gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset ); gMorphView->setCameraOffset( subpart_entry->mCameraOffset ); diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index 032714cabf..b9875f465a 100644 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -236,7 +236,6 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info) gAgentCamera.setFocusOnAvatar(FALSE, FALSE); LLVector3d cam_pos = gAgentCamera.getCameraPositionGlobal(); - cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgentCamera.calcCustomizeAvatarUIOffset( cam_pos )); gAgentCamera.setCameraPosAndFocusGlobal( cam_pos, pick_info.mPosGlobal, pick_info.mObjectID); } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index f2f91dcc4a..3dce4ce0bc 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3201,6 +3201,9 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE; } + // don't early out for your own avatar, as we rely on your animations playing reliably + // for example, the "turn around" animation when entering customize avatar needs to trigger + // even when your avatar is offscreen if (!visible && !isSelf()) { updateMotions(LLCharacter::HIDDEN_UPDATE); -- cgit v1.2.3 From 32283ca3397965ed28ad23492db362355a3dbef5 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Thu, 24 Jun 2010 11:53:26 +0300 Subject: EXT-7777 FIXED reverted changes to show loading indicator for "Wear/Attach" action. Because it was too hard to fix EXT-7949 having so extremly lack of time. Proper fix for EXT-7949 requires changes in different places of the code calling add/removeCOFItemLink(). Reviewed by Neal Orman at https://codereview.productengine.com/secondlife/r/644/ --HG-- branch : product-engine --- indra/newview/llappearancemgr.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 597076503d..ce022ac840 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -935,7 +935,9 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up // That means subscribers will be notified that loading is done after first item in a batch is worn. // (loading indicator disappears for example before all selected items are worn) // Have not fix this issue for 2.1 because of stability reason. EXT-7777. - gAgentWearables.notifyLoadingStarted(); + + // Disabled for now because it is *not* acceptable to call updateAppearanceFromCOF() multiple times +// gAgentWearables.notifyLoadingStarted(); LLViewerInventoryItem* item_to_wear = gInventory.getItem(item_id_to_wear); if (!item_to_wear) return false; @@ -2540,7 +2542,8 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id) { // we have to pass do_update = true to call LLAppearanceMgr::updateAppearanceFromCOF. // it will trigger gAgentWariables.notifyLoadingFinished() - LLAppearanceMgr::addCOFItemLink(item_id, true); // Add COF link for item. + // But it is not acceptable solution. See EXT-7777 + LLAppearanceMgr::addCOFItemLink(item_id, false); // Add COF link for item. } else { @@ -2570,7 +2573,7 @@ void LLAppearanceMgr::linkRegisteredAttachments() ++it) { LLUUID item_id = *it; - addCOFItemLink(item_id, true); + addCOFItemLink(item_id, false); } mRegisteredAttachments.clear(); } -- cgit v1.2.3 From a3d8f6ee4549d301fab51a08fbac7a9f48e22be2 Mon Sep 17 00:00:00 2001 From: Mike Antipov <mantipov@productengine.com> Date: Thu, 24 Jun 2010 12:43:06 +0300 Subject: Reverted changes in <string> reformatting made in f7ac28b29eec. this is necessary to avoid new translate cycle for already translated strings in format <string name=""> VALUE <string/> --HG-- branch : product-engine --- .../skins/default/xui/en/panel_edit_wearable.xml | 150 ++++++++++++--------- 1 file changed, 90 insertions(+), 60 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 06255353a7..fc1caca9e9 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -12,95 +12,125 @@ top="0" width="333"> <string - name="edit_shape_title" - value="Editing Shape" /> + name="edit_shape_title"> + Editing Shape + </string> <string - name="edit_skin_title" - value="Editing Skin" /> + name="edit_skin_title"> + Editing Skin + </string> <string - name="edit_hair_title" - value="Editing Hair" /> + name="edit_hair_title"> + Editing Hair + </string> <string - name="edit_eyes_title" - value="Editing Eyes" /> + name="edit_eyes_title"> + Editing Eyes + </string> <string - name="edit_shirt_title" - value="Editing Shirt" /> + name="edit_shirt_title"> + Editing Shirt + </string> <string - name="edit_pants_title" - value="Editing Pants" /> + name="edit_pants_title"> + Editing Pants + </string> <string - name="edit_shoes_title" - value="Editing Shoes" /> + name="edit_shoes_title"> + Editing Shoes + </string> <string - name="edit_socks_title" - value="Editing Socks" /> + name="edit_socks_title"> + Editing Socks + </string> <string - name="edit_jacket_title" - value="Editing Jacket" /> + name="edit_jacket_title"> + Editing Jacket + </string> <string - name="edit_skirt_title" - value="Editing Skirt" /> + name="edit_skirt_title"> + Editing Skirt + </string> <string - name="edit_gloves_title" - value="Editing Gloves" /> + name="edit_gloves_title"> + Editing Gloves + </string> <string - name="edit_undershirt_title" - value="Editing Undershirt" /> + name="edit_undershirt_title"> + Editing Undershirt + </string> <string - name="edit_underpants_title" - value="Editing Underpants" /> + name="edit_underpants_title"> + Editing Underpants + </string> <string - name="edit_alpha_title" - value="Editing Alpha Mask" /> + name="edit_alpha_title"> + Editing Alpha Mask + </string> <string - name="edit_tattoo_title" - value="Editing Tattoo" /> + name="edit_tattoo_title"> + Editing Tattoo + </string> <string - name="shape_desc_text" - value="Shape:" /> + name="shape_desc_text"> + Shape: + </string> <string - name="skin_desc_text" - value="Skin:" /> + name="skin_desc_text"> + Skin: + </string> <string - name="hair_desc_text" - value="Hair:" /> + name="hair_desc_text"> + Hair: + </string> <string - name="eyes_desc_text" - value="Eyes:" /> + name="eyes_desc_text"> + Eyes: + </string> <string - name="shirt_desc_text" - value="Shirt:" /> + name="shirt_desc_text"> + Shirt: + </string> <string - name="pants_desc_text" - value="Pants:" /> + name="pants_desc_text"> + Pants: + </string> <string - name="shoes_desc_text" - value="Shoes:" /> + name="shoes_desc_text"> + Shoes: + </string> <string - name="socks_desc_text" - value="Socks:" /> + name="socks_desc_text"> + Socks: + </string> <string - name="jacket_desc_text" - value="Jacket:" /> + name="jacket_desc_text"> + Jacket: + </string> <string - name="skirt_desc_text" - value="Skirt:" /> + name="skirt_desc_text"> + Skirt: + </string> <string - name="gloves_desc_text" - value="Gloves:" /> + name="gloves_desc_text"> + Gloves: + </string> <string - name="undershirt_desc_text" - value="Undershirt:" /> + name="undershirt_desc_text"> + Undershirt: + </string> <string - name="underpants_desc_text" - value="Underpants:" /> + name="underpants_desc_text"> + Underpants: + </string> <string - name="alpha_desc_text" - value="Alpha Mask:" /> + name="alpha_desc_text"> + Alpha Mask: + </string> <string - name="tattoo_desc_text" - value="Tattoo:" /> + name="tattoo_desc_text"> + Tattoo: + </string> <button follows="top|left" height="24" -- cgit v1.2.3 From 8f892d0f36fda170a5cecf0aea89887d6d0e45ef Mon Sep 17 00:00:00 2001 From: Tofu Linden <tofu.linden@lindenlab.com> Date: Thu, 24 Jun 2010 13:04:20 +0100 Subject: SNOW-611 / SNOW-505 FIXED boost::coroutines headers broken for newish GCC versions. --- install.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.xml b/install.xml index f69d781c67..39806a664d 100644 --- a/install.xml +++ b/install.xml @@ -200,9 +200,9 @@ <key>linux</key> <map> <key>md5sum</key> - <string>d58ac1a8396ac983b67cc3e3541457e3</string> + <string>4db3d74e40d149eeec06f4d97a609bb1</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100222a.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100624.tar.bz2</uri> </map> <key>linux64</key> <map> -- cgit v1.2.3