diff options
| author | Christian Goetze <cg@lindenlab.com> | 2007-08-21 22:17:53 +0000 |
|---|---|---|
| committer | Christian Goetze <cg@lindenlab.com> | 2007-08-21 22:17:53 +0000 |
| commit | ce0a5fe14590b8d675b885fccd5f79d7ea17a302 (patch) | |
| tree | 3388e6f8ff02292ec4521d278c841801462945b8 /indra/llui/llscrolllistctrl.cpp | |
| parent | b699ae454d8477d19342d320758cd993d1d28cec (diff) | |
EFFECTIVE MERGE: svn merge -r 66133:68118 svn+ssh://svn/svn/linden/branches/maintenance into release
Actual action: branched maintenance-r68118, merged in release, then copied result into release
Diffstat (limited to 'indra/llui/llscrolllistctrl.cpp')
| -rw-r--r-- | indra/llui/llscrolllistctrl.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index e802b3426b..ffad4809e9 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -427,6 +427,8 @@ LLScrollListCtrl::LLScrollListCtrl(const LLString& name, const LLRect& rect, mSortColumn(-1), mSortAscending(TRUE), mSorted(TRUE), + mDirty(FALSE), + mOriginalSelection(-1), mDrewSelected(FALSE) { mItemListRect.setOriginAndSize( @@ -515,6 +517,7 @@ void LLScrollListCtrl::clearRows() mScrollLines = 0; mLastSelected = NULL; updateMaxContentWidth(NULL); + mDirty = FALSE; } @@ -547,10 +550,10 @@ std::vector<LLScrollListItem*> LLScrollListCtrl::getAllSelected() const return ret; } -S32 LLScrollListCtrl::getFirstSelectedIndex() +S32 LLScrollListCtrl::getFirstSelectedIndex() const { S32 CurSelectedIndex = 0; - item_list::iterator iter; + item_list::const_iterator iter; for (iter = mItemList.begin(); iter != mItemList.end(); iter++) { LLScrollListItem* item = *iter; @@ -865,6 +868,7 @@ BOOL LLScrollListCtrl::selectFirstItem() selectItem(itemp); } success = TRUE; + mOriginalSelection = 0; } else { @@ -898,6 +902,7 @@ BOOL LLScrollListCtrl::selectNthItem( S32 target_index ) { selectItem(itemp); success = TRUE; + mOriginalSelection = target_index; } } else @@ -1721,6 +1726,7 @@ BOOL LLScrollListCtrl::handleMouseUp(S32 x, S32 y, MASK mask) // always commit when mouse operation is completed inside list if (mItemListRect.pointInRect(x,y)) { + mDirty |= mSelectionChanged; mSelectionChanged = FALSE; onCommit(); } @@ -2121,6 +2127,7 @@ void LLScrollListCtrl::commitIfChanged() { if (mSelectionChanged) { + mDirty = TRUE; mSelectionChanged = FALSE; onCommit(); } @@ -2979,6 +2986,26 @@ void LLScrollListCtrl::setFocus(BOOL b) LLUICtrl::setFocus(b); } + +// virtual +BOOL LLScrollListCtrl::isDirty() const +{ + BOOL grubby = mDirty; + if ( !mAllowMultipleSelection ) + { + grubby = (mOriginalSelection != getFirstSelectedIndex()); + } + return grubby; +} + +// Clear dirty state +void LLScrollListCtrl::resetDirty() +{ + mDirty = FALSE; + mOriginalSelection = getFirstSelectedIndex(); +} + + //virtual void LLScrollListCtrl::onFocusReceived() { |
