llviewquery.h

Go to the documentation of this file.
00001 
00032 #ifndef LL_LLVIEWQUERY_H
00033 #define LL_LLVIEWQUERY_H
00034 
00035 #include <list> 
00036 
00037 #include "llmemory.h"
00038 #include "llui.h"
00039 
00040 class LLView;
00041 
00042 typedef std::list<LLView *>                     viewList_t;
00043 typedef std::pair<BOOL, BOOL>           filterResult_t;
00044 
00045 // Abstract base class for all query filters.
00046 class LLQueryFilter
00047 {
00048 public:
00049         virtual ~LLQueryFilter() {};
00050         virtual filterResult_t operator() (const LLView* const view, const viewList_t & children) const = 0;
00051 };
00052 
00053 class LLQuerySorter
00054 {
00055 public:
00056         virtual ~LLQuerySorter() {};
00057         virtual void operator() (LLView * parent, viewList_t &children) const;
00058 };
00059 
00060 class LLLeavesFilter : public LLQueryFilter, public LLSingleton<LLLeavesFilter>
00061 {
00062         /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
00063 };
00064 
00065 class LLRootsFilter : public LLQueryFilter, public LLSingleton<LLRootsFilter>
00066 {
00067         /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
00068 };
00069 
00070 class LLVisibleFilter : public LLQueryFilter, public LLSingleton<LLVisibleFilter>
00071 {
00072         /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
00073 };
00074 
00075 class LLEnabledFilter : public LLQueryFilter, public LLSingleton<LLEnabledFilter>
00076 {
00077         /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
00078 };
00079 
00080 class LLTabStopFilter : public LLQueryFilter, public LLSingleton<LLTabStopFilter>
00081 {
00082         /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
00083 };
00084 
00085 class LLCtrlFilter : public LLQueryFilter, public LLSingleton<LLCtrlFilter>
00086 {
00087         /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
00088 };
00089 
00090 template <class T>
00091 class LLWidgetTypeFilter : public LLQueryFilter
00092 {
00093         /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const
00094         {
00095                 return filterResult_t(dynamic_cast<const T*>(view) != NULL, TRUE);
00096         }
00097 
00098 };
00099 
00100 // Algorithm for flattening
00101 class LLViewQuery
00102 {
00103 public:
00104         typedef std::list<const LLQueryFilter*>         filterList_t;
00105         typedef filterList_t::iterator                          filterList_iter_t;
00106         typedef filterList_t::const_iterator            filterList_const_iter_t;
00107 
00108         LLViewQuery() : mPreFilters(), mPostFilters(), mSorterp() {}
00109         virtual ~LLViewQuery() {}
00110 
00111         void addPreFilter(const LLQueryFilter* prefilter) { mPreFilters.push_back(prefilter); }
00112         void addPostFilter(const LLQueryFilter* postfilter) { mPostFilters.push_back(postfilter); }
00113         const filterList_t & getPreFilters() const { return mPreFilters; }
00114         const filterList_t & getPostFilters() const { return mPostFilters; }
00115 
00116         void setSorter(const LLQuerySorter* sorter) { mSorterp = sorter; }
00117         const LLQuerySorter* getSorter() const { return mSorterp; }
00118 
00119         viewList_t run(LLView * view) const;
00120         // syntactic sugar
00121         viewList_t operator () (LLView * view) const { return run(view); }
00122 
00123         // override this method to provide iteration over other types of children
00124         virtual void filterChildren(LLView * view, viewList_t & filtered_children) const;
00125 
00126 private:
00127 
00128         filterResult_t runFilters(LLView * view, const viewList_t children, const filterList_t filters) const;
00129 
00130         filterList_t mPreFilters;
00131         filterList_t mPostFilters;
00132         const LLQuerySorter* mSorterp;
00133 };
00134 
00135 class LLCtrlQuery : public LLViewQuery
00136 {
00137 public:
00138         LLCtrlQuery();
00139 };
00140 
00141 #endif // LL_LLVIEWQUERY_H

Generated on Fri May 16 08:33:01 2008 for SecondLife by  doxygen 1.5.5