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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llcompilequeue.h
  3.  * @brief LLCompileQueue class header file
  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_LLCOMPILEQUEUE_H
  33. #define LL_LLCOMPILEQUEUE_H
  34. #include "lldarray.h"
  35. #include "llinventory.h"
  36. #include "llviewerobject.h"
  37. #include "llvoinventorylistener.h"
  38. #include "llmap.h"
  39. #include "lluuid.h"
  40. #include "llfloater.h"
  41. #include "llscrolllistctrl.h"
  42. #include "llviewerinventory.h"
  43. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  44. // Class LLFloaterScriptQueue
  45. //
  46. // This class provides a mechanism of adding objects to a list that
  47. // will go through and execute action for the scripts on each object. The
  48. // objects will be accessed serially and the scripts may be
  49. // manipulated in parallel. For example, selecting two objects each
  50. // with three scripts will result in the first object having all three
  51. // scripts manipulated.
  52. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  53. class LLFloaterScriptQueue : public LLFloater, public LLVOInventoryListener
  54. {
  55. public:
  56. LLFloaterScriptQueue(const LLSD& key);
  57. virtual ~LLFloaterScriptQueue();
  58. /*virtual*/ BOOL postBuild();
  59. void setMono(bool mono) { mMono = mono; }
  60. // addObject() accepts an object id.
  61. void addObject(const LLUUID& id);
  62. // start() returns TRUE if the queue has started, otherwise FALSE.
  63. BOOL start();
  64. protected:
  65. // This is the callback method for the viewer object currently
  66. // being worked on.
  67. /*virtual*/ void inventoryChanged(LLViewerObject* obj,
  68.  InventoryObjectList* inv,
  69.  S32 serial_num,
  70.  void* queue);
  71. // This is called by inventoryChanged
  72. virtual void handleInventory(LLViewerObject* viewer_obj,
  73. InventoryObjectList* inv) = 0;
  74. static void onCloseBtn(void* user_data);
  75. // returns true if this is done
  76. BOOL isDone() const;
  77. // go to the next object. If no objects left, it falls out
  78. // silently and waits to be killed by the deleteIfDone() callback.
  79. BOOL nextObject();
  80. BOOL popNext();
  81. void setStartString(const std::string& s) { mStartString = s; }
  82. protected:
  83. // UI
  84. LLScrollListCtrl* mMessages;
  85. LLButton* mCloseBtn;
  86. // Object Queue
  87. LLDynamicArray<LLUUID> mObjectIDs;
  88. LLUUID mCurrentObjectID;
  89. bool mDone;
  90. std::string mStartString;
  91. bool mMono;
  92. };
  93. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  94. // Class LLFloaterCompileQueue
  95. //
  96. // This script queue will recompile each script.
  97. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  98. struct LLCompileQueueData
  99. {
  100. LLUUID mQueueID;
  101. LLUUID mItemId;
  102. LLCompileQueueData(const LLUUID& q_id, const LLUUID& item_id) :
  103. mQueueID(q_id), mItemId(item_id) {}
  104. };
  105. class LLAssetUploadQueue;
  106. class LLFloaterCompileQueue : public LLFloaterScriptQueue
  107. {
  108. friend class LLFloaterReg;
  109. public:
  110. static void onSaveBytecodeComplete(const LLUUID& asset_id,
  111. void* user_data,
  112. S32 status);
  113. // remove any object in mScriptScripts with the matching uuid.
  114. void removeItemByItemID(const LLUUID& item_id);
  115. LLAssetUploadQueue* getUploadQueue() { return mUploadQueue; }
  116. protected:
  117. LLFloaterCompileQueue(const LLSD& key);
  118. virtual ~LLFloaterCompileQueue();
  119. // This is called by inventoryChanged
  120. virtual void handleInventory(LLViewerObject* viewer_obj,
  121. InventoryObjectList* inv);
  122. // This is the callback for when each script arrives
  123. static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
  124. LLAssetType::EType type,
  125. void* user_data, S32 status, LLExtStat ext_status);
  126. static void onSaveTextComplete(const LLUUID& asset_id, void* user_data, S32 status, LLExtStat ext_status);
  127. static void onSaveBytecodeComplete(const LLUUID& asset_id,
  128.    void* user_data,
  129.    S32 status, LLExtStat ext_status);
  130. // compile the file given and save it out.
  131. void compile(const std::string& filename, const LLUUID& asset_id);
  132. // remove any object in mScriptScripts with the matching uuid.
  133. void removeItemByAssetID(const LLUUID& asset_id);
  134. // save the items indicated by the item id.
  135. void saveItemByItemID(const LLUUID& item_id);
  136. // find InventoryItem given item id.
  137. const LLInventoryItem* findItemByItemID(const LLUUID& item_id) const;
  138. protected:
  139. LLViewerInventoryItem::item_array_t mCurrentScripts;
  140. private:
  141. LLAssetUploadQueue* mUploadQueue;
  142. };
  143. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  144. // Class LLFloaterResetQueue
  145. //
  146. // This script queue will reset each script.
  147. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  148. class LLFloaterResetQueue : public LLFloaterScriptQueue
  149. {
  150. friend class LLFloaterReg;
  151. protected:
  152. LLFloaterResetQueue(const LLSD& key);
  153. virtual ~LLFloaterResetQueue();
  154. // This is called by inventoryChanged
  155. virtual void handleInventory(LLViewerObject* viewer_obj,
  156. InventoryObjectList* inv);
  157. };
  158. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  159. // Class LLFloaterRunQueue
  160. //
  161. // This script queue will set each script as running.
  162. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  163. class LLFloaterRunQueue : public LLFloaterScriptQueue
  164. {
  165. friend class LLFloaterReg;
  166. protected:
  167. LLFloaterRunQueue(const LLSD& key);
  168. virtual ~LLFloaterRunQueue();
  169. // This is called by inventoryChanged
  170. virtual void handleInventory(LLViewerObject* viewer_obj,
  171. InventoryObjectList* inv);
  172. };
  173. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  174. // Class LLFloaterNotRunQueue
  175. //
  176. // This script queue will set each script as not running.
  177. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  178. class LLFloaterNotRunQueue : public LLFloaterScriptQueue
  179. {
  180. friend class LLFloaterReg;
  181. protected:
  182. LLFloaterNotRunQueue(const LLSD& key);
  183. virtual ~LLFloaterNotRunQueue();
  184. // This is called by inventoryChanged
  185. virtual void handleInventory(LLViewerObject* viewer_obj,
  186. InventoryObjectList* inv);
  187. };
  188. #endif // LL_LLCOMPILEQUEUE_H