llinventoryfilter.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2. * @file llinventoryfilter.h
  3. * @brief Support for filtering your inventory to only display a subset of the
  4. * available items.
  5. *
  6. * $LicenseInfo:firstyear=2005&license=viewergpl$
  7. * Copyright (c) 2005-2010, Linden Research, Inc.
  8. * Second Life Viewer Source Code
  9. * The source code in this file ("Source Code") is provided by Linden Lab
  10. * to you under the terms of the GNU General Public License, version 2.0
  11. * ("GPL"), unless you have obtained a separate licensing agreement
  12. * ("Other License"), formally executed by you and Linden Lab.  Terms of
  13. * the GPL can be found in doc/GPL-license.txt in this distribution, or
  14. * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  15. * There are special exceptions to the terms and conditions of the GPL as
  16. * it is applied to this Source Code. View the full text of the exception
  17. * in the file doc/FLOSS-exception.txt in this software distribution, or
  18. * online at
  19. * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  20. * By copying, modifying or distributing this software, you acknowledge
  21. * that you have read and understood your obligations described above,
  22. * and agree to abide by those obligations.
  23. * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  24. * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  25. * COMPLETENESS OR PERFORMANCE.
  26. * $/LicenseInfo$
  27. */
  28. #ifndef LLINVENTORYFILTER_H
  29. #define LLINVENTORYFILTER_H
  30. #include "llinventorytype.h"
  31. #include "llpermissionsflags.h"
  32. class LLFolderViewItem;
  33. class LLInventoryFilter
  34. {
  35. public:
  36. enum EFolderShow
  37. {
  38. SHOW_ALL_FOLDERS,
  39. SHOW_NON_EMPTY_FOLDERS,
  40. SHOW_NO_FOLDERS
  41. };
  42. enum EFilterBehavior
  43. {
  44. FILTER_NONE, // nothing to do, already filtered
  45. FILTER_RESTART, // restart filtering from scratch
  46. FILTER_LESS_RESTRICTIVE, // existing filtered items will certainly pass this filter
  47. FILTER_MORE_RESTRICTIVE // if you didn't pass the previous filter, you definitely won't pass this one
  48. };
  49. enum EFilterType
  50. {
  51. FILTERTYPE_NONE = 0,
  52. FILTERTYPE_OBJECT = 1, // normal default search-by-object-type
  53. FILTERTYPE_CATEGORY = 2, // search by folder type
  54. FILTERTYPE_UUID = 4, // find the object with UUID and any links to it
  55. FILTERTYPE_DATE = 8 // search by date range
  56. };
  57. // REFACTOR: Change this to an enum.
  58. static const U32 SO_DATE = 1;
  59. static const U32 SO_FOLDERS_BY_NAME = 2;
  60. static const U32 SO_SYSTEM_FOLDERS_TO_TOP = 4;
  61. LLInventoryFilter(const std::string& name);
  62. virtual ~LLInventoryFilter();
  63. // +-------------------------------------------------------------------+
  64. // + Parameters
  65. // +-------------------------------------------------------------------+
  66. void  setFilterObjectTypes(U64 types);
  67. U32  getFilterObjectTypes() const;
  68. BOOL  isFilterObjectTypesWith(LLInventoryType::EType t) const;
  69. void  setFilterCategoryTypes(U64 types);
  70. void  setFilterUUID(const LLUUID &object_id);
  71. void  setFilterSubString(const std::string& string);
  72. const std::string&  getFilterSubString(BOOL trim = FALSE) const;
  73. BOOL  hasFilterString() const;
  74. void  setFilterPermissions(PermissionMask perms);
  75. PermissionMask  getFilterPermissions() const;
  76. void  setDateRange(time_t min_date, time_t max_date);
  77. void  setDateRangeLastLogoff(BOOL sl);
  78. time_t  getMinDate() const;
  79. time_t  getMaxDate() const;
  80. void  setHoursAgo(U32 hours);
  81. U32  getHoursAgo() const;
  82. // +-------------------------------------------------------------------+
  83. // + Execution And Results
  84. // +-------------------------------------------------------------------+
  85. BOOL  check(const LLFolderViewItem* item);
  86. BOOL  checkAgainstFilterType(const LLFolderViewItem* item);
  87. std::string::size_type getStringMatchOffset() const;
  88. // +-------------------------------------------------------------------+
  89. // + Presentation
  90. // +-------------------------------------------------------------------+
  91. void  setShowFolderState( EFolderShow state);
  92. EFolderShow  getShowFolderState() const;
  93. void  setSortOrder(U32 order);
  94. U32  getSortOrder() const;
  95. void  setEmptyLookupMessage(const std::string& message);
  96. const std::string& getEmptyLookupMessage() const;
  97. // +-------------------------------------------------------------------+
  98. // + Status
  99. // +-------------------------------------------------------------------+
  100. BOOL  isActive() const;
  101. BOOL  isModified() const;
  102. BOOL  isModifiedAndClear();
  103. BOOL  isSinceLogoff() const;
  104. void  clearModified();
  105. const std::string&  getName() const;
  106. const std::string&  getFilterText();
  107. //RN: this is public to allow system to externally force a global refilter
  108. void  setModified(EFilterBehavior behavior = FILTER_RESTART);
  109. // +-------------------------------------------------------------------+
  110. // + Count
  111. // +-------------------------------------------------------------------+
  112. void  setFilterCount(S32 count);
  113. S32  getFilterCount() const;
  114. void  decrementFilterCount();
  115. // +-------------------------------------------------------------------+
  116. // + Default
  117. // +-------------------------------------------------------------------+
  118. BOOL  isNotDefault() const;
  119. void  markDefault();
  120. void  resetDefault();
  121. // +-------------------------------------------------------------------+
  122. // + Generation
  123. // +-------------------------------------------------------------------+
  124. S32  getCurrentGeneration() const;
  125. S32  getMinRequiredGeneration() const;
  126. S32  getMustPassGeneration() const;
  127. // +-------------------------------------------------------------------+
  128. // + Conversion
  129. // +-------------------------------------------------------------------+
  130. void  toLLSD(LLSD& data) const;
  131. void  fromLLSD(LLSD& data);
  132. private:
  133. struct FilterOps
  134. {
  135. FilterOps();
  136. U32  mFilterTypes;
  137. U64 mFilterObjectTypes; // For _OBJECT
  138. U64 mFilterCategoryTypes; // For _CATEGORY
  139. LLUUID       mFilterUUID; // for UUID
  140. time_t mMinDate;
  141. time_t mMaxDate;
  142. U32 mHoursAgo;
  143. EFolderShow mShowFolderState;
  144. PermissionMask mPermissions;
  145. };
  146. U32 mOrder;
  147. U32  mLastLogoff;
  148. FilterOps mFilterOps;
  149. FilterOps mDefaultFilterOps;
  150. std::string::size_type mSubStringMatchOffset;
  151. std::string mFilterSubString;
  152. const std::string mName;
  153. S32 mFilterGeneration;
  154. S32 mMustPassGeneration;
  155. S32 mMinRequiredGeneration;
  156. S32 mNextFilterGeneration;
  157. S32 mFilterCount;
  158. EFilterBehavior  mFilterBehavior;
  159. BOOL  mModified;
  160. BOOL  mNeedTextRebuild;
  161. std::string  mFilterText;
  162. std::string  mEmptyLookupMessage;
  163. };
  164. #endif