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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llpreviewscript.h
  3.  * @brief LLPreviewScript class definition
  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_LLPREVIEWSCRIPT_H
  33. #define LL_LLPREVIEWSCRIPT_H
  34. #include "lldarray.h"
  35. #include "llpreview.h"
  36. #include "lltabcontainer.h"
  37. #include "llinventory.h"
  38. #include "llcombobox.h"
  39. #include "lliconctrl.h"
  40. #include "llframetimer.h"
  41. class LLMessageSystem;
  42. class LLTextEditor;
  43. class LLButton;
  44. class LLCheckBoxCtrl;
  45. class LLScrollListCtrl;
  46. class LLViewerObject;
  47. struct  LLEntryAndEdCore;
  48. class LLMenuBarGL;
  49. class LLFloaterScriptSearch;
  50. class LLKeywordToken;
  51. class LLVFS;
  52. class LLViewerInventoryItem;
  53. // Inner, implementation class.  LLPreviewScript and LLLiveLSLEditor each own one of these.
  54. class LLScriptEdCore : public LLPanel
  55. {
  56. friend class LLPreviewScript;
  57. friend class LLPreviewLSL;
  58. friend class LLLiveLSLEditor;
  59. friend class LLFloaterScriptSearch;
  60. public:
  61. LLScriptEdCore(
  62. const std::string& sample,
  63. const LLHandle<LLFloater>& floater_handle,
  64. void (*load_callback)(void* userdata),
  65. void (*save_callback)(void* userdata, BOOL close_after_save),
  66. void (*search_replace_callback)(void* userdata),
  67. void* userdata,
  68. S32 bottom_pad = 0); // pad below bottom row of buttons
  69. ~LLScriptEdCore();
  70. void initMenu();
  71. virtual void draw();
  72. /*virtual*/ BOOL postBuild();
  73. BOOL canClose();
  74. void            setScriptText(const std::string& text, BOOL is_valid);
  75. void doSave( BOOL close_after_save );
  76. bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response);
  77. bool handleReloadFromServerDialog(const LLSD& notification, const LLSD& response);
  78. static void onCheckLock(LLUICtrl*, void*);
  79. static void onHelpComboCommit(LLUICtrl* ctrl, void* userdata);
  80. static void onClickBack(void* userdata);
  81. static void onClickForward(void* userdata);
  82. static void onBtnInsertSample(void*);
  83. static void onBtnInsertFunction(LLUICtrl*, void*);
  84. private:
  85. void onBtnHelp();
  86. void onBtnDynamicHelp();
  87. void onBtnUndoChanges();
  88. bool hasChanged();
  89. void selectFirstError();
  90. virtual BOOL handleKeyHere(KEY key, MASK mask);
  91. void enableSave(BOOL b) {mEnableSave = b;}
  92. protected:
  93. void deleteBridges();
  94. void setHelpPage(const std::string& help_string);
  95. void updateDynamicHelp(BOOL immediate = FALSE);
  96. void addHelpItemToHistory(const std::string& help_string);
  97. static void onErrorList(LLUICtrl*, void* user_data);
  98. private:
  99. std::string mSampleText;
  100. LLTextEditor* mEditor;
  101. void (*mLoadCallback)(void* userdata);
  102. void (*mSaveCallback)(void* userdata, BOOL close_after_save);
  103. void (*mSearchReplaceCallback) (void* userdata);
  104. void* mUserdata;
  105. LLComboBox *mFunctions;
  106. BOOL mForceClose;
  107. LLPanel* mCodePanel;
  108. LLScrollListCtrl* mErrorList;
  109. LLDynamicArray<LLEntryAndEdCore*> mBridges;
  110. LLHandle<LLFloater> mLiveHelpHandle;
  111. LLKeywordToken* mLastHelpToken;
  112. LLFrameTimer mLiveHelpTimer;
  113. S32 mLiveHelpHistorySize;
  114. BOOL mEnableSave;
  115. BOOL mHasScriptData;
  116. };
  117. // Used to view and edit a LSL from your inventory.
  118. class LLPreviewLSL : public LLPreview
  119. {
  120. public:
  121. LLPreviewLSL(const LLSD& key );
  122. virtual void callbackLSLCompileSucceeded();
  123. virtual void callbackLSLCompileFailed(const LLSD& compile_errors);
  124. /*virtual*/ BOOL postBuild();
  125. protected:
  126. virtual BOOL canClose();
  127. void closeIfNeeded();
  128. virtual void loadAsset();
  129. void saveIfNeeded();
  130. void uploadAssetViaCaps(const std::string& url,
  131. const std::string& filename, 
  132. const LLUUID& item_id);
  133. void uploadAssetLegacy(const std::string& filename,
  134. const LLUUID& item_id,
  135. const LLTransactionID& tid);
  136. static void onSearchReplace(void* userdata);
  137. static void onLoad(void* userdata);
  138. static void onSave(void* userdata, BOOL close_after_save);
  139. static void onLoadComplete(LLVFS *vfs, const LLUUID& uuid,
  140.    LLAssetType::EType type,
  141.    void* user_data, S32 status, LLExtStat ext_status);
  142. static void onSaveComplete(const LLUUID& uuid, void* user_data, S32 status, LLExtStat ext_status);
  143. static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
  144. protected:
  145. static void* createScriptEdPanel(void* userdata);
  146. protected:
  147. LLScriptEdCore* mScriptEd;
  148. // Can safely close only after both text and bytecode are uploaded
  149. S32 mPendingUploads;
  150. };
  151. // Used to view and edit an LSL that is attached to an object.
  152. class LLLiveLSLEditor : public LLPreview
  153. {
  154. public: 
  155. LLLiveLSLEditor(const LLSD& key);
  156. ~LLLiveLSLEditor();
  157. static void processScriptRunningReply(LLMessageSystem* msg, void**);
  158. virtual void callbackLSLCompileSucceeded(const LLUUID& task_id,
  159. const LLUUID& item_id,
  160. bool is_script_running);
  161. virtual void callbackLSLCompileFailed(const LLSD& compile_errors);
  162. /*virtual*/ BOOL postBuild();
  163. void setIsNew() { mIsNew = TRUE; }
  164. private:
  165. virtual BOOL canClose();
  166. void closeIfNeeded();
  167. virtual void draw();
  168. virtual void loadAsset();
  169. void loadAsset(BOOL is_new);
  170. void saveIfNeeded();
  171. void uploadAssetViaCaps(const std::string& url,
  172. const std::string& filename, 
  173. const LLUUID& task_id,
  174. const LLUUID& item_id,
  175. BOOL is_running);
  176. void uploadAssetLegacy(const std::string& filename,
  177.    LLViewerObject* object,
  178.    const LLTransactionID& tid,
  179.    BOOL is_running);
  180. BOOL monoChecked() const;
  181. static void onSearchReplace(void* userdata);
  182. static void onLoad(void* userdata);
  183. static void onSave(void* userdata, BOOL close_after_save);
  184. static void onLoadComplete(LLVFS *vfs, const LLUUID& asset_uuid,
  185.    LLAssetType::EType type,
  186.    void* user_data, S32 status, LLExtStat ext_status);
  187. static void onSaveTextComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
  188. static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
  189. static void onRunningCheckboxClicked(LLUICtrl*, void* userdata);
  190. static void onReset(void* userdata);
  191. //  void loadScriptText(const std::string& filename); // unused
  192. void loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type);
  193. static void onErrorList(LLUICtrl*, void* user_data);
  194. static void* createScriptEdPanel(void* userdata);
  195. static void onMonoCheckboxClicked(LLUICtrl*, void* userdata);
  196. private:
  197. bool mIsNew;
  198. LLScriptEdCore* mScriptEd;
  199. //LLUUID mTransmitID;
  200. LLCheckBoxCtrl* mRunningCheckbox;
  201. BOOL mAskedForRunningInfo;
  202. BOOL mHaveRunningInfo;
  203. LLButton* mResetButton;
  204. LLPointer<LLViewerInventoryItem> mItem;
  205. BOOL mCloseAfterSave;
  206. // need to save both text and script, so need to decide when done
  207. S32 mPendingUploads;
  208. BOOL getIsModifiable() const { return mIsModifiable; } // Evaluated on load assert
  209. LLCheckBoxCtrl* mMonoCheckbox;
  210. BOOL mIsModifiable;
  211. };
  212. #endif  // LL_LLPREVIEWSCRIPT_H