diff options
author | Leslie Linden <none@none> | 2011-06-14 16:35:15 -0700 |
---|---|---|
committer | Leslie Linden <none@none> | 2011-06-14 16:35:15 -0700 |
commit | 142c2fc29c9645df1bff924d6a61c09f04713a7b (patch) | |
tree | b4a578097f712518c4a805013596bc9dc2efa729 /indra/newview | |
parent | 3eeb14ee0abb5720e010d94eba52db09fa32237e (diff) |
EXP-896 FIX -- Inbox not opened by default when new items are received
EXP-894 FIX -- When scrolling to the bottom of the inbox, the last item is c...
EXP-856 FIX -- Inbox item count reflected as badge on inventory button
* Inbox auto-expands when "fresh" items are reported
* Logic for "fresh" item determination is still in progress but works for purchases while logged in
* Badges now only displayed when the inventory side panel is collapsed or when inventory not visible
Reviewed by Leyla
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llfolderviewitem.h | 10 | ||||
-rw-r--r-- | indra/newview/llpanelmarketplaceinbox.cpp | 65 | ||||
-rw-r--r-- | indra/newview/llpanelmarketplaceinbox.h | 14 | ||||
-rw-r--r-- | indra/newview/llsidepanelinventory.cpp | 15 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/sidepanel_inventory.xml | 61 |
5 files changed, 118 insertions, 47 deletions
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index dbd7d5a370..789e104e8b 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -167,7 +167,7 @@ protected: void extendSelectionFromRoot(LLFolderViewItem* selection); // this is an internal method used for adding items to folders. A - // no-op at this leve, but reimplemented in derived classes. + // no-op at this level, but reimplemented in derived classes. virtual BOOL addItem(LLFolderViewItem*) { return FALSE; } virtual BOOL addFolder(LLFolderViewFolder*) { return FALSE; } @@ -366,6 +366,9 @@ public: UNKNOWN, TRASH, NOT_TRASH } ETrash; + typedef std::list<LLFolderViewItem*> items_t; + typedef std::list<LLFolderViewFolder*> folders_t; + private: S32 mNumDescendantsSelected; @@ -374,8 +377,6 @@ public: // Accessed needed by LLFolderViewItem S32 numSelected(void) const { return mNumDescendantsSelected + (isSelected() ? 1 : 0); } protected: - typedef std::list<LLFolderViewItem*> items_t; - typedef std::list<LLFolderViewFolder*> folders_t; items_t mItems; folders_t mFolders; LLInventorySort mSortFunction; @@ -537,6 +538,9 @@ public: time_t getCreationDate() const; bool isTrash() const; S32 getNumSelectedDescendants(void) const { return mNumDescendantsSelected; } + + folders_t::const_iterator getFoldersBegin() const { return mFolders.cbegin(); } + folders_t::const_iterator getFoldersEnd() const { return mFolders.cend(); } }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index a6d6308dc2..0fe2560fbf 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -34,9 +34,14 @@ static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox"); +const LLPanelMarketplaceInbox::Params& LLPanelMarketplaceInbox::getDefaultParams() +{ + return LLUICtrlFactory::getDefaultParams<LLPanelMarketplaceInbox>(); +} + // protected -LLPanelMarketplaceInbox::LLPanelMarketplaceInbox() - : LLPanel() +LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p) + : LLPanel(p) , mInventoryPanel(NULL) { } @@ -69,7 +74,31 @@ BOOL LLPanelMarketplaceInbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL dr return TRUE; } -U32 LLPanelMarketplaceInbox::getItemCount() const +U32 LLPanelMarketplaceInbox::getFreshItemCount() const +{ + U32 fresh_item_count = 0; + + LLFolderView * root_folder = mInventoryPanel->getRootFolder(); + + const LLFolderViewFolder * inbox_folder = *(root_folder->getFoldersBegin()); + + LLFolderViewFolder::folders_t::const_iterator folders_it = inbox_folder->getFoldersBegin(); + LLFolderViewFolder::folders_t::const_iterator folders_end = inbox_folder->getFoldersEnd(); + + for (; folders_it != folders_end; ++folders_it) + { + const LLFolderViewFolder * folder = *folders_it; + + if (folder->getCreationDate() > 1500) + { + fresh_item_count++; + } + } + + return fresh_item_count; +} + +U32 LLPanelMarketplaceInbox::getTotalItemCount() const { LLInventoryModel* model = mInventoryPanel->getModel(); @@ -96,11 +125,16 @@ U32 LLPanelMarketplaceInbox::getItemCount() const std::string LLPanelMarketplaceInbox::getBadgeString() const { std::string item_count_str(""); - U32 item_count = getItemCount(); - if (item_count) + // If side panel collapsed or expanded and not inventory + if (LLSideTray::getInstance()->getCollapsed() || !LLSideTray::getInstance()->isPanelActive("sidepanel_inventory")) { - item_count_str = llformat("%d", item_count); + U32 item_count = getFreshItemCount(); + + if (item_count) + { + item_count_str = llformat("%d", item_count); + } } return item_count_str; @@ -108,17 +142,32 @@ std::string LLPanelMarketplaceInbox::getBadgeString() const void LLPanelMarketplaceInbox::draw() { - std::string item_count_str = getBadgeString(); + U32 item_count = getTotalItemCount(); + + LLView * fresh_new_count_view = getChildView("inbox_fresh_new_count"); - if (item_count_str.length() > 0) + if (item_count > 0) { + std::string item_count_str = llformat("%d", item_count); + LLStringUtil::format_map_t args; args["[NUM]"] = item_count_str; getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelWithArg", args)); + + // set green text to fresh item count + U32 fresh_item_count = getFreshItemCount(); + fresh_new_count_view->setVisible((fresh_item_count > 0)); + + if (fresh_item_count > 0) + { + getChild<LLUICtrl>("inbox_fresh_new_count")->setTextArg("[NUM]", llformat("%d", fresh_item_count)); + } } else { getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelNoArg")); + + fresh_new_count_view->setVisible(FALSE); } LLPanel::draw(); diff --git a/indra/newview/llpanelmarketplaceinbox.h b/indra/newview/llpanelmarketplaceinbox.h index 61e8cf3c1f..21069a0ea1 100644 --- a/indra/newview/llpanelmarketplaceinbox.h +++ b/indra/newview/llpanelmarketplaceinbox.h @@ -36,9 +36,17 @@ class LLPanelMarketplaceInbox : public LLPanel, public LLSideTrayTabBadgeDriver { public: + struct Params : public LLInitParam::Block<Params, LLPanel::Params> + { + Params() {} + }; + LOG_CLASS(LLPanelMarketplaceInbox); - LLPanelMarketplaceInbox(); + // RN: for some reason you can't just use LLUICtrlFactory::getDefaultParams as a default argument in VC8 + static const LLPanelMarketplaceInbox::Params& getDefaultParams(); + + LLPanelMarketplaceInbox(const Params& p = getDefaultParams()); ~LLPanelMarketplaceInbox(); /*virtual*/ BOOL postBuild(); @@ -47,7 +55,9 @@ public: /*virtual*/ void draw(); - U32 getItemCount() const; + U32 getFreshItemCount() const; + U32 getTotalItemCount() const; + std::string getBadgeString() const; private: diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 6ac845385b..33d512d89e 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -43,6 +43,7 @@ #include "lllayoutstack.h" #include "lloutfitobserver.h" #include "llpanelmaininventory.h" +#include "llpanelmarketplaceinbox.h" #include "llselectmgr.h" #include "llsidepaneliteminfo.h" #include "llsidepaneltaskinfo.h" @@ -341,12 +342,6 @@ void LLSidepanelInventory::onToggleInboxBtn() { // Save current time as a setting for future new-ness tests gSavedSettings.setString(INBOX_EXPAND_TIME_SETTING, LLDate::now().asString()); - - // TODO: Hide inbox badge - } - else - { - // TODO: Show inbox badge } } @@ -365,6 +360,14 @@ void LLSidepanelInventory::onOpen(const LLSD& key) { LLFirstUse::newInventory(false); + // Expand the inbox if we have fresh items + LLPanelMarketplaceInbox * inbox = getChild<LLPanelMarketplaceInbox>("marketplace_inbox"); + if (inbox && (inbox->getFreshItemCount() > 0)) + { + getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true); + onToggleInboxBtn(); + } + if(key.size() == 0) return; diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 373a9011a1..9a91f90f79 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -54,8 +54,8 @@ follows="bottom|left|right" min_dim="35" name="inbox_layout_panel" - max_dim="125" - height="125"> + max_dim="200" + height="200"> <panel follows="all" layout="topleft" @@ -64,12 +64,12 @@ class="panel_marketplace_inbox" top="0" label="" - height="125" + height="200" width="330"> - <string name="InboxLabelWithArg">MARKETPLACE INBOX ([NUM])</string> - <string name="InboxLabelNoArg">MARKETPLACE INBOX</string> + <string name="InboxLabelWithArg">Received Items ([NUM])</string> + <string name="InboxLabelNoArg">Received Items</string> <button - label="MARKETPLACE INBOX" + label="Received Items" name="inbox_btn" height="35" width="308" @@ -82,28 +82,33 @@ pad_left="35" top="0" left="10" /> + <text + type="string" + length="1" + follows="right|top" + layout="topleft" + height="13" + top="10" + right="-20" + name="inbox_fresh_new_count" + font="SansSerifMedium" + halign="right" + text_color="EmphasisColor" + top_pad="0" + width="300"> + [NUM] New + </text> <panel follows="all" left="10" - height="90" + bottom="200" width="308" top="35" bg_opaque_color="InventoryBackgroundColor" background_visible="true" background_opaque="true" - > - <text - type="string" - length="1" - follows="top|left|right" - font="SansSerifSmall" - use_ellipses="true" - name="move_items_text" - top="5" - left="4" - height="20" - width="304" - >Move items to your inventory to manage and use them.</text> + tool_tip="Drag and drop items to your inventory to manage and use them" + > <inventory_panel bg_opaque_color="DkGray2" bg_alpha_color="DkGray2" @@ -112,8 +117,8 @@ border="false" bevel_style="none" follows="all" - top="25" - height="70" + top="0" + height="165" start_folder="Inbox" layout="topleft" left="0" @@ -134,8 +139,8 @@ follows="bottom|left|right" name="outbox_layout_panel" min_dim="35" - max_dim="125" - height="125"> + max_dim="200" + height="200"> <panel follows="all" layout="topleft" @@ -144,10 +149,10 @@ class="panel_marketplace_outbox" top="0" label="" - height="125" + height="200" width="310"> <button - label="MARKETPLACE OUTBOX" + label="Merchant Outbox" is_toggle="true" name="outbox_btn" follows="top|left|right" @@ -203,7 +208,7 @@ <panel follows="all" left="0" - bottom="125" + bottom="200" width="330" top="35" > @@ -215,7 +220,7 @@ border="false" bevel_style="none" follows="all" - height="90" + height="165" start_folder="Outbox" layout="topleft" left="0" |