llpreviewscript.h

Go to the documentation of this file.
00001 
00032 #ifndef LL_LLPREVIEWSCRIPT_H
00033 #define LL_LLPREVIEWSCRIPT_H
00034 
00035 #include "lldarray.h"
00036 #include "llpreview.h"
00037 #include "lltabcontainer.h"
00038 #include "llinventory.h"
00039 #include "llcombobox.h"
00040 #include "lliconctrl.h"
00041 #include "llframetimer.h"
00042 
00043 
00044 class LLMessageSystem;
00045 class LLTextEditor;
00046 class LLButton;
00047 class LLCheckBoxCtrl;
00048 class LLScrollListCtrl;
00049 class LLViewerObject;
00050 struct  LLEntryAndEdCore;
00051 class LLMenuBarGL;
00052 class LLFloaterScriptSearch;
00053 class LLKeywordToken;
00054 
00055 // Inner, implementation class.  LLPreviewScript and LLLiveLSLEditor each own one of these.
00056 class LLScriptEdCore : public LLPanel
00057 {
00058         friend class LLPreviewScript;
00059         friend class LLPreviewLSL;
00060         friend class LLLiveLSLEditor;
00061         friend class LLFloaterScriptSearch;
00062 
00063 public:
00064         LLScriptEdCore(
00065                 const std::string& name,
00066                 const LLRect& rect,
00067                 const std::string& sample,
00068                 const std::string& help,
00069                 const LLHandle<LLFloater>& floater_handle,
00070                 void (*load_callback)(void* userdata),
00071                 void (*save_callback)(void* userdata, BOOL close_after_save),
00072                 void (*search_replace_callback)(void* userdata),
00073                 void* userdata,
00074                 S32 bottom_pad = 0);    // pad below bottom row of buttons
00075         ~LLScriptEdCore();
00076         
00077         void                    initMenu();
00078 
00079         virtual void    draw();
00080 
00081         BOOL                    canClose();
00082 
00083         static void             handleSaveChangesDialog(S32 option, void* userdata);
00084         static void             handleReloadFromServerDialog(S32 option, void* userdata);
00085 
00086         static void             onHelpWebDialog(S32 option, void* userdata);
00087         static void             onBtnHelp(void* userdata);
00088         static void             onBtnDynamicHelp(void* userdata);
00089         static void             onCheckLock(LLUICtrl*, void*);
00090         static void             onHelpComboCommit(LLUICtrl* ctrl, void* userdata);
00091         static void             onClickBack(void* userdata);
00092         static void             onClickForward(void* userdata);
00093         static void             onBtnInsertSample(void*);
00094         static void             onBtnInsertFunction(LLUICtrl*, void*);
00095         static void             doSave( void* userdata, BOOL close_after_save );
00096         static void             onBtnSave(void*);
00097         static void             onBtnUndoChanges(void*);
00098         static void             onSearchMenu(void* userdata);
00099 
00100         static void             onUndoMenu(void* userdata);
00101         static void             onRedoMenu(void* userdata);
00102         static void             onCutMenu(void* userdata);
00103         static void             onCopyMenu(void* userdata);
00104         static void             onPasteMenu(void* userdata);
00105         static void             onSelectAllMenu(void* userdata);
00106         static void             onDeselectMenu(void* userdata);
00107 
00108         static BOOL             enableUndoMenu(void* userdata);
00109         static BOOL             enableRedoMenu(void* userdata);
00110         static BOOL             enableCutMenu(void* userdata);
00111         static BOOL             enableCopyMenu(void* userdata);
00112         static BOOL             enablePasteMenu(void* userdata);
00113         static BOOL             enableSelectAllMenu(void* userdata);
00114         static BOOL             enableDeselectMenu(void* userdata);
00115 
00116         static BOOL             hasChanged(void* userdata);
00117 
00118         void selectFirstError();
00119 
00120         virtual BOOL handleKeyHere(KEY key, MASK mask);
00121 
00122 protected:
00123         void deleteBridges();
00124         void setHelpPage(const LLString& help_string);
00125         void updateDynamicHelp(BOOL immediate = FALSE);
00126         void addHelpItemToHistory(const LLString& help_string);
00127 
00128         static void onErrorList(LLUICtrl*, void* user_data);
00129 
00130         virtual const char *getTitleName() const { return "Script"; }
00131 
00132 private:
00133         LLString                mSampleText;
00134         std::string             mHelpFile;
00135         LLTextEditor*   mEditor;
00136         void                    (*mLoadCallback)(void* userdata);
00137         void                    (*mSaveCallback)(void* userdata, BOOL close_after_save);
00138         void                    (*mSearchReplaceCallback) (void* userdata);
00139         void*                   mUserdata;
00140         LLComboBox              *mFunctions;
00141         BOOL                    mForceClose;
00142         //LLPanel*              mGuiPanel;
00143         LLPanel*                mCodePanel;
00144         LLScrollListCtrl* mErrorList;
00145         LLDynamicArray<LLEntryAndEdCore*> mBridges;
00146         LLHandle<LLFloater>     mLiveHelpHandle;
00147         LLKeywordToken* mLastHelpToken;
00148         LLFrameTimer    mLiveHelpTimer;
00149         S32                             mLiveHelpHistorySize;
00150 };
00151 
00152 
00153 // Used to view and edit a LSL from your inventory.
00154 class LLPreviewLSL : public LLPreview
00155 {
00156 public:
00157         LLPreviewLSL(const std::string& name, const LLRect& rect, const std::string& title,
00158                                  const LLUUID& item_uuid );
00159         virtual void callbackLSLCompileSucceeded();
00160         virtual void callbackLSLCompileFailed(const LLSD& compile_errors);
00161 
00162         /*virtual*/ void open();                /*Flawfinder: ignore*/
00163 
00164 protected:
00165         virtual BOOL canClose();
00166         void closeIfNeeded();
00167         virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
00168 
00169         virtual void loadAsset();
00170         void saveIfNeeded();
00171         void uploadAssetViaCaps(const std::string& url,
00172                                                         const std::string& filename, 
00173                                                         const LLUUID& item_id);
00174         void uploadAssetLegacy(const std::string& filename,
00175                                                         const LLUUID& item_id,
00176                                                         const LLTransactionID& tid);
00177 
00178         static void onSearchReplace(void* userdata);
00179         static void onLoad(void* userdata);
00180         static void onSave(void* userdata, BOOL close_after_save);
00181         
00182         static void onLoadComplete(LLVFS *vfs, const LLUUID& uuid,
00183                                                            LLAssetType::EType type,
00184                                                            void* user_data, S32 status, LLExtStat ext_status);
00185         static void onSaveComplete(const LLUUID& uuid, void* user_data, S32 status, LLExtStat ext_status);
00186         static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
00187         static LLPreviewLSL* getInstance(const LLUUID& uuid);
00188 
00189         static void* createScriptEdPanel(void* userdata);
00190 
00191 
00192 protected:
00193 
00194         virtual const char *getTitleName() const { return "Script"; }
00195         LLScriptEdCore* mScriptEd;
00196         // Can safely close only after both text and bytecode are uploaded
00197         S32 mPendingUploads;
00198 };
00199 
00200 
00201 // Used to view and edit an LSL that is attached to an object.
00202 class LLLiveLSLEditor : public LLPreview
00203 {
00204 public: 
00205         LLLiveLSLEditor(const std::string& name, const LLRect& rect,
00206                                         const std::string& title,
00207                                         const LLUUID& object_id, const LLUUID& item_id);
00208         ~LLLiveLSLEditor();
00209 
00210 
00211         static LLLiveLSLEditor* show(const LLUUID& item_id, const LLUUID& object_id);
00212         static void hide(const LLUUID& item_id, const LLUUID& object_id);
00213         static LLLiveLSLEditor* find(const LLUUID& item_id, const LLUUID& object_id);
00214 
00215         static void processScriptRunningReply(LLMessageSystem* msg, void**);
00216 
00217         virtual void callbackLSLCompileSucceeded(const LLUUID& task_id,
00218                                                                                         const LLUUID& item_id,
00219                                                                                         bool is_script_running);
00220         virtual void callbackLSLCompileFailed(const LLSD& compile_errors);
00221 
00222         // Overide LLPreview::open() to avoid calling loadAsset twice.
00223         /*virtual*/ void open();                /*Flawfinder: ignore*/
00224 
00225 protected:
00226         virtual BOOL canClose();
00227         void closeIfNeeded();
00228         virtual void draw();
00229         virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
00230 
00231         virtual void loadAsset();
00232         void loadAsset(BOOL is_new);
00233         void saveIfNeeded();
00234         void uploadAssetViaCaps(const std::string& url,
00235                                                         const std::string& filename, 
00236                                                         const LLUUID& task_id,
00237                                                         const LLUUID& item_id,
00238                                                         BOOL is_running);
00239         void uploadAssetLegacy(const std::string& filename,
00240                                                    LLViewerObject* object,
00241                                                    const LLTransactionID& tid,
00242                                                    BOOL is_running);
00243 
00244         static void onSearchReplace(void* userdata);
00245         static void onLoad(void* userdata);
00246         static void onSave(void* userdata, BOOL close_after_save);
00247 
00248         static void onLoadComplete(LLVFS *vfs, const LLUUID& asset_uuid,
00249                                                            LLAssetType::EType type,
00250                                                            void* user_data, S32 status, LLExtStat ext_status);
00251         static void onSaveTextComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
00252         static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
00253         static void onRunningCheckboxClicked(LLUICtrl*, void* userdata);
00254         static void onReset(void* userdata);
00255 
00256         void loadScriptText(const char* filename);
00257         void loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type);
00258 
00259         static void onErrorList(LLUICtrl*, void* user_data);
00260 
00261         static void* createScriptEdPanel(void* userdata);
00262 
00263 
00264 protected:
00265         LLUUID mObjectID;
00266         LLUUID mItemID; // The inventory item this script is associated with
00267         BOOL mIsNew;
00268         LLScriptEdCore* mScriptEd;
00269         //LLUUID mTransmitID;
00270         LLCheckBoxCtrl  *mRunningCheckbox;
00271         BOOL mAskedForRunningInfo;
00272         BOOL mHaveRunningInfo;
00273         LLButton                *mResetButton;
00274         LLPointer<LLViewerInventoryItem> mItem;
00275         BOOL mCloseAfterSave;
00276         // need to save both text and script, so need to decide when done
00277         S32 mPendingUploads;
00278 
00279         static LLMap<LLUUID, LLLiveLSLEditor*> sInstances;
00280 };
00281 
00282 // name of help file for lsl
00283 extern const char HELP_LSL[];
00284 
00285 #endif  // LL_LLPREVIEWSCRIPT_H

Generated on Fri May 16 08:33:58 2008 for SecondLife by  doxygen 1.5.5