00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __A2DCANVASMASTERTOOL_H__
00022 #define __A2DCANVASMASTERTOOL_H__
00023
00024
00025 #ifndef WX_PRECOMP
00026 #include "wx/wx.h"
00027 #endif
00028
00029 #include "wx/canvas/canmod.h"
00030 #include "wx/editor/sttool.h"
00031 #include "wx/editor/edit.h"
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 class A2DEDITORDLLEXP a2dGraphicsMasterTool: public a2dStTool
00052 {
00053 public:
00054
00055 a2dGraphicsMasterTool(a2dStToolContr* controller);
00056 ~a2dGraphicsMasterTool();
00057
00058 protected:
00059 virtual void PushSelectTool();
00060 virtual void PushDrawWireTool( a2dCanvasObject *hit );
00061 virtual void PushDragTool( a2dCanvasObject *hit );
00062 virtual void PushDragMultiTool( a2dCanvasObject *hit );
00063 virtual void PushCopyTool( a2dCanvasObject *hit );
00064 virtual void PushCopyMultiTool( a2dCanvasObject *hit );
00065 virtual void PushEditWireVertexTool( a2dCanvasObject *hit, int vertex );
00066 virtual void PushEditWireSegmentHorizontalTool( a2dCanvasObject *hit, int segment );
00067 virtual void PushEditWireSegmentVerticalTool( a2dCanvasObject *hit, int segment );
00068 virtual void PushEditWireSegmentInsertTool( a2dCanvasObject *hit, int segment );
00069
00070 protected:
00071 void DeselectAll();
00072 virtual bool ZoomSave();
00073 virtual void DoStopTool( bool abort );
00074
00075 void OnChar(wxKeyEvent& event);
00076
00077 void OnMouseEvent(wxMouseEvent& event);
00078
00079 void OnKeyDown(wxKeyEvent& event);
00080
00081 void SelectHitObject( a2dCanvasObject *hit );
00082
00083 public:
00084 DECLARE_CLASS(a2dGraphicsMasterTool)
00085 A2D_DECLARE_EVENT_TABLE()
00086
00087 protected:
00088
00089 enum Mode {
00090 mode_none,
00091 mode_select,
00092 mode_drag,
00093 mode_dragmulti,
00094 mode_copy,
00095 mode_copymulti,
00096 mode_drawwire,
00097 mode_editwire_segmenthorizontal,
00098 mode_editwire_segmentvertical,
00099 mode_editwire_segmentinsert,
00100 mode_editwire_vertex,
00101 } m_mode;
00102
00103 a2dCanvasObject *m_modehit;
00104
00105 a2dHit m_modehitinfo;
00106 };
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 class A2DEDITORDLLEXP a2dSimpleEditPolygonTool: public a2dStTool
00122 {
00123 public:
00124 enum Action
00125 {
00126 action_movevertex,
00127 action_movesegment,
00128 action_insertvertex
00129 };
00130
00131 public:
00132 a2dSimpleEditPolygonTool( a2dStToolContr* controller, a2dCanvasObject *hit, int index, int count, Action action );
00133 ~a2dSimpleEditPolygonTool();
00134
00135 protected:
00136 virtual bool EnterBusyMode();
00137 virtual void FinishBusyMode();
00138 virtual void AbortBusyMode();
00139 virtual void DoStopTool( bool abort );
00140 virtual bool ZoomSave(){ return true;};
00141 virtual wxString GetCommandGroupName() { return _("Edit polygon" ); }
00142
00143 void OnChar(wxKeyEvent& event);
00144 void OnMouseEvent(wxMouseEvent& event);
00145
00146 virtual bool CreateToolObjects();
00147 virtual void CleanupToolObjects();
00148
00149 public:
00150 DECLARE_CLASS(a2dSimpleEditPolygonTool)
00151 A2D_DECLARE_EVENT_TABLE()
00152
00153 protected:
00154
00155 int m_index;
00156
00157
00158 int m_count;
00159
00160
00161 Action m_action;
00162
00163
00164
00165 a2dSmrtPtr< a2dPolyHandleL > m_handle;
00166
00167
00168
00169 bool m_preserve_select;
00170
00171
00172 a2dCanvasObjectList m_connectedwirecopies;
00173 };
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 class A2DEDITORDLLEXP a2dToolProperty;
00192
00193
00194
00195
00196
00197
00198
00199
00200 class A2DEDITORDLLEXP a2dToolProperty: public a2dDynamicEventProperty
00201 {
00202
00203 public:
00204
00205 a2dToolProperty();
00206
00207 a2dToolProperty( const a2dPropertyIdDynamicEventProperty* id, a2dBaseTool* tool, wxMenuItem* menuItem, wxChar key );
00208
00209 a2dToolProperty( const a2dToolProperty &other );
00210
00211 virtual ~a2dToolProperty();
00212
00213 a2dNamedProperty* Clone( a2dObject::CloneOptions options ) const;
00214
00215 virtual void Assign( const a2dNamedProperty &other );
00216
00217 inline a2dBaseTool* GetToolObject() { return m_tool; }
00218
00219 wxMenuItem* GetMenuItem() { return m_menuItem; }
00220
00221 wxChar GetKey() { return m_key; }
00222
00223 DECLARE_DYNAMIC_CLASS(a2dToolProperty)
00224
00225
00226
00227 static a2dToolProperty *CreatePropertyFromString( const a2dPropertyIdDynamicEventProperty& WXUNUSED(id), const wxString& WXUNUSED(value) ) { return 0; }
00228
00229 protected:
00230
00231 a2dBaseToolPtr m_tool;
00232
00233 wxMenuItem* m_menuItem;
00234
00235 wxChar m_key;
00236
00237 #if wxART2D_USE_CVGIO
00238 virtual void DoSave( wxObject* parent, a2dIOHandlerXmlSerOut &out, a2dXmlSer_flag xmlparts , a2dObjectList* towrite );
00239 virtual void DoLoad( wxObject* parent, a2dIOHandlerXmlSerIn& parser, a2dXmlSer_flag xmlparts );
00240 #endif //wxART2D_USE_CVGIO
00241
00242 };
00243
00244
00245
00246
00247
00248
00249
00250 class A2DEDITORDLLEXP a2dSubDrawMasterTool: public a2dStTool
00251 {
00252
00253 public:
00254 static const a2dPropertyIdDynamicEventProperty PROPID_toolMenu;
00255
00256 a2dSubDrawMasterTool(a2dStToolContr* controller = NULL );
00257
00258 ~a2dSubDrawMasterTool();
00259
00260 void AppendTool( a2dBaseTool* tool, wxMenuItem* menuItem, wxChar key );
00261
00262 void OnPostPushTool();
00263
00264 void PushToolFromMouseMenu( wxCommandEvent& event );
00265
00266 protected:
00267
00268 virtual bool ZoomSave();
00269 virtual void DoStopTool( bool abort );
00270
00271 void OnChar(wxKeyEvent& event);
00272
00273 void OnMouseEvent(wxMouseEvent& event);
00274
00275 a2dSmrtPtr< a2dBaseTool > m_curTool;
00276
00277
00278 public:
00279 DECLARE_DYNAMIC_CLASS(a2dSubDrawMasterTool)
00280 A2D_DECLARE_EVENT_TABLE()
00281
00282 protected:
00283 };
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296 class A2DEDITORDLLEXP a2dMasterDrawBase: public a2dStTool
00297 {
00298 public:
00299
00300
00301 a2dMasterDrawBase(a2dStToolContr* controller);
00302
00303 ~a2dMasterDrawBase();
00304
00305
00306 void SetFastTools( bool onOff ) { m_fastTools = onOff; }
00307
00308
00309 bool GetFastTools() { return m_fastTools; }
00310
00311
00312 void SetAllowMultiEdit( bool onOff ) { m_allowMultiEdit = onOff; }
00313
00314
00315 bool GetAllowMultiEdit() { return m_allowMultiEdit; }
00316
00317
00318 void SetSelectFill( const a2dFill& fill){ m_selectFill = fill; }
00319
00320
00321
00322
00323
00324 const a2dFill& GetSelectFill() const { return m_selectFill; }
00325
00326
00327 void SetSelectStroke( const a2dStroke& stroke) { m_selectStroke = stroke; }
00328
00329
00330
00331
00332
00333 const a2dStroke& GetSelectStroke() const { return m_selectStroke; }
00334
00335
00336 protected:
00337 virtual void PushZoomTool();
00338 virtual void PushSelectTool();
00339 virtual void PushDeSelectTool();
00340 virtual void PushDragTool( a2dCanvasObject *hit );
00341 virtual void PushDragMultiTool( a2dCanvasObject *hit );
00342 virtual void PushCopyTool( a2dCanvasObject *hit );
00343 virtual void PushCopyMultiTool( a2dCanvasObject *hit );
00344 virtual void PushEditTool( a2dCanvasObject *hit );
00345 virtual void PushMultiEditTool( a2dCanvasObject *hit );
00346 virtual void PushEditSegmentTool( a2dCanvasObject *hit, int segment );
00347 virtual void PushEditVertexTool( a2dCanvasObject *hit, int vertex );
00348
00349 protected:
00350
00351 void SelectHitObject( a2dCanvasObject *hit );
00352 void DeselectAll();
00353 virtual bool ZoomSave();
00354 virtual void DoStopTool( bool abort );
00355
00356 void OnChar(wxKeyEvent& event);
00357
00358 void OnKeyDown(wxKeyEvent& event);
00359 void OnKeyUp(wxKeyEvent& event);
00360
00361 public:
00362 DECLARE_CLASS(a2dMasterDrawBase)
00363 A2D_DECLARE_EVENT_TABLE()
00364
00365 protected:
00366
00367
00368 enum Mode {
00369 mode_none,
00370 mode_edit,
00371 mode_multiedit,
00372 mode_zoom,
00373 mode_select,
00374 mode_cntrlselect,
00375 mode_deselect,
00376 mode_drag,
00377 mode_dragmulti,
00378 mode_copy,
00379 mode_copymulti,
00380 mode_segment,
00381 mode_vertex,
00382 mode_zoomdrag,
00383 } m_mode;
00384
00385
00386 a2dCanvasObject *m_modehit;
00387
00388
00389 a2dHit m_modehitinfo;
00390
00391 bool m_spaceDown;
00392
00393 bool m_toolBusy;
00394 bool m_modehitLastSelectState;
00395
00396 bool m_fastTools;
00397
00398 bool m_allowMultiEdit;
00399
00400 a2dFill m_selectFill;
00401 a2dStroke m_selectStroke;
00402 };
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420 class A2DEDITORDLLEXP a2dMasterDrawSelectFirst: public a2dMasterDrawBase
00421 {
00422 public:
00423
00424 a2dMasterDrawSelectFirst(a2dStToolContr* controller);
00425 ~a2dMasterDrawSelectFirst();
00426
00427 protected:
00428
00429 void OnChar(wxKeyEvent& event);
00430
00431 void OnMouseEvent(wxMouseEvent& event);
00432
00433 void OnKeyDown(wxKeyEvent& event);
00434 void OnKeyUp(wxKeyEvent& event);
00435
00436 void SelectHitObject( a2dCanvasObject *hit );
00437 void DecideMode( a2dCanvasObject* hit, bool shift, bool control );
00438
00439 public:
00440 DECLARE_CLASS(a2dMasterDrawSelectFirst)
00441 A2D_DECLARE_EVENT_TABLE()
00442 };
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459 class A2DEDITORDLLEXP a2dMasterDrawZoomFirst: public a2dMasterDrawBase
00460 {
00461 public:
00462
00463 a2dMasterDrawZoomFirst(a2dStToolContr* controller);
00464 ~a2dMasterDrawZoomFirst();
00465
00466 protected:
00467
00468 void OnChar(wxKeyEvent& event);
00469
00470 void OnMouseEvent(wxMouseEvent& event);
00471
00472 void OnKeyDown(wxKeyEvent& event);
00473 void OnKeyUp(wxKeyEvent& event);
00474 void Render();
00475
00476 public:
00477 DECLARE_CLASS(a2dMasterDrawZoomFirst)
00478 A2D_DECLARE_EVENT_TABLE()
00479
00480 };
00481
00482 #endif // __A2DCANVASMASTERTOOL_H__
00483
00484