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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llviewerinventory.h
  3.  * @brief Declaration of the inventory bits that only used on the viewer.
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLVIEWERINVENTORY_H
  33. #define LL_LLVIEWERINVENTORY_H
  34. #include "llinventory.h"
  35. #include "llframetimer.h"
  36. #include "llwearable.h"
  37. #include <boost/signals2.hpp> // boost::signals2::trackable
  38. class LLFolderView;
  39. class LLFolderBridge;
  40. class LLViewerInventoryCategory;
  41. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  42. // Class LLViewerInventoryItem
  43. //
  44. // An inventory item represents something that the current user has in
  45. // their inventory.
  46. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  47. class LLViewerInventoryItem : public LLInventoryItem, public boost::signals2::trackable
  48. {
  49. public:
  50. typedef LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array_t;
  51. protected:
  52. ~LLViewerInventoryItem( void ); // ref counted
  53. BOOL extractSortFieldAndDisplayName(S32* sortField, std::string* displayName) const { return extractSortFieldAndDisplayName(mName, sortField, displayName); }
  54. mutable std::string mDisplayName;
  55. public:
  56. virtual LLAssetType::EType getType() const;
  57. virtual const LLUUID& getAssetUUID() const;
  58. virtual const std::string& getName() const;
  59. virtual S32 getSortField() const;
  60. virtual void setSortField(S32 sortField);
  61. virtual const LLPermissions& getPermissions() const;
  62. virtual const LLUUID& getCreatorUUID() const;
  63. virtual const std::string& getDescription() const;
  64. virtual const LLSaleInfo& getSaleInfo() const;
  65. virtual LLInventoryType::EType getInventoryType() const;
  66. virtual bool isWearableType() const;
  67. virtual EWearableType getWearableType() const;
  68. virtual U32 getFlags() const;
  69. virtual time_t getCreationDate() const;
  70. virtual U32 getCRC32() const; // really more of a checksum.
  71. static BOOL extractSortFieldAndDisplayName(const std::string& name, S32* sortField, std::string* displayName);
  72. // construct a complete viewer inventory item
  73. LLViewerInventoryItem(const LLUUID& uuid, const LLUUID& parent_uuid,
  74.   const LLPermissions& permissions,
  75.   const LLUUID& asset_uuid,
  76.   LLAssetType::EType type,
  77.   LLInventoryType::EType inv_type,
  78.   const std::string& name, 
  79.   const std::string& desc,
  80.   const LLSaleInfo& sale_info,
  81.   U32 flags,
  82.   time_t creation_date_utc);
  83. // construct a viewer inventory item which has the minimal amount
  84. // of information to use in the UI.
  85. LLViewerInventoryItem(
  86. const LLUUID& item_id,
  87. const LLUUID& parent_id,
  88. const std::string& name,
  89. LLInventoryType::EType inv_type);
  90. // construct an invalid and incomplete viewer inventory item.
  91. // usually useful for unpacking or importing or what have you.
  92. // *NOTE: it is important to call setComplete() if you expect the
  93. // operations to provide all necessary information.
  94. LLViewerInventoryItem();
  95. // Create a copy of an inventory item from a pointer to another item
  96. // Note: Because InventoryItems are ref counted,
  97. //       reference copy (a = b) is prohibited
  98. LLViewerInventoryItem(const LLViewerInventoryItem* other);
  99. LLViewerInventoryItem(const LLInventoryItem* other);
  100. void copyViewerItem(const LLViewerInventoryItem* other);
  101. /*virtual*/ void copyItem(const LLInventoryItem* other);
  102. // construct a new clone of this item - it creates a new viewer
  103. // inventory item using the copy constructor, and returns it.
  104. // It is up to the caller to delete (unref) the item.
  105. void cloneViewerItem(LLPointer<LLViewerInventoryItem>& newitem) const;
  106. // virtual methods
  107. virtual void removeFromServer( void );
  108. virtual void updateParentOnServer(BOOL restamp) const;
  109. virtual void updateServer(BOOL is_new) const;
  110. void fetchFromServer(void) const;
  111. //virtual void packMessage(LLMessageSystem* msg) const;
  112. virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
  113. virtual BOOL unpackMessage(LLSD item);
  114. virtual BOOL importFile(LLFILE* fp);
  115. virtual BOOL importLegacyStream(std::istream& input_stream);
  116. // file handling on the viewer. These are not meant for anything
  117. // other than cacheing.
  118. bool exportFileLocal(LLFILE* fp) const;
  119. bool importFileLocal(LLFILE* fp);
  120. // new methods
  121. BOOL isComplete() const { return mIsComplete; }
  122. void setComplete(BOOL complete) { mIsComplete = complete; }
  123. //void updateAssetOnServer() const;
  124. virtual void packMessage(LLMessageSystem* msg) const;
  125. virtual void setTransactionID(const LLTransactionID& transaction_id);
  126. struct comparePointers
  127. {
  128. bool operator()(const LLPointer<LLViewerInventoryItem>& a, const LLPointer<LLViewerInventoryItem>& b)
  129. {
  130. return a->getName().compare(b->getName()) < 0;
  131. }
  132. };
  133. LLTransactionID getTransactionID() const { return mTransactionID; }
  134. bool getIsBrokenLink() const; // true if the baseitem this points to doesn't exist in memory.
  135. LLViewerInventoryItem *getLinkedItem() const;
  136. LLViewerInventoryCategory *getLinkedCategory() const;
  137. // Checks the items permissions (for owner, group, or everyone) and returns true if all mask bits are set.
  138. bool checkPermissionsSet(PermissionMask mask) const;
  139. // callback
  140. void onCallingCardNameLookup(const LLUUID& id, const std::string& first_name, const std::string& last_name);
  141. // If this is a broken link, try to fix it and any other identical link.
  142. BOOL regenerateLink();
  143. public:
  144. BOOL mIsComplete;
  145. LLTransactionID mTransactionID;
  146. };
  147. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  148. // Class LLViewerInventoryCategory
  149. //
  150. // An instance of this class represents a category of inventory
  151. // items. Users come with a set of default categories, and can create
  152. // new ones as needed.
  153. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  154. class LLViewerInventoryCategory  : public LLInventoryCategory
  155. {
  156. public:
  157. typedef LLDynamicArray<LLPointer<LLViewerInventoryCategory> > cat_array_t;
  158. protected:
  159. ~LLViewerInventoryCategory();
  160. public:
  161. LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
  162.   LLFolderType::EType preferred_type,
  163.   const std::string& name,
  164.   const LLUUID& owner_id);
  165. LLViewerInventoryCategory(const LLUUID& owner_id);
  166. // Create a copy of an inventory category from a pointer to another category
  167. // Note: Because InventoryCategorys are ref counted, reference copy (a = b)
  168. // is prohibited
  169. LLViewerInventoryCategory(const LLViewerInventoryCategory* other);
  170. void copyViewerCategory(const LLViewerInventoryCategory* other);
  171. virtual void removeFromServer();
  172. virtual void updateParentOnServer(BOOL restamp_children) const;
  173. virtual void updateServer(BOOL is_new) const;
  174. const LLUUID& getOwnerID() const { return mOwnerID; }
  175. // Version handling
  176. enum { VERSION_UNKNOWN = -1, VERSION_INITIAL = 1 };
  177. S32 getVersion() const { return mVersion; }
  178. void setVersion(S32 version) { mVersion = version; }
  179. // Returns true if a fetch was issued.
  180. bool fetchDescendents();
  181. // used to help make cacheing more robust - for example, if
  182. // someone is getting 4 packets but logs out after 3. the viewer
  183. // may never know the cache is wrong.
  184. enum { DESCENDENT_COUNT_UNKNOWN = -1 };
  185. S32 getDescendentCount() const { return mDescendentCount; }
  186. void setDescendentCount(S32 descendents) { mDescendentCount = descendents; }
  187. // file handling on the viewer. These are not meant for anything
  188. // other than cacheing.
  189. bool exportFileLocal(LLFILE* fp) const;
  190. bool importFileLocal(LLFILE* fp);
  191. void determineFolderType();
  192. void changeType(LLFolderType::EType new_folder_type);
  193. protected:
  194. LLUUID mOwnerID;
  195. S32 mVersion;
  196. S32 mDescendentCount;
  197. LLFrameTimer mDescendentsRequested;
  198. };
  199. class LLInventoryCallback : public LLRefCount
  200. {
  201. public:
  202. virtual void fire(const LLUUID& inv_item) = 0;
  203. };
  204. class WearOnAvatarCallback : public LLInventoryCallback
  205. {
  206. void fire(const LLUUID& inv_item);
  207. };
  208. class ModifiedCOFCallback : public LLInventoryCallback
  209. {
  210. void fire(const LLUUID& inv_item);
  211. };
  212. class LLViewerJointAttachment;
  213. class RezAttachmentCallback : public LLInventoryCallback
  214. {
  215. public:
  216. RezAttachmentCallback(LLViewerJointAttachment *attachmentp);
  217. void fire(const LLUUID& inv_item);
  218. protected:
  219. ~RezAttachmentCallback();
  220. private:
  221. LLViewerJointAttachment* mAttach;
  222. };
  223. class ActivateGestureCallback : public LLInventoryCallback
  224. {
  225. public:
  226. void fire(const LLUUID& inv_item);
  227. };
  228. class CreateGestureCallback : public LLInventoryCallback
  229. {
  230. public:
  231. void fire(const LLUUID& inv_item);
  232. };
  233. class AddFavoriteLandmarkCallback : public LLInventoryCallback
  234. {
  235. public:
  236. AddFavoriteLandmarkCallback() : mTargetLandmarkId(LLUUID::null) {}
  237. void setTargetLandmarkId(const LLUUID& target_uuid) { mTargetLandmarkId = target_uuid; }
  238. private:
  239. void fire(const LLUUID& inv_item);
  240. LLUUID mTargetLandmarkId;
  241. };
  242. // misc functions
  243. //void inventory_reliable_callback(void**, S32 status);
  244. class LLInventoryCallbackManager
  245. {
  246. public:
  247. LLInventoryCallbackManager();
  248. ~LLInventoryCallbackManager();
  249. void fire(U32 callback_id, const LLUUID& item_id);
  250. U32 registerCB(LLPointer<LLInventoryCallback> cb);
  251. private:
  252. std::map<U32, LLPointer<LLInventoryCallback> > mMap;
  253. U32 mLastCallback;
  254. static LLInventoryCallbackManager *sInstance;
  255. public:
  256. static bool is_instantiated() { return sInstance != NULL; }
  257. };
  258. extern LLInventoryCallbackManager gInventoryCallbacks;
  259. #define NOT_WEARABLE (EWearableType)0
  260. // *TODO: Find a home for these
  261. void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
  262.    const LLUUID& parent, const LLTransactionID& transaction_id,
  263.    const std::string& name,
  264.    const std::string& desc, LLAssetType::EType asset_type,
  265.    LLInventoryType::EType inv_type, EWearableType wtype,
  266.    U32 next_owner_perm,
  267.    LLPointer<LLInventoryCallback> cb);
  268. void create_inventory_callingcard(const LLUUID& avatar_id, const LLUUID& parent = LLUUID::null, LLPointer<LLInventoryCallback> cb=NULL);
  269. /**
  270.  * @brief Securely create a new inventory item by copying from another.
  271.  */
  272. void copy_inventory_item(
  273. const LLUUID& agent_id,
  274. const LLUUID& current_owner,
  275. const LLUUID& item_id,
  276. const LLUUID& parent_id,
  277. const std::string& new_name,
  278. LLPointer<LLInventoryCallback> cb);
  279. void link_inventory_item(
  280. const LLUUID& agent_id,
  281. const LLUUID& item_id,
  282. const LLUUID& parent_id,
  283. const std::string& new_name,
  284. const LLAssetType::EType asset_type,
  285. LLPointer<LLInventoryCallback> cb);
  286. void move_inventory_item(
  287. const LLUUID& agent_id,
  288. const LLUUID& session_id,
  289. const LLUUID& item_id,
  290. const LLUUID& parent_id,
  291. const std::string& new_name,
  292. LLPointer<LLInventoryCallback> cb);
  293. void copy_inventory_from_notecard(const LLUUID& object_id,
  294.   const LLUUID& notecard_inv_id,
  295.   const LLInventoryItem *src,
  296.   U32 callback_id = 0);
  297. void menu_create_inventory_item(LLFolderView* folder,
  298. LLFolderBridge* bridge,
  299. const LLSD& userdata,
  300. const LLUUID& default_parent_uuid = LLUUID::null);
  301. #endif // LL_LLVIEWERINVENTORY_H