EXP-995 FIX -- New icon scrolls into Received Items panel heading
EXP-903 FIX -- Newness/Freshness number does not decrease as items are opened in Inbox * Brought back freshness with the freshness * New badge and label color from Gibson * Inventory Panel now allows display of badges with proper clipping Reviewed by Richard.master
parent
85ddc48e08
commit
18e8d57b21
|
|
@ -29,6 +29,7 @@ set(llui_SOURCE_FILES
|
|||
llaccordionctrl.cpp
|
||||
llaccordionctrltab.cpp
|
||||
llbadge.cpp
|
||||
llbadgeholder.cpp
|
||||
llbadgeowner.cpp
|
||||
llbutton.cpp
|
||||
llcheckboxctrl.cpp
|
||||
|
|
@ -123,6 +124,7 @@ set(llui_HEADER_FILES
|
|||
llaccordionctrl.h
|
||||
llaccordionctrltab.h
|
||||
llbadge.h
|
||||
llbadgeholder.h
|
||||
llbadgeowner.h
|
||||
llbutton.h
|
||||
llcallbackmap.h
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@ LLBadge::Params::Params()
|
|||
, image_color("image_color")
|
||||
, label("label")
|
||||
, label_color("label_color")
|
||||
, label_offset_horiz("label_offset_horiz")
|
||||
, label_offset_vert("label_offset_vert")
|
||||
, location("location", LLRelPos::TOP_LEFT)
|
||||
, location_percent_hcenter("location_percent_hcenter")
|
||||
, location_percent_vcenter("location_percent_vcenter")
|
||||
|
|
@ -65,6 +67,8 @@ bool LLBadge::Params::equals(const Params& a) const
|
|||
comp &= (image_color() == a.image_color());
|
||||
comp &= (label() == a.label());
|
||||
comp &= (label_color() == a.label_color());
|
||||
comp &= (label_offset_horiz() == a.label_offset_horiz());
|
||||
comp &= (label_offset_vert() == a.label_offset_vert());
|
||||
comp &= (location() == a.location());
|
||||
comp &= (location_percent_hcenter() == a.location_percent_hcenter());
|
||||
comp &= (location_percent_vcenter() == a.location_percent_vcenter());
|
||||
|
|
@ -84,6 +88,8 @@ LLBadge::LLBadge(const LLBadge::Params& p)
|
|||
, mImageColor(p.image_color)
|
||||
, mLabel(p.label)
|
||||
, mLabelColor(p.label_color)
|
||||
, mLabelOffsetHoriz(p.label_offset_horiz)
|
||||
, mLabelOffsetVert(p.label_offset_vert)
|
||||
, mLocation(p.location)
|
||||
, mLocationPercentHCenter(0.5f)
|
||||
, mLocationPercentVCenter(0.5f)
|
||||
|
|
@ -131,6 +137,18 @@ LLBadge::~LLBadge()
|
|||
{
|
||||
}
|
||||
|
||||
bool LLBadge::addToView(LLView * view)
|
||||
{
|
||||
bool child_added = view->addChild(this);
|
||||
|
||||
if (child_added)
|
||||
{
|
||||
setShape(view->getLocalRect());
|
||||
}
|
||||
|
||||
return child_added;
|
||||
}
|
||||
|
||||
void LLBadge::setLabel(const LLStringExplicit& label)
|
||||
{
|
||||
mLabel = label;
|
||||
|
|
@ -241,8 +259,10 @@ void LLBadge::draw()
|
|||
// Draw the label
|
||||
//
|
||||
|
||||
mGLFont->render(badge_label_wstring, badge_label_begin_offset,
|
||||
badge_center_x, badge_center_y,
|
||||
mGLFont->render(badge_label_wstring,
|
||||
badge_label_begin_offset,
|
||||
badge_center_x + mLabelOffsetHoriz,
|
||||
badge_center_y + mLabelOffsetVert,
|
||||
mLabelColor % alpha,
|
||||
LLFontGL::HCENTER, LLFontGL::VCENTER, // centered around the position
|
||||
LLFontGL::NORMAL, // normal text (not bold, italics, etc.)
|
||||
|
|
|
|||
|
|
@ -104,6 +104,9 @@ public:
|
|||
Optional< std::string > label;
|
||||
Optional< LLUIColor > label_color;
|
||||
|
||||
Optional< S32 > label_offset_horiz;
|
||||
Optional< S32 > label_offset_vert;
|
||||
|
||||
Optional< LLRelPos::Location > location;
|
||||
Optional< U32 > location_percent_hcenter;
|
||||
Optional< U32 > location_percent_vcenter;
|
||||
|
|
@ -123,7 +126,9 @@ protected:
|
|||
public:
|
||||
|
||||
~LLBadge();
|
||||
|
||||
|
||||
bool addToView(LLView * view);
|
||||
|
||||
virtual void draw();
|
||||
|
||||
const std::string getLabel() const { return wstring_to_utf8str(mLabel); }
|
||||
|
|
@ -141,6 +146,9 @@ private:
|
|||
LLUIString mLabel;
|
||||
LLUIColor mLabelColor;
|
||||
|
||||
S32 mLabelOffsetHoriz;
|
||||
S32 mLabelOffsetVert;
|
||||
|
||||
LLRelPos::Location mLocation;
|
||||
F32 mLocationPercentHCenter;
|
||||
F32 mLocationPercentVCenter;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* @file llbadgeholder.cpp
|
||||
* @brief Source for badge holders
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llbadgeholder.h"
|
||||
|
||||
#include "llbadge.h"
|
||||
#include "llview.h"
|
||||
|
||||
|
||||
bool LLBadgeHolder::addBadge(LLBadge * badge)
|
||||
{
|
||||
bool badge_added = false;
|
||||
|
||||
LLView * this_view = dynamic_cast<LLView *>(this);
|
||||
|
||||
if (this_view && mAcceptsBadge)
|
||||
{
|
||||
badge_added = badge->addToView(this_view);
|
||||
}
|
||||
|
||||
return badge_added;
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
/**
|
||||
* @file llbadgeholder.h
|
||||
* @brief Header for badge holders
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLBADGEHOLDER_H
|
||||
#define LL_LLBADGEHOLDER_H
|
||||
|
||||
//
|
||||
// Classes
|
||||
//
|
||||
|
||||
class LLBadge;
|
||||
|
||||
class LLBadgeHolder
|
||||
{
|
||||
public:
|
||||
|
||||
LLBadgeHolder(bool acceptsBadge)
|
||||
: mAcceptsBadge(acceptsBadge)
|
||||
{
|
||||
}
|
||||
|
||||
void setAcceptsBadge(bool acceptsBadge) { mAcceptsBadge = acceptsBadge; }
|
||||
bool acceptsBadge() const { return mAcceptsBadge; }
|
||||
|
||||
virtual bool addBadge(LLBadge * badge);
|
||||
|
||||
private:
|
||||
|
||||
bool mAcceptsBadge;
|
||||
|
||||
};
|
||||
|
||||
#endif // LL_LLBADGEHOLDER_H
|
||||
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llbadgeholder.h"
|
||||
#include "llbadgeowner.h"
|
||||
#include "llpanel.h"
|
||||
|
||||
|
|
@ -81,40 +82,44 @@ void LLBadgeOwner::setBadgeVisibility(bool visible)
|
|||
}
|
||||
}
|
||||
|
||||
void LLBadgeOwner::addBadgeToParentPanel()
|
||||
bool LLBadgeOwner::addBadgeToParentPanel()
|
||||
{
|
||||
bool badge_added = false;
|
||||
|
||||
LLView * owner_view = mBadgeOwnerView.get();
|
||||
|
||||
if (mBadge && owner_view)
|
||||
{
|
||||
// Badge parent is badge owner by default
|
||||
LLView * badge_parent = owner_view;
|
||||
LLBadgeHolder * badge_holder = NULL;
|
||||
|
||||
// Find the appropriate parent for the badge
|
||||
// Find the appropriate holder for the badge
|
||||
LLView * parent = owner_view->getParent();
|
||||
|
||||
while (parent)
|
||||
{
|
||||
LLPanel * parent_panel = dynamic_cast<LLPanel *>(parent);
|
||||
LLBadgeHolder * badge_holder_panel = dynamic_cast<LLBadgeHolder *>(parent);
|
||||
|
||||
if (parent_panel && parent_panel->acceptsBadge())
|
||||
if (badge_holder_panel && badge_holder_panel->acceptsBadge())
|
||||
{
|
||||
badge_parent = parent;
|
||||
badge_holder = badge_holder_panel;
|
||||
break;
|
||||
}
|
||||
|
||||
parent = parent->getParent();
|
||||
}
|
||||
|
||||
if (badge_parent)
|
||||
if (badge_holder)
|
||||
{
|
||||
badge_parent->addChild(mBadge);
|
||||
badge_added = badge_holder->addBadge(mBadge);
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Unable to find parent panel for badge " << mBadge->getName() << " on " << owner_view->getName() << llendl;
|
||||
// Badge parent is fallback badge owner if no valid holder exists in the hierarchy
|
||||
badge_added = mBadge->addToView(owner_view);
|
||||
}
|
||||
}
|
||||
|
||||
return badge_added;
|
||||
}
|
||||
|
||||
LLBadge* LLBadgeOwner::createBadge(const LLBadge::Params& p)
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public:
|
|||
LLBadgeOwner(LLHandle< LLView > viewHandle);
|
||||
|
||||
void initBadgeParams(const LLBadge::Params& p);
|
||||
void addBadgeToParentPanel();
|
||||
bool addBadgeToParentPanel();
|
||||
|
||||
bool badgeHasParent() const { return (mBadge && mBadge->getParent()); }
|
||||
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ LLPanel::Params::Params()
|
|||
|
||||
LLPanel::LLPanel(const LLPanel::Params& p)
|
||||
: LLUICtrl(p),
|
||||
LLBadgeHolder(p.accepts_badge),
|
||||
mBgVisible(p.background_visible),
|
||||
mBgOpaque(p.background_opaque),
|
||||
mBgOpaqueColor(p.bg_opaque_color()),
|
||||
|
|
@ -114,8 +115,7 @@ LLPanel::LLPanel(const LLPanel::Params& p)
|
|||
mCommitCallbackRegistrar(false),
|
||||
mEnableCallbackRegistrar(false),
|
||||
mXMLFilename(p.filename),
|
||||
mVisibleSignal(NULL),
|
||||
mAcceptsBadge(p.accepts_badge)
|
||||
mVisibleSignal(NULL)
|
||||
// *NOTE: Be sure to also change LLPanel::initFromParams(). We have too
|
||||
// many classes derived from LLPanel to retrofit them all to pass in params.
|
||||
{
|
||||
|
|
@ -488,7 +488,7 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
|
|||
mBgOpaqueImageOverlay = p.bg_opaque_image_overlay;
|
||||
mBgAlphaImageOverlay = p.bg_alpha_image_overlay;
|
||||
|
||||
mAcceptsBadge = p.accepts_badge;
|
||||
setAcceptsBadge(p.accepts_badge);
|
||||
}
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
#include "lluiimage.h"
|
||||
#include "lluistring.h"
|
||||
#include "v4color.h"
|
||||
#include "llbadgeholder.h"
|
||||
#include <list>
|
||||
#include <queue>
|
||||
|
||||
|
|
@ -51,7 +52,7 @@ class LLUIImage;
|
|||
* With or without border,
|
||||
* Can contain LLUICtrls.
|
||||
*/
|
||||
class LLPanel : public LLUICtrl
|
||||
class LLPanel : public LLUICtrl, public LLBadgeHolder
|
||||
{
|
||||
public:
|
||||
struct LocalizedString : public LLInitParam::Block<LocalizedString>
|
||||
|
|
@ -252,8 +253,6 @@ public:
|
|||
|
||||
boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb );
|
||||
|
||||
bool acceptsBadge() const { return mAcceptsBadge; }
|
||||
|
||||
protected:
|
||||
// Override to set not found list
|
||||
LLButton* getDefaultButton() { return mDefaultBtn; }
|
||||
|
|
@ -268,7 +267,6 @@ protected:
|
|||
static factory_stack_t sFactoryStack;
|
||||
|
||||
private:
|
||||
bool mAcceptsBadge;
|
||||
BOOL mBgVisible; // any background at all?
|
||||
BOOL mBgOpaque; // use opaque color or image
|
||||
LLUIColor mBgOpaqueColor;
|
||||
|
|
|
|||
|
|
@ -902,6 +902,18 @@ void LLInventoryPanel::onFocusReceived()
|
|||
LLPanel::onFocusReceived();
|
||||
}
|
||||
|
||||
bool LLInventoryPanel::addBadge(LLBadge * badge)
|
||||
{
|
||||
bool badge_added = false;
|
||||
|
||||
if (acceptsBadge())
|
||||
{
|
||||
badge_added = badge->addToView(mFolderRoot);
|
||||
}
|
||||
|
||||
return badge_added;
|
||||
}
|
||||
|
||||
void LLInventoryPanel::openAllFolders()
|
||||
{
|
||||
mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
|
||||
|
|
|
|||
|
|
@ -125,6 +125,9 @@ public:
|
|||
/*virtual*/ void onFocusLost();
|
||||
/*virtual*/ void onFocusReceived();
|
||||
|
||||
// LLBadgeHolder methods
|
||||
bool addBadge(LLBadge * badge);
|
||||
|
||||
// Call this method to set the selection.
|
||||
void openAllFolders();
|
||||
void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llpanelmarketplaceinbox.h"
|
||||
#include "llpanelmarketplaceinboxinventory.h"
|
||||
|
||||
#include "llappviewer.h"
|
||||
#include "llbutton.h"
|
||||
|
|
@ -36,7 +37,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
|
||||
|
||||
#define SUPPORTING_FRESH_ITEM_COUNT 0
|
||||
#define SUPPORTING_FRESH_ITEM_COUNT 1
|
||||
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
|
||||
|
|
@ -159,10 +160,10 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const
|
|||
|
||||
for (; folders_it != folders_end; ++folders_it)
|
||||
{
|
||||
const LLFolderViewFolder * folder = *folders_it;
|
||||
const LLFolderViewFolder * folder_view = *folders_it;
|
||||
const LLInboxFolderViewFolder * inbox_folder_view = dynamic_cast<const LLInboxFolderViewFolder*>(folder_view);
|
||||
|
||||
// TODO: Replace this check with new "fresh" flag
|
||||
if (folder->getCreationDate() > 1500)
|
||||
if (inbox_folder_view && inbox_folder_view->isFresh())
|
||||
{
|
||||
fresh_item_count++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge
|
|||
LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p)
|
||||
: LLFolderViewFolder(p)
|
||||
, LLBadgeOwner(getHandle())
|
||||
, mFresh(false)
|
||||
, mFresh(true)
|
||||
{
|
||||
initBadgeParams(p.new_badge());
|
||||
}
|
||||
|
|
@ -150,6 +150,19 @@ LLInboxFolderViewFolder::~LLInboxFolderViewFolder()
|
|||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
time_t LLInboxFolderViewFolder::getCreationDate() const
|
||||
{
|
||||
time_t ret_val = LLFolderViewFolder::getCreationDate();
|
||||
|
||||
if (!mCreationDate)
|
||||
{
|
||||
updateFlag();
|
||||
}
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLInboxFolderViewFolder::draw()
|
||||
{
|
||||
|
|
@ -166,10 +179,7 @@ void LLInboxFolderViewFolder::draw()
|
|||
void LLInboxFolderViewFolder::updateFlag() const
|
||||
{
|
||||
LLDate saved_freshness_date = LLDate(gSavedSettings.getString("InboxFreshnessDate"));
|
||||
if (getCreationDate() > saved_freshness_date.secondsSinceEpoch())
|
||||
{
|
||||
mFresh = true;
|
||||
}
|
||||
mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch());
|
||||
}
|
||||
|
||||
void LLInboxFolderViewFolder::selectItem()
|
||||
|
|
|
|||
|
|
@ -66,12 +66,16 @@ public:
|
|||
|
||||
LLInboxFolderViewFolder(const Params& p);
|
||||
~LLInboxFolderViewFolder();
|
||||
|
||||
time_t getCreationDate() const;
|
||||
|
||||
void draw();
|
||||
|
||||
void updateFlag() const;
|
||||
void selectItem();
|
||||
void toggleOpen();
|
||||
|
||||
bool isFresh() const { return mFresh; }
|
||||
|
||||
protected:
|
||||
void setCreationDate(time_t creation_date_utc) const;
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@
|
|||
reference="AvatarListItemIconOfflineColor" />
|
||||
<color
|
||||
name="BadgeImageColor"
|
||||
value="0.44 0.69 0.56 1.0" />
|
||||
value="1.0 0.40 0.0 1.0" />
|
||||
<color
|
||||
name="BadgeBorderColor"
|
||||
value="0.9 0.9 0.9 1.0" />
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -7,11 +7,14 @@
|
|||
image="Badge_Background"
|
||||
image_color="BadgeImageColor"
|
||||
label_color="BadgeLabelColor"
|
||||
label_offset_horiz="0"
|
||||
label_offset_vert="0"
|
||||
location="top_left"
|
||||
location_percent_hcenter="85"
|
||||
location_percent_vcenter="85"
|
||||
padding_horiz="7"
|
||||
padding_vert="4"
|
||||
requests_front="true"
|
||||
mouse_opaque="false"
|
||||
>
|
||||
</badge>
|
||||
|
|
|
|||
|
|
@ -6,5 +6,14 @@
|
|||
item_top_pad="4"
|
||||
selection_image="Rounded_Square"
|
||||
>
|
||||
<new_badge label="New" location="right" padding_horiz="4" padding_vert="2" location_percent_hcenter="70" />
|
||||
<new_badge
|
||||
label="New"
|
||||
label_offset_horiz="-1"
|
||||
location="right"
|
||||
padding_horiz="4"
|
||||
padding_vert="1"
|
||||
location_percent_hcenter="70"
|
||||
border_image=""
|
||||
image="Badge_Background_New"
|
||||
/>
|
||||
</inbox_folder_view_folder>
|
||||
|
|
|
|||
Loading…
Reference in New Issue