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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llinventorybridge.h
  3.  * @brief Implementation of the Inventory-Folder-View-Bridge classes.
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-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_LLINVENTORYBRIDGE_H
  33. #define LL_LLINVENTORYBRIDGE_H
  34. #include "llcallingcard.h"
  35. #include "llfloaterproperties.h"
  36. #include "llfoldervieweventlistener.h"
  37. #include "llinventorymodel.h"
  38. #include "llinventoryobserver.h"
  39. #include "llviewercontrol.h"
  40. #include "llwearable.h"
  41. class LLInventoryPanel;
  42. class LLInventoryModel;
  43. class LLMenuGL;
  44. enum EInventoryIcon
  45. {
  46. TEXTURE_ICON_NAME,
  47. SOUND_ICON_NAME,
  48. CALLINGCARD_ONLINE_ICON_NAME,
  49. CALLINGCARD_OFFLINE_ICON_NAME,
  50. LANDMARK_ICON_NAME,
  51. LANDMARK_VISITED_ICON_NAME,
  52. SCRIPT_ICON_NAME,
  53. CLOTHING_ICON_NAME,
  54. OBJECT_ICON_NAME,
  55. OBJECT_MULTI_ICON_NAME,
  56. NOTECARD_ICON_NAME,
  57. BODYPART_ICON_NAME,
  58. SNAPSHOT_ICON_NAME,
  59. BODYPART_SHAPE_ICON_NAME,
  60. BODYPART_SKIN_ICON_NAME,
  61. BODYPART_HAIR_ICON_NAME,
  62. BODYPART_EYES_ICON_NAME,
  63. CLOTHING_SHIRT_ICON_NAME,
  64. CLOTHING_PANTS_ICON_NAME,
  65. CLOTHING_SHOES_ICON_NAME,
  66. CLOTHING_SOCKS_ICON_NAME,
  67. CLOTHING_JACKET_ICON_NAME,
  68. CLOTHING_GLOVES_ICON_NAME,
  69. CLOTHING_UNDERSHIRT_ICON_NAME,
  70. CLOTHING_UNDERPANTS_ICON_NAME,
  71. CLOTHING_SKIRT_ICON_NAME,
  72. CLOTHING_ALPHA_ICON_NAME,
  73. CLOTHING_TATTOO_ICON_NAME,
  74. ANIMATION_ICON_NAME,
  75. GESTURE_ICON_NAME,
  76. LINKITEM_ICON_NAME,
  77. LINKFOLDER_ICON_NAME,
  78. ICON_NAME_COUNT
  79. };
  80. extern std::string ICON_NAME[ICON_NAME_COUNT];
  81. typedef std::pair<LLUUID, LLUUID> two_uuids_t;
  82. typedef std::list<two_uuids_t> two_uuids_list_t;
  83. typedef std::pair<LLUUID, two_uuids_list_t> uuid_move_list_t;
  84. struct LLMoveInv
  85. {
  86. LLUUID mObjectID;
  87. LLUUID mCategoryID;
  88. two_uuids_list_t mMoveList;
  89. void (*mCallback)(S32, void*);
  90. void* mUserData;
  91. };
  92. struct LLAttachmentRezAction
  93. {
  94. LLUUID mItemID;
  95. S32 mAttachPt;
  96. };
  97. typedef std::vector<std::string> menuentry_vec_t;
  98. const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type);
  99. void hide_context_entries(LLMenuGL& menu, 
  100.   const menuentry_vec_t &entries_to_show,
  101.   const menuentry_vec_t &disabled_entries);
  102. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  103. // Class LLInvFVBridge (& its derived classes)
  104. //
  105. // Short for Inventory-Folder-View-Bridge. This is an
  106. // implementation class to be able to view inventory items.
  107. //
  108. // You'll want to call LLInvItemFVELister::createBridge() to actually create
  109. // an instance of this class. This helps encapsulate the
  110. // funcationality a bit. (except for folders, you can create those
  111. // manually...)
  112. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  113. class LLInvFVBridge : public LLFolderViewEventListener
  114. {
  115. public:
  116. // This method is a convenience function which creates the correct
  117. // type of bridge based on some basic information
  118. static LLInvFVBridge* createBridge(LLAssetType::EType asset_type,
  119.    LLAssetType::EType actual_asset_type,
  120.    LLInventoryType::EType inv_type,
  121.    LLInventoryPanel* inventory,
  122.    const LLUUID& uuid,
  123.    U32 flags = 0x00);
  124. virtual ~LLInvFVBridge() {}
  125. virtual const LLUUID& getUUID() const { return mUUID; }
  126. virtual void restoreItem() {}
  127. virtual void restoreToWorld() {}
  128. // LLFolderViewEventListener functions
  129. virtual const std::string& getName() const;
  130. virtual const std::string& getDisplayName() const;
  131. virtual PermissionMask getPermissionMask() const;
  132. virtual LLFolderType::EType getPreferredType() const;
  133. virtual time_t getCreationDate() const;
  134. virtual LLFontGL::StyleFlags getLabelStyle() const
  135. {
  136. return LLFontGL::NORMAL;
  137. }
  138. virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
  139. virtual void openItem() {}
  140. virtual void closeItem() {}
  141. virtual void previewItem() {openItem();}
  142. virtual void showProperties();
  143. virtual BOOL isItemRenameable() const { return TRUE; }
  144. //virtual BOOL renameItem(const std::string& new_name) {}
  145. virtual BOOL isItemRemovable() const;
  146. virtual BOOL isItemMovable() const;
  147. virtual BOOL isItemInTrash() const;
  148. //virtual BOOL removeItem() = 0;
  149. virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
  150. virtual void move(LLFolderViewEventListener* new_parent_bridge) {}
  151. virtual BOOL isItemCopyable() const { return FALSE; }
  152. virtual BOOL copyToClipboard() const { return FALSE; }
  153. virtual void cutToClipboard();
  154. virtual BOOL isClipboardPasteable() const;
  155. virtual BOOL isClipboardPasteableAsLink() const;
  156. virtual void pasteFromClipboard() {}
  157. virtual void pasteLinkFromClipboard() {}
  158. void getClipboardEntries(bool show_asset_id, menuentry_vec_t &items, 
  159. menuentry_vec_t &disabled_items, U32 flags);
  160. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  161. virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
  162. virtual BOOL dragOrDrop(MASK mask, BOOL drop,
  163. EDragAndDropType cargo_type,
  164. void* cargo_data) { return FALSE; }
  165. virtual LLInventoryType::EType getInventoryType() const { return mInvType; }
  166. // LLInvFVBridge functionality
  167. virtual void clearDisplayName() {}
  168. // Allow context menus to be customized for side panel.
  169. bool isInOutfitsSidePanel() const;
  170. //--------------------------------------------------------------------
  171. // Convenience functions for adding various common menu options.
  172. //--------------------------------------------------------------------
  173. protected:
  174. virtual void addTrashContextMenuOptions(menuentry_vec_t &items,
  175. menuentry_vec_t &disabled_items);
  176. virtual void addDeleteContextMenuOptions(menuentry_vec_t &items,
  177.  menuentry_vec_t &disabled_items);
  178. protected:
  179. LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid);
  180. LLInventoryObject* getInventoryObject() const;
  181. LLInventoryModel* getInventoryModel() const;
  182. BOOL isLinkedObjectInTrash() const; // Is this obj or its baseobj in the trash?
  183. BOOL isLinkedObjectMissing() const; // Is this a linked obj whose baseobj is not in inventory?
  184. BOOL isAgentInventory() const; // false if lost or in the inventory library
  185. BOOL isCOFFolder() const; // true if COF or descendent of.
  186. virtual BOOL isItemPermissive() const;
  187. static void changeItemParent(LLInventoryModel* model,
  188.  LLViewerInventoryItem* item,
  189.  const LLUUID& new_parent,
  190.  BOOL restamp);
  191. static void changeCategoryParent(LLInventoryModel* model,
  192.  LLViewerInventoryCategory* item,
  193.  const LLUUID& new_parent,
  194.  BOOL restamp);
  195. void removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch);
  196. protected:
  197. LLHandle<LLPanel> mInventoryPanel;
  198. const LLUUID mUUID; // item id
  199. LLInventoryType::EType mInvType;
  200. void purgeItem(LLInventoryModel *model, const LLUUID &uuid);
  201. };
  202. /**
  203.  * This class intended to build Folder View Bridge via LLInvFVBridge::createBridge.
  204.  * It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge.
  205.  */
  206. class LLInventoryFVBridgeBuilder
  207. {
  208. public:
  209.   virtual ~LLInventoryFVBridgeBuilder(){}
  210. virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type,
  211. LLAssetType::EType actual_asset_type,
  212. LLInventoryType::EType inv_type,
  213. LLInventoryPanel* inventory,
  214. const LLUUID& uuid,
  215. U32 flags = 0x00) const;
  216. };
  217. class LLItemBridge : public LLInvFVBridge
  218. {
  219. public:
  220. LLItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
  221. LLInvFVBridge(inventory, uuid) {}
  222. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  223. virtual void selectItem();
  224. virtual void restoreItem();
  225. virtual void restoreToWorld();
  226. virtual void gotoItem(LLFolderView *folder);
  227. virtual LLUIImagePtr getIcon() const;
  228. virtual const std::string& getDisplayName() const;
  229. virtual std::string getLabelSuffix() const;
  230. virtual LLFontGL::StyleFlags getLabelStyle() const;
  231. virtual PermissionMask getPermissionMask() const;
  232. virtual time_t getCreationDate() const;
  233. virtual BOOL isItemRenameable() const;
  234. virtual BOOL renameItem(const std::string& new_name);
  235. virtual BOOL removeItem();
  236. virtual BOOL isItemCopyable() const;
  237. virtual BOOL copyToClipboard() const;
  238. virtual BOOL hasChildren() const { return FALSE; }
  239. virtual BOOL isUpToDate() const { return TRUE; }
  240. // override for LLInvFVBridge
  241. virtual void clearDisplayName() { mDisplayName.clear(); }
  242. LLViewerInventoryItem* getItem() const;
  243. bool isAddAction(std::string action) const;
  244. bool isRemoveAction(std::string action) const;
  245. protected:
  246. virtual BOOL isItemPermissive() const;
  247. static void buildDisplayName(LLInventoryItem* item, std::string& name);
  248. mutable std::string mDisplayName;
  249. };
  250. class LLFolderBridge : public LLInvFVBridge
  251. {
  252. friend class LLInvFVBridge;
  253. public:
  254. BOOL dragItemIntoFolder(LLInventoryItem* inv_item,
  255. BOOL drop);
  256. BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category,
  257. BOOL drop);
  258. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  259. virtual void openItem();
  260. virtual void closeItem();
  261. virtual BOOL isItemRenameable() const;
  262. virtual void selectItem();
  263. virtual void restoreItem();
  264. virtual LLFolderType::EType getPreferredType() const;
  265. virtual LLUIImagePtr getIcon() const;
  266. virtual LLUIImagePtr getOpenIcon() const;
  267. static LLUIImagePtr getIcon(LLFolderType::EType preferred_type);
  268. virtual BOOL renameItem(const std::string& new_name);
  269. virtual BOOL removeItem();
  270. BOOL removeSystemFolder();
  271. bool removeItemResponse(const LLSD& notification, const LLSD& response);
  272. virtual void pasteFromClipboard();
  273. virtual void pasteLinkFromClipboard();
  274. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  275. virtual BOOL hasChildren() const;
  276. virtual BOOL dragOrDrop(MASK mask, BOOL drop,
  277. EDragAndDropType cargo_type,
  278. void* cargo_data);
  279. virtual BOOL isItemRemovable() const;
  280. virtual BOOL isItemMovable() const ;
  281. virtual BOOL isUpToDate() const;
  282. virtual BOOL isItemCopyable() const;
  283. virtual BOOL isClipboardPasteable() const;
  284. virtual BOOL isClipboardPasteableAsLink() const;
  285. virtual BOOL copyToClipboard() const;
  286. static void createWearable(LLFolderBridge* bridge, EWearableType type);
  287. static void createWearable(const LLUUID &parent_folder_id, EWearableType type);
  288. LLViewerInventoryCategory* getCategory() const;
  289. protected:
  290. LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid)
  291. : LLInvFVBridge(inventory, uuid),
  292. mCallingCards(FALSE),
  293. mWearables(FALSE),
  294. mMenu(NULL) {}
  295. // menu callbacks
  296. static void pasteClipboard(void* user_data);
  297. static void createNewCategory(void* user_data);
  298. static void createNewShirt(void* user_data);
  299. static void createNewPants(void* user_data);
  300. static void createNewShoes(void* user_data);
  301. static void createNewSocks(void* user_data);
  302. static void createNewJacket(void* user_data);
  303. static void createNewSkirt(void* user_data);
  304. static void createNewGloves(void* user_data);
  305. static void createNewUndershirt(void* user_data);
  306. static void createNewUnderpants(void* user_data);
  307. static void createNewShape(void* user_data);
  308. static void createNewSkin(void* user_data);
  309. static void createNewHair(void* user_data);
  310. static void createNewEyes(void* user_data);
  311. BOOL checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& typeToCheck);
  312. BOOL areAnyContentsWorn(LLInventoryModel* model) const;
  313. void modifyOutfit(BOOL append);
  314. void determineFolderType();
  315. public:
  316. static LLFolderBridge* sSelf;
  317. static void staticFolderOptionsMenu();
  318. void folderOptionsMenu();
  319. private:
  320. BOOL mCallingCards;
  321. BOOL mWearables;
  322. LLMenuGL* mMenu;
  323. menuentry_vec_t mItems;
  324. menuentry_vec_t mDisabledItems;
  325. };
  326. // DEPRECATED
  327. class LLScriptBridge : public LLItemBridge
  328. {
  329. friend class LLInvFVBridge;
  330. public:
  331. LLUIImagePtr getIcon() const;
  332. protected:
  333. LLScriptBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
  334. LLItemBridge(inventory, uuid) {}
  335. };
  336. class LLTextureBridge : public LLItemBridge
  337. {
  338. friend class LLInvFVBridge;
  339. public:
  340. virtual LLUIImagePtr getIcon() const;
  341. virtual void openItem();
  342. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  343. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  344. protected:
  345. LLTextureBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type) :
  346. LLItemBridge(inventory, uuid), mInvType(type) {}
  347. bool canSaveTexture(void);
  348. LLInventoryType::EType mInvType;
  349. };
  350. class LLSoundBridge : public LLItemBridge
  351. {
  352. friend class LLInvFVBridge;
  353. public:
  354. virtual LLUIImagePtr getIcon() const;
  355. virtual void openItem();
  356. virtual void previewItem();
  357. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  358. static void openSoundPreview(void*);
  359. protected:
  360. LLSoundBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
  361. LLItemBridge(inventory, uuid) {}
  362. };
  363. class LLLandmarkBridge : public LLItemBridge
  364. {
  365. friend class LLInvFVBridge;
  366. public:
  367. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  368. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  369. virtual LLUIImagePtr getIcon() const;
  370. virtual void openItem();
  371. protected:
  372. LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags = 0x00);
  373. protected:
  374. BOOL mVisited;
  375. };
  376. class LLCallingCardBridge;
  377. class LLCallingCardObserver : public LLFriendObserver
  378. {
  379. public:
  380. LLCallingCardObserver(LLCallingCardBridge* bridge) : mBridgep(bridge) {}
  381. virtual ~LLCallingCardObserver() { mBridgep = NULL; }
  382. virtual void changed(U32 mask);
  383. protected:
  384. LLCallingCardBridge* mBridgep;
  385. };
  386. class LLCallingCardBridge : public LLItemBridge
  387. {
  388. friend class LLInvFVBridge;
  389. public:
  390. virtual std::string getLabelSuffix() const;
  391. //virtual const std::string& getDisplayName() const;
  392. virtual LLUIImagePtr getIcon() const;
  393. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  394. virtual void openItem();
  395. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  396. //virtual void renameItem(const std::string& new_name);
  397. //virtual BOOL removeItem();
  398. virtual BOOL dragOrDrop(MASK mask, BOOL drop,
  399. EDragAndDropType cargo_type,
  400. void* cargo_data);
  401. void refreshFolderViewItem();
  402. protected:
  403. LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid );
  404. ~LLCallingCardBridge();
  405. protected:
  406. LLCallingCardObserver* mObserver;
  407. };
  408. class LLNotecardBridge : public LLItemBridge
  409. {
  410. friend class LLInvFVBridge;
  411. public:
  412. virtual LLUIImagePtr getIcon() const;
  413. virtual void openItem();
  414. protected:
  415. LLNotecardBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
  416. LLItemBridge(inventory, uuid) {}
  417. };
  418. class LLGestureBridge : public LLItemBridge
  419. {
  420. friend class LLInvFVBridge;
  421. public:
  422. virtual LLUIImagePtr getIcon() const;
  423. // Only suffix for gesture items, not task items, because only
  424. // gestures in your inventory can be active.
  425. virtual LLFontGL::StyleFlags getLabelStyle() const;
  426. virtual std::string getLabelSuffix() const;
  427. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  428. virtual void openItem();
  429. virtual BOOL removeItem();
  430. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  431. static void playGesture(const LLUUID& item_id);
  432. protected:
  433. LLGestureBridge(LLInventoryPanel* inventory, const LLUUID& uuid)
  434. : LLItemBridge(inventory, uuid) {}
  435. };
  436. class LLAnimationBridge : public LLItemBridge
  437. {
  438. friend class LLInvFVBridge;
  439. public:
  440. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  441. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  442. virtual LLUIImagePtr getIcon() const;
  443. virtual void openItem();
  444. protected:
  445. LLAnimationBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
  446. LLItemBridge(inventory, uuid) {}
  447. };
  448. class LLObjectBridge : public LLItemBridge
  449. {
  450. friend class LLInvFVBridge;
  451. public:
  452. virtual LLUIImagePtr getIcon() const;
  453. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  454. virtual void openItem();
  455. virtual LLFontGL::StyleFlags getLabelStyle() const;
  456. virtual std::string getLabelSuffix() const;
  457. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  458. virtual BOOL renameItem(const std::string& new_name);
  459. LLInventoryObject* getObject() const;
  460. protected:
  461. LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags);
  462. protected:
  463. static LLUUID sContextMenuItemID;  // Only valid while the context menu is open.
  464. LLInventoryType::EType mInvType;
  465. U32 mAttachPt;
  466. BOOL mIsMultiObject;
  467. };
  468. class LLLSLTextBridge : public LLItemBridge
  469. {
  470. friend class LLInvFVBridge;
  471. public:
  472. virtual LLUIImagePtr getIcon() const;
  473. virtual void openItem();
  474. protected:
  475. LLLSLTextBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
  476. LLItemBridge(inventory, uuid) {}
  477. };
  478. class LLWearableBridge : public LLItemBridge
  479. {
  480. friend class LLInvFVBridge;
  481. public:
  482. virtual LLUIImagePtr getIcon() const;
  483. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  484. virtual void openItem();
  485. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  486. virtual std::string getLabelSuffix() const;
  487. virtual BOOL renameItem(const std::string& new_name);
  488. static void onWearOnAvatar( void* userdata ); // Access to wearOnAvatar() from menu
  489. static BOOL canWearOnAvatar( void* userdata );
  490. static void onWearOnAvatarArrived( LLWearable* wearable, void* userdata );
  491. void wearOnAvatar();
  492. static void onWearAddOnAvatarArrived( LLWearable* wearable, void* userdata );
  493. void wearAddOnAvatar();
  494. static BOOL canEditOnAvatar( void* userdata ); // Access to editOnAvatar() from menu
  495. static void onEditOnAvatar( void* userdata );
  496. void editOnAvatar();
  497. static BOOL canRemoveFromAvatar( void* userdata );
  498. static void onRemoveFromAvatar( void* userdata );
  499. static void onRemoveFromAvatarArrived( LLWearable* wearable,  void* userdata );
  500. static void  removeItemFromAvatar(LLViewerInventoryItem *item);
  501. static void  removeAllClothesFromAvatar();
  502. void removeFromAvatar();
  503. protected:
  504. LLWearableBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLAssetType::EType asset_type, LLInventoryType::EType inv_type, EWearableType  wearable_type) :
  505. LLItemBridge(inventory, uuid),
  506. mAssetType( asset_type ),
  507. mInvType(inv_type),
  508. mWearableType(wearable_type)
  509. {}
  510. protected:
  511. LLAssetType::EType mAssetType;
  512. LLInventoryType::EType mInvType;
  513. EWearableType  mWearableType;
  514. };
  515. class LLLinkItemBridge : public LLItemBridge
  516. {
  517. friend class LLInvFVBridge;
  518. public:
  519. virtual const std::string& getPrefix() { return sPrefix; }
  520. virtual LLUIImagePtr getIcon() const;
  521. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  522. protected:
  523. LLLinkItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
  524. LLItemBridge(inventory, uuid) {}
  525. protected:
  526. static std::string sPrefix;
  527. };
  528. class LLLinkFolderBridge : public LLItemBridge
  529. {
  530. friend class LLInvFVBridge;
  531. public:
  532. virtual const std::string& getPrefix() { return sPrefix; }
  533. virtual LLUIImagePtr getIcon() const;
  534. virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
  535. virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
  536. virtual void gotoItem(LLFolderView *folder);
  537. protected:
  538. LLLinkFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
  539. LLItemBridge(inventory, uuid) {}
  540. const LLUUID &getFolderID() const;
  541. protected:
  542. static std::string sPrefix;
  543. };
  544. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  545. // Class LLInvFVBridgeAction (& its derived classes)
  546. //
  547. // This is an implementation class to be able to 
  548. // perform action to view inventory items.
  549. //
  550. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  551. class LLInvFVBridgeAction
  552. {
  553. public:
  554. // This method is a convenience function which creates the correct
  555. // type of bridge action based on some basic information
  556. static LLInvFVBridgeAction* createAction(LLAssetType::EType asset_type,
  557.  const LLUUID& uuid,LLInventoryModel* model);
  558. static void doAction(LLAssetType::EType asset_type,
  559.  const LLUUID& uuid, LLInventoryModel* model);
  560. static void doAction(const LLUUID& uuid, LLInventoryModel* model);
  561. virtual void doIt() {  };
  562. virtual ~LLInvFVBridgeAction(){}//need this because of warning on OSX
  563. protected:
  564. LLInvFVBridgeAction(const LLUUID& id,LLInventoryModel* model):mUUID(id),mModel(model){}
  565. LLViewerInventoryItem* getItem() const;
  566. protected:
  567. const LLUUID& mUUID; // item id
  568. LLInventoryModel* mModel;
  569. };
  570. class LLTextureBridgeAction: public LLInvFVBridgeAction
  571. {
  572. friend class LLInvFVBridgeAction;
  573. public:
  574. virtual void doIt() ;
  575. virtual ~LLTextureBridgeAction(){}
  576. protected:
  577. LLTextureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  578. };
  579. class LLSoundBridgeAction: public LLInvFVBridgeAction
  580. {
  581. friend class LLInvFVBridgeAction;
  582. public:
  583. virtual void doIt() ;
  584. virtual ~LLSoundBridgeAction(){}
  585. protected:
  586. LLSoundBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  587. };
  588. class LLLandmarkBridgeAction: public LLInvFVBridgeAction
  589. {
  590. friend class LLInvFVBridgeAction;
  591. public:
  592. virtual void doIt() ;
  593. virtual ~LLLandmarkBridgeAction(){}
  594. protected:
  595. LLLandmarkBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  596. };
  597. class LLCallingCardBridgeAction: public LLInvFVBridgeAction
  598. {
  599. friend class LLInvFVBridgeAction;
  600. public:
  601. virtual void doIt() ;
  602. virtual ~LLCallingCardBridgeAction(){}
  603. protected:
  604. LLCallingCardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  605. };
  606. class LLNotecardBridgeAction: public LLInvFVBridgeAction
  607. {
  608. friend class LLInvFVBridgeAction;
  609. public:
  610. virtual void doIt() ;
  611. virtual ~LLNotecardBridgeAction(){}
  612. protected:
  613. LLNotecardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  614. };
  615. class LLGestureBridgeAction: public LLInvFVBridgeAction
  616. {
  617. friend class LLInvFVBridgeAction;
  618. public:
  619. virtual void doIt() ;
  620. virtual ~LLGestureBridgeAction(){}
  621. protected:
  622. LLGestureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  623. };
  624. class LLAnimationBridgeAction: public LLInvFVBridgeAction
  625. {
  626. friend class LLInvFVBridgeAction;
  627. public:
  628. virtual void doIt() ;
  629. virtual ~LLAnimationBridgeAction(){}
  630. protected:
  631. LLAnimationBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  632. };
  633. class LLObjectBridgeAction: public LLInvFVBridgeAction
  634. {
  635. friend class LLInvFVBridgeAction;
  636. public:
  637. virtual void doIt() ;
  638. virtual ~LLObjectBridgeAction(){}
  639. protected:
  640. LLObjectBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  641. };
  642. class LLLSLTextBridgeAction: public LLInvFVBridgeAction
  643. {
  644. friend class LLInvFVBridgeAction;
  645. public:
  646. virtual void doIt() ;
  647. virtual ~LLLSLTextBridgeAction(){}
  648. protected:
  649. LLLSLTextBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  650. };
  651. class LLWearableBridgeAction: public LLInvFVBridgeAction
  652. {
  653. friend class LLInvFVBridgeAction;
  654. public:
  655. virtual void doIt();
  656. virtual ~LLWearableBridgeAction(){}
  657. protected:
  658. LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
  659. BOOL isItemInTrash() const;
  660. // return true if the item is in agent inventory. if false, it
  661. // must be lost or in the inventory library.
  662. BOOL isAgentInventory() const;
  663. void wearOnAvatar();
  664. };
  665. void wear_inventory_item_on_avatar(LLInventoryItem* item);
  666. class LLViewerJointAttachment;
  667. void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment);
  668. // Move items from an in-world object's "Contents" folder to a specified
  669. // folder in agent inventory.
  670. BOOL move_inv_category_world_to_agent(const LLUUID& object_id, 
  671.   const LLUUID& category_id,
  672.   BOOL drop,
  673.   void (*callback)(S32, void*) = NULL,
  674.   void* user_data = NULL);
  675. void teleport_via_landmark(const LLUUID& asset_id);
  676. // Utility function to hide all entries except those in the list
  677. void hide_context_entries(LLMenuGL& menu, 
  678. const menuentry_vec_t &entries_to_show, 
  679. const menuentry_vec_t &disabled_entries);
  680. #endif // LL_LLINVENTORYBRIDGE_H