00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __A2DCANVASSTTOOL_H__
00018 #define __A2DCANVASSTTOOL_H__
00019
00020 #ifndef WX_PRECOMP
00021 #include "wx/wx.h"
00022 #endif
00023
00024 #include <wx/listimpl.cpp>
00025
00026 #include "wx/canvas/canmod.h"
00027
00028 #ifdef A2DEDITORMAKINGDLL
00029 #define A2DEDITORDLLEXP WXEXPORT
00030 #define A2DEDITORDLLEXP_DATA(type) WXEXPORT type
00031 #define A2DEDITORDLLEXP_CTORFN
00032 #elif defined(WXART2D_USINGDLL)
00033 #define A2DEDITORDLLEXP WXIMPORT
00034 #define A2DEDITORDLLEXP_DATA(type) WXIMPORT type
00035 #define A2DEDITORDLLEXP_CTORFN
00036 #else // not making nor using DLL
00037 #define A2DEDITORDLLEXP
00038 #define A2DEDITORDLLEXP_DATA(type) type
00039 #define A2DEDITORDLLEXP_CTORFN
00040 #endif
00041
00042 WX_DECLARE_LIST_WITH_DECL(a2dBoundingBox, wxZoomList, class A2DEDITORDLLEXP);
00043
00044
00045
00046
00047
00048
00049
00050 A2DEDITORDLLEXP_DATA(extern const long) TC_UNDO;
00051 A2DEDITORDLLEXP_DATA(extern const long) TC_REDO;
00052 A2DEDITORDLLEXP_DATA(extern const long) TC_ENDTOOL;
00053 A2DEDITORDLLEXP_DATA(extern const long) TC_ZOOMIN;
00054 A2DEDITORDLLEXP_DATA(extern const long) TC_ZOOMOUT;
00055 A2DEDITORDLLEXP_DATA(extern const long) TC_ZOOMBACK;
00056 A2DEDITORDLLEXP_DATA(extern const long) TC_ZOOMOUT2;
00057 A2DEDITORDLLEXP_DATA(extern const long) TC_ZOOMIN2;
00058 A2DEDITORDLLEXP_DATA(extern const long) TC_ZOOMPANXY;
00059 A2DEDITORDLLEXP_DATA(extern const long) TC_PROPERTY_XY;
00060
00061
00062
00063
00064 enum DRAGMODE
00065 {
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 wxDRAW_RECTANGLE,
00078
00079 wxDRAW_ONTOP,
00080
00081 wxDRAW_REDRAW,
00082
00083 wxDRAW_COPY
00084 };
00085
00086
00087
00088
00089 enum wxTC_BEHAVIOR
00090 {
00091 wxTC_DefaultBehavior = 0x00000000,
00092 wxTC_NoDefaultKeys = 0x00000001,
00093 wxTC_NoContextMenu = 0x00000002,
00094 wxTC_NoDefaultMouseActions = 0x00000004,
00095 wxTC_NoAll = 0xFFFFFFFF
00096 };
00097
00098 class A2DEDITORDLLEXP a2dStToolContr;
00099 #if defined(WXART2D_USINGDLL)
00100 template class A2DEDITORDLLEXP a2dSmrtPtr<a2dStToolContr>;
00101 #endif
00102
00103 class A2DEDITORDLLEXP a2dObjectEditTool;
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 class A2DEDITORDLLEXP a2dStTool: public a2dBaseTool
00114 {
00115 public:
00116
00117
00118
00119 static const wxEventType sm_toolComEventAddObject;
00120
00121
00122 static const wxEventType sm_toolComEventSetEditObject;
00123
00124
00125 a2dStTool(a2dStToolContr* controller);
00126
00127
00128 a2dStTool( const a2dStTool& other, CloneOptions options );
00129
00130
00131 virtual ~a2dStTool();
00132
00133
00134 virtual bool OnPushNewTool( a2dBaseTool* newtool );
00135
00136 virtual void SetActive( bool active = true );
00137
00138
00139
00140
00141
00142
00143
00144
00145 virtual bool EnterBusyMode();
00146
00147 virtual void FinishBusyMode( bool closeCommandGroup = true );
00148 virtual void AbortBusyMode();
00149
00150
00151
00152
00153
00154 void AddCurrent( a2dCanvasObject* objectToAdd );
00155
00156
00157
00158
00159
00160 virtual void Render();
00161
00162
00163
00164
00165
00166 void RenderAnotation();
00167
00168
00169
00170
00171
00172 a2dStToolContr *GetStToolContr() { return (a2dStToolContr*) m_controller; }
00173
00174
00175 a2dObjectEditTool* StartEditTool( a2dCanvasObject *objecttoedit );
00176
00177
00178
00179
00180
00181
00182
00183 void SetEditAtEnd( bool editatend ) { m_editatend = editatend; }
00184
00185
00186 bool GetEditAtEnd() { return m_editatend; }
00187
00188
00189 enum a2dOpaqueMode
00190 {
00191 a2dOpaqueMode_Off = 0x00000000,
00192 a2dOpaqueMode_Tool = 0x00000001,
00193 a2dOpaqueMode_Tool_FixedStyle = 0x00000002,
00194 a2dOpaqueMode_Controller = 0x00000004,
00195 };
00196
00197
00198
00199
00200
00201 void SetOpacityFactorEditcopy( wxUint8 editOpacity ) { m_editOpacityFactor = editOpacity; }
00202
00203
00204
00205
00206
00207
00208
00209 void SetUseOpaqueEditcopy( a2dOpaqueMode editOpaque ) { m_useEditOpaque = editOpaque; }
00210
00211
00212 void SetConnectionGenerator( a2dConnectionGenerator *connectionGenerator ) { m_connectionGenerator = connectionGenerator; };
00213
00214
00215 a2dConnectionGenerator* GetConnectionGenerator() const { return m_connectionGenerator; }
00216
00217
00218 a2dCanvasObject* GetOriginal() { return m_original; }
00219
00220
00221
00222
00223
00224
00225 bool SetContext( a2dIterC& ic, a2dCanvasObject* startObject = NULL );
00226
00227 protected:
00228
00229
00230
00231
00232
00233
00234
00235 a2dPin* FindUnConnectedPin( a2dCanvasObject *root, double x, double y, a2dPinClass* withPinClass = NULL );
00236
00237
00238 void MouseToToolWorld( int x, int y, double& xWorldLocal, double& yWorldLocal );
00239
00240
00241 wxRect GetAbsoluteArea( a2dCanvasObject* object );
00242
00243
00244 void GetTextExtent(const wxString& string, wxCoord *w, wxCoord *h, wxCoord *descent = NULL, wxCoord *externalLeading = NULL);
00245
00246
00247 void OnPaint( wxPaintEvent &event );
00248
00249
00250 void OnIdle( wxIdleEvent &event );
00251
00252
00253 void OnUndoEvent( a2dCommandProcessorEvent& event );
00254
00255
00256 void OnDoEvent( a2dCommandProcessorEvent& event );
00257
00258
00259 void OnComEvent( a2dComEvent& event );
00260
00261
00262 virtual void GenerateAnotation();
00263
00264
00265 void AddAnotationToPendingUpdateArea();
00266
00267
00268 void GetKeyIncrement(double *xIncr, double *yIncr, bool altDown);
00269
00270
00271 void OnKeyDown(wxKeyEvent& event);
00272
00273 void OnKeyUp(wxKeyEvent& event);
00274
00275
00276 void OnChar(wxKeyEvent& event);
00277
00278
00279 void OnMouseEvent(wxMouseEvent& event);
00280
00281
00282 virtual void AdjustRenderOptions();
00283
00284
00285
00286 virtual bool CreateToolObjects();
00287
00288
00289 virtual void CleanupToolObjects();
00290
00291
00292 wxString m_anotation;
00293
00294
00295 int m_xanotation;
00296
00297
00298 int m_yanotation;
00299
00300 int m_prevxanotation;
00301 int m_prevyanotation;
00302
00303
00304 int m_x;
00305
00306 int m_y;
00307
00308
00309 int m_xprev;
00310
00311
00312 int m_yprev;
00313
00314
00315 double m_xwprev;
00316
00317
00318 double m_ywprev;
00319
00320
00321 int m_dragstartx;
00322
00323 int m_dragstarty;
00324
00325
00326 bool m_dragStarted;
00327
00328
00329
00330
00331
00332
00333 a2dCanvasObjectPtr m_canvasobject;
00334
00335
00336
00337
00338
00339
00340 a2dCanvasObjectPtr m_original;
00341
00342
00343 a2dStToolContr* m_stcontroller;
00344
00345
00346 a2dConnectionGenerator* m_connectionGenerator;
00347
00348
00349 bool m_renderOriginal;
00350
00351
00352 bool m_renderEditcopy;
00353
00354 bool m_renderEditcopyOnTop;
00355
00356 bool m_renderEditcopyEdit;
00357
00358 bool m_renderEditcopyRectangle;
00359
00360
00361 bool m_editatend;
00362
00363
00364 wxUint8 m_editOpacityFactor;
00365
00366
00367 a2dOpaqueMode m_useEditOpaque;
00368
00369 friend class a2dStToolEvtHandler;
00370 friend class a2dStToolFixedToolStyleEvtHandler;
00371
00372 public:
00373
00374 DECLARE_CLASS(a2dStTool)
00375 A2D_DECLARE_EVENT_TABLE()
00376 };
00377
00378
00379 class A2DEDITORDLLEXP a2dStDrawTool: public a2dStTool
00380 {
00381 public:
00382
00383 a2dStDrawTool(a2dStToolContr* controller);
00384
00385
00386 virtual ~a2dStDrawTool();
00387
00388
00389 void SetAllowModifyTemplate( bool allowModifyTemplate ) { m_AllowModifyTemplate = allowModifyTemplate; }
00390
00391
00392 bool GetAllowModifyTemplate() { return m_AllowModifyTemplate; }
00393
00394
00395 protected:
00396 bool EnterBusyMode();
00397 virtual void FinishBusyMode( bool closeCommandGroup = true );
00398 void AbortBusyMode();
00399
00400
00401 void OnKeyDown(wxKeyEvent& event);
00402
00403 void OnKeyUp(wxKeyEvent& event);
00404
00405
00406 void OnChar(wxKeyEvent& event);
00407
00408
00409
00410 virtual bool CreateToolObjects();
00411
00412 void AdjustRenderOptions();
00413
00414 bool m_AllowModifyTemplate;
00415
00416 public:
00417
00418 DECLARE_CLASS(a2dStDrawTool)
00419 A2D_DECLARE_EVENT_TABLE()
00420 };
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437 class A2DEDITORDLLEXP a2dStToolContr: public a2dToolContr
00438 {
00439 public:
00440
00441
00442
00443
00444
00445
00446 a2dStToolContr(a2dCanvasView* view,wxFrame* where);
00447
00448
00449 ~a2dStToolContr();
00450
00451
00452 virtual void ReStart();
00453
00454
00455
00456
00457
00458 wxMenu* GetMousePopupMenu() { return m_mousemenu; }
00459
00460
00461
00462
00463
00464 void SetMousePopupMenu( wxMenu* mousemenu );
00465
00466
00467
00468
00469
00470 bool PushTool(a2dBaseTool* tool);
00471
00472
00473
00474
00475
00476
00477 virtual bool PopTool( a2dSmrtPtr<a2dBaseTool>& poped, bool force = true );
00478
00479
00480 void SetZoomoutCentered(bool center ){ m_zoomoutCentered = center;}
00481
00482
00483 bool GetZoomoutCentered(){ return m_zoomoutCentered; }
00484
00485
00486
00487
00488
00489 void SetZoomFirst( bool zoomfirst );
00490
00491
00492
00493
00494
00495
00496
00497
00498 void SetTopTool( a2dBaseTool* toolOnTop );
00499
00500
00501
00502
00503
00504
00505
00506 void SetZoomTool( a2dBaseTool* toolForZoom );
00507
00508
00509
00510
00511 void SetShowMouse( bool showmouse ) { m_show_mousepos = showmouse; }
00512
00513
00514
00515
00516
00517 void SetDragMode(DRAGMODE mode) { m_dragmode=mode; }
00518
00519
00520
00521 DRAGMODE GetDragMode() { return m_dragmode; }
00522
00523 void SetDrawMode( a2dDrawStyle drawstyle ) { m_drawmode = drawstyle; }
00524
00525 a2dDrawStyle GetDrawMode() { return m_drawmode; }
00526
00527
00528
00529 void SetDefaultBehavior( unsigned int behavior ){ m_defaultBehavior = behavior; }
00530
00531 unsigned int GetDefaultBehavior() { return m_defaultBehavior; }
00532
00533
00534 void Undo( wxCommandEvent& );
00535
00536
00537 void Redo( wxCommandEvent& );
00538
00539
00540 void EndTool( wxCommandEvent& );
00541
00542
00543 void EditProperties( wxCommandEvent& );
00544
00545
00546 void OnSetmenuStrings( a2dCommandProcessorEvent& event );
00547
00548
00549 void ZoomWindow();
00550
00551 void ZoomPan();
00552
00553 void ZoomUndo();
00554
00555 void Zoomout();
00556
00557 void Zoomout2();
00558
00559 void Zoomin2();
00560
00561 void Zoom( double x, double y, double uppx, double uppy );
00562
00563
00564 void ZoomOut2AtMouse();
00565
00566
00567 void ZoomIn2AtMouse();
00568
00569
00570 wxZoomList& GetZoomList(){return m_zoomstack;};
00571
00572
00573
00574 virtual void ShowMouse();
00575
00576
00577 wxPoint GetMousePosition() { return wxPoint( m_mouse_x, m_mouse_y ); }
00578
00579
00580 wxFrame* GetFrame() { return m_where; }
00581
00582
00583 virtual bool StartEditingObject( a2dCanvasObject* objectToEdit );
00584
00585
00586 virtual bool StartEditingObject( a2dCanvasObject* objectToEdit, a2dIterC& ic );
00587
00588
00589 bool TriggerReStartEdit( wxUint16 editmode );
00590
00591
00592
00593
00594
00595 void SetOpacityFactorEditcopy( wxUint8 editOpacity ) { m_editOpacityFactor = editOpacity; }
00596
00597
00598 wxUint8 GetOpacityFactorEditcopy() { return m_editOpacityFactor; }
00599
00600
00601
00602
00603
00604
00605
00606 void SetUseOpaqueEditcopy( bool editOpaque ) { m_useEditOpaque = editOpaque; }
00607
00608
00609 bool GetUseOpaqueEditcopy() { return m_useEditOpaque; }
00610
00611 protected:
00612
00613
00614 void ZoomWindowMenu( wxCommandEvent& );
00615
00616 void ZoomPanMenu( wxCommandEvent& );
00617
00618 void ZoomUndoMenu( wxCommandEvent& );
00619
00620 void ZoomoutMenu( wxCommandEvent& );
00621
00622 void Zoomout2Menu( wxCommandEvent& );
00623
00624 void Zoomin2Menu( wxCommandEvent& );
00625
00626
00627 void OnComEvent( a2dComEvent& event );
00628
00629
00630 void OnMouseEvent(wxMouseEvent& event);
00631
00632 void OnChar(wxKeyEvent& event);
00633
00634 void OnKeyDown(wxKeyEvent& event);
00635
00636 void OnKeyUp(wxKeyEvent& event);
00637
00638
00639 bool m_show_mousepos;
00640
00641
00642 wxFrame* m_where;
00643
00644
00645 wxZoomList m_zoomstack;
00646
00647
00648 wxMenu *m_mousemenu;
00649
00650
00651 int m_mouse_x;
00652
00653
00654 int m_mouse_y;
00655
00656
00657 bool m_zoomoutCentered;
00658
00659
00660 DRAGMODE m_dragmode;
00661
00662
00663 a2dDrawStyle m_drawmode;
00664
00665
00666 unsigned int m_defaultBehavior;
00667
00668
00669 a2dSmrtPtr< a2dBaseTool > m_topTool;
00670
00671
00672 a2dSmrtPtr< a2dBaseTool > m_toolForZoom;
00673
00674
00675 wxUint8 m_editOpacityFactor;
00676
00677
00678 bool m_useEditOpaque;
00679
00680 public:
00681 static const a2dPropertyIdBool PROPID_zoomfirst;
00682
00683
00684 static const wxEventType sm_showCursor;
00685
00686 DECLARE_CLASS(a2dStToolContr)
00687 A2D_DECLARE_EVENT_TABLE()
00688 };
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700 class A2DEDITORDLLEXP a2dDrawRectangleTool: public a2dStDrawTool
00701 {
00702 public:
00703
00704
00705
00706
00707 static const a2dCommandId COMID_PushTool_DrawRectangle;
00708
00709 a2dDrawRectangleTool(a2dStToolContr* controller);
00710 ~a2dDrawRectangleTool();
00711 bool ZoomSave(){ return true; }
00712
00713 void SetRadius(double radius) { m_radius = radius; }
00714
00715 protected:
00716
00717 virtual void GenerateAnotation();
00718
00719 void OnMouseEvent(wxMouseEvent& event);
00720
00721 virtual wxString GetCommandGroupName() { return _("Draw Rectangle"); }
00722
00723 double m_radius;
00724
00725 public:
00726 DECLARE_CLASS(a2dDrawRectangleTool)
00727 A2D_DECLARE_EVENT_TABLE()
00728
00729 };
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742 class A2DEDITORDLLEXP a2dZoomTool: public a2dStTool
00743 {
00744 public:
00745
00746
00747
00748
00749 static const a2dCommandId COMID_PushTool_Zoom;
00750
00751
00752 a2dZoomTool(a2dStToolContr* controller);
00753
00754
00755 a2dZoomTool( const a2dZoomTool& other, CloneOptions options );
00756
00757
00758 ~a2dZoomTool();
00759
00760 virtual a2dObject* Clone( CloneOptions options = clone_deep ) const;
00761
00762 bool ZoomSave(){return true;};
00763
00764 protected:
00765
00766 virtual void GenerateAnotation();
00767
00768
00769 void OnChar(wxKeyEvent& event);
00770
00771 void OnMouseEvent(wxMouseEvent& event);
00772
00773 virtual wxString GetCommandGroupName() { return _("Zoom objects"); }
00774
00775 bool m_draggingCanvas;
00776
00777 public:
00778
00779 DECLARE_CLASS(a2dZoomTool)
00780 A2D_DECLARE_EVENT_TABLE()
00781
00782 };
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793 class A2DEDITORDLLEXP a2dSelectTool: public a2dStTool
00794 {
00795 public:
00796
00797
00798
00799
00800 static const a2dCommandId COMID_PushTool_Select;
00801
00802 a2dSelectTool(a2dStToolContr* controller);
00803 ~a2dSelectTool();
00804 bool ZoomSave(){ return true;};
00805 void SetShiftIsAdd() { m_shift_is_add = true; }
00806
00807 protected:
00808 void DeselectAll();
00809
00810 virtual void GenerateAnotation();
00811
00812 void OnChar(wxKeyEvent& event);
00813
00814 void OnMouseEvent(wxMouseEvent& event);
00815
00816 virtual bool CreateToolObjects();
00817
00818 wxString GetCommandGroupName() { return _("Select object(s)") ; }
00819
00820 public:
00821
00822 DECLARE_CLASS(a2dSelectTool)
00823 A2D_DECLARE_EVENT_TABLE()
00824
00825 protected:
00826
00827 bool m_shift_is_add;
00828
00829 };
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841 class A2DEDITORDLLEXP a2dImageTool: public a2dStDrawTool
00842 {
00843 public:
00844
00845
00846
00847
00848 static const a2dCommandId COMID_PushTool_Image;
00849
00850 a2dImageTool(a2dStToolContr* controller);
00851
00852 ~a2dImageTool();
00853
00854 bool ZoomSave(){ return true;};
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865 void SetDrawPatternOnTop(bool drawPatternOnTop) { m_drawPatternOnTop = drawPatternOnTop; }
00866
00867
00868
00869
00870
00871
00872
00873 bool GetDrawPatternOnTop() { return m_drawPatternOnTop; }
00874
00875
00876 protected:
00877
00878 virtual void GenerateAnotation();
00879
00880 void OnChar(wxKeyEvent& event);
00881
00882 void OnMouseEvent(wxMouseEvent& event);
00883
00884 bool m_drawPatternOnTop;
00885
00886 public:
00887
00888 DECLARE_CLASS(a2dImageTool)
00889 A2D_DECLARE_EVENT_TABLE()
00890
00891 };
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903 class A2DEDITORDLLEXP a2dDragTool: public a2dStTool
00904 {
00905 public:
00906
00907
00908
00909
00910 static const a2dCommandId COMID_PushTool_Drag;
00911
00912
00913 a2dDragTool(a2dStToolContr* controller);
00914
00915 ~a2dDragTool();
00916
00917 bool ZoomSave(){ return !GetBusy(); }
00918
00919
00920 void SetDeleteOnOutsideDrop( bool val ) { m_deleteonoutsidedrop = val; }
00921
00922
00923 void CaptureMouse();
00924
00925 void ReleaseMouse();
00926
00927 void Render();
00928
00929
00930 virtual void AdjustShift( double *x, double *y );
00931
00932 protected:
00933
00934 void OnChar(wxKeyEvent& event);
00935
00936 void OnMouseEvent(wxMouseEvent& event);
00937
00938 virtual bool EnterBusyMode();
00939 virtual void FinishBusyMode( bool closeCommandGroup = true );
00940 virtual void AbortBusyMode();
00941
00942
00943 virtual void DragAbsolute( double x, double y );
00944
00945 virtual wxString GetCommandGroupName() { return _("Move object") ; }
00946 virtual bool CreateToolObjects();
00947 virtual void CleanupToolObjects();
00948
00949
00950 a2dAffineMatrix m_transform;
00951
00952
00953 bool m_wasMayConnect;
00954
00955
00956 bool m_lateconnect;
00957
00958
00959 bool m_mousecaptured;
00960
00961
00962 bool m_deleteonoutsidedrop;
00963
00964
00965 double m_startObjectx;
00966
00967 double m_startObjecty;
00968
00969 double m_startMousex;
00970
00971 double m_startMousey;
00972
00973
00974 a2dCanvasObjectList m_connectedwirecopies;
00975
00976 public:
00977 DECLARE_CLASS(a2dDragTool)
00978 A2D_DECLARE_EVENT_TABLE()
00979
00980 };
00981
00982 class A2DEDITORDLLEXP a2dDragOrgTool: public a2dStTool
00983 {
00984 public:
00985
00986
00987
00988
00989 static const a2dCommandId COMID_PushTool_DragOrg;
00990
00991
00992 a2dDragOrgTool(a2dStToolContr* controller);
00993
00994 ~a2dDragOrgTool();
00995
00996 bool ZoomSave(){ return !GetBusy(); }
00997
00998
00999 void SetDeleteOnOutsideDrop( bool val ) { m_deleteonoutsidedrop = val; }
01000
01001
01002 void CaptureMouse();
01003
01004 void ReleaseMouse();
01005
01006 void Render();
01007
01008
01009 virtual void AdjustShift( double *x, double *y );
01010
01011 protected:
01012
01013 void OnChar(wxKeyEvent& event);
01014
01015 void OnMouseEvent(wxMouseEvent& event);
01016
01017 virtual bool EnterBusyMode();
01018 virtual void FinishBusyMode( bool closeCommandGroup = true );
01019 virtual void AbortBusyMode();
01020
01021
01022 virtual void DragAbsolute( double x, double y );
01023
01024 virtual wxString GetCommandGroupName() { return _("Move object") ; }
01025 virtual bool CreateToolObjects();
01026 virtual void CleanupToolObjects();
01027
01028
01029 a2dAffineMatrix m_transform;
01030
01031
01032 bool m_wasMayConnect;
01033
01034
01035 bool m_lateconnect;
01036
01037
01038 bool m_mousecaptured;
01039
01040
01041 bool m_deleteonoutsidedrop;
01042
01043
01044 double m_startObjectx;
01045
01046 double m_startObjecty;
01047
01048 double m_startMousex;
01049
01050 double m_startMousey;
01051
01052
01053 a2dCanvasObjectList m_connectedwirecopies;
01054
01055 public:
01056 DECLARE_CLASS(a2dDragOrgTool)
01057 A2D_DECLARE_EVENT_TABLE()
01058
01059 };
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072 class A2DEDITORDLLEXP a2dDragNewTool: public a2dDragTool
01073 {
01074 public:
01075
01076
01077
01078
01079 static const a2dCommandId COMID_PushTool_DragNew;
01080
01081
01082
01083
01084
01085 a2dDragNewTool( a2dStToolContr* controller, a2dCanvasObject *newObject);
01086 ~a2dDragNewTool();
01087
01088 bool ZoomSave(){ return true; }
01089
01090 void OnMouseEvent(wxMouseEvent& event);
01091
01092 virtual void AdjustRenderOptions();
01093
01094 protected:
01095
01096 void OnComEvent( a2dComEvent& event );
01097
01098
01099 void OnEnter( wxMouseEvent & WXUNUSED(event) );
01100
01101 virtual wxString GetCommandGroupName() { return _("Create new object") ; }
01102 virtual void DoStopTool( bool abort );
01103 virtual bool EnterBusyMode();
01104 virtual void FinishBusyMode( bool closeCommandGroup = true );
01105
01106 a2dCanvasObjectPtr m_newObject;
01107
01108
01109 a2dCanvasObjectPtr m_parentAddedTo;
01110
01111 public:
01112 DECLARE_CLASS(a2dDragNewTool)
01113 A2D_DECLARE_EVENT_TABLE()
01114 };
01115
01116
01117
01118
01119
01120
01121
01122
01123
01124 class A2DEDITORDLLEXP a2dCopyTool: public a2dDragTool
01125 {
01126 public:
01127
01128
01129
01130
01131 static const a2dCommandId COMID_PushTool_Copy;
01132
01133 a2dCopyTool(a2dStToolContr* controller);
01134 bool ZoomSave(){ return !GetBusy(); };
01135
01136 protected:
01137 void OnMouseEvent(wxMouseEvent& event);
01138
01139 virtual bool CreateToolObjects();
01140
01141 virtual void AdjustShift( double *x, double *y );
01142
01143
01144 double m_mindist;
01145
01146 virtual wxString GetCommandGroupName() { return _("Copy"); }
01147
01148 public:
01149 DECLARE_CLASS(a2dCopyTool)
01150 A2D_DECLARE_EVENT_TABLE()
01151 };
01152
01153
01154
01155
01156
01157
01158
01159 class A2DEDITORDLLEXP a2dRotateTool: public a2dStTool
01160 {
01161 public:
01162
01163
01164
01165
01166 static const a2dCommandId COMID_PushTool_Rotate;
01167
01168 a2dRotateTool(a2dStToolContr* controller);
01169 ~a2dRotateTool();
01170 bool ZoomSave(){ return !GetBusy(); };
01171
01172
01173
01174 void CaptureMouse();
01175
01176 void ReleaseMouse();
01177
01178 protected:
01179
01180 bool EnterBusyMode();
01181 virtual void FinishBusyMode( bool closeCommandGroup = true );
01182 void AbortBusyMode();
01183
01184 void OnChar(wxKeyEvent& event);
01185
01186 void OnIdle( wxIdleEvent &event );
01187
01188 void OnMouseEvent(wxMouseEvent& event);
01189
01190 virtual wxString GetCommandGroupName() { return _("Rotate object") ; }
01191
01192 double m_xr;
01193 double m_yr;
01194
01195 bool m_mode;
01196
01197
01198 a2dAffineMatrix m_transform;
01199
01200 double m_ang;
01201
01202 public:
01203 DECLARE_CLASS(a2dRotateTool)
01204 A2D_DECLARE_EVENT_TABLE()
01205
01206 };
01207
01208
01209
01210
01211
01212
01213
01214
01215
01216
01217 class A2DEDITORDLLEXP a2dDeleteTool: public a2dStTool
01218 {
01219 public:
01220
01221
01222
01223
01224 static const a2dCommandId COMID_PushTool_Delete;
01225
01226 a2dDeleteTool(a2dStToolContr* controller, a2dCanvasObjectFlagsMask whichobjects =a2dCanvasOFlags::ALL );
01227 bool ZoomSave(){ return true;};
01228 void SetWhichObjectsFlagMask( a2dCanvasObjectFlagsMask whichobjects ) { m_whichobjects = whichobjects; }
01229
01230 protected:
01231
01232 void OnChar(wxKeyEvent& event);
01233
01234 void OnMouseEvent(wxMouseEvent& event);
01235
01236 virtual wxString GetCommandGroupName() { return _( "Delete object") ; }
01237
01238 public:
01239 DECLARE_CLASS(a2dDeleteTool)
01240 A2D_DECLARE_EVENT_TABLE()
01241
01242 protected:
01243 a2dCanvasObjectFlagsMask m_whichobjects;
01244
01245 };
01246
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256 class A2DEDITORDLLEXP a2dDrawCircleTool: public a2dStDrawTool
01257 {
01258 public:
01259
01260
01261
01262
01263 static const a2dCommandId COMID_PushTool_DrawCircle;
01264
01265 a2dDrawCircleTool(a2dStToolContr* controller);
01266 bool ZoomSave(){ return true;};
01267
01268 void SetMode( int mode );
01269
01270 protected:
01271
01272 void OnIdle( wxIdleEvent &event );
01273
01274 void OnChar(wxKeyEvent& event);
01275
01276 void OnMouseEvent(wxMouseEvent& event);
01277
01278 virtual void GenerateAnotation();
01279
01280 double m_start_x;
01281 double m_start_y;
01282 double m_radius;
01283
01284 public:
01285 DECLARE_CLASS(a2dDrawCircleTool)
01286 A2D_DECLARE_EVENT_TABLE()
01287
01288 };
01289
01290
01291
01292
01293
01294
01295
01296
01297
01298
01299
01300 class A2DEDITORDLLEXP a2dDrawLineTool: public a2dStDrawTool
01301 {
01302 public:
01303
01304
01305
01306
01307 static const a2dCommandId COMID_PushTool_DrawLine;
01308 static const a2dCommandId COMID_PushTool_DrawLineScaledArrow;
01309
01310 a2dDrawLineTool(a2dStToolContr* controller, a2dSLine* templateObject = NULL );
01311
01312 ~a2dDrawLineTool();
01313
01314 bool ZoomSave(){ return true;};
01315
01316
01317 void SetLineBegin(a2dCanvasObject* begin);
01318
01319
01320 void SetLineEnd(a2dCanvasObject* end);
01321
01322
01323
01324 a2dCanvasObject* GetLineBegin() { return m_templateObject->GetBegin(); }
01325
01326
01327
01328 a2dCanvasObject* GetLineEnd() { return m_templateObject->GetEnd(); }
01329
01330
01331 void SetEndScaleX(double xs);
01332
01333 void SetEndScaleY(double ys);
01334
01335
01336 double GetEndScaleX() { return m_templateObject->GetEndScaleX(); }
01337
01338
01339 double GetEndScaleY() { return m_templateObject->GetEndScaleY(); }
01340
01341
01342 void SetPathType( a2dPATH_END_TYPE pathtype );
01343
01344
01345 a2dPATH_END_TYPE GetPathType() { return m_templateObject->GetPathType(); }
01346
01347
01348 a2dSLine* GetTemplateObject() { return m_templateObject; }
01349
01350
01351 void SetTemplateObject( a2dSLine* templateobject ) { m_templateObject = templateobject; }
01352
01353 protected:
01354
01355 void OnChar(wxKeyEvent& event);
01356
01357 void OnMouseEvent(wxMouseEvent& event);
01358
01359 void OnDoEvent( a2dCommandProcessorEvent& event );
01360
01361 virtual void GenerateAnotation();
01362
01363 double m_x1;
01364 double m_y1;
01365 double m_x2;
01366 double m_y2;
01367
01368
01369 a2dSmrtPtr<a2dSLine> m_templateObject;
01370
01371 public:
01372 DECLARE_CLASS(a2dDrawLineTool)
01373 A2D_DECLARE_EVENT_TABLE()
01374
01375 };
01376
01377
01378
01379
01380
01381
01382
01383
01384
01385
01386
01387 class A2DEDITORDLLEXP a2dDrawEllipseTool: public a2dStDrawTool
01388 {
01389 public:
01390
01391
01392
01393
01394 static const a2dCommandId COMID_PushTool_DrawEllipse;
01395
01396 a2dDrawEllipseTool(a2dStToolContr* controller);
01397 bool ZoomSave(){ return true;};
01398
01399 void SetMode( int mode );
01400
01401 protected:
01402
01403 void OnIdle( wxIdleEvent &event );
01404
01405 void OnMouseEvent(wxMouseEvent& event);
01406
01407 void OnChar(wxKeyEvent& event);
01408
01409 virtual void GenerateAnotation();
01410
01411 double m_start_x;
01412 double m_start_y;
01413
01414
01415 public:
01416 DECLARE_CLASS(a2dDrawEllipseTool)
01417 A2D_DECLARE_EVENT_TABLE()
01418
01419 };
01420
01421
01422
01423
01424
01425
01426
01427
01428
01429
01430
01431
01432
01433 class A2DEDITORDLLEXP a2dDrawEllipticArcTool: public a2dStDrawTool
01434 {
01435 public:
01436
01437
01438
01439
01440 static const a2dCommandId COMID_PushTool_DrawEllipticArc;
01441
01442
01443
01444 static const a2dCommandId COMID_PushTool_DrawEllipticArc_Chord;
01445
01446 a2dDrawEllipticArcTool(a2dStToolContr* controller, a2dEllipticArc* templateObject = NULL );
01447 bool ZoomSave(){ return true;};
01448
01449 void SetMode( int mode );
01450
01451
01452 void SetMode2( int mode );
01453
01454 void SetChord( bool chord ) { m_chord = chord; };
01455
01456 protected:
01457
01458 void OnIdle( wxIdleEvent &event );
01459
01460 void OnChar(wxKeyEvent& event);
01461
01462 void OnMouseEvent(wxMouseEvent& event);
01463
01464 virtual void GenerateAnotation();
01465
01466
01467 a2dSmrtPtr<a2dEllipticArc> m_templateobject;
01468
01469
01470 double m_arcstart;
01471
01472 double m_arcend;
01473
01474
01475 double m_start_x;
01476
01477 double m_start_y;
01478
01479
01480 bool m_chord;
01481
01482
01483 int m_mode2;
01484
01485 public:
01486 DECLARE_CLASS(a2dDrawEllipticArcTool)
01487 A2D_DECLARE_EVENT_TABLE()
01488
01489 };
01490
01491
01492
01493
01494
01495
01496
01497
01498
01499
01500
01501
01502
01503 class A2DEDITORDLLEXP a2dDrawArcTool: public a2dStDrawTool
01504 {
01505 public:
01506
01507
01508
01509
01510 static const a2dCommandId COMID_PushTool_DrawArc;
01511
01512
01513
01514 static const a2dCommandId COMID_PushTool_DrawArc_Chord;
01515
01516 a2dDrawArcTool(a2dStToolContr* controller);
01517 bool ZoomSave(){ return true;};
01518
01519 void SetMode( int mode );
01520
01521
01522 void SetMode2( int mode );
01523
01524
01525 void SetChord( bool chord ) { m_chord = chord; };
01526
01527 protected:
01528
01529 void OnIdle( wxIdleEvent &event );
01530
01531 void OnChar(wxKeyEvent& event);
01532
01533 void OnMouseEvent(wxMouseEvent& event);
01534
01535 virtual void GenerateAnotation();
01536
01537 virtual wxString GetCommandGroupName() { return _("Draw Arc") ; }
01538
01539
01540 int m_mode2;
01541
01542
01543
01544 double m_arcstart;
01545
01546 double m_arcend;
01547
01548
01549 double m_start_x;
01550
01551 double m_start_y;
01552
01553
01554 bool m_chord;
01555
01556 public:
01557 DECLARE_CLASS(a2dDrawArcTool)
01558 A2D_DECLARE_EVENT_TABLE()
01559
01560 };
01561
01562
01563
01564
01565
01566
01567
01568
01569
01570
01571
01572
01573
01574
01575 class A2DEDITORDLLEXP a2dDrawPolygonLTool: public a2dStDrawTool
01576 {
01577 public:
01578
01579
01580
01581
01582 static const a2dCommandId COMID_PushTool_DrawPolygonL;
01583
01584
01585
01586 static const a2dCommandId COMID_PushTool_DrawPolygonL_Splined;
01587
01588
01589
01590
01591
01592
01593 a2dDrawPolygonLTool(a2dStToolContr* controller, a2dPolygonL* templateObject = NULL );
01594
01595 ~a2dDrawPolygonLTool();
01596
01597
01598 bool ZoomSave(){ return true;};
01599
01600
01601 void SetMode( int mode );
01602
01603
01604
01605
01606
01607 void SetSpline(bool spline);
01608
01609
01610 bool GetSpline(){return m_templateObject->GetSpline();}
01611
01612 protected:
01613
01614 void OnIdle( wxIdleEvent &event );
01615
01616 void OnChar(wxKeyEvent& event);
01617
01618 void OnMouseEvent(wxMouseEvent& event);
01619
01620 void OnUndoEvent( a2dCommandProcessorEvent& event );
01621 void OnRedoEvent( a2dCommandProcessorEvent& event );
01622
01623 void AddPoint( a2dLineSegment* point );
01624
01625 virtual wxString GetCommandGroupName() { return _("Draw polygon") ; }
01626
01627
01628 a2dSmrtPtr<a2dPolygonL> m_templateObject;
01629
01630
01631 double m_prev_x;
01632
01633 double m_prev_y;
01634
01635
01636 a2dVertexList* m_points;
01637
01638
01639 a2dLineSegment* m_point;
01640
01641
01642 bool m_reverse;
01643
01644 public:
01645 DECLARE_CLASS(a2dDrawPolygonLTool)
01646 A2D_DECLARE_EVENT_TABLE()
01647
01648 };
01649
01650
01651
01652
01653
01654
01655
01656
01657
01658
01659
01660
01661
01662 class A2DEDITORDLLEXP a2dDrawPolylineLTool: public a2dDrawPolygonLTool
01663 {
01664 public:
01665
01666
01667
01668
01669 static const a2dCommandId COMID_PushTool_DrawPolylineL;
01670
01671
01672
01673 static const a2dCommandId COMID_PushTool_DrawPolylineL_Splined;
01674
01675
01676
01677
01678
01679
01680 a2dDrawPolylineLTool(a2dStToolContr* controller, a2dPolylineL* templateObject = NULL );
01681
01682 ~a2dDrawPolylineLTool();
01683
01684
01685
01686
01687
01688 void SetLineBegin(a2dCanvasObject* begin);
01689
01690
01691
01692
01693
01694 void SetLineEnd(a2dCanvasObject* end);
01695
01696
01697
01698 a2dCanvasObject* GetLineBegin() { return m_templatePline->GetBegin(); }
01699
01700
01701
01702 a2dCanvasObject* GetLineEnd() { return m_templatePline->GetEnd(); }
01703
01704
01705 void SetEndScaleX(double xs);
01706
01707 void SetEndScaleY(double ys);
01708
01709
01710 double GetEndScaleX() { return m_templatePline->GetEndScaleX(); }
01711
01712
01713 double GetEndScaleY() { return m_templatePline->GetEndScaleY(); }
01714
01715
01716 void SetPathType( a2dPATH_END_TYPE pathtype );
01717
01718
01719 a2dPATH_END_TYPE GetPathType() { return m_templatePline->GetPathType(); }
01720
01721 protected:
01722
01723 void OnMouseEvent(wxMouseEvent& event);
01724
01725 void OnDoEvent( a2dCommandProcessorEvent& event );
01726
01727 a2dSmrtPtr<a2dPolylineL> m_templatePline;
01728
01729 public:
01730 DECLARE_CLASS(a2dDrawPolylineLTool)
01731 A2D_DECLARE_EVENT_TABLE()
01732
01733 };
01734
01735
01736
01737
01738
01739
01740
01741
01742
01743
01744
01745
01746
01747
01748
01749
01750
01751
01752
01753
01754
01755
01756
01757
01758
01759
01760
01761
01762
01763
01764
01765 class A2DEDITORDLLEXP a2dDrawWirePolylineLTool: public a2dDrawPolylineLTool
01766 {
01767
01768 public:
01769
01770
01771
01772
01773 static const a2dCommandId COMID_PushTool_DrawWirePolylineL;
01774
01775 a2dDrawWirePolylineLTool(a2dStToolContr* controller );
01776 ~a2dDrawWirePolylineLTool();
01777
01778
01779 enum a2dWiringMode
01780 {
01781
01782
01783
01784 a2d_BasedOnClassStartPin,
01785
01786
01787 a2d_BasedOnWireClassRequired,
01788 a2d_BasedOnObjectClassRequired,
01789
01790
01791
01792 a2d_BasedOnClassEndPin
01793 };
01794
01795 public:
01796
01797
01798
01799
01800
01801 a2dPin *FindPin( a2dCanvasObject *root, double x, double y, bool ForStartPin );
01802
01803 protected:
01804
01805 a2dWiringMode m_wiringMode;
01806
01807
01808 a2dPinClass* m_pinClassStartWire;
01809
01810
01811 a2dPinClass* m_pinClassEndWire;
01812
01813 protected:
01814 virtual bool EnterBusyMode();
01815 virtual void FinishBusyMode( bool closeCommandGroup = true );
01816 virtual void AbortBusyMode();
01817
01818 void AdjustRenderOptions();
01819 void OnMouseEvent(wxMouseEvent& event);
01820 void SetActive( bool active );
01821
01822 virtual wxString GetCommandGroupName() { return _("Draw wire") ; }
01823
01824 public:
01825 DECLARE_CLASS(a2dDrawWirePolylineLTool)
01826 A2D_DECLARE_EVENT_TABLE()
01827 };
01828
01829
01830
01831
01832
01833 class A2DEDITORDLLEXP a2dDragMultiTool: public a2dStTool
01834 {
01835 public:
01836
01837
01838
01839
01840 static const a2dCommandId COMID_PushTool_DragMulti;
01841
01842 a2dDragMultiTool(a2dStToolContr* controller);
01843 ~a2dDragMultiTool();
01844 bool ZoomSave(){ return !GetBusy(); };
01845
01846 protected:
01847
01848 void OnChar(wxKeyEvent& event);
01849
01850 void OnMouseEvent(wxMouseEvent& event);
01851
01852 virtual bool EnterBusyMode();
01853 virtual void FinishBusyMode( bool closeCommandGroup = true );
01854 virtual void AbortBusyMode();
01855
01856
01857 void CaptureMouse();
01858
01859 void ReleaseMouse();
01860
01861 void DragAbsolute( double x, double y );
01862
01863
01864 virtual void Render();
01865
01866 virtual void AdjustShift( double *x, double *y );
01867
01868 virtual wxString GetCommandGroupName() { return _("Move multiple objects") ; }
01869 virtual bool CreateToolObjects();
01870 virtual void CleanupToolObjects();
01871
01872
01873 a2dCanvasObjectList m_objects;
01874
01875
01876 a2dCanvasObjectList m_connectedwirecopies;
01877
01878
01879 double m_startObjectx;
01880
01881 double m_startObjecty;
01882
01883 double m_startMousexw;
01884
01885 double m_startMouseyw;
01886
01887 public:
01888 DECLARE_CLASS(a2dDragMultiTool)
01889 A2D_DECLARE_EVENT_TABLE()
01890
01891 };
01892
01893
01894
01895
01896
01897 class A2DEDITORDLLEXP a2dCopyMultiTool: public a2dDragMultiTool
01898 {
01899 public:
01900
01901
01902
01903
01904 static const a2dCommandId COMID_PushTool_CopyMulti;
01905
01906 a2dCopyMultiTool(a2dStToolContr* controller);
01907
01908 protected:
01909
01910 void OnChar(wxKeyEvent& event);
01911
01912 void OnMouseEvent(wxMouseEvent& event);
01913
01914 void AdjustShift( double *x, double *y );
01915
01916 virtual wxString GetCommandGroupName() { return _("Copy multiple objects") ; }
01917
01918
01919 double m_mindist;
01920 public:
01921 DECLARE_CLASS(a2dCopyMultiTool)
01922 A2D_DECLARE_EVENT_TABLE()
01923
01924 };
01925
01926
01927
01928
01929
01930
01931
01932
01933
01934
01935
01936
01937
01938 class A2DEDITORDLLEXP a2dDrawTextTool: public a2dStDrawTool
01939 {
01940 public:
01941
01942
01943
01944
01945 static const a2dCommandId COMID_PushTool_DrawText;
01946
01947 a2dDrawTextTool(a2dStToolContr* controller);
01948 ~a2dDrawTextTool();
01949
01950 bool ZoomSave(){ return true;};
01951
01952
01953
01954
01955 void SetLineSpacing( double linespace ) { m_linespace = linespace; }
01956
01957
01958 void SetFont( const a2dFont& font ) { m_font = font; }
01959
01960
01961 const a2dFont& GetFont() { return m_font; }
01962
01963
01964 void SetNextLineDirection( bool up ) { m_up = up; }
01965
01966 static a2dPropertyIdFont* PROPID_Font;
01967
01968 DECLARE_PROPERTIES()
01969
01970 protected:
01971
01972 const a2dFont& MX_GetFont() const { return m_font; }
01973 void MX_SetFont( const a2dFont& value ) { m_font = value; }
01974
01975 void OnMouseEvent(wxMouseEvent& event);
01976
01977
01978 a2dFont m_font;
01979
01980 double m_linespace;
01981
01982 int m_caret;
01983
01984 bool m_up;
01985
01986 public:
01987 DECLARE_CLASS(a2dDrawTextTool)
01988 A2D_DECLARE_EVENT_TABLE()
01989
01990 };
01991
01992
01993
01994
01995
01996
01997
01998
01999
02000
02001 class A2DEDITORDLLEXP a2dPropertyTool: public a2dStTool
02002 {
02003 public:
02004
02005
02006
02007
02008 static const a2dCommandId COMID_PushTool_Property;
02009
02010 a2dPropertyTool(a2dStToolContr* controller);
02011
02012 bool StartEditing( double x, double y );
02013
02014 bool StartEditing( int x, int y );
02015
02016 bool ZoomSave(){ return true;};
02017
02018 protected:
02019
02020 void OnChar(wxKeyEvent& event);
02021
02022 void OnMouseEvent(wxMouseEvent& event);
02023
02024
02025 a2dPropertyId *m_id;
02026
02027
02028 bool m_withUndo;
02029
02030 public:
02031 DECLARE_CLASS(a2dPropertyTool)
02032 A2D_DECLARE_EVENT_TABLE()
02033
02034 };
02035
02036
02037
02038
02039
02040
02041
02042
02043
02044
02045
02046
02047
02048 class A2DEDITORDLLEXP a2dStToolEvtHandler: public a2dToolEvtHandler
02049 {
02050 A2D_DECLARE_EVENT_TABLE()
02051
02052 public:
02053
02054
02055 enum options
02056 {
02057 a2dTakeToolstyleNon = 0x0000,
02058
02059
02060
02061
02062
02063
02064 a2dTakeToolstyleToCmdhOnPush = 0x0001,
02065
02066
02067
02068
02069
02070
02071 a2dTakeToolstyleFromCmdhOnPop = 0x0002,
02072
02073
02074
02075
02076
02077
02078 a2dTakeToolstyleFromCmdhOnPush = 0x0004,
02079
02080
02081 a2dTakeToolstyleToNewObject = 0x0008,
02082
02083
02084 a2d_ALL = 0xFFFF
02085 };
02086
02087
02088 a2dStToolEvtHandler( a2dStToolContr* controller );
02089
02090 ~a2dStToolEvtHandler();
02091
02092 void SetTakeToolstyleToCmdhOptions( wxUint32 set ) { m_options = set; }
02093 wxUint32 GetTakeToolstyleToCmdhOptions() { return m_options; }
02094
02095 void TakeToCmdhFromEditedObject( a2dObjectEditTool* editTool );
02096
02097 protected:
02098
02099 void OnKeyDown(wxKeyEvent& event);
02100 void OnKeyUp(wxKeyEvent& event);
02101 void OnDoEvent( a2dCommandProcessorEvent& event );
02102 void OnUndoEvent( a2dCommandProcessorEvent& event );
02103 void OnRedoEvent( a2dCommandProcessorEvent& event );
02104 void OnComEvent( a2dComEvent& event );
02105 void OnIdle( wxIdleEvent &event );
02106
02107
02108 a2dStToolContr* m_stcontroller;
02109
02110 wxUint32 m_options;
02111 };
02112
02113
02114
02115
02116 inline a2dStToolEvtHandler::options operator | ( a2dStToolEvtHandler::options a, a2dStToolEvtHandler::options b )
02117 {
02118 return (a2dStToolEvtHandler::options) ( (int) a | (int) b );
02119 }
02120
02121
02122
02123
02124
02125
02126
02127 class A2DEDITORDLLEXP a2dStToolFixedToolStyleEvtHandler: public a2dToolEvtHandler
02128 {
02129 A2D_DECLARE_EVENT_TABLE()
02130
02131 public:
02132
02133
02134 a2dStToolFixedToolStyleEvtHandler( a2dStToolContr* controller );
02135
02136 ~a2dStToolFixedToolStyleEvtHandler();
02137
02138
02139
02140
02141
02142
02143 void SetTakeToolstyleToCmdhOnPush( bool set ) { m_takeToolstyleToCmdhOnPush = set; }
02144
02145 bool GetTakeToolstyleToCmdhOnPush() { return m_takeToolstyleToCmdhOnPush; }
02146
02147 protected:
02148
02149 void OnKeyDown(wxKeyEvent& event);
02150 void OnKeyUp(wxKeyEvent& event);
02151 void OnDoEvent( a2dCommandProcessorEvent& event );
02152 void OnUndoEvent( a2dCommandProcessorEvent& event );
02153 void OnRedoEvent( a2dCommandProcessorEvent& event );
02154
02155 void OnComEvent( a2dComEvent& event );
02156
02157
02158 a2dStToolContr* m_stcontroller;
02159
02160
02161 bool m_takeToolstyleToCmdhOnPush;
02162 };
02163
02164
02165
02166
02167
02168
02169
02170
02171
02172
02173
02174
02175
02176
02177
02178
02179
02180
02181
02182
02183
02184 class A2DEDITORDLLEXP a2dDrawVPathTool: public a2dStDrawTool
02185 {
02186 public:
02187
02188
02189
02190
02191 static const a2dCommandId COMID_PushTool_DrawVPath;
02192
02193
02194
02195
02196
02197
02198 a2dDrawVPathTool(a2dStToolContr* controller, a2dVectorPath* templateObject = NULL );
02199
02200 ~a2dDrawVPathTool();
02201
02202
02203 bool ZoomSave(){ return true;};
02204
02205
02206 void SetMode( int mode );
02207
02208 protected:
02209
02210 void OnIdle( wxIdleEvent &event );
02211
02212 void OnChar(wxKeyEvent& event);
02213
02214 void OnMouseEvent(wxMouseEvent& event);
02215
02216 void OnUndoEvent( a2dCommandProcessorEvent& event );
02217 void OnRedoEvent( a2dCommandProcessorEvent& event );
02218
02219 void AddSegment( a2dVpathSegment* segment );
02220
02221 virtual wxString GetCommandGroupName() { return _("Draw polygon") ; }
02222
02223
02224 a2dSmrtPtr<a2dVectorPath> m_templateObject;
02225 a2dSmrtPtr<a2dPolylineL> m_controlPoints;
02226
02227
02228 double m_prev_x;
02229
02230 double m_prev_y;
02231
02232
02233 double m_contrmid_x;
02234
02235 double m_contrmid_y;
02236
02237 bool m_controlSet;
02238 bool m_endSegment;
02239 bool m_bezier;
02240
02241
02242 a2dVpath* m_vpath;
02243
02244
02245 a2dVpathSegment* m_segment;
02246 a2dVpathSegment* m_segmentPrev;
02247
02248
02249 bool m_reverse;
02250
02251 public:
02252 DECLARE_CLASS(a2dDrawVPathTool)
02253 A2D_DECLARE_EVENT_TABLE()
02254
02255 };
02256
02257
02258
02259
02260
02261
02262
02263
02264
02265
02266
02267
02268 #endif
02269
02270
02271