summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeslie Linden <leslie@lindenlab.com>2011-06-23 18:11:55 -0400
committerLeslie Linden <leslie@lindenlab.com>2011-06-23 18:11:55 -0400
commite74f9fcc147edd24576a25bb6a0af69ac8d6a600 (patch)
tree9cfde2e6691f9d24d7a3139ff0a74d3d4e148e29
parent842b6d2d142abcaa11a825a96537b0ceaef33e24 (diff)
EXP-919 FIX -- Toggling InventoryDisplayInbox value to True in Viewer on Agni creates Inbox and Outbox system folders
* The badge no longer displays (2) when the folder does not exist. * The inbox panel no longer displays the inventory and library folders. * The inbox is supposed to display a string for the item not being found, but doesn't for an unknown reason.
-rw-r--r--indra/newview/llinventorypanel.cpp12
-rw-r--r--indra/newview/llinventorypanel.h1
-rw-r--r--indra/newview/llpanelmarketplaceinbox.cpp43
-rw-r--r--indra/newview/llsidepanelinventory.cpp43
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml1
5 files changed, 67 insertions, 33 deletions
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 3666c51c82..0af6451108 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -150,7 +150,10 @@ void LLInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
{
// Determine the root folder in case specified, and
// build the views starting with that folder.
- const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(params.start_folder);
+
+ std::string start_folder_name(params.start_folder());
+
+ const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(start_folder_name);
LLUUID root_id;
@@ -164,6 +167,12 @@ void LLInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
? gInventory.findCategoryUUIDForType(preferred_type, false, false)
: LLUUID::null;
}
+
+ if ((root_id == LLUUID::null) && !start_folder_name.empty())
+ {
+ llwarns << "No category found that matches start_folder: " << start_folder_name << llendl;
+ root_id = LLUUID::generateNewID();
+ }
LLRect folder_rect(0,
0,
@@ -184,7 +193,6 @@ void LLInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
p.use_label_suffix = params.use_label_suffix;
p.allow_multiselect = mAllowMultiSelect;
mFolderRoot = LLUICtrlFactory::create<LLFolderView>(p);
-
}
void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 864c403397..4b915484f8 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -226,7 +226,6 @@ private:
BOOL mViewsInitialized; // Views have been generated
// UUID of category from which hierarchy should be built. Set with the
// "start_folder" xml property. Default is LLUUID::null that means total Inventory hierarchy.
- std::string mStartFolderString;
LLUUID mStartFolderID;
};
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
index 14c4c46fe7..1f3fbb40b4 100644
--- a/indra/newview/llpanelmarketplaceinbox.cpp
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -59,7 +59,7 @@ LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox()
BOOL LLPanelMarketplaceInbox::postBuild()
{
mInventoryPanel = getChild<LLInventoryPanel>("inventory_inbox");
-
+
mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE);
LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLPanelMarketplaceInbox::handleLoginComplete, this));
@@ -67,7 +67,10 @@ BOOL LLPanelMarketplaceInbox::postBuild()
LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMarketplaceInbox::onFocusReceived, this));
mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceInbox::onSelectionChange, this));
-
+
+ // Set up the note to display when the inbox is empty
+ mInventoryPanel->getFilter()->setEmptyLookupMessage("InboxNoItems");
+
return TRUE;
}
@@ -116,6 +119,12 @@ BOOL LLPanelMarketplaceInbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL dr
U32 LLPanelMarketplaceInbox::getFreshItemCount() const
{
#if SUPPORTING_FRESH_ITEM_COUNT
+
+ //
+ // NOTE: When turning this on, be sure to test the no inbox/outbox case because this code probably
+ // will return "2" for the Inventory and LIBRARY top-levels when that happens.
+ //
+
U32 fresh_item_count = 0;
LLFolderView * root_folder = mInventoryPanel->getRootFolder();
@@ -143,23 +152,27 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const
U32 LLPanelMarketplaceInbox::getTotalItemCount() const
{
+ U32 item_count = 0;
+
LLInventoryModel* model = mInventoryPanel->getModel();
+ const LLUUID inbox_id = model->findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false);
+
+ if (!inbox_id.isNull())
+ {
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
- LLInventoryModel::cat_array_t* cats;
- LLInventoryModel::item_array_t* items;
-
- model->getDirectDescendentsOf(model->findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false), cats, items);
-
- U32 item_count = 0;
+ model->getDirectDescendentsOf(inbox_id, cats, items);
- if (cats)
- {
- item_count += cats->size();
- }
+ if (cats)
+ {
+ item_count += cats->size();
+ }
- if (items)
- {
- item_count += items->size();
+ if (items)
+ {
+ item_count += items->size();
+ }
}
return item_count;
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index f9e029be19..f769612f3f 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -67,7 +67,7 @@ static const char * const OUTBOX_BUTTON_NAME = "outbox_btn";
static const char * const INBOX_LAYOUT_PANEL_NAME = "inbox_layout_panel";
static const char * const OUTBOX_LAYOUT_PANEL_NAME = "outbox_layout_panel";
-static const char * const MAIN_INVENTORY_LAYOUT_PANEL = "main_inventory_layout_panel";
+static const char * const MAIN_INVENTORY_LAYOUT_PANEL_NAME = "main_inventory_layout_panel";
static const char * const INBOX_INVENTORY_PANEL = "inventory_inbox";
static const char * const OUTBOX_INVENTORY_PANEL = "inventory_outbox";
@@ -177,15 +177,16 @@ BOOL LLSidepanelInventory::postBuild()
{
LLLayoutStack* stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
- LLLayoutPanel * inbox_panel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
- LLLayoutPanel * outbox_panel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
-
- stack->collapsePanel(inbox_panel, true);
- stack->collapsePanel(outbox_panel, true);
-
// Disable user_resize on main inventory panel by default
- stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL, false);
+ stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, false);
+ stack->setPanelUserResize(INBOX_LAYOUT_PANEL_NAME, false);
+ stack->setPanelUserResize(OUTBOX_LAYOUT_PANEL_NAME, false);
+ // Collapse both inbox and outbox panels
+ stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), true);
+ stack->collapsePanel(getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME), true);
+
+ // Set up button states and callbacks
LLButton * inbox_button = getChild<LLButton>(INBOX_BUTTON_NAME);
LLButton * outbox_button = getChild<LLButton>(OUTBOX_BUTTON_NAME);
@@ -219,18 +220,30 @@ void LLSidepanelInventory::handleLoginComplete()
const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, do_not_create_folder, do_not_find_in_library);
const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, do_not_create_folder, do_not_find_in_library);
+
+ if (inbox_id.isNull() && outbox_id.isNull())
+ {
+ return;
+ }
mCategoriesObserver = new LLInventoryCategoriesObserver();
gInventory.addObserver(mCategoriesObserver);
- mCategoriesObserver->addCategory(inbox_id, boost::bind(&LLSidepanelInventory::onInboxChanged, this, inbox_id));
- mCategoriesObserver->addCategory(outbox_id, boost::bind(&LLSidepanelInventory::onOutboxChanged, this, outbox_id));
+ if (!outbox_id.isNull())
+ {
+ mCategoriesObserver->addCategory(outbox_id, boost::bind(&LLSidepanelInventory::onOutboxChanged, this, outbox_id));
+ }
+
+ if (!inbox_id.isNull())
+ {
+ mCategoriesObserver->addCategory(inbox_id, boost::bind(&LLSidepanelInventory::onInboxChanged, this, inbox_id));
- //
- // Trigger a load for the entire contents of the Inbox
- //
+ //
+ // Trigger a load for the entire contents of the Inbox
+ //
- LLInventoryModelBackgroundFetch::instance().start(inbox_id);
+ LLInventoryModelBackgroundFetch::instance().start(inbox_id);
+ }
}
void LLSidepanelInventory::enableInbox(bool enabled)
@@ -293,7 +306,7 @@ bool manageInboxOutboxPanels(LLLayoutStack * stack,
stack->collapsePanel(pressedPanel, !expand);
// Enable user_resize on main inventory panel only when a marketplace box is expanded
- stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL, expand);
+ stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, expand);
return expand;
}
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index 00f3135035..778daac83b 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -69,6 +69,7 @@
width="330">
<string name="InboxLabelWithArg">Received Items ([NUM])</string>
<string name="InboxLabelNoArg">Received Items</string>
+ <string name="InboxNoItems">Items purchased through the marketplace will be delivered here.</string>
<button
label="Received Items"
name="inbox_btn"