summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2012-07-31 23:46:13 -0700
committerMerov Linden <merov@lindenlab.com>2012-07-31 23:46:13 -0700
commite9a484f98d0376a5651d4f6eb5a692db4f77c800 (patch)
tree356e58f9630cdcdfab83ec96e9578ca5c5a25e65 /indra/llui
parent8f7871911deba87e5ceed8f6f36c1cb2b429efe8 (diff)
CHUI-254 : Fix Inventory filter and item draw() to highlight matching substrings in inventory
Diffstat (limited to 'indra/llui')
-rw-r--r--indra/llui/llfolderviewitem.cpp47
-rw-r--r--indra/llui/llfolderviewitem.h2
-rw-r--r--indra/llui/llfolderviewmodel.h15
3 files changed, 36 insertions, 28 deletions
diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 0f486d06c9..368e3caea8 100644
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -106,8 +106,6 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
mHasVisibleChildren(FALSE),
mIndentation(0),
mItemHeight(p.item_height),
- //TODO RN: create interface for string highlighting
- //mStringMatchOffset(std::string::npos),
mControlLabelRotation(0.f),
mDragAndDropTarget(FALSE),
mLabel(p.name),
@@ -778,29 +776,28 @@ void LLFolderViewItem::draw()
//--------------------------------------------------------------------------------//
// Highlight string match
//
- //TODO RN: expose interface for highlighting
- //if (mStringMatchOffset != std::string::npos)
- //{
- // // don't draw backgrounds for zero-length strings
- // S32 filter_string_length = getRoot()->getFilterSubString().size();
- // if (filter_string_length > 0)
- // {
- // std::string combined_string = mLabel + mLabelSuffix;
- // S32 left = llround(text_left) + font->getWidth(combined_string, 0, mStringMatchOffset) - 1;
- // S32 right = left + font->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2;
- // S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);
- // S32 top = getRect().getHeight() - TOP_PAD;
- //
- // LLUIImage* box_image = default_params.selection_image;
- // LLRect box_rect(left, top, right, bottom);
- // box_image->draw(box_rect, sFilterBGColor);
- // F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mStringMatchOffset);
- // F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
- // font->renderUTF8( combined_string, mStringMatchOffset, match_string_left, yy,
- // sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
- // filter_string_length, S32_MAX, &right_x, FALSE );
- // }
- //}
+ if (mViewModelItem->hasFilterStringMatch())
+ {
+ // don't draw backgrounds for zero-length strings
+ std::string::size_type filter_string_length = mViewModelItem->getFilterStringSize();
+ if (filter_string_length > 0)
+ {
+ std::string combined_string = mLabel + mLabelSuffix;
+ S32 left = llround(text_left) + font->getWidth(combined_string, 0, mViewModelItem->getFilterStringOffset()) - 1;
+ S32 right = left + font->getWidth(combined_string, mViewModelItem->getFilterStringOffset(), filter_string_length) + 2;
+ S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);
+ S32 top = getRect().getHeight() - TOP_PAD;
+
+ LLUIImage* box_image = default_params.selection_image;
+ LLRect box_rect(left, top, right, bottom);
+ box_image->draw(box_rect, sFilterBGColor);
+ F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset());
+ F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
+ font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy,
+ sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
+ filter_string_length, S32_MAX, &right_x, FALSE );
+ }
+ }
}
const LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) const
diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h
index df007dd15d..e323237b13 100644
--- a/indra/llui/llfolderviewitem.h
+++ b/indra/llui/llfolderviewitem.h
@@ -103,8 +103,6 @@ protected:
S32 mDragStartX,
mDragStartY;
- //TODO RN: create interface for string highlighting
- //std::string::size_type mStringMatchOffset;
F32 mControlLabelRotation;
LLFolderView* mRoot;
bool mHasVisibleChildren;
diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h
index acdec53602..f655e6e4d6 100644
--- a/indra/llui/llfolderviewmodel.h
+++ b/indra/llui/llfolderviewmodel.h
@@ -73,6 +73,8 @@ public:
virtual bool showAllResults() const = 0;
+ virtual std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const = 0;
+ virtual std::string::size_type getFilterStringSize() const = 0;
// +-------------------------------------------------------------------+
// + Status
// +-------------------------------------------------------------------+
@@ -155,8 +157,11 @@ public:
virtual void filter( LLFolderViewFilter& filter) = 0;
virtual bool passedFilter(S32 filter_generation = -1) = 0;
virtual bool descendantsPassedFilter(S32 filter_generation = -1) = 0;
- virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation) = 0;
+ virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) = 0;
virtual void dirtyFilter() = 0;
+ virtual bool hasFilterStringMatch() = 0;
+ virtual std::string::size_type getFilterStringOffset() = 0;
+ virtual std::string::size_type getFilterStringSize() = 0;
virtual S32 getLastFilterGeneration() const = 0;
@@ -193,6 +198,8 @@ public:
mPassedFilter(true),
mPassedFolderFilter(true),
mPrevPassedAllFilters(false),
+ mStringMatchOffsetFilter(std::string::npos),
+ mStringFilterSize(0),
mFolderViewItem(NULL),
mLastFilterGeneration(-1),
mMostFilteredDescendantGeneration(-1),
@@ -216,6 +223,10 @@ public:
mParent->dirtyFilter();
}
}
+ bool hasFilterStringMatch() { return mStringMatchOffsetFilter != std::string::npos; }
+ std::string::size_type getFilterStringOffset() { return mStringMatchOffsetFilter; }
+ std::string::size_type getFilterStringSize() { return mStringFilterSize; }
+
virtual void addChild(LLFolderViewModelItem* child)
{
mChildren.push_back(child);
@@ -234,6 +245,8 @@ protected:
bool mPassedFilter;
bool mPassedFolderFilter;
bool mPrevPassedAllFilters;
+ std::string::size_type mStringMatchOffsetFilter;
+ std::string::size_type mStringFilterSize;
S32 mLastFilterGeneration;
S32 mMostFilteredDescendantGeneration;