00001
00085 #ifndef INC_MGUI_TOOLBASE_H
00086 #define INC_MGUI_TOOLBASE_H
00087
00088 #ifndef INC_MGUI_TOOLCANVAS_H
00089 #include <mgui/toolcanvas.h>
00090 #endif
00091
00092 #ifndef INC_MGUI_FORMBTXT_H
00093 #include <mgui/formbtxt.h>
00094 #endif
00095
00096 #ifndef INC_MI32_TRANS2AFFINE_H
00097 #include <mi32/trans2daffine.h>
00098 #endif
00099
00100 #ifndef INC_MI32_TRANS2MAPGEN_H
00101 #include <mi32/trans2dmapgen.h>
00102 #endif
00103
00104 #ifndef INC_MI32_MG2ENUMS_H
00105 #include <mi32/mg2enums.h>
00106 #endif
00107
00108 #ifndef INC_MI32_COLOR_H
00109 #include <mi32/color.h>
00110 #endif
00111
00112
00113 #ifndef GENERATING_DOXYGEN_OUTPUT
00114 class REGION2D;
00115 namespace MGD {
00116 class CONTEXT;
00117 }
00118 #endif
00119
00120
00121 namespace MGUI {
00122
00123
00124
00129 class TOOL_BASE {
00130 public:
00131
00133 enum ADJUSTFLAGS {
00134 ADJUST_Default = 0x00,
00135 ADJUST_Absolute = 0x01,
00136 ADJUST_ScreenCoords = 0x02,
00137 ADJUST_Notify = 0x80
00138 };
00139
00141 enum CTRLOPT {
00142 CTRLOPT_Default = 0x0000,
00143 CTRLOPT_Manual = 0x0001,
00144 CTRLOPT_GPS = 0x0002,
00145 CTRLOPT_SnapGrid = 0x0004,
00146 CTRLOPT_NoManualProj = 0x0008,
00147 CTRLOPT_NoEditZ = 0x0010,
00148 CTRLOPT_NoBtnClear = 0x0020,
00149 };
00150
00152 enum CHANGESEQ {
00153 CHANGESEQ_None = 0,
00154 CHANGESEQ_Begin = 1,
00155 CHANGESEQ_Continue = 2,
00156 CHANGESEQ_End = 3,
00157 CHANGESEQ_Cancel = 4
00158 };
00159
00160 enum CHANGETYPE {
00161 CHANGETYPE_None = 0,
00162 CHANGETYPE_Shift = 1,
00163 CHANGETYPE_Resize = 2,
00164 CHANGETYPE_Rotate = 3,
00165 CHANGETYPE_Shear = 4,
00166 CHANGETYPE_Edit = 5,
00167 CHANGETYPE_Create = 6,
00168 CHANGETYPE_Clear = 7,
00169 CHANGETYPE_ActiveElement = 8,
00170 CHANGETYPE_Other = 20
00171 };
00172
00174 enum MARKER {
00175 MARKER_X = 0,
00176 MARKER_Plus = 1,
00177 MARKER_ArrowIn = 2,
00178 MARKER_ArrowOut = 3,
00179 MARKER_None = 4,
00180 MARKER_Circle = 5,
00181 MARKER_Flat = 6,
00182 MARKER_Square = 7,
00183 MARKER_Diamond = 8,
00184 MARKER_Diamond_Tall = 9,
00185 MARKER_Diamond_Wide = 10,
00186 };
00187
00188 enum PENCOLOR {
00189 PENCOLOR_Primary,
00190 PENCOLOR_Inactive,
00191 PENCOLOR_Highlight,
00192 PENCOLOR_COUNT
00193 };
00194
00196 class SNAPGRID {
00197 public:
00198
00200 SNAPGRID (
00201 );
00202
00204 explicit SNAPGRID (
00205 const DPOINT2D& interval
00206 );
00207
00209 SNAPGRID (
00210 const DPOINT2D& interval,
00211 const TRANS2D_AFFINE& trans
00212 );
00213
00215 void Adjust (
00216 DPOINT2D& pt
00217 ) const;
00218
00220 const DPOINT2D& GetInterval (
00221 ) const { return (m_interval); }
00222
00224 const TRANS2D_AFFINE& GetTrans (
00225 ) const { return (m_trans); }
00226
00228 bool IsValid (
00229 ) const { return (m_interval.x > 0 && m_interval.y > 0); }
00230
00232 void SetInterval (
00233 const DPOINT2D& interval
00234 ) { m_interval = interval; }
00235
00237 void SetTrans (
00238 const TRANS2D_AFFINE& trans
00239 ) { m_trans = trans; }
00240
00241 private:
00242 #ifndef GENERATING_DOXYGEN_OUTPUT
00243 DPOINT2D m_interval;
00244 TRANS2D_AFFINE m_trans;
00245 #endif // GENERATING_DOXYGEN_OUTPUT
00246 };
00247
00250 typedef fastdelegate::FastDelegate<void(CHANGESEQ, CHANGETYPE)> DELEGATE_ONCHANGE;
00251
00254 typedef fastdelegate::FastDelegate<bool(MGUI::POINT, MGUI::KEYSTATE)> DELEGATE_ONPOINTER;
00255
00258 static const COLOR& GetPenColor (
00259 PENCOLOR pencolor = PENCOLOR_Primary
00260 );
00261
00264 static INT8 GetPenWidthShared ();
00265
00267 static void SetPenColor (
00268 PENCOLOR pencolor,
00269 const COLOR& color
00270 );
00271
00273 static void SetPenWidthShared (
00274 INT8 PenWidth
00275 );
00276
00278 virtual ~TOOL_BASE () = 0;
00279
00282 void Activate ();
00283
00285 void ClearPosition ();
00286
00289 MGUI::FORM* CreateControlForm (
00290 MGUI::LAYOUT_PANE_BASE& ParentPane,
00291 CTRLOPT ctrlopt
00292 ) { return (v_CreateControlForm(ParentPane,ctrlopt)); }
00293
00296 MGUI::FORM* CreateManualForm (
00297 MGUI::LAYOUT_PANE_BASE& ParentPane,
00298 CTRLOPT ctrlopt
00299 );
00300
00302 void Deactivate ();
00303
00305 ERRVALUE GenerateRegion (
00306 REGION2D& region
00307 ) const { return (v_GenerateRegion(region)); }
00308
00311 const DPOINT2D& GetArrowKeyDeltas (
00312 ) const { return (m_ArrowDelta); }
00313
00315 CTRLOPT GetControlOptions (
00316 ) const { return (m_ctrlopt); }
00317
00319 TOOLCANVAS* GetCanvas (
00320 ) const { return (m_pCanvas); }
00321
00323 void GetCanvasExtents (
00324 DRECT2D& extents
00325 ) const;
00326
00328 void GetCanvasExtents (
00329 LRECT2D& extents
00330 ) const;
00331
00333 KEYSTATE GetKeyState () const
00334 { return (m_KeyState); }
00335
00337 const TRANS2D_MAPGEN& GetTransToMap (
00338 ) const { return (m_ToolToMapCRS); }
00339
00341 const TRANS2D_AFFINE& GetTransToWindow (
00342 ) const { return (m_ToolToWindow); }
00343
00345 bool HasControls (
00346 ) const { return (m_ControlNeed != CONTROLNEED_None); }
00347
00349 bool HasManualControls (
00350 ) const { return ((m_capability & CAPABILITY_ManualControls) != 0); };
00351
00353 bool Is3D () const
00354 { return (m_Is3D); }
00355
00357 bool IsActive (
00358 ) const { return (m_IsActive); }
00359
00361 bool IsResizable (
00362 ) const { return (m_Resizable); }
00363
00365 bool IsRotatable (
00366 ) const { return (m_Rotatable); }
00367
00369 bool IsSuspended (
00370 ) const { return (m_SuspendCount > 0); }
00371
00373 bool HasPosition (
00374 ) const { return (m_PosnSet); }
00375
00377 void Move (
00378 double dx,
00379 double dy,
00380 ADJUSTFLAGS flags
00381 );
00382
00386 void NotifyChange (
00387 CHANGESEQ changeseq,
00388 CHANGETYPE changetype
00389 );
00390
00392 void Resize (
00393 double dx,
00394 double dy,
00395 ADJUSTFLAGS flags
00396 );
00397
00399 void Resume ();
00400
00402 void Set3D (
00403 bool is3D = true
00404 );
00405
00407 void SetArrowKeyDeltas (
00408 double dx,
00409 double dy
00410 );
00411
00413 void SetCanStartNew (
00414 bool canstartnew
00415 ) { m_CanStartNew = canstartnew; }
00416
00419 void SetControlOptions (
00420 CTRLOPT ctrlopt
00421 ) { m_ctrlopt = ctrlopt; }
00422
00424 void SetDelegateOnChange (
00425 DELEGATE_ONCHANGE delegate
00426 ) { m_DelegateOnChange = delegate; }
00427
00432 void SetDelegateOnDestroy (
00433 DELEGATE_VOID_NOPARMS delegate
00434 ) { m_DelegateOnDestroy = delegate; }
00435
00437 void SetDelegateOnRightButtonDown (
00438 DELEGATE_ONPOINTER delegate
00439 ) { m_DelegateOnRightButtonDown = delegate; }
00440
00442 void SetDelegateOnRightButtonUp (
00443 DELEGATE_ONPOINTER delegate
00444 ) { m_DelegateOnRightButtonUp = delegate; }
00445
00447 void SetPenWidth (
00448 INT8 PenWidth
00449 );
00450
00452 void SetResizable (
00453 bool resizable
00454 ) { m_Resizable = resizable; }
00455
00457 void SetRotatable (
00458 bool rotatable
00459 ) { m_Rotatable = rotatable; }
00460
00462 void SetTransToMap (
00463 const TRANS2D_MAPGEN& TransToMap
00464 );
00465
00467 void SetTransToWindow (
00468 const TRANS2D_AFFINE& trans
00469 );
00470
00472 bool SnapGridIsActive (
00473 ) const { return (m_UseSnapGrid && m_pSnapGrid != 0); }
00474
00476 void SnapGridSet (
00477 const SNAPGRID& snapgrid
00478 );
00479
00481 void SnapGridSetActive (
00482 bool active
00483 ) { m_UseSnapGrid = active; }
00484
00487 void StereoEnable (
00488 bool enable
00489 );
00490
00493 bool StereoIsEnabled () const;
00494
00496 void Suspend ();
00497
00498 protected:
00499
00500 enum CONTROLNEED {
00501 CONTROLNEED_None,
00502 CONTROLNEED_Optional,
00503 CONTROLNEED_Required
00504 };
00505
00506 enum CAPABILITY {
00507 CAPABILITY_Default = 0,
00508 CAPABILITY_ManualControls = 0x01,
00509 CAPABILITY_Stereo = 0x02,
00510 CAPABILITY_UsePixmap = 0x04,
00511 };
00512
00514 class MANUAL_BASE : public MGUI::FORM_COMPOSITE {
00515 public:
00517 MANUAL_BASE ();
00518
00520 virtual ~MANUAL_BASE () = 0;
00521
00523 void Create (
00524 MGUI::LAYOUT_PANE_BASE &ParentPane,
00525 TOOL_BASE::CTRLOPT ctrlopt
00526 );
00527
00529 void NotifyChange (
00530 CHANGESEQ changeseq,
00531 CHANGETYPE changetype
00532 ) { v_OnNotifyChange(changeseq, changetype); }
00533
00537 void SetTransToolToMapCRS (
00538 const TRANS2D_MAPGEN& ToolToMapCRS
00539 );
00540
00541 protected:
00543 const TRANS2D_MAPGEN& GetToolToDisplayCRS (
00544 ) const { return (m_ToolToDisplayCRS); }
00545
00546 private:
00547 #ifndef GENERATING_DOXYGEN_OUTPUT
00548 TRANS2D_MAPGEN m_ToolToDisplayCRS;
00549 FORM_BUTTONTEXT m_BtxCoordRefSys;
00550 bool m_UserSetCRS;
00551
00552 void OnBtnCoordRefSys ();
00553 #endif // GENERATING_DOXYGEN_OUTPUT
00554
00557 virtual void v_CreateContent (
00558 MGUI::LAYOUT_PANE_BASE &ParentPane
00559 ) = 0;
00560
00563 virtual void v_OnDisplayCoordRefSysChange () = 0;
00564
00566 virtual void v_OnNotifyChange (
00567 CHANGESEQ changeseq,
00568 CHANGETYPE changetype
00569 );
00570 };
00571
00573 explicit TOOL_BASE (
00574 TOOLCANVAS *pCanvas,
00575 CONTROLNEED ControlNeed = CONTROLNEED_None,
00576 CAPABILITY capability = CAPABILITY_Default
00577 );
00578
00579 void AdjustBegin (CHANGETYPE changetype, bool redraw = true);
00580
00581 void AdjustEnd (bool releasecapture = true, bool cancel = false);
00582
00583 void ApplyMoveDeltas (
00584 DPOINT2D& point,
00585 double dx,
00586 double dy,
00587 ADJUSTFLAGS flags
00588 ) const;
00589
00591 void ApplySnap (
00592 DPOINT2D& point
00593 ) const;
00594
00596 void CalcMarkerRectTool (
00597 const DPOINT2D& ptTool,
00598 UINT16 size,
00599 LRECT2D& rectCanvas,
00600 bool AddLineWidth = true
00601 ) const;
00602
00604 void CalcMarkerRectTool (
00605 const DPOINT3D& ptTool,
00606 UINT16 size,
00607 LRECT2D& rectCanvas,
00608 bool AddLineWidth = true
00609 ) const;
00610
00613 bool CanUsePixmap () const;
00614
00615 bool CanStartNew () const
00616 { return (m_CanStartNew); }
00617
00619 void DrawLineTool (
00620 const POLYLINE& plTool,
00621 const COLOR *pColor = 0,
00622 const double *DashArray = 0,
00623 int DashArraySize = 0,
00624 bool UsePixmap = false
00625 ) const;
00626
00628 void DrawMarker (
00629 const DPOINT2D& ptCanvasCenter,
00630 const DPOINT2D& ptCanvasDir,
00631 MARKER marker,
00632 UINT16 size,
00633 const COLOR *pColor = 0,
00634 bool UsePixmap = false
00635 ) const;
00636
00638 void DrawMarker (
00639 const LPOINT2D& ptCanvasCenter,
00640 const LPOINT2D& ptCanvasDir,
00641 MARKER marker,
00642 UINT16 size,
00643 const COLOR *pColor = 0,
00644 bool UsePixmap = false
00645 ) const;
00646
00648 void DrawMarkerTool (
00649 const DPOINT3D& ptTool,
00650 MARKER marker,
00651 UINT16 size,
00652 const COLOR *pColor = 0,
00653 bool UsePixmap = false
00654 ) const;
00655
00657 void DrawMarkerTool (
00658 const DPOINT3D& ptToolCenter,
00659 const DPOINT2D& ptToolDir,
00660 MARKER marker,
00661 UINT16 size,
00662 const COLOR *pColor = 0,
00663 bool UsePixmap = false
00664 ) const;
00665
00667 void DrawSegmentTool (
00668 const DPOINT3D& ptTool0,
00669 const DPOINT3D& ptTool1,
00670 const COLOR *pColor = 0,
00671 const double *DashArray = 0,
00672 int DashArraySize = 0,
00673 bool UsePixmap = false
00674 ) const;
00675
00677 void DrawSegmentWindow (
00678 const DPOINT3D& ptTool0,
00679 const DPOINT3D& ptTool1,
00680 const COLOR *pColor = 0,
00681 const double *DashArray = 0,
00682 int DashArraySize = 0,
00683 bool UsePixmap = false
00684 ) const;
00685
00686 bool GetArrowDeltas (KEYCODE, double*, double*);
00687
00690 MGD::CONTEXT* GetDrawingContext (
00691 STEREOVIEW StereoView,
00692 const COLOR *pColor,
00693 bool UsePixmap = false
00694 ) const;
00695
00698 MGD::CONTEXT* GetDrawingContext (
00699 STEREOVIEW StereoView = STEREOVIEW_None,
00700 bool UsePixmap = false
00701 ) const;
00702
00703 CHANGETYPE GetChangeType (
00704 ) const { return (m_ChangeType); }
00705
00707 MANUAL_BASE* GetManualBase (
00708 ) { return (m_pManualBase); }
00709
00711 INT8 GetPenWidth () const;
00712
00714 bool IsPointerCaptured () const;
00715
00717 bool IsUserModifying (
00718 ) const { return (m_IsUserModifying); }
00719
00721 void RestoreBackground (
00722 bool UsePixmap = false
00723 ) const;
00724
00726 void RestoreBackground (
00727 const LRECT2D& rect,
00728 bool AddLineWidth = true,
00729 bool UsePixmap = false
00730 ) const;
00731
00734 void SetAutoPixelFunction (
00735 bool AutoPixelFunction
00736 ) { m_AutoPixelFunction = AutoPixelFunction; }
00737
00739 void SetCursor (
00740 CURSORID cursorid
00741 ) const { m_pCanvas->SetCursor(cursorid); }
00742
00744 void SetHasPosition (
00745 bool PosnValid = true
00746 ) { m_PosnSet = PosnValid; }
00747
00750 void SetPixelFunction (
00751 MGD::PIXELFUNC PixelFunc
00752 );
00753
00755 LPOINT2D TransToolToWindow (
00756 const DPOINT2D& ptTool
00757 ) const;
00758
00760 void TransToolToWindow (
00761 const DPOINT2D& ptTool,
00762 DPOINT2D& ptCanvas
00763 ) const { ptCanvas = m_ToolToWindow.ConvertForward(ptTool); }
00764
00767 bool TransToolToWindow (
00768 const DPOINT2D& ptTool,
00769 DPOINT3D& ptCanvas
00770 ) const;
00771
00774 bool TransToolToWindow (
00775 const DPOINT3D& ptTool,
00776 DPOINT3D& ptCanvas
00777 ) const;
00778
00780 DPOINT2D TransWindowToTool (
00781 MGUI::POINT point
00782 ) const { return (m_ToolToWindow.ConvertInverse(point.m_x,point.m_y)); }
00783
00785 DPOINT2D TransWindowToTool (
00786 const LPOINT2D& point
00787 ) const { return (m_ToolToWindow.ConvertInverse(point.x,point.y)); }
00788
00789 private:
00790 #ifndef GENERATING_DOXYGEN_OUTPUT
00791 class TOOLDLG;
00792
00793
00794 static COLOR s_PenColor[PENCOLOR_COUNT];
00795 static INT8 s_PenWidthShared;
00796
00797
00798 TOOLCANVAS *m_pCanvas;
00799 MGD::CONTEXT *XXXdelete_dc;
00800 MANUAL_BASE *m_pManualBase;
00801 TOOLDLG *m_pToolDlg;
00802 SNAPGRID *m_pSnapGrid;
00803 DPOINT2D m_ArrowDelta;
00804 INT32 m_SuspendCount;
00805 CONTROLNEED m_ControlNeed;
00806 CHANGETYPE m_ChangeType;
00807 KEYSTATE m_KeyState;
00808 CTRLOPT m_ctrlopt;
00809 CAPABILITY m_capability;
00810 INT8 m_PenWidth;
00811 mutable bool m_InRestoreBG;
00812 bool m_InDeactivateFunc;
00813 bool m_IsActive;
00814 bool m_PosnSet;
00815 bool m_UseSnapGrid;
00816 bool m_HasArrowDeltas;
00817 bool m_IsUserModifying;
00818 bool m_CanStartNew;
00819 bool m_Resizable;
00820 bool m_Rotatable;
00821 bool m_StereoEnabled;
00822 bool m_Is3D;
00823 bool m_AutoPixelFunction;
00824 bool m_InDrawTool;
00825
00826 DELEGATE_VOID_NOPARMS m_DelegateOnDestroy;
00827 DELEGATE_ONCHANGE m_DelegateOnChange;
00828 DELEGATE_ONPOINTER m_DelegateOnRightButtonDown;
00829 DELEGATE_ONPOINTER m_DelegateOnRightButtonUp;
00830 TRANS2D_AFFINE m_ToolToWindow;
00831 TRANS2D_MAPGEN m_ToolToMapCRS;
00832
00833 void CalcMarkerRectCanvas (const DPOINT3D& ptCanvas, UINT16 size, LRECT2D& rectCanvas, bool AddLineWidth, bool HasValidZ) const;
00834 void CreateToolDlg ();
00835 void DrawMarkerLow (MGD::CONTEXT*, const DPOINT2D& ptCanvasCenter, const DPOINT2D& ptCanvasDir, MARKER marker, UINT16 size) const;
00836 void DrawTool ();
00837 void DrawTool (UINT32);
00838 bool OnKey (MGUI::POINT point, MGUI::KEYCODE, KEYSTATE);
00839 bool OnPointerButtonDown (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00840 bool OnPointerButtonUp (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00841 void SetCanvas (TOOLCANVAS *canvas) { m_pCanvas = canvas; }
00842
00843 #endif // GENERATING_DOXYGEN_OUTPUT
00844
00845
00846
00849 virtual MGUI::FORM* v_CreateControlForm (
00850 MGUI::LAYOUT_PANE_BASE& ParentPane,
00851 CTRLOPT ctrlopt
00852 );
00853
00856 virtual MANUAL_BASE* v_CreateManualBase (
00857 );
00858
00860 virtual void v_DoDraw ();
00861
00863 virtual void v_DoMove (double x, double y, ADJUSTFLAGS);
00864
00866 virtual void v_DoSize (double x, double y, ADJUSTFLAGS);
00867
00870 virtual int v_GenerateRegion (
00871 REGION2D& region
00872 ) const;
00873
00875 virtual MISTRING v_GetDialogTitle (
00876 ) const;
00877
00879 virtual void v_OnActivate ();
00880
00882 virtual void v_OnClear ();
00883
00885 virtual void v_OnDeactivate ();
00886
00890 virtual bool v_OnKey (MGUI::POINT point, MGUI::KEYCODE, KEYSTATE);
00891
00893 virtual void v_OnNotifyChange (
00894 CHANGESEQ changeseq,
00895 CHANGETYPE changetype
00896 );
00897
00899 virtual bool v_OnPointerButtonDown (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate) = 0;
00900
00902 virtual bool v_OnPointerButtonUp (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00903
00905 virtual void v_OnPointerEnter ();
00906
00908 virtual void v_OnPointerLeave ();
00909
00911 virtual void v_OnPointerMove (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00912
00914 virtual void v_OnResume ();
00915
00917 virtual void v_OnSet3D ();
00918
00920 virtual void v_OnSetTransToMap ();
00921
00923 virtual void v_OnSetTransToWindow ();
00924
00926 virtual void v_OnSizeCanvas ();
00927
00929 virtual void v_OnSuspend ();
00930
00931 friend class TOOLCANVAS::PRIV;
00932 };
00933
00934 #ifndef GENERATING_DOXYGEN_OUTPUT
00935 DEFINE_ENUM_OP_BITWISE(TOOL_BASE::ADJUSTFLAGS)
00936 DEFINE_ENUM_OP_BITWISE(TOOL_BASE::CTRLOPT)
00937 #endif
00938
00939
00940
00942 class TOOL_LIMITED : public TOOL_BASE {
00943 public:
00944
00946 virtual ~TOOL_LIMITED ();
00947
00949 void SetLimits (
00950 const DRECT2D& rect
00951 );
00952
00955 void SetLimitsEnforced (
00956 bool enforced = true
00957 );
00958
00959 protected:
00960
00962 explicit TOOL_LIMITED (
00963 TOOLCANVAS *canvas,
00964 CONTROLNEED ControlNeed = CONTROLNEED_None,
00965 CAPABILITY capability = CAPABILITY_Default
00966 );
00967
00969 const DRECT2D& GetLimits (
00970 ) const { return (m_Limits); }
00971
00973 bool IsLimitsEnforced (
00974 ) const { return (m_LimitsEnforced); }
00975
00978 virtual void v_OnActivate ();
00979
00982 virtual void v_OnSetTransToWindow ();
00983
00984 private:
00985 #ifndef GENERATING_DOXYGEN_OUTPUT
00986 typedef TOOL_BASE BASECLASS;
00987
00988 bool m_LimitsEnforced;
00989 bool m_LimitsSet;
00990 DRECT2D m_Limits;
00991
00992
00993 virtual void v_OnSizeCanvas ();
00994
00995
00996 virtual void v_OnChangeLimits ();
00997
00998 void UpdateLimits ();
00999 #endif // GENERATING_DOXYGEN_OUTPUT
01000 };
01001
01002
01003
01004 }
01005
01006 #endif // INC_MGUI_TOOLBASE_H
01007