summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfloatertoybox.cpp21
-rw-r--r--indra/newview/llfloatertoybox.h1
-rw-r--r--indra/newview/llfolderviewitem.h4
-rw-r--r--indra/newview/llinventorymodel.cpp10
-rw-r--r--indra/newview/llpanelmarketplaceinbox.cpp15
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.cpp107
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.h36
-rw-r--r--indra/newview/llsidepanelinventory.cpp21
-rw-r--r--indra/newview/lltoolbarview.cpp30
-rw-r--r--indra/newview/lltoolbarview.h4
-rw-r--r--indra/newview/skins/default/xui/en/floater_toybox.xml24
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml18
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inbox_folder_view_item.xml19
13 files changed, 255 insertions, 55 deletions
diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp
index f527937e8f..324afe661f 100644
--- a/indra/newview/llfloatertoybox.cpp
+++ b/indra/newview/llfloatertoybox.cpp
@@ -42,6 +42,7 @@ LLFloaterToybox::LLFloaterToybox(const LLSD& key)
, mToolBar(NULL)
{
mCommitCallbackRegistrar.add("Toybox.RestoreDefaults", boost::bind(&LLFloaterToybox::onBtnRestoreDefaults, this));
+ mCommitCallbackRegistrar.add("Toybox.ClearAll", boost::bind(&LLFloaterToybox::onBtnClearAll, this));
}
LLFloaterToybox::~LLFloaterToybox()
@@ -121,15 +122,35 @@ static bool finish_restore_toybox(const LLSD& notification, const LLSD& response
{
LLToolBarView::loadDefaultToolbars();
}
+
return false;
}
+
+static bool finish_clear_all_toybox(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ if (option == 0)
+ {
+ LLToolBarView::clearAllToolbars();
+ }
+
+ return false;
+}
+
static LLNotificationFunctorRegistration finish_restore_toybox_reg("ConfirmRestoreToybox", finish_restore_toybox);
+static LLNotificationFunctorRegistration finish_clear_all_toybox_reg("ConfirmClearAllToybox", finish_clear_all_toybox);
void LLFloaterToybox::onBtnRestoreDefaults()
{
LLNotificationsUtil::add("ConfirmRestoreToybox");
}
+void LLFloaterToybox::onBtnClearAll()
+{
+ LLNotificationsUtil::add("ConfirmClearAllToybox");
+}
+
BOOL LLFloaterToybox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
diff --git a/indra/newview/llfloatertoybox.h b/indra/newview/llfloatertoybox.h
index 6f0275b8fe..10aee0e6f5 100644
--- a/indra/newview/llfloatertoybox.h
+++ b/indra/newview/llfloatertoybox.h
@@ -50,6 +50,7 @@ public:
std::string& tooltip_msg);
protected:
+ void onBtnClearAll();
void onBtnRestoreDefaults();
void onToolBarButtonEnter(LLView* button);
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 676eaf825d..a26515821d 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -556,6 +556,10 @@ public:
folders_t::const_iterator getFoldersBegin() const { return mFolders.begin(); }
folders_t::const_iterator getFoldersEnd() const { return mFolders.end(); }
folders_t::size_type getFoldersCount() const { return mFolders.size(); }
+
+ items_t::const_iterator getItemsBegin() const { return mItems.begin(); }
+ items_t::const_iterator getItemsEnd() const { return mItems.end(); }
+ items_t::size_type getItemsCount() const { return mItems.size(); }
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index fb02fe0ff7..dc25689fa3 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -2528,9 +2528,9 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
{
LLPointer<LLViewerInventoryCategory> tfolder = new LLViewerInventoryCategory(gAgent.getID());
tfolder->unpackMessage(msg, _PREHASH_FolderData, i);
- //llinfos << "unpaked folder '" << tfolder->getName() << "' ("
- // << tfolder->getUUID() << ") in " << tfolder->getParentUUID()
- // << llendl;
+ llinfos << "unpacked folder '" << tfolder->getName() << "' ("
+ << tfolder->getUUID() << ") in " << tfolder->getParentUUID()
+ << llendl;
if(tfolder->getUUID().notNull())
{
folders.push_back(tfolder);
@@ -2570,8 +2570,8 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
{
LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
titem->unpackMessage(msg, _PREHASH_ItemData, i);
- //llinfos << "unpaked item '" << titem->getName() << "' in "
- // << titem->getParentUUID() << llendl;
+ llinfos << "unpaked item '" << titem->getName() << "' in "
+ << titem->getParentUUID() << llendl;
U32 callback_id;
msg->getU32Fast(_PREHASH_ItemData, _PREHASH_CallbackID, callback_id);
if(titem->getUUID().notNull())
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
index ac528947a4..7cb4bbf891 100644
--- a/indra/newview/llpanelmarketplaceinbox.cpp
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -151,6 +151,20 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const
fresh_item_count++;
}
}
+
+ LLFolderViewFolder::items_t::const_iterator items_it = inbox_folder->getItemsBegin();
+ LLFolderViewFolder::items_t::const_iterator items_end = inbox_folder->getItemsEnd();
+
+ for (; items_it != items_end; ++items_it)
+ {
+ const LLFolderViewItem * item_view = *items_it;
+ const LLInboxFolderViewItem * inbox_item_view = dynamic_cast<const LLInboxFolderViewItem*>(item_view);
+
+ if (inbox_item_view && inbox_item_view->isFresh())
+ {
+ fresh_item_count++;
+ }
+ }
}
}
@@ -171,6 +185,7 @@ U32 LLPanelMarketplaceInbox::getTotalItemCount() const
if (inbox_folder)
{
item_count += inbox_folder->getFoldersCount();
+ item_count += inbox_folder->getItemsCount();
}
}
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
index 2e4bf55d51..b9fb5b8c55 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -45,6 +45,7 @@
static LLDefaultChildRegistry::Register<LLInboxInventoryPanel> r1("inbox_inventory_panel");
static LLDefaultChildRegistry::Register<LLInboxFolderViewFolder> r2("inbox_folder_view_folder");
+static LLDefaultChildRegistry::Register<LLInboxFolderViewItem> r3("inbox_folder_view_item");
//
@@ -137,7 +138,7 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge
LLFolderViewItem * LLInboxInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge)
{
- LLFolderViewItem::Params params;
+ LLInboxFolderViewItem::Params params;
params.name = bridge->getDisplayName();
params.icon = bridge->getIcon();
@@ -171,10 +172,6 @@ LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p)
#endif
}
-LLInboxFolderViewFolder::~LLInboxFolderViewFolder()
-{
-}
-
// virtual
void LLInboxFolderViewFolder::draw()
{
@@ -190,6 +187,20 @@ void LLInboxFolderViewFolder::draw()
LLFolderViewFolder::draw();
}
+void LLInboxFolderViewFolder::selectItem()
+{
+ LLFolderViewFolder::selectItem();
+
+ deFreshify();
+}
+
+void LLInboxFolderViewFolder::toggleOpen()
+{
+ LLFolderViewFolder::toggleOpen();
+
+ deFreshify();
+}
+
void LLInboxFolderViewFolder::computeFreshness()
{
const U32 last_expansion_utc = gSavedPerAccountSettings.getU32("LastInventoryInboxActivity");
@@ -218,20 +229,6 @@ void LLInboxFolderViewFolder::deFreshify()
gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());
}
-void LLInboxFolderViewFolder::selectItem()
-{
- LLFolderViewFolder::selectItem();
-
- deFreshify();
-}
-
-void LLInboxFolderViewFolder::toggleOpen()
-{
- LLFolderViewFolder::toggleOpen();
-
- deFreshify();
-}
-
void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc)
{
mCreationDate = creation_date_utc;
@@ -246,9 +243,81 @@ void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc)
// LLInboxFolderViewItem Implementation
//
+LLInboxFolderViewItem::LLInboxFolderViewItem(const Params& p)
+ : LLFolderViewItem(p)
+ , LLBadgeOwner(getHandle())
+ , mFresh(false)
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+ computeFreshness();
+
+ initBadgeParams(p.new_badge());
+#endif
+}
+
BOOL LLInboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask)
{
return TRUE;
}
+// virtual
+void LLInboxFolderViewItem::draw()
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+ if (!badgeHasParent())
+ {
+ addBadgeToParentPanel();
+ }
+
+ setBadgeVisibility(mFresh);
+#endif
+
+ LLFolderViewItem::draw();
+}
+
+void LLInboxFolderViewItem::selectItem()
+{
+ LLFolderViewItem::selectItem();
+
+ deFreshify();
+}
+
+void LLInboxFolderViewItem::computeFreshness()
+{
+ const U32 last_expansion_utc = gSavedPerAccountSettings.getU32("LastInventoryInboxActivity");
+
+ if (last_expansion_utc > 0)
+ {
+ mFresh = (mCreationDate > last_expansion_utc);
+
+#if DEBUGGING_FRESHNESS
+ if (mFresh)
+ {
+ llinfos << "Item is fresh! -- creation " << mCreationDate << ", saved_freshness_date " << last_expansion_utc << llendl;
+ }
+#endif
+ }
+ else
+ {
+ mFresh = true;
+ }
+}
+
+void LLInboxFolderViewItem::deFreshify()
+{
+ mFresh = false;
+
+ gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());
+}
+
+void LLInboxFolderViewItem::setCreationDate(time_t creation_date_utc)
+{
+ mCreationDate = creation_date_utc;
+
+ if (mParentFolder == mRoot)
+ {
+ computeFreshness();
+ }
+}
+
// eof
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
index 46eeb9ea7f..09b14ec547 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.h
+++ b/indra/newview/llpanelmarketplaceinboxinventory.h
@@ -69,16 +69,15 @@ public:
};
LLInboxFolderViewFolder(const Params& p);
- ~LLInboxFolderViewFolder();
void draw();
- void computeFreshness();
- void deFreshify();
-
void selectItem();
void toggleOpen();
+ void computeFreshness();
+ void deFreshify();
+
bool isFresh() const { return mFresh; }
protected:
@@ -88,15 +87,36 @@ protected:
};
-class LLInboxFolderViewItem : public LLFolderViewItem
+class LLInboxFolderViewItem : public LLFolderViewItem, public LLBadgeOwner
{
public:
- LLInboxFolderViewItem(const Params& p)
- : LLFolderViewItem(p)
+ struct Params : public LLInitParam::Block<Params, LLFolderViewItem::Params>
{
- }
+ Optional<LLBadge::Params> new_badge;
+
+ Params()
+ : new_badge("new_badge")
+ {
+ }
+ };
+
+ LLInboxFolderViewItem(const Params& p);
BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+
+ void draw();
+
+ void selectItem();
+
+ void computeFreshness();
+ void deFreshify();
+
+ bool isFresh() const { return mFresh; }
+
+protected:
+ void setCreationDate(time_t creation_date_utc);
+
+ bool mFresh;
};
#endif //LL_INBOXINVENTORYPANEL_H
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index a24f6b24f0..91f8035556 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -113,21 +113,13 @@ public:
switch (added_category_type)
{
case LLFolderType::FT_INBOX:
+ mSidepanelInventory->enableInbox(true);
mSidepanelInventory->observeInboxModifications(added_category->getUUID());
break;
case LLFolderType::FT_OUTBOX:
+ mSidepanelInventory->enableOutbox(true);
mSidepanelInventory->observeOutboxModifications(added_category->getUUID());
break;
- case LLFolderType::FT_NONE:
- // HACK until sim update to properly create folder with system type
- if (added_category->getName() == "Received Items")
- {
- mSidepanelInventory->observeInboxModifications(added_category->getUUID());
- }
- else if (added_category->getName() == "Merchant Outbox")
- {
- mSidepanelInventory->observeOutboxModifications(added_category->getUUID());
- }
default:
break;
}
@@ -288,7 +280,6 @@ BOOL LLSidepanelInventory::postBuild()
gSavedSettings.getControl("InventoryDisplayInbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayInboxChanged));
gSavedSettings.getControl("InventoryDisplayOutbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayOutboxChanged));
- updateInboxOutbox();
// Update the verbs buttons state.
updateVerbs();
@@ -316,20 +307,20 @@ void LLSidepanelInventory::updateInboxOutbox()
// Set up observer for inbox changes, if we have an inbox already
if (!inbox_id.isNull())
{
- observeInboxModifications(inbox_id);
-
// Enable the display of the inbox if it exists
enableInbox(true);
+
+ observeInboxModifications(inbox_id);
}
#if ENABLE_MERCHANT_OUTBOX_PANEL
// Set up observer for outbox changes, if we have an outbox already
if (!outbox_id.isNull())
{
- observeOutboxModifications(outbox_id);
-
// Enable the display of the outbox if it exists
enableOutbox(true);
+
+ observeOutboxModifications(outbox_id);
}
#endif
}
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index ed1dfbb8cd..5ff0ccfeb2 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -315,6 +315,19 @@ bool LLToolBarView::loadToolbars(bool force_default)
return true;
}
+bool LLToolBarView::clearToolbars()
+{
+ for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++)
+ {
+ if (mToolbars[i])
+ {
+ mToolbars[i]->clearCommandsList();
+ }
+ }
+
+ return true;
+}
+
//static
bool LLToolBarView::loadDefaultToolbars()
{
@@ -332,6 +345,23 @@ bool LLToolBarView::loadDefaultToolbars()
return retval;
}
+//static
+bool LLToolBarView::clearAllToolbars()
+{
+ bool retval = false;
+
+ if (gToolBarView)
+ {
+ retval = gToolBarView->clearToolbars();
+ if (retval)
+ {
+ gToolBarView->saveToolbars();
+ }
+ }
+
+ return retval;
+}
+
void LLToolBarView::saveToolbars() const
{
if (!mToolbarsLoaded)
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
index 4307d10258..f871d522a2 100644
--- a/indra/newview/lltoolbarview.h
+++ b/indra/newview/lltoolbarview.h
@@ -93,10 +93,14 @@ public:
// Loads the toolbars from the existing user or default settings
bool loadToolbars(bool force_default = false); // return false if load fails
+
+ // Clears all buttons off the toolbars
+ bool clearToolbars();
void setToolBarsVisible(bool visible);
static bool loadDefaultToolbars();
+ static bool clearAllToolbars();
static void startDragTool(S32 x, S32 y, LLToolBarButton* toolbarButton);
static BOOL handleDragTool(S32 x, S32 y, const LLUUID& uuid, LLAssetType::EType type);
diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml
index ef3951a1cd..493d44a9cf 100644
--- a/indra/newview/skins/default/xui/en/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/en/floater_toybox.xml
@@ -5,7 +5,7 @@
can_minimize="false"
can_resize="false"
default_tab_group="1"
- height="460"
+ height="330"
help_topic="toybox"
layout="topleft"
legacy_header_height="18"
@@ -46,7 +46,7 @@
Buttons will appear as shown or as icon-only depending on each toolbar's settings.
</text>
<toolbar
- bottom="395"
+ bottom="265"
button_display_mode="icons_with_text"
follows="all"
left="20"
@@ -82,20 +82,32 @@
<panel
bevel_style="none"
border="true"
- bottom="396"
+ bottom="266"
follows="left|bottom|right"
left="20"
right="-20"
- top="396" />
+ top="266" />
+ <button
+ follows="left|bottom|right"
+ height="23"
+ label="Clear all toolbars"
+ label_selected="Clear all toolbars"
+ layout="topleft"
+ left="185"
+ name="btn_clear_all"
+ top="285"
+ width="130">
+ <button.commit_callback function="Toybox.ClearAll" />
+ </button>
<button
follows="left|bottom|right"
height="23"
label="Restore defaults"
label_selected="Restore defaults"
layout="topleft"
- left="260"
+ left="335"
name="btn_restore_defaults"
- top="415"
+ top="285"
width="130">
<button.commit_callback function="Toybox.RestoreDefaults" />
</button>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 3ed8c30ca8..e4458f33b1 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4636,7 +4636,21 @@ Are you sure you want to quit?
name="ConfirmRestoreToybox"
type="alertmodal">
<unique/>
-Are you sure you want to restore your default buttons and toolbars?
+This action will restore your default buttons and toolbars.
+
+You cannot undo this action.
+ <usetemplate
+ name="okcancelbuttons"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="ConfirmClearAllToybox"
+ type="alertmodal">
+ <unique/>
+This action will return all buttons to the toolbox and your toolbars will be empty.
You cannot undo this action.
<usetemplate
@@ -4644,7 +4658,7 @@ You cannot undo this action.
notext="Cancel"
yestext="OK"/>
</notification>
-
+
<notification
icon="alertmodal.tga"
name="DeleteItems"
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_item.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_item.xml
new file mode 100644
index 0000000000..7a7a6e9a09
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_item.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inbox_folder_view_item
+ item_height="20"
+ item_top_pad="4"
+ selection_image="Rounded_Square"
+ >
+ <new_badge
+ label="New"
+ label_offset_horiz="-1"
+ location="right"
+ padding_horiz="12.5"
+ padding_vert="2"
+ location_offset_hcenter="-23"
+ border_image="New_Tag_Border"
+ border_color="DkGray2"
+ image="New_Tag_Background"
+ image_color="Black"
+ />
+</inbox_folder_view_item>