From b36dc363061ec5bf6b092c14193198e9a5eef816 Mon Sep 17 00:00:00 2001 From: Josh Bell Date: Fri, 9 Mar 2007 01:09:20 +0000 Subject: svn merge -r 58902:58986 svn+ssh://svn.lindenlab.com/svn/linden/branches/maintenance --> release --- indra/llui/llctrlselectioninterface.cpp | 88 +++++------ indra/llui/llctrlselectioninterface.h | 168 ++++++++++----------- indra/llui/llscrolllistctrl.cpp | 9 +- indra/llui/llviewquery.cpp | 252 ++++++++++++++++---------------- indra/llui/llviewquery.h | 178 +++++++++++----------- 5 files changed, 348 insertions(+), 347 deletions(-) (limited to 'indra/llui') diff --git a/indra/llui/llctrlselectioninterface.cpp b/indra/llui/llctrlselectioninterface.cpp index a58fb88e75..61044aa7da 100644 --- a/indra/llui/llctrlselectioninterface.cpp +++ b/indra/llui/llctrlselectioninterface.cpp @@ -1,44 +1,44 @@ -/** - * @file llctrlselectioninterface.cpp - * @brief Programmatic selection of items in a list. - * - * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. - * $License$ - */ - -#include "llctrlselectioninterface.h" - -#include "llsd.h" - -// virtual -LLCtrlSelectionInterface::~LLCtrlSelectionInterface() -{ } - -BOOL LLCtrlSelectionInterface::selectByValue(LLSD value) -{ - return setSelectedByValue(value, TRUE); -} - -BOOL LLCtrlSelectionInterface::deselectByValue(LLSD value) -{ - return setSelectedByValue(value, FALSE); -} - - -// virtual -LLCtrlListInterface::~LLCtrlListInterface() -{ } - -LLScrollListItem* LLCtrlListInterface::addSimpleElement(const LLString& value) -{ - return addSimpleElement(value, ADD_BOTTOM, LLSD()); -} - -LLScrollListItem* LLCtrlListInterface::addSimpleElement(const LLString& value, EAddPosition pos) -{ - return addSimpleElement(value, pos, LLSD()); -} - -// virtual -LLCtrlScrollInterface::~LLCtrlScrollInterface() -{ } +/** + * @file llctrlselectioninterface.cpp + * @brief Programmatic selection of items in a list. + * + * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "llctrlselectioninterface.h" + +#include "llsd.h" + +// virtual +LLCtrlSelectionInterface::~LLCtrlSelectionInterface() +{ } + +BOOL LLCtrlSelectionInterface::selectByValue(LLSD value) +{ + return setSelectedByValue(value, TRUE); +} + +BOOL LLCtrlSelectionInterface::deselectByValue(LLSD value) +{ + return setSelectedByValue(value, FALSE); +} + + +// virtual +LLCtrlListInterface::~LLCtrlListInterface() +{ } + +LLScrollListItem* LLCtrlListInterface::addSimpleElement(const LLString& value) +{ + return addSimpleElement(value, ADD_BOTTOM, LLSD()); +} + +LLScrollListItem* LLCtrlListInterface::addSimpleElement(const LLString& value, EAddPosition pos) +{ + return addSimpleElement(value, pos, LLSD()); +} + +// virtual +LLCtrlScrollInterface::~LLCtrlScrollInterface() +{ } diff --git a/indra/llui/llctrlselectioninterface.h b/indra/llui/llctrlselectioninterface.h index 4e2807e9a1..698d609593 100644 --- a/indra/llui/llctrlselectioninterface.h +++ b/indra/llui/llctrlselectioninterface.h @@ -1,84 +1,84 @@ -/** - * @file llctrlselectioninterface.h - * @brief Programmatic selection of items in a list. - * - * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. - * $License$ - */ - -#ifndef LLCTRLSELECTIONINTERFACE_H -#define LLCTRLSELECTIONINTERFACE_H - -#include "stdtypes.h" -#include "stdenums.h" -#include "llstring.h" - -class LLSD; -class LLUUID; -class LLScrollListItem; - -class LLCtrlSelectionInterface -{ -public: - virtual ~LLCtrlSelectionInterface(); - - enum EOperation - { - OP_DELETE = 1, - OP_SELECT, - OP_DESELECT, - }; - - virtual BOOL getCanSelect() const = 0; - - virtual BOOL selectFirstItem() = 0; - virtual BOOL selectNthItem( S32 index ) = 0; - - virtual S32 getFirstSelectedIndex() = 0; - - // TomY TODO: Simply cast the UUIDs to LLSDs, using the selectByValue function - virtual BOOL setCurrentByID( const LLUUID& id ) = 0; - virtual LLUUID getCurrentID() = 0; - - BOOL selectByValue(LLSD value); - BOOL deselectByValue(LLSD value); - virtual BOOL setSelectedByValue(LLSD value, BOOL selected) = 0; - virtual LLSD getSimpleSelectedValue() = 0; - - virtual BOOL isSelected(LLSD value) = 0; - - virtual BOOL operateOnSelection(EOperation op) = 0; - virtual BOOL operateOnAll(EOperation op) = 0; -}; - -class LLCtrlListInterface : public LLCtrlSelectionInterface -{ -public: - virtual ~LLCtrlListInterface(); - - virtual S32 getItemCount() const = 0; - virtual void addColumn(const LLSD& column, EAddPosition pos = ADD_BOTTOM) = 0; - virtual void clearColumns() = 0; - virtual void setColumnLabel(const LLString& column, const LLString& label) = 0; - // TomY TODO: Document this - virtual LLScrollListItem* addElement(const LLSD& value, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL) = 0; - - LLScrollListItem* addSimpleElement(const LLString& value); // defaults to bottom - LLScrollListItem* addSimpleElement(const LLString& value, EAddPosition pos); // defaults to no LLSD() id - virtual LLScrollListItem* addSimpleElement(const LLString& value, EAddPosition pos, const LLSD& id) = 0; - - virtual void clearRows() = 0; - virtual void sortByColumn(LLString name, BOOL ascending) = 0; -}; - -class LLCtrlScrollInterface -{ -public: - virtual ~LLCtrlScrollInterface(); - - virtual S32 getScrollPos() = 0; - virtual void setScrollPos( S32 pos ) = 0; - virtual void scrollToShowSelected() = 0; -}; - -#endif +/** + * @file llctrlselectioninterface.h + * @brief Programmatic selection of items in a list. + * + * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LLCTRLSELECTIONINTERFACE_H +#define LLCTRLSELECTIONINTERFACE_H + +#include "stdtypes.h" +#include "stdenums.h" +#include "llstring.h" + +class LLSD; +class LLUUID; +class LLScrollListItem; + +class LLCtrlSelectionInterface +{ +public: + virtual ~LLCtrlSelectionInterface(); + + enum EOperation + { + OP_DELETE = 1, + OP_SELECT, + OP_DESELECT, + }; + + virtual BOOL getCanSelect() const = 0; + + virtual BOOL selectFirstItem() = 0; + virtual BOOL selectNthItem( S32 index ) = 0; + + virtual S32 getFirstSelectedIndex() = 0; + + // TomY TODO: Simply cast the UUIDs to LLSDs, using the selectByValue function + virtual BOOL setCurrentByID( const LLUUID& id ) = 0; + virtual LLUUID getCurrentID() = 0; + + BOOL selectByValue(LLSD value); + BOOL deselectByValue(LLSD value); + virtual BOOL setSelectedByValue(LLSD value, BOOL selected) = 0; + virtual LLSD getSimpleSelectedValue() = 0; + + virtual BOOL isSelected(LLSD value) = 0; + + virtual BOOL operateOnSelection(EOperation op) = 0; + virtual BOOL operateOnAll(EOperation op) = 0; +}; + +class LLCtrlListInterface : public LLCtrlSelectionInterface +{ +public: + virtual ~LLCtrlListInterface(); + + virtual S32 getItemCount() const = 0; + virtual void addColumn(const LLSD& column, EAddPosition pos = ADD_BOTTOM) = 0; + virtual void clearColumns() = 0; + virtual void setColumnLabel(const LLString& column, const LLString& label) = 0; + // TomY TODO: Document this + virtual LLScrollListItem* addElement(const LLSD& value, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL) = 0; + + LLScrollListItem* addSimpleElement(const LLString& value); // defaults to bottom + LLScrollListItem* addSimpleElement(const LLString& value, EAddPosition pos); // defaults to no LLSD() id + virtual LLScrollListItem* addSimpleElement(const LLString& value, EAddPosition pos, const LLSD& id) = 0; + + virtual void clearRows() = 0; + virtual void sortByColumn(LLString name, BOOL ascending) = 0; +}; + +class LLCtrlScrollInterface +{ +public: + virtual ~LLCtrlScrollInterface(); + + virtual S32 getScrollPos() = 0; + virtual void setScrollPos( S32 pos ) = 0; + virtual void scrollToShowSelected() = 0; +}; + +#endif diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index f2ae318dca..35d5affa5d 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -377,20 +377,21 @@ 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 ), mOnSortChangedCallback( NULL ), - mDrewSelected(FALSE), + mHighlightedItem(-1), mBorder(NULL), - mSearchColumn(0), mDefaultColumn("SIMPLE"), + mSearchColumn(0), mNumDynamicWidthColumns(0), mTotalStaticColumnWidth(0), mSortColumn(0), - mSortAscending(TRUE) + mSortAscending(TRUE), + + mDrewSelected(FALSE) { mItemListRect.setOriginAndSize( mBorderThickness + LIST_BORDER_PAD, diff --git a/indra/llui/llviewquery.cpp b/indra/llui/llviewquery.cpp index 416ca623bc..650125d486 100644 --- a/indra/llui/llviewquery.cpp +++ b/indra/llui/llviewquery.cpp @@ -1,126 +1,126 @@ -/** - * @file llviewquery.cpp - * @brief Implementation of view query class. - * - * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. - * $License$ - */ - -#include "llview.h" -#include "lluictrl.h" -#include "llviewquery.h" - -void LLQuerySorter::operator() (LLView * parent, viewList_t &children) const {} - -filterResult_t LLNoLeavesFilter::operator() (const LLView* const view, const viewList_t & children) const -{ - return filterResult_t(!(view->getChildList()->size() == 0), TRUE); -} - -filterResult_t LLVisibleFilter::operator() (const LLView* const view, const viewList_t & children) const -{ - return filterResult_t(view->getVisible(), view->getVisible()); -} -filterResult_t LLEnabledFilter::operator() (const LLView* const view, const viewList_t & children) const -{ - return filterResult_t(view->getEnabled(), view->getEnabled()); -} -filterResult_t LLTabStopFilter::operator() (const LLView* const view, const viewList_t & children) const -{ - return filterResult_t(view->isCtrl() && static_cast(view)->hasTabStop(), - view->canFocusChildren()); -} - -// LLViewQuery - -LLViewQuery::LLViewQuery(): mPreFilters(), mPostFilters(), mSorterp() -{ -} - -void LLViewQuery::addPreFilter(const LLQueryFilter* prefilter) { mPreFilters.push_back(prefilter); } - -void LLViewQuery::addPostFilter(const LLQueryFilter* postfilter) { mPostFilters.push_back(postfilter); } - -const LLViewQuery::filterList_t & LLViewQuery::getPreFilters() const { return mPreFilters; } - -const LLViewQuery::filterList_t & LLViewQuery::getPostFilters() const { return mPostFilters; } - -void LLViewQuery::setSorter(const LLQuerySorter* sorterp) { mSorterp = sorterp; } -const LLQuerySorter* LLViewQuery::getSorter() const { return mSorterp; } - -viewList_t LLViewQuery::run(LLView * view) const -{ - viewList_t result; - - filterResult_t pre = runFilters(view, viewList_t(), mPreFilters); - if(!pre.first && !pre.second) - { - // skip post filters completely if we're not including ourselves or the children - return result; - } - if(pre.second) - { - // run filters on children - viewList_t filtered_children; - filterChildren(view, filtered_children); - filterResult_t post = runFilters(view, filtered_children, mPostFilters); - if(pre.first && post.first) - { - result.push_back(view); - } - if(post.second) - { - result.insert(result.end(), filtered_children.begin(), filtered_children.end()); - } - } - else - { - if(pre.first) - { - result.push_back(view); - } - } - return result; -} - -void LLViewQuery::filterChildren(LLView * view, viewList_t & filtered_children) const -{ - LLView::child_list_t views(*(view->getChildList())); - (*mSorterp)(view, views); // sort the children per the sorter - for(LLView::child_list_iter_t iter = views.begin(); - iter != views.end(); - iter++) - { - viewList_t indiv_children = this->run(*iter); - filtered_children.insert(filtered_children.end(), indiv_children.begin(), indiv_children.end()); - } -} - -filterResult_t LLViewQuery::runFilters(LLView * view, const viewList_t children, const filterList_t filters) const -{ - filterResult_t result = filterResult_t(TRUE, TRUE); - for(filterList_const_iter_t iter = filters.begin(); - iter != filters.end(); - iter++) - { - filterResult_t filtered = (**iter)(view, children); - result.first = result.first && filtered.first; - result.second = result.second && filtered.second; - } - return result; -} - -class SortByTabOrder : public LLQuerySorter, public LLSingleton -{ - /*virtual*/ void operator() (LLView * parent, LLView::child_list_t &children) const - { - children.sort(LLCompareByTabOrder(parent->getCtrlOrder())); - } -}; - -LLCtrlQuery::LLCtrlQuery() : - LLViewQuery() -{ - setSorter(SortByTabOrder::getInstance()); -} - +/** + * @file llviewquery.cpp + * @brief Implementation of view query class. + * + * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "llview.h" +#include "lluictrl.h" +#include "llviewquery.h" + +void LLQuerySorter::operator() (LLView * parent, viewList_t &children) const {} + +filterResult_t LLNoLeavesFilter::operator() (const LLView* const view, const viewList_t & children) const +{ + return filterResult_t(!(view->getChildList()->size() == 0), TRUE); +} + +filterResult_t LLVisibleFilter::operator() (const LLView* const view, const viewList_t & children) const +{ + return filterResult_t(view->getVisible(), view->getVisible()); +} +filterResult_t LLEnabledFilter::operator() (const LLView* const view, const viewList_t & children) const +{ + return filterResult_t(view->getEnabled(), view->getEnabled()); +} +filterResult_t LLTabStopFilter::operator() (const LLView* const view, const viewList_t & children) const +{ + return filterResult_t(view->isCtrl() && static_cast(view)->hasTabStop(), + view->canFocusChildren()); +} + +// LLViewQuery + +LLViewQuery::LLViewQuery(): mPreFilters(), mPostFilters(), mSorterp() +{ +} + +void LLViewQuery::addPreFilter(const LLQueryFilter* prefilter) { mPreFilters.push_back(prefilter); } + +void LLViewQuery::addPostFilter(const LLQueryFilter* postfilter) { mPostFilters.push_back(postfilter); } + +const LLViewQuery::filterList_t & LLViewQuery::getPreFilters() const { return mPreFilters; } + +const LLViewQuery::filterList_t & LLViewQuery::getPostFilters() const { return mPostFilters; } + +void LLViewQuery::setSorter(const LLQuerySorter* sorterp) { mSorterp = sorterp; } +const LLQuerySorter* LLViewQuery::getSorter() const { return mSorterp; } + +viewList_t LLViewQuery::run(LLView * view) const +{ + viewList_t result; + + filterResult_t pre = runFilters(view, viewList_t(), mPreFilters); + if(!pre.first && !pre.second) + { + // skip post filters completely if we're not including ourselves or the children + return result; + } + if(pre.second) + { + // run filters on children + viewList_t filtered_children; + filterChildren(view, filtered_children); + filterResult_t post = runFilters(view, filtered_children, mPostFilters); + if(pre.first && post.first) + { + result.push_back(view); + } + if(post.second) + { + result.insert(result.end(), filtered_children.begin(), filtered_children.end()); + } + } + else + { + if(pre.first) + { + result.push_back(view); + } + } + return result; +} + +void LLViewQuery::filterChildren(LLView * view, viewList_t & filtered_children) const +{ + LLView::child_list_t views(*(view->getChildList())); + (*mSorterp)(view, views); // sort the children per the sorter + for(LLView::child_list_iter_t iter = views.begin(); + iter != views.end(); + iter++) + { + viewList_t indiv_children = this->run(*iter); + filtered_children.insert(filtered_children.end(), indiv_children.begin(), indiv_children.end()); + } +} + +filterResult_t LLViewQuery::runFilters(LLView * view, const viewList_t children, const filterList_t filters) const +{ + filterResult_t result = filterResult_t(TRUE, TRUE); + for(filterList_const_iter_t iter = filters.begin(); + iter != filters.end(); + iter++) + { + filterResult_t filtered = (**iter)(view, children); + result.first = result.first && filtered.first; + result.second = result.second && filtered.second; + } + return result; +} + +class SortByTabOrder : public LLQuerySorter, public LLSingleton +{ + /*virtual*/ void operator() (LLView * parent, LLView::child_list_t &children) const + { + children.sort(LLCompareByTabOrder(parent->getCtrlOrder())); + } +}; + +LLCtrlQuery::LLCtrlQuery() : + LLViewQuery() +{ + setSorter(SortByTabOrder::getInstance()); +} + diff --git a/indra/llui/llviewquery.h b/indra/llui/llviewquery.h index ba59965c59..32852791af 100644 --- a/indra/llui/llviewquery.h +++ b/indra/llui/llviewquery.h @@ -1,89 +1,89 @@ -/** - * @file llviewquery.h - * @brief Query algorithm for flattening and filtering the view hierarchy. - * - * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. - * $License$ - */ - -#ifndef LL_LLVIEWQUERY_H -#define LL_LLVIEWQUERY_H - -#include - -#include "llmemory.h" - -class LLView; - -typedef std::list viewList_t; -typedef std::pair filterResult_t; - -// Abstract base class for all filters. -class LLQueryFilter : public LLRefCount -{ -public: - virtual filterResult_t operator() (const LLView* const view, const viewList_t & children) const =0; -}; - -class LLQuerySorter : public LLRefCount -{ -public: - virtual void operator() (LLView * parent, viewList_t &children) const; -}; - -class LLNoLeavesFilter : public LLQueryFilter, public LLSingleton -{ - /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; -}; -class LLVisibleFilter : public LLQueryFilter, public LLSingleton -{ - /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; -}; -class LLEnabledFilter : public LLQueryFilter, public LLSingleton -{ - /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; -}; -class LLTabStopFilter : public LLQueryFilter, public LLSingleton -{ - /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; -}; - -// Algorithm for flattening -class LLViewQuery -{ -public: - typedef std::list filterList_t; - typedef filterList_t::iterator filterList_iter_t; - typedef filterList_t::const_iterator filterList_const_iter_t; - - LLViewQuery(); - virtual ~LLViewQuery() {} - - void addPreFilter(const LLQueryFilter* prefilter); - void addPostFilter(const LLQueryFilter* postfilter); - const filterList_t & getPreFilters() const; - const filterList_t & getPostFilters() const; - - void setSorter(const LLQuerySorter* sorter); - const LLQuerySorter* getSorter() const; - - viewList_t run(LLView * view) const; - // syntactic sugar - viewList_t operator () (LLView * view) const { return run(view); } -protected: - // override this method to provide iteration over other types of children - virtual void filterChildren(LLView * view, viewList_t & filtered_children) const; - filterResult_t runFilters(LLView * view, const viewList_t children, const filterList_t filters) const; -protected: - filterList_t mPreFilters; - filterList_t mPostFilters; - const LLQuerySorter* mSorterp; -}; - -class LLCtrlQuery : public LLViewQuery -{ -public: - LLCtrlQuery(); -}; - -#endif +/** + * @file llviewquery.h + * @brief Query algorithm for flattening and filtering the view hierarchy. + * + * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLVIEWQUERY_H +#define LL_LLVIEWQUERY_H + +#include + +#include "llmemory.h" + +class LLView; + +typedef std::list viewList_t; +typedef std::pair filterResult_t; + +// Abstract base class for all filters. +class LLQueryFilter : public LLRefCount +{ +public: + virtual filterResult_t operator() (const LLView* const view, const viewList_t & children) const =0; +}; + +class LLQuerySorter : public LLRefCount +{ +public: + virtual void operator() (LLView * parent, viewList_t &children) const; +}; + +class LLNoLeavesFilter : public LLQueryFilter, public LLSingleton +{ + /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; +}; +class LLVisibleFilter : public LLQueryFilter, public LLSingleton +{ + /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; +}; +class LLEnabledFilter : public LLQueryFilter, public LLSingleton +{ + /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; +}; +class LLTabStopFilter : public LLQueryFilter, public LLSingleton +{ + /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const; +}; + +// Algorithm for flattening +class LLViewQuery +{ +public: + typedef std::list filterList_t; + typedef filterList_t::iterator filterList_iter_t; + typedef filterList_t::const_iterator filterList_const_iter_t; + + LLViewQuery(); + virtual ~LLViewQuery() {} + + void addPreFilter(const LLQueryFilter* prefilter); + void addPostFilter(const LLQueryFilter* postfilter); + const filterList_t & getPreFilters() const; + const filterList_t & getPostFilters() const; + + void setSorter(const LLQuerySorter* sorter); + const LLQuerySorter* getSorter() const; + + viewList_t run(LLView * view) const; + // syntactic sugar + viewList_t operator () (LLView * view) const { return run(view); } +protected: + // override this method to provide iteration over other types of children + virtual void filterChildren(LLView * view, viewList_t & filtered_children) const; + filterResult_t runFilters(LLView * view, const viewList_t children, const filterList_t filters) const; +protected: + filterList_t mPreFilters; + filterList_t mPostFilters; + const LLQuerySorter* mSorterp; +}; + +class LLCtrlQuery : public LLViewQuery +{ +public: + LLCtrlQuery(); +}; + +#endif -- cgit v1.2.3