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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llinventorypanel.h
  3.  * @brief LLInventoryPanel
  4.  * class definition
  5.  *
  6.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2001-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LL_LLINVENTORYPANEL_H
  34. #define LL_LLINVENTORYPANEL_H
  35. #include "llassetstorage.h"
  36. #include "lldarray.h"
  37. #include "llfloater.h"
  38. #include "llinventory.h"
  39. #include "llinventoryfilter.h"
  40. #include "llfolderview.h"
  41. #include "llinventorymodel.h"
  42. #include "lluictrlfactory.h"
  43. #include <set>
  44. class LLFolderViewItem;
  45. class LLInventoryFilter;
  46. class LLInventoryModel;
  47. class LLInvFVBridge;
  48. class LLInventoryFVBridgeBuilder;
  49. class LLMenuBarGL;
  50. class LLCheckBoxCtrl;
  51. class LLSpinCtrl;
  52. class LLScrollContainer;
  53. class LLTextBox;
  54. class LLIconCtrl;
  55. class LLSaveFolderState;
  56. class LLFilterEditor;
  57. class LLTabContainer;
  58. class LLInventoryPanel : public LLPanel
  59. {
  60. //--------------------------------------------------------------------
  61. // Data
  62. //--------------------------------------------------------------------
  63. public:
  64. static const std::string DEFAULT_SORT_ORDER;
  65. static const std::string RECENTITEMS_SORT_ORDER;
  66. static const std::string INHERIT_SORT_ORDER;
  67. struct Filter : public LLInitParam::Block<Filter>
  68. {
  69. Optional<U32> sort_order;
  70. Optional<U32> types;
  71. Optional<std::string> search_string;
  72. Filter()
  73. : sort_order("sort_order"),
  74. types("types", 0xffffffff),
  75. search_string("search_string")
  76. {}
  77. };
  78. struct Params 
  79. : public LLInitParam::Block<Params, LLPanel::Params>
  80. {
  81. Optional<std::string> sort_order_setting;
  82. Optional<LLInventoryModel*> inventory;
  83. Optional<bool> allow_multi_select;
  84. Optional<Filter> filter;
  85. Optional<std::string>               start_folder;
  86. Params()
  87. : sort_order_setting("sort_order_setting"),
  88. inventory("", &gInventory),
  89. allow_multi_select("allow_multi_select", true),
  90. filter("filter"),
  91. start_folder("start_folder")
  92. {}
  93. };
  94. //--------------------------------------------------------------------
  95. // Initialization
  96. //--------------------------------------------------------------------
  97. protected:
  98. LLInventoryPanel(const Params&);
  99. friend class LLUICtrlFactory;
  100. public:
  101. virtual ~LLInventoryPanel();
  102. public:
  103. LLInventoryModel* getModel() { return mInventory; }
  104. BOOL postBuild();
  105. // LLView methods
  106. void draw();
  107. BOOL handleHover(S32 x, S32 y, MASK mask);
  108. BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
  109.    EDragAndDropType cargo_type,
  110.    void* cargo_data,
  111.    EAcceptance* accept,
  112.    std::string& tooltip_msg);
  113. // LLUICtrl methods
  114.  /*virtual*/ void onFocusLost();
  115.  /*virtual*/ void onFocusReceived();
  116. // Call this method to set the selection.
  117. void openAllFolders();
  118. void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
  119. void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
  120. void clearSelection();
  121. LLInventoryFilter* getFilter();
  122. void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
  123. U32 getFilterObjectTypes() const { return mFolders->getFilterObjectTypes(); }
  124. void setFilterPermMask(PermissionMask filter_perm_mask);
  125. U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
  126. void setFilterSubString(const std::string& string);
  127. const std::string getFilterSubString() { return mFolders->getFilterSubString(); }
  128. void setSortOrder(U32 order);
  129. U32 getSortOrder() { return mFolders->getSortOrder(); }
  130. void setSinceLogoff(BOOL sl);
  131. void setHoursAgo(U32 hours);
  132. BOOL getSinceLogoff();
  133. void setShowFolderState(LLInventoryFilter::EFolderShow show);
  134. LLInventoryFilter::EFolderShow getShowFolderState();
  135. void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); }
  136. // This method is called when something has changed about the inventory.
  137. void modelChanged(U32 mask);
  138. LLFolderView* getRootFolder() { return mFolders; }
  139. LLScrollContainer* getScrollableContainer() { return mScroller; }
  140. void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
  141. // Callbacks
  142. void doToSelected(const LLSD& userdata);
  143. void doCreate(const LLSD& userdata);
  144. bool beginIMSession();
  145. bool attachObject(const LLSD& userdata);
  146. // DEBUG ONLY:
  147. static void dumpSelectionInformation(void* user_data);
  148. void openSelected();
  149. void unSelectAll() { mFolders->setSelection(NULL, FALSE, FALSE); }
  150. static void onIdle(void* user_data);
  151. // Find whichever inventory panel is active / on top.
  152. // "Auto_open" determines if we open an inventory panel if none are open.
  153. static LLInventoryPanel *getActiveInventoryPanel(BOOL auto_open = TRUE);
  154. protected:
  155. void openStartFolderOrMyInventory(); // open the first level of inventory
  156. LLInventoryModel* mInventory;
  157. LLInventoryObserver* mInventoryObserver;
  158. BOOL  mAllowMultiSelect;
  159. std::string mSortOrderSetting;
  160. LLFolderView* mFolders;
  161. LLScrollContainer* mScroller;
  162. /**
  163.  * Pointer to LLInventoryFVBridgeBuilder.
  164.  *
  165.  * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with 
  166.  * another implementation.
  167.  * Take into account it will not be deleted by LLInventoryPanel itself.
  168.  */
  169. const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder;
  170. //--------------------------------------------------------------------
  171. // Hidden folders
  172. //--------------------------------------------------------------------
  173. public:
  174. void addHideFolderType(LLFolderType::EType folder_type);
  175. protected:
  176. BOOL getIsHiddenFolderType(LLFolderType::EType folder_type) const;
  177. private:
  178. std::vector<LLFolderType::EType> mHiddenFolderTypes;
  179. //--------------------------------------------------------------------
  180. // Initialization routines for building up the UI ("views")
  181. //--------------------------------------------------------------------
  182. public:
  183. BOOL  getIsViewsInitialized() const { return mViewsInitialized; }
  184. const LLUUID& getStartFolderID() const { return mStartFolderID; }
  185. const std::string&  getStartFolderString() { return mStartFolderString; }
  186. protected:
  187. // Builds the UI.  Call this once the inventory is usable.
  188. void  initializeViews();
  189. void rebuildViewsFor(const LLUUID& id); // Given the id and the parent, build all of the folder views.
  190. virtual void buildNewViews(const LLUUID& id);
  191. private:
  192. BOOL mBuildDefaultHierarchy; // default inventory hierarchy should be created in postBuild()
  193. BOOL mViewsInitialized; // Views have been generated
  194. // UUID of category from which hierarchy should be built.  Set with the 
  195. // "start_folder" xml property.  Default is LLUUID::null that means total Inventory hierarchy. 
  196. std::string         mStartFolderString;
  197. LLUUID mStartFolderID;
  198. };
  199. #endif // LL_LLINVENTORYPANEL_H