00001
00045 #ifndef INC_GRE_VIEWSCRIPT_H
00046 #define INC_GRE_VIEWSCRIPT_H
00047
00048 #ifndef INC_GRE_BASE_H
00049 #include <gre/base.h>
00050 #endif
00051
00052 #ifndef INC_RVC_OBJITEM_H
00053 #include <rvc/objitem.h>
00054 #endif
00055
00056 #ifndef INC_MI32_SERIALIZABLE_H
00057 #include <mi32/serializable.h>
00058 #endif
00059
00060 #ifndef INC_MI32_SERIALIZERITEM_H
00061 #include <mi32/serializeritem.h>
00062 #endif
00063
00064 #ifndef INC_MI32_SMLBASE_H
00065 #include <mi32/smlbase.h>
00066 #endif
00067
00068 #ifndef INC_MI32_ICONID_H
00069 #include <mi32/iconid.h>
00070 #endif
00071
00072 #ifndef INC_MI32_MISTRINGLIST_H
00073 #include <mi32/mistringlist.h>
00074 #endif
00075
00076 #ifndef INC_MGUI_KEYSTATE_H
00077 #include <mgui/keystate.h>
00078 #endif
00079
00080 #ifndef INC_MGUI_POINTERBUTTON_H
00081 #include <mgui/pointerbutton.h>
00082 #endif
00083
00084 #ifndef GENERATING_DOXYGEN_OUTPUT
00085 struct MICONSTRUCT;
00086 namespace MGUI {
00087 class TOOL_BASE;
00088 }
00089 namespace SML {
00090 class GUI_GADGET;
00091 }
00092 #endif
00093
00094 namespace GRE {
00095
00096
00097
00098 class VIEWSCRIPT : public SERIALIZABLE {
00099 public:
00100
00101 class CONTEXT;
00102
00104 VIEWSCRIPT ();
00105
00107 VIEWSCRIPT (
00108 const VIEWSCRIPT& rhs
00109 ): SERIALIZABLE(rhs) { Copy(rhs); }
00110
00112 virtual ~VIEWSCRIPT ();
00113
00115 VIEWSCRIPT& operator= (
00116 const VIEWSCRIPT& rhs
00117 );
00118
00119 virtual void IniWrite (
00120 const char* IniGroup,
00121 const char* IniBaseName
00122 ) const;
00123
00124 virtual int Load (
00125 const char* IniGroup = 0,
00126 const char* IniBaseName = 0
00127 );
00128
00129 bool EditProperties (
00130 MDLGPARENT dlgparent,
00131 GRE::VIEWABLE *viewable,
00132 GRE::VIEW *view,
00133 bool CanChangeSet
00134 );
00135
00137 int EditScript (
00138 MDLGPARENT dlgparent,
00139 SMLCONTEXT* smlcontext,
00140 SMLUSAGE usage
00141 );
00142
00143 const FILEPATH& GetFilePath (
00144 ) const { return (m_ObjItemScript.GetFilePath()); }
00145
00146 MICONSTRUCT* GetIcon (
00147 ) const;
00148
00149 const char* GetIconGroup (
00150 ) const { return (m_IconGroup); }
00151
00152 ICONID GetIconID (
00153 ) const;
00154
00155 const char* GetIconName (
00156 ) const { return (m_IconName); }
00157
00158 const MIUNICODE* GetName (
00159 ) const { return (m_name); }
00160
00161 const MISTRING& GetScriptString (
00162 ) const { return (m_scriptstr); }
00163
00164 bool GetShowIcon (
00165 ) const { return (m_ShowIcon); }
00166
00167 bool IsFromViewable (
00168 ) const { return (m_FromViewable); }
00169
00170 bool IsEncrypted (
00171 ) const { return (m_bIsEncrypted); }
00172
00173 ERRVALUE Load (
00174 const FILEPATH& filepath
00175 );
00176
00177 ERRVALUE Load (
00178 const RVC::OBJITEM& objitem
00179 );
00180
00181 bool SelectIcon (
00182 MDLGPARENT dlgparent
00183 );
00184
00185 void SetFilePath (
00186 const FILEPATH& filepath
00187 ) { m_ObjItemScript.SetFilePath(filepath); }
00188
00189 void SetFromViewable (
00190 bool FromViewable = true
00191 ) { m_FromViewable = FromViewable; }
00192
00193 void SetName (
00194 const MIUNICODE *name
00195 ) { m_name = name; }
00196
00197 void SetShowIcon (
00198 bool ShowIcon
00199 ) { m_ShowIcon = ShowIcon; }
00200
00201 protected:
00202
00204 static const SERIALIZERITEM* SerialGetItemDef (
00205 );
00206
00207 private:
00208 #ifndef GENERATING_DOXYGEN_OUTPUT
00209
00210 RVC::OBJITEM m_ObjItemScript;
00211 MISTRING m_scriptstr;
00212 FIXEDSTRING<64> m_name;
00213 char m_IconGroup[16];
00214 char m_IconName[16];
00215 mutable MICONSTRUCT* m_icon;
00216 bool m_ShowIcon;
00217 bool m_FromViewable;
00218 bool m_bIsEncrypted;
00219
00220 void Copy (const VIEWSCRIPT& rhs);
00221 ERRVALUE LoadLow ();
00222
00223 virtual bool v_EditProperties (
00224 MDLGPARENT dlgparent,
00225 GRE::VIEWABLE *viewable,
00226 GRE::VIEW *view,
00227 bool CanChangeSet
00228 ) = 0;
00229
00230 #endif // GENERATING_DOXYGEN_OUTPUT
00231 };
00232
00233
00234
00235
00236 class VIEWSCRIPT::CONTEXT {
00237 public:
00238
00239 SMLCONTEXT* GetSMLContext (
00240 ) const { return (m_smlcontext); }
00241
00242 ERRVALUE ParseScript (
00243 const VIEWSCRIPT& script
00244 );
00245
00246 protected:
00247
00248 CONTEXT (
00249 GRE::VIEWABLE *viewable,
00250 GRE::VIEW *view
00251 );
00252
00253 ~CONTEXT ();
00254
00255 private:
00256 #ifndef GENERATING_DOXYGEN_OUTPUT
00257 SMLCONTEXT *m_smlcontext;
00258
00259 CONTEXT (const CONTEXT&);
00260 CONTEXT& operator= (const CONTEXT&);
00261
00262 #endif // GENERATING_DOXYGEN_OUTPUT
00263 };
00264
00265
00266
00267
00268 class MACROSCRIPT : public VIEWSCRIPT {
00269 public:
00270
00271 enum BUTTONTYPE {
00272 BUTTONTYPE_Simple = 0,
00273 BUTTONTYPE_Menu = 1
00274 };
00275
00276 class CONTEXT;
00277
00279 MACROSCRIPT (
00280 ): m_ButtonType(BUTTONTYPE_Simple) { }
00281
00283 MACROSCRIPT (
00284 const MACROSCRIPT& rhs
00285 );
00286
00288 virtual ~MACROSCRIPT (
00289 );
00290
00292 MACROSCRIPT& operator= (
00293 const MACROSCRIPT& rhs
00294 );
00295
00296 BUTTONTYPE GetButtonType (
00297 ) const { return (static_cast<BUTTONTYPE>(m_ButtonType)); }
00298
00299 const MISTRINGLIST& GetMenuChoiceList (
00300 ) const { return (m_MenuChoiceList); }
00301
00302 virtual void IniWrite (
00303 const char* IniGroup,
00304 const char* IniBaseName
00305 ) const;
00306
00307 virtual int Load (
00308 const char* IniGroup = 0,
00309 const char* IniBaseName = 0
00310 );
00311
00312 virtual ERRVALUE SerialRead (
00313 SERIALIZER& serializer
00314 );
00315
00316 virtual ERRVALUE SerialWrite (
00317 SERIALIZER& serializer,
00318 const char *tagname = 0
00319 ) const;
00320
00321 void SetButtonType (
00322 BUTTONTYPE ButtonType
00323 ) { m_ButtonType = static_cast<UINT8>(ButtonType); }
00324
00325 void SetMenuChoices (
00326 const MISTRING& string
00327 );
00328
00329 private:
00330 #ifndef GENERATING_DOXYGEN_OUTPUT
00331
00332 UINT8 m_ButtonType;
00333 MISTRINGLIST m_MenuChoiceList;
00334
00335 static ERRVALUE SerialCB_MenuChoice (SERIALIZER&, const SERIALIZERITEM*, MACROSCRIPT *script, SERIALIZERITEM::ACTION);
00336 static const SERIALIZERITEM* SerialGetItemDef ();
00337
00338 virtual bool v_EditProperties (
00339 MDLGPARENT dlgparent,
00340 GRE::VIEWABLE *viewable,
00341 GRE::VIEW *view,
00342 bool CanChangeSet
00343 );
00344
00345 #endif // GENERATING_DOXYGEN_OUTPUT
00346 };
00347 class MACROSCRIPTLIST : public MILIST<MACROSCRIPT> { };
00348
00351 bool DlgEditMacroScriptList (
00352 MDLGPARENT dlgparent,
00353 MACROSCRIPTLIST& ScriptList,
00354 GRE::VIEWABLE *viewable,
00355 GRE::VIEW *view = 0
00356 );
00357
00358
00359
00360
00361 class MACROSCRIPT::CONTEXT : public VIEWSCRIPT::CONTEXT {
00362 public:
00363
00365 CONTEXT (
00366 GRE::VIEWABLE *viewable,
00367 GRE::VIEW *view,
00368 bool AddAllSymbols = false
00369 );
00370
00372 virtual ~CONTEXT ();
00373
00375 ERRVALUE Create (
00376 const MACROSCRIPT& script
00377 );
00378
00380 const MACROSCRIPT& GetScript (
00381 ) const { return (m_script); }
00382
00383 void OnCmdRun (MGUI::ID, bool);
00384 void OnCmdRunMenu (MGUI::ID, bool);
00385
00387 ERRVALUE Run (
00388 );
00389
00391 ERRVALUE Run (
00392 const MIUNICODE* menuchoice
00393 );
00394
00395 private:
00396 #ifndef GENERATING_DOXYGEN_OUTPUT
00397
00398 MACROSCRIPT m_script;
00399 SMLSYMBOL *m_MenuChoiceSym;
00400
00401 CONTEXT (const CONTEXT&);
00402 CONTEXT& operator= (const CONTEXT&);
00403 #endif // GENERATING_DOXYGEN_OUTPUT
00404 };
00405
00406
00407
00408 class TOOLSCRIPT : public VIEWSCRIPT {
00409 public:
00410
00411 class CONTEXT;
00412
00413 TOOLSCRIPT () { }
00414
00415 TOOLSCRIPT (
00416 const TOOLSCRIPT& rhs
00417 ): VIEWSCRIPT(rhs) { }
00418
00419 virtual ~TOOLSCRIPT (
00420 ) { }
00421
00422 TOOLSCRIPT& operator= (
00423 const TOOLSCRIPT& rhs
00424 ) {
00425 if (this != &rhs) {
00426 static_cast<VIEWSCRIPT*>(this)->operator=(rhs);
00427 }
00428 return (*this);
00429 }
00430
00431 virtual ERRVALUE SerialRead (
00432 SERIALIZER& serializer
00433 );
00434
00435 virtual ERRVALUE SerialWrite (
00436 SERIALIZER& serializer,
00437 const char *tagname = 0
00438 ) const;
00439
00440 private:
00441 #ifndef GENERATING_DOXYGEN_OUTPUT
00442
00443 virtual bool v_EditProperties (
00444 MDLGPARENT dlgparent,
00445 GRE::VIEWABLE *viewable,
00446 GRE::VIEW *view,
00447 bool CanChangeSet
00448 );
00449
00450 #endif // GENERATING_DOXYGEN_OUTPUT
00451 };
00452 class TOOLSCRIPTLIST : public MILIST<TOOLSCRIPT> { };
00453
00456 bool DlgEditToolScriptList (
00457 MDLGPARENT dlgparent,
00458 TOOLSCRIPTLIST& ScriptList,
00459 GRE::VIEWABLE *viewable,
00460 GRE::VIEW *view = 0
00461 );
00462
00463
00464
00465
00467 class TOOLSCRIPT::CONTEXT : public VIEWSCRIPT::CONTEXT {
00468 public:
00469
00471 CONTEXT (
00472 GRE::VIEWABLE *viewable,
00473 GRE::VIEW *view,
00474 MGUI::TOOL_BASE *pTool = 0
00475 );
00476
00478 virtual ~CONTEXT ();
00479
00481 ERRVALUE CallFunction (
00482 const char *funcname
00483 ) const;
00484
00486 void SetActive (
00487 bool IsActive
00488 );
00489
00491 void SetPointerButtonState (
00492 int x,
00493 int y,
00494 MGUI::KEYSTATE keystate,
00495 MGUI::POINTERBUTTON button
00496 );
00497
00498 private:
00499 #ifndef GENERATING_DOXYGEN_OUTPUT
00500
00501 SMLSYMBOL *m_SymToolIsActive;
00502 SMLSYMBOL *m_SymPointerX;
00503 SMLSYMBOL *m_SymPointerY;
00504 SMLSYMBOL *m_SymShiftPressed;
00505 SMLSYMBOL *m_SymCtrlPressed;
00506 SMLSYMBOL *m_SymLeftButtonPressed;
00507 SMLSYMBOL *m_SymRightButtonPressed;
00508 SMLSYMBOL *m_SymMiddleButtonPressed;
00509 SML::GUI_GADGET *m_pGadget;
00510
00511
00512 CONTEXT (const CONTEXT&);
00513 CONTEXT& operator= (const CONTEXT&);
00514
00515 #endif // GENERATING_DOXYGEN_OUTPUT
00516 };
00517
00518
00519
00520 }
00521
00522
00523 #endif // INC_GRE_VIEWSCRIPT_H && USE_MGUI