summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2007-01-17 23:02:00 +0000
committerSteven Bennetts <steve@lindenlab.com>2007-01-17 23:02:00 +0000
commit71d28bdbf0baab9302c8f458e3bdbcfc60d656d4 (patch)
tree19f051897838d5a75e5ce1e776bb52a330173171 /indra/llui
parentfc664e93e62645fc6e9659664351e77f3c4b374f (diff)
merge release@56803 release-candidate@56833
Diffstat (limited to 'indra/llui')
-rw-r--r--indra/llui/llmenugl.cpp12
-rw-r--r--indra/llui/llmenugl.h2
-rw-r--r--indra/llui/llscrolllistctrl.cpp93
-rw-r--r--indra/llui/llscrolllistctrl.h12
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;