diff options
author | Steven Bennetts <steve@lindenlab.com> | 2007-01-17 23:02:00 +0000 |
---|---|---|
committer | Steven Bennetts <steve@lindenlab.com> | 2007-01-17 23:02:00 +0000 |
commit | 71d28bdbf0baab9302c8f458e3bdbcfc60d656d4 (patch) | |
tree | 19f051897838d5a75e5ce1e776bb52a330173171 /indra/llui | |
parent | fc664e93e62645fc6e9659664351e77f3c4b374f (diff) |
merge release@56803 release-candidate@56833
Diffstat (limited to 'indra/llui')
-rw-r--r-- | indra/llui/llmenugl.cpp | 12 | ||||
-rw-r--r-- | indra/llui/llmenugl.h | 2 | ||||
-rw-r--r-- | indra/llui/llscrolllistctrl.cpp | 93 | ||||
-rw-r--r-- | indra/llui/llscrolllistctrl.h | 12 |
4 files changed, 93 insertions, 26 deletions
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 8607d1d752..7d2df53f9b 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -385,7 +385,12 @@ void LLMenuItemGL::doIt( void ) { // close all open menus by default // if parent menu is actually visible (and we are not triggering menu item via accelerator) - if (!getMenu()->getTornOff() && getMenu()->getVisible()) + // HACK: do not call hidemenus() from a pie menu item, as most pie menu operations + // assume that the thing you clicked on stays selected (parcel and/or object) after the + // pie menu is gone --RN + if (getMenu()->getWidgetType() != WIDGET_TYPE_PIE_MENU + && !getMenu()->getTornOff() + && getMenu()->getVisible()) { ((LLMenuHolderGL*)getMenu()->getParent())->hideMenus(); } @@ -4103,6 +4108,11 @@ BOOL LLMenuBarGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent) { mAltKeyTrigger = TRUE; } + else // if any key other than ALT hit, clear out waiting for Alt key mode + { + mAltKeyTrigger = FALSE; + } + // before processing any other key, check to see if ALT key has triggered menu access checkMenuTrigger(); diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index c15f417e65..b9f7d033ac 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -680,9 +680,9 @@ public: virtual BOOL handleRightMouseDown( S32 x, S32 y, MASK mask ); static void setActivatedItem(LLMenuItemGL* item); -protected: BOOL hasVisibleMenu(); +protected: static LLViewHandle sItemLastSelectedHandle; static LLFrameTimer sItemActivationTimer; diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 5d11973b88..95ea2cbc37 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -32,16 +32,13 @@ const S32 LIST_BORDER_PAD = 2; // white space inside the border and to the left of the scrollbar -U32 LLScrollListCtrl::sSortColumn = 1; -BOOL LLScrollListCtrl::sSortAscending = TRUE; - // local structures & classes. struct SortScrollListItem { SortScrollListItem(const S32 sort_col, BOOL sort_ascending) { mSortCol = sort_col; - sSortAscending = sort_ascending; + mSortAscending = sort_ascending; } bool operator()(const LLScrollListItem* i1, const LLScrollListItem* i2) @@ -53,7 +50,7 @@ struct SortScrollListItem cell2 = i2->getColumn(mSortCol); S32 order = 1; - if (!sSortAscending) + if (!mSortAscending) { order = -1; } @@ -70,7 +67,7 @@ struct SortScrollListItem protected: S32 mSortCol; - S32 sSortAscending; + S32 mSortAscending; }; @@ -362,16 +359,20 @@ LLScrollListCtrl::LLScrollListCtrl(const LLString& name, const LLRect& rect, mFgUnselectedColor( LLUI::sColorsGroup->getColor("ScrollUnselectedColor") ), mFgDisabledColor( LLUI::sColorsGroup->getColor("ScrollDisabledColor") ), mHighlightedColor( LLUI::sColorsGroup->getColor("ScrollHighlightedColor") ), + mHighlightedItem(-1), mBorderThickness( 2 ), mOnDoubleClickCallback( NULL ), mOnMaximumSelectCallback( NULL ), - mHighlightedItem(-1), + mOnSortChangedCallback( NULL ), + mDrewSelected(FALSE), mBorder(NULL), - mDefaultColumn("SIMPLE"), mSearchColumn(0), + mDefaultColumn("SIMPLE"), + mNumDynamicWidthColumns(0), mTotalStaticColumnWidth(0), - mDrewSelected(FALSE) + mSortColumn(0), + mSortAscending(TRUE) { mItemListRect.setOriginAndSize( mBorderThickness + LIST_BORDER_PAD, @@ -585,10 +586,10 @@ BOOL LLScrollListCtrl::addItem( LLScrollListItem* item, EAddPosition pos ) break; case ADD_SORTED: - LLScrollListCtrl::sSortColumn = 0; - LLScrollListCtrl::sSortAscending = TRUE; + mSortColumn = 0; + mSortAscending = TRUE; mItemList.push_back(item); - std::sort(mItemList.begin(), mItemList.end(), SortScrollListItem(sSortColumn, sSortAscending)); + std::sort(mItemList.begin(), mItemList.end(), SortScrollListItem(mSortColumn, mSortAscending)); break; case ADD_BOTTOM: @@ -863,6 +864,33 @@ void LLScrollListCtrl::highlightNthItem(S32 target_index) } } +S32 LLScrollListCtrl::selectMultiple( LLDynamicArray<LLUUID> ids ) +{ + item_list::iterator iter; + S32 count = 0; + for (iter = mItemList.begin(); iter != mItemList.end(); iter++) + { + LLScrollListItem* item = *iter; + LLDynamicArray<LLUUID>::iterator iditr; + for(iditr = ids.begin(); iditr != ids.end(); ++iditr) + { + if (item->getEnabled() && (item->getUUID() == (*iditr))) + { + selectItem(item,FALSE); + ++count; + break; + } + } + if(ids.end() != iditr) ids.erase(iditr); + } + + if (mCommitOnSelectionChange) + { + commitIfChanged(); + } + return count; +} + S32 LLScrollListCtrl::getItemIndex( LLScrollListItem* target_item ) { S32 index = 0; @@ -1933,13 +1961,19 @@ void LLScrollListCtrl::onScrollChange( S32 new_pos, LLScrollbar* scrollbar, void // First column is column 0 void LLScrollListCtrl::sortByColumn(U32 column, BOOL ascending) { - LLScrollListCtrl::sSortColumn = column; - LLScrollListCtrl::sSortAscending = ascending; - std::sort(mItemList.begin(), mItemList.end(), SortScrollListItem(sSortColumn, sSortAscending)); + mSortColumn = column; + mSortAscending = ascending; + std::sort(mItemList.begin(), mItemList.end(), SortScrollListItem(mSortColumn, mSortAscending)); } void LLScrollListCtrl::sortByColumn(LLString name, BOOL ascending) { + if (name.empty()) + { + sortByColumn(mSortColumn, mSortAscending); + return; + } + std::map<LLString, LLScrollListColumn>::iterator itor = mColumns.find(name); if (itor != mColumns.end()) { @@ -2437,26 +2471,41 @@ void LLScrollListCtrl::onClickColumn(void *userdata) LLScrollListColumn *info = (LLScrollListColumn*)userdata; if (!info) return; + LLScrollListCtrl *parent = info->mParentCtrl; + if (!parent) return; + U32 column_index = info->mIndex; - LLScrollListColumn* column = info->mParentCtrl->mColumnsIndexed[info->mIndex]; + LLScrollListColumn* column = parent->mColumnsIndexed[info->mIndex]; if (column->mSortingColumn != column->mName) { - if (info->mParentCtrl->mColumns.find(column->mSortingColumn) != info->mParentCtrl->mColumns.end()) + if (parent->mColumns.find(column->mSortingColumn) != parent->mColumns.end()) { - LLScrollListColumn& info_redir = info->mParentCtrl->mColumns[column->mSortingColumn]; + LLScrollListColumn& info_redir = parent->mColumns[column->mSortingColumn]; column_index = info_redir.mIndex; } } - // TomY TODO: shouldn't these be non-static members? bool ascending = true; - if (column_index == LLScrollListCtrl::sSortColumn) + if (column_index == parent->mSortColumn) { - ascending = !LLScrollListCtrl::sSortAscending; + ascending = !parent->mSortAscending; } - info->mParentCtrl->sortByColumn(column_index, ascending); + parent->sortByColumn(column_index, ascending); + + if (parent->mOnSortChangedCallback) + { + parent->mOnSortChangedCallback(parent->getCallbackUserData()); + } +} + +std::string LLScrollListCtrl::getSortColumnName() +{ + LLScrollListColumn* column = mColumnsIndexed[mSortColumn]; + + if (column) return column->mName; + else return ""; } void LLScrollListCtrl::clearColumns() diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 426e817215..805efe8679 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -14,6 +14,7 @@ #include "lluictrl.h" #include "llctrlselectioninterface.h" +#include "lldarray.h" #include "llfontgl.h" #include "llui.h" #include "llstring.h" @@ -298,6 +299,7 @@ public: void highlightNthItem( S32 index ); void setDoubleClickCallback( void (*cb)(void*) ) { mOnDoubleClickCallback = cb; } void setMaxiumumSelectCallback( void (*cb)(void*) ) { mOnMaximumSelectCallback = cb; } + void setSortChangedCallback( void (*cb)(void*) ) { mOnSortChangedCallback = cb; } void swapWithNext(S32 index); void swapWithPrevious(S32 index); @@ -436,6 +438,11 @@ public: void setNumDynamicColumns(int num) { mNumDynamicWidthColumns = num; } void setTotalStaticColumnWidth(int width) { mTotalStaticColumnWidth = width; } + std::string getSortColumnName(); + BOOL getSortAscending() { return mSortAscending; } + + S32 selectMultiple( LLDynamicArray<LLUUID> ids ); + protected: void selectPrevItem(BOOL extend_selection); void selectNextItem(BOOL extend_selection); @@ -494,6 +501,7 @@ protected: S32 mBorderThickness; void (*mOnDoubleClickCallback)(void* userdata); void (*mOnMaximumSelectCallback)(void* userdata ); + void (*mOnSortChangedCallback)(void* userdata); S32 mHighlightedItem; LLViewBorder* mBorder; @@ -507,8 +515,8 @@ protected: S32 mNumDynamicWidthColumns; S32 mTotalStaticColumnWidth; - static U32 sSortColumn; - static BOOL sSortAscending; + U32 mSortColumn; + BOOL mSortAscending; std::map<LLString, LLScrollListColumn> mColumns; std::vector<LLScrollListColumn*> mColumnsIndexed; |