SL-13119 Fixed label updates
parent
9e79e1a2e2
commit
8576eaa3bf
|
|
@ -122,7 +122,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
|
|||
: LLView(p),
|
||||
mLabelWidth(0),
|
||||
mLabelWidthDirty(false),
|
||||
mLabelNeedsRefresh(false),
|
||||
mSuffixNeedsRefresh(false),
|
||||
mLabelPaddingRight(DEFAULT_LABEL_PADDING_RIGHT),
|
||||
mParentFolder( NULL ),
|
||||
mIsSelected( FALSE ),
|
||||
|
|
@ -183,14 +183,20 @@ LLFolderViewItem::~LLFolderViewItem()
|
|||
BOOL LLFolderViewItem::postBuild()
|
||||
{
|
||||
LLFolderViewModelItem& vmi = *getViewModelItem();
|
||||
// getDisplayName() is slightly expensive and requires a filter reset
|
||||
// getDisplayName() is expensive (due to internal getLabelSuffix() and name building)
|
||||
// it also sets search strings so it requires a filter reset
|
||||
mLabel = vmi.getDisplayName();
|
||||
setToolTip(vmi.getName());
|
||||
|
||||
// Dirty the filter flag of the model from the view (CHUI-849)
|
||||
vmi.dirtyFilter();
|
||||
|
||||
mLabelNeedsRefresh = true;
|
||||
// Don't do full refresh on constructor if it is possible to avoid
|
||||
// it significantly slows down bulk view creation.
|
||||
// Todo: Ideally we need to move getDisplayName() out of constructor as well.
|
||||
// Like: make a logic that will let filter update search string,
|
||||
// while LLFolderViewItem::arrange() updates visual part
|
||||
mSuffixNeedsRefresh = true;
|
||||
mLabelWidthDirty = true;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -289,24 +295,51 @@ BOOL LLFolderViewItem::isPotentiallyVisible(S32 filter_generation)
|
|||
|
||||
void LLFolderViewItem::refresh()
|
||||
{
|
||||
LLFolderViewModelItem& vmi = *getViewModelItem();
|
||||
LLFolderViewModelItem& vmi = *getViewModelItem();
|
||||
|
||||
mLabel = vmi.getDisplayName();
|
||||
setToolTip(vmi.getName());
|
||||
// icons are slightly expensive to get, can be optimized
|
||||
// see LLInventoryIcon::getIcon()
|
||||
mIcon = vmi.getIcon();
|
||||
mIconOpen = vmi.getIconOpen();
|
||||
mIconOverlay = vmi.getIconOverlay();
|
||||
|
||||
if (mRoot->useLabelSuffix())
|
||||
{
|
||||
// Very Expensive!
|
||||
// Can do a number of expensive checks, like checking active motions, wearables or friend list
|
||||
mLabelStyle = vmi.getLabelStyle();
|
||||
mLabelSuffix = vmi.getLabelSuffix();
|
||||
}
|
||||
|
||||
// Dirty the filter flag of the model from the view (CHUI-849)
|
||||
vmi.dirtyFilter();
|
||||
|
||||
mLabelWidthDirty = true;
|
||||
mSuffixNeedsRefresh = false;
|
||||
}
|
||||
|
||||
void LLFolderViewItem::refreshSuffix()
|
||||
{
|
||||
LLFolderViewModelItem const* vmi = getViewModelItem();
|
||||
|
||||
// icons are slightly expensive to get, can be optimized
|
||||
// see LLInventoryIcon::getIcon()
|
||||
mIcon = vmi.getIcon();
|
||||
mIconOpen = vmi.getIconOpen();
|
||||
mIconOverlay = vmi.getIconOverlay();
|
||||
mIcon = vmi->getIcon();
|
||||
mIconOpen = vmi->getIconOpen();
|
||||
mIconOverlay = vmi->getIconOverlay();
|
||||
|
||||
if (mRoot->useLabelSuffix())
|
||||
{
|
||||
// Very Expensive!
|
||||
// Can do a number of expensive checks, like checking active motions, wearables or friend list
|
||||
mLabelStyle = vmi.getLabelStyle();
|
||||
mLabelSuffix = vmi.getLabelSuffix();
|
||||
mLabelStyle = vmi->getLabelStyle();
|
||||
mLabelSuffix = vmi->getLabelSuffix();
|
||||
}
|
||||
|
||||
mLabelWidthDirty = true;
|
||||
mLabelNeedsRefresh = false;
|
||||
mSuffixNeedsRefresh = false;
|
||||
}
|
||||
|
||||
// Utility function for LLFolderView
|
||||
|
|
@ -357,11 +390,11 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height )
|
|||
: 0;
|
||||
if (mLabelWidthDirty)
|
||||
{
|
||||
if (mLabelNeedsRefresh)
|
||||
if (mSuffixNeedsRefresh)
|
||||
{
|
||||
// Expensive. But despite refreshing label,
|
||||
// it is purely visual, so it is fine to do at our laisure
|
||||
refresh();
|
||||
refreshSuffix();
|
||||
}
|
||||
mLabelWidth = getLabelXPos() + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + mLabelPaddingRight;
|
||||
mLabelWidthDirty = false;
|
||||
|
|
|
|||
|
|
@ -90,12 +90,12 @@ protected:
|
|||
std::string mLabel;
|
||||
S32 mLabelWidth;
|
||||
bool mLabelWidthDirty;
|
||||
bool mLabelNeedsRefresh;
|
||||
S32 mLabelPaddingRight;
|
||||
LLFolderViewFolder* mParentFolder;
|
||||
LLPointer<LLFolderViewModelItem> mViewModelItem;
|
||||
LLFontGL::StyleFlags mLabelStyle;
|
||||
std::string mLabelSuffix;
|
||||
bool mSuffixNeedsRefresh; //suffix and icons
|
||||
LLUIImagePtr mIcon,
|
||||
mIconOpen,
|
||||
mIconOverlay;
|
||||
|
|
@ -268,8 +268,12 @@ public:
|
|||
virtual BOOL isPotentiallyVisible(S32 filter_generation = -1);
|
||||
|
||||
// refresh information from the object being viewed.
|
||||
// refreshes sufixes and sets icons. Expensive!
|
||||
virtual void refresh();
|
||||
// refreshes label, suffixes and sets icons. Expensive!
|
||||
// Causes filter update
|
||||
virtual void refresh();
|
||||
// refreshes suffixes and sets icons. Expensive!
|
||||
// Does not need filter update
|
||||
virtual void refreshSuffix();
|
||||
|
||||
// LLView functionality
|
||||
virtual BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
|
||||
|
|
|
|||
|
|
@ -431,10 +431,6 @@ void LLConversationViewSession::refresh()
|
|||
LLConversationItem* vmi = dynamic_cast<LLConversationItem*>(getViewModelItem());
|
||||
vmi->resetRefresh();
|
||||
|
||||
mLabel = vmi->getDisplayName(); // needs a filter reset
|
||||
setToolTip(vmi->getName());
|
||||
vmi->dirtyFilter();
|
||||
|
||||
if (mSessionTitle)
|
||||
{
|
||||
mSessionTitle->setText(vmi->getDisplayName());
|
||||
|
|
@ -626,10 +622,6 @@ void LLConversationViewParticipant::refresh()
|
|||
// *TODO: We should also do something with vmi->isModerator() to echo that state in the UI somewhat
|
||||
mSpeakingIndicator->setIsModeratorMuted(participant_model->isModeratorMuted());
|
||||
|
||||
mLabel = participant_model->getDisplayName(); // needs a filter reset
|
||||
setToolTip(participant_model->getName());
|
||||
participant_model->dirtyFilter();
|
||||
|
||||
// Do the regular upstream refresh
|
||||
LLFolderViewItem::refresh();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue