diff --git a/indra/newview/lffloaterinvpanel.cpp b/indra/newview/lffloaterinvpanel.cpp index 5fde1fa10..2578c90a2 100644 --- a/indra/newview/lffloaterinvpanel.cpp +++ b/indra/newview/lffloaterinvpanel.cpp @@ -32,7 +32,7 @@ LFFloaterInvPanel::LFFloaterInvPanel(const LLUUID& cat_id, LLInventoryModel* mod mCommitCallbackRegistrar.add("InvPanel.Search", boost::bind(&LLInventoryPanel::setFilterSubString, boost::ref(mPanel), _2)); LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inv_panel.xml"); LLPanel* panel = getChild("placeholder_panel"); - mPanel = new LLInventoryPanel("inv_panel", LLInventoryPanel::DEFAULT_SORT_ORDER, cat_id.asString(), panel->getRect(), model, true); + mPanel = new LLInventoryPanel("inv_panel", LLInventoryPanel::DEFAULT_SORT_ORDER, LLSD().with("id", cat_id), panel->getRect(), model, true); mPanel->postBuild(); mPanel->setFollows(FOLLOWS_ALL); mPanel->setEnabled(true); diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index d0399512b..f3e5698bd 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -131,7 +131,7 @@ void LLInvPanelComplObserver::done() LLInventoryPanel::LLInventoryPanel(const std::string& name, const std::string& sort_order_setting, - const std::string& start_folder, + const LLSD& start_folder, const LLRect& rect, LLInventoryModel* inventory, BOOL allow_multi_select, @@ -159,32 +159,12 @@ LLInventoryPanel::LLInventoryPanel(const std::string& name, setBackgroundOpaque(TRUE); } -LLUUID getStartFolder(const std::string& start_folder) -{ - if ("LIBRARY" == start_folder) - return gInventory.getLibraryRootFolderID(); - const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(start_folder); - - return (preferred_type != LLFolderType::FT_NONE) - ? gInventory.findCategoryUUIDForType(preferred_type, false) - : gInventory.getCategory(static_cast(start_folder)) ? static_cast(start_folder) // Singu Note: if start folder is an id of a folder, use it - : LLUUID::null; -} - void LLInventoryPanel::buildFolderView() { // Determine the root folder in case specified, and // build the views starting with that folder. - - //std::string start_folder_name(params.start_folder()); - - LLUUID root_id = getStartFolder(mStartFolder); - - if ((root_id == LLUUID::null) && !mStartFolder.empty()) - { - LL_WARNS() << "No category found that matches start_folder: " << mStartFolder << LL_ENDL; - root_id = LLUUID::generateNewID(); - } + LLUUID root_id = getRootFolderID(); + mStartFolder["id"] = root_id; // Cache this, so we don't waste time on future getRootFolderID calls LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY, (mUseMarketplaceFolders/*mParams.use_marketplace_folders*/ ? LLAssetType::AT_MARKETPLACE_FOLDER : LLAssetType::AT_CATEGORY), @@ -343,8 +323,14 @@ LLView* LLInventoryPanel::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac std::string sort_order(INHERIT_SORT_ORDER); node->getAttributeString("sort_order", sort_order); - std::string start_folder; - node->getAttributeString("start_folder", start_folder); + LLSD start_folder; + std::string start; + if (node->getAttributeString("start_folder.name", start)) + start_folder["name"] = start; + if (node->getAttributeString("start_folder.id", start)) + start_folder["id"] = LLUUID(start); + if (node->getAttributeString("start_folder.type", start)) + start_folder["type"] = start; if(name == "Recent Items") panel = new LLInventoryRecentItemsPanel(name, sort_order, start_folder, @@ -707,11 +693,32 @@ const LLUUID LLInventoryPanel::getRootFolderID() const } else { - root_id = getStartFolder(mStartFolder); - if (root_id.isNull()) + if (mStartFolder.has("id")) { - LL_WARNS() << "Could not find folder of type " << mStartFolder << LL_ENDL; - root_id.generateNewID(); + root_id = mStartFolder["id"]; + } + else + { + LLStringExplicit label(mStartFolder["name"]); + const LLFolderType::EType preferred_type = mStartFolder.has("type") + ? LLFolderType::lookup(mStartFolder["type"]) + : LLViewerFolderType::lookupTypeFromNewCategoryName(label); + + if ("LIBRARY" == label) + { + root_id = gInventory.getLibraryRootFolderID(); + } + else if (preferred_type != LLFolderType::FT_NONE) + { + //setLabel(label); + + root_id = gInventory.findCategoryUUIDForType(preferred_type, false); + if (root_id.isNull()) + { + LL_WARNS() << "Could not find folder for " << mStartFolder << LL_ENDL; + root_id.generateNewID(); + } + } } } return root_id; diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 20646fff7..a318a6a27 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -95,7 +95,7 @@ protected: friend class LFFloaterInvPanel; LLInventoryPanel(const std::string& name, const std::string& sort_order_setting, - const std::string& start_folder, + const LLSD& start_folder, const LLRect& rect, LLInventoryModel* inventory, BOOL allow_multi_select, @@ -236,7 +236,7 @@ public: void requestSort(); private: - const std::string mStartFolder; + LLSD mStartFolder; bool mShowRootFolder; bool mAllowDropOnRoot; bool mAllowWear; diff --git a/indra/newview/skins/default/xui/en-us/floater_inventory_favs.xml b/indra/newview/skins/default/xui/en-us/floater_inventory_favs.xml index 202e5cc98..3de83ba05 100644 --- a/indra/newview/skins/default/xui/en-us/floater_inventory_favs.xml +++ b/indra/newview/skins/default/xui/en-us/floater_inventory_favs.xml @@ -1,4 +1,4 @@ - + diff --git a/indra/newview/skins/default/xui/en-us/floater_my_outfits.xml b/indra/newview/skins/default/xui/en-us/floater_my_outfits.xml index 7b230a774..fc0751ff2 100644 --- a/indra/newview/skins/default/xui/en-us/floater_my_outfits.xml +++ b/indra/newview/skins/default/xui/en-us/floater_my_outfits.xml @@ -1,4 +1,4 @@ - + diff --git a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_inventory.xml b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_inventory.xml index a3ec9fd87..8d5fa265e 100644 --- a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_inventory.xml +++ b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_inventory.xml @@ -9,7 +9,7 @@ height="370" top="16" left="0" - start_folder="Marketplace listings" + start_folder.name="Marketplace listings" show_empty_message="true" show_root_folder="false" use_marketplace_folders="true" diff --git a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_listed.xml b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_listed.xml index 8620c781b..44f507ad8 100644 --- a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_listed.xml +++ b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_listed.xml @@ -8,7 +8,7 @@ width="308" height="370" left_delta="0" - start_folder="Marketplace listings" + start_folder.name="Marketplace listings" show_empty_message="true" show_root_folder="false" use_marketplace_folders="true" diff --git a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unassociated.xml b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unassociated.xml index 5d3d19dee..871e8773c 100644 --- a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unassociated.xml +++ b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unassociated.xml @@ -8,7 +8,7 @@ width="308" height="370" left_delta="0" - start_folder="Marketplace listings" + start_folder.name="Marketplace listings" show_empty_message="true" show_root_folder="false" use_marketplace_folders="true" diff --git a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unlisted.xml b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unlisted.xml index a5f136c8d..98bef04aa 100644 --- a/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unlisted.xml +++ b/indra/newview/skins/default/xui/en-us/panel_marketplace_listings_unlisted.xml @@ -8,7 +8,7 @@ width="308" height="370" left_delta="0" - start_folder="Marketplace listings" + start_folder.name="Marketplace listings" show_empty_message="true" show_root_folder="false" use_marketplace_folders="true"