wxArt2D
drawing.cpp
1 /*! \file canvas/src/candoc.cpp
2  \author Klaas Holwerda
3 
4  Copyright: 2001-2004 (c) Klaas Holwerda
5 
6  Licence: wxWidgets Licence
7 
8  RCS-ID: $Id: candoc.cpp,v 1.190 2009/09/02 19:46:07 titato Exp $
9 */
10 
11 #include "a2dprec.h"
12 
13 #ifdef __BORLANDC__
14 #pragma hdrstop
15 #endif
16 
17 #ifndef WX_PRECOMP
18 #include "wx/wx.h"
19 #endif
20 
21 #include <wx/wfstream.h>
22 #include <math.h>
23 #include <float.h>
24 #include <wx/tokenzr.h>
25 #include <locale.h>
26 
27 
28 #if wxUSE_STD_IOSTREAM
29 #include "wx/ioswrap.h"
30 #if wxUSE_IOSTREAMH
31 #include <fstream.h>
32 #else
33 #include <fstream>
34 #endif
35 #else
36 #include "wx/wfstream.h"
37 #endif
38 
39 #include "wx/canvas/xmlpars.h"
40 #include "wx/canvas/canglob.h"
41 #include "wx/canvas/algos.h"
42 #include "wx/canvas/drawing.h"
43 #include "wx/canvas/drawer.h"
44 #include "wx/canvas/booloper.h"
45 #include "wx/canvas/canvas.h"
46 #include "wx/canvas/tools.h"
47 #include "wx/canvas/sttool.h"
48 #include "wx/canvas/sttool2.h"
49 #include "wx/canvas/edit.h"
50 #include "wx/canvas/identifydlg.h"
51 #include "wx/canvas/pathsettings.h"
52 #include "wx/canvas/strucdlg.h"
53 #include "wx/canvas/styledialg.h"
54 #include "wx/canvas/tooldlg.h"
55 #include "wx/canvas/layerdlg.h"
56 #include "wx/canvas/fontdlg.h"
57 #include "wx/canvas/groupdlg.h"
58 #include "wx/canvas/transdlg.h"
59 #include "wx/canvas/settingsdlg.h"
60 #include "wx/canvas/snap.h"
61 #include "wx/canvas/canorderdlg.h"
62 #include "wx/canvas/execdlg.h"
63 #include "wx/canvas/connectgen.h"
64 #include "wx/canvas/cameleon.h"
65 #include "wx/canvas/camcreate.h"
66 
67 #if defined(__WXMSW__) && defined(__MEMDEBUG__)
68 #include <wx/msw/msvcrt.h>
69 #endif
70 
71 //----------------------------------------------------------------------------
72 // globals
73 //----------------------------------------------------------------------------
74 
75 const a2dPrintWhat a2dPRINT_PrintDrawing = 20; //!< print a2dDrawing
76 const a2dPrintWhat a2dPRINT_PreviewDrawing = 21; //!< preview print a2dDrawing
77 const a2dPrintWhat a2dPRINT_PrintDrawingPart = 22; //!< print a2dDrawing Part
78 const a2dPrintWhat a2dPRINT_PreviewDrawingPart = 23; //!< preview print a2dDrawing Part
79 
80 //----------------------------------------------------------------------------
81 // a2dDrawing
82 //----------------------------------------------------------------------------
83 bool a2dDrawing::m_saveLayersInit = true;
84 bool a2dDrawing::m_initLayersGlobalInit = true;
85 
86 IMPLEMENT_DYNAMIC_CLASS( a2dDrawing, a2dObject )
87 
88 const a2dSignal a2dDrawing::sig_layersetupChanged = wxNewId();
89 const a2dSignal a2dDrawing::sig_changedLayer = wxNewId();
90 
91 const a2dDrawingId a2dDrawing::sm_cameleonrefs = wxNewId();
92 const a2dDrawingId a2dDrawing::sm_normal = wxNewId();
93 const a2dDrawingId a2dDrawing::sm_physical = wxNewId();
94 const a2dDrawingId a2dDrawing::sm_programming = wxNewId();
95 const a2dDrawingId a2dDrawing::sm_appearances = wxNewId();
96 
97 DEFINE_EVENT_TYPE( wxEVT_UPDATE_DRAWING )
98 DEFINE_EVENT_TYPE( wxEVT_CHANGEDMODIFY_DRAWING )
99 
100 //DEFINE_EVTIDFUNC( wxEVT_CHANGEDMODIFY_DRAWING )
101 
102 BEGIN_EVENT_TABLE( a2dDrawing, a2dObject )
103  EVT_IDLE( a2dDrawing::OnIdle )
104  EVT_COM_EVENT( a2dDrawing::OnComEvent )
105  EVT_NEW_CAMELEON( a2dDrawing::OnAddCameleon )
106  EVT_DO( a2dDrawing::OnDoEvent )
107  EVT_UNDO( a2dDrawing::OnUndoEvent )
108  EVT_REDO( a2dDrawing::OnRedoEvent )
109  EVT_CHANGEDMODIFY_DRAWING( a2dDrawing::OnChangeDrawings )
110 END_EVENT_TABLE()
111 
112 
113 void a2dDrawing::OnDoEvent( a2dCommandProcessorEvent& event )
114 {
115  if ( event.GetCommand()->Modifies() )
116  Modify( true );
117 }
118 
120 {
121  if ( event.GetCommand()->Modifies() )
122  Modify( true );
123 }
124 
126 {
127  if ( event.GetCommand()->Modifies() )
128  Modify( false );
129 }
130 
131 void a2dDrawing::OnChangeDrawings( a2dDrawingEvent& event )
132 {
133  event.Skip();
134 }
135 
136 void a2dDrawing::OnAddCameleon( a2dCameleonEvent& event )
137 {
138  if ( GetDrawingId() == a2dDrawing::sm_cameleonrefs )
139  {
140  //a2dPoint2D pos = a2dCameleon::GetSuitblePoint();
141  //SetPosXyPoint( pos );
142  //m_rootObject->Append( this );
143  }
144 }
145 
146 void a2dDrawing::Modify( bool increment )
147 {
148  if ( increment )
149  m_documentModified++;
150  else
151  m_documentModified--;
152 
153  a2dDrawingEvent event( 0, wxEVT_CHANGEDMODIFY_DRAWING, this );
154  event.SetEventObject( this );
155  event.SetModified( increment ? +1 : -1 );
156  if ( !ProcessEvent( event ) )
157  {
158  if ( GetParent() )
159  GetParent()->ProcessEvent( event );
160  }
161 }
162 
163 a2dDrawing::a2dDrawing( const wxString& name, a2dHabitat* habitat )
164  : a2dObject()
165 {
166  if ( habitat )
167  m_habitat = habitat;
168  else
169  m_habitat = a2dCanvasGlobals->GetHabitat();
170  m_parent = NULL;
171  m_ignorePendingObjects = false;
172  m_updatespending = false;
173 
174  m_saveLayers = m_saveLayersInit;
175  m_initLayersGlobal = m_initLayersGlobalInit;
176 
177  if ( m_habitat && m_habitat->GetLayerSetup() )
178  m_layersetup = wxStaticCastNull( m_habitat->GetLayerSetup()->Clone( clone_deep ), a2dLayers );
179  else if ( a2dCanvasGlobals->GetHabitat()->GetLayerSetup() && m_initLayersGlobal )
180  m_layersetup = wxStaticCastNull( a2dCanvasGlobals->GetHabitat()->GetLayerSetup()->Clone( clone_deep ), a2dLayers );
181 
182  m_initialSizeX = 100;
183  m_initialSizeY = 100;
184  m_units_accuracy = 0.001;
185  //m_units_scale = 1.0;
186  m_units_scale = m_habitat->GetDefaultUnitsScale();
187  m_normalize_scale = 1.0;
188 
189  m_units = wxT( "non" );
190  m_units_measure = wxT( "non" );
191 
192  m_documentModified = 0;
193  m_drawingId = sm_normal;
194  m_rootObject = new a2dCanvasObject();
195  m_rootObject->Update( a2dCanvasObject::updatemask_force );
196  //m_rootObject contains object on layers, but is itself just an abstract object without layer
197  m_rootObject->SetIgnoreLayer( true );
198  m_saveStartObject = m_rootObject;
200 
201  m_mayEdit = true;
202 
203  // now we have a root object in drawing, and we can create the command processor.
205 
207  m_lastCheck = wxDateTime::Now();
208  SetName( name );
209 }
210 
212  : a2dObject( other, options, refs )
213 {
214  m_ignorePendingObjects = false;
215  m_updatespending = false;
216  m_habitat = other.m_habitat;
220  m_units = other.m_units;
224  m_drawingId = other.m_drawingId;
225  m_parent = other.m_parent;
226  m_mayEdit = other.m_mayEdit;
227  m_saveLayers = other.m_saveLayers;
228  m_initLayersGlobal = other.m_initLayersGlobal;
230  m_lastCheck = wxDateTime::Now();
231 
232  if ( other.m_layersetup )
233  m_layersetup = wxStaticCastNull( other.m_layersetup->Clone( clone_deep ), a2dLayers );
234  else
235  m_layersetup = NULL;
236 
237  m_documentModified = 0;
238  if ( options & clone_members && other.m_rootObject )
239  {
240  a2dRefMap refs;
241  m_rootObject = other.m_rootObject->TClone( CloneOptions( (options & ~ clone_seteditcopy) ), &refs );
242  refs.LinkReferences();
243  }
244  else
245  m_rootObject = other.m_rootObject;
246  m_rootObject->Update( a2dCanvasObject::updatemask_force );
247  m_saveStartObject = m_rootObject;
249 
251 
253  m_lastCheck = wxDateTime::Now();
254 }
255 
256 a2dDrawing::~a2dDrawing()
257 {
258  m_commandProcessor = NULL;
259 }
260 
261 a2dObject* a2dDrawing::SmrtPtrOwn()
262 {
263  m_refcount++;
264  return this;
265 }
266 
267 bool a2dDrawing::SmrtPtrRelease()
268 {
269  m_refcount--;
270 
271  wxASSERT_MSG( m_refcount >= 0, wxT( "a2dDrawing::Release Negative reference count" ) );
272  if ( m_refcount <= 0 )
273  {
274  delete this;
275  return true;
276  }
277  return false;
278 }
279 
281 {
282  if ( layersetup )
283  m_layersetup = layersetup;
284  else if ( m_habitat && m_habitat->GetLayerSetup() )
285  m_layersetup = wxStaticCastNull( m_habitat->GetLayerSetup()->Clone( clone_deep ), a2dLayers );
286  else if ( a2dCanvasGlobals->GetHabitat()->GetLayerSetup() && m_initLayersGlobal )
287  m_layersetup = wxStaticCastNull( a2dCanvasGlobals->GetHabitat()->GetLayerSetup()->Clone( clone_deep ), a2dLayers );
288  else
289  m_layersetup = NULL;
290 
291  if ( m_layersetup )
292  m_layersetup->SetRoot( this );
293 
294  a2dComEvent changedlayers( this, m_layersetup, sig_layersetupChanged );
295  ProcessEvent( changedlayers );
296 };
297 
298 bool a2dDrawing::ProcessEvent( wxEvent& event )
299 {
300  bool processed = false;
301 
302  // An event handler can be enabled or disabled
303  if ( GetEvtHandlerEnabled() )
304  {
305  //prevent the object from being deleted until this process event is at an end
307 
308  if ( m_parent )
309  processed = m_parent->ProcessEvent( event );
310 
311  event.Skip();
312  processed = a2dObject::ProcessEvent( event );
313 
314 /*
315  if ( event.GetEventType() == wxEVT_UPDATE_DRAWING )
316  {
317  if ( m_parent )
318  processed = m_parent->ProcessEvent( event );
319 
320  event.Skip();
321  processed = a2dObject::ProcessEvent( event );
322  }
323  else
324  {
325  event.Skip(); //skipped because not processed so prepare for view
326  processed = a2dObject::ProcessEvent( event );
327  }
328 */
329  }
330  return processed;
331 }
332 
333 void a2dDrawing::DoAddPending( a2dIterC& ic )
334 {
335  if ( m_rootObject )
336  m_rootObject->AddPending( ic );
337 }
338 
340 {
341  if( !other )
342  return false;
343 
344 #if defined(_DEBUG)
345  wxString name = other->GetName();
346 #endif
347 
348  if ( m_rootObject.Get() )
349  return false;
350 
351  m_rootObject = wxStaticCast( other, a2dCanvasObject );
352  m_rootObject->SetCheck( true );
353  return true;
354 }
355 
356 
357 a2dObject* a2dDrawing::DoClone( CloneOptions options, a2dRefMap* refs ) const
358 {
359  return new a2dDrawing( *this, options, refs );
360 }
361 
362 void a2dDrawing::SetAvailable()
363 {
364  if ( m_layersetup )
365  m_layersetup->SetAvailable( this );
366 }
367 
369 {
370  wxASSERT_MSG( newRoot, wxT( "a2dDrawing its root object can not be NULL" ) );
371  m_rootObject = newRoot;
373 }
374 
376 {
377  return wxStaticCastNull( GetCommandProcessor(), a2dCanvasCommandProcessor );
378 }
379 
381 {
383  m_commandProcessor->ConnectEvent( wxEVT_DO, this );
384  m_commandProcessor->ConnectEvent( wxEVT_UNDO, this );
385  m_commandProcessor->ConnectEvent( wxEVT_REDO, this );
386  m_commandProcessor->ConnectEvent( wxEVT_MENUSTRINGS, this );
387 }
388 
390 {
391  if ( !m_ignorePendingObjects )
392  {
393  bool old = m_updatespending;
394  //continue calling DependencyPending until no more new pendingobjects are generated.
395  while ( m_updatespending )
396  {
397  m_updatespending = false;
399  walker.Start( m_rootObject, &a2dCanvasObject::DependencyPending );
400  }
401  m_updatespending = old;
402  }
403 }
404 
406 {
407  if ( !m_ignorePendingObjects )
408  {
409  //TriggerChangedTime();
410  if ( !onoff )
411  {
413  setflags.SetSkipNotRenderedInDrawing( true );
414  setflags.Start( m_rootObject, false );
415 
416  // although the layer setup is not displayed directly, and therefore its pending
417  // flag is not of interest for that, it still needs a reset.
418  setflags.Start( m_layersetup, false );
419  }
420  m_updatespending = onoff;
421  }
422 }
423 
425 {
427  return false;
428 
429  return m_updatespending;
430 }
431 
433 {
434  m_ignorePendingObjects = onoff;
435 }
436 
437 void a2dDrawing::UpdateAllViews( unsigned int hint, wxObject* objecthint )
438 {
439  //in case of a2dCANVIEW_UPDATE_ALL, first clear all pending objects, they are not of use any more
440  //since all drawers will be updated/redrawn totally, no matter what.
441  if ( ( hint & a2dCANVIEW_UPDATE_ALL ) && GetUpdatesPending() )
442  {
444  ProcessEvent( event );
445 
446  // only invalid need recalculation so they will be rendered.
448  //tell root there or no more pending objects.
449  SetUpdatesPending( false );
450  }
451 
452  // and now process the asked hint
453  a2dDrawingEvent event( hint, this );
454  ProcessEvent( event );
455 }
456 
457 a2dCanvasObject* a2dDrawing::PushInto( a2dCanvasObject* parent )
458 {
459  if ( m_rootObject )
460  return m_rootObject;
461  return NULL;
462 }
463 
464 void a2dDrawing::DoWalker( wxObject* parent, a2dWalkerIOHandler& handler )
465 {
466  if ( wxDynamicCast( &handler, a2dWalker_SetRoot ) )
467  {
468  return;
469  }
470  else
471  {
472  if ( m_layersetup )
473  m_layersetup->Walker( this, handler );
474 
475  if ( m_rootObject )
476  m_rootObject->Walker( this, handler );
477  }
478  a2dObject::DoWalker( parent, handler );
479 }
480 /*
481 bool a2dDrawing::DoUpdate( UpdateMode mode, const a2dBoundingBox& childbox, const a2dBoundingBox& clipbox, const a2dBoundingBox& propbox )
482 {
483  bool calc = false;
484  if ( m_rootObject )
485  {
486  if ( ( mode & updatemask_countObjects ) && m_layersetup )
487  {
488  wxUint16 j;
489  for ( j = 0; j < wxMAXLAYER; j++ )
490  {
491  m_layersetup->GetLayerIndex()[j]->SetObjectCount( 0 );
492  }
493 
494  calc = m_rootObject->Update( mode );
495 
496  //m_layersetup->SetAvailable( this );
497 
498  for ( j = 0; j < wxMAXLAYER; j++ )
499  {
500  a2dLayerInfo* layer = m_layersetup->GetLayerIndex()[ j ];
501  layer->SetAvailable( layer->GetObjectCount() != 0 );
502  }
503  }
504  else
505  calc = m_rootObject->Update( mode );
506 
507  if ( calc && m_layersetup )
508  {
509  m_layersetup->SetAllLayersAvailable( false );
510  //this one always available because editing handles are on it.
511  m_layersetup->SetAvailable( wxLAYER_DEFAULT, TRUE );
512  }
513  }
514 
515  if ( !m_bbox.GetValid() || calc )
516  {
517  m_bbox.SetValid( false );
518  m_bbox = DoGetUnTransformedBbox();
519  m_bbox.MapBbox( m_lworld );
520  }
521  return calc;
522 }
523 */
524 
526 {
527  if ( !GetUpdatesPending() )
528  return false;
529 
530  // if layers are pending by a2dLayers::SetPending(bool pending)
531  // we need to redraw all views, and no need for fine tuning.
533  {
534  a2dComEvent changedlayers( this, m_layersetup, sig_layersetupChanged );
535  ProcessEvent( changedlayers );
536 
538  ProcessEvent( eventPreViewUpdate );
539 
541 
542  m_rootObject->Update( a2dCanvasObject::updatemask_normal ); //update all objects which are pending for an update
543 
544  //tell root there or no more pending objects.
545  SetUpdatesPending( false );
546 
547  UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
548 
549 
550  return true;
551  }
552 
553  // if a layer info object is pending, all needs to be redrawn
554  if ( m_layersetup )
555  {
556  unsigned int j;
557  for ( j = 0; j < wxMAXLAYER; j++ )
558  {
559  if ( m_layersetup->GetLayerIndex()[j]->GetPending() )
560  {
562  ProcessEvent( eventPreViewUpdate );
563 
565 
566  m_rootObject->Update( a2dCanvasObject::updatemask_normal ); //update all objects which are pending for an update
567  //tell root there or no more pending objects.
568  SetUpdatesPending( false );
569 
570  UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
571  return true;
572  }
573  }
574  }
575 
577 
578  wxUint16 j;
579  if ( m_layersetup )
580  {
581  for ( j = 0; j < wxMAXLAYER; j++ )
582  {
583  m_layersetup->GetLayerIndex()[j]->SetObjectCount( 0 );
584  }
585  }
586 
588  ProcessEvent( eventPreViewUpdate );
589 
590  // inform views (and other user interface objects interested),
591  // that it needs to update itself from the document.
592  // Old boundingbox is still intact, and can be used to find update areas of old document state
594  // in the next a2dCANVIEW_UPDATE_VIEWDEPENDENT is not needed, since a view does not change
595  // when an canvasobject changes, but the other way around only.
596  ProcessEvent( eventPreUpdate );
597 
598  if ( m_layersetup )
599  {
600  for ( j = 0; j < wxMAXLAYER; j++ )
601  {
602  m_layersetup->GetLayerIndex()[j]->SetPreviousObjectCount( m_layersetup->GetLayerIndex()[j]->GetObjectCount() );
603  }
604  }
605 
606  m_rootObject->Update( a2dCanvasObject::updatemask_normal ); //update all objects which are pending for an update
607 
608  // inform views (and other user interface objects interested),
609  // that it needs to update itself from the document.
610  // New boundingbox is calculated, and can be used to find update areas of new document state
611  // use the new boundingbox of pending objects for update areas
613  ProcessEvent( eventPostUpdate );
614 
615  if ( m_layersetup )
616  {
617  for ( j = 0; j < wxMAXLAYER; j++ )
618  {
619  a2dLayerInfo* layer = m_layersetup->GetLayerIndex()[ j ];
620  layer->SetAvailable( layer->GetObjectCount() != 0 );
621  }
622 
623  for ( j = 0; j < wxMAXLAYER; j++ )
624  {
625  //check if first object put on a layer or last removed from a layer
626  if ( m_layersetup->GetLayerIndex()[j]->StateChange() )
627  {
628  a2dComEvent changedlayer( this, j, a2dDrawing::sig_changedLayer );
629  ProcessEvent( changedlayer );
630  }
631  }
632  }
633  //tell root there or no more pending objects.
634  SetUpdatesPending( false );
635 
636  // all have been processed so all temporary boundingbox properties
637  // which are used for mini updates can now be removed.
638  // Keep in mind that the Boundingbox of a canvas object and its parents do include those
639  // boundingbox properties also, else those parts would not be rendered ( due to clipping ).
640  // Therefore the objects containing those properties need to be recalculated, set them pending.
641 
643  removep.SetSkipNotRenderedInDrawing( true );
644  removep.SetMakePending( true );
645  removep.Start( m_rootObject );
646 
647  return true;
648 }
649 
650 bool a2dDrawing::LoadFromFile( const wxString& filename, a2dIOHandlerStrIn* handler )
651 {
652 #if wxUSE_STD_IOSTREAM
653  a2dDocumentFileInputStream stream( filename.mb_str(), wxSTD ios_base::in | wxSTD ios_base::binary );
654  if ( stream.fail() || stream.bad() )
655 #else
656  wxFileInputStream stream( filename );
657  if ( !stream.IsOk() )
658 #endif
659  {
660  a2dGeneralGlobals->ReportErrorF( a2dError_FileCouldNotOpen, _( "Sorry, could not open file %s for loading" ), filename.c_str() );
661  return false;
662  }
663 
664  if ( handler )
665  {
666  if ( handler->CanLoad( stream, this, GetClassInfo() ) )
667  {
668  if ( !handler->Load( stream, this ) )
669  {
670  a2dGeneralGlobals->ReportErrorF( a2dError_IOHandler, _( "template I/O handler failed loading from stream." ) );
672  }
673  else
674  {
675  return true;
676  }
677  }
678  else
679  {
680  a2dGeneralGlobals->ReportErrorF( a2dError_IOHandler, _( "template I/O handler not capable of loading this format." ) );
681  handler->SetLastError( a2dError_IOHandler );
682  }
683  }
684 
685  return false;
686 }
687 
688 bool a2dDrawing::SaveToFile( const wxString& filename, a2dIOHandlerStrOut* handler ) const
689 {
690  //check flag is used for writing once an object which is referenced many times
691  a2dWalker_SetCheck setp( false );
692  setp.Start( m_rootObject );
693  setp.Start( m_layersetup );
694 
695 #if wxUSE_STD_IOSTREAM
696  a2dDocumentFileOutputStream stream( filename.mb_str(), wxSTD ios_base::out | wxSTD ios_base::binary );
697  if ( stream.fail() || stream.bad() )
698 #else
699  wxFileOutputStream stream( filename );
700  if ( stream.GetLastError() != wxSTREAM_NO_ERROR )
701 #endif
702  {
703  a2dGeneralGlobals->ReportErrorF( a2dError_SaveFile, _( "Sorry, could not open file %s for saving" ), filename.c_str() );
704 
705  // Saving error
706  return false;
707  }
708 
709  if ( handler )
710  {
711  if ( handler->CanSave( this ) )
712  {
713  if ( handler->Save( stream, this ) )
714  return true;
715 
716  a2dGeneralGlobals->ReportErrorF( a2dError_SaveFile, _( "template I/O handler not succeeded to save in this format to file %s" ), filename.c_str() );
717  }
718  else
719  a2dGeneralGlobals->ReportErrorF( a2dError_IOHandler, _( "template I/O handler not capable of saving in this format." ) );
720  }
721  else
722  a2dGeneralGlobals->ReportErrorF( a2dError_IOHandler, _( "template I/O handler not set in document template" ) );
723 
724  return false;
725 }
726 
727 
728 #if wxART2D_USE_CVGIO
729 
730 void a2dDrawing::Load( wxObject* parent, a2dIOHandlerXmlSerIn& parser )
731 {
732  if ( parent )
733  a2dObject::Load( parent, parser );
734  else
735  {
736  a2dWalker_SetCheck setp( false );
737  setp.Start( m_rootObject );
738  setp.Start( m_layersetup );
739 
740  parser.Next();
741  parser.Require( START_TAG, wxT( "cvg" ) );
742  parser.Next();
743 
744  wxString version = wxT("1");
745 
746  parser.SetFormatVersion( version );
747 
748  a2dObject::Load( parent, parser );
749 
750  parser.Require( END_TAG, wxT( "cvg" ) );
751  }
752 }
753 
754 void a2dDrawing::Save( wxObject* parent, a2dIOHandlerXmlSerOut& out, a2dObjectList* towrite, a2dCanvasObject* start )
755 {
756  if ( start )
757  m_saveStartObject = start;
758  else
759  m_saveStartObject = m_rootObject;
760 
761  if ( parent )
762  a2dObject::Save( parent, out, towrite );
763  else
764  {
765  //check flag is used for writing once an object which is referenced many times
766  a2dWalker_SetCheck setp( false );
767  setp.Start( this );
768 
769  out.WriteStartDocument( wxT( "1.0" ), wxT( "UTF-8" ) , true );
770 
771  out.WriteStartElementAttributes( wxT( "cvg" ) );
772  out.WriteEndAttributes();
773 
774  a2dObjectList towrite;
775  a2dObject::Save( NULL, out, &towrite );
776 
777  out.WriteEndElement(); //cvg
778  out.WriteEndDocument();
779  }
780 }
781 
782 void a2dDrawing::DoSave( wxObject* parent, a2dIOHandlerXmlSerOut& out, a2dXmlSer_flag xmlparts , a2dObjectList* towrite )
783 {
784  if ( xmlparts == a2dXmlSer_attrib )
785  {
786  if ( m_rootObject )
787  out.WriteAttribute( wxT( "rootobject" ), m_rootObject->GetUniqueSerializationId() );
788  out.WriteAttribute( wxT( "initialSizeX" ), m_initialSizeX );
789  out.WriteAttribute( wxT( "initialSizeY" ), m_initialSizeY );
790  out.WriteAttribute( wxT( "units_accuracy" ), m_units_accuracy );
791  out.WriteAttribute( wxT( "units_scale" ), m_units_scale );
792  out.WriteAttribute( wxT( "normalize_scale" ), m_normalize_scale );
793  out.WriteAttribute( wxT( "units" ), m_units );
794  out.WriteAttribute( wxT( "units_measure" ), m_units_measure );
795  out.WriteAttribute( wxT( "mayEdit" ), m_mayEdit );
796  out.WriteAttribute( wxT( "drawingId" ), m_drawingId );
797  }
798  else
799  {
800  out.WriteElement( wxT( "title" ), GetName() );
801  out.WriteElement( wxT( "desc" ), GetDescription() );
802 
803  if ( m_saveLayers && m_layersetup )
804  m_layersetup->Save( parent, out, towrite );
805  //if object is not saved yet, we need to save it here.
806 
807  if ( m_saveStartObject && !m_saveStartObject->GetCheck() )
808  {
809  //trick the system to have multiple refs on those objects, else we will not get an id attribute
810  a2dCanvasObjectPtr multiRef = m_rootObject;
811 
812  out.WriteStartElement( wxT( "drawing" ) );
813  m_saveStartObject->Save( this, out, towrite );
814  out.WriteEndElement();
815  }
816 
817  }
818  a2dObject::DoSave( parent, out, xmlparts, towrite );
819 }
820 
821 void a2dDrawing::DoLoad( wxObject* parent, a2dIOHandlerXmlSerIn& parser, a2dXmlSer_flag xmlparts )
822 {
823  if ( xmlparts == a2dXmlSer_attrib )
824  {
825  if ( parser.HasAttribute( wxT( "rootobject" ) ) )
826  {
827  parser.ResolveOrAdd( ( a2dSmrtPtr<class a2dObject>* ) &m_rootObject, parser.GetAttributeValue( wxT( "rootobject" ) ) );
828  }
829  m_initialSizeX = parser.GetAttributeValueDouble( wxT( "initialSizeX" ), 100 );
830  m_initialSizeY = parser.GetAttributeValueDouble( wxT( "initialSizeY" ), 100 );
831  m_units_accuracy = parser.GetAttributeValueDouble( wxT( "units_accuracy" ), 0.001 );
832  m_units_scale = parser.GetAttributeValueDouble( wxT( "units_scale" ), m_units_scale );
833  //TaConvert
834  //m_units_scale = GetDrawHabitat()->GetDefaultUnitsScale();
835 
836  m_normalize_scale = parser.GetAttributeValueDouble( wxT( "normalize_scale" ), 1 );
837  m_units = parser.GetAttributeValue( wxT( "units" ), "non" );
838  m_units_measure = parser.GetAttributeValue( wxT( "units_measure" ), "non" );
839  m_mayEdit = parser.GetAttributeValueBool( wxT( "mayEdit" ), true );
840  m_drawingId = parser.GetAttributeValueInt( wxT( "drawingId" ), sm_normal );
841  }
842  else
843  {
844  if ( parser.GetTagName() == wxT( "title" ) )
845  {
846  m_title = parser.GetContent();
847  parser.Next();
848  parser.Require( END_TAG, wxT( "title" ) );
849  parser.Next();
850  }
851  if ( parser.GetTagName() == wxT( "desc" ) )
852  {
853  m_description = parser.GetContent();
854  parser.Next();
855  parser.Require( END_TAG, wxT( "desc" ) );
856  parser.Next();
857  }
858 
859  if ( parser.GetTagName() == wxT( "o" ) && parser.GetAttributeValue( wxT( "classname" ) ) == wxT( "a2dLayers" ) )
860  {
861  m_layersetup = new a2dLayers();
862  m_layersetup->Load( this, parser );
865  }
866  else
867  SetLayerSetup( NULL );
868 
869  if ( parser.GetTagName() == wxT( "drawing" ) )
870  {
871  parser.Require( START_TAG, wxT( "drawing" ) );
872  parser.Next();
873 
874  m_rootObject->Load( parent, parser );
876  parser.Require( END_TAG, wxT( "drawing" ) );
877  parser.Next();
878  }
879  }
880  a2dObject::DoLoad( parent, parser, xmlparts );
881 }
882 #endif //wxART2D_USE_CVGIO
883 
884 
885 
886 void a2dDrawing::OnIdle( wxIdleEvent& event )
887 {
888  if ( m_lastCheck + wxTimeSpan ( 0, 0, 4, 0) < wxDateTime::Now() )
889  {
891  m_lastCheck = wxDateTime::Now();
892  }
893 
894  if ( AddPendingUpdatesOldNew() )
895  {
896  //here we could wait for the a2dCanvasView::OnIdle to do the next,
897  //But we are idle so why not now.
898  //Still this is here for all views directly while else it may be
899  //distributed in time.
901  event.Skip();
902  }
903  else
904  event.Skip();
905 }
906 
907 void a2dDrawing::SetSpecificFlags( bool setOrClear, a2dCanvasObjectFlagsMask which, const wxString& classname, a2dCanvasObjectFlagsMask whichobjects )
908 {
909  a2dWalker_SetSpecificFlagsCanvasObjects setflags( which, whichobjects );
910  setflags.Start( m_rootObject, setOrClear );
911 }
912 
914 {
915  m_rootObject->SetRoot( this );
916  if ( m_layersetup )
917  m_layersetup->SetRoot( this );
918 }
919 
920 void a2dDrawing::OnComEvent( a2dComEvent& event )
921 {
922  if ( GetEvtHandlerEnabled() )
923  {
924 /*
925  if ( event.GetId() == a2dCanvasView::sm_changedLayers )
926  {
927  a2dDrawing* doc = wxDynamicCast( event.GetEventObject(), a2dDrawing );
928  if ( doc && doc == m_layersetup->GetRoot() )
929  Init( doc->GetLayerSetup() );
930  }
931  else if ( event.GetId() == a2dDrawing::sm_layersetupChanged )
932  {
933  a2dDrawing* doc = wxDynamicCast( event.GetEventObject(), a2dDrawing );
934  if ( doc && doc == m_layersetup->GetRoot() )
935  Init( doc->GetLayerSetup() );
936  }
937 */
938  if ( event.GetId() == a2dLayerInfo::sig_changedLayerInfo || event.GetId() == a2dLayers::sig_visibleAll )
939  {
940  a2dCanvasObject* obj = wxDynamicCast( event.GetEventObject(), a2dCanvasObject );
941  if ( this == obj->GetRoot() )
942  m_layersetup->SetPending( true ); // triggers redraw all.
943  }
944  }
945 }
946 
947 /*
948 a2dCanvasObject* a2dCanvasDocument::Find( a2dCanvasObject* obj )
949 {
950  a2dWalker_FindCanvasObject finder( obj );
951 
952  if ( finder.Start( m_drawing ) )
953  return obj;
954  return NULL;
955 }
956 
957 a2dCanvasObject* a2dCanvasDocument::Find( const wxString& objectname, const wxString& classname, wxInt64 id )
958 {
959  a2dWalker_CollectCanvasObjects finder( a2dCanvasOFlags::ALL );
960  finder.SetObjectName( objectname );
961  finder.AddClassName( classname );
962  finder.SetUniqueSerializationId( id );
963  finder.Start( m_drawing );
964 
965  if ( finder.m_found.size() )
966  return finder.m_found.front();
967  return NULL;
968 }
969 */
970 
971 //----------------------------------------------------------------------------
972 // a2dCanvasCommandProcessor
973 //----------------------------------------------------------------------------
974 
975 const a2dCommandId a2dCommand_SetLayerGroup::Id( wxT( "SetLayerGroup" ) );
976 
977 const a2dCommandId a2dCommand_SetStroke::Id( wxT( "SetStroke" ) );
978 const a2dCommandId a2dCommand_SetFill::Id( wxT( "SetFill" ) );
979 const a2dCommandId a2dCommand_SetStrokeColour::Id( wxT( "SetStrokeColour" ) );
980 const a2dCommandId a2dCommand_SetFillColour::Id( wxT( "SetFillColour" ) );
981 
982 const a2dCommandId a2dCommand_NewGroup::Id( wxT( "NewGroup" ) );
983 const a2dCommandId a2dCommand_NewPin::Id( wxT( "NewPin" ) );
984 
985 const a2dCommandId a2dCommand_SetCursor::Id( wxT( "SetCursor" ) );
986 
987 const a2dCommandId a2dCanvasCommandProcessor::COMID_InsertGroupRef( wxT( "InsertGroupRef" ) );
988 
989 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgLayers( wxT( "ShowDlgLayers" ) );
990 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgLayersDocument( wxT( "ShowDlgLayersDocument" ) );
991 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgLayersGlobal( wxT( "ShowDlgLayersGlobal" ) );
992 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgLayerOrderDocument( wxT( "ShowDlgLayerOrderDocument" ) );
993 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgLayerOrderGlobal( wxT( "ShowDlgLayerOrderGlobal" ) );
994 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgTools( wxT( "ShowDlgTools" ) );
995 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgStyle( wxT( "ShowDlgStyle" ) );
996 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgSnap( wxT( "ShowDlgSnap" ) );
997 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgGroups( wxT( "ShowDlgGroups" ) );
998 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgIdentify( wxT( "ShowDlgIdentify" ) );
999 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgCoordEntry( wxT( "ShowDlgCoordEntry" ) );
1000 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgMeasure( wxT( "ShowDlgMeasure" ) );
1001 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgStructure( wxT( "ShowDlgStructure" ) );
1002 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgPathSettings( wxT( "ShowDlgPathSettings" ) );
1003 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgSettings( wxT( "ShowDlgSettings" ) );
1004 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgTrans( wxT( "ShowDlgTrans" ) );
1005 const a2dCommandId a2dCanvasCommandProcessor::COMID_ShowDlgPropEdit( wxT( "ShowDlgPropEdit" ) );
1006 
1007 
1008 //!@}
1009 
1010 //!@{ \ingroup menus
1011 //----------------------------------------------------------------------------
1012 // globals a2dMenuIdItem's
1013 //----------------------------------------------------------------------------
1014 
1015 DEFINE_MENU_ITEMID( CmdMenu_ChangeCanvasObjectStyle, wxTRANSLATE("set current object style"), wxTRANSLATE("set the style of the current edited or drawn object") )
1016 DEFINE_MENU_ITEMID( CmdMenu_ChangeCentralStyle, wxTRANSLATE("Set Central Style"), wxTRANSLATE("Set central stored style like fill and stroke") )
1017 DEFINE_MENU_ITEMID( CmdMenu_SetLayer, wxTRANSLATE("Set Current layer"), wxTRANSLATE("set the current layer for drawing upon") )
1018 DEFINE_MENU_ITEMID( CmdMenu_SetTarget, wxTRANSLATE("Set Current Target layer"), wxTRANSLATE("set the current target layer for actions involving a target") )
1019 
1020 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetDrawWireFrame, wxTRANSLATE("Draw only outlines"), wxTRANSLATE("Document drawn in outlines"), wxITEM_CHECK )
1021 DEFINE_MENU_ITEMID_KIND( CmdMenu_DrawGridLines, wxTRANSLATE("Show Grid as Lines"), wxTRANSLATE("Grid lines instead of points"), wxITEM_CHECK )
1022 DEFINE_MENU_ITEMID_KIND( CmdMenu_DrawGridAtFront, wxTRANSLATE("Grid on top or back"), wxTRANSLATE("draw grid on top or back of drawing"), wxITEM_CHECK )
1023 DEFINE_MENU_ITEMID_KIND( CmdMenu_DrawGrid, wxTRANSLATE("Show Grid"), wxTRANSLATE("Grid On Off"), wxITEM_CHECK )
1024 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetSnap, wxTRANSLATE("Snap wile drawing"), wxTRANSLATE("snap inside tools while drawing"), wxITEM_CHECK )
1025 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetYAxis, wxTRANSLATE("Set YAxis up or down"), wxTRANSLATE("Set YAxis up or down"), wxITEM_CHECK );
1026 DEFINE_MENU_ITEMID_KIND( CmdMenu_Option_SplinePoly, wxTRANSLATE("Spline Poly"), wxTRANSLATE("draw polygons/lines splined or not"), wxITEM_CHECK )
1027 DEFINE_MENU_ITEMID_KIND( CmdMenu_Option_CursorCrosshair, wxTRANSLATE("Crosshair Cursor"), wxTRANSLATE("croshair cursor used in tools"), wxITEM_CHECK )
1028 DEFINE_MENU_ITEMID_KIND( CmdMenu_Option_RescaleAtReSize, wxTRANSLATE("ReScale On ReSize"), wxTRANSLATE("Set rescale after resize"), wxITEM_CHECK )
1029 DEFINE_MENU_ITEMID_KIND( CmdMenu_Option_ReverseLayers, wxTRANSLATE("Reverse layers"), wxTRANSLATE("Draw layers reversed"), wxITEM_CHECK )
1030 
1031 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_StraightEndSegment, wxTRANSLATE("Routing StraightEndSegment"), wxTRANSLATE("Set routing method to straight end segment"), wxITEM_CHECK )
1032 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_StraightEndSegmentUnlessPins, wxTRANSLATE("Routing StraightEndSegmentUnlessPins"), wxTRANSLATE("Set routing method to straight end segment unless pins on it"), wxITEM_CHECK )
1033 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_StraightSegment, wxTRANSLATE("Routing StraightSegment"), wxTRANSLATE("Set routing method to straight segment"), wxITEM_CHECK )
1034 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_StraightSegmentUnlessPins, wxTRANSLATE("Routing StraightSegmentUnlessPins"), wxTRANSLATE("Set routing method to straight segment unless pins on it"), wxITEM_CHECK )
1035 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_GridRouting, wxTRANSLATE("Routing GridRouting"), wxTRANSLATE("Set routing automatic reroute on grid"), wxITEM_CHECK )
1036 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_ManhattanSegments, wxTRANSLATE("Routing Manhattan"), wxTRANSLATE("Routing With fast Manhattan lines"), wxITEM_CHECK )
1037 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_ManhattanEndSegments, wxTRANSLATE("Routing End Manhattan"), wxTRANSLATE("Routing With fast Manhattan lines for moved ends"), wxITEM_CHECK )
1038 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_ManhattanEndSegmentsStay, wxTRANSLATE("Keep End Manhattan"), wxTRANSLATE("Keep Manhattan lines for moved ends"), wxITEM_CHECK )
1039 DEFINE_MENU_ITEMID_KIND( CmdMenu_RouteMethod_ManhattanEndSegmentsConvertAndStay, wxTRANSLATE("conevrt and keep End Manhattan"), wxTRANSLATE("Convert to and keep Manhattan lines for moved ends"), wxITEM_CHECK )
1040 
1041 DEFINE_MENU_ITEMID( CmdMenu_RotateObject90Left, wxTRANSLATE("Rotate object 90 Left"), wxTRANSLATE("rotate object left 90 degrees") )
1042 DEFINE_MENU_ITEMID( CmdMenu_RotateObject90Right, wxTRANSLATE("Rotate object 90 Right"), wxTRANSLATE("rotate object right -90 degrees") )
1043 
1044 DEFINE_MENU_ITEMID( CmdMenu_SetSnapFeatures, wxTRANSLATE("n"), wxTRANSLATE("n") )
1045 DEFINE_MENU_ITEMID( CmdMenu_SetSnapFeature, wxTRANSLATE("n"), wxTRANSLATE("n") )
1046 DEFINE_MENU_ITEMID( CmdMenu_SetStroke, wxTRANSLATE("n"), wxTRANSLATE("n") )
1047 DEFINE_MENU_ITEMID( CmdMenu_SetFill, wxTRANSLATE("n"), wxTRANSLATE("n") )
1048 DEFINE_MENU_ITEMID( CmdMenu_SetStrokeColour, wxTRANSLATE("n"), wxTRANSLATE("n") )
1049 DEFINE_MENU_ITEMID( CmdMenu_SetFillColour, wxTRANSLATE("n"), wxTRANSLATE("n") )
1050 DEFINE_MENU_ITEMID( CmdMenu_SetContourWidth, wxTRANSLATE("n"), wxTRANSLATE("n") )
1051 DEFINE_MENU_ITEMID( CmdMenu_SetPathType, wxTRANSLATE("n"), wxTRANSLATE("n") )
1052 DEFINE_MENU_ITEMID( CmdMenu_SetNormalizeFactor, wxTRANSLATE("Set Normalize factor"), wxTRANSLATE("scale normalized objects by this") )
1053 
1054 DEFINE_MENU_ITEMID( CmdMenu_ShowDiagram, wxTRANSLATE("Show diagram"), wxTRANSLATE("Show diagram of current Cameleon") )
1055 DEFINE_MENU_ITEMID( CmdMenu_ShowSymbol, wxTRANSLATE("Show symbol"), wxTRANSLATE("Show symbol of current Cameleon") )
1056 DEFINE_MENU_ITEMID( CmdMenu_ShowGui, wxTRANSLATE("Show Gui"), wxTRANSLATE("Show Gui of current Cameleon") )
1057 
1058 DEFINE_MENU_ITEMID( CmdMenu_Refresh, wxTRANSLATE("refresh"), wxTRANSLATE("refresh all that is drawn on the canvas") )
1059 DEFINE_MENU_ITEMID( CmdMenu_ZoomOut, wxTRANSLATE("Zoom out"), wxTRANSLATE("zoom out to see whole drawing at currently shown object") )
1060 DEFINE_MENU_ITEMID( CmdMenu_ZoomOut2, wxTRANSLATE("Zoom out factor n"), wxTRANSLATE("zoom out to see factor n as much") )
1061 DEFINE_MENU_ITEMID( CmdMenu_ZoomIn2, wxTRANSLATE("Zoom in factor n"), wxTRANSLATE("zoom in a factor of n") )
1062 DEFINE_MENU_ITEMID( CmdMenu_ZoomOut2CondSelected, wxTRANSLATE("Zoom out factor n"), wxTRANSLATE("zoom out to see factor n as much, if selected objects use its boundingbox as start") )
1063 DEFINE_MENU_ITEMID( CmdMenu_ZoomIn2CondSelected, wxTRANSLATE("Zoom in factor n"), wxTRANSLATE("zoom in a factor of n, if selected objects use its boundingbox as start") )
1064 DEFINE_MENU_ITEMID( CmdMenu_EmptyShownObject, wxTRANSLATE("Empty Shown Object"), wxTRANSLATE("remove children of shown object") )
1065 //DEFINE_MENU_ITEMID( CmdMenu_GdsIoSaveTextAsPolygon, wxTRANSLATE("Gdsii Save text as Polgyon"), wxTRANSLATE("When possible/implemented, save text as polygon in GdsII format") ), wxITEM_CHECK );
1066 //DEFINE_MENU_ITEMID( CmdMenu_KeyIoSaveTextAsPolygon, wxTRANSLATE("Key Save text as Polgyon"), wxTRANSLATE("When possible/implemented, save text as polygon in KEY format") ), wxITEM_CHECK );
1067 //DEFINE_MENU_ITEMID( CmdMenu_SetGdsIoSaveFromView, wxTRANSLATE("Gdsii Save from View down"), wxTRANSLATE("Structure visible and all down will be saved") ), wxITEM_CHECK );
1068 //DEFINE_MENU_ITEMID( CmdMenu_SetKeyIoSaveFromView, wxTRANSLATE("Key Save from View down"), wxTRANSLATE("Structure visible and all down will be saved") ), wxITEM_CHECK );
1069 
1070 DEFINE_MENU_ITEMID( CmdMenu_PushInto, wxTRANSLATE("push into selected"), wxTRANSLATE("make the object selected the visible object") )
1071 DEFINE_MENU_ITEMID( CmdMenu_PopOut, wxTRANSLATE("pop out current to previous"), wxTRANSLATE("make the previous shown object the visible object, unless no more") )
1072 DEFINE_MENU_ITEMID( CmdMenu_NewGroup, wxTRANSLATE("new group"), wxTRANSLATE("create new group and set it as the current to show") )
1073 DEFINE_MENU_ITEMID( CmdMenu_NewPin, wxTRANSLATE("new pin"), wxTRANSLATE("insert new pin in group") )
1074 DEFINE_MENU_ITEMID( CmdMenu_SaveLayersDrawing, wxTRANSLATE("SaveLayers"), wxTRANSLATE("Save layers to a layer file") )
1075 DEFINE_MENU_ITEMID( CmdMenu_SaveLayersDrawingHome, wxTRANSLATE("SaveLayers Home"), wxTRANSLATE("Save layers to a layer file") )
1076 DEFINE_MENU_ITEMID( CmdMenu_SaveLayersDrawingLastDir, wxTRANSLATE("SaveLayers LastDir"), wxTRANSLATE("Save layers to a layer file") )
1077 DEFINE_MENU_ITEMID( CmdMenu_SaveLayersDrawingCurrentDir, wxTRANSLATE("SaveLayers Current Dir"), wxTRANSLATE("Save layers to a layer file") )
1078 
1079 DEFINE_MENU_ITEMID( CmdMenu_LoadLayersDrawing, wxTRANSLATE("LoadLayersDrawing"), wxTRANSLATE("Load layers to a layer file") )
1080 DEFINE_MENU_ITEMID( CmdMenu_LoadLayersDrawingHome, wxTRANSLATE("LoadLayers Home"), wxTRANSLATE("Load layers to a layer file") )
1081 DEFINE_MENU_ITEMID( CmdMenu_LoadLayersDrawingLastDir, wxTRANSLATE("LoadLayers LastDir"), wxTRANSLATE("Load layers to a layer file") )
1082 DEFINE_MENU_ITEMID( CmdMenu_LoadLayersDrawingCurrentDir, wxTRANSLATE("LoadLayers Current Dir"), wxTRANSLATE("Load layers to a layer file") )
1083 
1084 DEFINE_MENU_ITEMID( CmdMenu_SetCursor, wxTRANSLATE("Set cursor X,y"), wxTRANSLATE("Set cursor to given position") )
1085 DEFINE_MENU_ITEMID( CmdMenu_SetRelativeStart, wxTRANSLATE("start measure"), wxTRANSLATE("Set start for measuring") )
1086 DEFINE_MENU_ITEMID( CmdMenu_AddMeasurement, wxTRANSLATE("add measure point"), wxTRANSLATE("Add a point to the path to measure") )
1087 DEFINE_MENU_ITEMID( CmdMenu_ClearMeasurements, wxTRANSLATE("clear measure point"), wxTRANSLATE("clear measurement data") )
1088 
1089 DEFINE_MENU_ITEMID( CmdMenu_Selected_SelectAll, wxTRANSLATE("select all objects"), wxTRANSLATE("select all objects visible") )
1090 DEFINE_MENU_ITEMID( CmdMenu_Selected_DeSelectAll, wxTRANSLATE("deselect all objects"), wxTRANSLATE("deselect all objects visible") )
1091 DEFINE_MENU_ITEMID( CmdMenu_Selected_SelectAll_NoUndo, wxTRANSLATE("select all objects"), wxTRANSLATE("select all objects visible") )
1092 DEFINE_MENU_ITEMID( CmdMenu_Selected_DeSelectAll_NoUndo, wxTRANSLATE("deselect all objects"), wxTRANSLATE("deselect all objects visible") )
1093 DEFINE_MENU_ITEMID( CmdMenu_Selected_Delete, wxTRANSLATE("delete selected"), wxTRANSLATE("delete selected objects") )
1094 DEFINE_MENU_ITEMID( CmdMenu_Selected_Group, wxTRANSLATE("group selected"), wxTRANSLATE("group selected objects") )
1095 DEFINE_MENU_ITEMID( CmdMenu_Selected_ImageToRectangles, wxTRANSLATE("selected images to rectangle"), wxTRANSLATE("selected images are converted to rectangles per pixel") )
1096 DEFINE_MENU_ITEMID( CmdMenu_Selected_ToTop, wxTRANSLATE("selected to top"), wxTRANSLATE("selected drawn first") )
1097 DEFINE_MENU_ITEMID( CmdMenu_Selected_ToBack, wxTRANSLATE("selected to back"), wxTRANSLATE("selected drawn last") )
1098 DEFINE_MENU_ITEMID( CmdMenu_Selected_SetStyle, wxTRANSLATE("set fill stroke selected"), wxTRANSLATE("selected objects get the current fill and stroke") )
1099 DEFINE_MENU_ITEMID( CmdMenu_Selected_SetExtStyle, wxTRANSLATE("set extended fill stroke selected"), wxTRANSLATE("selected objects get the current extended fill and stroke") )
1100 DEFINE_MENU_ITEMID( CmdMenu_Selected_SetTextChanges, wxTRANSLATE("set text properties extended selected"), wxTRANSLATE("set text properties via dialog on selected objects") )
1101 DEFINE_MENU_ITEMID( CmdMenu_Selected_SetTextChanges2, wxTRANSLATE("set text properties selected"), wxTRANSLATE("set text properties via dialog on selected objects") )
1102 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertToPolygonPolylinesWithArcs, wxTRANSLATE("convert shapes to polylines and polygons with Arcs"), wxTRANSLATE("selected primitive shapes will be converted to polygons/polylines if possible") )
1103 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertToPolygonPolylinesWithoutArcs, wxTRANSLATE("convert shapes to polylines and polygons"), wxTRANSLATE("selected primitive shapes will be converted to polygons/polylines if possible") )
1104 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertToPolylines, wxTRANSLATE("convert shapes to polylines"), wxTRANSLATE("selected primitive shapes will be converted to polylines if possible") )
1105 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertLinesArcs, wxTRANSLATE("convert shapes to lines and arcs"), wxTRANSLATE("selected primitive shapes will be converted to arcs and lines if possible") )
1106 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertToVPaths, wxTRANSLATE("convert shapes to vector path"), wxTRANSLATE("selected primitive shapes will be converted to vector paths if possible") )
1107 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertPolygonToArcs, wxTRANSLATE("detect arcs in polygons"), wxTRANSLATE("selected polygon shapes to polygons with arcs") )
1108 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertPolylineToArcs, wxTRANSLATE("detect arcs in polylines"), wxTRANSLATE("selected polyline shapes to polylines with arcs") )
1109 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertPathToPolygon, wxTRANSLATE("Path2Polygon"), wxTRANSLATE("Convert Path to polygons") )
1110 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertSurfaceToPolygon, wxTRANSLATE("Surface to Polygons"), wxTRANSLATE("convert selected surfaces shapes to polygons") )
1111 DEFINE_MENU_ITEMID( CmdMenu_Selected_ConvertPolygonToSurface, wxTRANSLATE("Polygons to Surface"), wxTRANSLATE("convert selected polygon shapes to surfaces") )
1112 DEFINE_MENU_ITEMID( CmdMenu_Selected_UnGroup, wxTRANSLATE("ungroup selected one level"), wxTRANSLATE("ungroup selected one level") )
1113 DEFINE_MENU_ITEMID( CmdMenu_Selected_UnGroupDeep, wxTRANSLATE("ungroup selected deep"), wxTRANSLATE("ungroup selected deep") )
1114 DEFINE_MENU_ITEMID( CmdMenu_Selected_Merge, wxTRANSLATE("MergeSelected"), wxTRANSLATE("Merge selected objects") )
1115 DEFINE_MENU_ITEMID( CmdMenu_Selected_Offset, wxTRANSLATE("OffsetSelected"), wxTRANSLATE("Offset selected objects") )
1116 DEFINE_MENU_ITEMID( CmdMenu_Selected_CreateRing, wxTRANSLATE("Create Ring"), wxTRANSLATE("Ring creation operation") )
1117 DEFINE_MENU_ITEMID( CmdMenu_Selected_CameleonDiagram, wxTRANSLATE("selected to Cameleon + Diagram"), wxTRANSLATE("group selected objects into a Cameleon with a a2dDiagram") )
1118 DEFINE_MENU_ITEMID( CmdMenu_Selected_CameleonSymbol, wxTRANSLATE("selected to Cameleon + Symbol"), wxTRANSLATE("group selected objects into a Cameleon with a a2dSymbol") )
1119 DEFINE_MENU_ITEMID( CmdMenu_Selected_FlattenCameleon, wxTRANSLATE("selected flatten Cameleon"), wxTRANSLATE("selected objects Cameleon objects in diagram") )
1120 DEFINE_MENU_ITEMID( CmdMenu_Selected_CloneCameleonFromInst, wxTRANSLATE("selected Cameleon Clone"), wxTRANSLATE("selected Cameleon is Cloned to a new Cameleon") )
1121 DEFINE_MENU_ITEMID( CmdMenu_Selected_MoveXY, wxTRANSLATE("move selected relative X,Y"), wxTRANSLATE("move selected objects with X,Y") )
1122 DEFINE_MENU_ITEMID( CmdMenu_Selected_MoveLayer, wxTRANSLATE("move selected to Layer"), wxTRANSLATE("move selected objects to layer") )
1123 DEFINE_MENU_ITEMID( CmdMenu_Selected_CopyXY, wxTRANSLATE("copy selected relative X,Y"), wxTRANSLATE("copy selected objects with X,Y") )
1124 DEFINE_MENU_ITEMID( CmdMenu_Selected_CopyLayer, wxTRANSLATE("copy selected to Layer"), wxTRANSLATE("copy selected objects to layer") )
1125 DEFINE_MENU_ITEMID( CmdMenu_Selected_Transform, wxTRANSLATE("transform selected"), wxTRANSLATE("transform selected objects") )
1126 DEFINE_MENU_ITEMID( CmdMenu_Selected_Rotate, wxTRANSLATE("rotate selected"), wxTRANSLATE("rotate selected objects") )
1127 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MinX, wxTRANSLATE("Align selected left"), wxTRANSLATE("Align selected objects left side of boundingbox") )
1128 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MaxX, wxTRANSLATE("Align selected right"), wxTRANSLATE("Align selected objects right side of boundingbox") )
1129 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MinY, wxTRANSLATE("Align selected bottom"), wxTRANSLATE("Align selected objects bottom side of boundingbox") )
1130 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MaxY, wxTRANSLATE("Align selected top"), wxTRANSLATE("Align selected objects top side of boundingbox") )
1131 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MidX, wxTRANSLATE("Align selected middle X"), wxTRANSLATE("Align selected objects middle of boundingbox in X") )
1132 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MidY, wxTRANSLATE("Align selected middle Y"), wxTRANSLATE("Align selected objects middle of boundingbox in Y") )
1133 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorVert, wxTRANSLATE("Mirror selected vertical"), wxTRANSLATE("Mirror selected objects vertical") )
1134 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorHorz, wxTRANSLATE("Mirror selected horizontal"), wxTRANSLATE("Mirror selected objects horizontal") )
1135 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorVertBbox, wxTRANSLATE("Mirror selected vertical boundingbox"), wxTRANSLATE("Mirror selected objects vertical around centre boundingbox") )
1136 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorHorzBbox, wxTRANSLATE("Mirror selected horizontal boundingbox"), wxTRANSLATE("Mirror selected objects horizontal around centre boundingbox") )
1137 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_DistributeVert, wxTRANSLATE("Distribute selected vertical"), wxTRANSLATE("Distribute selected objects vertical") )
1138 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_DistributeHorz, wxTRANSLATE("Distribute selected horizontal"), wxTRANSLATE("Distribute selected objects horizontal") )
1139 
1140 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MinX_Dest, wxTRANSLATE("Align selected left destination"), wxTRANSLATE("Align selected objects left side of boundingbox destination") )
1141 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MaxX_Dest, wxTRANSLATE("Align selected right destination"), wxTRANSLATE("Align selected objects right side of boundingbox destination") )
1142 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MinY_Dest, wxTRANSLATE("Align selected bottom destination"), wxTRANSLATE("Align selected objects bottom side of boundingbox destination") )
1143 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MaxY_Dest, wxTRANSLATE("Align selected top destination"), wxTRANSLATE("Align selected objects top side of boundingbox destination") )
1144 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MidX_Dest, wxTRANSLATE("Align selected middle X destination"), wxTRANSLATE("Align selected objects middle of boundingbox in X destination") )
1145 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MidY_Dest, wxTRANSLATE("Align selected middle Y destination"), wxTRANSLATE("Align selected objects middle of boundingbox in Y destination") )
1146 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorVert_Dest, wxTRANSLATE("Mirror selected vertical destination"), wxTRANSLATE("Mirror selected objects vertical destination") )
1147 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorHorz_Dest, wxTRANSLATE("Mirror selected horizontal destination"), wxTRANSLATE("Mirror selected objects horizontal destination") )
1148 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorVertBbox_Dest, wxTRANSLATE("Mirror selected vertical boundingbox destination"), wxTRANSLATE("Mirror selected objects vertical around centre boundingbox destination") )
1149 DEFINE_MENU_ITEMID( CmdMenu_Selected_Align_MirrorHorzBbox_Dest, wxTRANSLATE("Mirror selected horizontal boundingbox destination"), wxTRANSLATE("Mirror selected objects horizontal around centre boundingbox destination") )
1150 
1151 DEFINE_MENU_ITEMID( CmdMenu_Selected_RotateObject90Left, wxTRANSLATE("Rotate selected 90 Left"), wxTRANSLATE("rotate selected left 90 degrees") )
1152 DEFINE_MENU_ITEMID( CmdMenu_Selected_RotateObject90Right, wxTRANSLATE("Rotate selected 90 Right"), wxTRANSLATE("rotate selected right -90 degrees") )
1153 
1154 
1155 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_Offset, wxTRANSLATE("Offset"), wxTRANSLATE("Boolean Offset operation") )
1156 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_Smooth, wxTRANSLATE("Smooth"), wxTRANSLATE("Smooth operation") )
1157 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_CreateRing, wxTRANSLATE("Create Ring"), wxTRANSLATE("Ring creation operation") )
1158 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_Delete, wxTRANSLATE("delete groupA"), wxTRANSLATE("delete groupA Objects") )
1159 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_Move, wxTRANSLATE("move groupA"), wxTRANSLATE("move groupA Objects") )
1160 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_Copy, wxTRANSLATE("copy groupA"), wxTRANSLATE("copy groupA Objects") )
1161 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_ToArcs, wxTRANSLATE("toArcs groupA"), wxTRANSLATE("convert lines to arcs if possible in groupA Objects") )
1162 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_Or, wxTRANSLATE("Boolean Or"), wxTRANSLATE("Boolean Or operation group A-B") )
1163 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_And, wxTRANSLATE("Boolean And"), wxTRANSLATE("Boolean And operation group A-B") )
1164 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_Exor, wxTRANSLATE("Boolean Exor"), wxTRANSLATE("Boolean Exor operation group A-B") )
1165 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_AsubB, wxTRANSLATE("Boolean A-B"), wxTRANSLATE("Boolean Subtract operation group A-B") )
1166 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_BsubA, wxTRANSLATE("Boolean B-A"), wxTRANSLATE("Boolean Subtract operation group A-B") )
1167 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_ConvertSurfaceToPolygon, wxTRANSLATE("Surface to Polygons"), wxTRANSLATE("convert GroupA surfaces shapes to polygons") )
1168 DEFINE_MENU_ITEMID( CmdMenu_GroupAB_ConvertPolygonToSurface, wxTRANSLATE("Polygons to Surface"), wxTRANSLATE("convert GroupA polygon shapes to surfaces") )
1169 
1170 DEFINE_MENU_ITEMID( CmdMenu_PopTool, wxTRANSLATE("Pop tool"), wxTRANSLATE("Pop the last pushed tool from the tool stack") )
1171 
1172 
1173 DEFINE_MENU_ITEMID( CmdMenu_PushTool_RenderImageZoom_OneShot, wxTRANSLATE("n"), wxTRANSLATE("n") )
1174 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Zoom_OneShot, wxTRANSLATE("Zoom in and out"), wxTRANSLATE("Zoom in to the regtangle dragged") )
1175 DEFINE_MENU_ITEMID( CmdMenu_PushTool_FastZoom_OneShot, wxTRANSLATE("Zoom in and out"), wxTRANSLATE("Zoom in to the regtangle dragged") )
1176 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Select_OneShot, wxTRANSLATE("Select Objects"), wxTRANSLATE("select object using mouse") )
1177 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Select2_OneShot, wxTRANSLATE("Select Objects 2"), wxTRANSLATE("select object using mouse") )
1178 DEFINE_MENU_ITEMID( CmdMenu_PushTool_FastSelect_OneShot, wxTRANSLATE("Select Objects"), wxTRANSLATE("select object using mouse") )
1179 DEFINE_MENU_ITEMID( CmdMenu_PushTool_FastSelect2_OneShot, wxTRANSLATE("Select Objects"), wxTRANSLATE("select object using mouse") )
1180 DEFINE_MENU_ITEMID( CmdMenu_PushTool_RecursiveEdit_OneShot, wxTRANSLATE("Edit"), wxTRANSLATE("Edit a objects using mouse") )
1181 DEFINE_MENU_ITEMID( CmdMenu_PushTool_MultiEdit_OneShot, wxTRANSLATE("Edit Matrix"), wxTRANSLATE("Edit a matrix of objects using mouse") )
1182 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Drag_OneShot, wxTRANSLATE("Drag Objects"), wxTRANSLATE("Drag objects using mouse also (Ctrl Mouse LD)") )
1183 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DragOriginal_OneShot, wxTRANSLATE("Drag Original Objects"), wxTRANSLATE("Drag original objects using mouse") )
1184 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Copy_OneShot, wxTRANSLATE("Copy Objects"), wxTRANSLATE("Copy objects using mouse") )
1185 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Rotate_OneShot, wxTRANSLATE("Rotate Objects"), wxTRANSLATE("Rotate objects using mouse") )
1186 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Delete_OneShot, wxTRANSLATE("Delete Objects"), wxTRANSLATE("Delete objects using mouse also (Shift Mouse LD)") )
1187 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawText_OneShot, wxTRANSLATE("Insert Text"), wxTRANSLATE("insert text") )
1188 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Image_OneShot, wxTRANSLATE("Insert Image"), wxTRANSLATE("insert a2dImage in dragged rectangle, from a file") )
1189 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawRectangle_OneShot, wxTRANSLATE("Draw Rectangle"), wxTRANSLATE("draw rectangle") )
1190 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawRectangleFast_OneShot, wxTRANSLATE("Draw Rectangle"), wxTRANSLATE("draw rectangle") )
1191 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawCircle_OneShot, wxTRANSLATE("Draw Circle"), wxTRANSLATE("draw Circle") )
1192 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawCircleFast_OneShot, wxTRANSLATE("Draw Circle"), wxTRANSLATE("draw Circle") )
1193 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawLine_OneShot, wxTRANSLATE("Draw line with ends"), wxTRANSLATE("add a line with ends using mouse") )
1194 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawLineScaledArrow_OneShot, wxTRANSLATE("Draw line with arrows"), wxTRANSLATE("add a line with arrows using mouse") )
1195 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawEllipse_OneShot, wxTRANSLATE("Draw Ellipse"), wxTRANSLATE("add a ellipse using mouse") )
1196 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawEllipticArc_OneShot, wxTRANSLATE("Draw Elliptic Arc"), wxTRANSLATE("add a Elliptic Arc using mouse") )
1197 
1198 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawArc_OneShot, wxTRANSLATE("Draw Arc"), wxTRANSLATE("add a arc using mouse") )
1199 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawArc_Chord_OneShot, wxTRANSLATE("Draw Arc Chord"), wxTRANSLATE("add a arc using mouse") )
1200 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawPolylineL_OneShot, wxTRANSLATE("Draw polyline"), wxTRANSLATE("add a polyline using mouse") )
1201 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawPolylineL_Splined_OneShot, wxTRANSLATE("Draw splined polyline"), wxTRANSLATE("add a splined polyline using mouse") )
1202 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawPolylineLFast_OneShot, wxTRANSLATE("Draw polyline"), wxTRANSLATE("add a polyline using mouse") )
1203 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawPolygonL_OneShot, wxTRANSLATE("Draw polygon"), wxTRANSLATE("add a polygon using mouse") )
1204 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawPolygonL_Splined_OneShot, wxTRANSLATE("Draw splined polygon"), wxTRANSLATE("add a splined polygon using mouse") )
1205 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawPolygonLFast_OneShot, wxTRANSLATE("Draw polygon"), wxTRANSLATE("add a polygon using mouse") )
1206 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Property_OneShot, wxTRANSLATE("Edit Properties"), wxTRANSLATE("edit the properties of objects") )
1207 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DragMulti_OneShot, wxTRANSLATE("Drag Selected Objects"), wxTRANSLATE("select object using mouse") )
1208 DEFINE_MENU_ITEMID( CmdMenu_PushTool_FastDragMulti_OneShot, wxTRANSLATE("Drag Selected Objects"), wxTRANSLATE("select object using mouse") )
1209 DEFINE_MENU_ITEMID( CmdMenu_PushTool_CopyMulti_OneShot, wxTRANSLATE("Copy Selected Objects"), wxTRANSLATE("select object using mouse") )
1210 DEFINE_MENU_ITEMID( CmdMenu_PushTool_FastCopyMulti_OneShot, wxTRANSLATE("Copy Selected Objects"), wxTRANSLATE("select object using mouse") )
1211 DEFINE_MENU_ITEMID( CmdMenu_PushTool_Measure_OneShot, wxTRANSLATE("Measure"), wxTRANSLATE("measure along a polyline using mouse") )
1212 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawWirePolylineL_OneShot, wxTRANSLATE("Wire Tool"), wxTRANSLATE("Add wire between pins") )
1213 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawVPath_OneShot, wxTRANSLATE("Draw vector path"), wxTRANSLATE("add a vector path using mouse") )
1214 DEFINE_MENU_ITEMID( CmdMenu_PushTool_DrawEllipticArc_Chord_OneShot, wxTRANSLATE("Draw Elliptic Arc Chord"), wxTRANSLATE("add a Elliptic Arc using mouse") )
1215 
1216 
1217 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_RenderImageZoom, wxTRANSLATE("n"), wxTRANSLATE("n") , wxITEM_CHECK )
1218 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Zoom, wxTRANSLATE("Zoom in and out"), wxTRANSLATE("Zoom in to the regtangle dragged"), wxITEM_CHECK )
1219 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_FastZoom, wxTRANSLATE("Zoom in and out"), wxTRANSLATE("Zoom in to the regtangle dragged"), wxITEM_CHECK )
1220 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Select, wxTRANSLATE("Select Objects"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1221 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Select2, wxTRANSLATE("Select Objects 2"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1222 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_FastSelect, wxTRANSLATE("Select Objects"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1223 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_FastSelect2, wxTRANSLATE("Select Objects"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1224 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_RecursiveEdit, wxTRANSLATE("Edit"), wxTRANSLATE("Edit a objects using mouse"), wxITEM_CHECK )
1225 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_MultiEdit, wxTRANSLATE("Edit Matrix"), wxTRANSLATE("Edit a matrix of objects using mouse"), wxITEM_CHECK )
1226 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Drag, wxTRANSLATE("Drag Objects"), wxTRANSLATE("Drag objects using mouse also (Ctrl Mouse LD)"), wxITEM_CHECK )
1227 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DragOriginal, wxTRANSLATE("Drag Original Objects"), wxTRANSLATE("Drag original objects using mouse"), wxITEM_CHECK )
1228 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Copy, wxTRANSLATE("Copy Objects"), wxTRANSLATE("Copy objects using mouse"), wxITEM_CHECK )
1229 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Rotate, wxTRANSLATE("Rotate Objects"), wxTRANSLATE("Rotate objects using mouse"), wxITEM_CHECK )
1230 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Delete, wxTRANSLATE("Delete Objects"), wxTRANSLATE("Delete objects using mouse also (Shift Mouse LD)"), wxITEM_CHECK )
1231 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawText, wxTRANSLATE("Insert Text"), wxTRANSLATE("insert text"), wxITEM_CHECK )
1232 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Image, wxTRANSLATE("Insert Image"), wxTRANSLATE("insert a2dImage in dragged rectangle, from a file"), wxITEM_CHECK )
1233 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawRectangle, wxTRANSLATE("Draw Rectangle"), wxTRANSLATE("draw rectangle"), wxITEM_CHECK )
1234 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawRectangleFast, wxTRANSLATE("Draw Rectangle"), wxTRANSLATE("draw rectangle"), wxITEM_CHECK )
1235 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawCircle, wxTRANSLATE("Draw Circle"), wxTRANSLATE("draw Circle"), wxITEM_CHECK )
1236 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawCircleFast, wxTRANSLATE("Draw Circle"), wxTRANSLATE("draw Circle"), wxITEM_CHECK )
1237 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawLine, wxTRANSLATE("Draw line with ends"), wxTRANSLATE("add a line with ends using mouse"), wxITEM_CHECK )
1238 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawLineScaledArrow, wxTRANSLATE("Draw line with arrows"), wxTRANSLATE("add a line with arrows using mouse"), wxITEM_CHECK )
1239 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawEllipse, wxTRANSLATE("Draw Ellipse"), wxTRANSLATE("add a ellipse using mouse"), wxITEM_CHECK )
1240 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawEllipticArc, wxTRANSLATE("Draw Elliptic Arc"), wxTRANSLATE("add a Elliptic Arc using mouse"), wxITEM_CHECK )
1241 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawEllipticArc_Chord, wxTRANSLATE("Draw Elliptic Arc Chord"), wxTRANSLATE("add a Elliptic Arc using mouse"), wxITEM_CHECK )
1242 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawArc, wxTRANSLATE("Draw Arc"), wxTRANSLATE("add a arc using mouse"), wxITEM_CHECK )
1243 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawArc_Chord, wxTRANSLATE("Draw Arc Chord"), wxTRANSLATE("add a arc using mouse"), wxITEM_CHECK )
1244 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawPolylineL, wxTRANSLATE("Draw polyline"), wxTRANSLATE("add a polyline using mouse"), wxITEM_CHECK )
1245 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawPolylineL_Splined, wxTRANSLATE("Draw splined polyline"), wxTRANSLATE("add a splined polyline using mouse"), wxITEM_CHECK )
1246 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawPolylineLFast, wxTRANSLATE("Draw polyline"), wxTRANSLATE("add a polyline using mouse"), wxITEM_CHECK )
1247 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawPolygonL, wxTRANSLATE("Draw polygon"), wxTRANSLATE("add a polygon using mouse"), wxITEM_CHECK )
1248 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawPolygonL_Splined, wxTRANSLATE("Draw splined polygon"), wxTRANSLATE("add a splined polygon using mouse"), wxITEM_CHECK )
1249 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawPolygonLFast, wxTRANSLATE("Draw polygon"), wxTRANSLATE("add a polygon using mouse"), wxITEM_CHECK )
1250 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Property, wxTRANSLATE("Edit Properties"), wxTRANSLATE("edit the properties of objects"), wxITEM_CHECK )
1251 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DragMulti, wxTRANSLATE("Drag Selected Objects"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1252 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_FastDragMulti, wxTRANSLATE("Drag Selected Objects"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1253 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_CopyMulti, wxTRANSLATE("Copy Selected Objects"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1254 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_FastCopyMulti, wxTRANSLATE("Copy Selected Objects"), wxTRANSLATE("select object using mouse"), wxITEM_CHECK )
1255 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Measure, wxTRANSLATE("Measure"), wxTRANSLATE("measure along a polyline using mouse"), wxITEM_CHECK )
1256 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawWirePolylineL, wxTRANSLATE("Wire Tool"), wxTRANSLATE("Add wire between pins"), wxITEM_CHECK )
1257 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_DrawVPath, wxTRANSLATE("Draw vector path"), wxTRANSLATE("add a vector path using mouse"), wxITEM_CHECK )
1258 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Port, wxTRANSLATE("Add new Ports"), wxTRANSLATE("add Ports objects using mouse"), wxITEM_CHECK )
1259 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Cameleon, wxTRANSLATE("Add new Cameleons"), wxTRANSLATE("add Cameleon objects using mouse"), wxITEM_CHECK )
1260 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_Cameleon_BuildIn, wxTRANSLATE("Add new BuildIn Cameleons"), wxTRANSLATE("add _BuildIn Cameleon objects using mouse"), wxITEM_CHECK )
1261 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_CameleonInst, wxTRANSLATE("Add Cameleon Instance"), wxTRANSLATE("add Cameleon instances using mouse"), wxITEM_CHECK )
1262 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_CameleonInstDlg, wxTRANSLATE("Add Cameleon Instance from a list"), wxTRANSLATE("add Cameleon instance from a list, using mouse"), wxITEM_CHECK )
1263 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_CameleonRefDlg, wxTRANSLATE("Add Cameleon Reference from a list"), wxTRANSLATE("add Cameleon reference from a list, using mouse"), wxITEM_CHECK )
1264 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_CameleonRefDlg_Diagram, wxTRANSLATE("Add Cameleon Reference to a2dDiagram Instance from a list"), wxTRANSLATE("add Cameleon reference from a list, using mouse"), wxITEM_CHECK )
1265 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_CameleonRefDlg_Symbol, wxTRANSLATE("Add Cameleon Reference to a2dSymbol Instance from a list"), wxTRANSLATE("add Cameleon reference from a list, using mouse"), wxITEM_CHECK )
1266 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_TagGroups, wxTRANSLATE("Edit Mode Tag Groups"), wxTRANSLATE("push tool Tag Groups"), wxITEM_CHECK )
1267 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_TagGroups_WireMode, wxTRANSLATE("Edit Mode Tag Groups in Wire Mode"), wxTRANSLATE("push tool Tag Groups in its wire mode"), wxITEM_CHECK )
1268 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_TagGroups_WireMode_DlgMode, wxTRANSLATE("Edit Mode Tag Groups in Wire Mode"), wxTRANSLATE("push tool Tag Groups in its wire mode with dialog at DC"), wxITEM_CHECK )
1269 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_TagGroups_DlgMode, wxTRANSLATE("Edit Mode Tag Groups in Dlg Mode"), wxTRANSLATE("push tool Tag Groups in its dlg mode"), wxITEM_CHECK )
1270 DEFINE_MENU_ITEMID_KIND( CmdMenu_PushTool_SingleClick, wxTRANSLATE("Single click Edit Mode"), wxTRANSLATE("Single click Edit Mode wxITEM_CHECK"), wxITEM_CHECK )
1271 
1272 DEFINE_MENU_ITEMID( CmdMenu_InsertGroupRef, wxTRANSLATE("&Insert Reference to canvas object"), wxTRANSLATE("Insert Reference to canvas object") )
1273 
1274 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetMasterTool_SelectFirst, wxTRANSLATE("Edit Mode select first"), wxTRANSLATE("set the main tool in mode zselect first"), wxITEM_CHECK )
1275 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetMasterTool_ZoomFirst, wxTRANSLATE("Edit Mode zoom first"), wxTRANSLATE("set the main tool in mode zoom first"), wxITEM_CHECK )
1276 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetMasterTool_TagGroups, wxTRANSLATE("Edit Mode Tag Groups"), wxTRANSLATE("set the main tool in mode Tag Groups"), wxITEM_CHECK )
1277 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetMasterTool_TagGroups_DlgMode, wxTRANSLATE("Edit Mode Tag Groups in Dlg Mode"), wxTRANSLATE("set the main tool in mode Tag Groups in its dlg mode"), wxITEM_CHECK )
1278 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetMasterTool_TagGroups_WireMode, wxTRANSLATE("Edit Mode Tag Groups in Wire Mode"), wxTRANSLATE("set the main tool in mode Tag Groups in its wire mode"), wxITEM_CHECK )
1279 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetMasterTool_TagGroups_WireMode_DlgMode, wxTRANSLATE("Edit Mode Tag Groups in Wire and Dlg Mode"), wxTRANSLATE("set the main tool in mode Tag Groups in its wire & dlg mode"), wxITEM_CHECK )
1280 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetMasterTool_SingleClick, wxTRANSLATE("Single Click Edit Mode "), wxTRANSLATE("set the main tool in mode single click edit mode"), wxITEM_CHECK )
1281 
1282 DEFINE_MENU_ITEMID( CmdMenu_LineBegin, wxTRANSLATE("begin object"), wxTRANSLATE("(poly)Line tool begin Object") )
1283 DEFINE_MENU_ITEMID( CmdMenu_LineEnd, wxTRANSLATE("end object"), wxTRANSLATE("(poly)Line tool end Object") )
1284 DEFINE_MENU_ITEMID( CmdMenu_LineScale, wxTRANSLATE("scaling of point object"), wxTRANSLATE("(poly)Line tool begin&end Object scalling") )
1285 
1286 DEFINE_MENU_ITEMID( CmdMenu_SetLayerDlg, wxTRANSLATE("Set Current layer"), wxTRANSLATE("set the current layer for drawing upon") )
1287 DEFINE_MENU_ITEMID_KIND( CmdMenu_SetLayerDlgModeless, wxTRANSLATE("layer dialog"), wxTRANSLATE("set the current layer for drawing upon"), wxITEM_CHECK );
1288 DEFINE_MENU_ITEMID( CmdMenu_SetTargetDlg, wxTRANSLATE("Set Current Target layer"), wxTRANSLATE("set the current target layer for actions involving a target") )
1289 DEFINE_MENU_ITEMID( CmdMenu_SetBackgroundStyle, wxTRANSLATE("Set BackGround"), wxTRANSLATE("Set Style for Background of canvas") )
1290 
1291 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgLayersDrawing, wxTRANSLATE("&Init Layers Drawing"), wxTRANSLATE("layer dialog initialized for editing layers drawing"), wxITEM_CHECK );
1292 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgLayersGlobal, wxTRANSLATE("&Init Layer Global"), wxTRANSLATE("layer dialog initialized for editing layers global"), wxITEM_CHECK );
1293 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgTools, wxTRANSLATE("&Tools Dialog"), wxTRANSLATE("tools dialog") , wxITEM_CHECK );
1294 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgStyle, wxTRANSLATE("&Style Dialog"), wxTRANSLATE("style dialog") , wxITEM_CHECK )
1295 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgSnap, wxTRANSLATE("&Snap Settings Dialog"), wxTRANSLATE("Snap Settings dialog") , wxITEM_CHECK )
1296 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgGroups, wxTRANSLATE("Set Groups Dialog"), wxTRANSLATE("To set groups of layers for use in boolean operations etc.") , wxITEM_CHECK )
1297 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgIdentify, wxTRANSLATE("&Identify Dialog"), wxTRANSLATE("Identify selected objects") , wxITEM_CHECK )
1298 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgCoordEntry, wxTRANSLATE("&Coordinate Entry Dialog"), wxTRANSLATE("Coordinate Entry Dialog"), wxITEM_CHECK )
1299 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgMeasure, wxTRANSLATE("&Measure Dialog"), wxTRANSLATE("Measure Dialog"), wxITEM_CHECK )
1300 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgStructure, wxTRANSLATE("&Structure Dialog"), wxTRANSLATE("shows structure dialog") , wxITEM_CHECK )
1301 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgCameleonModal, wxTRANSLATE("&Cameleon Dialog"), wxTRANSLATE("shows Cameleon dialog") , wxITEM_CHECK )
1302 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgStructureModal, wxTRANSLATE("&Structure Dialog"), wxTRANSLATE("shows structure dialog modal") , wxITEM_CHECK )
1303 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgPathSettings, wxTRANSLATE("&Path Dialog"), wxTRANSLATE("path settings dialog"), wxITEM_CHECK )
1304 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgSettings, wxTRANSLATE("&Settings Dialog"), wxTRANSLATE("settings dialog") , wxITEM_CHECK )
1305 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgTrans, wxTRANSLATE("&Transformation Dialog"), wxTRANSLATE("transform selected dialog") , wxITEM_CHECK )
1306 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgPropEdit, wxTRANSLATE("&Property Edit Dialog"), wxTRANSLATE("property edit dialog") , wxITEM_CHECK )
1307 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgLayerOrderDrawing, wxTRANSLATE("&Order Layers Document"), wxTRANSLATE("order layer dialog initialized for layers drawing") , wxITEM_CHECK )
1308 DEFINE_MENU_ITEMID_KIND( CmdMenu_ShowDlgLayerOrderGlobal, wxTRANSLATE("&Order Layers Global"), wxTRANSLATE("order layer dialog initialized for layers global") , wxITEM_CHECK )
1309 
1310 DEFINE_MENU_ITEMID( CmdMenu_SetFont, wxTRANSLATE("Set Current font"), wxTRANSLATE("used in a2dText object" ) )
1311 
1312 DEFINE_MENU_ITEMID( CmdMenu_PrintDrawing, wxTRANSLATE("Print Drawing"), wxTRANSLATE("Print Drawing" ) )
1313 DEFINE_MENU_ITEMID( CmdMenu_PreviewDrawing, wxTRANSLATE("Preview Drawing"), wxTRANSLATE("Preview Print Drawing" ) )
1314 DEFINE_MENU_ITEMID( CmdMenu_PrintDrawingPart, wxTRANSLATE("Print Drawing Part"), wxTRANSLATE("Print Drawing Part" ) )
1315 DEFINE_MENU_ITEMID( CmdMenu_PreviewDrawingPart, wxTRANSLATE("Preview Drawing Part"), wxTRANSLATE("Preview Print Drawing Part" ) )
1316 
1317 //!@}
1318 
1319 const a2dCommandId a2dCommand_GroupAB::Id( wxT( "GroupAB" ) );
1320 const a2dCommandId a2dCommand_SetLayerMask::Id( wxT( "SetLayerMask" ) );
1321 const a2dCommandId a2dCommand_DeleteMask::Id( wxT( "DeleteMask" ) );
1322 const a2dCommandId a2dCommand_ToTopMask::Id( wxT( "ToTopMask" ) );
1323 const a2dCommandId a2dCommand_ToBackMask::Id( wxT( "ToBackMask" ) );
1324 const a2dCommandId a2dCommand_CopyMask::Id( wxT( "CopyMask" ) );
1325 const a2dCommandId a2dCommand_MoveMask::Id( wxT( "MoveMask" ) );
1326 const a2dCommandId a2dCommand_ConvertMask::Id( wxT( "ConvertMask" ) );
1327 const a2dCommandId a2dCommand_GroupMask::Id( wxT( "GroupMask" ) );
1328 const a2dCommandId a2dCommand_UnGroupMask::Id( wxT( "UnGroupMask" ) );
1329 const a2dCommandId a2dCommand_MergeMask::Id( wxT( "MergeMask" ) );
1330 const a2dCommandId a2dCommand_PolygonToSurfaceMask::Id( wxT( "PolygonToSurfaceMask" ) );
1331 const a2dCommandId a2dCommand_SurfaceToPolygonMask::Id( wxT( "SurfaceToPolygonMask" ) );
1332 const a2dCommandId a2dCommand_OffsetMask::Id( wxT( "OffsetMask" ) );
1333 const a2dCommandId a2dCommand_UrlOnMask::Id( wxT( "UrlOnMask" ) );
1334 const a2dCommandId a2dCommand_SetFillStrokeMask::Id( wxT( "SetFillStrokeMask" ) );
1335 const a2dCommandId a2dCommand_ImagesToRectMask::Id( wxT( "ImagesToRect" ) );
1336 const a2dCommandId a2dCommand_SetLayersProperty::Id( wxT( "SetLayersProperty" ) );
1337 const a2dCommandId a2dCommand_SetShowObject::Id( wxT( "SetShowObject" ) );
1338 const a2dCommandId a2dCanvasCommandProcessor::COMID_PopTool( wxT( "PopTool" ) );
1339 
1340 const a2dCommandId a2dCommand_PushInto::Id( wxT( "PushInto" ) );
1341 const a2dCommandId a2dCommand_AddObject::Id( wxT( "AddObject" ) );
1342 const a2dCommandId a2dCommand_ReleaseObject::Id( wxT( "ReleaseObject" ) );
1343 const a2dCommandId a2dCommand_ReplaceObject::Id( wxT( "ReplaceObject" ) );
1344 const a2dCommandId a2dCommand_MoveObject::Id( wxT( "MoveObject" ) );
1345 const a2dCommandId a2dCommand_SetFlags::Id( wxT( "SetFlags" ) );
1346 const a2dCommandId a2dCommand_SetFlag::Id( wxT( "SetFlag" ) );
1347 const a2dCommandId a2dCommand_SetSelectFlag::Id( wxT( "SetSelectFlag" ) );
1348 const a2dCommandId a2dCommand_SetSelect2Flag::Id( wxT( "SetSelect2Flag" ) );
1349 const a2dCommandId a2dCommand_TransformMask::Id( wxT( "SetTransformFlaged" ) );
1350 const a2dCommandId a2dCommand_RotateMask::Id( wxT( "RotateFlaged" ) );
1351 const a2dCommandId a2dCommand_AlignMask::Id( wxT( "AlignFlaged" ) );
1352 const a2dCommandId a2dCommand_AddPoint::Id( wxT( "AddPoint" ) );
1353 const a2dCommandId a2dCommand_MoveSegment::Id( wxT( "MoveSegment" ) );
1354 const a2dCommandId a2dCommand_MovePoint::Id( wxT( "MovePoint" ) );
1355 const a2dCommandId a2dCommand_MoveMidSegment::Id( wxT( "MoveMidSegment" ) );
1356 const a2dCommandId a2dCommand_RemoveSegment::Id( wxT( "RemoveSegment" ) );
1357 const a2dCommandId a2dCommand_SetSegments::Id( wxT( "SetSegments" ) );
1358 const a2dCommandId a2dCommand_ChangeText::Id( wxT( "ChangeText" ) );
1359 const a2dCommandId a2dCommand_ChangeCanvasObjectStyle::Id( wxT( "ChangeCanvasObjectStyle" ) );
1360 const a2dCommandId a2dCommand_SetCanvasProperty::Id( wxT( "SetCanvasProperty" ) );
1361 const a2dCommandId a2dCommand_ConnectPins::Id( wxT( "ConnectPins" ) );
1362 const a2dCommandId a2dCommand_DisConnectPins::Id( wxT( "DisConnectPins" ) );
1363 const a2dCommandId a2dCommand_Select::Id( wxT( "Select" ) );
1364 const a2dCommandId a2dCommand_AddObjects::Id( wxT( "AddObjects" ) );
1365 
1366 const a2dSignal a2dCanvasCommandProcessor::sig_ClearMeasurements = wxNewId();
1367 const a2dSignal a2dCanvasCommandProcessor::sig_AddMeasurement = wxNewId();
1368 const a2dSignal a2dCanvasCommandProcessor::sig_SetRelativeStart = wxNewId();
1369 
1371 IMPLEMENT_DYNAMIC_CLASS( a2dCommand_SetLayerGroup, a2dCommand )
1372 IMPLEMENT_DYNAMIC_CLASS( a2dCommand_SetStroke, a2dCommand )
1373 IMPLEMENT_DYNAMIC_CLASS( a2dCommand_SetFill, a2dCommand )
1374 IMPLEMENT_DYNAMIC_CLASS( a2dCommand_SetStrokeColour, a2dCommand )
1375 IMPLEMENT_DYNAMIC_CLASS( a2dCommand_SetFillColour, a2dCommand )
1376 //IMPLEMENT_DYNAMIC_CLASS( a2dCommand_ViewAsImage, a2dCommand )
1377 //IMPLEMENT_DYNAMIC_CLASS( a2dCommand_ViewAsSvg, a2dCommand )
1378 IMPLEMENT_DYNAMIC_CLASS( a2dCommand_SetCursor, a2dCommand )
1379 
1380 BEGIN_EVENT_TABLE( a2dCanvasCommandProcessor, a2dCommandProcessor )
1381 
1382  EVT_BEGINBUSY( a2dCanvasCommandProcessor::OnBusyBegin )
1383  EVT_ENDBUSY( a2dCanvasCommandProcessor::OnBusyEnd )
1384 
1385  EVT_MENU( CmdMenu_Selected_Merge().GetId(), a2dCanvasCommandProcessor::OnMenu )
1386  EVT_MENU( CmdMenu_ChangeCanvasObjectStyle().GetId() , a2dCanvasCommandProcessor::OnMenu )
1387 
1388  EVT_MENU( CmdMenu_SetLayer().GetId() , a2dCanvasCommandProcessor::OnMenu )
1389  EVT_MENU( CmdMenu_SetTarget().GetId() , a2dCanvasCommandProcessor::OnMenu )
1390  EVT_MENU( CmdMenu_SetDrawWireFrame().GetId() , a2dCanvasCommandProcessor::OnMenu )
1391  EVT_MENU( CmdMenu_DrawGridLines().GetId() , a2dCanvasCommandProcessor::OnMenu )
1392  EVT_MENU( CmdMenu_DrawGridAtFront().GetId() , a2dCanvasCommandProcessor::OnMenu )
1393  EVT_MENU( CmdMenu_DrawGrid().GetId() , a2dCanvasCommandProcessor::OnMenu )
1394  EVT_MENU( CmdMenu_SetSnap().GetId() , a2dCanvasCommandProcessor::OnMenu )
1395  EVT_MENU( CmdMenu_SetYAxis().GetId() , a2dCanvasCommandProcessor::OnMenu )
1396  EVT_MENU( CmdMenu_Option_SplinePoly().GetId() , a2dCanvasCommandProcessor::OnMenu )
1397  EVT_MENU( CmdMenu_Option_CursorCrosshair().GetId() , a2dCanvasCommandProcessor::OnMenu )
1398  EVT_MENU( CmdMenu_Option_RescaleAtReSize().GetId() , a2dCanvasCommandProcessor::OnMenu )
1399  EVT_MENU( CmdMenu_Option_ReverseLayers().GetId() , a2dCanvasCommandProcessor::OnMenu )
1400 
1401  EVT_MENU( CmdMenu_RouteMethod_StraightEndSegment().GetId() , a2dCanvasCommandProcessor::OnMenu )
1402  EVT_MENU( CmdMenu_RouteMethod_StraightEndSegmentUnlessPins().GetId() , a2dCanvasCommandProcessor::OnMenu )
1403  EVT_MENU( CmdMenu_RouteMethod_StraightSegment().GetId() , a2dCanvasCommandProcessor::OnMenu )
1404  EVT_MENU( CmdMenu_RouteMethod_StraightSegmentUnlessPins().GetId() , a2dCanvasCommandProcessor::OnMenu )
1405  EVT_MENU( CmdMenu_RouteMethod_GridRouting().GetId() , a2dCanvasCommandProcessor::OnMenu )
1406  EVT_MENU( CmdMenu_RouteMethod_ManhattanSegments().GetId() , a2dCanvasCommandProcessor::OnMenu )
1407  EVT_MENU( CmdMenu_RouteMethod_ManhattanEndSegments().GetId() , a2dCanvasCommandProcessor::OnMenu )
1408  EVT_MENU( CmdMenu_RouteMethod_ManhattanEndSegmentsStay().GetId() , a2dCanvasCommandProcessor::OnMenu )
1409  EVT_MENU( CmdMenu_RouteMethod_ManhattanEndSegmentsConvertAndStay().GetId() , a2dCanvasCommandProcessor::OnMenu )
1410 
1411  EVT_MENU( CmdMenu_RotateObject90Left().GetId() , a2dCanvasCommandProcessor::OnMenu )
1412  EVT_MENU( CmdMenu_RotateObject90Right().GetId() , a2dCanvasCommandProcessor::OnMenu )
1413 
1414  EVT_MENU( CmdMenu_SetSnapFeatures().GetId() , a2dCanvasCommandProcessor::OnMenu )
1415  EVT_MENU( CmdMenu_SetSnapFeature().GetId() , a2dCanvasCommandProcessor::OnMenu )
1416  EVT_MENU( CmdMenu_SetStroke().GetId() , a2dCanvasCommandProcessor::OnMenu )
1417  EVT_MENU( CmdMenu_SetFill().GetId() , a2dCanvasCommandProcessor::OnMenu )
1418  EVT_MENU( CmdMenu_SetStrokeColour().GetId() , a2dCanvasCommandProcessor::OnMenu )
1419  EVT_MENU( CmdMenu_SetFillColour().GetId() , a2dCanvasCommandProcessor::OnMenu )
1420  EVT_MENU( CmdMenu_SetContourWidth().GetId() , a2dCanvasCommandProcessor::OnMenu )
1421  EVT_MENU( CmdMenu_SetPathType().GetId() , a2dCanvasCommandProcessor::OnMenu )
1422  EVT_MENU( CmdMenu_SetNormalizeFactor().GetId() , a2dCanvasCommandProcessor::OnMenu )
1423 
1424  EVT_MENU( CmdMenu_ShowDiagram().GetId() , a2dCanvasCommandProcessor::OnMenu )
1425  EVT_MENU( CmdMenu_ShowSymbol().GetId() , a2dCanvasCommandProcessor::OnMenu )
1426  EVT_MENU( CmdMenu_ShowGui().GetId() , a2dCanvasCommandProcessor::OnMenu )
1427 
1428  EVT_MENU( CmdMenu_Refresh().GetId() , a2dCanvasCommandProcessor::OnMenu )
1429  EVT_MENU( CmdMenu_ZoomOut().GetId() , a2dCanvasCommandProcessor::OnMenu )
1430  EVT_MENU( CmdMenu_ZoomOut2().GetId() , a2dCanvasCommandProcessor::OnMenu )
1431  EVT_MENU( CmdMenu_ZoomIn2().GetId() , a2dCanvasCommandProcessor::OnMenu )
1432  EVT_MENU( CmdMenu_ZoomOut2CondSelected().GetId() , a2dCanvasCommandProcessor::OnMenu )
1433  EVT_MENU( CmdMenu_ZoomIn2CondSelected().GetId() , a2dCanvasCommandProcessor::OnMenu )
1434 
1435  EVT_MENU( CmdMenu_EmptyShownObject().GetId() , a2dCanvasCommandProcessor::OnMenu )
1436  //EVT_MENU( CmdMenu_GdsIoSaveTextAsPolygon().GetId() , a2dCanvasCommandProcessor::OnMenu )
1437  //EVT_MENU( CmdMenu_KeyIoSaveTextAsPolygon().GetId() , a2dCanvasCommandProcessor::OnMenu )
1438  //EVT_MENU( CmdMenu_SetGdsIoSaveFromView().GetId() , a2dCanvasCommandProcessor::OnMenu )
1439  //EVT_MENU( CmdMenu_SetKeyIoSaveFromView().GetId() , a2dCanvasCommandProcessor::OnMenu )
1440 
1441  EVT_MENU( CmdMenu_PushInto().GetId() , a2dCanvasCommandProcessor::OnMenu )
1442  EVT_MENU( CmdMenu_PopOut().GetId() , a2dCanvasCommandProcessor::OnMenu )
1443  EVT_MENU( CmdMenu_NewGroup().GetId() , a2dCanvasCommandProcessor::OnMenu )
1444  EVT_MENU( CmdMenu_NewPin().GetId() , a2dCanvasCommandProcessor::OnMenu )
1445  EVT_MENU( CmdMenu_SaveLayersDrawing().GetId() , a2dCanvasCommandProcessor::OnMenu )
1446  EVT_MENU( CmdMenu_SaveLayersDrawingHome().GetId() , a2dCanvasCommandProcessor::OnMenu )
1447  EVT_MENU( CmdMenu_SaveLayersDrawingLastDir().GetId() , a2dCanvasCommandProcessor::OnMenu )
1448  EVT_MENU( CmdMenu_SaveLayersDrawingCurrentDir().GetId() , a2dCanvasCommandProcessor::OnMenu )
1449  EVT_MENU( CmdMenu_LoadLayersDrawing().GetId() , a2dCanvasCommandProcessor::OnMenu )
1450  EVT_MENU( CmdMenu_LoadLayersDrawingHome().GetId() , a2dCanvasCommandProcessor::OnMenu )
1451  EVT_MENU( CmdMenu_LoadLayersDrawingLastDir().GetId() , a2dCanvasCommandProcessor::OnMenu )
1452  EVT_MENU( CmdMenu_LoadLayersDrawingCurrentDir().GetId() , a2dCanvasCommandProcessor::OnMenu )
1453 
1454  EVT_MENU( CmdMenu_SetCursor().GetId() , a2dCanvasCommandProcessor::OnMenu )
1455  EVT_MENU( CmdMenu_SetRelativeStart().GetId() , a2dCanvasCommandProcessor::OnMenu )
1456  EVT_MENU( CmdMenu_AddMeasurement().GetId() , a2dCanvasCommandProcessor::OnMenu )
1457  EVT_MENU( CmdMenu_ClearMeasurements().GetId() , a2dCanvasCommandProcessor::OnMenu )
1458 
1459  EVT_MENU( CmdMenu_Selected_SelectAll().GetId() , a2dCanvasCommandProcessor::OnMenu )
1460  EVT_MENU( CmdMenu_Selected_DeSelectAll().GetId() , a2dCanvasCommandProcessor::OnMenu )
1461  EVT_MENU( CmdMenu_Selected_SelectAll_NoUndo().GetId() , a2dCanvasCommandProcessor::OnMenu )
1462  EVT_MENU( CmdMenu_Selected_DeSelectAll_NoUndo().GetId() , a2dCanvasCommandProcessor::OnMenu )
1463 
1464  EVT_MENU( CmdMenu_Selected_Delete().GetId() , a2dCanvasCommandProcessor::OnMenu )
1465  EVT_MENU( CmdMenu_Selected_Group().GetId() , a2dCanvasCommandProcessor::OnMenu )
1466  EVT_MENU( CmdMenu_Selected_ImageToRectangles().GetId() , a2dCanvasCommandProcessor::OnMenu )
1467  EVT_MENU( CmdMenu_Selected_ToTop().GetId() , a2dCanvasCommandProcessor::OnMenu )
1468  EVT_MENU( CmdMenu_Selected_ToBack().GetId() , a2dCanvasCommandProcessor::OnMenu )
1469  EVT_MENU( CmdMenu_Selected_SetStyle().GetId() , a2dCanvasCommandProcessor::OnMenu )
1470  EVT_MENU( CmdMenu_Selected_SetExtStyle().GetId() , a2dCanvasCommandProcessor::OnMenu )
1471  EVT_MENU( CmdMenu_Selected_SetTextChanges().GetId() , a2dCanvasCommandProcessor::OnMenu )
1472  EVT_MENU( CmdMenu_Selected_SetTextChanges2().GetId() , a2dCanvasCommandProcessor::OnMenu )
1473  EVT_MENU( CmdMenu_Selected_ConvertToPolygonPolylinesWithArcs().GetId() , a2dCanvasCommandProcessor::OnMenu )
1474  EVT_MENU( CmdMenu_Selected_ConvertToPolygonPolylinesWithoutArcs().GetId() , a2dCanvasCommandProcessor::OnMenu )
1475  EVT_MENU( CmdMenu_Selected_ConvertToPolylines().GetId() , a2dCanvasCommandProcessor::OnMenu )
1476  EVT_MENU( CmdMenu_Selected_ConvertLinesArcs().GetId() , a2dCanvasCommandProcessor::OnMenu )
1477  EVT_MENU( CmdMenu_Selected_ConvertToVPaths().GetId() , a2dCanvasCommandProcessor::OnMenu )
1478  EVT_MENU( CmdMenu_Selected_ConvertPolygonToArcs().GetId() , a2dCanvasCommandProcessor::OnMenu )
1479  EVT_MENU( CmdMenu_Selected_ConvertPolylineToArcs().GetId() , a2dCanvasCommandProcessor::OnMenu )
1480  EVT_MENU( CmdMenu_Selected_ConvertPathToPolygon().GetId() , a2dCanvasCommandProcessor::OnMenu )
1481  EVT_MENU( CmdMenu_Selected_ConvertPolygonToSurface().GetId() , a2dCanvasCommandProcessor::OnMenu )
1482  EVT_MENU( CmdMenu_Selected_ConvertSurfaceToPolygon().GetId() , a2dCanvasCommandProcessor::OnMenu )
1483  EVT_MENU( CmdMenu_Selected_UnGroup().GetId() , a2dCanvasCommandProcessor::OnMenu )
1484  EVT_MENU( CmdMenu_Selected_UnGroupDeep().GetId() , a2dCanvasCommandProcessor::OnMenu )
1485  EVT_MENU( CmdMenu_Selected_Merge().GetId() , a2dCanvasCommandProcessor::OnMenu )
1486  EVT_MENU( CmdMenu_Selected_Offset().GetId() , a2dCanvasCommandProcessor::OnMenu )
1487  EVT_MENU( CmdMenu_Selected_CreateRing().GetId() , a2dCanvasCommandProcessor::OnMenu )
1488  EVT_MENU( CmdMenu_Selected_CameleonDiagram().GetId() , a2dCanvasCommandProcessor::OnMenu )
1489  EVT_MENU( CmdMenu_Selected_CameleonSymbol().GetId() , a2dCanvasCommandProcessor::OnMenu )
1490  EVT_MENU( CmdMenu_Selected_FlattenCameleon().GetId() , a2dCanvasCommandProcessor::OnMenu )
1491  EVT_MENU( CmdMenu_Selected_CloneCameleonFromInst().GetId() , a2dCanvasCommandProcessor::OnMenu )
1492  EVT_MENU( CmdMenu_Selected_MoveXY().GetId() , a2dCanvasCommandProcessor::OnMenu )
1493  EVT_MENU( CmdMenu_Selected_MoveLayer().GetId() , a2dCanvasCommandProcessor::OnMenu )
1494  EVT_MENU( CmdMenu_Selected_CopyXY().GetId() , a2dCanvasCommandProcessor::OnMenu )
1495  EVT_MENU( CmdMenu_Selected_CopyLayer().GetId() , a2dCanvasCommandProcessor::OnMenu )
1496  EVT_MENU( CmdMenu_Selected_Transform().GetId() , a2dCanvasCommandProcessor::OnMenu )
1497  EVT_MENU( CmdMenu_Selected_Rotate().GetId() , a2dCanvasCommandProcessor::OnMenu )
1498 
1499  EVT_MENU( CmdMenu_Selected_Align_MinX().GetId() , a2dCanvasCommandProcessor::OnMenu )
1500  EVT_MENU( CmdMenu_Selected_Align_MaxX().GetId() , a2dCanvasCommandProcessor::OnMenu )
1501  EVT_MENU( CmdMenu_Selected_Align_MinY().GetId() , a2dCanvasCommandProcessor::OnMenu )
1502  EVT_MENU( CmdMenu_Selected_Align_MaxY().GetId() , a2dCanvasCommandProcessor::OnMenu )
1503  EVT_MENU( CmdMenu_Selected_Align_MidX().GetId() , a2dCanvasCommandProcessor::OnMenu )
1504  EVT_MENU( CmdMenu_Selected_Align_MidY().GetId() , a2dCanvasCommandProcessor::OnMenu )
1505  EVT_MENU( CmdMenu_Selected_Align_MirrorVert().GetId() , a2dCanvasCommandProcessor::OnMenu )
1506  EVT_MENU( CmdMenu_Selected_Align_MirrorHorz().GetId() , a2dCanvasCommandProcessor::OnMenu )
1507  EVT_MENU( CmdMenu_Selected_Align_MirrorVertBbox().GetId() , a2dCanvasCommandProcessor::OnMenu )
1508  EVT_MENU( CmdMenu_Selected_Align_MirrorHorzBbox().GetId() , a2dCanvasCommandProcessor::OnMenu )
1509  EVT_MENU( CmdMenu_Selected_Align_DistributeVert().GetId() , a2dCanvasCommandProcessor::OnMenu )
1510  EVT_MENU( CmdMenu_Selected_Align_DistributeHorz().GetId() , a2dCanvasCommandProcessor::OnMenu )
1511  EVT_MENU( CmdMenu_Selected_Align_MinX_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1512  EVT_MENU( CmdMenu_Selected_Align_MaxX_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1513  EVT_MENU( CmdMenu_Selected_Align_MinY_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1514  EVT_MENU( CmdMenu_Selected_Align_MaxY_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1515  EVT_MENU( CmdMenu_Selected_Align_MidX_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1516  EVT_MENU( CmdMenu_Selected_Align_MidY_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1517  EVT_MENU( CmdMenu_Selected_Align_MirrorVert_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1518  EVT_MENU( CmdMenu_Selected_Align_MirrorHorz_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1519  EVT_MENU( CmdMenu_Selected_Align_MirrorVertBbox_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1520  EVT_MENU( CmdMenu_Selected_Align_MirrorHorzBbox_Dest().GetId() , a2dCanvasCommandProcessor::OnMenu )
1521 
1522  EVT_MENU( CmdMenu_Selected_RotateObject90Left().GetId() , a2dCanvasCommandProcessor::OnMenu )
1523  EVT_MENU( CmdMenu_Selected_RotateObject90Right().GetId() , a2dCanvasCommandProcessor::OnMenu )
1524 
1525  EVT_MENU( CmdMenu_GroupAB_Offset().GetId() , a2dCanvasCommandProcessor::OnMenu )
1526  EVT_MENU( CmdMenu_GroupAB_Smooth().GetId() , a2dCanvasCommandProcessor::OnMenu )
1527  EVT_MENU( CmdMenu_GroupAB_CreateRing().GetId() , a2dCanvasCommandProcessor::OnMenu )
1528  EVT_MENU( CmdMenu_GroupAB_Delete().GetId() , a2dCanvasCommandProcessor::OnMenu )
1529  EVT_MENU( CmdMenu_GroupAB_Move().GetId() , a2dCanvasCommandProcessor::OnMenu )
1530  EVT_MENU( CmdMenu_GroupAB_Copy().GetId() , a2dCanvasCommandProcessor::OnMenu )
1531  EVT_MENU( CmdMenu_GroupAB_ToArcs().GetId() , a2dCanvasCommandProcessor::OnMenu )
1532  EVT_MENU( CmdMenu_GroupAB_Or().GetId() , a2dCanvasCommandProcessor::OnMenu )
1533  EVT_MENU( CmdMenu_GroupAB_And().GetId() , a2dCanvasCommandProcessor::OnMenu )
1534  EVT_MENU( CmdMenu_GroupAB_Exor().GetId() , a2dCanvasCommandProcessor::OnMenu )
1535  EVT_MENU( CmdMenu_GroupAB_AsubB().GetId() , a2dCanvasCommandProcessor::OnMenu )
1536  EVT_MENU( CmdMenu_GroupAB_BsubA().GetId() , a2dCanvasCommandProcessor::OnMenu )
1537  EVT_MENU( CmdMenu_GroupAB_ConvertPolygonToSurface().GetId() , a2dCanvasCommandProcessor::OnMenu )
1538  EVT_MENU( CmdMenu_GroupAB_ConvertSurfaceToPolygon().GetId() , a2dCanvasCommandProcessor::OnMenu )
1539 
1540 
1541 
1542  EVT_MENU( CmdMenu_PushTool_Zoom_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1543  EVT_MENU( CmdMenu_PushTool_FastZoom_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1544  EVT_MENU( CmdMenu_PushTool_Select_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1545  EVT_MENU( CmdMenu_PushTool_Select2_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1546  EVT_MENU( CmdMenu_PushTool_FastSelect_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1547  EVT_MENU( CmdMenu_PushTool_FastSelect2_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1548  EVT_MENU( CmdMenu_PushTool_RecursiveEdit_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1549  EVT_MENU( CmdMenu_PushTool_MultiEdit_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1550  EVT_MENU( CmdMenu_PushTool_Drag_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1551  EVT_MENU( CmdMenu_PushTool_DragOriginal_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1552  EVT_MENU( CmdMenu_PushTool_Copy_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1553  EVT_MENU( CmdMenu_PushTool_Rotate_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1554  EVT_MENU( CmdMenu_PushTool_Delete_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1555  EVT_MENU( CmdMenu_PushTool_DrawText_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1556  EVT_MENU( CmdMenu_PushTool_Image_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1557  EVT_MENU( CmdMenu_PushTool_DrawRectangleFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1558  EVT_MENU( CmdMenu_PushTool_DrawRectangle_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1559  EVT_MENU( CmdMenu_PushTool_DrawCircle_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1560  EVT_MENU( CmdMenu_PushTool_DrawCircleFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1561  EVT_MENU( CmdMenu_PushTool_DrawLine_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1562  EVT_MENU( CmdMenu_PushTool_DrawLineScaledArrow_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1563  EVT_MENU( CmdMenu_PushTool_DrawEllipse_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1564  EVT_MENU( CmdMenu_PushTool_DrawEllipticArc_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1565  EVT_MENU( CmdMenu_PushTool_DrawEllipticArc_Chord_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1566  EVT_MENU( CmdMenu_PushTool_DrawArc_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1567  EVT_MENU( CmdMenu_PushTool_DrawArc_Chord_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1568  EVT_MENU( CmdMenu_PushTool_DrawPolylineL_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1569  EVT_MENU( CmdMenu_PushTool_DrawPolylineL_Splined_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1570  EVT_MENU( CmdMenu_PushTool_DrawPolylineLFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1571  EVT_MENU( CmdMenu_PushTool_DrawPolygonL_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1572  EVT_MENU( CmdMenu_PushTool_DrawPolygonL_Splined_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1573  EVT_MENU( CmdMenu_PushTool_DrawPolygonLFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1574  EVT_MENU( CmdMenu_PushTool_Property_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1575  EVT_MENU( CmdMenu_PushTool_DragMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1576  EVT_MENU( CmdMenu_PushTool_FastDragMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1577  EVT_MENU( CmdMenu_PushTool_CopyMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1578  EVT_MENU( CmdMenu_PushTool_FastCopyMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1579  EVT_MENU( CmdMenu_PushTool_Measure_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1580  EVT_MENU( CmdMenu_PushTool_DrawWirePolylineL_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1581  EVT_MENU( CmdMenu_PushTool_DrawVPath_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1582 
1583 
1584  EVT_MENU( CmdMenu_PushTool_Zoom().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1585  EVT_MENU( CmdMenu_PushTool_FastZoom().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1586  EVT_MENU( CmdMenu_PushTool_Select().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1587  EVT_MENU( CmdMenu_PushTool_Select2().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1588  EVT_MENU( CmdMenu_PushTool_FastSelect().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1589  EVT_MENU( CmdMenu_PushTool_FastSelect2().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1590  EVT_MENU( CmdMenu_PushTool_RecursiveEdit().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1591  EVT_MENU( CmdMenu_PushTool_MultiEdit().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1592  EVT_MENU( CmdMenu_PushTool_Drag().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1593  EVT_MENU( CmdMenu_PushTool_DragOriginal().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1594  EVT_MENU( CmdMenu_PushTool_Copy().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1595  EVT_MENU( CmdMenu_PushTool_Rotate().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1596  EVT_MENU( CmdMenu_PushTool_Delete().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1597  EVT_MENU( CmdMenu_PushTool_DrawText().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1598  EVT_MENU( CmdMenu_PushTool_Image().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1599  EVT_MENU( CmdMenu_PushTool_DrawRectangleFast().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1600  EVT_MENU( CmdMenu_PushTool_DrawRectangle().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1601  EVT_MENU( CmdMenu_PushTool_DrawCircle().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1602  EVT_MENU( CmdMenu_PushTool_DrawCircleFast().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1603  EVT_MENU( CmdMenu_PushTool_DrawLine().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1604  EVT_MENU( CmdMenu_PushTool_DrawLineScaledArrow().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1605  EVT_MENU( CmdMenu_PushTool_DrawEllipse().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1606  EVT_MENU( CmdMenu_PushTool_DrawEllipticArc().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1607  EVT_MENU( CmdMenu_PushTool_DrawEllipticArc_Chord().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1608  EVT_MENU( CmdMenu_PushTool_DrawArc().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1609  EVT_MENU( CmdMenu_PushTool_DrawArc_Chord().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1610  EVT_MENU( CmdMenu_PushTool_DrawPolylineL().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1611  EVT_MENU( CmdMenu_PushTool_DrawPolylineL_Splined().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1612  EVT_MENU( CmdMenu_PushTool_DrawPolylineLFast().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1613  EVT_MENU( CmdMenu_PushTool_DrawPolygonL().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1614  EVT_MENU( CmdMenu_PushTool_DrawPolygonL_Splined().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1615  EVT_MENU( CmdMenu_PushTool_DrawPolygonLFast().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1616  EVT_MENU( CmdMenu_PushTool_Property().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1617  EVT_MENU( CmdMenu_PushTool_DragMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1618  EVT_MENU( CmdMenu_PushTool_FastDragMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1619  EVT_MENU( CmdMenu_PushTool_CopyMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1620  EVT_MENU( CmdMenu_PushTool_FastCopyMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1621  EVT_MENU( CmdMenu_PushTool_Measure().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1622  EVT_MENU( CmdMenu_PushTool_DrawWirePolylineL().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1623  EVT_MENU( CmdMenu_PushTool_DrawVPath().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1624  EVT_MENU( CmdMenu_PushTool_Port().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1625  EVT_MENU( CmdMenu_PushTool_Cameleon().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1626  EVT_MENU( CmdMenu_PushTool_Cameleon_BuildIn().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1627  EVT_MENU( CmdMenu_PushTool_CameleonInst().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1628  EVT_MENU( CmdMenu_PushTool_CameleonInstDlg().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1629  EVT_MENU( CmdMenu_PushTool_CameleonRefDlg().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1630  EVT_MENU( CmdMenu_PushTool_CameleonRefDlg_Diagram().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1631  EVT_MENU( CmdMenu_PushTool_CameleonRefDlg_Symbol().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1632  EVT_MENU( CmdMenu_PushTool_TagGroups().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1633  EVT_MENU( CmdMenu_PushTool_TagGroups_WireMode().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1634  EVT_MENU( CmdMenu_PushTool_TagGroups_DlgMode().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1635  EVT_MENU( CmdMenu_PushTool_TagGroups_WireMode_DlgMode().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1636  EVT_MENU( CmdMenu_PushTool_SingleClick().GetId() , a2dCanvasCommandProcessor::OnPushToolMenu )
1637 
1638  EVT_MENU( CmdMenu_PopTool().GetId() , a2dCanvasCommandProcessor::OnMenu )
1639  EVT_MENU( CmdMenu_InsertGroupRef().GetId() , a2dCanvasCommandProcessor::OnMenu )
1640 
1641  EVT_MENU( CmdMenu_SetMasterTool_SelectFirst().GetId() , a2dCanvasCommandProcessor::OnMenu )
1642  EVT_MENU( CmdMenu_SetMasterTool_ZoomFirst().GetId() , a2dCanvasCommandProcessor::OnMenu )
1643  EVT_MENU( CmdMenu_SetMasterTool_TagGroups().GetId() , a2dCanvasCommandProcessor::OnMenu )
1644  EVT_MENU( CmdMenu_SetMasterTool_TagGroups_WireMode().GetId() , a2dCanvasCommandProcessor::OnMenu )
1645  EVT_MENU( CmdMenu_SetMasterTool_TagGroups_WireMode_DlgMode().GetId() , a2dCanvasCommandProcessor::OnMenu )
1646  EVT_MENU( CmdMenu_SetMasterTool_TagGroups_DlgMode().GetId() , a2dCanvasCommandProcessor::OnMenu )
1647  EVT_MENU( CmdMenu_SetMasterTool_SingleClick().GetId() , a2dCanvasCommandProcessor::OnMenu )
1648 
1649  EVT_MENU( CmdMenu_LineBegin().GetId() , a2dCanvasCommandProcessor::OnMenu )
1650  EVT_MENU( CmdMenu_LineEnd().GetId() , a2dCanvasCommandProcessor::OnMenu )
1651  EVT_MENU( CmdMenu_LineScale().GetId() , a2dCanvasCommandProcessor::OnMenu )
1652 
1653  EVT_MENU( CmdMenu_SetLayerDlg().GetId() , a2dCanvasCommandProcessor::OnMenu )
1654  EVT_MENU( CmdMenu_SetTargetDlg().GetId() , a2dCanvasCommandProcessor::OnMenu )
1655  EVT_MENU( CmdMenu_SetLayerDlgModeless().GetId() , a2dCanvasCommandProcessor::OnMenu )
1656  EVT_MENU( CmdMenu_SetBackgroundStyle().GetId() , a2dCanvasCommandProcessor::OnMenu )
1657 
1658  EVT_MENU( CmdMenu_PrintDrawing().GetId(), a2dCanvasCommandProcessor::OnMenu )
1659  EVT_MENU( CmdMenu_PreviewDrawing().GetId(), a2dCanvasCommandProcessor::OnMenu )
1660  EVT_MENU( CmdMenu_PrintDrawingPart().GetId(), a2dCanvasCommandProcessor::OnMenu )
1661  EVT_MENU( CmdMenu_PreviewDrawingPart().GetId(), a2dCanvasCommandProcessor::OnMenu )
1662 
1663  EVT_UPDATE_UI( CmdMenu_SetLayerDlgModeless().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1664  EVT_UPDATE_UI( CmdMenu_SetMasterTool_SelectFirst().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1665  EVT_UPDATE_UI( CmdMenu_SetMasterTool_ZoomFirst().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1666  EVT_UPDATE_UI( CmdMenu_SetMasterTool_TagGroups().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1667  EVT_UPDATE_UI( CmdMenu_SetMasterTool_TagGroups_WireMode().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1668  EVT_UPDATE_UI( CmdMenu_SetMasterTool_TagGroups_WireMode_DlgMode().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1669  EVT_UPDATE_UI( CmdMenu_SetMasterTool_TagGroups_DlgMode().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1670  EVT_UPDATE_UI( CmdMenu_SetMasterTool_SingleClick().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1671 
1672  //EVT_UPDATE_UI( CmdMenu_GdsIoSaveTextAsPolygon().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1673  //EVT_UPDATE_UI( CmdMenu_KeyIoSaveTextAsPolygon().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1674  //EVT_UPDATE_UI( CmdMenu_SetGdsIoSaveFromView().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1675  //EVT_UPDATE_UI( CmdMenu_SetKeyIoSaveFromView().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1676  EVT_UPDATE_UI( CmdMenu_SetDrawWireFrame().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1677  EVT_UPDATE_UI( CmdMenu_DrawGridLines().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1678  EVT_UPDATE_UI( CmdMenu_DrawGridAtFront().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1679  EVT_UPDATE_UI( CmdMenu_DrawGrid().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1680  EVT_UPDATE_UI( CmdMenu_SetSnap().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1681  EVT_UPDATE_UI( CmdMenu_SetYAxis().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1682  EVT_UPDATE_UI( CmdMenu_Option_SplinePoly().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1683  EVT_UPDATE_UI( CmdMenu_Option_CursorCrosshair().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1684  EVT_UPDATE_UI( CmdMenu_Option_RescaleAtReSize().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1685  EVT_UPDATE_UI( CmdMenu_Option_ReverseLayers().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1686 
1687  EVT_UPDATE_UI( CmdMenu_RouteMethod_StraightEndSegment().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1688  EVT_UPDATE_UI( CmdMenu_RouteMethod_StraightEndSegmentUnlessPins().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1689  EVT_UPDATE_UI( CmdMenu_RouteMethod_StraightSegment().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1690  EVT_UPDATE_UI( CmdMenu_RouteMethod_StraightSegmentUnlessPins().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1691  EVT_UPDATE_UI( CmdMenu_RouteMethod_GridRouting().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1692  EVT_UPDATE_UI( CmdMenu_RouteMethod_ManhattanSegments().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1693  EVT_UPDATE_UI( CmdMenu_RouteMethod_ManhattanEndSegments().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1694  EVT_UPDATE_UI( CmdMenu_RouteMethod_ManhattanEndSegmentsStay().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1695  EVT_UPDATE_UI( CmdMenu_RouteMethod_ManhattanEndSegmentsConvertAndStay().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1696 
1697  EVT_UPDATE_UI( CmdMenu_RotateObject90Left().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1698  EVT_UPDATE_UI( CmdMenu_RotateObject90Right().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1699 
1700  //EVT_UPDATE_UI( wxID_UNDO, a2dCanvasCommandProcessor::OnUpdateUndo )
1701  //EVT_UPDATE_UI( wxID_REDO, a2dCanvasCommandProcessor::OnUpdateRedo )
1702 
1703  EVT_UPDATE_UI( CmdMenu_ZoomOut().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1704  EVT_UPDATE_UI( CmdMenu_ZoomOut2().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1705  EVT_UPDATE_UI( CmdMenu_ZoomIn2().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1706  EVT_UPDATE_UI( CmdMenu_ZoomOut2CondSelected().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1707  EVT_UPDATE_UI( CmdMenu_ZoomIn2CondSelected().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1708 
1709  EVT_UPDATE_UI( CmdMenu_Selected_SelectAll().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1710  EVT_UPDATE_UI( CmdMenu_Selected_DeSelectAll().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1711  EVT_UPDATE_UI( CmdMenu_Selected_SelectAll_NoUndo().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1712  EVT_UPDATE_UI( CmdMenu_Selected_DeSelectAll_NoUndo().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1713  EVT_UPDATE_UI( CmdMenu_Selected_Delete().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1714  EVT_UPDATE_UI( CmdMenu_Selected_Group().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1715  EVT_UPDATE_UI( CmdMenu_Selected_ImageToRectangles().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1716  EVT_UPDATE_UI( CmdMenu_Selected_ToTop().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1717  EVT_UPDATE_UI( CmdMenu_Selected_ToBack().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1718  EVT_UPDATE_UI( CmdMenu_Selected_SetStyle().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1719  EVT_UPDATE_UI( CmdMenu_Selected_SetExtStyle().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1720  EVT_UPDATE_UI( CmdMenu_Selected_SetTextChanges().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1721  EVT_UPDATE_UI( CmdMenu_Selected_SetTextChanges2().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1722  EVT_UPDATE_UI( CmdMenu_Selected_ConvertToPolygonPolylinesWithArcs().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1723  EVT_UPDATE_UI( CmdMenu_Selected_ConvertToPolygonPolylinesWithoutArcs().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1724  EVT_UPDATE_UI( CmdMenu_Selected_ConvertToPolylines().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1725  EVT_UPDATE_UI( CmdMenu_Selected_ConvertLinesArcs().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1726  EVT_UPDATE_UI( CmdMenu_Selected_ConvertToVPaths().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1727  EVT_UPDATE_UI( CmdMenu_Selected_ConvertPolygonToArcs().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1728  EVT_UPDATE_UI( CmdMenu_Selected_ConvertPolylineToArcs().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1729  EVT_UPDATE_UI( CmdMenu_Selected_ConvertPathToPolygon().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1730  EVT_UPDATE_UI( CmdMenu_Selected_ConvertPolygonToSurface().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1731  EVT_UPDATE_UI( CmdMenu_Selected_ConvertSurfaceToPolygon().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1732  EVT_UPDATE_UI( CmdMenu_Selected_UnGroup().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1733  EVT_UPDATE_UI( CmdMenu_Selected_UnGroupDeep().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1734  EVT_UPDATE_UI( CmdMenu_Selected_Merge().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1735  EVT_UPDATE_UI( CmdMenu_Selected_Offset().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1736  EVT_UPDATE_UI( CmdMenu_Selected_CreateRing().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1737  EVT_UPDATE_UI( CmdMenu_Selected_CameleonDiagram().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1738  EVT_UPDATE_UI( CmdMenu_Selected_CameleonSymbol().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1739  EVT_UPDATE_UI( CmdMenu_Selected_FlattenCameleon().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1740  EVT_UPDATE_UI( CmdMenu_Selected_CloneCameleonFromInst().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1741  EVT_UPDATE_UI( CmdMenu_Selected_MoveXY().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1742  EVT_UPDATE_UI( CmdMenu_Selected_MoveLayer().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1743  EVT_UPDATE_UI( CmdMenu_Selected_CopyXY().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1744  EVT_UPDATE_UI( CmdMenu_Selected_CopyLayer().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1745  EVT_UPDATE_UI( CmdMenu_Selected_Transform().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1746  EVT_UPDATE_UI( CmdMenu_Selected_Rotate().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1747 
1748  EVT_UPDATE_UI( CmdMenu_Selected_Align_MinX().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1749  EVT_UPDATE_UI( CmdMenu_Selected_Align_MaxX().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1750  EVT_UPDATE_UI( CmdMenu_Selected_Align_MinY().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1751  EVT_UPDATE_UI( CmdMenu_Selected_Align_MaxY().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1752  EVT_UPDATE_UI( CmdMenu_Selected_Align_MidX().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1753  EVT_UPDATE_UI( CmdMenu_Selected_Align_MidY().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1754  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorVert().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1755  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorHorz().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1756  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorVertBbox().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1757  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorHorzBbox().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1758  EVT_UPDATE_UI( CmdMenu_Selected_Align_DistributeVert().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1759  EVT_UPDATE_UI( CmdMenu_Selected_Align_DistributeHorz().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1760  EVT_UPDATE_UI( CmdMenu_Selected_Align_MinX_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1761  EVT_UPDATE_UI( CmdMenu_Selected_Align_MaxX_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1762  EVT_UPDATE_UI( CmdMenu_Selected_Align_MinY_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1763  EVT_UPDATE_UI( CmdMenu_Selected_Align_MaxY_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1764  EVT_UPDATE_UI( CmdMenu_Selected_Align_MidX_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1765  EVT_UPDATE_UI( CmdMenu_Selected_Align_MidY_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1766  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorVert_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1767  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorHorz_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1768  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorVertBbox_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1769  EVT_UPDATE_UI( CmdMenu_Selected_Align_MirrorHorzBbox_Dest().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1770  EVT_UPDATE_UI( CmdMenu_Selected_RotateObject90Left().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1771  EVT_UPDATE_UI( CmdMenu_Selected_RotateObject90Right().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1772 
1773  EVT_UPDATE_UI( CmdMenu_PushInto().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1774  EVT_UPDATE_UI( CmdMenu_PopOut().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1775 
1776  EVT_UPDATE_UI( CmdMenu_ShowDiagram().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1777  EVT_UPDATE_UI( CmdMenu_ShowSymbol().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1778  EVT_UPDATE_UI( CmdMenu_ShowGui().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1779 
1780  EVT_MENU( CmdMenu_ShowDlgLayersDrawing().GetId() , a2dCanvasCommandProcessor::OnMenu )
1781  EVT_MENU( CmdMenu_ShowDlgTools().GetId() , a2dCanvasCommandProcessor::OnMenu )
1782  EVT_MENU( CmdMenu_ShowDlgStyle().GetId() , a2dCanvasCommandProcessor::OnMenu )
1783  EVT_MENU( CmdMenu_ShowDlgSnap().GetId() , a2dCanvasCommandProcessor::OnMenu )
1784  EVT_MENU( CmdMenu_ShowDlgGroups().GetId() , a2dCanvasCommandProcessor::OnMenu )
1785  EVT_MENU( CmdMenu_ShowDlgIdentify().GetId() , a2dCanvasCommandProcessor::OnMenu )
1786  EVT_MENU( CmdMenu_ShowDlgCoordEntry().GetId() , a2dCanvasCommandProcessor::OnMenu )
1787  EVT_MENU( CmdMenu_ShowDlgMeasure().GetId() , a2dCanvasCommandProcessor::OnMenu )
1788  EVT_MENU( CmdMenu_ShowDlgStructure().GetId() , a2dCanvasCommandProcessor::OnMenu )
1789  EVT_MENU( CmdMenu_ShowDlgStructureModal().GetId() , a2dCanvasCommandProcessor::OnMenu )
1790  EVT_MENU( CmdMenu_ShowDlgCameleonModal().GetId() , a2dCanvasCommandProcessor::OnMenu )
1791  EVT_MENU( CmdMenu_ShowDlgPathSettings().GetId() , a2dCanvasCommandProcessor::OnMenu )
1792  EVT_MENU( CmdMenu_ShowDlgSettings().GetId() , a2dCanvasCommandProcessor::OnMenu )
1793  EVT_MENU( CmdMenu_ShowDlgTrans().GetId() , a2dCanvasCommandProcessor::OnMenu )
1794  EVT_MENU( CmdMenu_ShowDlgPropEdit().GetId() , a2dCanvasCommandProcessor::OnMenu )
1795 
1796  EVT_MENU( CmdMenu_SetFont().GetId() , a2dCanvasCommandProcessor::OnMenu )
1797 
1798  EVT_UPDATE_UI( CmdMenu_ShowDlgLayersDrawing().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1799  EVT_UPDATE_UI( CmdMenu_ShowDlgTools().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1800  EVT_UPDATE_UI( CmdMenu_ShowDlgStyle().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1801  EVT_UPDATE_UI( CmdMenu_ShowDlgSnap().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1802  EVT_UPDATE_UI( CmdMenu_ShowDlgGroups().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1803  EVT_UPDATE_UI( CmdMenu_ShowDlgIdentify().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1804  EVT_UPDATE_UI( CmdMenu_ShowDlgCoordEntry().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1805  EVT_UPDATE_UI( CmdMenu_ShowDlgMeasure().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1806  EVT_UPDATE_UI( CmdMenu_ShowDlgStructure().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1807  EVT_UPDATE_UI( CmdMenu_ShowDlgStructureModal().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1808  EVT_UPDATE_UI( CmdMenu_ShowDlgPathSettings().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1809  EVT_UPDATE_UI( CmdMenu_ShowDlgSettings().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1810  EVT_UPDATE_UI( CmdMenu_ShowDlgTrans().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1811  EVT_UPDATE_UI( CmdMenu_ShowDlgPropEdit().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1812  EVT_UPDATE_UI( CmdMenu_ShowDlgCameleonModal().GetId() , a2dCanvasCommandProcessor::OnUpdateMenu )
1813 
1814  EVT_UPDATE_UI( CmdMenu_PushTool_Zoom_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1815  EVT_UPDATE_UI( CmdMenu_PushTool_FastZoom_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1816  EVT_UPDATE_UI( CmdMenu_PushTool_Select_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1817  EVT_UPDATE_UI( CmdMenu_PushTool_Select2_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1818  EVT_UPDATE_UI( CmdMenu_PushTool_FastSelect_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1819  EVT_UPDATE_UI( CmdMenu_PushTool_FastSelect2_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1820  EVT_UPDATE_UI( CmdMenu_PushTool_RecursiveEdit_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1821  EVT_UPDATE_UI( CmdMenu_PushTool_MultiEdit_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1822  EVT_UPDATE_UI( CmdMenu_PushTool_Drag_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1823  EVT_UPDATE_UI( CmdMenu_PushTool_DragOriginal_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1824  EVT_UPDATE_UI( CmdMenu_PushTool_Copy_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1825  EVT_UPDATE_UI( CmdMenu_PushTool_Rotate_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1826  EVT_UPDATE_UI( CmdMenu_PushTool_Delete_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1827  EVT_UPDATE_UI( CmdMenu_PushTool_DrawText_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1828  EVT_UPDATE_UI( CmdMenu_PushTool_Image_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1829  EVT_UPDATE_UI( CmdMenu_PushTool_DrawRectangleFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1830  EVT_UPDATE_UI( CmdMenu_PushTool_DrawRectangle_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1831  EVT_UPDATE_UI( CmdMenu_PushTool_DrawCircle_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1832  EVT_UPDATE_UI( CmdMenu_PushTool_DrawCircleFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1833  EVT_UPDATE_UI( CmdMenu_PushTool_DrawLine_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1834  EVT_UPDATE_UI( CmdMenu_PushTool_DrawLineScaledArrow_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1835  EVT_UPDATE_UI( CmdMenu_PushTool_DrawEllipse_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1836  EVT_UPDATE_UI( CmdMenu_PushTool_DrawEllipticArc_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1837  EVT_UPDATE_UI( CmdMenu_PushTool_DrawEllipticArc_Chord_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1838  EVT_UPDATE_UI( CmdMenu_PushTool_DrawArc_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1839  EVT_UPDATE_UI( CmdMenu_PushTool_DrawArc_Chord_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1840  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolylineL_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1841  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolylineL_Splined_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1842  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolylineLFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1843  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolygonL_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1844  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolygonL_Splined_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1845  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolygonLFast_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1846  EVT_UPDATE_UI( CmdMenu_PushTool_Property_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1847  EVT_UPDATE_UI( CmdMenu_PushTool_DragMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1848  EVT_UPDATE_UI( CmdMenu_PushTool_FastDragMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1849  EVT_UPDATE_UI( CmdMenu_PushTool_CopyMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1850  EVT_UPDATE_UI( CmdMenu_PushTool_FastCopyMulti_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1851  EVT_UPDATE_UI( CmdMenu_PushTool_Measure_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1852  EVT_UPDATE_UI( CmdMenu_PushTool_DrawWirePolylineL_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1853  EVT_UPDATE_UI( CmdMenu_PushTool_DrawVPath_OneShot().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1854 
1855  EVT_UPDATE_UI( CmdMenu_PushTool_Zoom().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1856  EVT_UPDATE_UI( CmdMenu_PushTool_FastZoom().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1857  EVT_UPDATE_UI( CmdMenu_PushTool_Select().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1858  EVT_UPDATE_UI( CmdMenu_PushTool_Select2().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1859  EVT_UPDATE_UI( CmdMenu_PushTool_FastSelect().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1860  EVT_UPDATE_UI( CmdMenu_PushTool_FastSelect2().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1861  EVT_UPDATE_UI( CmdMenu_PushTool_RecursiveEdit().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1862  EVT_UPDATE_UI( CmdMenu_PushTool_MultiEdit().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1863  EVT_UPDATE_UI( CmdMenu_PushTool_Drag().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1864  EVT_UPDATE_UI( CmdMenu_PushTool_DragOriginal().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1865  EVT_UPDATE_UI( CmdMenu_PushTool_Copy().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1866  EVT_UPDATE_UI( CmdMenu_PushTool_Rotate().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1867  EVT_UPDATE_UI( CmdMenu_PushTool_Delete().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1868  EVT_UPDATE_UI( CmdMenu_PushTool_DrawText().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1869  EVT_UPDATE_UI( CmdMenu_PushTool_Image().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1870  EVT_UPDATE_UI( CmdMenu_PushTool_DrawRectangleFast().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1871  EVT_UPDATE_UI( CmdMenu_PushTool_DrawRectangle().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1872  EVT_UPDATE_UI( CmdMenu_PushTool_DrawCircle().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1873  EVT_UPDATE_UI( CmdMenu_PushTool_DrawCircleFast().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1874  EVT_UPDATE_UI( CmdMenu_PushTool_DrawLine().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1875  EVT_UPDATE_UI( CmdMenu_PushTool_DrawLineScaledArrow().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1876  EVT_UPDATE_UI( CmdMenu_PushTool_DrawEllipse().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1877  EVT_UPDATE_UI( CmdMenu_PushTool_DrawEllipticArc().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1878  EVT_UPDATE_UI( CmdMenu_PushTool_DrawEllipticArc_Chord().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1879  EVT_UPDATE_UI( CmdMenu_PushTool_DrawArc().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1880  EVT_UPDATE_UI( CmdMenu_PushTool_DrawArc_Chord().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1881  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolylineL().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1882  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolylineL_Splined().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1883  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolylineLFast().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1884  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolygonL().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1885  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolygonL_Splined().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1886  EVT_UPDATE_UI( CmdMenu_PushTool_DrawPolygonLFast().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1887  EVT_UPDATE_UI( CmdMenu_PushTool_Property().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1888  EVT_UPDATE_UI( CmdMenu_PushTool_DragMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1889  EVT_UPDATE_UI( CmdMenu_PushTool_FastDragMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1890  EVT_UPDATE_UI( CmdMenu_PushTool_CopyMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1891  EVT_UPDATE_UI( CmdMenu_PushTool_FastCopyMulti().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1892  EVT_UPDATE_UI( CmdMenu_PushTool_Measure().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1893  EVT_UPDATE_UI( CmdMenu_PushTool_DrawWirePolylineL().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1894  EVT_UPDATE_UI( CmdMenu_PushTool_DrawVPath().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1895  EVT_UPDATE_UI( CmdMenu_PushTool_Port().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1896  EVT_UPDATE_UI( CmdMenu_PushTool_Cameleon().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1897  EVT_UPDATE_UI( CmdMenu_PushTool_Cameleon_BuildIn().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1898  EVT_UPDATE_UI( CmdMenu_PushTool_CameleonInst().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1899  EVT_UPDATE_UI( CmdMenu_PushTool_CameleonInstDlg().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1900  EVT_UPDATE_UI( CmdMenu_PushTool_CameleonRefDlg().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1901  EVT_UPDATE_UI( CmdMenu_PushTool_CameleonRefDlg_Diagram().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1902  EVT_UPDATE_UI( CmdMenu_PushTool_CameleonRefDlg_Symbol().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1903  EVT_UPDATE_UI( CmdMenu_PushTool_TagGroups().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1904  EVT_UPDATE_UI( CmdMenu_PushTool_TagGroups_WireMode().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1905  EVT_UPDATE_UI( CmdMenu_PushTool_TagGroups_DlgMode().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1906  EVT_UPDATE_UI( CmdMenu_PushTool_TagGroups_WireMode_DlgMode().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1907  EVT_UPDATE_UI( CmdMenu_PushTool_SingleClick().GetId() , a2dCanvasCommandProcessor::OnPushToolUpdateMenu )
1908 
1909 
1910  EVT_PROPOBJECT_EDITPROPERTIES_EVENT( a2dCanvasCommandProcessor::OnEditProperties )
1911 
1912 END_EVENT_TABLE()
1913 
1914 ToolDlg* a2dCanvasCommandProcessor::m_tooldlg = NULL;
1915 a2dStyleDialog* a2dCanvasCommandProcessor::m_styledlg = NULL;
1916 LayerPropertiesDialog* a2dCanvasCommandProcessor::m_layersdlg = NULL;
1917 a2dLayerOrderDlg* a2dCanvasCommandProcessor::m_layerOrderDlg = NULL;
1918 IdentifyDialog* a2dCanvasCommandProcessor::m_identifyDlg = NULL;
1919 a2dSnapSettings* a2dCanvasCommandProcessor::m_snapSettings = NULL;
1920 a2dCoordinateEntry* a2dCanvasCommandProcessor::m_coordEntry = NULL;
1921 a2dMeasureDlg* a2dCanvasCommandProcessor::m_measure = NULL;
1922 a2dPathSettings* a2dCanvasCommandProcessor::m_pathsettings = NULL;
1923 a2dSettings* a2dCanvasCommandProcessor::m_settings = NULL;
1924 a2dTransDlg* a2dCanvasCommandProcessor::m_transset = NULL;
1925 a2dPropertyEditorDlg* a2dCanvasCommandProcessor::m_propEdit = NULL;
1926 a2dCanvasObjectsDialog* a2dCanvasCommandProcessor::m_structDlg = NULL;
1927 a2dLayerDlg* a2dCanvasCommandProcessor::m_layerChooseDlg = NULL;
1928 
1929 a2dCanvasCommandProcessor::a2dCanvasCommandProcessor( a2dDrawing* drawing, int maxCommands )
1930  : a2dCommandProcessor( maxCommands )
1931 {
1932  m_drawing = drawing;
1933 #if defined(_DEBUG) && defined (SMART_POINTER_DEBUG)
1934  CurrentSmartPointerOwner = this;
1935 #endif
1936 #if wxUSE_PRINTING_ARCHITECTURE
1937  m_pageSetupData = new wxPageSetupDialogData;
1938 #endif
1939 
1940  m_parent = m_drawing->GetRootObject();
1941 
1942  m_AppendOrPrepend = true;
1943 
1944  m_currentobject = 0;
1945 
1946  m_withUndo = true;
1947  m_zoomfactor = 1.5;
1948 
1949  m_meas_x = m_meas_y = 0;
1950 
1951  m_propEdit = NULL;
1952  m_tooldlg = NULL;
1953  m_layersdlg = NULL;
1954  m_layerOrderDlg = NULL;
1955  m_layerChooseDlg = NULL;
1956  m_styledlg = NULL;
1957  m_snapSettings = NULL;
1958  m_identifyDlg = NULL;
1959  m_coordEntry = NULL;
1960  m_measure = NULL;
1961  m_pathsettings = NULL;
1962  m_settings = NULL;
1963  m_transset = NULL;
1964  m_structDlg = NULL;
1965 }
1966 
1967 a2dCanvasCommandProcessor::~a2dCanvasCommandProcessor()
1968 {
1969  DeleteDlgs();
1970 #if wxUSE_PRINTING_ARCHITECTURE
1971  if( m_pageSetupData )
1972  delete m_pageSetupData;
1973 #endif
1974 }
1975 
1976 bool a2dCanvasCommandProcessor::IsShownToolDlg() { return m_tooldlg != NULL && m_tooldlg->IsShown(); }
1977 
1978 bool a2dCanvasCommandProcessor::IsShowna2dStyleDialog() { return m_styledlg != NULL && m_styledlg->IsShown(); }
1979 
1980 bool a2dCanvasCommandProcessor::IsShownLayerPropertiesDialog() { return m_layersdlg != NULL && m_layersdlg->IsShown(); }
1981 
1982 bool a2dCanvasCommandProcessor::IsShownLayerOrderDialog() { return m_layerOrderDlg != NULL && m_layerOrderDlg->IsShown(); }
1983 
1984 bool a2dCanvasCommandProcessor::IsShownIdentifyDialog() { return m_identifyDlg != NULL && m_identifyDlg->IsShown(); }
1985 
1986 bool a2dCanvasCommandProcessor::IsShowna2dSnapSettings() { return m_snapSettings != NULL && m_snapSettings->IsShown(); }
1987 
1988 bool a2dCanvasCommandProcessor::IsShowna2dCoordinateEntry() { return m_coordEntry != NULL && m_coordEntry->IsShown(); }
1989 
1990 bool a2dCanvasCommandProcessor::IsShowna2dMeasureDlg() { return m_measure != NULL && m_measure->IsShown(); }
1991 
1992 bool a2dCanvasCommandProcessor::IsShowna2dPathSettings() { return m_pathsettings != NULL && m_pathsettings->IsShown(); }
1993 
1994 bool a2dCanvasCommandProcessor::IsShowna2dSettings() { return m_settings != NULL && m_settings->IsShown(); }
1995 
1996 bool a2dCanvasCommandProcessor::IsShowna2dTransDlg() { return m_transset != NULL && m_transset->IsShown(); }
1997 
1998 //bool a2dCanvasCommandProcessor::IsShownPropEditDlg() { return m_propEdit != NULL && m_propEdit->IsShown(); }
1999 
2000 bool a2dCanvasCommandProcessor::IsShownStructureDlg() { return m_structDlg != NULL && m_structDlg->IsShown(); }
2001 
2002 void a2dCanvasCommandProcessor::OnEditProperties( a2dPropertyEditEvent& event )
2003 {
2004  static long lastProcessedEventTimeStamp = -1; // for a2d...Events
2005  if( lastProcessedEventTimeStamp == event.GetTimestamp() )
2006  return;
2007  lastProcessedEventTimeStamp = event.GetTimestamp();
2008 
2009  a2dNamedPropertyList* propertylist;
2010  propertylist = event.GetPropertyList();
2011 
2013  if ( !drawer )
2014  return;
2015 /*
2016  a2dEditProperties dlg( NULL, ( a2dObject* ) event.GetEventObject(), propertylist );
2017  //a2dPropertyEditorDlg dlg( NULL, propertylist );
2018  if ( dlg.ShowModal() == wxID_OK )
2019  event.SetEdited( true );
2020  else
2021  event.SetEdited( false );
2022 */
2023 }
2024 
2025 void a2dCanvasCommandProcessor::DeleteDlgs()
2026 {
2027  if ( m_tooldlg )
2028  m_tooldlg->Destroy();
2029 
2030  if ( m_layersdlg )
2031  m_layersdlg->Destroy();
2032 
2033  if ( m_layerOrderDlg )
2034  m_layerOrderDlg->Destroy();
2035 
2036  if ( m_layerChooseDlg )
2037  m_layerChooseDlg->Destroy();
2038 
2039  if ( m_identifyDlg )
2040  m_identifyDlg->Destroy();
2041 
2042  if ( m_styledlg )
2043  m_styledlg->Destroy();
2044 
2045  if ( m_snapSettings )
2046  m_snapSettings->Destroy();
2047 
2048  if ( m_coordEntry )
2049  m_coordEntry->Destroy();
2050 
2051  if ( m_measure )
2052  m_measure->Destroy();
2053 
2054  if ( m_transset )
2055  m_transset->Destroy();
2056 
2057 // if ( m_propEdit )
2058 // m_propEdit->Destroy();
2059 
2060  if ( m_settings )
2061  m_settings->Destroy();
2062 
2063  if ( m_pathsettings )
2064  m_pathsettings->Destroy();
2065 
2066  if ( m_structDlg )
2067  m_structDlg->Destroy();
2068 
2069  m_tooldlg = NULL;
2070  m_layersdlg = NULL;
2071  m_layerOrderDlg = NULL;
2072  m_layerChooseDlg = NULL;
2073  m_styledlg = NULL;
2074  m_snapSettings = NULL;
2075  m_identifyDlg = NULL;
2076  m_coordEntry = NULL;
2077  m_measure = NULL;
2078  m_pathsettings = NULL;
2079  m_settings = NULL;
2080  m_transset = NULL;
2081  m_propEdit = NULL;
2082  m_structDlg = NULL;
2083 }
2084 
2085 bool a2dCanvasCommandProcessor::InsertGroupRef()
2086 {
2087  if ( m_drawing )
2088  {
2089  double x = 0;
2090  double y = 0;
2091 
2092  a2dCanvasObjectsDialog groups( GetActiveDrawingPart()->GetDisplayWindow(), m_drawing, true, false, ( wxSTAY_ON_TOP | wxRESIZE_BORDER | wxCAPTION ) );
2093  if ( groups.ShowModal() == wxID_OK )
2094  {
2095  a2dCanvasObjectReference* groupref = new a2dCanvasObjectReference( x, y, groups.GetCanvasObject() );
2096  GetActiveDrawingPart()->GetShowObject()->Prepend( groupref );
2097  }
2098  }
2099  return true;
2100 }
2101 
2102 bool a2dCanvasCommandProcessor::StaticProcessEvent( wxUpdateUIEvent& event )
2103 {
2104  DefaultOnUpdateMenu( event );
2105  return true;
2106 }
2107 
2108 void a2dCanvasCommandProcessor::DefaultOnUpdateMenu( wxUpdateUIEvent& event )
2109 {
2110  /* debug some id
2111  if ( event.GetId() == CmdMenu_PushTool_Port().GetId() )
2112  {
2113  event.Enable( false );
2114  return;
2115  }
2116  */
2117 
2118  if ( event.GetId() == CmdMenu_PushTool_Zoom_OneShot().GetId() ||
2119  event.GetId() == CmdMenu_PushTool_Select_OneShot().GetId() ||
2120  event.GetId() == CmdMenu_PushTool_Select2_OneShot().GetId() ||
2121  event.GetId() == CmdMenu_PushTool_FastSelect_OneShot().GetId() ||
2122  event.GetId() == CmdMenu_PushTool_FastSelect2_OneShot().GetId() ||
2123  event.GetId() == CmdMenu_PushTool_RecursiveEdit_OneShot().GetId() ||
2124  event.GetId() == CmdMenu_PushTool_MultiEdit_OneShot().GetId() ||
2125  event.GetId() == CmdMenu_PushTool_DragOriginal_OneShot().GetId() ||
2126  event.GetId() == CmdMenu_PushTool_Drag_OneShot().GetId() ||
2127  event.GetId() == CmdMenu_PushTool_Copy_OneShot().GetId() ||
2128  event.GetId() == CmdMenu_PushTool_Rotate_OneShot().GetId() ||
2129  event.GetId() == CmdMenu_PushTool_Delete_OneShot().GetId() ||
2130  event.GetId() == CmdMenu_PushTool_DrawText_OneShot().GetId() ||
2131  event.GetId() == CmdMenu_PushTool_Image_OneShot().GetId() ||
2132  event.GetId() == CmdMenu_PushTool_DrawCircleFast_OneShot().GetId() ||
2133  event.GetId() == CmdMenu_PushTool_DrawLine_OneShot().GetId() ||
2134  event.GetId() == CmdMenu_PushTool_DrawLineScaledArrow_OneShot().GetId() ||
2135  event.GetId() == CmdMenu_PushTool_DrawEllipse_OneShot().GetId() ||
2136  event.GetId() == CmdMenu_PushTool_DrawEllipticArc_OneShot().GetId() ||
2137  event.GetId() == CmdMenu_PushTool_DrawEllipticArc_Chord_OneShot().GetId() ||
2138  event.GetId() == CmdMenu_PushTool_DrawArc_OneShot().GetId() ||
2139  event.GetId() == CmdMenu_PushTool_DrawArc_Chord_OneShot().GetId() ||
2140  event.GetId() == CmdMenu_PushTool_DrawPolylineL_OneShot().GetId() ||
2141  event.GetId() == CmdMenu_PushTool_DrawPolygonL_OneShot().GetId() ||
2142  event.GetId() == CmdMenu_PushTool_DrawPolylineL_Splined_OneShot().GetId() ||
2143  event.GetId() == CmdMenu_PushTool_DrawPolygonL_Splined_OneShot().GetId() ||
2144  event.GetId() == CmdMenu_PushTool_DrawPolygonLFast_OneShot().GetId() ||
2145  event.GetId() == CmdMenu_PushTool_DrawPolylineLFast_OneShot().GetId() ||
2146  event.GetId() == CmdMenu_PushTool_Property_OneShot().GetId() ||
2147  event.GetId() == CmdMenu_PushTool_FastDragMulti_OneShot().GetId() ||
2148  event.GetId() == CmdMenu_PushTool_FastCopyMulti().GetId() ||
2149  event.GetId() == CmdMenu_PushTool_Measure_OneShot().GetId() ||
2150  event.GetId() == CmdMenu_PushTool_DrawWirePolylineL_OneShot().GetId() ||
2151  event.GetId() == CmdMenu_PushTool_DragMulti_OneShot().GetId() ||
2152  event.GetId() == CmdMenu_PushTool_CopyMulti_OneShot().GetId() ||
2153  event.GetId() == CmdMenu_PushTool_DrawRectangle_OneShot().GetId() ||
2154  event.GetId() == CmdMenu_PushTool_DrawCircle_OneShot().GetId() ||
2155  event.GetId() == CmdMenu_PushTool_DrawVPath_OneShot().GetId() ||
2156  event.GetId() == CmdMenu_PushTool_Zoom().GetId() ||
2157  event.GetId() == CmdMenu_PushTool_Select().GetId() ||
2158  event.GetId() == CmdMenu_PushTool_Select2().GetId() ||
2159  event.GetId() == CmdMenu_PushTool_FastSelect().GetId() ||
2160  event.GetId() == CmdMenu_PushTool_FastSelect2().GetId() ||
2161  event.GetId() == CmdMenu_PushTool_RecursiveEdit().GetId() ||
2162  event.GetId() == CmdMenu_PushTool_MultiEdit().GetId() ||
2163  event.GetId() == CmdMenu_PushTool_DragOriginal().GetId() ||
2164  event.GetId() == CmdMenu_PushTool_Drag().GetId() ||
2165  event.GetId() == CmdMenu_PushTool_Copy().GetId() ||
2166  event.GetId() == CmdMenu_PushTool_Rotate().GetId() ||
2167  event.GetId() == CmdMenu_PushTool_Delete().GetId() ||
2168  event.GetId() == CmdMenu_PushTool_DrawText().GetId() ||
2169  event.GetId() == CmdMenu_PushTool_Image().GetId() ||
2170  event.GetId() == CmdMenu_PushTool_DrawCircleFast().GetId() ||
2171  event.GetId() == CmdMenu_PushTool_DrawLine().GetId() ||
2172  event.GetId() == CmdMenu_PushTool_DrawLineScaledArrow().GetId() ||
2173  event.GetId() == CmdMenu_PushTool_DrawEllipse().GetId() ||
2174  event.GetId() == CmdMenu_PushTool_DrawEllipticArc().GetId() ||
2175  event.GetId() == CmdMenu_PushTool_DrawEllipticArc_Chord().GetId() ||
2176  event.GetId() == CmdMenu_PushTool_DrawArc().GetId() ||
2177  event.GetId() == CmdMenu_PushTool_DrawArc_Chord().GetId() ||
2178  event.GetId() == CmdMenu_PushTool_DrawPolylineL().GetId() ||
2179  event.GetId() == CmdMenu_PushTool_DrawPolygonL().GetId() ||
2180  event.GetId() == CmdMenu_PushTool_DrawPolylineL_Splined().GetId() ||
2181  event.GetId() == CmdMenu_PushTool_DrawPolygonL_Splined().GetId() ||
2182  event.GetId() == CmdMenu_PushTool_DrawPolygonLFast().GetId() ||
2183  event.GetId() == CmdMenu_PushTool_DrawPolylineLFast().GetId() ||
2184  event.GetId() == CmdMenu_PushTool_Property().GetId() ||
2185  event.GetId() == CmdMenu_PushTool_FastDragMulti().GetId() ||
2186  event.GetId() == CmdMenu_PushTool_FastCopyMulti().GetId() ||
2187  event.GetId() == CmdMenu_PushTool_Measure().GetId() ||
2188  event.GetId() == CmdMenu_PushTool_DrawWirePolylineL().GetId() ||
2189  event.GetId() == CmdMenu_PushTool_DragMulti().GetId() ||
2190  event.GetId() == CmdMenu_PushTool_CopyMulti().GetId() ||
2191  event.GetId() == CmdMenu_PushTool_DrawRectangle().GetId() ||
2192  event.GetId() == CmdMenu_PushTool_DrawCircle().GetId() ||
2193  event.GetId() == CmdMenu_PushTool_DrawVPath().GetId() ||
2194  event.GetId() == CmdMenu_PushTool_Port().GetId() ||
2195  event.GetId() == CmdMenu_PushTool_Cameleon().GetId() ||
2196  event.GetId() == CmdMenu_PushTool_Cameleon_BuildIn().GetId() ||
2197  event.GetId() == CmdMenu_PushTool_CameleonInst().GetId() ||
2198  event.GetId() == CmdMenu_PushTool_CameleonInstDlg().GetId() ||
2199  event.GetId() == CmdMenu_PushTool_CameleonRefDlg_Diagram().GetId() ||
2200  event.GetId() == CmdMenu_PushTool_CameleonRefDlg_Symbol().GetId() ||
2201  event.GetId() == CmdMenu_PushTool_CameleonRefDlg().GetId() ||
2202  event.GetId() == CmdMenu_PushTool_TagGroups().GetId() ||
2203  event.GetId() == CmdMenu_PushTool_TagGroups_WireMode().GetId() ||
2204  event.GetId() == CmdMenu_PushTool_TagGroups_DlgMode().GetId() ||
2205  event.GetId() == CmdMenu_PushTool_TagGroups_WireMode_DlgMode().GetId() ||
2206  event.GetId() == CmdMenu_PushTool_SingleClick().GetId() ||
2207 
2208  event.GetId() == CmdMenu_ZoomIn2().GetId() ||
2209  event.GetId() == CmdMenu_ZoomOut2().GetId() ||
2210  event.GetId() == CmdMenu_ZoomIn2CondSelected().GetId() ||
2211  event.GetId() == CmdMenu_ZoomOut2CondSelected().GetId() ||
2212 
2213  event.GetId() == CmdMenu_ZoomOut().GetId() ||
2214  event.GetId() == CmdMenu_Selected_RotateObject90Right().GetId() ||
2215  event.GetId() == CmdMenu_Selected_RotateObject90Left().GetId() ||
2216  event.GetId() == CmdMenu_Selected_SelectAll().GetId() ||
2217  event.GetId() == CmdMenu_Selected_DeSelectAll().GetId() ||
2218  event.GetId() == CmdMenu_Selected_SelectAll_NoUndo().GetId() ||
2219  event.GetId() == CmdMenu_Selected_DeSelectAll_NoUndo().GetId() ||
2220  event.GetId() == CmdMenu_Selected_Delete().GetId() ||
2221  event.GetId() == CmdMenu_Selected_Group().GetId() ||
2222  event.GetId() == CmdMenu_Selected_ImageToRectangles().GetId() ||
2223  event.GetId() == CmdMenu_Selected_ToTop().GetId() ||
2224  event.GetId() == CmdMenu_Selected_ToBack().GetId() ||
2225  event.GetId() == CmdMenu_Selected_SetStyle().GetId() ||
2226  event.GetId() == CmdMenu_Selected_SetExtStyle().GetId() ||
2227  event.GetId() == CmdMenu_Selected_SetTextChanges().GetId() ||
2228  event.GetId() == CmdMenu_Selected_ConvertToPolygonPolylinesWithArcs().GetId() ||
2229  event.GetId() == CmdMenu_Selected_ConvertToPolygonPolylinesWithoutArcs().GetId() ||
2230  event.GetId() == CmdMenu_Selected_ConvertToPolylines().GetId() ||
2231  event.GetId() == CmdMenu_Selected_ConvertLinesArcs().GetId() ||
2232  event.GetId() == CmdMenu_Selected_ConvertToVPaths().GetId() ||
2233  event.GetId() == CmdMenu_Selected_ConvertPolygonToArcs().GetId() ||
2234  event.GetId() == CmdMenu_Selected_ConvertPolylineToArcs().GetId() ||
2235  event.GetId() == CmdMenu_Selected_ConvertPathToPolygon().GetId() ||
2236  event.GetId() == CmdMenu_Selected_ConvertPolygonToSurface().GetId() ||
2237  event.GetId() == CmdMenu_Selected_ConvertSurfaceToPolygon().GetId() ||
2238  event.GetId() == CmdMenu_Selected_UnGroup().GetId() ||
2239  event.GetId() == CmdMenu_Selected_UnGroupDeep().GetId() ||
2240  event.GetId() == CmdMenu_Selected_Merge().GetId() ||
2241  event.GetId() == CmdMenu_Selected_Offset().GetId() ||
2242  event.GetId() == CmdMenu_Selected_CreateRing().GetId() ||
2243  event.GetId() == CmdMenu_Selected_CameleonDiagram().GetId() ||
2244  event.GetId() == CmdMenu_Selected_CameleonSymbol().GetId() ||
2245  event.GetId() == CmdMenu_Selected_FlattenCameleon().GetId() ||
2246  event.GetId() == CmdMenu_Selected_CloneCameleonFromInst().GetId() ||
2247  event.GetId() == CmdMenu_Selected_MoveXY().GetId() ||
2248  event.GetId() == CmdMenu_Selected_MoveLayer().GetId() ||
2249  event.GetId() == CmdMenu_Selected_CopyXY().GetId() ||
2250  event.GetId() == CmdMenu_Selected_CopyLayer().GetId() ||
2251  event.GetId() == CmdMenu_Selected_Transform().GetId() ||
2252  event.GetId() == CmdMenu_Selected_Rotate().GetId() ||
2253  event.GetId() == CmdMenu_Selected_Align_MinX().GetId() ||
2254  event.GetId() == CmdMenu_Selected_Align_MaxX().GetId() ||
2255  event.GetId() == CmdMenu_Selected_Align_MinY().GetId() ||
2256  event.GetId() == CmdMenu_Selected_Align_MaxY().GetId() ||
2257  event.GetId() == CmdMenu_Selected_Align_MidX().GetId() ||
2258  event.GetId() == CmdMenu_Selected_Align_MidY().GetId() ||
2259  event.GetId() == CmdMenu_Selected_Align_MirrorVert().GetId() ||
2260  event.GetId() == CmdMenu_Selected_Align_MirrorHorz().GetId() ||
2261  event.GetId() == CmdMenu_Selected_Align_MirrorVertBbox().GetId() ||
2262  event.GetId() == CmdMenu_Selected_Align_MirrorHorzBbox().GetId() ||
2263  event.GetId() == CmdMenu_Selected_Align_DistributeVert().GetId() ||
2264  event.GetId() == CmdMenu_Selected_Align_DistributeHorz().GetId() ||
2265  event.GetId() == CmdMenu_Selected_Align_MinX_Dest().GetId() ||
2266  event.GetId() == CmdMenu_Selected_Align_MaxX_Dest().GetId() ||
2267  event.GetId() == CmdMenu_Selected_Align_MinY_Dest().GetId() ||
2268  event.GetId() == CmdMenu_Selected_Align_MaxY_Dest().GetId() ||
2269  event.GetId() == CmdMenu_Selected_Align_MidX_Dest().GetId() ||
2270  event.GetId() == CmdMenu_Selected_Align_MidY_Dest().GetId() ||
2271  event.GetId() == CmdMenu_Selected_Align_MirrorVert_Dest().GetId() ||
2272  event.GetId() == CmdMenu_Selected_Align_MirrorHorz_Dest().GetId() ||
2273  event.GetId() == CmdMenu_Selected_Align_MirrorVertBbox_Dest().GetId() ||
2274  event.GetId() == CmdMenu_Selected_Align_MirrorHorzBbox_Dest().GetId() ||
2275  event.GetId() == CmdMenu_Selected_SetExtStyle().GetId() ||
2276  event.GetId() == CmdMenu_Selected_SetTextChanges().GetId() ||
2277  event.GetId() == CmdMenu_PushInto().GetId() ||
2278  event.GetId() == CmdMenu_PopOut().GetId() ||
2279 
2280  event.GetId() == CmdMenu_ShowDiagram().GetId() ||
2281  event.GetId() == CmdMenu_ShowSymbol().GetId() ||
2282  event.GetId() == CmdMenu_ShowGui().GetId() ||
2283  event.GetId() == CmdMenu_ShowDlgCameleonModal().GetId()
2284 
2285  )
2286  {
2287  event.Enable( false );
2288  }
2289 }
2290 
2291 void a2dCanvasCommandProcessor::OnUpdateMenu( wxUpdateUIEvent& event )
2292 {
2293  if ( event.GetId() == CmdMenu_PushInto().GetId() )
2294  {
2296  if ( !drawer )
2297  return;
2298  a2dCanvasObject* selected = drawer->GetShowObject()->Find( "", "", a2dCanvasOFlags::SELECTED );
2299  event.Enable( selected != NULL );
2300  }
2301  else if ( event.GetId() == CmdMenu_PopOut().GetId() )
2302  {
2304  if ( !drawer )
2305  return;
2306  event.Enable( drawer->HasPopOut() );
2307  }
2308  else if ( event.GetId() == CmdMenu_InsertGroupRef().GetId() )
2309  {
2310  }
2311  else if ( event.GetId() == CmdMenu_ShowDlgLayersDrawing().GetId() )
2312  {
2313  event.Check( IsShownLayerPropertiesDialog() );
2314  }
2315  else if ( event.GetId() == CmdMenu_ShowDlgLayerOrderDrawing().GetId() ||
2316  event.GetId() == CmdMenu_ShowDlgLayerOrderGlobal().GetId() )
2317  {
2318  event.Check( IsShownLayerOrderDialog() );
2319  }
2320  else if ( event.GetId() == CmdMenu_ShowDlgTools().GetId() )
2321  {
2322  event.Check( IsShownToolDlg() );
2323  }
2324  else if ( event.GetId() == CmdMenu_ShowDlgStyle().GetId() )
2325  {
2326  event.Check( IsShowna2dStyleDialog() );
2327  }
2328  else if ( event.GetId() == CmdMenu_ShowDlgSnap().GetId() )
2329  {
2330  event.Check( IsShowna2dSnapSettings() );
2331  }
2332  else if ( event.GetId() == CmdMenu_ShowDlgGroups().GetId() )
2333  {
2334  }
2335  else if ( event.GetId() == CmdMenu_ShowDlgIdentify().GetId() )
2336  {
2337  event.Check( IsShownIdentifyDialog() );
2338  }
2339  else if ( event.GetId() == CmdMenu_ShowDlgCoordEntry().GetId() )
2340  {
2341  event.Check( IsShowna2dCoordinateEntry() );
2342  }
2343  else if ( event.GetId() == CmdMenu_ShowDlgMeasure().GetId() )
2344  {
2345  event.Check( IsShowna2dMeasureDlg() );
2346  }
2347  else if ( event.GetId() == CmdMenu_ShowDlgStructureModal().GetId() )
2348  {
2349  }
2350  else if ( event.GetId() == CmdMenu_ShowDlgStructure().GetId() )
2351  {
2352  event.Check( IsShownStructureDlg() );
2353  }
2354  else if ( event.GetId() == CmdMenu_ShowDlgPathSettings().GetId() )
2355  {
2356  event.Check( IsShowna2dPathSettings() );
2357  }
2358  else if ( event.GetId() == CmdMenu_ShowDlgSettings().GetId() )
2359  {
2360  event.Check( IsShowna2dSettings() );
2361  }
2362  else if ( event.GetId() == CmdMenu_ShowDlgTrans().GetId() )
2363  {
2364  event.Check( IsShowna2dTransDlg() );
2365  }
2366  else if ( event.GetId() == CmdMenu_ShowDlgCameleonModal().GetId() )
2367  {
2368  event.Enable( false );
2370  {
2372  if ( !drawingPart )
2373  return;
2374 
2375  event.Enable( true );
2376  }
2377  }
2378 
2379 
2380 /*
2381  else if ( event.GetId() == CmdMenu_ShowDlgPropEdit().GetId() )
2382  {
2383  event.Check( IsShownPropEditDlg() );
2384  }
2385 */
2386  else if ( event.GetId() == CmdMenu_SetLayerDlgModeless().GetId() )
2387  {
2388  event.Check( m_layerChooseDlg != NULL && !m_layerChooseDlg->IsModal() && m_layerChooseDlg->IsShown() );
2389  }
2390  else if ( event.GetId() == CmdMenu_SetMasterTool_SelectFirst().GetId() )
2391  {
2393  if ( !drawer )
2394  return;
2395  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
2396  if ( !contr )
2397  return;
2398 
2399  event.Check( wxDynamicCast( contr->GetFirstTool(), a2dMasterDrawSelectFirst ) != NULL );
2400  }
2401  else if ( event.GetId() == CmdMenu_SetMasterTool_ZoomFirst().GetId() )
2402  {
2404  if ( !drawer )
2405  return;
2406  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
2407  if ( !contr )
2408  return;
2409 
2410  event.Check( wxDynamicCast( contr->GetFirstTool(), a2dMasterDrawZoomFirst ) != NULL );
2411  }
2412  else if ( event.GetId() == CmdMenu_SetMasterTool_TagGroups().GetId() )
2413  {
2415  if ( !drawer )
2416  return;
2417  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
2418  if ( !contr )
2419  return;
2420 
2421  event.Check( wxDynamicCast( contr->GetFirstTool(), a2dMasterTagGroups ) != NULL );
2422  }
2423  else if ( event.GetId() == CmdMenu_SetMasterTool_TagGroups_WireMode().GetId() )
2424  {
2426  if ( !drawer )
2427  return;
2428  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
2429  if ( !contr )
2430  return;
2431 
2433  event.Check( tool && tool->GetWireMode() );
2434  }
2435  else if ( event.GetId() == CmdMenu_SetMasterTool_TagGroups_DlgMode().GetId() )
2436  {
2438  if ( !drawer )
2439  return;
2440  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
2441  if ( !contr )
2442  return;
2443 
2445  event.Check( tool && tool->GetWireMode() );
2446  }
2447  else if ( event.GetId() == CmdMenu_SetDrawWireFrame().GetId() )
2448  {
2450  if ( !drawer )
2451  return;
2453  event.Check( true );
2454  else
2455  event.Check( false );
2456  }
2457  else if ( event.GetId() == CmdMenu_DrawGridLines().GetId() )
2458  {
2460  if ( !drawer )
2461  return;
2462  event.Check( drawer->GetGridLines() );
2463  }
2464  else if ( event.GetId() == CmdMenu_DrawGridAtFront().GetId() )
2465  {
2467  if ( !drawer )
2468  return;
2469  event.Check( drawer->GetGridAtFront() );
2470  }
2471  else if ( event.GetId() == CmdMenu_DrawGrid().GetId() )
2472  {
2474  if ( !drawer )
2475  return;
2476  event.Check( drawer->GetGrid() );
2477  }
2478  else if ( event.GetId() == CmdMenu_SetSnap().GetId() )
2479  {
2481  if ( !drawer )
2482  return;
2483  event.Check( drawer->GetCanvasToolContr()->GetSnap() );
2484  }
2485  else if ( event.GetId() == CmdMenu_SetYAxis().GetId() )
2486  {
2488  if ( !drawer )
2489  return;
2490  event.Check( drawer->GetDrawer2D()->GetYaxis() );
2491  }
2492  else if ( event.GetId() == CmdMenu_Option_SplinePoly().GetId() )
2493  {
2494  event.Check( m_drawing->GetHabitat()->GetSpline() );
2495  }
2496  else if ( event.GetId() == CmdMenu_Option_CursorCrosshair().GetId() )
2497  {
2499  if ( !drawer )
2500  return;
2501  event.Check( drawer->GetCrossHair() );
2502  }
2503  else if ( event.GetId() == CmdMenu_Option_RescaleAtReSize().GetId() )
2504  {
2506  if ( !drawer )
2507  return;
2508  event.Check( drawer->GetCanvas()->GetScaleOnResize() );
2509  }
2510  else if ( event.GetId() == CmdMenu_Option_ReverseLayers().GetId() )
2511  {
2513  if ( !drawer )
2514  return;
2515  event.Check( drawer->GetReverseOrder() );
2516  }
2517  else if ( event.GetId() == CmdMenu_RouteMethod_StraightEndSegment().GetId() )
2518  {
2519  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::StraightEndSegment );
2520  }
2521  else if ( event.GetId() == CmdMenu_RouteMethod_StraightEndSegmentUnlessPins().GetId() )
2522  {
2523  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::StraightEndSegmentUnlessPins );
2524  }
2525  else if ( event.GetId() == CmdMenu_RouteMethod_StraightSegment().GetId() )
2526  {
2527  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::StraightSegment );
2528  }
2529  else if ( event.GetId() == CmdMenu_RouteMethod_StraightSegmentUnlessPins().GetId() )
2530  {
2531  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::StraightSegmentUnlessPins );
2532  }
2533  else if ( event.GetId() == CmdMenu_RouteMethod_GridRouting().GetId() )
2534  {
2535  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::GridRouting );
2536  }
2537  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanSegments().GetId() )
2538  {
2539  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::ManhattanSegments );
2540  }
2541  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanEndSegments().GetId() )
2542  {
2543  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::ManhattanEndSegments );
2544  }
2545  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanEndSegmentsStay().GetId() )
2546  {
2547  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::ManhattanEndSegmentsStay );
2548  }
2549  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanEndSegmentsConvertAndStay().GetId() )
2550  {
2551  event.Check( m_drawing->GetHabitat()->GetConnectionGenerator()->GetRouteMethod() == a2dConnectionGenerator::ManhattanEndSegmentsConvertAndStay );
2552  }
2553  else if ( event.GetId() == CmdMenu_RotateObject90Right().GetId() ||
2554  event.GetId() == CmdMenu_RotateObject90Left().GetId()
2555  )
2556  {
2558  if ( !drawer )
2559  return;
2560  a2dCanvasObject* selected = drawer->GetShowObject()->Find( "", "", a2dCanvasOFlags::SELECTED );
2561  event.Enable( true ); //!todo when exactly depend on tools.
2562  }
2563  else if (
2564  event.GetId() == CmdMenu_ZoomIn2().GetId() ||
2565  event.GetId() == CmdMenu_ZoomOut2().GetId() ||
2566  event.GetId() == CmdMenu_ZoomIn2CondSelected().GetId() ||
2567  event.GetId() == CmdMenu_ZoomOut2CondSelected().GetId() ||
2568 
2569  event.GetId() == CmdMenu_ZoomOut().GetId() ||
2570 
2571  event.GetId() == CmdMenu_Selected_SelectAll().GetId() ||
2572  event.GetId() == CmdMenu_Selected_SelectAll_NoUndo().GetId()
2573  )
2574  {
2575  event.Enable( false );
2577  if ( !drawer )
2578  return;
2579  event.Enable( true );
2580  }
2581  else if (
2582  event.GetId() == CmdMenu_Selected_RotateObject90Right().GetId() ||
2583  event.GetId() == CmdMenu_Selected_RotateObject90Left().GetId() ||
2584  event.GetId() == CmdMenu_Selected_DeSelectAll().GetId() ||
2585  event.GetId() == CmdMenu_Selected_Delete().GetId() ||
2586  event.GetId() == CmdMenu_Selected_DeSelectAll_NoUndo().GetId() ||
2587  event.GetId() == CmdMenu_Selected_Group().GetId() ||
2588  event.GetId() == CmdMenu_Selected_ImageToRectangles().GetId() ||
2589  event.GetId() == CmdMenu_Selected_ToTop().GetId() ||
2590  event.GetId() == CmdMenu_Selected_ToBack().GetId() ||
2591  event.GetId() == CmdMenu_Selected_SetStyle().GetId() ||
2592  event.GetId() == CmdMenu_Selected_SetExtStyle().GetId() ||
2593  event.GetId() == CmdMenu_Selected_SetTextChanges().GetId() ||
2594  event.GetId() == CmdMenu_Selected_ConvertToPolygonPolylinesWithArcs().GetId() ||
2595  event.GetId() == CmdMenu_Selected_ConvertToPolygonPolylinesWithoutArcs().GetId() ||
2596  event.GetId() == CmdMenu_Selected_ConvertToPolylines().GetId() ||
2597  event.GetId() == CmdMenu_Selected_ConvertLinesArcs().GetId() ||
2598  event.GetId() == CmdMenu_Selected_ConvertToVPaths().GetId() ||
2599  event.GetId() == CmdMenu_Selected_ConvertPolygonToArcs().GetId() ||
2600  event.GetId() == CmdMenu_Selected_ConvertPolylineToArcs().GetId() ||
2601  event.GetId() == CmdMenu_Selected_ConvertPathToPolygon().GetId() ||
2602  event.GetId() == CmdMenu_Selected_ConvertPolygonToSurface().GetId() ||
2603  event.GetId() == CmdMenu_Selected_ConvertSurfaceToPolygon().GetId() ||
2604  event.GetId() == CmdMenu_Selected_UnGroup().GetId() ||
2605  event.GetId() == CmdMenu_Selected_UnGroupDeep().GetId() ||
2606  event.GetId() == CmdMenu_Selected_Merge().GetId() ||
2607  event.GetId() == CmdMenu_Selected_Offset().GetId() ||
2608  event.GetId() == CmdMenu_Selected_CreateRing().GetId() ||
2609  event.GetId() == CmdMenu_Selected_CameleonDiagram().GetId() ||
2610  event.GetId() == CmdMenu_Selected_CameleonSymbol().GetId() ||
2611  event.GetId() == CmdMenu_Selected_FlattenCameleon().GetId() ||
2612  event.GetId() == CmdMenu_Selected_CloneCameleonFromInst().GetId() ||
2613  event.GetId() == CmdMenu_Selected_MoveXY().GetId() ||
2614  event.GetId() == CmdMenu_Selected_MoveLayer().GetId() ||
2615  event.GetId() == CmdMenu_Selected_CopyXY().GetId() ||
2616  event.GetId() == CmdMenu_Selected_CopyLayer().GetId() ||
2617  event.GetId() == CmdMenu_Selected_Transform().GetId() ||
2618  event.GetId() == CmdMenu_Selected_Rotate().GetId() ||
2619  event.GetId() == CmdMenu_Selected_Align_MinX().GetId() ||
2620  event.GetId() == CmdMenu_Selected_Align_MaxX().GetId() ||
2621  event.GetId() == CmdMenu_Selected_Align_MinY().GetId() ||
2622  event.GetId() == CmdMenu_Selected_Align_MaxY().GetId() ||
2623  event.GetId() == CmdMenu_Selected_Align_MidX().GetId() ||
2624  event.GetId() == CmdMenu_Selected_Align_MidY().GetId() ||
2625  event.GetId() == CmdMenu_Selected_Align_MirrorVert().GetId() ||
2626  event.GetId() == CmdMenu_Selected_Align_MirrorHorz().GetId() ||
2627  event.GetId() == CmdMenu_Selected_Align_MirrorVertBbox().GetId() ||
2628  event.GetId() == CmdMenu_Selected_Align_MirrorHorzBbox().GetId() ||
2629  event.GetId() == CmdMenu_Selected_Align_DistributeVert().GetId() ||
2630  event.GetId() == CmdMenu_Selected_Align_DistributeHorz().GetId() ||
2631  event.GetId() == CmdMenu_Selected_Align_MinX_Dest().GetId() ||
2632  event.GetId() == CmdMenu_Selected_Align_MaxX_Dest().GetId() ||
2633  event.GetId() == CmdMenu_Selected_Align_MinY_Dest().GetId() ||
2634  event.GetId() == CmdMenu_Selected_Align_MaxY_Dest().GetId() ||
2635  event.GetId() == CmdMenu_Selected_Align_MidX_Dest().GetId() ||
2636  event.GetId() == CmdMenu_Selected_Align_MidY_Dest().GetId() ||
2637  event.GetId() == CmdMenu_Selected_Align_MirrorVert_Dest().GetId() ||
2638  event.GetId() == CmdMenu_Selected_Align_MirrorHorz_Dest().GetId() ||
2639  event.GetId() == CmdMenu_Selected_Align_MirrorVertBbox_Dest().GetId() ||
2640  event.GetId() == CmdMenu_Selected_Align_MirrorHorzBbox_Dest().GetId()
2641  )
2642  {
2644  if ( !drawer )
2645  return;
2646  a2dCanvasObject* selected = drawer->GetShowObject()->Find( "", "", a2dCanvasOFlags::SELECTED );
2647  event.Enable( selected != NULL );
2648  }
2649  else
2650  event.Skip();
2651 }
2652 
2653 void a2dCanvasCommandProcessor::OnPushToolUpdateMenu( wxUpdateUIEvent& event )
2654 {
2655  event.Check( false );
2657  if ( !drawer )
2658  return;
2659 
2660  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
2661  if ( !contr )
2662  {
2663  event.Enable( false );
2664  return;
2665  }
2666 
2667  event.Enable( true );
2668 
2669  //One shot versions
2670  if ( event.GetId() == CmdMenu_PushTool_Zoom_OneShot().GetId() )
2671  {
2672  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dZoomTool );
2673  if ( tool )
2674  event.Check( true );
2675  }
2676  else if ( event.GetId() == CmdMenu_PushTool_Select_OneShot().GetId() )
2677  {
2678  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dSelectTool );
2679  if ( tool )
2680  event.Check( true );
2681  }
2682  else if ( event.GetId() == CmdMenu_PushTool_Select2_OneShot().GetId() )
2683  {
2684  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dSelectTool );
2685  if ( tool )
2686  event.Check( true );
2687  }
2688  else if ( event.GetId() == CmdMenu_PushTool_FastSelect_OneShot().GetId() )
2689  {
2690  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dFastSelect );
2691  if ( tool )
2692  event.Check( true );
2693  }
2694  else if ( event.GetId() == CmdMenu_PushTool_FastSelect2_OneShot().GetId() )
2695  {
2696  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dFastSelect );
2697  if ( tool )
2698  event.Check( true );
2699  }
2700  else if ( event.GetId() == CmdMenu_PushTool_RecursiveEdit_OneShot().GetId() )
2701  {
2703  if ( tool )
2704  event.Check( true );
2705  }
2706  else if ( event.GetId() == CmdMenu_PushTool_MultiEdit_OneShot().GetId() )
2707  {
2709  if ( tool )
2710  event.Check( true );
2711  }
2712  else if ( event.GetId() == CmdMenu_PushTool_DragOriginal_OneShot().GetId() )
2713  {
2714  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDragOrgTool );
2715  if ( tool )
2716  event.Check( true );
2717  }
2718  else if ( event.GetId() == CmdMenu_PushTool_Drag_OneShot().GetId() )
2719  {
2720  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDragTool );
2721  if ( tool )
2722  event.Check( true );
2723  }
2724  else if ( event.GetId() == CmdMenu_PushTool_Copy_OneShot().GetId() )
2725  {
2726  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dCopyTool );
2727  if ( tool )
2728  event.Check( true );
2729  }
2730  else if ( event.GetId() == CmdMenu_PushTool_Rotate_OneShot().GetId() )
2731  {
2732  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dRotateTool );
2733  if ( tool )
2734  event.Check( true );
2735  }
2736  else if ( event.GetId() == CmdMenu_PushTool_Delete_OneShot().GetId() )
2737  {
2738  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDeleteTool );
2739  if ( tool )
2740  event.Check( true );
2741  }
2742  else if ( event.GetId() == CmdMenu_PushTool_DrawText_OneShot().GetId() )
2743  {
2744  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDrawTextTool );
2745  if ( tool )
2746  event.Check( true );
2747  }
2748  else if ( event.GetId() == CmdMenu_PushTool_Image_OneShot().GetId() )
2749  {
2750  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dImageTool );
2751  if ( tool )
2752  event.Check( true );
2753  }
2754  else if ( event.GetId() == CmdMenu_PushTool_DrawCircleFast_OneShot().GetId() )
2755  {
2757  if ( tool )
2758  event.Check( true );
2759  }
2760  else if ( event.GetId() == CmdMenu_PushTool_DrawLine_OneShot().GetId() )
2761  {
2762  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDrawLineTool );
2763  if ( tool )
2764  event.Check( true );
2765  }
2766  else if ( event.GetId() == CmdMenu_PushTool_DrawLineScaledArrow_OneShot().GetId() )
2767  {
2768  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDrawLineTool );
2769  if ( tool )
2770  event.Check( true );
2771  }
2772  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipse_OneShot().GetId() )
2773  {
2775  if ( tool )
2776  event.Check( true );
2777  }
2778  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc_OneShot().GetId() )
2779  {
2781  if ( tool && !tool->GetChord() )
2782  event.Check( true );
2783  }
2784  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc_Chord_OneShot().GetId() )
2785  {
2787  if ( tool && tool->GetChord() )
2788  event.Check( true );
2789  }
2790  else if ( event.GetId() == CmdMenu_PushTool_DrawArc_OneShot().GetId() )
2791  {
2793  if ( tool && !tool->GetChord() )
2794  event.Check( true );
2795  }
2796  else if ( event.GetId() == CmdMenu_PushTool_DrawArc_Chord_OneShot().GetId() )
2797  {
2799  if ( tool && tool->GetChord() )
2800  event.Check( true );
2801  }
2802  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL_OneShot().GetId() )
2803  {
2805  if ( tool && !tool->GetSpline() )
2806  event.Check( true );
2807  }
2808  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL_OneShot().GetId() )
2809  {
2811  if ( tool && !tool->GetSpline() )
2812  event.Check( true );
2813  }
2814  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL_Splined_OneShot().GetId() )
2815  {
2817  if ( tool && tool->GetSpline() )
2818  event.Check( true );
2819  }
2820  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL_Splined_OneShot().GetId() )
2821  {
2823  if ( tool && tool->GetSpline() )
2824  event.Check( true );
2825  }
2826  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonLFast_OneShot().GetId() )
2827  {
2829  if ( tool )
2830  event.Check( true );
2831  }
2832  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineLFast_OneShot().GetId() )
2833  {
2835  if ( tool )
2836  event.Check( true );
2837  }
2838  else if ( event.GetId() == CmdMenu_PushTool_Property_OneShot().GetId() )
2839  {
2840  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dPropertyTool );
2841  if ( tool )
2842  event.Check( true );
2843  }
2844  else if ( event.GetId() == CmdMenu_PushTool_FastDragMulti_OneShot().GetId() )
2845  {
2847  if ( tool )
2848  event.Check( true );
2849  }
2850  else if ( event.GetId() == CmdMenu_PushTool_FastCopyMulti().GetId() )
2851  {
2853  if ( tool )
2854  event.Check( true );
2855  }
2856  else if ( event.GetId() == CmdMenu_PushTool_Measure_OneShot().GetId() )
2857  {
2858  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dMeasureTool );
2859  if ( tool )
2860  event.Check( true );
2861  }
2862  else if ( event.GetId() == CmdMenu_PushTool_DrawWirePolylineL_OneShot().GetId() )
2863  {
2865  if ( tool )
2866  event.Check( true );
2867  }
2868  else if ( event.GetId() == CmdMenu_PushTool_DragMulti_OneShot().GetId() )
2869  {
2871  if ( tool )
2872  event.Check( true );
2873  }
2874  else if ( event.GetId() == CmdMenu_PushTool_CopyMulti_OneShot().GetId() )
2875  {
2877  if ( tool )
2878  event.Check( true );
2879  }
2880  else if ( event.GetId() == CmdMenu_PushTool_DrawRectangle_OneShot().GetId() )
2881  {
2883  if ( tool )
2884  event.Check( true );
2885  }
2886  else if ( event.GetId() == CmdMenu_PushTool_DrawCircle_OneShot().GetId() )
2887  {
2889  if ( tool )
2890  event.Check( true );
2891  }
2892  else if ( event.GetId() == CmdMenu_PushTool_DrawVPath_OneShot().GetId() )
2893  {
2895  if ( tool )
2896  event.Check( true );
2897  }
2898 
2899  //Normal versions
2900  else if ( event.GetId() == CmdMenu_PushTool_Zoom().GetId() )
2901  {
2902  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dZoomTool );
2903  if ( tool )
2904  event.Check( true );
2905  }
2906  else if ( event.GetId() == CmdMenu_PushTool_Select().GetId() )
2907  {
2908  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dSelectTool );
2909  if ( tool )
2910  event.Check( true );
2911  }
2912  else if ( event.GetId() == CmdMenu_PushTool_Select2().GetId() )
2913  {
2914  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dSelectTool );
2915  if ( tool )
2916  event.Check( true );
2917  }
2918  else if ( event.GetId() == CmdMenu_PushTool_FastSelect().GetId() )
2919  {
2920  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dFastSelect );
2921  if ( tool )
2922  event.Check( true );
2923  }
2924  else if ( event.GetId() == CmdMenu_PushTool_FastSelect2().GetId() )
2925  {
2926  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dFastSelect );
2927  if ( tool )
2928  event.Check( true );
2929  }
2930  else if ( event.GetId() == CmdMenu_PushTool_RecursiveEdit().GetId() )
2931  {
2933  if ( tool )
2934  event.Check( true );
2935  }
2936  else if ( event.GetId() == CmdMenu_PushTool_MultiEdit().GetId() )
2937  {
2939  if ( tool )
2940  event.Check( true );
2941  }
2942  else if ( event.GetId() == CmdMenu_PushTool_DragOriginal().GetId() )
2943  {
2944  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDragOrgTool );
2945  if ( tool )
2946  event.Check( true );
2947  }
2948  else if ( event.GetId() == CmdMenu_PushTool_Drag().GetId() )
2949  {
2950  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDragTool );
2951  if ( tool )
2952  event.Check( true );
2953  }
2954  else if ( event.GetId() == CmdMenu_PushTool_Copy().GetId() )
2955  {
2956  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dCopyTool );
2957  if ( tool )
2958  event.Check( true );
2959  }
2960  else if ( event.GetId() == CmdMenu_PushTool_Rotate().GetId() )
2961  {
2962  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dRotateTool );
2963  if ( tool )
2964  event.Check( true );
2965  }
2966  else if ( event.GetId() == CmdMenu_PushTool_Delete().GetId() )
2967  {
2968  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDeleteTool );
2969  if ( tool )
2970  event.Check( true );
2971  }
2972  else if ( event.GetId() == CmdMenu_PushTool_DrawText().GetId() )
2973  {
2974  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDrawTextTool );
2975  if ( tool )
2976  event.Check( true );
2977  }
2978  else if ( event.GetId() == CmdMenu_PushTool_Image().GetId() )
2979  {
2980  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dImageTool );
2981  if ( tool )
2982  event.Check( true );
2983  }
2984  else if ( event.GetId() == CmdMenu_PushTool_DrawCircleFast().GetId() )
2985  {
2987  if ( tool )
2988  event.Check( true );
2989  }
2990  else if ( event.GetId() == CmdMenu_PushTool_DrawLine().GetId() )
2991  {
2992  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDrawLineTool );
2993  if ( tool )
2994  event.Check( true );
2995  }
2996  else if ( event.GetId() == CmdMenu_PushTool_DrawLineScaledArrow().GetId() )
2997  {
2998  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dDrawLineTool );
2999  if ( tool )
3000  event.Check( true );
3001  }
3002  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipse().GetId() )
3003  {
3005  if ( tool )
3006  event.Check( true );
3007  }
3008  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc().GetId() )
3009  {
3011  if ( tool && !tool->GetChord() )
3012  event.Check( true );
3013  }
3014  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc_Chord().GetId() )
3015  {
3017  if ( tool && tool->GetChord() )
3018  event.Check( true );
3019  }
3020  else if ( event.GetId() == CmdMenu_PushTool_DrawArc().GetId() )
3021  {
3023  if ( tool && !tool->GetChord() )
3024  event.Check( true );
3025  }
3026  else if ( event.GetId() == CmdMenu_PushTool_DrawArc_Chord().GetId() )
3027  {
3029  if ( tool && tool->GetChord() )
3030  event.Check( true );
3031  }
3032  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL().GetId() )
3033  {
3035  if ( tool && !tool->GetSpline() )
3036  event.Check( true );
3037  }
3038  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL().GetId() )
3039  {
3041  if ( tool && !tool->GetSpline() )
3042  event.Check( true );
3043  }
3044  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL_Splined().GetId() )
3045  {
3047  if ( tool && tool->GetSpline() )
3048  event.Check( true );
3049  }
3050  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL_Splined().GetId() )
3051  {
3053  if ( tool && tool->GetSpline() )
3054  event.Check( true );
3055  }
3056  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonLFast().GetId() )
3057  {
3059  if ( tool )
3060  event.Check( true );
3061  }
3062  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineLFast().GetId() )
3063  {
3065  if ( tool )
3066  event.Check( true );
3067  }
3068  else if ( event.GetId() == CmdMenu_PushTool_Property().GetId() )
3069  {
3070  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dPropertyTool );
3071  if ( tool )
3072  event.Check( true );
3073  }
3074  else if ( event.GetId() == CmdMenu_PushTool_FastDragMulti().GetId() )
3075  {
3077  if ( tool )
3078  event.Check( true );
3079  }
3080  else if ( event.GetId() == CmdMenu_PushTool_FastCopyMulti().GetId() )
3081  {
3083  if ( tool )
3084  event.Check( true );
3085  }
3086  else if ( event.GetId() == CmdMenu_PushTool_Measure().GetId() )
3087  {
3088  a2dStTool* tool = wxDynamicCast( contr->GetFirstTool(), a2dMeasureTool );
3089  if ( tool )
3090  event.Check( true );
3091  }
3092  else if ( event.GetId() == CmdMenu_PushTool_DrawWirePolylineL().GetId() )
3093  {
3095  if ( tool )
3096  event.Check( true );
3097  }
3098  else if ( event.GetId() == CmdMenu_PushTool_DragMulti().GetId() )
3099  {
3101  if ( tool )
3102  event.Check( true );
3103  }
3104  else if ( event.GetId() == CmdMenu_PushTool_CopyMulti().GetId() )
3105  {
3107  if ( tool )
3108  event.Check( true );
3109  }
3110  else if ( event.GetId() == CmdMenu_PushTool_DrawRectangle().GetId() )
3111  {
3113  if ( tool )
3114  event.Check( true );
3115  }
3116  else if ( event.GetId() == CmdMenu_PushTool_DrawCircle().GetId() )
3117  {
3119  if ( tool )
3120  event.Check( true );
3121  }
3122  else if ( event.GetId() == CmdMenu_PushTool_DrawVPath().GetId() )
3123  {
3125  if ( tool )
3126  event.Check( true );
3127  }
3128  else if ( event.GetId() == CmdMenu_PushTool_Port().GetId() )
3129  {
3131  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_Port() ) )
3132  event.Check( true );
3133  }
3134  else if ( event.GetId() == CmdMenu_PushTool_Cameleon().GetId() )
3135  {
3137  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_Cameleon() ) )
3138  event.Check( true );
3139  }
3140  else if ( event.GetId() == CmdMenu_PushTool_Cameleon_BuildIn().GetId() )
3141  {
3142  }
3143  else if ( event.GetId() == CmdMenu_PushTool_CameleonInst().GetId() )
3144  {
3146  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_CameleonInst() ) )
3147  event.Check( true );
3148  }
3149  else if ( event.GetId() == CmdMenu_PushTool_CameleonInstDlg().GetId() )
3150  {
3152  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_CameleonInstDlg() ) )
3153  event.Check( true );
3154  }
3155  else if ( event.GetId() == CmdMenu_PushTool_CameleonRefDlg_Diagram().GetId() )
3156  {
3158  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_CameleonRefDlg_Diagram() ) )
3159  event.Check( true );
3160  }
3161  else if ( event.GetId() == CmdMenu_PushTool_CameleonRefDlg_Symbol().GetId() )
3162  {
3164  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_CameleonRefDlg_Symbol() ) )
3165  event.Check( true );
3166  }
3167  else if ( event.GetId() == CmdMenu_PushTool_CameleonRefDlg().GetId() )
3168  {
3170  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_CameleonRefDlg() ) )
3171  event.Check( true );
3172  }
3173  else if ( event.GetId() == CmdMenu_PushTool_TagGroups().GetId() )
3174  {
3175  a2dBaseTool* tool = contr->GetFirstTool();
3176  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_TagGroups() ) )
3177  event.Check( true );
3178  }
3179  else if ( event.GetId() == CmdMenu_PushTool_TagGroups_WireMode().GetId() )
3180  {
3181  a2dBaseTool* tool = contr->GetFirstTool();
3182  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_TagGroups_WireMode() ) )
3183  event.Check( true );
3184  }
3185  else if ( event.GetId() == CmdMenu_PushTool_TagGroups_DlgMode().GetId() )
3186  {
3187  a2dBaseTool* tool = contr->GetFirstTool();
3188  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_TagGroups_DlgMode() ) )
3189  event.Check( true );
3190  }
3191  else if ( event.GetId() == CmdMenu_PushTool_TagGroups_WireMode_DlgMode().GetId() )
3192  {
3193  a2dBaseTool* tool = contr->GetFirstTool();
3194  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_TagGroups_WireMode_DlgMode() ) )
3195  event.Check( true );
3196  }
3197  else if ( event.GetId() == CmdMenu_PushTool_SingleClick().GetId() )
3198  {
3199  a2dBaseTool* tool = contr->GetFirstTool();
3200  if ( tool && tool->GetInitiatingMenuId().SameId( CmdMenu_PushTool_SingleClick() ) )
3201  event.Check( true );
3202  }
3203 }
3204 
3205 void a2dCanvasCommandProcessor::OnMenu( wxCommandEvent& event )
3206 {
3207  bool onTop = true;
3208  long style = wxDEFAULT_DIALOG_STYLE;
3209  if ( !onTop )
3210  style |= wxSTAY_ON_TOP;
3211 
3212  bool found = false;
3213 
3214  if ( !m_drawing )
3215  return;
3216 
3217  a2dDrawing* drawing = m_drawing;
3218 
3219  a2dCanvasObjectPtr top = GetActiveDrawingPart()->GetShowObject();
3220 
3221  if ( event.GetId() == CmdMenu_ChangeCanvasObjectStyle().GetId() )
3222  {
3223  found = true;
3224  }
3225  else if ( event.GetId() == CmdMenu_SetLayer().GetId() )
3226  {
3227  found = true;
3228  long w = wxGetNumberFromUser( _( "Give layer number:" ), _( "Layer:" ), _( "layer number" ), m_drawing->GetHabitat()->m_layer, 0, wxMAXLAYER );
3229 
3230  if ( w != -1 )
3231  {
3232  if ( w >= 0 && w < ( long ) wxMAXLAYER )
3233  {
3234  m_drawing->GetHabitat()->SetLayer( w, true );
3235  }
3236  else
3237  ( void )wxMessageBox( _( "Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
3238  }
3239  }
3240  else if ( event.GetId() == CmdMenu_SetTarget().GetId() )
3241  {
3242  found = true;
3243  long w = wxGetNumberFromUser( _( "Give layer number:" ), _( "Layer:" ), _( "Set Target Layer" ), m_drawing->GetHabitat()->m_target, 0, wxMAXLAYER );
3244 
3245  if ( w != -1 )
3246  {
3247  if ( w >= 0 && w < ( long ) wxMAXLAYER )
3248  {
3249  m_drawing->GetHabitat()->SetTarget( w );
3250  }
3251  else
3252  ( void )wxMessageBox( _( "Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
3253  }
3254  }
3255  else if ( event.GetId() == CmdMenu_SetBackgroundStyle().GetId() )
3256  {
3257  found = true;
3259  if ( !drawer )
3260  return;
3261  a2dStyleDialog b( m_drawing->GetHabitat(), NULL, wxDEFAULT_DIALOG_STYLE | wxDIALOG_NO_PARENT | wxMINIMIZE_BOX | wxMAXIMIZE_BOX, true );
3262  b.SetFill( drawer->GetBackgroundFill() );
3263  if ( b.ShowModal() == wxID_OK )
3264  drawer->SetBackgroundFill( b.GetFill() );
3265  }
3266  else if ( event.GetId() == CmdMenu_SetDrawWireFrame().GetId() )
3267  {
3268  found = true;
3270  if ( !drawer )
3271  return;
3273  {
3275  drawer->Update();
3276  }
3277  else
3278  {
3280  drawer->Update();
3281  }
3282  }
3283  else if ( event.GetId() == CmdMenu_DrawGridLines().GetId() )
3284  {
3285  found = true;
3287  if ( !drawer )
3288  return;
3289  drawer->SetGridLines( !drawer->GetGridLines() );
3290  }
3291  else if ( event.GetId() == CmdMenu_DrawGridAtFront().GetId() )
3292  {
3293  found = true;
3295  if ( !drawer )
3296  return;
3297  drawer->SetGridAtFront( !drawer->GetGridAtFront() );
3298  }
3299  else if ( event.GetId() == CmdMenu_Refresh().GetId() )
3300  {
3301  found = true;
3302  Refresh();
3303  }
3304  else if ( event.GetId() == CmdMenu_ZoomOut().GetId() )
3305  {
3306  found = true;
3308  if ( !drawer )
3309  return;
3310  drawer->SetMappingShowAll();
3311  }
3312  else if ( event.GetId() == CmdMenu_ZoomOut2().GetId() )
3313  {
3314  found = true;
3316  if ( !drawer )
3317  return;
3318  if ( !drawer->GetDisplayWindow() )
3319  return;
3320  a2dDrawer2D* dr = drawer->GetDrawer2D();
3321  if ( !dr )
3322  return;
3323 
3324  int dx, dy;
3325  drawer->GetDisplayWindow()->GetClientSize( &dx, &dy );
3326  if ( dy > dx ) dx = dy;
3327 
3328  dr->SetMappingUpp(
3329  dr->GetVisibleMinX() - dr->GetUppX()*dx*( m_zoomfactor*0.5 - 0.5 ),
3330  dr->GetVisibleMinY() - dr->GetUppY()*dy*( m_zoomfactor*0.5 - 0.5 ),
3331  dr->GetUppX() * m_zoomfactor, dr->GetUppY() * m_zoomfactor );
3332  }
3333  else if ( event.GetId() == CmdMenu_ZoomIn2().GetId() )
3334  {
3335  found = true;
3337  if ( !drawer )
3338  return;
3339  if ( !drawer->GetDisplayWindow() )
3340  return;
3341  a2dDrawer2D* dr = drawer->GetDrawer2D();
3342  if ( !dr )
3343  return;
3344 
3345  int dx, dy;
3346  drawer->GetDisplayWindow()->GetClientSize( &dx, &dy );
3347  if ( dy > dx ) dx = dy;
3348 
3349  dr->SetMappingUpp(
3350  dr->GetVisibleMinX() + dr->GetUppX()*dx*( 0.5 - 1/(m_zoomfactor*2)),
3351  dr->GetVisibleMinY() + dr->GetUppY()*dy*( 0.5 - 1/(m_zoomfactor*2)),
3352  dr->GetUppX() / m_zoomfactor, dr->GetUppY() / m_zoomfactor );
3353  }
3354  else if ( event.GetId() == CmdMenu_ZoomOut2CondSelected().GetId() )
3355  {
3356  found = true;
3358  if ( !drawer )
3359  return;
3360  if ( !drawer->GetDisplayWindow() )
3361  return;
3362  a2dDrawer2D* dr = drawer->GetDrawer2D();
3363  if ( !dr )
3364  return;
3365  if ( ! drawer->GetShowObject() )
3366  return;
3367 
3368  int dx, dy;
3369  drawer->GetDisplayWindow()->GetClientSize( &dx, &dy );
3370 
3372 
3373  if ( bbox.GetValid() )
3374  {
3375  double upxy = dx;
3376  if ( dy > dx ) upxy = dy;
3377  dr->SetMappingUpp(
3378  dr->GetVisibleMinX() - dr->GetUppX()*upxy*( m_zoomfactor*0.5 - 0.5 ),
3379  dr->GetVisibleMinY() - dr->GetUppY()*upxy*( m_zoomfactor*0.5 - 0.5 ),
3380  dr->GetUppX() * m_zoomfactor, dr->GetUppY() * m_zoomfactor );
3381 
3382  double xc, yc, xcn, ycn;
3383  xc = dr->GetVisibleMinX() + dr->GetUppX()*dx*0.5;
3384  yc = dr->GetVisibleMinY() + dr->GetUppY()*dy*0.5;
3385  xcn = bbox.GetCentre().m_x;
3386  ycn = bbox.GetCentre().m_y;
3387 
3388  a2dBoundingBox visBbox = dr->GetVisibleBbox();
3389  if (
3390  //( visBbox.Intersect( bbox, bbox.GetWidth()/10 ) != _IN ) &&
3391  ( fabs(xc - xcn) > bbox.GetWidth()/10 || fabs( yc - ycn ) > bbox.GetWidth()/10 )
3392  )
3393  {
3394  a2dBoundingBox bsel( xcn - visBbox.GetWidth()/2.0, ycn - visBbox.GetHeight()/2.0, xcn + visBbox.GetWidth()/2.0, ycn + visBbox.GetHeight()/2.0 );
3395  dr->SetMappingDeviceRect( 0, 0 , dx, dy );
3396  dr->SetMappingWidthHeight( bsel );
3397  }
3398  }
3399  else
3400  {
3401  double upxy = dx;
3402  if ( dy > dx ) upxy = dy;
3403 
3404  dr->SetMappingUpp(
3405  dr->GetVisibleMinX() - dr->GetUppX()*upxy*( m_zoomfactor*0.5 - 0.5 ),
3406  dr->GetVisibleMinY() - dr->GetUppY()*upxy*( m_zoomfactor*0.5 - 0.5 ),
3407  dr->GetUppX() * m_zoomfactor, dr->GetUppY() * m_zoomfactor );
3408  }
3409  }
3410  else if ( event.GetId() == CmdMenu_ZoomIn2CondSelected().GetId() )
3411  {
3412  found = true;
3414  if ( !drawer )
3415  return;
3416  if ( !drawer->GetDisplayWindow() )
3417  return;
3418  a2dDrawer2D* dr = drawer->GetDrawer2D();
3419  if ( !dr )
3420  return;
3421 
3422  if ( ! drawer->GetShowObject() )
3423  return;
3424 
3425  int dx, dy;
3426  drawer->GetDisplayWindow()->GetClientSize( &dx, &dy );
3427 
3429 
3430  if ( bbox.GetValid() )
3431  {
3432  double upxy = dx;
3433  if ( dy > dx ) upxy = dy;
3434 
3435  dr->SetMappingUpp(
3436  dr->GetVisibleMinX() + dr->GetUppX()*upxy*( 0.5 - 1/(m_zoomfactor*2)),
3437  dr->GetVisibleMinY() + dr->GetUppY()*upxy*( 0.5 - 1/(m_zoomfactor*2)),
3438  dr->GetUppX() / m_zoomfactor, dr->GetUppY() / m_zoomfactor );
3439 
3440  double xc, yc, xcn, ycn;
3441  xc = dr->GetVisibleMinX() + dr->GetUppX()*dx*0.5;
3442  yc = dr->GetVisibleMinY() + dr->GetUppY()*dy*0.5;
3443  xcn = bbox.GetCentre().m_x;
3444  ycn = bbox.GetCentre().m_y;
3445 
3446  a2dBoundingBox visBbox = dr->GetVisibleBbox();
3447  if (
3448  //( visBbox.Intersect( bbox, bbox.GetWidth()/10 ) == _IN ) &&
3449  ( fabs(xc - xcn) > bbox.GetWidth()/20 || fabs( yc - ycn ) > bbox.GetWidth()/20 )
3450  )
3451  {
3452  a2dBoundingBox bsel( xcn - visBbox.GetWidth()/2.0, ycn - visBbox.GetHeight()/2.0, xcn + visBbox.GetWidth()/2.0, ycn + visBbox.GetHeight()/2.0 );
3453  dr->SetMappingDeviceRect( 0, 0 , dx, dy );
3454  dr->SetMappingWidthHeight( bsel );
3455  }
3456  }
3457  else
3458  {
3459  double upxy = dx;
3460  if ( dy > dx ) upxy = dy;
3461 
3462  dr->SetMappingUpp(
3463  dr->GetVisibleMinX() + dr->GetUppX()*upxy*( 0.5 - 1/(m_zoomfactor*2)),
3464  dr->GetVisibleMinY() + dr->GetUppY()*upxy*( 0.5 - 1/(m_zoomfactor*2)),
3465  dr->GetUppX() / m_zoomfactor, dr->GetUppY() / m_zoomfactor );
3466  }
3467  }
3468 /*
3469  else if ( event.GetId() == CmdMenu_ZoomOut2CondSelected().GetId() )
3470  {
3471  found = true;
3472  a2dDrawingPart* drawer = a2dCanvasGlobals->GetActiveDrawingPart();
3473  if ( !drawer )
3474  return;
3475  if ( !drawer->GetDisplayWindow() )
3476  return;
3477  a2dDrawer2D* dr = drawer->GetDrawer2D();
3478  if ( !dr )
3479  return;
3480  if ( ! drawer->GetShowObject() )
3481  return;
3482 
3483  int dx, dy;
3484  drawer->GetDisplayWindow()->GetClientSize( &dx, &dy );
3485 
3486  a2dBoundingBox bbox = drawer->GetShowObject()->GetChildObjectList()->GetBBox( a2dCanvasOFlags::VISIBLE | a2dCanvasOFlags::SELECTED );
3487 
3488  if ( bbox.GetValid() )
3489  {
3490  double xc, yc, xcn, ycn;
3491  xc = dr->GetVisibleMinX() + dr->GetUppX()*dx*0.5;
3492  yc = dr->GetVisibleMinY() + dr->GetUppY()*dy*0.5;
3493  xcn = bbox.GetCentre().m_x;
3494  ycn = bbox.GetCentre().m_y;
3495 
3496  a2dBoundingBox visBbox = dr->GetVisibleBbox();
3497  if (
3498  //( visBbox.Intersect( bbox, bbox.GetWidth()/10 ) != _IN ) &&
3499  ( fabs(xc - xcn) > bbox.GetWidth()/10 || fabs( yc - ycn ) > bbox.GetWidth()/10 )
3500  )
3501  {
3502  dr->SetMappingDeviceRect( 0, 0 , dx, dy );
3503  dr->SetMappingWidthHeight( bbox );
3504  }
3505  else
3506  {
3507  if ( dy > dx ) dx = dy;
3508  dr->SetMappingUpp(
3509  dr->GetVisibleMinX() - dr->GetUppX()*dx*( m_zoomfactor*0.5 - 0.5 ),
3510  dr->GetVisibleMinY() - dr->GetUppY()*dy*( m_zoomfactor*0.5 - 0.5 ),
3511  dr->GetUppX() * m_zoomfactor, dr->GetUppY() * m_zoomfactor );
3512  }
3513  }
3514  else
3515  {
3516  if ( dy > dx ) dx = dy;
3517 
3518  dr->SetMappingUpp(
3519  dr->GetVisibleMinX() - dr->GetUppX()*dx*( m_zoomfactor*0.5 - 0.5 ),
3520  dr->GetVisibleMinY() - dr->GetUppY()*dy*( m_zoomfactor*0.5 - 0.5 ),
3521  dr->GetUppX() * m_zoomfactor, dr->GetUppY() * m_zoomfactor );
3522  }
3523  }
3524  else if ( event.GetId() == CmdMenu_ZoomIn2CondSelected().GetId() )
3525  {
3526  found = true;
3527  a2dDrawingPart* drawer = a2dCanvasGlobals->GetActiveDrawingPart();
3528  if ( !drawer )
3529  return;
3530  if ( !drawer->GetDisplayWindow() )
3531  return;
3532  a2dDrawer2D* dr = drawer->GetDrawer2D();
3533  if ( !dr )
3534  return;
3535 
3536  if ( ! drawer->GetShowObject() )
3537  return;
3538 
3539  int dx, dy;
3540  drawer->GetDisplayWindow()->GetClientSize( &dx, &dy );
3541 
3542  a2dBoundingBox bbox = drawer->GetShowObject()->GetChildObjectList()->GetBBox( a2dCanvasOFlags::VISIBLE | a2dCanvasOFlags::SELECTED );
3543 
3544  if ( bbox.GetValid() )
3545  {
3546  double xc, yc, xcn, ycn;
3547  xc = dr->GetVisibleMinX() + dr->GetUppX()*dx*0.5;
3548  yc = dr->GetVisibleMinY() + dr->GetUppY()*dy*0.5;
3549  xcn = bbox.GetCentre().m_x;
3550  ycn = bbox.GetCentre().m_y;
3551 
3552  a2dBoundingBox visBbox = dr->GetVisibleBbox();
3553  if (
3554  //( visBbox.Intersect( bbox, bbox.GetWidth()/10 ) == _IN ) &&
3555  ( fabs(xc - xcn) > bbox.GetWidth()/20 || fabs( yc - ycn ) > bbox.GetWidth()/20 )
3556  )
3557  {
3558  dr->SetMappingDeviceRect( 0, 0 , dx, dy );
3559  dr->SetMappingWidthHeight( bbox );
3560  }
3561  else
3562  {
3563  if ( dy > dx ) dx = dy;
3564  dr->SetMappingUpp(
3565  dr->GetVisibleMinX() + dr->GetUppX()*dx*( 0.5 - 1/(m_zoomfactor*2)),
3566  dr->GetVisibleMinY() + dr->GetUppY()*dy*( 0.5 - 1/(m_zoomfactor*2)),
3567  dr->GetUppX() / m_zoomfactor, dr->GetUppY() / m_zoomfactor );
3568  }
3569  }
3570  else
3571  {
3572  if ( dy > dx ) dx = dy;
3573 
3574  dr->SetMappingUpp(
3575  dr->GetVisibleMinX() + dr->GetUppX()*dx*( 0.5 - 1/(m_zoomfactor*2)),
3576  dr->GetVisibleMinY() + dr->GetUppY()*dy*( 0.5 - 1/(m_zoomfactor*2)),
3577  dr->GetUppX() / m_zoomfactor, dr->GetUppY() / m_zoomfactor );
3578  }
3579  }
3580 */
3581  else if ( event.GetId() == CmdMenu_EmptyShownObject().GetId() )
3582  {
3583  found = true;
3585  if ( !drawer )
3586  return;
3587  if ( ! drawer->GetShowObject() )
3588  return;
3589 
3590  drawer->GetShowObject()->ReleaseChildObjects();
3591  }
3592  else if ( event.GetId() == CmdMenu_DrawGrid().GetId() )
3593  {
3594  found = true;
3596  if ( !drawer )
3597  return;
3598  drawer->SetGrid( !drawer->GetGrid() );
3599  }
3600  else if ( event.GetId() == CmdMenu_SetSnap().GetId() )
3601  {
3602  found = true;
3603  if ( !GetActiveDrawingPart() )
3604  return;
3605  m_drawing->GetHabitat()->GetRestrictionEngine()->SetSnap( !GetActiveDrawingPart()->GetCanvasToolContr()->GetSnap() );
3606  }
3607  else if ( event.GetId() == CmdMenu_SetYAxis().GetId() )
3608  {
3609  found = true;
3610  if ( !GetActiveDrawingPart() )
3611  return;
3612  if ( !GetActiveDrawingPart()->GetDrawer2D() )
3613  return;
3614 
3615  a2dDiagram::SetNextLineDirection( GetActiveDrawingPart()->GetDrawer2D()->GetYaxis() );
3616  a2dCameleon::SetNextLineDirection( GetActiveDrawingPart()->GetDrawer2D()->GetYaxis() );
3617 
3618  GetActiveDrawingPart()->GetDrawer2D()->SetYaxis( !GetActiveDrawingPart()->GetDrawer2D()->GetYaxis() );
3619  GetActiveDrawingPart()->SetMappingShowAll();
3620  }
3621  else if ( event.GetId() == CmdMenu_Option_SplinePoly().GetId() )
3622  {
3623  found = true;
3624  m_drawing->GetHabitat()->SetSpline( !m_drawing->GetHabitat()->GetSpline() );
3625  }
3626  else if ( event.GetId() == CmdMenu_RouteMethod_StraightEndSegment().GetId() )
3627  {
3628  found = true;
3630  }
3631  else if ( event.GetId() == CmdMenu_RouteMethod_StraightEndSegmentUnlessPins().GetId() )
3632  {
3633  found = true;
3635  }
3636  else if ( event.GetId() == CmdMenu_RouteMethod_StraightSegment().GetId() )
3637  {
3638  found = true;
3640  }
3641  else if ( event.GetId() == CmdMenu_RouteMethod_StraightSegmentUnlessPins().GetId() )
3642  {
3643  found = true;
3645  }
3646  else if ( event.GetId() == CmdMenu_RouteMethod_GridRouting().GetId() )
3647  {
3648  found = true;
3650  }
3651  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanSegments().GetId() )
3652  {
3654  }
3655  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanEndSegments().GetId() )
3656  {
3658  }
3659  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanEndSegmentsStay().GetId() )
3660  {
3662  }
3663  else if ( event.GetId() == CmdMenu_RouteMethod_ManhattanEndSegmentsConvertAndStay().GetId() )
3664  {
3666  }
3667  else if ( event.GetId() == CmdMenu_RotateObject90Right().GetId() )
3668  {
3669  found = true;
3670  if ( !GetActiveDrawingPart() )
3671  return;
3672 
3673  a2dStToolContr* contr = wxDynamicCast( GetActiveDrawingPart()->GetCanvasToolContr(), a2dStToolContr );
3674  if ( contr )
3675  {
3676  contr->RotateObject90LeftRight( true );
3677  }
3678  }
3679  else if ( event.GetId() == CmdMenu_RotateObject90Left().GetId() )
3680  {
3681  found = true;
3682  if ( !GetActiveDrawingPart() )
3683  return;
3684 
3685  a2dStToolContr* contr = wxDynamicCast( GetActiveDrawingPart()->GetCanvasToolContr(), a2dStToolContr );
3686  if ( contr )
3687  {
3688  contr->RotateObject90LeftRight( false );
3689  }
3690  }
3691  else if ( event.GetId() == CmdMenu_Option_CursorCrosshair().GetId() )
3692  {
3693  found = true;
3694  if ( !GetActiveDrawingPart() )
3695  return;
3696  if ( !GetActiveDrawingPart()->GetDrawer2D() )
3697  return;
3698  GetActiveDrawingPart()->SetCrossHair( !GetActiveDrawingPart()->GetCrossHair() );
3699  }
3700  else if ( event.GetId() == CmdMenu_Option_RescaleAtReSize().GetId() )
3701  {
3702  found = true;
3703  if ( !GetActiveDrawingPart() )
3704  return;
3705  if ( !GetActiveDrawingPart()->GetCanvas() )
3706  return;
3707  GetActiveDrawingPart()->GetCanvas()->SetScaleOnResize( !GetActiveDrawingPart()->GetCanvas()->GetScaleOnResize() );
3708  }
3709  else if ( event.GetId() == CmdMenu_Option_ReverseLayers().GetId() )
3710  {
3711  found = true;
3712  if ( !GetActiveDrawingPart() )
3713  return;
3714  GetActiveDrawingPart()->SetReverseOrder( !GetActiveDrawingPart()->GetReverseOrder() );
3715  }
3716  else if ( event.GetId() == CmdMenu_SetSnapFeatures().GetId() )
3717  {
3718  found = true;
3719  }
3720  else if ( event.GetId() == CmdMenu_SetSnapFeature().GetId() )
3721  {
3722  found = true;
3723  }
3724  else if ( event.GetId() == CmdMenu_SetStroke().GetId() )
3725  {
3726  found = true;
3727  }
3728  else if ( event.GetId() == CmdMenu_SetFill().GetId() )
3729  {
3730  found = true;
3731  }
3732  else if ( event.GetId() == CmdMenu_SetStrokeColour().GetId() )
3733  {
3734  found = true;
3735  }
3736  else if ( event.GetId() == CmdMenu_SetFillColour().GetId() )
3737  {
3738  found = true;
3739  }
3740  else if ( event.GetId() == CmdMenu_SetContourWidth().GetId() )
3741  {
3742  found = true;
3743  }
3744  else if ( event.GetId() == CmdMenu_SetPathType().GetId() )
3745  {
3746  found = true;
3747  }
3748  else if ( event.GetId() == CmdMenu_SetNormalizeFactor().GetId() )
3749  {
3750  found = true;
3751  if ( !m_drawing )
3752  return;
3753 
3754  double norm = wxGetDoubleNumberFromUser( _( "Give normalize factor:" ), _( "Normalize" ), _( "Normalize factor" ), 1, 0, 10000 );
3755 
3756  if ( norm != DBL_MAX )
3757  {
3758  if ( norm >= 0 && norm < 10000 )
3759  {
3760  m_drawing->SetNormalizeScale( norm );
3761  m_drawing->GetHabitat()->SetTarget( norm );
3762  }
3763  else
3764  ( void )wxMessageBox( _( "Normlaize factor must be > 0" ), _( "Normalize" ), wxICON_INFORMATION | wxOK );
3765  }
3766  }
3767  else if ( event.GetId() == CmdMenu_ShowDiagram().GetId() )
3768  {
3769  found = true;
3770  if ( !m_drawing )
3771  return;
3772 
3773  if ( !GetActiveDrawingPart() )
3774  return;
3775  if ( !GetActiveDrawingPart()->GetDrawer2D() )
3776  return;
3777  if ( ! GetActiveDrawingPart()->GetShowObject() )
3778  return;
3779 
3780  a2dCameleon* cam = wxDynamicCast( GetActiveDrawingPart()->GetShowObject()->GetRoot()->GetParent(), a2dCameleon );
3781  if ( !cam )
3782  {
3783  a2dAppear* appear = wxDynamicCast( GetActiveDrawingPart()->GetShowObject()->GetRoot()->GetParent(), a2dAppear );
3784  if ( appear && appear->GetCameleon() )
3785  cam = appear->GetCameleon();
3786  }
3787  if ( cam )
3788  {
3789  a2dDiagram* diagram = cam->GetDiagram();
3790  if ( ! diagram )
3791  {
3792  int answer = wxMessageBox("No Diagram found, Create it?:", "Diagram Creation",
3793  wxYES_NO | wxCANCEL );
3794  if (answer == wxYES)
3795  {
3796  diagram = cam->GetDiagram( true );
3797  }
3798  else
3799  return;
3800  }
3801  a2dDrawing* drawing = diagram->GetDrawing();
3802  GetActiveDrawingPart()->SetShowObject( drawing->GetRootObject() );
3803  GetActiveDrawingPart()->SetMappingShowAll();
3804  }
3805  else
3806  ( void )wxMessageBox( _( "Does not contain appearance asked for" ), _( "Set View" ), wxICON_INFORMATION | wxOK );
3807  }
3808  else if ( event.GetId() == CmdMenu_ShowSymbol().GetId() )
3809  {
3810  found = true;
3811  if ( !m_drawing )
3812  return;
3813 
3814  if ( !GetActiveDrawingPart() )
3815  return;
3816  if ( !GetActiveDrawingPart()->GetDrawer2D() )
3817  return;
3818  if ( ! GetActiveDrawingPart()->GetShowObject() )
3819  return;
3820 
3821  a2dCameleon* cam = wxDynamicCast( GetActiveDrawingPart()->GetShowObject()->GetRoot()->GetParent(), a2dCameleon );
3822  if ( !cam )
3823  {
3824  a2dAppear* appear = wxDynamicCast( GetActiveDrawingPart()->GetShowObject()->GetRoot()->GetParent(), a2dAppear );
3825  if ( appear && appear->GetCameleon() )
3826  cam = appear->GetCameleon();
3827  }
3828  if ( cam )
3829  {
3830  a2dSymbol* symbol = cam->GetSymbol();
3831  if ( ! symbol )
3832  {
3833  int answer = wxMessageBox("No Symbol found, Create it?:", "Symbol Creation",
3834  wxYES_NO | wxCANCEL );
3835  if (answer == wxYES)
3836  {
3837  symbol = cam->GetSymbol( true );
3838  }
3839  else
3840  return;
3841  }
3842  a2dDrawing* drawing = symbol->GetDrawing();
3843  GetActiveDrawingPart()->SetShowObject( drawing->GetRootObject() );
3844  GetActiveDrawingPart()->SetMappingShowAll();
3845  }
3846  else
3847  ( void )wxMessageBox( _( "Does not contain appearance asked for" ), _( "Set View" ), wxICON_INFORMATION | wxOK );
3848 
3849  }
3850  else if ( event.GetId() == CmdMenu_ShowGui().GetId() )
3851  {
3852  found = true;
3853  if ( !m_drawing )
3854  return;
3855 
3856  if ( !GetActiveDrawingPart() )
3857  return;
3858  if ( !GetActiveDrawingPart()->GetDrawer2D() )
3859  return;
3860  if ( ! GetActiveDrawingPart()->GetShowObject() )
3861  return;
3862 
3863  a2dAppear* appear = wxDynamicCast( GetActiveDrawingPart()->GetShowObject()->GetRoot()->GetParent(), a2dAppear );
3864  if ( appear && appear->GetCameleon() )
3865  {
3866  a2dGui* gui = appear->GetCameleon()->GetGui();
3867  if ( ! gui )
3868  {
3869  int answer = wxMessageBox("No Gui found, Create it?:", "Gui Creation",
3870  wxYES_NO | wxCANCEL );
3871  if (answer == wxYES)
3872  {
3873  gui = appear->GetCameleon()->GetGui( true );
3874  }
3875  else
3876  return;
3877  }
3878  //a2dDrawing* drawing = symbol->GetDrawing();
3879  // GetActiveDrawingPart()->SetShowObject( drawing->GetRootObject() );
3880  // GetActiveDrawingPart()->SetMappingShowAll();
3881  }
3882  else
3883  ( void )wxMessageBox( _( "Does not contain appearance asked for" ), _( "Set View" ), wxICON_INFORMATION | wxOK );
3884  }
3885 
3886  if ( found )
3887  {}
3888  else if ( event.GetId() == CmdMenu_PushInto().GetId() )
3889  {
3890  found = true;
3891  if ( !GetActiveDrawingPart() )
3892  return;
3893  if ( ! GetActiveDrawingPart()->GetShowObject() )
3894  return;
3895 
3896  a2dCanvasObject* pushIn = GetActiveDrawingPart()->GetShowObject()->Find( wxT( "" ), wxT( "" ), a2dCanvasOFlags::SELECTED );
3897 
3898  if ( pushIn )
3899  pushIn = pushIn->PushInto( GetActiveDrawingPart()->GetShowObject() );
3900  else if ( GetActiveDrawingPart()->GetShowObject()->GetChildObjectsCount() == 1 )
3901  {
3902  pushIn = *(GetActiveDrawingPart()->GetShowObject()->GetChildObjectList()->begin());
3903  pushIn = pushIn->PushInto( GetActiveDrawingPart()->GetShowObject() );
3904  }
3905  if ( pushIn )
3906  {
3907  pushIn->SetSelected( false );
3909  GetActiveDrawingPart()->PushIn( pushIn );
3910  GetActiveDrawingPart()->SetMappingShowAll();
3911  }
3912  else
3913  ( void )wxMessageBox( _( "Does not contain a group, unable to push into" ), _( "push into" ), wxICON_INFORMATION | wxOK );
3914  }
3915  else if ( event.GetId() == CmdMenu_PopOut().GetId() )
3916  {
3917  found = true;
3918  if ( !GetActiveDrawingPart() )
3919  return;
3920  if ( !GetActiveDrawingPart()->GetDrawer2D() )
3921  return;
3922  if ( ! GetActiveDrawingPart()->GetShowObject() )
3923  return;
3924 
3925  GetActiveDrawingPart()->PopOut();
3926  GetActiveDrawingPart()->SetMappingShowAll();
3927  }
3928  else if ( event.GetId() == CmdMenu_NewGroup().GetId() )
3929  {
3930  found = true;
3932  }
3933  else if ( event.GetId() == CmdMenu_NewPin().GetId() )
3934  {
3935  found = true;
3937  }
3938  else if ( event.GetId() == CmdMenu_SaveLayersDrawing().GetId() )
3939  {
3940  found = true;
3941  wxString file = AskFile( _( "Give Name of output Layer file" ),
3942  _T( "@{layerFileApplication}" ),
3943  _T( "" ),
3944  _T( "*.cvg" ),
3945  _T( "*.cvg" ),
3946  wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
3947  SaveLayers( wxFileName( file ) );
3948  }
3949  else if ( event.GetId() == CmdMenu_SaveLayersDrawingLastDir().GetId() )
3950  {
3951  found = true;
3952  wxString file = AskFile( _( "Give Name of output Layer file" ),
3953  _T( "@{lastLayerFileSavePath}" ),
3954  _T( "" ),
3955  _T( "*.cvg" ),
3956  _T( "*.cvg" ),
3957  wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
3958  SaveLayers( wxFileName( file ) );
3959  }
3960  else if ( event.GetId() == CmdMenu_SaveLayersDrawingHome().GetId() )
3961  {
3962  found = true;
3963  wxString file = AskFile( _( "Give Name of output Layer file" ),
3964  _T( "@{layerFileSavePath}" ),
3965  _T( "" ),
3966  _T( "*.cvg" ),
3967  _T( "*.cvg" ),
3968  wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
3969  SaveLayers( wxFileName( file ) );
3970  }
3971  else if ( event.GetId() == CmdMenu_SaveLayersDrawingCurrentDir().GetId() )
3972  {
3973  found = true;
3974  wxString file = AskFile( _( "Give Name of output Layer file" ),
3975  _T( "./" ),
3976  _T( "" ),
3977  _T( "*.cvg" ),
3978  _T( "*.cvg" ),
3979  wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
3980  SaveLayers( wxFileName( file ) );
3981  }
3982  else if ( event.GetId() == CmdMenu_LoadLayersDrawing().GetId() )
3983  {
3984  found = true;
3985  wxString file = AskFile( _( "Give Name of input Layer file" ),
3986  _T( "@{layerFileApplication}" ),
3987  _T( "" ),
3988  _T( "*.cvg" ),
3989  _T( "*.cvg" ),
3990  wxFD_OPEN | wxFD_FILE_MUST_EXIST );
3991  LoadLayers( wxFileName( file ) );
3992  }
3993  else if ( event.GetId() == CmdMenu_LoadLayersDrawingHome().GetId() )
3994  {
3995  found = true;
3996  wxString file = AskFile( _( "Give Name of input Layer file" ),
3997  _T( "@{layerFileSavePath}" ),
3998  _T( "" ),
3999  _T( "*.cvg" ),
4000  _T( "*.cvg" ),
4001  wxFD_OPEN | wxFD_FILE_MUST_EXIST );
4002  LoadLayers( wxFileName( file ) );
4003  }
4004  else if ( event.GetId() == CmdMenu_LoadLayersDrawingLastDir().GetId() )
4005  {
4006  found = true;
4007  wxString file = AskFile( _( "Give Name of input Layer file" ),
4008  _T( "@{lastLayerFileSavePath}" ),
4009  _T( "" ),
4010  _T( "*.cvg" ),
4011  _T( "*.cvg" ),
4012  wxFD_OPEN | wxFD_FILE_MUST_EXIST );
4013  LoadLayers( wxFileName( file ) );
4014  }
4015  else if ( event.GetId() == CmdMenu_LoadLayersDrawingCurrentDir().GetId() )
4016  {
4017  found = true;
4018  wxString file = AskFile( _( "Give Name of input Layer file" ),
4019  _T( "./" ),
4020  _T( "" ),
4021  _T( "*.cvg" ),
4022  _T( "*.cvg" ),
4023  wxFD_OPEN | wxFD_FILE_MUST_EXIST );
4024  LoadLayers( wxFileName( file ) );
4025  }
4026  else if ( event.GetId() == CmdMenu_SetCursor().GetId() )
4027  {
4028  found = true;
4029  }
4030  else if ( event.GetId() == CmdMenu_SetRelativeStart().GetId() )
4031  {
4032  found = true;
4033  }
4034  else if ( event.GetId() == CmdMenu_AddMeasurement().GetId() )
4035  {
4036  found = true;
4037  }
4038  else if ( event.GetId() == CmdMenu_ClearMeasurements().GetId() )
4039  {
4040  found = true;
4041  }
4042  else if ( event.GetId() == CmdMenu_Selected_SelectAll().GetId() )
4043  {
4044  found = true;
4046  }
4047  else if ( event.GetId() == CmdMenu_Selected_DeSelectAll().GetId() )
4048  {
4049  found = true;
4051  }
4052  else if ( event.GetId() == CmdMenu_Selected_SelectAll_NoUndo().GetId() )
4053  {
4054  found = true;
4056  }
4057  else if ( event.GetId() == CmdMenu_Selected_DeSelectAll_NoUndo().GetId() )
4058  {
4059  found = true;
4061  }
4062  else if ( event.GetId() == CmdMenu_Selected_Delete().GetId() )
4063  {
4064  found = true;
4065  Submit( new a2dCommand_DeleteMask( top ), true );
4066  }
4067  else if ( event.GetId() == CmdMenu_Selected_Group().GetId() )
4068  {
4069  found = true;
4070  Submit( new a2dCommand_GroupMask( top, wxT( "" ) ) );
4071  }
4072  else if ( event.GetId() == CmdMenu_Selected_ImageToRectangles().GetId() )
4073  {
4074  found = true;
4075  Submit( new a2dCommand_ImagesToRectMask( top ) );
4076  }
4077  else if ( event.GetId() == CmdMenu_Selected_ToTop().GetId() )
4078  {
4079  found = true;
4080  Submit( new a2dCommand_ToTopMask( top ) );
4081  }
4082  else if ( event.GetId() == CmdMenu_Selected_ToBack().GetId() )
4083  {
4084  found = true;
4085  Submit( new a2dCommand_ToBackMask( top ) );
4086  }
4087  else if ( event.GetId() == CmdMenu_Selected_SetStyle().GetId() )
4088  {
4089  found = true;
4090 
4091  if ( !m_styledlg )
4092  {
4093  m_styledlg = new a2dStyleDialog( m_drawing->GetHabitat(), NULL, style | wxRESIZE_BORDER );
4094  }
4095 
4096  m_styledlg->SetFill( m_drawing->GetHabitat()->GetFill() );
4097  m_styledlg->SetStroke( m_drawing->GetHabitat()->GetStroke() );
4098 
4099  if ( ! m_styledlg->IsShown() )
4100  m_styledlg->Show( true );
4101 
4102  Submit( new a2dCommand_SetFillStrokeMask( top ) );
4103  }
4104  else if ( event.GetId() == CmdMenu_Selected_SetExtStyle().GetId() )
4105  {
4106  found = true;
4107 
4109  if ( !drawer )
4110  return;
4111  a2dCanvasObject* top = drawer->GetShowObject();
4112 
4113  a2dExtFill eFi;
4114  a2dExtStroke eSt;
4115  wxUint32 nrst = 0;
4116  wxUint32 nrfi = 0;
4117 
4118  if ( !top || !top->GetRoot() )
4119  return;
4120 
4121  bool withFill = false;
4122  a2dCanvasObjectList* objects = top->GetChildObjectList();
4123  nrst = a2dSetExtStroke( eSt, objects, a2dCanvasOFlags::SELECTED, drawer->GetDrawing()->GetLayerSetup() );
4124  nrfi = a2dSetExtFill( eFi, objects, a2dCanvasOFlags::SELECTED, drawer->GetDrawing()->GetLayerSetup() );
4125  if ( nrst + nrfi == 0 )
4126  {
4127  eFi.Set( m_drawing->GetHabitat()->GetFill() );
4128  eSt.Set( m_drawing->GetHabitat()->GetStroke() );
4129  withFill = true; // we want to be able to choose a fill
4130  }
4131  else
4132  withFill = 0 != nrfi;
4133 
4134  a2dDialogStyle dlg( NULL, 0 == nrst + nrfi, withFill, true );
4135  dlg.SetUnitsScale( drawer->GetDrawing()->GetUnitsScale() );
4136  dlg.SetExtFill(eFi);
4137  dlg.SetExtStroke(eSt);
4138 
4139  if(wxID_OK == dlg.ShowModal())
4140  {
4141  eSt = dlg.GetExtStroke(); // get edited ExtStroke from dialog
4142  eFi = dlg.GetExtFill(); // get edited ExtFill from dialog
4143 
4144  if ( nrst + nrfi == 0 )
4145  {
4146  m_drawing->GetHabitat()->SetFill( eFi.Get( m_drawing->GetHabitat()->GetFill() ) );
4147  m_drawing->GetHabitat()->SetStroke( eSt.Get( m_drawing->GetHabitat()->GetStroke() ) );
4148  }
4149  else
4151  }
4152  }
4153  else if ( event.GetId() == CmdMenu_Selected_SetTextChanges().GetId() )
4154  {
4155  found = true;
4156 
4158  if ( !drawer )
4159  return;
4160  a2dCanvasObject* top = drawer->GetShowObject();
4161 
4162  a2dExtStroke eSt;
4163  a2dExtFill eFi;
4164  a2dTextChanges eFo;
4165  wxUint32 nrst = 0;
4166  wxUint32 nrfi = 0;
4167  wxUint32 nrfo = 0;
4168 
4169  if ( !top || !top->GetRoot() )
4170  return;
4171 
4172  bool withFill = false;
4173 
4174  a2dCanvasObjectList* objects = top->GetChildObjectList();
4175  a2dCanvasObjectList textobjects;
4176 
4177  //filter objects
4178  forEachIn( a2dCanvasObjectList, objects )
4179  {
4180  a2dCanvasObject* obj = *iter;
4181  a2dText* text = wxDynamicCast( obj, a2dText );
4182 
4183  if ( text )
4184  textobjects.push_back( obj );
4185  }
4186  objects = &textobjects;
4187 
4188  nrst = a2dSetExtStroke( eSt, objects, a2dCanvasOFlags::SELECTED, drawer->GetDrawing()->GetLayerSetup() );
4189  nrfi = a2dSetExtFill( eFi, objects, a2dCanvasOFlags::SELECTED, drawer->GetDrawing()->GetLayerSetup() );
4190  nrfo = a2dSetTextChanges( eFo, objects, a2dCanvasOFlags::SELECTED, drawer->GetDrawing()->GetLayerSetup() );
4191 
4192  if ( nrst + nrfi + nrfo == 0 )
4193  {
4194  eFi.Set( m_drawing->GetHabitat()->GetTextFill() );
4195  eSt.Set( m_drawing->GetHabitat()->GetTextStroke() );
4196  eFo = a2dTextChanges( m_drawing->GetHabitat()->GetTextFont(), m_drawing->GetHabitat()->GetTextTemplateObject()->GetTextFlags(), m_drawing->GetHabitat()->GetTextTemplateObject()->GetAlignment() );
4197 
4198  withFill = true; // we want to be able to choose a fill
4199  }
4200  else
4201  withFill = 0 != nrfi;
4202 
4203  a2dTextPropDlgExt dlg( m_drawing->GetHabitat(), NULL, 0 == nrst + nrfi + nrfo, withFill, eFo.GetFontInfoList(), false );
4204  dlg.SetUnitsScale( drawer->GetDrawing()->GetUnitsScale() );
4205  dlg.SetExtFill(eFi);
4206  dlg.SetExtStroke(eSt);
4207  dlg.SetExtFont(eFo);
4208  //dlg.SetCustomColors( XXX.GetCustomColors());
4209  if ( dlg.ShowModal() == wxID_OK )
4210  {
4211  eSt = dlg.GetExtStroke(); // get edited ExtStroke from dialog
4212  eFi = dlg.GetExtFill(); // get edited ExtFill from dialog
4213  eFo = dlg.GetExtFont(); // get edited ExtFont from dialog
4214 
4215  if ( nrst + nrfi + nrfo == 0 )
4216  {
4217  m_drawing->GetHabitat()->SetTextFill( eFi.Get( m_drawing->GetHabitat()->GetTextFill() ) );
4218  m_drawing->GetHabitat()->SetTextStroke( eSt.Get( m_drawing->GetHabitat()->GetTextStroke() ) );
4219  m_drawing->GetHabitat()->SetTextFont( eFo.GetFont( m_drawing->GetHabitat()->GetTextFont() ) );
4220  m_drawing->GetHabitat()->GetTextTemplateObject()->SetAlignment( eFo.GetAlignment( m_drawing->GetHabitat()->GetTextTemplateObject()->GetAlignment() ) );
4221  m_drawing->GetHabitat()->GetTextTemplateObject()->SetTextFlags( eFo.GetTextFlags( m_drawing->GetHabitat()->GetTextTemplateObject()->GetTextFlags() ) );
4222  }
4223  else
4224  {
4226  drawer->GetDrawing()->GetCanvasCommandProcessor()->Submit( new a2dCommand_SetTextChangesMask( top, eFo, eFo.GetAlignment(), a2dCanvasOFlags::BIN2 ) );
4227  }
4228  }
4229  objects->SetSpecificFlags( false, a2dCanvasOFlags::BIN2 );
4230  }
4231  else if ( event.GetId() == CmdMenu_Selected_SetTextChanges2().GetId() )
4232  {
4233  found = true;
4234 
4236  if ( !drawer )
4237  return;
4238  a2dCanvasObject* top = drawer->GetShowObject();
4239 
4240  a2dTextChanges eFont;
4241  wxUint32 nrfont = 0;
4242 
4243  if ( !top || !top->GetRoot() )
4244  return;
4245 
4246  bool withFill = false;
4247  a2dCanvasObjectList* objects = top->GetChildObjectList();
4248  nrfont = SetTextChanges( eFont, objects, a2dCanvasOFlags::SELECTED, drawer->GetDrawing()->GetLayerSetup() );
4249  if ( nrfont == 0 )
4250  {
4251  eFont = a2dTextChanges( m_drawing->GetHabitat()->GetTextTemplateObject()->GetFont(), m_drawing->GetHabitat()->GetTextTemplateObject()->GetTextFlags(), m_drawing->GetHabitat()->GetTextTemplateObject()->GetAlignment() );
4252  }
4253 
4254  a2dTextPropDlg dialog( NULL, eFont.GetFont(), eFont.GetTextFlags(), eFont.GetAlignment() );
4255  if ( dialog.ShowModal() == wxID_OK )
4256  {
4257  eFont = a2dTextChanges( dialog.GetFontData(), dialog.GetAlignment(), dialog.GetTextFlags() );
4258  if ( nrfont == 0 )
4259  {
4260  m_drawing->GetHabitat()->GetTextTemplateObject()->SetFont( eFont.GetFont( m_drawing->GetHabitat()->GetTextTemplateObject()->GetFont() ) );
4261  m_drawing->GetHabitat()->GetTextTemplateObject()->SetAlignment( dialog.GetAlignment() );
4262  m_drawing->GetHabitat()->GetTextTemplateObject()->SetTextFlags( dialog.GetTextFlags() );
4263  }
4264  else
4265  {
4266  drawer->GetDrawing()->GetCanvasCommandProcessor()->Submit( new a2dCommand_SetTextChangesMask( top, eFont, dialog.GetAlignment(), a2dCanvasOFlags::BIN2 ) );
4267  }
4268  }
4269  objects->SetSpecificFlags( false, a2dCanvasOFlags::BIN2 );
4270  }
4271  else if ( event.GetId() == CmdMenu_Selected_ConvertToPolygonPolylinesWithArcs().GetId() )
4272  {
4273  found = true;
4275  }
4276  else if ( event.GetId() == CmdMenu_Selected_ConvertToPolygonPolylinesWithoutArcs().GetId() )
4277  {
4278  found = true;
4280  }
4281  else if ( event.GetId() == CmdMenu_Selected_ConvertToPolylines().GetId() )
4282  {
4283  found = true;
4285  }
4286  else if ( event.GetId() == CmdMenu_Selected_ConvertLinesArcs().GetId() )
4287  {
4288  found = true;
4290  }
4291  else if ( event.GetId() == CmdMenu_Selected_CameleonDiagram().GetId() )
4292  {
4293  found = true;
4294  Submit( new a2dCommand_CreateCameleonMask( top, wxT( "" ), a2dCanvasOFlags::SELECTED, false ) );
4295  }
4296  else if ( event.GetId() == CmdMenu_Selected_CameleonSymbol().GetId() )
4297  {
4298  found = true;
4299  Submit( new a2dCommand_CreateCameleonMask( top, wxT( "" ), a2dCanvasOFlags::SELECTED, true ) );
4300  }
4301  else if ( event.GetId() == CmdMenu_Selected_FlattenCameleon().GetId() )
4302  {
4303  found = true;
4304  Submit( new a2dCommand_FlattenCameleonMask( top, wxT( "" ) ) );
4305  }
4306  else if ( event.GetId() == CmdMenu_Selected_CloneCameleonFromInst().GetId() )
4307  {
4308  found = true;
4310  }
4311  if ( found )
4312  {
4313  }
4314  else if ( event.GetId() == CmdMenu_Selected_ConvertToVPaths().GetId() )
4315  {
4316  found = true;
4318  }
4319  else if ( event.GetId() == CmdMenu_Selected_ConvertPolygonToArcs().GetId() )
4320  {
4321  found = true;
4323  }
4324  else if ( event.GetId() == CmdMenu_Selected_ConvertPolylineToArcs().GetId() )
4325  {
4326  found = true;
4328  }
4329  else if ( event.GetId() == CmdMenu_Selected_ConvertPathToPolygon().GetId() )
4330  {
4331  found = true;
4332  }
4333  else if ( event.GetId() == CmdMenu_Selected_ConvertSurfaceToPolygon().GetId() )
4334  {
4335  found = true;
4337  }
4338  else if ( event.GetId() == CmdMenu_Selected_ConvertPolygonToSurface().GetId() )
4339  {
4340  found = true;
4342  }
4343  else if ( event.GetId() == CmdMenu_Selected_UnGroup().GetId() )
4344  {
4345  found = true;
4346  Submit( new a2dCommand_UnGroupMask( top ) );
4347  }
4348  else if ( event.GetId() == CmdMenu_Selected_UnGroupDeep().GetId() )
4349  {
4350  found = true;
4351  a2dCommand_UnGroupMask* command = new a2dCommand_UnGroupMask( top, true );
4352  Submit( command );
4353  }
4354  else if ( event.GetId() == CmdMenu_Selected_Merge().GetId() )
4355  {
4356  found = true;
4357  a2dCommand_MergeMask* command = new a2dCommand_MergeMask( top );
4358  Submit( command );
4359  }
4360  else if ( event.GetId() == CmdMenu_Selected_Offset().GetId() )
4361  {
4362  found = true;
4363  a2dCommand_OffsetMask* command = new a2dCommand_OffsetMask( top );
4364  Submit( command );
4365  }
4366  else if ( event.GetId() == CmdMenu_Selected_CreateRing().GetId() )
4367  {
4368  found = true;
4369  }
4370  else if ( event.GetId() == CmdMenu_GroupAB_Offset().GetId() )
4371  {
4372  found = true;
4375  selectedA( true ) );
4376  Submit( command );
4377  }
4378  else if ( event.GetId() == CmdMenu_GroupAB_Smooth().GetId() )
4379  {
4380  found = true;
4383  selectedA( true ) );
4384  Submit( command );
4385  }
4386  else if ( event.GetId() == CmdMenu_GroupAB_CreateRing().GetId() )
4387  {
4388  found = true;
4391  selectedA( true ) );
4392  Submit( command );
4393  }
4394  else if ( event.GetId() == CmdMenu_GroupAB_Delete().GetId() )
4395  {
4396  found = true;
4398  }
4399  else if ( event.GetId() == CmdMenu_GroupAB_Move().GetId() )
4400  {
4401  found = true;
4403  }
4404  else if ( event.GetId() == CmdMenu_GroupAB_Copy().GetId() )
4405  {
4406  found = true;
4408  }
4409  else if ( event.GetId() == CmdMenu_GroupAB_ToArcs().GetId() )
4410  {
4411  found = true;
4413  }
4414  else if ( event.GetId() == CmdMenu_GroupAB_Or().GetId() )
4415  {
4416  found = true;
4419  Submit( command );
4420  }
4421  else if ( event.GetId() == CmdMenu_GroupAB_And().GetId() )
4422  {
4423  found = true;
4426  Submit( command );
4427  }
4428  else if ( event.GetId() == CmdMenu_GroupAB_Exor().GetId() )
4429  {
4430  found = true;
4433  Submit( command );
4434  }
4435  else if ( event.GetId() == CmdMenu_GroupAB_AsubB().GetId() )
4436  {
4437  found = true;
4440  Submit( command );
4441  }
4442  else if ( event.GetId() == CmdMenu_GroupAB_BsubA().GetId() )
4443  {
4444  found = true;
4447  Submit( command );
4448  }
4449  else if ( event.GetId() == CmdMenu_GroupAB_ConvertSurfaceToPolygon().GetId() )
4450  {
4451  found = true;
4453  }
4454  else if ( event.GetId() == CmdMenu_GroupAB_ConvertPolygonToSurface().GetId() )
4455  {
4456  found = true;
4458  }
4459 
4460  else if ( event.GetId() == CmdMenu_PopTool().GetId() )
4461  {
4462  found = true;
4463  }
4464  else if ( event.GetId() == CmdMenu_PopTool().GetId() )
4465  {
4466  }
4467  else if ( event.GetId() == CmdMenu_InsertGroupRef().GetId() )
4468  {
4469  found = true;
4470  }
4471  /*
4472  else if ( event.GetId() == CmdMenu_LineBegin().GetId() )
4473  {
4474  found = true;
4475  a2dCanvasObjectList total;
4476 
4477  if ( !m_librarypoints )
4478  {
4479  wxMessageBox( _( "point library not loaded" ), _( "Points" ), wxICON_INFORMATION | wxOK );
4480  return;
4481  }
4482  m_librarypoints->GetDrawing()->CollectObjects( &total, _T( "a2dLibraryReference" ), a2dCanvasOFlags::ALL );
4483 
4484  a2dCanvasObjectsDialog objects( NULL, &total, true, ( wxSTAY_ON_TOP | wxRESIZE_BORDER | wxCAPTION ) );
4485  if ( objects.ShowModal() == wxID_OK )
4486  {
4487  a2dCanvasObject* begin = ( ( a2dLibraryReference* )objects.GetCanvasObject() )->GetCanvasObject();
4488  begin->SetPosXY( 0, 0 );
4489  m_drawing->GetHabitat()->SetLineBegin( begin );
4490  }
4491  }
4492 
4493  else if ( event.GetId() == CmdMenu_LineEnd().GetId() )
4494  {
4495  found = true;
4496  a2dCanvasObjectList total;
4497 
4498  if ( !m_librarypoints )
4499  {
4500  wxMessageBox( _( "point library not loaded" ), _( "Points" ), wxICON_INFORMATION | wxOK );
4501  return;
4502  }
4503  m_librarypoints->GetDrawing()->CollectObjects( &total, _T( "a2dLibraryReference" ), a2dCanvasOFlags::ALL );
4504 
4505  a2dCanvasObjectsDialog objects( NULL, &total, true, ( wxSTAY_ON_TOP | wxRESIZE_BORDER | wxCAPTION ) );
4506  if ( objects.ShowModal() == wxID_OK )
4507  {
4508  a2dCanvasObject* end = ( ( a2dLibraryReference* )objects.GetCanvasObject() )->GetCanvasObject();
4509  end->SetPosXY( 0, 0 );
4510  m_drawing->GetHabitat()->SetLineEnd( end );
4511  }
4512  }
4513 */
4514  else if ( event.GetId() == CmdMenu_LineScale().GetId() )
4515  {
4516  found = true;
4517  long w = wxGetNumberFromUser( _( "Give scalex:" ), _( "scalex:" ), _( "scale in x for point" ), 1, 0, 100 );
4518  if ( w == 0 ) w = 1;
4519  m_drawing->GetHabitat()->SetEndScaleX( ( int ) w );
4520  w = wxGetNumberFromUser( _( "Give scaley:" ), _( "scaley:" ), _( "scale in y for point" ), 1, 0, 100 );
4521  if ( w == 0 ) w = 1;
4522  m_drawing->GetHabitat()->SetEndScaleY( ( int ) w );
4523  }
4524 
4525  if ( !found && event.GetId() == CmdMenu_Selected_MoveXY().GetId() )
4526  {
4527  found = true;
4528  m_drawing->GetHabitat()->SetLastXyEntry( 0, 0 );
4529  a2dCoordinateEntry entry( NULL , -1, true, _( "XY for copy" ) );
4530  if ( entry.ShowModal() == wxID_OK )
4531  {
4532  Submit( new a2dCommand_MoveMask( top, entry.m_xcalc, entry.m_ycalc, -1, false ) );
4533  }
4534  }
4535  else if ( event.GetId() == CmdMenu_Selected_MoveLayer().GetId() )
4536  {
4537  found = true;
4538  if ( !m_drawing )
4539  return;
4540  a2dLayerDlg dialog( m_drawing->GetHabitat(), NULL, m_drawing->GetLayerSetup(), false, true, _( "Set Target Layer" ) );
4541  if ( dialog.ShowModal() == wxID_OK )
4542  {
4543  m_drawing->GetHabitat()->SetTarget( dialog.GetSelectedLayer() );
4544  Submit( new a2dCommand_MoveMask( top, 0, 0, -1, true ) );
4545  }
4546  }
4547  else if ( event.GetId() == CmdMenu_Selected_CopyXY().GetId() )
4548  {
4549  found = true;
4550  m_drawing->GetHabitat()->SetLastXyEntry( 0, 0 );
4551  a2dCoordinateEntry entry( NULL , -1, true, _( "XY for copy" ) );
4552  if ( entry.ShowModal() == wxID_OK )
4553  {
4554  Submit( new a2dCommand_CopyMask( top, entry.m_xcalc, entry.m_ycalc, -1, false ) );
4555  }
4556  }
4557  else if ( event.GetId() == CmdMenu_Selected_CopyLayer().GetId() )
4558  {
4559  found = true;
4560  if ( !m_drawing )
4561  return;
4562  a2dLayerDlg dialog( m_drawing->GetHabitat(), NULL, m_drawing->GetLayerSetup(), false, true, _( "Set Target Layer" ) );
4563  if ( dialog.ShowModal() == wxID_OK )
4564  {
4565  m_drawing->GetHabitat()->SetTarget( dialog.GetSelectedLayer() );
4566  Submit( new a2dCommand_CopyMask( top, 0, 0, -1, true ) );
4567  }
4568  }
4569  else if ( event.GetId() == CmdMenu_Selected_Transform().GetId() )
4570  {
4571  found = true;
4572  a2dTransDlg transset( NULL, true );
4573  if ( transset.ShowModal() == wxID_OK )
4574  {
4575  Submit( new a2dCommand_TransformMask( top, transset.m_lworld ) );
4576  }
4577  }
4578  else if ( event.GetId() == CmdMenu_Selected_Rotate().GetId() )
4579  {
4580  found = true;
4581  double angle = wxGetDoubleNumberFromUser( _( "Give angle to rotate:" ), _( "Rotate" ), _( "Angle" ), 0, -180, 180 );
4582 
4583  if ( angle >= -180 && angle < 180 )
4584  {
4585  Submit( new a2dCommand_RotateMask( top, angle ) );
4586  }
4587  else
4588  ( void )wxMessageBox( _( "Angle must be > -180 and < 180" ), _( "Angle" ), wxICON_INFORMATION | wxOK );
4589  }
4590  else if ( event.GetId() == CmdMenu_Selected_Align_MinX().GetId() )
4591  {
4592  found = true;
4593  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MINX ) );
4594  }
4595  else if ( event.GetId() == CmdMenu_Selected_Align_MaxX().GetId() )
4596  {
4597  found = true;
4598  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MAXX ) );
4599  }
4600  else if ( event.GetId() == CmdMenu_Selected_Align_MinY().GetId() )
4601  {
4602  found = true;
4603  if ( GetActiveDrawingPart()->GetDrawer2D()->GetYaxis() )
4604  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MINY ) );
4605  else
4606  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MAXY ) );
4607  }
4608  else if ( event.GetId() == CmdMenu_Selected_Align_MaxY().GetId() )
4609  {
4610  found = true;
4611  if ( GetActiveDrawingPart()->GetDrawer2D()->GetYaxis() )
4612  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MAXY ) );
4613  else
4614  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MINY ) );
4615  }
4616  else if ( event.GetId() == CmdMenu_Selected_Align_MidX().GetId() )
4617  {
4618  found = true;
4619  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MIDX ) );
4620  }
4621  else if ( event.GetId() == CmdMenu_Selected_Align_MidY().GetId() )
4622  {
4623  found = true;
4624  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MIDY ) );
4625  }
4626  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorVert().GetId() )
4627  {
4628  found = true;
4629  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorVert ) );
4630  }
4631  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorHorz().GetId() )
4632  {
4633  found = true;
4634  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorHorz ) );
4635  }
4636  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorVertBbox().GetId() )
4637  {
4638  found = true;
4639  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorVertBbox ) );
4640  }
4641  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorHorzBbox().GetId() )
4642  {
4643  found = true;
4644  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorHorzBbox ) );
4645  }
4646  else if ( event.GetId() == CmdMenu_Selected_Align_DistributeVert().GetId() )
4647  {
4648  found = true;
4649  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::DistributeVert ) );
4650  }
4651  else if ( event.GetId() == CmdMenu_Selected_Align_DistributeHorz().GetId() )
4652  {
4653  found = true;
4654  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::DistributeHorz ) );
4655  }
4656 
4657  else if ( event.GetId() == CmdMenu_Selected_Align_MinX_Dest().GetId() )
4658  {
4659  found = true;
4660  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MINX_Dest ) );
4661  }
4662  else if ( event.GetId() == CmdMenu_Selected_Align_MaxX_Dest().GetId() )
4663  {
4664  found = true;
4665  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MAXX_Dest ) );
4666  }
4667  else if ( event.GetId() == CmdMenu_Selected_Align_MinY_Dest().GetId() )
4668  {
4669  found = true;
4670  if ( GetActiveDrawingPart()->GetDrawer2D()->GetYaxis() )
4671  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MINY_Dest ) );
4672  else
4673  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MAXY_Dest ) );
4674  }
4675  else if ( event.GetId() == CmdMenu_Selected_Align_MaxY_Dest().GetId() )
4676  {
4677  found = true;
4678  if ( GetActiveDrawingPart()->GetDrawer2D()->GetYaxis() )
4679  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MAXY_Dest ) );
4680  else
4681  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MINY_Dest ) );
4682  }
4683  else if ( event.GetId() == CmdMenu_Selected_Align_MidX_Dest().GetId() )
4684  {
4685  found = true;
4686  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MIDX_Dest ) );
4687  }
4688  else if ( event.GetId() == CmdMenu_Selected_Align_MidY_Dest().GetId() )
4689  {
4690  found = true;
4691  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MIDY_Dest ) );
4692  }
4693  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorVert_Dest().GetId() )
4694  {
4695  found = true;
4696  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorVert_Dest ) );
4697  }
4698  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorHorz_Dest().GetId() )
4699  {
4700  found = true;
4701  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorHorz_Dest ) );
4702  }
4703  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorVertBbox_Dest().GetId() )
4704  {
4705  found = true;
4706  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorVertBbox_Dest ) );
4707  }
4708  else if ( event.GetId() == CmdMenu_Selected_Align_MirrorHorzBbox_Dest().GetId() )
4709  {
4710  found = true;
4711  Submit( new a2dCommand_AlignMask( top, a2dCommand_AlignMask::MirrorHorzBbox_Dest ) );
4712  }
4713 
4714  else if ( event.GetId() == CmdMenu_Selected_RotateObject90Right().GetId() )
4715  {
4716  found = true;
4717  Submit( new a2dCommand_RotateMask( top, 90 ) );
4718  }
4719  else if ( event.GetId() == CmdMenu_Selected_RotateObject90Left().GetId() )
4720  {
4721  found = true;
4722  Submit( new a2dCommand_RotateMask( top, -90 ) );
4723  }
4724 
4725  if ( !found && event.GetId() == CmdMenu_SetMasterTool_SelectFirst().GetId() )
4726  {
4727  found = true;
4729  if ( !drawer )
4730  return;
4731  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
4732  if ( !contr )
4733  return;
4734 
4736  tool->SetAllowMultiEdit( false );
4737  tool->SetFastTools( true );
4738  contr->StopAllTools();
4739  contr->SetTopTool( tool );
4740  }
4741  else if ( event.GetId() == CmdMenu_SetMasterTool_ZoomFirst().GetId() )
4742  {
4743  found = true;
4745  if ( !drawer )
4746  return;
4747  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
4748  if ( !contr )
4749  return;
4750 
4751  a2dMasterDrawZoomFirst* tool = new a2dMasterDrawZoomFirst( contr );
4752  tool->SetAllowMultiEdit( false );
4753  tool->SetFastTools( true );
4754  contr->StopAllTools();
4755  contr->SetTopTool( tool );
4756  }
4757  else if ( event.GetId() == CmdMenu_SetMasterTool_TagGroups().GetId() )
4758  {
4759  found = true;
4761  if ( !drawer )
4762  return;
4763  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
4764  if ( !contr )
4765  return;
4766 
4767  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
4768  contr->StopAllTools();
4769  contr->SetTopTool( tool );
4770  }
4771  else if ( event.GetId() == CmdMenu_SetMasterTool_TagGroups_WireMode().GetId() )
4772  {
4773  found = true;
4775  if ( !drawer )
4776  return;
4777  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
4778  if ( !contr )
4779  return;
4780 
4781  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
4782  tool->SetWireMode( true );
4783  contr->StopAllTools();
4784  contr->SetTopTool( tool );
4785  }
4786  else if ( event.GetId() == CmdMenu_SetMasterTool_TagGroups_WireMode_DlgMode().GetId() )
4787  {
4788  found = true;
4790  if ( !drawer )
4791  return;
4792  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
4793  if ( !contr )
4794  return;
4795 
4796  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
4797  tool->SetWireMode( true );
4798  tool->SetDlgOrEdit( true );
4799  tool->SetStyleDlgSimple( true );
4800  tool->SetDlgOrEditModal( true );
4801  contr->StopAllTools();
4802  contr->SetTopTool( tool );
4803  }
4804  else if ( event.GetId() == CmdMenu_SetMasterTool_TagGroups_DlgMode().GetId() )
4805  {
4806  found = true;
4808  if ( !drawer )
4809  return;
4810  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
4811  if ( !contr )
4812  return;
4813 
4814  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
4815  //tool->SetWireMode( true );
4816  tool->SetStyleDlgSimple( true );
4817  tool->SetDlgOrEdit( true );
4818  tool->SetDlgOrEditModal( true );
4819  contr->StopAllTools();
4820  contr->SetTopTool( tool );
4821  }
4822  else if ( event.GetId() == CmdMenu_SetMasterTool_SingleClick().GetId() )
4823  {
4824  found = true;
4826  if ( !drawer )
4827  return;
4828  a2dStToolContr* contr = wxDynamicCast( drawer->GetCanvasToolContr(), a2dStToolContr );
4829  if ( !contr )
4830  return;
4831 
4832  a2dMasterSingleClick* tool = new a2dMasterSingleClick( contr );
4833  //tool->SetWireMode( true );
4834  //tool->SetDlgOrEdit( true );
4835  //tool->SetDlgOrEditModal( true );
4836  contr->StopAllTools();
4837  contr->SetTopTool( tool );
4838  }
4839  else if ( event.GetId() == CmdMenu_SetLayerDlg().GetId() )
4840  {
4841  found = true;
4842 
4843  a2dLayerDlg dialog( m_drawing->GetHabitat(), NULL, m_drawing->GetLayerSetup(), false, false, _( "Set Layer" ) );
4844  if ( dialog.ShowModal() == wxID_OK )
4845  {
4846  m_drawing->GetHabitat()->SetLayer( dialog.GetSelectedLayer(), false );
4847  }
4848  }
4849  else if ( event.GetId() == CmdMenu_SetTargetDlg().GetId() )
4850  {
4851  found = true;
4852 
4853  a2dLayerDlg dialog( m_drawing->GetHabitat(), NULL, m_drawing->GetLayerSetup(), false, true, _( "Set Target Layer" ) );
4854  if ( dialog.ShowModal() == wxID_OK )
4855  {
4856  m_drawing->GetHabitat()->SetTarget( dialog.GetSelectedLayer() );
4857  }
4858  }
4859  else if ( event.GetId() == CmdMenu_SetLayerDlgModeless().GetId() )
4860  {
4861  found = true;
4862 
4863  if ( !m_layerChooseDlg )
4864  {
4865  m_layerChooseDlg = new a2dLayerDlg( m_drawing->GetHabitat(), NULL, m_drawing->GetLayerSetup(), false, false, _( "Set Layer" ) );
4866  }
4867 
4868  if ( !m_layerChooseDlg->IsShown() )
4869  {
4870  m_layerChooseDlg->Init( m_drawing->GetLayerSetup() );
4871  m_layerChooseDlg->Show( true );
4872  }
4873  else
4874  {
4875  m_layerChooseDlg->Show( false );
4876  }
4877  }
4878  else if (
4879  event.GetId() == CmdMenu_ShowDlgLayersDrawing().GetId() ||
4880  event.GetId() == CmdMenu_ShowDlgLayersGlobal().GetId()
4881  )
4882  {
4883  found = true;
4884 
4885  if ( !m_layersdlg )
4886  {
4887  m_layersdlg = new LayerPropertiesDialog( m_drawing->GetHabitat(), NULL, NULL, _( "Layer of Document" ), style | wxRESIZE_BORDER );
4888  }
4889 
4890  if ( !m_layersdlg->IsShown() )
4891  {
4892  m_layersdlg->Show( true );
4893  if ( event.GetId() == CmdMenu_ShowDlgLayersDrawing().GetId() )
4894  {
4895  m_layersdlg->Init( m_drawing->GetLayerSetup() );
4896  }
4897  else
4898  m_layersdlg->Init( m_drawing->GetHabitat()->GetLayerSetup() );
4899  }
4900  else
4901  {
4902  m_layersdlg->Show( false );
4903  }
4904  }
4905  else if ( event.GetId() == CmdMenu_ShowDlgLayerOrderDrawing().GetId() ||
4906  event.GetId() == CmdMenu_ShowDlgLayerOrderGlobal().GetId() )
4907  {
4908  found = true;
4909 
4910  if ( !m_layerOrderDlg )
4911  {
4912  m_layerOrderDlg = new a2dLayerOrderDlg( m_drawing->GetHabitat(), NULL, NULL, _( "Layer of Document" ), style | wxRESIZE_BORDER );
4913  }
4914 
4915  if ( !m_layerOrderDlg->IsShown() )
4916  {
4917  if ( event.GetId() == CmdMenu_ShowDlgLayerOrderDrawing().GetId() )
4918  {
4919  m_layerOrderDlg->Init( m_drawing->GetLayerSetup() );
4920  }
4921  else
4922  m_layerOrderDlg->Init( m_drawing->GetHabitat()->GetLayerSetup() );
4923  m_layerOrderDlg->Show( true );
4924  }
4925  else
4926  {
4927  m_layerOrderDlg->Show( false );
4928  }
4929  }
4930  else if ( event.GetId() == CmdMenu_ShowDlgTools().GetId() )
4931  {
4932  found = true;
4933  if ( !m_tooldlg )
4934  m_tooldlg = new ToolDlg( NULL );
4935 
4936  if ( m_tooldlg->IsShown() )
4937  {
4938  m_tooldlg->Show( false );
4939  }
4940  else
4941  {
4942  m_tooldlg->Show( true );
4943  }
4944  }
4945  else if ( event.GetId() == CmdMenu_ShowDlgStyle().GetId() )
4946  {
4947  found = true;
4948  if ( !m_styledlg )
4949  {
4950  m_styledlg = new a2dStyleDialog( m_drawing->GetHabitat(), NULL, style | wxRESIZE_BORDER );
4951  }
4952 
4953  m_styledlg->SetFill( m_drawing->GetHabitat()->GetFill() );
4954  m_styledlg->SetStroke( m_drawing->GetHabitat()->GetStroke() );
4955 
4956  if ( m_styledlg->IsShown() )
4957  {
4958  m_styledlg->Show( false );
4959  }
4960  else
4961  {
4962  m_styledlg->Show( true );
4963  }
4964  }
4965  else if ( event.GetId() == CmdMenu_ShowDlgSnap().GetId() )
4966  {
4967  found = true;
4968  if ( !m_snapSettings )
4969  m_snapSettings = new a2dSnapSettings( m_drawing->GetHabitat(), NULL );
4970  if ( m_snapSettings->IsShown() )
4971  {
4972  m_snapSettings->Show( false );
4973  }
4974  else
4975  {
4976  m_snapSettings->Show( true );
4977  }
4978  }
4979  else if ( event.GetId() == CmdMenu_ShowDlgGroups().GetId() )
4980  {
4981  found = true;
4982  a2dGroupDlg dialog( m_drawing->GetHabitat(), NULL, _( "choose layer groups" ), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER );
4983  if ( dialog.ShowModal() == wxID_OK )
4984  {
4985  }
4986  }
4987  else if ( event.GetId() == CmdMenu_ShowDlgIdentify().GetId() )
4988  {
4989  found = true;
4991  if ( !drawer )
4992  return;
4993 
4994  if ( !m_identifyDlg )
4995  {
4996  m_identifyDlg = new IdentifyDialog( NULL, -1, _( "Identify Selected" ) );
4997  }
4998 
4999  m_identifyDlg->Init( drawer->GetShowObject() );
5000 
5001  if ( !m_identifyDlg->IsShown() )
5002  {
5003  m_identifyDlg->Show( true );
5004  }
5005  }
5006  else if ( event.GetId() == CmdMenu_ShowDlgCoordEntry().GetId() )
5007  {
5008  found = true;
5009  if ( !m_coordEntry )
5010  m_coordEntry = new a2dCoordinateEntry( NULL );
5011  if ( m_coordEntry->IsShown() )
5012  {
5013  m_coordEntry->Show( false );
5014  }
5015  else
5016  {
5017  m_coordEntry->Show( true );
5018  }
5019  }
5020  else if ( event.GetId() == CmdMenu_ShowDlgMeasure().GetId() )
5021  {
5022  found = true;
5023  if ( !m_measure )
5024  m_measure = new a2dMeasureDlg( m_drawing->GetHabitat(), NULL );
5025  if ( m_measure->IsShown() )
5026  {
5027  m_measure->Show( false );
5028  }
5029  else
5030  {
5031  m_measure->Show( true );
5032  }
5033  }
5034  else if ( event.GetId() == CmdMenu_ShowDlgStructure().GetId() )
5035  {
5036  found = true;
5037  if ( !m_structDlg )
5038  {
5039  m_structDlg = new a2dCanvasObjectsDialog( NULL, m_drawing, true, false, ( wxDEFAULT_DIALOG_STYLE | wxSTAY_ON_TOP | wxRESIZE_BORDER ) );
5040  }
5041  if ( m_structDlg->IsShown() )
5042  {
5043  m_structDlg->Show( false );
5044  }
5045  else
5046  {
5047  m_structDlg->Show( true );
5048  m_structDlg->Init( m_drawing );
5049  }
5050  }
5051  else if ( event.GetId() == CmdMenu_ShowDlgStructureModal().GetId() )
5052  {
5053  found = true;
5055  if ( !drawingPart )
5056  return;
5057 
5058  a2dCanvasObjectsDialog groups( NULL, m_drawing, true, true, ( wxDEFAULT_DIALOG_STYLE | wxSTAY_ON_TOP | wxRESIZE_BORDER ) );
5059  if ( groups.ShowModal() == wxID_OK )
5060  {
5061  a2dCommand_SetShowObject* command = new a2dCommand_SetShowObject( drawingPart, a2dCommand_SetShowObject::Args().canvasobject( groups.GetCanvasObject() ) );
5062  m_drawing->GetCanvasCommandProcessor()->Submit( command );
5063  }
5064  }
5065  else if ( event.GetId() == CmdMenu_ShowDlgCameleonModal().GetId() )
5066  {
5067 
5068  found = true;
5070  {
5072  if ( !drawingPart )
5073  return;
5074 
5075  a2dCanvasObjectsChooseDialog structDlg( NULL, a2dCameleon::GetCameleonRoot()->GetChildObjectList(), "" );
5076  if ( structDlg.ShowModal() == wxID_OK )
5077  {
5078  a2dCameleon* cam = wxDynamicCast( structDlg.GetCanvasObject(), a2dCameleon );
5079  if ( cam )
5080  {
5081  drawingPart->SetShowObject( cam->GetAppearances()->GetRootObject() );
5082 /*
5083  if ( cam->GetBuildIn() )
5084  {
5085  a2dCanvasObject* inst = cam->GetBuildIn()->GetBuildIn();
5086  drawingPart->SetShowObject( inst )
5087  }
5088  else if ( cam->GetSymbol() )
5089  {
5090  a2dCameleonInst* caminst = new a2dCameleonInst( 0,0, cam->GetSymbol() );
5091  drawingPart->SetShowObject( inst )
5092  }
5093  else if ( cam->GetDiagram() )
5094  {
5095  a2dCameleonInst* caminst = new a2dCameleonInst( 0,0, cam->GetDiagram() );
5096  drawingPart->SetShowObject( inst )
5097  }
5098 */
5099  drawingPart->SetMappingShowAll();
5100  }
5101  }
5102  }
5103  else
5104  wxLogWarning( _T( "a2dCameleon::GetCameleonRoot() not available" ) );
5105  }
5106  else if ( event.GetId() == CmdMenu_ShowDlgPathSettings().GetId() )
5107  {
5108  found = true;
5109  if ( !m_pathsettings )
5110  m_pathsettings = new a2dPathSettings( m_drawing->GetHabitat(), NULL );
5111  if ( m_pathsettings->IsShown() )
5112  {
5113  m_pathsettings->Show( false );
5114  }
5115  else
5116  {
5117  m_pathsettings->Show( true );
5118  }
5119  }
5120  else if ( event.GetId() == CmdMenu_ShowDlgSettings().GetId() )
5121  {
5122  found = true;
5123  if ( !m_settings )
5124  m_settings = new a2dSettings( m_drawing->GetHabitat(), NULL );
5125  if ( m_settings->IsShown() )
5126  {
5127  m_settings->Show( false );
5128  }
5129  else
5130  {
5131  m_settings->Show( true );
5132  }
5133  }
5134  else if ( event.GetId() == CmdMenu_ShowDlgTrans().GetId() )
5135  {
5136  found = true;
5137  if ( !m_transset )
5138  m_transset = new a2dTransDlg( NULL );
5139  if ( m_transset->IsShown() )
5140  {
5141  m_transset->Show( false );
5142  }
5143  else
5144  {
5145  m_transset->Show( true );
5146  }
5147  }
5148  else if ( event.GetId() == CmdMenu_ShowDlgPropEdit().GetId() )
5149  {
5150  found = true;
5151  /*
5152  if ( !m_propEdit )
5153  m_propEdit = new a2dPropertyEditorDlg(NULL );
5154  if ( m_propEdit->IsShown() )
5155  {
5156  m_propEdit->Show(false);
5157  }
5158  else
5159  {
5160  m_propEdit->Show(true);
5161  }
5162  */
5163  }
5164  else if ( event.GetId() == CmdMenu_SetFont().GetId() )
5165  {
5166  found = true;
5167  a2dTextPropDlg dialog( NULL );
5168  if ( dialog.ShowModal() == wxID_OK )
5169  {
5170  m_drawing->GetHabitat()->SetFont( dialog.GetFontData() );
5171  }
5172  }
5173  else if ( event.GetId() == CmdMenu_PrintDrawing().GetId() )
5174  {
5175  found = true;
5176  if ( !GetActiveDrawingPart() )
5177  return;
5178 
5179  Print( a2dPRINT_PrintDrawing );
5180  }
5181  else if ( event.GetId() == CmdMenu_PreviewDrawing().GetId() )
5182  {
5183  found = true;
5184  if ( !GetActiveDrawingPart() )
5185  return;
5186 
5187  Preview( a2dPRINT_PreviewDrawing );
5188  }
5189  else if ( event.GetId() == CmdMenu_PrintDrawingPart().GetId() )
5190  {
5191  found = true;
5192  if ( !GetActiveDrawingPart() )
5193  return;
5194 
5195  Print( a2dPRINT_PrintDrawingPart );
5196  }
5197  else if ( event.GetId() == CmdMenu_PreviewDrawingPart().GetId() )
5198  {
5199  found = true;
5200  if ( !GetActiveDrawingPart() )
5201  return;
5202 
5203  Preview( a2dPRINT_PreviewDrawingPart );
5204  }
5205 
5206 
5207  if ( !found )
5208  event.Skip();
5209  else
5210  a2dGeneralGlobals->SendToLogTarget();
5211 }
5212 
5213 void a2dCanvasCommandProcessor::OnPushToolMenu( wxCommandEvent& event )
5214 {
5215  bool found = false;
5216 
5217  if ( !m_drawing )
5218  return;
5219 
5220  a2dDrawing* drawing = m_drawing;
5221 
5222  a2dCanvasObject* top = GetActiveDrawingPart()->GetShowObject();
5223 
5224  //One shot versions
5225  if ( event.GetId() == CmdMenu_PushTool_Zoom_OneShot().GetId() )
5226  {
5227  found = true;
5228  PushTool( a2dZoomTool::COMID_PushTool_Zoom, false, true );
5229  }
5230  else if ( event.GetId() == CmdMenu_PushTool_Select_OneShot().GetId() )
5231  {
5232  found = true;
5233  PushTool( a2dSelectTool::COMID_PushTool_Select, false, true );
5234  }
5235  else if ( event.GetId() == CmdMenu_PushTool_Select2_OneShot().GetId() )
5236  {
5237  found = true;
5238  PushTool( a2dSelectTool::COMID_PushTool_Select, true, true );
5239  }
5240  else if ( event.GetId() == CmdMenu_PushTool_FastSelect_OneShot().GetId() )
5241  {
5242  found = true;
5243  PushTool( a2dFastSelect::COMID_PushTool_FastSelect, false, true );
5244  }
5245  else if ( event.GetId() == CmdMenu_PushTool_FastSelect2_OneShot().GetId() )
5246  {
5247  found = true;
5248  PushTool( a2dFastSelect::COMID_PushTool_FastSelect, true, true );
5249  }
5250  else if ( event.GetId() == CmdMenu_PushTool_RecursiveEdit_OneShot().GetId() )
5251  {
5252  found = true;
5253  PushTool( a2dRecursiveEditTool::COMID_PushTool_RecursiveEdit, false, true );
5254  }
5255  else if ( event.GetId() == CmdMenu_PushTool_MultiEdit_OneShot().GetId() )
5256  {
5257  found = true;
5258  PushTool( a2dMultiEditTool::COMID_PushTool_MultiEdit, false, true );
5259  }
5260  else if ( event.GetId() == CmdMenu_PushTool_DragOriginal_OneShot().GetId() )
5261  {
5262  found = true;
5263  PushTool( a2dDragOrgTool::COMID_PushTool_DragOrg, false, true );
5264  }
5265  else if ( event.GetId() == CmdMenu_PushTool_Drag_OneShot().GetId() )
5266  {
5267  found = true;
5268  PushTool( a2dDragTool::COMID_PushTool_Drag, false, true );
5269  }
5270  else if ( event.GetId() == CmdMenu_PushTool_Copy_OneShot().GetId() )
5271  {
5272  found = true;
5273  PushTool( a2dCopyTool::COMID_PushTool_Copy, false, true );
5274  }
5275  else if ( event.GetId() == CmdMenu_PushTool_Rotate_OneShot().GetId() )
5276  {
5277  found = true;
5278  PushTool( a2dRotateTool::COMID_PushTool_Rotate, false, true );
5279  }
5280  else if ( event.GetId() == CmdMenu_PushTool_Delete_OneShot().GetId() )
5281  {
5282  found = true;
5283  PushTool( a2dDeleteTool::COMID_PushTool_Delete, false, true );
5284  }
5285  else if ( event.GetId() == CmdMenu_PushTool_DrawText_OneShot().GetId() )
5286  {
5287  found = true;
5288  PushTool( a2dDrawTextTool::COMID_PushTool_DrawText, false, true );
5289  }
5290  else if ( event.GetId() == CmdMenu_PushTool_Image_OneShot().GetId() )
5291  {
5292  found = true;
5293  PushTool( a2dImageTool::COMID_PushTool_Image, false, true);
5294  }
5295  else if ( event.GetId() == CmdMenu_PushTool_DrawCircleFast_OneShot().GetId() )
5296  {
5297  found = true;
5299  }
5300  else if ( event.GetId() == CmdMenu_PushTool_DrawLine_OneShot().GetId() )
5301  {
5302  found = true;
5303  PushTool( a2dDrawLineTool::COMID_PushTool_DrawLine, false, true );
5304  }
5305  else if ( event.GetId() == CmdMenu_PushTool_DrawLineScaledArrow_OneShot().GetId() )
5306  {
5307  found = true;
5308  PushTool( a2dDrawLineTool::COMID_PushTool_DrawLineScaledArrow, false, true );
5309  }
5310  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipse_OneShot().GetId() )
5311  {
5312  found = true;
5313  PushTool( a2dDrawEllipseTool::COMID_PushTool_DrawEllipse, false, true );
5314  }
5315  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc_OneShot().GetId() )
5316  {
5317  found = true;
5319  }
5320  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc_Chord_OneShot().GetId() )
5321  {
5322  found = true;
5324  }
5325  else if ( event.GetId() == CmdMenu_PushTool_DrawArc_OneShot().GetId() )
5326  {
5327  found = true;
5328  PushTool( a2dDrawArcTool::COMID_PushTool_DrawArc, false, true );
5329  }
5330  else if ( event.GetId() == CmdMenu_PushTool_DrawArc_Chord_OneShot().GetId() )
5331  {
5332  found = true;
5333  PushTool( a2dDrawArcTool::COMID_PushTool_DrawArc_Chord, false, true );
5334  }
5335  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL_OneShot().GetId() )
5336  {
5337  found = true;
5338  PushTool( a2dDrawPolylineLTool::COMID_PushTool_DrawPolylineL, false, true );
5339  }
5340  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL_OneShot().GetId() )
5341  {
5342  found = true;
5343  PushTool( a2dDrawPolygonLTool::COMID_PushTool_DrawPolygonL, false, true );
5344  }
5345  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL_Splined_OneShot().GetId() )
5346  {
5347  found = true;
5349  }
5350  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL_Splined_OneShot().GetId() )
5351  {
5352  found = true;
5354  }
5355  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonLFast_OneShot().GetId() )
5356  {
5357  found = true;
5359  }
5360  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineLFast_OneShot().GetId() )
5361  {
5362  found = true;
5364  }
5365  else if ( event.GetId() == CmdMenu_PushTool_Property_OneShot().GetId() )
5366  {
5367  found = true;
5368  PushTool( a2dPropertyTool::COMID_PushTool_Property, false, true );
5369  }
5370  else if ( event.GetId() == CmdMenu_PushTool_FastDragMulti_OneShot().GetId() )
5371  {
5372  found = true;
5374  }
5375  else if ( event.GetId() == CmdMenu_PushTool_FastCopyMulti().GetId() )
5376  {
5377  found = true;
5378  PushTool( a2dFastCopyMultiTool::COMID_PushTool_FastCopyMulti, false, true );
5379  }
5380  else if ( event.GetId() == CmdMenu_PushTool_Measure_OneShot().GetId() )
5381  {
5382  found = true;
5383  PushTool( a2dMeasureTool::COMID_PushTool_Measure, false, true );
5384 /*todo
5385  if ( !m_measure )
5386  m_measure = new a2dMeasureDlg( NULL );
5387  if ( !m_measure->IsShown() )
5388  m_measure->Show( true );
5389 */
5390  }
5391  else if ( event.GetId() == CmdMenu_PushTool_DrawWirePolylineL_OneShot().GetId() )
5392  {
5393  found = true;
5395  }
5396  else if ( event.GetId() == CmdMenu_PushTool_DragMulti_OneShot().GetId() )
5397  {
5398  found = true;
5399  PushTool( a2dDragMultiTool::COMID_PushTool_DragMulti, false, true );
5400  }
5401  else if ( event.GetId() == CmdMenu_PushTool_CopyMulti_OneShot().GetId() )
5402  {
5403  found = true;
5404  PushTool( a2dCopyMultiTool::COMID_PushTool_CopyMulti, false, true );
5405  }
5406  else if ( event.GetId() == CmdMenu_PushTool_DrawRectangle_OneShot().GetId() )
5407  {
5408  found = true;
5409  PushTool( a2dDrawRectangleTool::COMID_PushTool_DrawRectangle, false, true );
5410  }
5411  else if ( event.GetId() == CmdMenu_PushTool_DrawCircle_OneShot().GetId() )
5412  {
5413  found = true;
5414  PushTool( a2dDrawCircleTool::COMID_PushTool_DrawCircle, false, true );
5415  }
5416  else if ( event.GetId() == CmdMenu_PushTool_DrawVPath_OneShot().GetId() )
5417  {
5418  found = true;
5419  PushTool( a2dDrawVPathTool::COMID_PushTool_DrawVPath, false, true );
5420  }
5421 
5422  //N shot versions
5423  else if ( event.GetId() == CmdMenu_PushTool_Zoom().GetId() )
5424  {
5425  found = true;
5427  }
5428  else if ( event.GetId() == CmdMenu_PushTool_Select().GetId() )
5429  {
5430  found = true;
5432  }
5433  else if ( event.GetId() == CmdMenu_PushTool_Select2().GetId() )
5434  {
5435  found = true;
5436  PushTool( a2dSelectTool::COMID_PushTool_Select, true );
5437  }
5438  else if ( event.GetId() == CmdMenu_PushTool_FastSelect().GetId() )
5439  {
5440  found = true;
5442  }
5443  else if ( event.GetId() == CmdMenu_PushTool_FastSelect2().GetId() )
5444  {
5445  found = true;
5446  PushTool( a2dFastSelect::COMID_PushTool_FastSelect, true );
5447  }
5448  else if ( event.GetId() == CmdMenu_PushTool_RecursiveEdit().GetId() )
5449  {
5450  found = true;
5452  }
5453  else if ( event.GetId() == CmdMenu_PushTool_MultiEdit().GetId() )
5454  {
5455  found = true;
5457  }
5458  else if ( event.GetId() == CmdMenu_PushTool_DragOriginal().GetId() )
5459  {
5460  found = true;
5462  }
5463  else if ( event.GetId() == CmdMenu_PushTool_Drag().GetId() )
5464  {
5465  found = true;
5467  }
5468  else if ( event.GetId() == CmdMenu_PushTool_Copy().GetId() )
5469  {
5470  found = true;
5472  }
5473  else if ( event.GetId() == CmdMenu_PushTool_Rotate().GetId() )
5474  {
5475  found = true;
5477  }
5478  else if ( event.GetId() == CmdMenu_PushTool_Delete().GetId() )
5479  {
5480  found = true;
5482  }
5483  else if ( event.GetId() == CmdMenu_PushTool_DrawText().GetId() )
5484  {
5485  found = true;
5487  }
5488  else if ( event.GetId() == CmdMenu_PushTool_Image().GetId() )
5489  {
5490  found = true;
5492  }
5493  else if ( event.GetId() == CmdMenu_PushTool_DrawRectangleFast().GetId() )
5494  {
5495  found = true;
5497  }
5498  else if ( event.GetId() == CmdMenu_PushTool_DrawCircleFast().GetId() )
5499  {
5500  found = true;
5502  }
5503  else if ( event.GetId() == CmdMenu_PushTool_DrawLine().GetId() )
5504  {
5505  found = true;
5507  }
5508  else if ( event.GetId() == CmdMenu_PushTool_DrawLineScaledArrow().GetId() )
5509  {
5510  found = true;
5511  PushTool( a2dDrawLineTool::COMID_PushTool_DrawLineScaledArrow );
5512  }
5513  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipse().GetId() )
5514  {
5515  found = true;
5517  }
5518  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc().GetId() )
5519  {
5520  found = true;
5522  }
5523  else if ( event.GetId() == CmdMenu_PushTool_DrawEllipticArc_Chord().GetId() )
5524  {
5525  found = true;
5527  }
5528  else if ( event.GetId() == CmdMenu_PushTool_DrawArc().GetId() )
5529  {
5530  found = true;
5532  }
5533  else if ( event.GetId() == CmdMenu_PushTool_DrawArc_Chord().GetId() )
5534  {
5535  found = true;
5537  }
5538  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL().GetId() )
5539  {
5540  found = true;
5542  }
5543  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL().GetId() )
5544  {
5545  found = true;
5547  }
5548  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineL_Splined().GetId() )
5549  {
5550  found = true;
5552  }
5553  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonL_Splined().GetId() )
5554  {
5555  found = true;
5557  }
5558  else if ( event.GetId() == CmdMenu_PushTool_DrawPolygonLFast().GetId() )
5559  {
5560  found = true;
5562  }
5563  else if ( event.GetId() == CmdMenu_PushTool_DrawPolylineLFast().GetId() )
5564  {
5565  found = true;
5567  }
5568  else if ( event.GetId() == CmdMenu_PushTool_Property().GetId() )
5569  {
5570  found = true;
5572  }
5573  else if ( event.GetId() == CmdMenu_PushTool_FastDragMulti().GetId() )
5574  {
5575  found = true;
5577  }
5578  else if ( event.GetId() == CmdMenu_PushTool_FastCopyMulti().GetId() )
5579  {
5580  found = true;
5582  }
5583  else if ( event.GetId() == CmdMenu_PushTool_Measure().GetId() )
5584  {
5585  found = true;
5587 /*todo
5588  if ( !m_measure )
5589  m_measure = new a2dMeasureDlg( NULL );
5590  if ( !m_measure->IsShown() )
5591  m_measure->Show( true );
5592 */
5593  }
5594  else if ( event.GetId() == CmdMenu_PushTool_DrawWirePolylineL().GetId() )
5595  {
5596  found = true;
5598  }
5599  else if ( event.GetId() == CmdMenu_PushTool_DragMulti().GetId() )
5600  {
5601  found = true;
5603  }
5604  else if ( event.GetId() == CmdMenu_PushTool_CopyMulti().GetId() )
5605  {
5606  found = true;
5608  }
5609  else if ( event.GetId() == CmdMenu_PushTool_DrawRectangle().GetId() )
5610  {
5611  found = true;
5613  }
5614  else if ( event.GetId() == CmdMenu_PushTool_DrawCircle().GetId() )
5615  {
5616  found = true;
5618  }
5619  else if ( event.GetId() == CmdMenu_PushTool_DrawVPath().GetId() )
5620  {
5621  found = true;
5623  }
5624  else if ( event.GetId() == CmdMenu_PushTool_Port().GetId() )
5625  {
5626  found = true;
5627 
5628  a2dPort* port = new a2dPort( 0, 0, wxT("port_") );
5629  //port->GetPin()->SetPinClass( a2dPinClass::Standard );
5630  port->SetStroke( a2dStroke( wxColour( 0, 24, 255 ), 0 ) );
5631  port->SetFill( a2dFill( wxColour( 255, 0, 0 ) ) );
5632  PushToolDragNew( port, CmdMenu_PushTool_Port(), false );
5633  }
5634  else if ( event.GetId() == CmdMenu_PushTool_Cameleon().GetId() )
5635  {
5636  found = true;
5637 
5638  a2dCamCreate camdlg( NULL, m_drawing->GetHabitat() );
5639  if ( camdlg.ShowModal() == wxID_OK )
5640  {
5641  a2dCameleon* cam = camdlg.m_cameleon;
5642  cam->AddToRoot();
5643 
5645  if ( !drawingPart )
5646  return;
5647  if ( drawingPart->GetShowObject() != cam->GetCameleonRoot() )
5648  {
5649  a2dCameleonInst* caminst = new a2dCameleonInst( 0,0, cam->GetDiagram() );
5650  PushToolDragNew( caminst, CmdMenu_PushTool_Cameleon() );
5651  }
5652  }
5653  }
5654  else if ( event.GetId() == CmdMenu_PushTool_Cameleon_BuildIn().GetId() )
5655  {
5656  found = true;
5657  wxString name = wxGetTextFromUser( _( "give Build in Canvas Object it's ClassName:" ) );
5658  wxObject* create = wxCreateDynamicObject( name );
5659  a2dCanvasObject* buildIn = wxDynamicCast( create, a2dCanvasObject );
5660  if ( buildIn )
5661  {
5662  a2dCameleon* cam = new a2dCameleon( wxT("cameleon_") );
5663  cam->AddToRoot();
5664  a2dBuildIn* appear = new a2dBuildIn( cam, 0,0, buildIn );
5665  appear->SetName( name );
5666  cam->AddAppearance( appear );
5667  cam->SetName( name );
5668  //PushToolDragNew( cam, CmdMenu_PushTool_Cameleon_BuildIn().GetId() );
5669  }
5670  else
5671  wxLogWarning( _T( "This BuildIn object not available" ) );
5672  }
5673  else if ( event.GetId() == CmdMenu_PushTool_CameleonInst().GetId() )
5674  {
5675  found = true;
5677  {
5678  wxString name = wxGetTextFromUser( _( "give a2dCameleon name:" ) );
5679  if ( ! name.IsEmpty() )
5680  {
5681  a2dCameleon* cam = wxDynamicCast( a2dCameleon::GetCameleonRoot()->GetChildObjectList()->Find( name, "a2dCameleon" ), a2dCameleon );
5682  if ( cam )
5683  {
5684  if ( cam->GetBuildIn() )
5685  {
5686  a2dCanvasObject* inst = cam->GetBuildIn()->GetBuildIn();
5687  PushToolDragNew( inst, CmdMenu_PushTool_CameleonInst() );
5688  }
5689  else if ( cam->GetSymbol() )
5690  {
5691  a2dCameleonInst* caminst = new a2dCameleonInst( 0,0, cam->GetSymbol() );
5692  PushToolDragNew( caminst, CmdMenu_PushTool_CameleonInst() );
5693  }
5694  else if ( cam->GetDiagram() )
5695  {
5696  a2dCameleonInst* caminst = new a2dCameleonInst( 0,0, cam->GetDiagram() );
5697  PushToolDragNew( caminst, CmdMenu_PushTool_CameleonInst() );
5698  }
5699  }
5700  else
5701  wxLogWarning( _T( "A a2dcameleon with this name does not exist" ) );
5702  }
5703  }
5704  else
5705  wxLogWarning( _T( "a2dCameleon::GetCameleonRoot() not available" ) );
5706  }
5707  else if ( event.GetId() == CmdMenu_PushTool_CameleonInstDlg().GetId() )
5708  {
5709  found = true;
5711  {
5712  a2dCanvasObjectsChooseDialog structDlg( NULL, a2dCameleon::GetCameleonRoot()->GetChildObjectList(), "", SYMBOL_A2DCHOOSE_STYLE, SYMBOL_A2DCHOOSE_IDNAME, SYMBOL_A2DCHOOSE_TITLE, SYMBOL_A2DCHOOSE_POSITION, wxSize( 200, 600) );
5713  if ( structDlg.ShowModal() == wxID_OK )
5714  {
5715  a2dCameleon* cam = wxDynamicCast( structDlg.GetCanvasObject(), a2dCameleon );
5716  if ( cam )
5717  {
5718  if ( cam->GetBuildIn() )
5719  {
5720  a2dCanvasObject* inst = cam->GetBuildIn()->GetBuildIn();
5721  PushToolDragNew( inst, CmdMenu_PushTool_CameleonInstDlg() );
5722  }
5723  else if ( cam->GetSymbol() )
5724  {
5725  a2dCameleonInst* caminst = new a2dCameleonInst( 0,0, cam->GetSymbol() );
5726  PushToolDragNew( caminst, CmdMenu_PushTool_CameleonInstDlg() );
5727  }
5728  else if ( cam->GetDiagram() )
5729  {
5730  a2dCameleonInst* caminst = new a2dCameleonInst( 0,0, cam->GetDiagram() );
5731  PushToolDragNew( caminst, CmdMenu_PushTool_CameleonInstDlg() );
5732  }
5733  }
5734  }
5735  }
5736  else
5737  wxLogWarning( _T( "a2dCameleon::GetCameleonRoot() not available" ) );
5738  }
5739  else if ( event.GetId() == CmdMenu_PushTool_CameleonRefDlg_Diagram().GetId() )
5740  {
5741  found = true;
5743  {
5744  a2dCanvasObjectsChooseDialog structDlg( NULL, a2dCameleon::GetCameleonRoot()->GetChildObjectList(), "a2dDiagram" );
5745  if ( structDlg.ShowModal() == wxID_OK )
5746  {
5747  a2dDiagram* diacam = wxDynamicCast( structDlg.GetCanvasObject(), a2dDiagram );
5748  if ( diacam )
5749  {
5750  a2dCameleonSymbolicRef* caminst = new a2dCameleonSymbolicRef( 0,0, diacam );
5751  PushToolDragNew( caminst, CmdMenu_PushTool_CameleonRefDlg_Diagram() );
5752  }
5753  else
5754  wxLogWarning( _T( "Diagram not available choosen" ) );
5755  }
5756  }
5757  else
5758  wxLogWarning( _T( "a2dCameleon::GetCameleonRoot() not available" ) );
5759  }
5760  else if ( event.GetId() == CmdMenu_PushTool_CameleonRefDlg_Symbol().GetId() )
5761  {
5762  found = true;
5764  {
5765  a2dCanvasObjectsChooseDialog structDlg( NULL, a2dCameleon::GetCameleonRoot()->GetChildObjectList(), "a2dSymbol" );
5766  if ( structDlg.ShowModal() == wxID_OK )
5767  {
5768  a2dSymbol* symcam = wxDynamicCast( structDlg.GetCanvasObject(), a2dSymbol );
5769  if ( symcam )
5770  {
5771  a2dCameleonSymbolicRef* caminst = new a2dCameleonSymbolicRef( 0,0, symcam );
5772  PushToolDragNew( caminst, CmdMenu_PushTool_CameleonRefDlg_Symbol() );
5773  }
5774  else
5775  wxLogWarning( _T( "Symbol not available choosen" ) );
5776  }
5777  }
5778  else
5779  wxLogWarning( _T( "a2dCameleon::GetCameleonRoot() not available" ) );
5780  }
5781  else if ( event.GetId() == CmdMenu_PushTool_CameleonRefDlg().GetId() )
5782  {
5783  found = true;
5785  {
5786  a2dCanvasObjectsChooseDialog structDlg( NULL, a2dCameleon::GetCameleonRoot()->GetChildObjectList(), "" );
5787  if ( structDlg.ShowModal() == wxID_OK )
5788  {
5789  a2dCameleon* cam = wxDynamicCast( structDlg.GetCanvasObject(), a2dCameleon );
5790  if ( cam )
5791  {
5792  a2dCameleonSymbolicRef* caminst = new a2dCameleonSymbolicRef( 0,0, cam );
5793  PushToolDragNew( caminst, CmdMenu_PushTool_CameleonRefDlg() );
5794  }
5795  }
5796  }
5797  else
5798  wxLogWarning( _T( "a2dCameleon::GetCameleonRoot() not available" ) );
5799  }
5800  else if ( event.GetId() == CmdMenu_PushTool_TagGroups().GetId() )
5801  {
5802  found = true;
5803  if ( !GetActiveDrawingPart() )
5804  return;
5805 
5806  a2dStToolContr* contr = wxDynamicCast( GetActiveDrawingPart()->GetCanvasToolContr(), a2dStToolContr );
5807  if ( contr )
5808  {
5809  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
5810  tool->SetInitiatingMenuId( CmdMenu_PushTool_TagGroups() );
5811  contr->PushTool( tool );
5812  }
5813  }
5814  else if ( event.GetId() == CmdMenu_PushTool_TagGroups_WireMode().GetId() )
5815  {
5816  found = true;
5817  if ( !GetActiveDrawingPart() )
5818  return;
5819 
5820  a2dStToolContr* contr = wxDynamicCast( GetActiveDrawingPart()->GetCanvasToolContr(), a2dStToolContr );
5821  if ( contr )
5822  {
5823  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
5824  tool->SetInitiatingMenuId( CmdMenu_PushTool_TagGroups_WireMode() );
5825  tool->SetWireMode( true );
5826  contr->PushTool( tool );
5827  }
5828  }
5829  else if ( event.GetId() == CmdMenu_PushTool_TagGroups_DlgMode().GetId() )
5830  {
5831  found = true;
5832  if ( !GetActiveDrawingPart() )
5833  return;
5834 
5835  a2dStToolContr* contr = wxDynamicCast( GetActiveDrawingPart()->GetCanvasToolContr(), a2dStToolContr );
5836  if ( contr )
5837  {
5838  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
5839  tool->SetInitiatingMenuId( CmdMenu_PushTool_TagGroups_DlgMode() );
5840  tool->SetDlgOrEdit( true );
5841  tool->SetDlgOrEditModal( true );
5842  contr->PushTool( tool );
5843  }
5844  }
5845  else if ( event.GetId() == CmdMenu_PushTool_TagGroups_WireMode_DlgMode().GetId() )
5846  {
5847  found = true;
5848  if ( !GetActiveDrawingPart() )
5849  return;
5850 
5851  a2dStToolContr* contr = wxDynamicCast( GetActiveDrawingPart()->GetCanvasToolContr(), a2dStToolContr );
5852  if ( contr )
5853  {
5854  a2dMasterTagGroups3* tool = new a2dMasterTagGroups3( contr );
5855  tool->SetInitiatingMenuId( CmdMenu_PushTool_TagGroups_WireMode_DlgMode() );
5856  tool->SetWireMode( true );
5857  tool->SetDlgOrEdit( true );
5858  tool->SetDlgOrEditModal( true );
5859  contr->PushTool( tool );
5860  }
5861  }
5862  else if ( event.GetId() == CmdMenu_PushTool_SingleClick().GetId() )
5863  {
5864  found = true;
5865  if ( !GetActiveDrawingPart() )
5866  return;
5867 
5868  a2dStToolContr* contr = wxDynamicCast( GetActiveDrawingPart()->GetCanvasToolContr(), a2dStToolContr );
5869  if ( contr )
5870  {
5871  a2dMasterSingleClick* tool = new a2dMasterSingleClick( contr );
5872  tool->SetInitiatingMenuId( CmdMenu_PushTool_SingleClick() );
5873  contr->PushTool( tool );
5874  }
5875  }
5876 
5877  if ( !found )
5878  event.Skip();
5879 }
5880 
5881 void a2dCanvasCommandProcessor::SetPageSetupData( wxPageSetupDialogData* pageSetupData )
5882 {
5883 #if wxUSE_PRINTING_ARCHITECTURE
5884  if( m_pageSetupData )
5885  delete m_pageSetupData;
5886  m_pageSetupData = pageSetupData;
5887 #endif
5888 }
5889 
5890 bool a2dCanvasCommandProcessor::Print( wxUint16 printWhat )
5891 {
5892 #if wxUSE_PRINTING_ARCHITECTURE
5893  a2dDrawingPart* drawingPart = GetActiveDrawingPart();
5894  if ( !drawingPart )
5895  return false;
5896 
5897  wxPageSetupDialogData* aPageSetupData = GetPageSetupData();
5898 
5899  wxPrintDialogData printDialogData( aPageSetupData->GetPrintData() );
5900 
5901  wxPrintout* printout = drawingPart->OnCreatePrintout( printWhat, *aPageSetupData );
5902  if ( printout )
5903  {
5904  wxPrinter printer( &printDialogData );
5905  if( printer.Print( drawingPart->GetDisplayWindow(), printout, true ) )
5906  aPageSetupData->SetPrintData( printer.GetPrintDialogData().GetPrintData() );
5907 
5908  delete printout;
5909  }
5910 #endif // wxUSE_PRINTING_ARCHITECTURE
5911  return true;
5912 }
5913 
5914 bool a2dCanvasCommandProcessor::Preview( wxUint16 printWhat )
5915 {
5916 #if wxUSE_PRINTING_ARCHITECTURE
5917  a2dDrawingPart* drawingPart = GetActiveDrawingPart();
5918  if ( !drawingPart )
5919  return false;
5920 
5921  wxPageSetupDialogData* aPageSetupData = GetPageSetupData();
5922 
5923  wxPrintDialogData printDialogData( aPageSetupData->GetPrintData() );
5924 
5925  wxPrintout* printout = drawingPart->OnCreatePrintout( printWhat, *aPageSetupData );
5926  if ( printout )
5927  {
5928  // Pass two printout objects: for preview, and possible printing.
5929  wxPrintPreviewBase* preview = ( wxPrintPreviewBase* ) NULL;
5930  preview = new wxPrintPreview( printout, drawingPart->OnCreatePrintout( printWhat, *aPageSetupData ), &printDialogData );
5931  if ( !preview->Ok() )
5932  {
5933  delete preview;
5934  wxMessageBox( _( "Sorry, print preview needs a printer to be installed." ) );
5935  return false;
5936  }
5937 
5938  wxPreviewFrame* frame = new wxPreviewFrame( preview, ( wxFrame* )wxTheApp->GetTopWindow(), _( "Print Preview" ),
5939  wxPoint( 100, 100 ), wxSize( 600, 650 ) );
5940  frame->Centre( wxBOTH );
5941  frame->Initialize();
5942  frame->Show( true );
5943  }
5944 #endif // wxUSE_PRINTING_ARCHITECTURE
5945  return true;
5946 }
5947 
5949 {
5951  if ( !drawer )
5952  return;
5953  drawer->SetCursor( a2dCanvasGlobals->GetCursor( a2dCURSOR_WAIT ) );
5954  event.Skip();
5955 }
5956 
5958 {
5960  if ( !drawer )
5961  return;
5962  drawer->SetCursor( a2dCanvasGlobals->GetCursor( a2dCURSOR_ARROW ) );
5963  event.Skip();
5964 }
5965 
5966 bool a2dCanvasCommandProcessor::Submit( a2dCommand* command, bool storeIt )
5967 {
5968  wxCHECK_MSG( command, false, _T( "no command in a2dCanvasCommandProcessor::Submit" ) );
5969 
5970  SentBusyEvent( true, command );
5971 
5972  // to properly delete it if needed
5973  a2dSmrtPtr<a2dCommand> lcommand = command;
5974 
5975  ( ( a2dCommand* )command )->SetCommandProcessor( this );
5976  if ( command->IsCommandGroup() )
5977  {
5978  a2dCommandGroup* groupcmd = wxStaticCast( command, a2dCommandGroup );
5979  groupcmd->SetParentGroup( m_currentGroup );
5980  }
5981 
5982  bool oke = false;
5983  try
5984  {
5985  //commands in here will be stored before the actual one.
5986  oke = DoPreCommand( *command );
5987 
5988  //first store, and if not right command, remove it again.
5989  if ( storeIt )
5990  Store( command );
5991 
5992  oke |= DoCommand( *command );
5993 
5994  //commands in here will be stored after the actual one.
5995  oke |= DoPostCommand( *command );
5996  }
5997  catch ( const a2dCommandException& e )
5998  {
5999  a2dGeneralGlobals->ReportErrorF( a2dError_CommandError, _T( "%s" ), e.getMessage().c_str() );
6000  oke = false;
6001  }
6002 
6003  if ( !oke )
6004  {
6005  if ( storeIt )
6006  {
6007  m_currentGroup->Remove( command );
6009  }
6010 
6011  SentBusyEvent( false, command );
6012  // the user code expects the command to be released/deleted
6013  return false;
6014  }
6015 
6016  //UPDATES in idle time, of via forced commando in scripts.
6017  //GetCanvasDocument()->UpdateAllViews( NULL, a2dCANVIEW_UPDATE_OLDNEW );
6018 
6019  SentBusyEvent( false, command );
6020  return true;
6021 }
6022 
6024 {
6025  DeselectAll();
6026  return a2dCommandProcessor::Undo();
6027 }
6028 
6030 {
6031  DeselectAll();
6032  return a2dCommandProcessor::Redo();
6033 }
6034 
6036 {
6037  bool result = true;
6038 
6039  if( objects->size() )
6040  {
6041  a2dCommandGroup* group = 0;
6042 
6043  if( storeIt )
6044  group = CommandGroupBegin( _( "Multiple " ) + command->GetName() );
6045 
6046  for( a2dCanvasObjectList::iterator iter = objects->begin(); iter != objects->end(); ++iter )
6047  {
6048  a2dCanvasObject* obj = *iter;
6049  a2dCommand* clone = command->CloneAndBind( obj );
6050 
6051  if( !Submit( clone, storeIt ) )
6052  result = false;
6053  }
6054 
6055  if( storeIt )
6056  CommandGroupEnd( group );
6057  }
6058 
6059  delete command;
6060 
6061  return result;
6062 }
6063 
6065 {
6066  if ( !m_drawing || !GetActiveDrawingPart() )
6067  return;
6069  GetActiveDrawingPart()->Update( a2dCANVIEW_UPDATE_OLDNEW | a2dCANVIEW_UPDATE_ALL );
6070 }
6071 
6072 void a2dCanvasCommandProcessor::DeselectAll()
6073 {
6074  if ( 0 )
6075  {
6076  a2dCanvasObjectList objects;
6077  GetActiveDrawingPart()->GetShowObject()->CollectObjects( &objects, wxT( "" ), a2dCanvasOFlags::SELECTED );
6080  &objects
6081  );
6082  //GetCanvasCommandProcessor()->Submit( new a2dCommand_Select( m_parentobject, a2dCommand_Select::Args().what( a2dCommand_Select::DeSelectAll ) ) );
6083  }
6084  else
6085  {
6086  a2dCanvasObjectList* objects = GetActiveDrawingPart()->GetShowObject()->GetChildObjectList();
6089  objects->SetSpecificFlags( false, a2dCanvasOFlags::SELECTED );
6090  objects->SetSpecificFlags( false, a2dCanvasOFlags::SELECTED2 );
6091  GetActiveDrawingPart()->GetShowObject()->GetRoot()->SetUpdatesPending( true );
6092  }
6093 }
6094 
6096 {
6097  bool changed = false;
6098  if ( !m_styledlg )
6099  m_styledlg = new a2dStyleDialog( m_drawing->GetHabitat(), NULL, wxDEFAULT_DIALOG_STYLE | wxSTAY_ON_TOP | wxRESIZE_BORDER );
6100 
6101  m_styledlg->SetFill( m_drawing->GetHabitat()->GetFill() );
6102  m_styledlg->SetStroke( m_drawing->GetHabitat()->GetStroke() );
6103 
6104  if ( ! m_styledlg->IsShown() )
6105  {
6106  if ( onOff )
6107  {
6108  changed = true;
6109  m_styledlg->Show( true );
6110  }
6111  }
6112  else
6113  {
6114  if ( !onOff )
6115  {
6116  changed = true;
6117  m_styledlg->Show( false );
6118  }
6119  }
6120  return changed;
6121 }
6122 
6123 bool a2dCanvasCommandProcessor::Zoom( double x1, double y1, double x2, double y2, bool upp )
6124 {
6125  if ( GetActiveDrawingPart() )
6126  {
6127  if ( !upp )
6128  GetActiveDrawingPart()->GetDrawer2D()->SetMappingWidthHeight( x1, y1, x2, y2 );
6129  else
6130  GetActiveDrawingPart()->GetDrawer2D()->SetMappingUpp( x1, y1, x2, y2 );
6131  return true;
6132  }
6133 
6134  a2dGeneralGlobals->ReportError( a2dError_NoView );
6135  return false;
6136 }
6137 
6138 
6139 bool a2dCanvasCommandProcessor::ZoomRealSize( double scaleFromRealSize, bool selected )
6140 {
6141  a2dDrawingPart* part = GetActiveDrawingPart();
6142  if ( !part )
6143  return false;
6144 
6145  a2dDrawer2D* drawer = part->GetDrawer2D();
6146 
6147  wxScreenDC screendc;
6148  wxSize size = screendc.GetPPI();
6149  wxSize sizemm = screendc.GetSizeMM();
6150  double MmInPixels = size.x / 25.4;
6151  double dataUnitsPerMm = 1 / part->GetDrawing()->GetUnitsScale();
6152  double scale = dataUnitsPerMm / MmInPixels; //this many database units per pixel
6153 
6154  scale /= scaleFromRealSize;
6155 
6156  // size of window
6157  int dx, dy;
6158  part->GetDisplayWindow()->GetClientSize( &dx, &dy );
6159  if ( dy > dx ) dx = dy;
6160 
6161  a2dBoundingBox bbox;
6162  if ( selected )
6163  {
6164  //find bbox selected objects
6166  forEachIn( a2dCanvasObjectList, objects )
6167  {
6168  a2dCanvasObject* obj = *iter;
6169  if ( obj->GetRelease() || !obj->IsVisible() || !obj->GetSelected() )
6170  continue;
6171  bbox.Expand( obj->GetBbox() );
6172  }
6173  }
6174 
6175  //fixed point
6176  double x, y;
6177  if ( bbox.GetValid() )
6178  {
6179  // find centre bbox in world coordinates
6180  x = bbox.GetMinX() + bbox.GetWidth()/2.0;
6181  y = bbox.GetMinY() + bbox.GetHeight()/2.0;
6182  double xf = (x - drawer->GetVisibleMinX())/drawer->GetVisibleWidth(); // distance to origin as factor of fullsize
6183  double yf = (y - drawer->GetVisibleMinY())/drawer->GetVisibleHeight(); // distance to origin as factor of fullsize
6184  // origin for new mapping
6185  x -= xf * dx * scale;
6186  y -= yf * dy * scale;
6187  }
6188  else
6189  {
6190  // find centre in world coordinates
6191  x = drawer->GetVisibleMinX() + drawer->GetVisibleWidth()/2.0;
6192  y = drawer->GetVisibleMinY() + drawer->GetVisibleHeight()/2.0;
6193  // origin for new mapping
6194  x -= dx / 2.0 * scale;
6195  y -= dy / 2.0 * scale;
6196  }
6197 
6198  part->GetDrawer2D()->SetMappingUpp( x, y, scale, scale );
6199  return true;
6200 }
6201 
6202 bool a2dCanvasCommandProcessor::Select( double x1, double y1, double x2, double y2 )
6203 {
6204  if ( GetActiveDrawingPart() )
6205  {
6207  return true;
6208  }
6209 
6210  a2dGeneralGlobals->ReportError( a2dError_NoView );
6211  return false;
6212 }
6213 
6214 bool a2dCanvasCommandProcessor::DeSelect( double x1, double y1, double x2, double y2 )
6215 {
6216  if ( GetActiveDrawingPart() )
6217  {
6219  return true;
6220  }
6221 
6222  a2dGeneralGlobals->ReportError( a2dError_NoView );
6223  return false;
6224 }
6225 
6227 {
6228  a2dCanvasObjectList* ret = canvasobject->GetAsPolygons( true );
6229  if ( ret != wxNullCanvasObjectList )
6230  return ret;
6231  return NULL;
6232 /*
6233 
6234  if ( wxDynamicCast( canvasobject, a2dSurface ) ||
6235  wxDynamicCast( canvasobject, a2dPolygonL ) ||
6236  wxDynamicCast( canvasobject, a2dPolylineL )
6237  )
6238  {
6239  return canvasobject->GetAsPolygons( true );
6240  }
6241  else
6242  {
6243  a2dCanvasObjectList* polylist = NULL;
6244  a2dCanvasObjectList* vpath = ConvertToVpath( canvasobject, true );
6245 
6246  // now we have vector path, which we will convert to polygons and polylines.
6247  // Next only the polygons will be used for boolean operations.
6248  if ( vpath != wxNullCanvasObjectList )
6249  {
6250  a2dCanvasObjectList::iterator iter = vpath->begin();
6251  while ( iter != vpath->end() )
6252  {
6253  a2dVectorPath* obj = ( a2dVectorPath* ) ( *iter ).Get();
6254  polylist = obj->GetAsPolygons();
6255 
6256  iter = vpath->erase( iter );
6257  iter = vpath->begin();
6258  }
6259  delete vpath;
6260  }
6261  return polylist;
6262  }
6263 */
6264 }
6265 
6267 {
6269 
6270  if ( wxDynamicCast( canvasobject, a2dRect ) ||
6271  wxDynamicCast( canvasobject, a2dRectC ) ||
6272  wxDynamicCast( canvasobject, a2dArrow ) ||
6273  wxDynamicCast( canvasobject, a2dCircle ) ||
6274  wxDynamicCast( canvasobject, a2dEllipse ) ||
6275  wxDynamicCast( canvasobject, a2dEllipticArc ) ||
6276  wxDynamicCast( canvasobject, a2dArc ) ||
6277  wxDynamicCast( canvasobject, a2dPolygonL ) ||
6278  wxDynamicCast( canvasobject, a2dVectorPath ) ||
6279  wxDynamicCast( canvasobject, a2dText ) ||
6280  wxDynamicCast( canvasobject, a2dEndsLine ) ||
6281  wxDynamicCast( canvasobject, a2dSLine ) ||
6282  wxDynamicCast( canvasobject, a2dPolylineL )
6283  )
6284  {
6285  vpath = canvasobject->GetAsCanvasVpaths( transform );
6286  }
6287  return vpath;
6288 }
6289 
6291 {
6292  if ( parentObject )
6293  m_parent = parentObject;
6294 
6295  m_currentobject = objectToAdd;
6296 
6297  if ( m_currentobject )
6298  m_currentobject->TakeOverProperties( this, setStyles );
6299 
6300  // submit to the current document.
6301  if ( withUndo )
6303  else
6304  {
6305  if ( m_AppendOrPrepend )
6307  else
6309  }
6310 
6311  return m_currentobject;
6312 }
6313 
6314 
6315 void a2dCanvasCommandProcessor::SetCurrentCanvasObject( a2dCanvasObject* currentcanvasobject, bool takeOverProperties )
6316 {
6317  if ( !currentcanvasobject )
6318  currentcanvasobject = 0;
6319 
6320  m_currentobject = currentcanvasobject;
6321  if ( !m_currentobject )
6322  return;
6323 
6324  if ( !takeOverProperties )
6325  return;
6326 
6327  // the current object its style and other central stored properties,
6328  // are set as the current context.
6329  a2dNamedPropertyList props;
6330  currentcanvasobject->CollectProperties2( &props, NULL, a2dPropertyId::flag_transfer );
6331  a2dNamedPropertyList::iterator iter;
6332  for( iter = props.begin(); iter != props.end(); ++iter )
6333  {
6334  a2dNamedProperty* prop = *iter;
6335  prop->SetToObjectClone( this );
6336  }
6337 }
6338 
6339 wxString a2dCanvasCommandProcessor::AskFile( const wxString& message, const wxString& default_path,
6340  const wxString& default_filename, const wxString& default_extension,
6341  const wxString& wildcard, int flags, int x, int y )
6342 {
6343  wxWindow* parent = GetActiveDrawingPart()->GetDisplayWindow();
6344 
6345  wxString expandedPath = default_path;
6346  a2dPathList path;
6347  if ( !default_path.IsEmpty() && !path.ExpandPath( expandedPath ) )
6348  {
6349  a2dGeneralGlobals->ReportWarningF( a2dError_CouldNotEvaluatePath, _( "Could not expand %s" ), default_path.c_str() );
6350  return wxT( "" );
6351  }
6352  return wxFileSelector( message, expandedPath, default_filename, default_extension, wildcard, flags, parent, x, y );
6353 }
6354 
6355 
6356 bool a2dCanvasCommandProcessor::SaveLayers( const wxFileName& fileName )
6357 {
6358  if ( !m_drawing )
6359  return false;
6360 
6361  a2dPathList path;
6362  path.Add( wxT( "." ) );
6363  wxString foundfile = fileName.GetFullPath();
6364  if ( !path.ExpandPath( foundfile ) )
6365  {
6366  a2dCanvasGlobals->ReportErrorF( a2dError_CouldNotEvaluatePath, _( "Could not expand %s resulted in %s" ), fileName.GetFullPath().c_str(), foundfile.c_str() );
6367  return false;
6368  }
6369  if ( foundfile.IsEmpty() )
6370  {
6371  a2dCanvasGlobals->ReportErrorF( a2dError_NotSpecified, _( "Filename %s not in %s" ), foundfile.c_str(), path.GetAsString().c_str() );
6372  return false;
6373  }
6374 
6375  if ( m_drawing->GetLayerSetup() )
6376  m_drawing->GetLayerSetup()->SaveLayers( foundfile );
6377  else
6378  a2dCanvasGlobals->ReportErrorF( a2dError_NotSpecified, _( "Document does not have layer setup" ) );
6379 
6380  return true;
6381 }
6382 
6383 bool a2dCanvasCommandProcessor::LoadLayers( const wxFileName& fileName )
6384 {
6385  if ( !m_drawing )
6386  return false;
6387 
6388  a2dPathList path;
6389  path.Add( wxT( "." ) );
6390  wxString foundfile = fileName.GetFullPath();
6391  if ( !path.ExpandPath( foundfile ) )
6392  {
6393  a2dCanvasGlobals->ReportErrorF( a2dError_CouldNotEvaluatePath, _( "Could not expand %s resulted in %s" ), fileName.GetFullPath().c_str(), foundfile.c_str() );
6394  return false;
6395  }
6396  if ( foundfile.IsEmpty() )
6397  {
6398  a2dCanvasGlobals->ReportErrorF( a2dError_NotSpecified, _( "Filename %s not in %s" ), foundfile.c_str(), path.GetAsString().c_str() );
6399  return false;
6400  }
6401 
6402 #if wxUSE_STD_IOSTREAM
6403  a2dDocumentFileInputStream store( foundfile.mb_str() );
6404  if ( store.fail() || store.bad() )
6405  {
6406  a2dCanvasGlobals->ReportErrorF( a2dError_FileCouldNotOpen, _( "Sorry, could not open file %s for import" ), foundfile.c_str() );
6407  return false;
6408  }
6409 #else
6410  wxFileInputStream storeUnbuf( foundfile );
6411  if ( !storeUnbuf.Ok() )
6412  {
6413  a2dCanvasGlobals->ReportErrorF( a2dError_FileCouldNotOpen, _( "Sorry, could not open file %s for import" ), foundfile.c_str() );
6414  return false;
6415  }
6416  wxBufferedInputStream store( storeUnbuf );
6417 #endif
6418 
6419 #if wxART2D_USE_CVGIO
6420  //assume it is the default CVG format.
6421  a2dIOHandlerCVGIn* handler = new a2dIOHandlerCVGIn();
6422  a2dLayers* layersetup = new a2dLayers();
6423  handler->LoadLayers( store, layersetup );
6424 
6425  delete handler;
6426 #else
6427  wxFAIL_MSG( wxT( "wxART2D_USE_CVGIO is needed to load object from a file CVG file" ) );
6428 #endif //wxART2D_USE_CVGIO
6429 
6430  m_drawing->SetLayerSetup( layersetup );
6431  return true;
6432 }
6433 
6435 {
6436  if ( !obj )
6437  obj = m_drawing->GetRootObject();
6438 
6439  if ( m_parent != obj )
6440  {
6441  a2dCanvasObject* found = m_drawing->GetRootObject()->Find( obj );
6442 
6443  if ( !found )
6444  m_parent = m_drawing->GetRootObject();
6445  else
6446  m_parent = found;
6447 
6448  m_currentobject = 0;
6449 
6450  return found != 0;
6451  }
6452  return true;
6453 }
6454 
6456 {
6457  return AddCurrent( new a2dCanvasObject( x, y ), m_withUndo );
6458 }
6459 
6461 {
6463 }
6464 
6465 /* TODO
6466 a2dNameReference* a2dCanvasCommandProcessor::Add_a2dNameReference( double x, double y, a2dCanvasObject* obj, const wxString &text, double size, double angle )
6467 {
6468  return (a2dNameReference*) AddCurrent( new a2dNameReference( x, y, obj, text, size, angle ) );
6469 }
6470 */
6471 
6473 {
6474  return ( a2dOrigin* ) AddCurrent( new a2dOrigin( w, h ), m_withUndo );
6475 }
6476 
6477 a2dHandle* a2dCanvasCommandProcessor::Add_a2dHandle( double xc, double yc, int w, int h, double angle , int radius )
6478 {
6479  return ( a2dHandle* ) AddCurrent( new a2dHandle( NULL, xc, yc, _T( "" ), w, h, angle, radius ), m_withUndo );
6480 }
6481 
6482 a2dRectC* a2dCanvasCommandProcessor::Add_a2dRectC( double xc, double yc, double w, double h, double angle, double radius )
6483 {
6484  return ( a2dRectC* ) AddCurrent( new a2dRectC( xc, yc, w, h, angle, radius ), m_withUndo );
6485 }
6486 
6487 a2dArrow* a2dCanvasCommandProcessor::Add_a2dArrow( double xt, double yt, double l1, double l2, double b, bool spline )
6488 {
6489  return ( a2dArrow* ) AddCurrent( new a2dArrow( xt, yt, l1, l2, b, spline ), m_withUndo );
6490 }
6491 
6492 a2dRect* a2dCanvasCommandProcessor::Add_a2dRect( double x, double y, double w, double h , double radius )
6493 {
6494  return ( a2dRect* ) AddCurrent( new a2dRect( x, y, w, h, radius ), m_withUndo );
6495 }
6496 
6497 a2dCircle* a2dCanvasCommandProcessor::Add_a2dCircle( double x, double y, double radius )
6498 {
6499  return ( a2dCircle* ) AddCurrent( new a2dCircle( x, y, radius ), m_withUndo );
6500 }
6501 
6502 a2dEllipse* a2dCanvasCommandProcessor::Add_a2dEllipse( double xc, double yc, double width, double height )
6503 {
6504  return ( a2dEllipse* ) AddCurrent( new a2dEllipse( xc, yc, width, height ), m_withUndo );
6505 }
6506 
6507 a2dEllipticArc* a2dCanvasCommandProcessor::Add_a2dEllipticArc( double xc, double yc, double width, double height, double start, double end )
6508 {
6509  return ( a2dEllipticArc* ) AddCurrent( new a2dEllipticArc( xc, yc, width, height, start, end ), m_withUndo );
6510 }
6511 
6512 a2dArc* a2dCanvasCommandProcessor::Add_a2dArc( double xc, double yc, double radius, double start, double end )
6513 {
6514  return ( a2dArc* ) AddCurrent( new a2dArc( xc, yc, radius, start, end ), m_withUndo );
6515 }
6516 
6517 a2dSLine* a2dCanvasCommandProcessor::Add_a2dSLine( double x1, double y1, double x2, double y2 )
6518 {
6519  return ( a2dSLine* ) AddCurrent( new a2dSLine( x1, y1, x2, y2 ), m_withUndo );
6520 }
6521 
6522 a2dEndsLine* a2dCanvasCommandProcessor::Add_a2dEndsLine( double x1, double y1, double x2, double y2 )
6523 {
6524  return ( a2dEndsLine* ) AddCurrent( new a2dEndsLine( x1, y1, x2, y2 ), m_withUndo );
6525 }
6526 
6527 a2dImage* a2dCanvasCommandProcessor::Add_a2dImage( const wxImage& image, double xc, double yc, double w, double h )
6528 {
6529  return ( a2dImage* ) AddCurrent( new a2dImage( image, xc, yc, w, h ), m_withUndo );
6530 }
6531 
6532 a2dImage* a2dCanvasCommandProcessor::Add_a2dImage( const wxString& imagefile, wxBitmapType type, double xc, double yc, double w, double h )
6533 {
6534  return ( a2dImage* ) AddCurrent( new a2dImage( imagefile, type, xc, yc, w, h ), m_withUndo );
6535 }
6536 
6537 a2dText* a2dCanvasCommandProcessor::Add_a2dText( const wxString& text, double x, double y, double angle, const a2dFont& font )
6538 {
6539  return ( a2dText* ) AddCurrent( new a2dText( text, x, y, font, angle ), m_withUndo );
6540 }
6541 
6543 {
6544  return ( a2dPolygonL* ) AddCurrent( new a2dPolygonL( points, spline ), m_withUndo );
6545 }
6546 
6548 {
6549  return ( a2dPolylineL* ) AddCurrent( new a2dPolylineL( points, spline ), m_withUndo );
6550 }
6551 
6552 bool a2dCanvasCommandProcessor::Add_Point( double x, double y )
6553 {
6555 
6556  //SetProperty( __M_ADDPOINT )??
6557 
6558  return true;
6559 }
6560 
6561 bool a2dCanvasCommandProcessor::Move_Point( int index , double x, double y )
6562 {
6564 
6565  //SetProperty( __M_MOVEPOINT )??
6566 
6567  return true;
6568 }
6569 
6570 bool a2dCanvasCommandProcessor::PushToolDragNew( a2dCanvasObject* newObject, const a2dMenuIdItem& initiatingMenuId, bool dragCenter )
6571 {
6572  if ( !m_drawing )
6573  {
6574  a2dGeneralGlobals->ReportError( a2dError_NoView );
6575  return false;
6576  }
6577 
6578  a2dStToolContr* contr = ( a2dStToolContr* ) GetActiveDrawingPart()->GetCanvasToolContr();
6579 
6580  if ( wxDynamicCast( contr->GetFirstTool(), a2dDragNewTool ) )
6581  {
6583  contr->PopTool( tool );
6584  }
6585 
6586  if ( newObject )
6587  {
6588  newObject->SetParent( contr->GetDrawingPart()->GetShowObject() );
6589  a2dDragNewTool* dragnew = new a2dDragNewTool( contr, newObject, initiatingMenuId );
6590  //optional
6591  //dragnew->SetOneShot();
6592  dragnew->SetStroke( a2dStroke( *wxRED, 1 ) );
6593  dragnew->SetFill( a2dFill( wxColour( 0xc0, 0xff, 0xff ) ) );
6594  dragnew->SetBoxCenterDrag( dragCenter );
6595  contr->PushTool( dragnew );
6596  return true;
6597  }
6598  return false;
6599 }
6600 
6601 bool a2dCanvasCommandProcessor::PushTool( const a2dCommandId& whichTool, bool shiftadd, bool oneshot )
6602 {
6603  const a2dCommandId* which = &whichTool;
6604  if ( !m_drawing )
6605  {
6606  a2dGeneralGlobals->ReportError( a2dError_NoView );
6607  return false;
6608  }
6609 
6610  a2dStToolContr* contr = ( a2dStToolContr* ) GetActiveDrawingPart()->GetCanvasToolContr();
6611 
6612  if ( !contr )
6613  {
6614  a2dGeneralGlobals->ReportError( a2dError_NoController );
6615  return false;
6616  }
6617 
6618  if ( 0 ) //done with a2dBaseTool::sig_toolBeforePush
6619  {
6622  objects->SetSpecificFlags( false, a2dCanvasOFlags::SELECTED );
6623  m_parent->GetRoot()->SetUpdatesPending( true );
6624  }
6625 
6626  //Submit( new a2dCommand_Select( m_parent, a2dCommand_Select::Args().what( a2dCommand_Select::DeSelectAll ) ) );
6627 
6628  if ( a2dCanvasGlobals->GetPopBeforePush() )
6629  {
6631  contr->PopTool( poped, false ); //set true if abort is required here.
6632  }
6633 
6634  if ( which == &a2dSelectTool::COMID_PushTool_Select )
6635  {
6636  a2dSelectTool* selt = new a2dSelectTool( contr );
6637 
6638  if ( !shiftadd )
6639  selt->SetShiftIsAdd();
6640 
6641  if ( oneshot ) selt->SetOneShot();
6642  contr->PushTool( selt );
6643  selt->SetStroke( a2dStroke( wxColour( 200, 0, 0 ), 0, a2dSTROKE_LONG_DASH ) );
6644  }
6645  else if ( which == &a2dFastSelect::COMID_PushTool_FastSelect )
6646  {
6647  a2dFastSelect* selt = new a2dFastSelect( contr );
6648 
6649  if ( !shiftadd )
6650  selt->SetShiftIsAdd();
6651 
6652  if ( oneshot ) selt->SetOneShot();
6653  contr->PushTool( selt );
6654  selt->SetStroke( a2dStroke( wxColour( 200, 0, 0 ), 0, a2dSTROKE_LONG_DASH ) );
6655  }
6657  {
6658  a2dRecursiveEditTool* edit = new a2dRecursiveEditTool( contr );
6659  if ( oneshot ) edit->SetOneShot();
6660  contr->PushTool( edit );
6661  }
6662  else if ( which == &a2dObjectEditTool::COMID_PushTool_ObjectEdit )
6663  {
6664  a2dObjectEditTool* edit = new a2dObjectEditTool( contr );
6665  if ( oneshot ) edit->SetOneShot();
6666  contr->PushTool( edit );
6667  }
6668  else if ( which == &a2dMultiEditTool::COMID_PushTool_MultiEdit )
6669  {
6670  a2dMultiEditTool* edit = new a2dMultiEditTool( contr );
6671  if ( oneshot ) edit->SetOneShot();
6672  contr->PushTool( edit );
6673  }
6674  else if ( which == &a2dDragTool::COMID_PushTool_Drag )
6675  {
6676  a2dDragTool* drag = new a2dDragTool( contr );
6677  if ( oneshot ) drag->SetOneShot();
6678  contr->PushTool( drag );
6679  }
6680  else if ( which == &a2dDragOrgTool::COMID_PushTool_DragOrg )
6681  {
6682  a2dDragOrgTool* drag = new a2dDragOrgTool( contr );
6683  if ( oneshot ) drag->SetOneShot();
6684  contr->PushTool( drag );
6685  }
6686  else if ( which == &a2dCopyTool::COMID_PushTool_Copy )
6687  {
6688  a2dCopyTool* copy = new a2dCopyTool( contr );
6689  if ( oneshot ) copy->SetOneShot();
6690  contr->PushTool( copy );
6691  }
6692  else if ( which == &a2dRotateTool::COMID_PushTool_Rotate )
6693  {
6694  a2dRotateTool* rot = new a2dRotateTool( contr );
6695  if ( oneshot ) rot->SetOneShot();
6696  contr->PushTool( rot );
6697  }
6698  else if ( which == &a2dZoomTool::COMID_PushTool_Zoom )
6699  {
6700  a2dZoomTool* zoomt = new a2dZoomTool( contr );
6701  if ( oneshot ) zoomt->SetOneShot();
6702  contr->PushTool( zoomt );
6703  zoomt->SetStroke( a2dStroke( wxColour( 0, 0, 0 ), 1, a2dSTROKE_LONG_DASH ) );
6704  }
6705  else if ( which == &a2dZoomFast::COMID_PushTool_ZoomFast )
6706  {
6707  a2dZoomFast* zoomt = new a2dZoomFast( contr );
6708  if ( oneshot ) zoomt->SetOneShot();
6709  contr->PushTool( zoomt );
6710  zoomt->SetStroke( a2dStroke( wxColour( 0, 0, 0 ), 1, a2dSTROKE_LONG_DASH ) );
6711  }
6712 /*todo
6713  else if ( which == &a2dRenderImageZoomTool::COMID_PushTool_RenderImageZoom )
6714  {
6715 #if wxART2D_USE_CANEXTOBJ
6716  a2dRenderImageZoomTool* zoomt = new a2dRenderImageZoomTool( contr );
6717  if ( oneshot ) zoomt->SetOneShot();
6718  contr->PushTool( zoomt );
6719  zoomt->SetStroke( a2dStroke( wxColour( 200, 0, 0 ), 0, a2dSTROKE_LONG_DASH ) );
6720 #endif
6721  }
6722 */
6723  else if ( which == &a2dDeleteTool::COMID_PushTool_Delete )
6724  {
6725  a2dDeleteTool* deletet = new a2dDeleteTool( contr );
6726  if ( oneshot ) deletet->SetOneShot();
6727  contr->PushTool( deletet );
6728  }
6729  else if ( which == &a2dDrawTextTool::COMID_PushTool_DrawText )
6730  {
6731  a2dDrawTextTool* draw = new a2dDrawTextTool( contr, m_drawing->GetHabitat()->GetTextTemplateObject() );
6732  if ( oneshot ) draw->SetOneShot();
6733 // draw->SetFont( m_currentFont );
6734 // draw->SetTextHeight( m_currentfontsize );
6735  contr->PushTool( draw );
6736  }
6737  else if ( which == &a2dImageTool::COMID_PushTool_Image )
6738  {
6739  a2dImageTool* draw = new a2dImageTool( contr );
6740  if ( oneshot ) draw->SetOneShot();
6741  contr->PushTool( draw );
6742  }
6744  {
6745  a2dDrawRectangleTool* draw = new a2dDrawRectangleTool( contr );
6746  if ( oneshot ) draw->SetOneShot();
6747  contr->PushTool( draw );
6748  }
6750  {
6752  if ( oneshot ) draw->SetOneShot();
6753  contr->PushTool( draw );
6754  }
6755  else if ( which == &a2dDrawCircleTool::COMID_PushTool_DrawCircle )
6756  {
6757  a2dDrawCircleTool* draw = new a2dDrawCircleTool( contr );
6758  if ( oneshot ) draw->SetOneShot();
6759  contr->PushTool( draw );
6760  }
6762  {
6763  a2dDrawCircleToolFast* draw = new a2dDrawCircleToolFast( contr );
6764  if ( oneshot ) draw->SetOneShot();
6765  contr->PushTool( draw );
6766  }
6767  else if ( which == &a2dDrawLineTool::COMID_PushTool_DrawLine )
6768  {
6769  a2dDrawLineTool* draw = new a2dDrawLineTool( contr );
6770  if ( oneshot ) draw->SetOneShot();
6771  contr->PushTool( draw );
6772  }
6773  else if ( which == &a2dDrawLineTool::COMID_PushTool_DrawLineScaledArrow )
6774  {
6775  a2dDrawLineTool* draw = new a2dDrawLineTool( contr );
6776  if ( oneshot ) draw->SetOneShot();
6777  contr->PushTool( draw );
6778  draw->SetTemplateObject( new a2dScaledEndLine() );
6779  }
6781  {
6782  a2dDrawEllipseTool* draw = new a2dDrawEllipseTool( contr );
6783  if ( oneshot ) draw->SetOneShot();
6784  contr->PushTool( draw );
6785  }
6787  {
6788  a2dDrawEllipticArcTool* draw = new a2dDrawEllipticArcTool( contr );
6789  if ( oneshot ) draw->SetOneShot();
6790  contr->PushTool( draw );
6791  }
6793  {
6794  a2dDrawEllipticArcTool* draw = new a2dDrawEllipticArcTool( contr );
6795  if ( oneshot ) draw->SetOneShot();
6796  contr->PushTool( draw );
6797  draw->SetChord( true );
6798  }
6799  else if ( which == &a2dDrawArcTool::COMID_PushTool_DrawArc )
6800  {
6801  a2dDrawArcTool* draw = new a2dDrawArcTool( contr );
6802  if ( oneshot ) draw->SetOneShot();
6803  contr->PushTool( draw );
6804  }
6805  else if ( which == &a2dDrawArcTool::COMID_PushTool_DrawArc_Chord )
6806  {
6807  a2dDrawArcTool* draw = new a2dDrawArcTool( contr );
6808  if ( oneshot ) draw->SetOneShot();
6809  contr->PushTool( draw );
6810  draw->SetChord( true );
6811  }
6813  {
6814  a2dDrawPolylineLTool* draw = new a2dDrawPolylineLTool( contr );
6815  if ( oneshot ) draw->SetOneShot();
6816  draw->SetSpline( false );
6817  draw->SetLineBegin( m_drawing->GetHabitat()->GetLineBegin() );
6818  draw->SetLineEnd( m_drawing->GetHabitat()->GetLineEnd() );
6819  m_drawing->GetHabitat()->SetSpline( false );
6820  contr->PushTool( draw );
6821  }
6823  {
6824  a2dDrawPolylineLTool* draw = new a2dDrawPolylineLTool( contr );
6825  if ( oneshot ) draw->SetOneShot();
6826  draw->SetSpline( true );
6827  draw->SetLineBegin( m_drawing->GetHabitat()->GetLineBegin() );
6828  draw->SetLineEnd( m_drawing->GetHabitat()->GetLineEnd() );
6829  m_drawing->GetHabitat()->SetSpline( true );
6830  contr->PushTool( draw );
6831  }
6833  {
6835  if ( oneshot ) draw->SetOneShot();
6836  draw->SetSpline( false );
6837  m_drawing->GetHabitat()->SetSpline( false );
6838  contr->PushTool( draw );
6839  }
6841  {
6843  if ( oneshot ) draw->SetOneShot();
6844  draw->SetSpline( true );
6845  m_drawing->GetHabitat()->SetSpline( true );
6846  contr->PushTool( draw );
6847  }
6849  {
6850  a2dDrawPolygonLTool* draw = new a2dDrawPolygonLTool( contr );
6851  if ( oneshot ) draw->SetOneShot();
6852  draw->SetSpline( false );
6853  m_drawing->GetHabitat()->SetSpline( false );
6854  contr->PushTool( draw );
6855  }
6857  {
6858  a2dDrawPolygonLTool* draw = new a2dDrawPolygonLTool( contr );
6859  if ( oneshot ) draw->SetOneShot();
6860  draw->SetSpline( true );
6861  m_drawing->GetHabitat()->SetSpline( true );
6862  contr->PushTool( draw );
6863  }
6865  {
6866  a2dDrawPolygonLToolFast* draw = new a2dDrawPolygonLToolFast( contr );
6867  if ( oneshot ) draw->SetOneShot();
6868  draw->SetSpline( false );
6869  m_drawing->GetHabitat()->SetSpline( false );
6870  contr->PushTool( draw );
6871  }
6873  {
6874  a2dDrawPolygonLToolFast* draw = new a2dDrawPolygonLToolFast( contr );
6875  if ( oneshot ) draw->SetOneShot();
6876  draw->SetSpline( true );
6877  m_drawing->GetHabitat()->SetSpline( true );
6878  contr->PushTool( draw );
6879  }
6880  else if ( which == &a2dDragMultiTool::COMID_PushTool_DragMulti )
6881  {
6882  a2dDragMultiTool* drag = new a2dDragMultiTool( contr );
6883  if ( oneshot ) drag->SetOneShot();
6884  contr->PushTool( drag );
6885  }
6887  {
6888  a2dFastDragMultiTool* drag = new a2dFastDragMultiTool( contr );
6889  if ( oneshot ) drag->SetOneShot();
6890  contr->PushTool( drag );
6891  }
6893  {
6894  a2dFastCopyMultiTool* drag = new a2dFastCopyMultiTool( contr );
6895  if ( oneshot ) drag->SetOneShot();
6896  contr->PushTool( drag );
6897  }
6898  else if ( which == &a2dCopyMultiTool::COMID_PushTool_CopyMulti )
6899  {
6900  a2dCopyMultiTool* copy = new a2dCopyMultiTool( contr );
6901  if ( oneshot ) copy->SetOneShot();
6902  contr->PushTool( copy );
6903  }
6904  else if ( which == &a2dPropertyTool::COMID_PushTool_Property )
6905  {
6906  a2dPropertyTool* propertyedit = new a2dPropertyTool( contr );
6907  if ( oneshot ) propertyedit->SetOneShot();
6908  contr->PushTool( propertyedit );
6909  }
6910  else if ( which == &a2dMeasureTool::COMID_PushTool_Measure )
6911  {
6912  a2dMeasureTool* draw = new a2dMeasureTool( contr );
6913  if ( oneshot ) draw->SetOneShot();
6914  contr->PushTool( draw );
6915  }
6917  {
6919  if ( oneshot ) draw->SetOneShot();
6920  contr->PushTool( draw );
6921  }
6922  else if ( which == &a2dCanvasCommandProcessor::COMID_PopTool )
6923  {
6924  return PopTool() != NULL;
6925  }
6926  else if ( which == &a2dDrawVPathTool::COMID_PushTool_DrawVPath )
6927  {
6928  a2dDrawVPathTool* draw = new a2dDrawVPathTool( contr );
6929  if ( oneshot ) draw->SetOneShot();
6930  contr->PushTool( draw );
6931  }
6932  else
6933  a2dGeneralGlobals->ReportError( a2dError_NoTool );
6934 
6935  if ( contr->GetFirstTool() )
6936  {
6937  a2dStTool* draw = ( a2dStTool* ) contr->GetFirstTool();
6938  if ( wxDynamicCast( draw, a2dStDrawTool ) )
6939  wxDynamicCast( draw, a2dStDrawTool )->SetEditAtEnd( a2dCanvasGlobals->GetEditAtEndTools() );
6940  if ( wxDynamicCast( draw, a2dStDrawToolFast ) )
6942  draw->SetActive();
6943  }
6944  return true;
6945 }
6946 
6947 a2dBaseTool* a2dCanvasCommandProcessor::PopTool()
6948 {
6949  if ( GetActiveDrawingPart() )
6950  {
6951  a2dToolContr* contr = GetActiveDrawingPart()->GetCanvasToolContr();
6952  if ( contr )
6953  {
6955  contr->PopTool( tool );
6956  if ( ! tool )
6957  a2dGeneralGlobals->ReportError( a2dError_NoTool );
6958  return ( a2dBaseTool* ) tool.Get();
6959  }
6960  a2dGeneralGlobals->ReportError( a2dError_NoController );
6961  return NULL;
6962  }
6963  a2dGeneralGlobals->ReportError( a2dError_NoView );
6964  return NULL;
6965 }
6966 
6967 void a2dCanvasCommandProcessor::ClearMeasurements()
6968 {
6969  a2dComEvent changed( this, sig_ClearMeasurements );
6970  ProcessEvent( changed );
6971 }
6972 
6973 void a2dCanvasCommandProcessor::AddMeasurement( double x, double y )
6974 {
6975  m_meas_x = x;
6976  m_meas_y = y;
6977 
6978  a2dComEvent changed( this, sig_AddMeasurement );
6979  ProcessEvent( changed );
6980 }
6981 
6982 void a2dCanvasCommandProcessor::SetRelativeStart( double x, double y )
6983 {
6984  m_drawing->GetHabitat()->SetRelativeStart( x, y );
6985  a2dComEvent changed( this, sig_SetRelativeStart );
6986  ProcessEvent( changed );
6987 }
6988 
6989 bool a2dCanvasCommandProcessor::ZoomOut()
6990 {
6991  if ( GetActiveDrawingPart() )
6992  GetActiveDrawingPart()->GetCanvas()->SetMappingShowAll();
6993  return true;
6994 }
6995 
6996 //----------------------------------------------------------------------------
6997 // a2dCommand_AddObject
6998 //----------------------------------------------------------------------------
6999 
7000 a2dCommand_AddObject::a2dCommand_AddObject( a2dCanvasObject* parent, a2dCanvasObject* object ):
7001  a2dCommand( true, a2dCommand_AddObject::Id )
7002 {
7003  wxASSERT( !m_canvasobject );
7004  wxASSERT( !m_parent );
7005 
7006  m_canvasobject = object;
7007  m_parent = parent;
7008 }
7009 
7010 a2dCommand_AddObject::~a2dCommand_AddObject( void )
7011 {
7012 }
7013 
7015 {
7016  // When this is a redo, the release flag might still be set
7017  m_canvasobject->SetRelease( false );
7018  m_canvasobject->SetPending( true );
7019 
7020  m_canvasobject->SetParent( m_parent );
7021  m_parent->Append( m_canvasobject );
7022  // the next generates commands for pins that connect.
7023  //m_canvasobject->ReWireConnected( m_parent, true );
7024 
7025  return true;
7026 }
7027 
7029 {
7030  // When this is a redo, the release flag might still be set
7031  m_canvasobject->SetRelease( false );
7032  m_canvasobject->SetPending( true );
7033 
7034  m_canvasobject->SetParent( m_parent );
7035  m_parent->Append( m_canvasobject );
7036 
7037  //connection to pins are/should be seperate commands in a a2dCommandGroup.
7038 
7039  return true;
7040 }
7041 
7043 {
7044  // release the last added canvasobject
7045  m_canvasobject->SetParent( 0 );
7046  // if this object was connected to other objects, while being added to the drawing,
7047  // the tool has recorded those connection as a group, and they will be undone as a whole,
7048  // no need to combine it here.
7049  m_parent->ReleaseChild( m_canvasobject, false, false );
7050 
7051  return true;
7052 }
7053 
7054 //----------------------------------------------------------------------------
7055 // a2dCommand_ReleaseObject
7056 //----------------------------------------------------------------------------
7057 
7058 a2dCommand_ReleaseObject::a2dCommand_ReleaseObject( a2dCanvasObject* parent, a2dCanvasObject* object, bool now ):
7060 {
7061  m_canvasobject = object;
7062  m_parent = parent;
7063  //for undo preserve location
7064  m_index = 0;
7065  m_now = now;
7066 }
7067 
7068 a2dCommand_ReleaseObject::~a2dCommand_ReleaseObject( void )
7069 {
7070 }
7071 
7073 {
7074  m_index = m_parent->IndexOf( m_canvasobject.Get() );
7075 
7076  if ( m_index == -1 )
7078 
7079  if ( m_now )
7080  {
7081  m_canvasobject->SetRelease( true );
7082  m_canvasobject->SetPending( true );
7083  //m_parent->ReleaseChild( m_canvasobject.Get(), false, false, false, true );
7084  }
7085  else
7086  {
7087  //! set property for proper release in idle time by a2dCanvasObject::Update()
7088  // see PROPID_Parent in bool a2dCanvasObject::Update( UpdateMode mode )
7089  a2dCanvasObject::PROPID_Parent->SetPropertyToObject( m_canvasobject, m_parent );
7090  m_canvasobject->SetRelease( true );
7091  m_canvasobject->SetPending( true );
7092  }
7093 
7094  return true;
7095 }
7096 
7098 {
7099  // The release flag was set in do, so we must reste it to false.
7100  // Otherwise the object would be immediately released again.
7101  m_canvasobject->SetRelease( false );
7102  m_canvasobject->SetPending( true );
7103 
7104  //insert the old object
7105  m_parent->Insert( m_index, m_canvasobject.Get(), false );
7106 
7107  return true;
7108 }
7109 
7111 {
7112  m_canvasobject->DependentCommands( m_parent, this );
7113 
7114  //connected wires are stored until after disconnect is finished, next the will be optimized (e.g. merge lines)
7115  // If bin flags is set for a wire, it will not be optimized.
7116  a2dCanvasObjectList connectedwires;
7117 
7118  if ( m_canvasobject->HasPins() )
7119  {
7120  //find connected wires (not the ones with bin flag set, and not the object itself ).
7121  forEachIn( a2dCanvasObjectList, m_canvasobject->GetChildObjectList() )
7122  {
7123  a2dCanvasObject* obj = *iter;
7124  a2dPin* pinc = wxDynamicCast( obj, a2dPin );
7125  if ( !pinc )
7126  continue;
7127 
7128  a2dPinList::const_iterator iterconp;
7129  a2dPinList savepinsother = pinc->GetConnectedPins();
7130  for ( iterconp = savepinsother.begin( ) ; iterconp != savepinsother.end( ) ; iterconp++ )
7131  {
7132  a2dPin* otherpin = *iterconp;
7133 
7134  if( !otherpin || otherpin->GetRelease() )
7135  continue;
7136  if( !otherpin->IsConnectedTo() )
7137  continue;
7138 
7139  a2dCanvasObject* connectedobj = otherpin->GetParent();
7140  a2dWirePolylineL* wireConnected = wxDynamicCast( connectedobj, a2dWirePolylineL );
7141 
7142  if ( wireConnected &&
7143  ( wireConnected != m_canvasobject ) && // needs to be a different wire, in order to join.
7144  connectedobj->IsConnect() &&
7145  !connectedobj->GetBin() && !connectedobj->GetRelease() ) //selected wires are dragged and have bin flags set.
7146  {
7147  connectedwires.push_back( wireConnected );
7148  }
7149  }
7150  }
7151 
7152  forEachIn( a2dCanvasObjectList, m_canvasobject->GetChildObjectList() )
7153  {
7154  a2dCanvasObject* obj = *iter;
7155  a2dPin* pinc = wxDynamicCast( obj, a2dPin );
7156  if ( !pinc )
7157  continue;
7158  pinc->DuplicateConnectedToOtherPins( true );
7159  }
7160  }
7161 
7162  // the objects will now be disconnected, so not optimized via this connected wires down here.
7163  m_canvasobject->DisConnectWith( NULL, wxT( "" ), true );
7164 
7165  // connected wires can now be optimized.
7166  a2dCanvasObjectList::iterator iter;
7167  for( iter = connectedwires.begin(); iter != connectedwires.end(); ++iter )
7168  {
7169  a2dCanvasObject* connect = *iter;
7170  a2dWirePolylineL* wire = wxStaticCast( connect, a2dWirePolylineL );
7171  wire->OptimizeRerouteWires( m_parent, true, true );
7172  }
7173  return true;
7174 }
7175 
7176 //----------------------------------------------------------------------------
7177 // a2dCommand_ReplaceObject
7178 //----------------------------------------------------------------------------
7179 
7180 a2dCommand_ReplaceObject::a2dCommand_ReplaceObject( a2dCanvasObject* parent, a2dCanvasObject* oldobject, a2dCanvasObject* newobject ):
7182 {
7183  m_parent = parent;
7184  m_canvasobject = oldobject;
7185  m_canvasobject2 = newobject;
7186  m_parent = parent;
7187 }
7188 
7189 a2dCommand_ReplaceObject::~a2dCommand_ReplaceObject( void )
7190 {
7191 }
7192 
7194 {
7195  int index = m_parent->IndexOf( m_canvasobject );
7196 
7197  //remove the old object
7198  m_parent->ReleaseChild( m_canvasobject, false, false );
7199  //insert the modified copy
7200  m_parent->Insert( index, m_canvasobject2 );
7201 
7202  a2dCanvasObject* swap = m_canvasobject;
7203  m_canvasobject = m_canvasobject2;
7204  m_canvasobject2 = swap;
7205 
7206  return true;
7207 }
7208 
7210 {
7211  return Do();
7212 }
7213 
7214 //----------------------------------------------------------------------------
7215 // a2dCommand_MoveObject
7216 //----------------------------------------------------------------------------
7217 
7218 a2dCommand_MoveObject::a2dCommand_MoveObject( a2dCanvasObject* parentFrom, a2dCanvasObject* parentTo, a2dCanvasObject* object ):
7219  a2dCommand( true, a2dCommand_MoveObject::Id )
7220 {
7221  m_parentTo = parentTo;
7222  m_parentFrom = parentFrom;
7223  m_canvasobject = object;
7224  m_index = 0;
7225 }
7226 
7227 a2dCommand_MoveObject::~a2dCommand_MoveObject( void )
7228 {
7229 }
7230 
7232 {
7233  int index = 0;
7234  a2dCanvasObjectList* parentList = m_parentFrom->GetChildObjectList();
7235  a2dCanvasObjectList::iterator iterpins = parentList->begin();
7236  while( iterpins != parentList->end() )
7237  {
7238  a2dCanvasObject* obj = *iterpins;
7239  if ( obj == m_canvasobject )
7240  {
7241  (*iterpins)->SetRelease( true );
7242  break;
7243  }
7244  index++;
7245  iterpins++;
7246  }
7247  //m_parentTo->Insert( m_index, m_canvasobject );
7248  m_parentTo->Append( m_canvasobject );
7249  m_index = index;
7250  return true;
7251 }
7252 
7254 {
7255  int index = 0;
7256  a2dCanvasObjectList* parentList = m_parentTo->GetChildObjectList();
7257  a2dCanvasObjectList::iterator iterpins = parentList->begin();
7258  while( iterpins != parentList->end() )
7259  {
7260  a2dCanvasObject* obj = *iterpins;
7261  if ( obj == m_canvasobject )
7262  {
7263  (*iterpins)->SetRelease( true );
7264  break;
7265  }
7266  index++;
7267  iterpins++;
7268  }
7269  //m_parentFrom->Insert( m_index, m_canvasobject );
7270  m_parentFrom->Append( m_canvasobject );
7271  m_index = index;
7272  return true;
7273 }
7274 
7275 //----------------------------------------------------------------------------
7276 // a2dCommand_Flags
7277 //----------------------------------------------------------------------------
7278 
7279 a2dCommand_SetFlags::a2dCommand_SetFlags( a2dCanvasObject* parent, a2dCanvasObjectFlagsMask mask, bool value, bool preserve, a2dCanvasObjectFlagsMask whichobjects, const a2dBoundingBox& bbox ):
7280  a2dCommand( true, a2dCommand_SetFlags::Id )
7281 {
7282  m_parentObject = parent;
7283  m_bbox = bbox;
7284 
7285  m_which = mask;
7286 
7288 
7289  m_bool = value;
7290  m_preserve = preserve;
7291  m_whichObjects = whichobjects;
7292 
7293 #if defined(_DEBUG) && defined (SMART_POINTER_DEBUG)
7294  //klion: it is because the CurrentSmartPointerOwner can change in new ( )
7295  CurrentSmartPointerOwner = this;
7296 #endif
7297 }
7298 
7299 a2dCommand_SetFlags::~a2dCommand_SetFlags( void )
7300 {
7302  delete m_maskedObjects;
7303 }
7304 
7306 {
7308  m_maskedObjects = objects->Clone( m_whichObjects, a2dObject::clone_flat, NULL, m_bbox );
7309 
7311  {
7312  m_objectOldMask.clear();
7314  {
7315  a2dCanvasObject* obj = *iter;
7316  m_objectOldMask.push_back( obj->GetFlags() );
7317  obj->SetSpecificFlags( m_bool, obj->GetFlags() | m_which );
7318  obj->SetPending( true );
7319  }
7320  }
7321 
7322  return true;
7323 }
7324 
7326 {
7328 
7329  //first reset all bits in mask for all objects
7330  if ( m_preserve )
7331  {
7332  forEachIn( a2dCanvasObjectList, objects )
7333  {
7334  a2dCanvasObject* obj = *iter;
7335  a2dCanvasObjectFlagsMask masknow = obj->GetFlags();
7336  if ( masknow & m_which )
7337  {
7338  obj->SetFlags( masknow & ~m_which );
7339  obj->SetPending( true );
7340  }
7341  }
7342  }
7343 
7345  {
7346  a2dlist< a2dCanvasObjectFlagsMask >::iterator itermask = m_objectOldMask.begin();
7347  //while ( itermask != m_objectOldMask.end() )
7348  {
7350  {
7351  a2dCanvasObject* obj = *iter;
7352  if ( m_preserve )
7353  //set bit only for the object in the command
7354  obj->SetSpecificFlags( m_bool, obj->GetFlags() | m_which );
7355  else
7356  obj->SetFlags( *itermask );
7357  obj->SetPending( true );
7358  itermask++;
7359  }
7360  }
7361  }
7362  //m_maskedObjects->clear();
7363  return true;
7364 }
7365 
7367 {
7368  return Undo();
7369 }
7370 
7371 //----------------------------------------------------------------------------
7372 // a2dCommand_SetFlag
7373 //----------------------------------------------------------------------------
7374 
7375 a2dCommand_SetFlag::a2dCommand_SetFlag( a2dCanvasObject* object, a2dCanvasObjectFlagsMask which, bool value ):
7376  a2dCommand( true, a2dCommand_SetFlag::Id )
7377 {
7378  m_which = which;
7379  m_bool = value;
7380  m_canvasobject = object;
7381 }
7382 
7383 a2dCommand_SetFlag::~a2dCommand_SetFlag( void )
7384 {
7385 }
7386 
7388 {
7389  wxASSERT( !m_canvasobject );
7390  return new a2dCommand_SetFlag( wxStaticCast( object, a2dCanvasObject ), m_which, m_bool );
7391 }
7392 
7394 {
7395  // !!!! ToDo: This must be the flag, that is changed, not the selected flag
7396  // This is saved here, so that it can be undone.
7397  bool oldvalue = m_canvasobject->GetSelected();
7398 
7399  m_canvasobject->SetSpecificFlags( m_bool, m_which );
7400  //the last call never sets objects pending, still we want it here to be able to see
7401  //the possible effects.
7402  m_canvasobject->SetPending( true );
7403 
7404  m_bool = oldvalue;
7405  return true;
7406 }
7407 
7409 {
7410  bool oldvalue = m_canvasobject->GetSelected();
7411 
7412  m_canvasobject->SetSpecificFlags( m_bool, m_which );
7413  //the last call never sets objects pending, still we want it here to be able to see
7414  //the possible effects.
7415  m_canvasobject->SetPending( true );
7416 
7417  m_bool = oldvalue;
7418 
7419  return true;
7420 }
7421 
7422 //----------------------------------------------------------------------------
7423 // a2dCommand_SetFlag
7424 //----------------------------------------------------------------------------
7425 
7426 a2dCommand_SetPinFlags::a2dCommand_SetPinFlags( a2dPin* pin, a2dPin::a2dPinFlagsMask which, bool value ):
7427  a2dCommand( true, a2dCommand_SetFlag::Id )
7428 {
7429  m_which = which;
7430  m_value = value;
7431  m_pin = pin;
7432 }
7433 
7434 a2dCommand_SetPinFlags::~a2dCommand_SetPinFlags( void )
7435 {
7436 }
7437 
7439 {
7440  wxASSERT( !m_pin );
7441  return new a2dCommand_SetPinFlags( wxStaticCast( object, a2dPin ), m_which, m_value );
7442 }
7443 
7445 {
7446  a2dPin::a2dPinFlagsMask old = m_pin->GetPinFlags();
7447 
7448  m_pin->SetPinFlags( m_which, m_value );
7449  m_oldmask = old;
7450  return true;
7451 }
7452 
7454 {
7455  m_pin->SetPinFlags( m_oldmask );
7456  return true;
7457 }
7458 
7459 //----------------------------------------------------------------------------
7460 // a2dCommandMasked
7461 //----------------------------------------------------------------------------
7462 
7463 a2dCommandMasked::a2dCommandMasked(
7464  a2dCanvasObject* parentObject,
7465  a2dCommandGroup* parentGroup,
7467  a2dCanvasObjectFlagsMask targetMask,
7468  bool index, bool rewire,
7469  const a2dCommandId& commandId,
7470  const a2dCommandId& commandTypeId,
7471  const wxString& menuString
7472  )
7473  : a2dCommandGroup( parentGroup, commandId, commandTypeId, menuString )
7474 {
7475  m_which = mask;
7476  m_targetMask = targetMask;
7477  m_parentObject = parentObject;
7478  m_index = index;
7479  m_rewire = rewire;
7480 
7481  wxString idName;
7482  idName.Printf( wxT( "gr_%s_%ld" ), m_commandId->GetName().c_str(), wxGenNewId() );
7483 
7484  m_groupName = m_commandId->GetName();
7485  m_menuString = idName;
7486 }
7487 
7489 {
7490 }
7491 
7493 {
7495 
7496  a2dCommandList::const_iterator iter = m_subcommands.begin();
7497  while( iter != m_subcommands.end() )
7498  {
7499  a2dCommand* obj = *iter;
7500  a2dCommand* clone = ( a2dCommand* ) obj->Clone( options );
7501  clgr->m_subcommands.push_back( clone );
7502  iter++;
7503  }
7504  return clgr;
7505 }
7506 
7508 {
7509  int index = 0;
7510  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
7511  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
7512  {
7513  a2dCanvasObject* obj = *iter;
7514  if ( !obj->GetRelease() )
7515  {
7516  if ( obj->CheckMask( m_which ) )
7517  {
7518  if ( m_index )
7519  m_objectsIndex.push_back( index );
7520  m_maskedObjects.push_back( obj );
7521  }
7522 
7523  if ( obj->CheckMask( m_targetMask ) )
7524  m_target = obj;
7525 
7526  index++;
7527  }
7528  }
7529 
7530  if ( !m_rewire )
7531  return true;
7532 
7533  bool EditCopy = true;
7534 
7535  a2dCanvasObjectList objects;
7536 
7537  m_parentObject->CollectObjects( &objects, _T( "" ), m_which );
7538 
7539  a2dCanvasObjectList::iterator iter = objects.begin();
7540  while( iter != objects.end() )
7541  {
7542  a2dCanvasObject* original = *iter;
7543  if ( original->IsConnect() )
7544  iter = objects.erase( iter );
7545  else
7546  iter++;
7547  }
7548 
7549  a2dRefMap refs;
7550  GetDrawHabitat()->GetConnectionGenerator()->SetNoEditCopy( true );
7551  if ( EditCopy )
7552  {
7553  GetDrawHabitat()->GetConnectionGenerator()->SetNoEditCopy( false );
7554  for( a2dCanvasObjectList::iterator iter = objects.begin();
7555  iter != objects.end(); ++iter )
7556  {
7557  a2dCanvasObject* obj = *iter;
7558  if ( obj->CheckMask( m_which ) )
7559  {
7561  obj->SetBin( true );
7562  m_copies.push_back( copy );
7563  copy->SetSelected( false );
7564  }
7565  }
7566  }
7567 
7568  GetDrawHabitat()->GetConnectionGenerator()->PrepareForRewire( m_parentObject, objects, true, false, false, true, NULL, &refs );
7569 
7570  refs.LinkReferences();
7571 
7573 
7574  return true;
7575 }
7576 
7578 {
7579  if ( !m_rewire )
7580  return true;
7581 
7582  bool EditCopy = true;
7583  if ( EditCopy )
7584  {
7585  //for reroute the wires need to be matrix free
7586  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
7587  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
7588  {
7589  a2dCanvasObject* obj = *iter;
7590  if ( obj->CheckMask( m_which ) && obj->IsConnect() )
7591  {
7593  if ( wire && ! wire->GetTransformMatrix().IsIdentity() )
7594  m_cmp->Submit( new a2dCommand_EliminateMatrix( wire ) );
7595  }
7596  }
7597 
7598  for( a2dCanvasObjectList::iterator iter = m_copies.begin(); iter != m_copies.end(); ++iter )
7599  {
7600  a2dCanvasObject* copy = *iter;
7601  a2dCanvasObject* original = a2dCanvasObject::PROPID_Original->GetPropertyValue( copy );
7602  a2dAffineMatrix mat = original->GetTransform();
7603  copy->SetTransform( mat );
7604  }
7605  }
7606 
7607  GetDrawHabitat()->GetConnectionGenerator()->RerouteWires( true );
7608 
7609  if ( EditCopy )
7610  {
7611  for( a2dCanvasObjectList::iterator iter = m_copies.begin(); iter != m_copies.end(); ++iter )
7612  {
7613  a2dCanvasObject* copy = *iter;
7614  a2dWalker_RemovePropertyCandoc setp( a2dCanvasObject::PROPID_Original );
7615  setp.SetSkipNotRenderedInDrawing( true );
7616  setp.Start( copy );
7617  }
7618  m_copies.clear();
7619  }
7620  for( a2dCanvasObjectList::iterator iter = m_maskedObjects.begin(); iter != m_maskedObjects.end(); ++iter )
7621  {
7622  a2dCanvasObject* original = *iter;
7623  a2dWalker_RemovePropertyCandoc setp( a2dCanvasObject::PROPID_Original );
7624  setp.SetSkipNotRenderedInDrawing( true );
7625  setp.AddPropertyId( a2dCanvasObject::PROPID_Editcopy );
7626  setp.Start( original );
7627  }
7628 
7629  GetDrawHabitat()->GetConnectionGenerator()->SetNoEditCopy( false );
7630  return true;
7631 }
7632 
7634 {
7635  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
7636  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
7637  {
7638  a2dCanvasObject* obj = *iter;
7639  if ( !obj->GetRelease() && obj->CheckMask( m_which ) )
7640  {
7641  obj->SetSpecificFlags( false, m_which );
7642  obj->SetSpecificFlags( false, m_targetMask );
7643  obj->SetPending( true );
7644  }
7645  }
7646 
7647  for( a2dCanvasObjectList::iterator iter = m_maskedObjects.begin();
7648  iter != m_maskedObjects.end(); ++iter )
7649  {
7650  a2dCanvasObject* obj = *iter;
7651  obj->SetSpecificFlags( true, m_which );
7652  if ( obj == m_target )
7653  {
7654  obj->SetSpecificFlags( true, m_targetMask );
7655  obj->SetPending( true );
7656  }
7657  }
7658 
7659  return a2dCommandGroup::Undo();
7660 }
7661 
7663 {
7664  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
7665  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
7666  {
7667  a2dCanvasObject* obj = *iter;
7668  if ( !obj->GetRelease() && obj->CheckMask( m_which ) )
7669  {
7670  obj->SetSpecificFlags( false, m_which );
7671  obj->SetSpecificFlags( false, m_targetMask );
7672  obj->SetPending( true );
7673  }
7674  }
7675 
7676  for( a2dCanvasObjectList::iterator iter = m_maskedObjects.begin();
7677  iter != m_maskedObjects.end(); ++iter )
7678  {
7679  a2dCanvasObject* obj = *iter;
7680  obj->SetSpecificFlags( true, m_which );
7681  if ( obj == m_target )
7682  {
7683  obj->SetSpecificFlags( true, m_targetMask );
7684  obj->SetPending( true );
7685  }
7686  }
7687 
7688  return a2dCommandGroup::Redo();
7689 }
7690 
7691 //----------------------------------------------------------------------------
7692 // a2dCommand_SetSelectFlag
7693 //----------------------------------------------------------------------------
7694 
7695 a2dCommand_SetSelectFlag::a2dCommand_SetSelectFlag( a2dCanvasObject* object, bool value, bool preserve ):
7697 {
7698  m_bool = value;
7699  m_canvasobject = object;
7700  m_oldvalue = false;
7701  m_preserve = preserve;
7702 }
7703 
7704 a2dCommand_SetSelectFlag::~a2dCommand_SetSelectFlag( void )
7705 {
7706 }
7707 
7709 {
7710  wxASSERT( !m_canvasobject );
7711  return new a2dCommand_SetSelectFlag( wxStaticCast( object, a2dCanvasObject ), m_bool );
7712 }
7713 
7715 {
7716  // This is saved here, so that it can be undone.
7717  bool oldvalue = m_canvasobject->GetSelected();
7718 
7719  if ( m_canvasobject->GetRoot()->GetLayerSetup() )
7720  {
7721  if ( m_canvasobject->GetRoot()->GetLayerSetup()->GetSelectable( m_canvasobject->GetLayer() ) )
7722  {
7723  m_canvasobject->SetSelected( m_bool );
7724  //the last call never sets objects pending, still we want it here to be able to see
7725  //the possible effects.
7726  m_canvasobject->SetPending( true );
7727  }
7728  }
7729  else
7730  {
7731  m_canvasobject->SetSelected( m_bool );
7732  //the last call never sets objects pending, still we want it here to be able to see
7733  //the possible effects.
7734  m_canvasobject->SetPending( true );
7735  }
7736  m_oldvalue = oldvalue;
7737  return true;
7738 }
7739 
7741 {
7742  bool oldvalue = m_canvasobject->GetSelected();
7743 
7744  if ( m_preserve )
7745  m_canvasobject->SetSelected( m_bool );
7746  else
7747  m_canvasobject->SetSelected( m_oldvalue );
7748  //the last call never sets objects pending, still we want it here to be able to see
7749  //the possible effects.
7750  m_canvasobject->SetPending( true );
7751 
7752  m_oldvalue = oldvalue;
7753 
7754  return true;
7755 }
7756 
7758 {
7759  return Undo();
7760 }
7761 
7762 //----------------------------------------------------------------------------
7763 // a2dCommand_SetSelect2Flag
7764 //----------------------------------------------------------------------------
7765 
7766 a2dCommand_SetSelect2Flag::a2dCommand_SetSelect2Flag( a2dCanvasObject* object, bool value, bool preserve ):
7768 {
7769  m_bool = value;
7770  m_preserve = preserve;
7771  m_canvasobject = object;
7772 }
7773 
7774 a2dCommand_SetSelect2Flag::~a2dCommand_SetSelect2Flag( void )
7775 {
7776 }
7777 
7779 {
7780  wxASSERT( !m_canvasobject );
7781  return new a2dCommand_SetSelect2Flag( wxStaticCast( object, a2dCanvasObject ), m_bool );
7782 }
7783 
7785 {
7786  // This is saved here, so that it can be undone.
7787  bool oldvalue = m_canvasobject->GetSelected2();
7788 
7789  if ( m_canvasobject->GetRoot()->GetLayerSetup() )
7790  {
7791  if ( m_canvasobject->GetRoot()->GetLayerSetup()->GetSelectable( m_canvasobject->GetLayer() ) )
7792  {
7793  m_canvasobject->SetSelected2( m_bool );
7794  //the last call never sets objects pending, still we want it here to be able to see
7795  //the possible effects.
7796  m_canvasobject->SetPending( true );
7797  }
7798  }
7799  else
7800  {
7801  m_canvasobject->SetSelected2( m_bool );
7802  //the last call never sets objects pending, still we want it here to be able to see
7803  //the possible effects.
7804  m_canvasobject->SetPending( true );
7805  }
7806  m_bool = oldvalue;
7807  return true;
7808 }
7809 
7811 {
7812  bool oldvalue = m_canvasobject->GetSelected();
7813 
7814  if ( m_preserve )
7815  m_canvasobject->SetSelected2( m_bool );
7816  else
7817  m_canvasobject->SetSelected2( m_oldvalue );
7818  //the last call never sets objects pending, still we want it here to be able to see
7819  //the possible effects.
7820  m_canvasobject->SetPending( true );
7821 
7822  m_oldvalue = oldvalue;
7823 
7824  return true;
7825 }
7826 
7828 {
7829  return Undo();
7830 }
7831 
7832 //----------------------------------------------------------------------------
7833 // a2dCommand_TransformMask
7834 //----------------------------------------------------------------------------
7835 
7836 a2dCommand_TransformMask::a2dCommand_TransformMask( a2dCanvasObject* parent, const a2dAffineMatrix& newtransform,
7837  a2dCanvasObjectFlagsMask which ):
7838  a2dCommandMasked( parent, NULL, which, a2dCanvasOFlags::SELECTED2, false, true, Id )
7839 {
7840  m_transform = newtransform;
7841 }
7842 
7843 a2dCommand_TransformMask::~a2dCommand_TransformMask( void )
7844 {
7845 }
7846 
7848 {
7849  GetCanvasCmp()->SetCurrentGroup( this );
7850 
7852 
7853  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
7854  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
7855  {
7856  a2dCanvasObject* obj = *iter;
7857  if ( obj->CheckMask( m_which ) && !obj->IsConnect() )
7858  {
7859  if ( obj->GetSelected2() )
7860  m_target = obj;
7861  m_objectsMatrix.push_back( a2dCommandMatrixData( m_parentObject, obj, obj->GetTransformMatrix() ) );
7862  //a2dAffineMatrix tworld = m_transform;
7863  //tworld *= obj->GetTransformMatrix();
7864  obj->Transform( m_transform );
7865  }
7866  }
7867 
7868 // GetCanvasCmp()->GetParentObject()->GetChildObjectList()->SetTransform( m_transform, _T("", m_which, _T("" );
7869 
7870  return true;
7871 }
7872 
7874 {
7876  GetCanvasCmp()->CommandGroupEnd( this );
7877  return true;
7878 }
7879 
7881 {
7883 
7884  a2dAffineMatrix inverse = m_transform;
7885  inverse.Invert();
7886  a2dObjectMatrixList::iterator iter = m_objectsMatrix.begin();
7887  while ( iter != m_objectsMatrix.end() )
7888  {
7889  a2dCommandMatrixData objm = *iter;
7890  objm.m_object->Transform( inverse );
7891  a2dCanvasObject* obj = objm.m_object;
7892 
7893  //obj->m_object->SetTransformMatrix( obj->m_transform );
7894  iter++;
7895  }
7896 
7897  return true;
7898 }
7899 
7901 {
7902  a2dAffineMatrix inverse = m_transform;
7903  inverse.Invert();
7904  a2dObjectMatrixList::iterator iter = m_objectsMatrix.begin();
7905  while ( iter != m_objectsMatrix.end() )
7906  {
7907  a2dCommandMatrixData objm = *iter;
7908  objm.m_object->Transform( inverse );
7909  a2dCanvasObject* obj = objm.m_object;
7910 
7911  //obj->m_object->SetTransformMatrix( obj->m_transform );
7912  iter++;
7913  }
7914 
7916 
7917  return true;
7918 }
7919 
7920 //----------------------------------------------------------------------------
7921 // a2dCommand_RotateMask
7922 //----------------------------------------------------------------------------
7923 
7924 a2dCommand_RotateMask::a2dCommand_RotateMask( a2dCanvasObject* parent, double angle,
7925  a2dCanvasObjectFlagsMask which ):
7926  a2dCommandMasked( parent, NULL, which, a2dCanvasOFlags::SELECTED2, false, true, Id )
7927 {
7928  m_angle = angle;
7929 }
7930 
7931 a2dCommand_RotateMask::~a2dCommand_RotateMask( void )
7932 {
7933 }
7934 
7936 {
7937  GetCanvasCmp()->SetCurrentGroup( this );
7938 
7940 
7941  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
7942  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
7943  {
7944  a2dCanvasObject* obj = *iter;
7945  if ( obj->CheckMask( m_which ) && !obj->IsConnect() )
7946  {
7947  m_objectsMatrix.push_back( a2dCommandMatrixData( m_parentObject, obj, obj->GetTransformMatrix() ) );
7948  a2dAffineMatrix mat = obj->GetTransform();
7949  mat.Rotate( m_angle, obj->GetPosX(), obj->GetPosY() );
7950  obj->SetTransformMatrix( mat );
7951  }
7952  }
7953 
7954  return true;
7955 }
7956 
7958 {
7960  GetCanvasCmp()->CommandGroupEnd( this );
7961  return true;
7962 }
7963 
7965 {
7967 
7968  a2dObjectMatrixList::iterator iter = m_objectsMatrix.begin();
7969  while ( iter != m_objectsMatrix.end() )
7970  {
7971  a2dCommandMatrixData& matrixdata = *iter;
7972  a2dCanvasObject* obj = matrixdata.m_object;
7973  a2dAffineMatrix mat = obj->GetTransformMatrix();
7974  obj->SetTransformMatrix( matrixdata.m_transform );
7975  matrixdata.m_transform = mat;
7976 
7977  iter++;
7978  }
7979 
7980  return true;
7981 }
7982 
7983 
7985 {
7986  a2dObjectMatrixList::iterator iter = m_objectsMatrix.begin();
7987  while ( iter != m_objectsMatrix.end() )
7988  {
7989  a2dCommandMatrixData& matrixdata = *iter;
7990  a2dCanvasObject* obj = matrixdata.m_object;
7991  a2dAffineMatrix mat = obj->GetTransformMatrix();
7992  obj->SetTransformMatrix( matrixdata.m_transform );
7993  matrixdata.m_transform = mat;
7994 
7995  iter++;
7996  }
7997 
7999 
8000  return true;
8001 }
8002 
8003 //----------------------------------------------------------------------------
8004 // a2dCommand_AlignMask
8005 //----------------------------------------------------------------------------
8006 
8007 a2dCommand_AlignMask::a2dCommand_AlignMask( a2dCanvasObject* parent, Alignment align,
8008  a2dCanvasObjectFlagsMask which ):
8009  a2dCommandMasked( parent, NULL, which, a2dCanvasOFlags::SELECTED2, false, true, a2dCommand_AlignMask::Id )
8010 {
8011  m_parentObject = parent;
8012  m_objectsMatrix;
8013  m_which = which;
8014  m_align = align;
8015 }
8016 
8017 a2dCommand_AlignMask::~a2dCommand_AlignMask( void )
8018 {
8019 }
8020 
8022 {
8023  GetCanvasCmp()->SetCurrentGroup( this );
8024 
8026 
8027  double alignToMaxX = DBL_MIN;
8028  double alignToMinX = DBL_MAX;
8029  double alignToMaxY = DBL_MIN;
8030  double alignToMinY = DBL_MAX;
8031  double objectsHeight = 0;
8032  double objectsWidth = 0;
8033  a2dCanvasObject* lastSelect = 0;
8034 
8035  size_t HowManySelected = 0;
8036  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
8037  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
8038  {
8039  a2dCanvasObject* obj = *iter;
8040  if ( obj->CheckMask( m_which ) )
8041  {
8042  HowManySelected++;
8043 
8044  a2dBoundingBox box = obj->GetAlignmentBbox();
8045 
8046  alignToMaxY = wxMax( alignToMaxY, box.GetMaxY() );
8047  alignToMinY = wxMin( alignToMinY, box.GetMinY() );
8048  alignToMaxX = wxMax( alignToMaxX, box.GetMaxX() );
8049  alignToMinX = wxMin( alignToMinX, box.GetMinX() );
8050  objectsWidth += box.GetWidth();
8051  objectsHeight += box.GetHeight();
8052  }
8053  }
8054 
8055  switch ( m_align )
8056  {
8057  case MIDY_Dest:
8058  case MIDX_Dest:
8059  case MINX_Dest:
8060  case MAXX_Dest:
8061  case MINY_Dest:
8062  case MAXY_Dest:
8063  case MirrorVert_Dest:
8064  case MirrorHorz_Dest:
8065  case MirrorVertBbox_Dest:
8066  case MirrorHorzBbox_Dest:
8067  {
8068  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
8069  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
8070  {
8071  a2dCanvasObject* obj = *iter;
8072  if ( obj->GetSelected2() )
8073  lastSelect = obj;
8074  }
8075  }
8076  }
8077 
8078  if ( lastSelect )
8079  {
8080  a2dBoundingBox box = lastSelect->GetAlignmentBbox();
8081 
8082  alignToMaxY = box.GetMaxY();
8083  alignToMinY = box.GetMinY();
8084  alignToMaxX = box.GetMaxX();
8085  alignToMinX = box.GetMinX();
8086  switch ( m_align )
8087  {
8088  case MIDY_Dest:
8089  {
8090  }
8091  case MIDX_Dest:
8092  {
8093  }
8094  case MINX_Dest:
8095  {
8096  }
8097  case MAXX_Dest:
8098  {
8099  }
8100  case MINY_Dest:
8101  {
8102  }
8103  case MAXY_Dest:
8104  {
8105  }
8106  case MirrorVert_Dest:
8107  {
8108  }
8109  case MirrorHorz_Dest:
8110  {
8111  }
8112  case MirrorVertBbox_Dest:
8113  {
8114  }
8115  case MirrorHorzBbox_Dest:
8116  {
8117  }
8118  }
8119  }
8120 
8121  double alignMidX = ( alignToMaxX + alignToMinX ) / 2.0;
8122  double alignMidY = ( alignToMaxY + alignToMinY ) / 2.0;
8123 
8124  a2dCanvasObjectList sorted;
8125 
8126  if ( m_align == DistributeVert || m_align == DistributeHorz )
8127  {
8128  double dx = (alignToMaxX - alignToMinX - objectsWidth) / (HowManySelected-1);
8129  double dy = (alignToMaxY - alignToMinY - objectsHeight) / (HowManySelected-1);
8130  double posnext = alignToMinX;
8131  if ( m_align == DistributeVert )
8132  posnext = alignToMinY;
8133 
8134  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
8135  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
8136  {
8137  a2dCanvasObject* obj = *iter;
8138  if ( obj->CheckMask( m_which ) )
8139  {
8140  a2dBoundingBox box = obj->GetAlignmentBbox();
8141  a2dCanvasObjectList::iterator itersort = sorted.begin();
8142  while ( itersort != sorted.end() )
8143  {
8144  a2dCanvasObject* objsort = *itersort;
8145  a2dBoundingBox boxsort = objsort->GetAlignmentBbox();
8146  if ( m_align == DistributeVert && boxsort.GetMinY() < box.GetMinY() )
8147  itersort++;
8148  else if ( m_align == DistributeHorz && boxsort.GetMinX() < box.GetMinX() )
8149  itersort++;
8150  else
8151  {
8152  sorted.insert( itersort, obj );
8153  break;
8154  }
8155  }
8156  if ( itersort == sorted.end() )
8157  sorted.push_back( obj );
8158  }
8159  }
8160  for( a2dCanvasObjectList::iterator iter = sorted.begin(); iter != sorted.end(); ++iter )
8161  {
8162  a2dCanvasObject* obj = *iter;
8163  m_objectsMatrix.push_back( a2dCommandMatrixData( m_parentObject, obj, obj->GetTransformMatrix() ) );
8164  a2dAffineMatrix mat = obj->GetTransform();
8165  a2dBoundingBox box = obj->GetAlignmentBbox();
8166  switch ( m_align )
8167  {
8168  case DistributeVert:
8169  {
8170  double dyObjBbox = obj->GetPosY() - box.GetMinY();
8171  obj->SetPosXY( obj->GetPosX(), posnext + dyObjBbox );
8172  posnext += box.GetHeight() + dy;
8173  break;
8174  }
8175  case DistributeHorz:
8176  {
8177  double dxObjBbox = obj->GetPosX() - box.GetMinX();
8178  obj->SetPosXY( posnext + dxObjBbox, obj->GetPosY() );
8179  posnext += box.GetWidth() + dx;
8180  break;
8181  }
8182  }
8183  }
8184  }
8185  else
8186  {
8187  //other aligns
8188 
8189  for( a2dCanvasObjectList::iterator iter = m_parentObject->GetChildObjectList()->begin();
8190  iter != m_parentObject->GetChildObjectList()->end(); ++iter )
8191  {
8192  a2dCanvasObject* obj = *iter;
8193  if ( obj->CheckMask( m_which ) )
8194  {
8195  m_objectsMatrix.push_back( a2dCommandMatrixData( m_parentObject, obj, obj->GetTransformMatrix() ) );
8196  a2dAffineMatrix mat = obj->GetTransform();
8197  a2dBoundingBox box = obj->GetAlignmentBbox();
8198  switch ( m_align )
8199  {
8200  case MIDY:
8201  obj->SetPosXY( obj->GetPosX(), alignMidY + obj->GetPosY() - (box.GetMinY() + box.GetHeight()/2.0) );
8202  break;
8203  case MIDY_Dest:
8204  if ( obj != lastSelect )
8205  obj->SetPosXY( obj->GetPosX(), alignMidY + obj->GetPosY() - (box.GetMinY() + box.GetHeight()/2.0) );
8206  break;
8207  case MIDX:
8208  obj->SetPosXY( alignMidX + obj->GetPosX() - (box.GetMinX() + box.GetWidth()/2.0), obj->GetPosY() );
8209  break;
8210  case MIDX_Dest:
8211  if ( obj != lastSelect )
8212  obj->SetPosXY( alignMidX + obj->GetPosX() - (box.GetMinX() + box.GetWidth()/2.0), obj->GetPosY() );
8213  break;
8214  case MINX:
8215  obj->SetPosXY( alignToMinX + obj->GetPosX() - box.GetMinX(), obj->GetPosY() );
8216  break;
8217  case MINX_Dest:
8218  if ( obj != lastSelect )
8219  obj->SetPosXY( alignToMinX + obj->GetPosX() - box.GetMinX(), obj->GetPosY() );
8220  break;
8221  case MAXX:
8222  obj->SetPosXY( alignToMaxX - box.GetMaxX() + obj->GetPosX(), obj->GetPosY() );
8223  break;
8224  case MAXX_Dest:
8225  if ( obj != lastSelect )
8226  obj->SetPosXY( alignToMaxX - box.GetMaxX() + obj->GetPosX(), obj->GetPosY() );
8227  break;
8228  case MINY:
8229  obj->SetPosXY( obj->GetPosX(), alignToMinY + obj->GetPosY() - box.GetMinY() );
8230  break;
8231  case MINY_Dest:
8232  if ( obj != lastSelect )
8233  obj->SetPosXY( obj->GetPosX(), alignToMinY + obj->GetPosY() - box.GetMinY() );
8234  break;
8235  case MAXY:
8236  obj->SetPosXY( obj->GetPosX(), alignToMaxY - box.GetMaxY() + obj->GetPosY() );
8237  break;
8238  case MAXY_Dest:
8239  if ( obj != lastSelect )
8240  obj->SetPosXY( obj->GetPosX(), alignToMaxY - box.GetMaxY() + obj->GetPosY() );
8241  break;
8242  case MirrorVert:
8243  {
8244  double x = (box.GetMinX() + box.GetMaxX())/2.0;
8245  double y = (box.GetMinY() + box.GetMaxY())/2.0;
8246  //double x = obj->GetPosX();
8247  //double y = obj->GetPosY();
8248  obj->Translate( -x, -y );
8249  obj->Mirror( false, true );
8250  obj->Translate( x, y );
8251  break;
8252  }
8253  case MirrorVert_Dest:
8254  if ( obj != lastSelect )
8255  {
8256  double x = (box.GetMinX() + box.GetMaxX())/2.0;
8257  double y = (box.GetMinY() + box.GetMaxY())/2.0;
8258  //double x = obj->GetPosX();
8259  //double y = obj->GetPosY();
8260  obj->Translate( -x, -y );
8261  obj->Mirror( false, true );
8262  obj->Translate( x, y );
8263  break;
8264  }
8265  case MirrorHorz:
8266  {
8267  double x = (box.GetMinX() + box.GetMaxX())/2.0;
8268  double y = (box.GetMinY() + box.GetMaxY())/2.0;
8269  //double x = obj->GetPosX();
8270  //double y = obj->GetPosY();
8271  obj->Translate( -x, -y );
8272  obj->Mirror( true, false );
8273  obj->Translate( x, y );
8274  break;
8275  }
8276  case MirrorHorz_Dest:
8277  if ( obj != lastSelect )
8278  {
8279  double x = (box.GetMinX() + box.GetMaxX())/2.0;
8280  double y = (box.GetMinY() + box.GetMaxY())/2.0;
8281  //double x = obj->GetPosX();
8282  //double y = obj->GetPosY();
8283  obj->Translate( -x, -y );
8284  obj->Mirror( true, false );
8285  obj->Translate( x, y );
8286  break;
8287  }
8288  case MirrorVertBbox:
8289  {
8290  double x = alignMidX;
8291  double y = alignMidY;
8292  obj->Translate( -x, -y );
8293  obj->Mirror( false, true );
8294  obj->Translate( x, y );
8295  break;
8296  }
8297  case MirrorVertBbox_Dest:
8298  if ( obj != lastSelect )
8299  {
8300  double x = alignMidX;
8301  double y = alignMidY;
8302  obj->Translate( -x, -y );
8303  obj->Mirror( false, true );
8304  obj->Translate( x, y );
8305  break;
8306  }
8307  case MirrorHorzBbox:
8308  {
8309  double x = alignMidX;
8310  double y = alignMidY;
8311  obj->Translate( -x, -y );
8312  obj->Mirror( true, false );
8313  obj->Translate( x, y );
8314  break;
8315  }
8316  case MirrorHorzBbox_Dest:
8317  if ( obj != lastSelect )
8318  {
8319  double x = alignMidX;
8320  double y = alignMidY;
8321  obj->Translate( -x, -y );
8322  obj->Mirror( true, false );
8323  obj->Translate( x, y );
8324  break;
8325  }
8326  }
8327  }
8328  }
8329  }
8330 
8331  return true;
8332 }
8333 
8335 {
8337  GetCanvasCmp()->CommandGroupEnd( this );
8338  return true;
8339 }
8340 
8342 {
8344 
8345  a2dObjectMatrixList::iterator iter = m_objectsMatrix.begin();
8346  while ( iter != m_objectsMatrix.end() )
8347  {
8348  a2dCommandMatrixData& matrixdata = *iter;
8349  a2dCanvasObject* obj = matrixdata.m_object;
8350  a2dAffineMatrix mat = obj->GetTransformMatrix();
8351  obj->SetTransformMatrix( matrixdata.m_transform );
8352  matrixdata.m_transform = mat;
8353 
8354  iter++;
8355  }
8356 
8357  return true;
8358 }
8359 
8361 {
8362  a2dObjectMatrixList::iterator iter = m_objectsMatrix.begin();
8363  while ( iter != m_objectsMatrix.end() )
8364  {
8365  a2dCommandMatrixData& matrixdata = *iter;
8366  a2dCanvasObject* obj = matrixdata.m_object;
8367  a2dAffineMatrix mat = obj->GetTransformMatrix();
8368  obj->SetTransformMatrix( matrixdata.m_transform );
8369  matrixdata.m_transform = mat;
8370 
8371  iter++;
8372  }
8373 
8375 
8376  return true;
8377 }
8378 
8379 //----------------------------------------------------------------------------
8380 // a2dCommand_AddPoint
8381 //----------------------------------------------------------------------------
8382 
8383 a2dCommand_AddPoint::a2dCommand_AddPoint( a2dCanvasObject* object, double x, double y, int index, bool afterinversion ):
8384  a2dCommand( true, a2dCommand_AddPoint::Id )
8385 {
8386  m_x = x;
8387  m_y = y;
8388  m_canvasobject = object;
8389  m_afterinversion = afterinversion;
8390 
8391  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8392  if ( index == -1 )
8393  m_seg = NULL;
8394  else
8395  {
8396  a2dVertexList::iterator iter = obj->GetSegmentAtIndex( index );
8397  m_seg = *iter;
8398  }
8399 }
8400 
8401 a2dCommand_AddPoint::a2dCommand_AddPoint( a2dCanvasObject* object, double x, double y, a2dLineSegmentPtr seg, bool afterinversion ):
8402  a2dCommand( true, a2dCommand_AddPoint::Id )
8403 {
8404  m_x = x;
8405  m_y = y;
8406  m_seg = seg;
8407 
8408  m_canvasobject = object;
8409  m_afterinversion = afterinversion;
8410 }
8411 
8412 a2dCommand_AddPoint::~a2dCommand_AddPoint( void )
8413 {
8414 }
8415 
8417 {
8418  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8419  {
8420  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8421  m_segAdded = obj->AddPoint( m_x, m_y, m_seg, m_afterinversion );
8422  obj->SetPending( true );
8423  }
8424  return true;
8425 }
8426 
8428 {
8429  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8430  {
8431  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8432  double xremoved, yxremoved;
8433  obj->RemoveSegment( xremoved, yxremoved, m_segAdded, m_afterinversion );
8434  obj->SetPending( true );
8435  }
8436  return true;
8437 }
8438 
8440 {
8441  //the redo re-uses the segment which was added in Do()
8442  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8443  {
8444  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8445  int whereInsert = -1;
8446  if ( m_seg )
8447  whereInsert = obj->GetIndexSegment( m_seg );
8448  else
8449  whereInsert = obj->GetNumberOfSegments();
8450  obj->InsertSegment( whereInsert, m_segAdded );
8451  obj->SetPending( true );
8452  }
8453  return true;
8454 }
8455 
8456 //----------------------------------------------------------------------------
8457 // a2dCommand_MoveSegment
8458 //----------------------------------------------------------------------------
8459 
8460 a2dCommand_MoveSegment::a2dCommand_MoveSegment( a2dCanvasObject* object, double x, double y, int index, bool afterinversion ):
8461  a2dCommand( true, a2dCommand_MoveSegment::Id )
8462 {
8463  m_x = x;
8464  m_y = y;
8465 
8466  m_canvasobject = object;
8467 
8468  m_afterinversion = afterinversion;
8469 }
8470 
8471 a2dCommand_MoveSegment::a2dCommand_MoveSegment( a2dCanvasObject* object, double x, double y, a2dLineSegmentPtr seg, bool afterinversion ):
8472  a2dCommand( true, a2dCommand_MoveSegment::Id )
8473 {
8474  m_x = x;
8475  m_y = y;
8476  m_seg = seg;
8477 
8478  m_canvasobject = object;
8479 
8480  m_afterinversion = afterinversion;
8481 }
8482 
8483 a2dCommand_MoveSegment::~a2dCommand_MoveSegment( void )
8484 {
8485 }
8486 
8488 {
8489 
8490  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8491  {
8492  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8493  double x, y;
8494  obj->GetPosXYSegment( m_seg, x, y, m_afterinversion );
8495  obj->SetPosXYSegment( m_seg, m_x, m_y, m_afterinversion );
8496  m_canvasobject->SetPending( true );
8497 
8498  // store undo information
8499  m_x = x;
8500  m_y = y;
8501  }
8502  else if ( wxDynamicCast( m_canvasobject.Get(), a2dSLine ) )
8503  {
8504  /*
8505  a2dSLine* obj = wxStaticCast( m_canvasobject.Get(), a2dSLine );
8506  double x, y;
8507  if ( m_seg == 0 )
8508  {
8509  x = obj->GetPosX1( m_afterinversion );
8510  y = obj->GetPosY1( m_afterinversion );
8511  obj->SetPosXY1( m_x, m_y, m_afterinversion );
8512  }
8513  else
8514  {
8515  x = obj->GetPosX2(m_afterinversion);
8516  y = obj->GetPosY2(m_afterinversion);
8517  obj->SetPosXY2( m_x, m_y, m_afterinversion );
8518  }
8519 
8520  m_x = x;
8521  m_y = y;
8522  */
8523  }
8524 
8525  return true;
8526 }
8527 
8529 {
8530  // because the previous state is stored in Do, UnDo and Do are identical
8531  bool result = Do();
8532 
8533  // Don't know what this was good for and why it was in Undo, but not in Do
8534  // a2dComEvent changed( this, m_canvasobject );
8535  // ProcessEvent( changed );
8536 
8537  return result;
8538 }
8539 
8540 //----------------------------------------------------------------------------
8541 // a2dCommand_MoveMidSegment
8542 //----------------------------------------------------------------------------
8543 
8544 a2dCommand_MoveMidSegment::a2dCommand_MoveMidSegment( a2dCanvasObject* object, double x, double y, a2dLineSegmentPtr seg, bool afterinversion ):
8546 {
8547  m_x = x;
8548  m_y = y;
8549  m_seg = seg;
8550 
8551  m_canvasobject = object;
8552 
8553  m_afterinversion = afterinversion;
8554 }
8555 
8556 a2dCommand_MoveMidSegment::a2dCommand_MoveMidSegment( a2dCanvasObject* object, double x, double y, int index, bool afterinversion ):
8558 {
8559  m_x = x;
8560  m_y = y;
8561 
8562  m_canvasobject = object;
8563 
8564  m_afterinversion = afterinversion;
8565 }
8566 
8567 a2dCommand_MoveMidSegment::~a2dCommand_MoveMidSegment( void )
8568 {
8569 }
8570 
8572 {
8573 
8574  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8575  {
8576  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8577  double x, y;
8578  obj->GetPosXYMidSegment( m_seg, x, y, m_afterinversion );
8579  obj->SetPosXYMidSegment( m_seg, m_x, m_y, m_afterinversion );
8580  m_canvasobject->SetPending( true );
8581 
8582  // store undo information
8583  m_x = x;
8584  m_y = y;
8585  }
8586 
8587  //TODO GetCanvasCmp()->GetCanvasDocument()->Modify( true );
8588 
8589  return true;
8590 }
8591 
8593 {
8594  // because the previous state is stored in Do, UnDo and Do are identical
8595  bool result = Do();
8596 
8597  return result;
8598 }
8599 
8600 //----------------------------------------------------------------------------
8601 // a2dCommand_RemoveSegmentoptimizew
8602 //----------------------------------------------------------------------------
8603 
8604 a2dCommand_RemoveSegment::a2dCommand_RemoveSegment( a2dCanvasObject* object, int index ):
8606 {
8607  m_canvasobject = object;
8608  m_index = 0;
8609 }
8610 
8611 a2dCommand_RemoveSegment::a2dCommand_RemoveSegment( a2dCanvasObject* object, a2dLineSegmentPtr seg ):
8613 {
8614  m_seg = seg;
8615  if ( wxDynamicCast( object, a2dPolygonL ) )
8616  {
8617  a2dPolygonL* obj = wxStaticCast( object, a2dPolygonL );
8618  m_index = obj->GetIndexSegment( seg );
8619  }
8620 
8621  m_canvasobject = object;
8622 }
8623 
8624 a2dCommand_RemoveSegment::~a2dCommand_RemoveSegment( void )
8625 {
8626 }
8627 
8629 {
8630 
8631  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8632  {
8633  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8634  double x, y;
8635  obj->RemoveSegment( x, y, m_seg, false );
8636  obj->SetPending( true );
8637  }
8638  return true;
8639 }
8640 
8642 {
8643  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8644  {
8645  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8646  obj->InsertSegment( m_index, m_seg );
8647  obj->SetPending( true );
8648  }
8649  return true;
8650 }
8651 
8652 //----------------------------------------------------------------------------
8653 // a2dCommand_SetSegments
8654 //----------------------------------------------------------------------------
8655 
8656 a2dCommand_SetSegments::a2dCommand_SetSegments( a2dCanvasObject* object, a2dVertexList* points, bool afterinversion )
8657  : a2dCommand( true, a2dCommand_SetSegments::Id )
8658 {
8659  m_canvasobject = object;
8660  m_segments = points;
8661 
8662  if( afterinversion )
8663  {
8664  // convert points list with inverse transform of object
8665  a2dAffineMatrix trans = object->GetTransformMatrix();
8666  trans.Invert();
8667  m_segments->Transform( trans );
8668  }
8669 }
8670 
8671 a2dCommand_SetSegments::~a2dCommand_SetSegments( void )
8672 {
8673 }
8674 
8676 {
8677  if ( wxDynamicCast( m_canvasobject.Get(), a2dPolygonL ) )
8678  {
8679  a2dPolygonL* obj = wxStaticCast( m_canvasobject.Get(), a2dPolygonL );
8681  obj->SetSegments( m_segments );
8682  m_segments = old;
8683  m_canvasobject->SetPending( true );
8684  }
8685  else
8686  {
8687  // Doesn't make sense
8688  wxASSERT( 0 );
8689  }
8690 
8691  return true;
8692 }
8693 
8695 {
8696  // Do saves the old state, so Do and Undo are identical
8697  return Do();
8698 }
8699 
8700 //----------------------------------------------------------------------------
8701 // a2dCommand_MovePoint
8702 //----------------------------------------------------------------------------
8703 
8704 a2dCommand_MovePoint::a2dCommand_MovePoint( a2dSLine* object, double x, double y, bool start, bool afterinversion ):
8705  a2dCommand( true, a2dCommand_MovePoint::Id )
8706 {
8707  m_x = x;
8708  m_y = y;
8709  m_start = start;
8710 
8711  m_line = object;
8712 
8713  m_afterinversion = afterinversion;
8714 }
8715 
8716 a2dCommand_MovePoint::~a2dCommand_MovePoint( void )
8717 {
8718 }
8719 
8721 {
8722  double x, y;
8723  if ( m_start )
8724  {
8725  x = m_line->GetPosX1( m_afterinversion );
8726  y = m_line->GetPosY1( m_afterinversion );
8727  m_line->SetPosXY1( m_x, m_y, m_afterinversion );
8728  }
8729  else
8730  {
8731  x = m_line->GetPosX2( m_afterinversion );
8732  y = m_line->GetPosY2( m_afterinversion );
8733  m_line->SetPosXY2( m_x, m_y, m_afterinversion );
8734  }
8735  m_line->SetPending( true );
8736 
8737  m_x = x;
8738  m_y = y;
8739  return true;
8740 }
8741 
8743 {
8744  // because the previous state is stored in Do, UnDo and Do are identical
8745  bool result = Do();
8746  return result;
8747 }
8748 
8749 
8750 //----------------------------------------------------------------------------
8751 // a2dCommand_ChangeText
8752 //----------------------------------------------------------------------------
8753 
8754 a2dCommand_ChangeText::a2dCommand_ChangeText( a2dText* object,
8755  wxString text, int caret, const a2dFont& font, double linespace, unsigned int textflags )
8756  : a2dCommand( true, a2dCommand_ChangeText::Id )
8757 {
8758  m_canvasobject = object;
8759  m_text = text;
8760  m_caret = caret;
8761  m_font = font;
8762  m_linespace = linespace;
8763  m_textflags = textflags;
8764 #if defined(_DEBUG) && defined (SMART_POINTER_DEBUG)
8765  //klion: it is because the CurrentSmartPointerOwner can change in Clone ( )
8766  CurrentSmartPointerOwner = this;
8767 #endif
8768 }
8769 
8770 a2dCommand_ChangeText::~a2dCommand_ChangeText( void )
8771 {
8772 }
8773 
8775 {
8776  wxString oldtext = m_canvasobject->GetText();
8777  int oldcaret = m_canvasobject->GetCaret();
8778  a2dFont oldfont = m_canvasobject->GetFont();
8779  double oldlinespace = m_canvasobject->GetLineSpacing();
8780  unsigned int oldtextflags = m_canvasobject->GetTextFlags();
8781 
8782  m_canvasobject->SetText( m_text );
8783  m_canvasobject->SetCaret( m_caret );
8784  m_canvasobject->SetFont( m_font );
8785  m_canvasobject->SetLineSpacing( m_linespace );
8786  m_canvasobject->SetTextFlags( ( a2dText::a2dTextFlags ) m_textflags );
8787  m_canvasobject->SetPending( true );
8788 
8789  m_text = oldtext;
8790  m_caret = oldcaret;
8791  m_font = oldfont;
8792  m_linespace = oldlinespace;
8793  m_textflags = oldtextflags;
8794 
8795  return true;
8796 }
8797 
8799 {
8800  bool result = Do();
8801  return result;
8802 }
8803 
8804 //----------------------------------------------------------------------------
8805 // a2dCommand_ConnectPins
8806 //----------------------------------------------------------------------------
8807 
8808 a2dCommand_ConnectPins::a2dCommand_ConnectPins( a2dPin* pin1, a2dPin* pin2 )
8809  : a2dCommand( true, a2dCommand_ConnectPins::Id )
8810 {
8811  wxASSERT( pin1 );
8812  // pin2 may be 0
8813 
8814  m_pin1 = pin1;
8815  m_pin2 = pin2;
8816 }
8817 
8818 a2dCommand_ConnectPins::~a2dCommand_ConnectPins( void )
8819 {
8820 }
8821 
8823 {
8824  wxASSERT( !m_pin1 || m_pin1->MayConnectTo( m_pin2 ) );
8825  wxASSERT( !m_pin2 || m_pin2->MayConnectTo( m_pin1 ) );
8826 
8827  m_pin1->ConnectTo( m_pin2 );
8828  return true;
8829 }
8830 
8832 {
8833  m_pin1->Disconnect( m_pin2 );
8834  return true;
8835 }
8836 
8837 //----------------------------------------------------------------------------
8838 // a2dCommand_DisConnectPins
8839 //----------------------------------------------------------------------------
8840 
8841 a2dCommand_DisConnectPins::a2dCommand_DisConnectPins( a2dPin* pin1, a2dPin* pin2 )
8842  : a2dCommand( true, a2dCommand_DisConnectPins::Id )
8843 {
8844  wxASSERT( pin1 );
8845  wxASSERT( pin2 );
8846 
8847  m_pin1 = pin1;
8848  m_pin2 = pin2;
8849 }
8850 
8851 a2dCommand_DisConnectPins::~a2dCommand_DisConnectPins( void )
8852 {
8853 }
8854 
8856 {
8857  //reset pins to non connected
8858  m_pin1->Disconnect( m_pin2 );
8859  return true;
8860 }
8861 
8863 {
8864  m_pin1->ConnectTo( m_pin2 );
8865  return true;
8866 }
8867 
8868 //----------------------------------------------------------------------------
8869 // a2dCommand_SetLayerMask
8870 //----------------------------------------------------------------------------
8871 
8873 {
8874  if ( m_layer > wxMAXLAYER )
8875  {
8876  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
8877  return false;
8878  }
8879 
8880  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
8881  m_objects = objects->Clone( m_mask, a2dObject::clone_flat );
8882 
8883  if ( m_objects != wxNullCanvasObjectList )
8884  {
8885  forEachIn( a2dCanvasObjectList, m_objects )
8886  {
8887  a2dCanvasObject* obj = *iter;
8888  m_objectOldLayers.push_back( obj->GetLayer() );
8889  }
8890  }
8891  objects->ChangeLayer( m_layer, m_mask );
8892 
8893  return true;
8894 }
8895 
8897 {
8898  if ( m_objects != wxNullCanvasObjectList )
8899  {
8900  a2dLayerGroup::iterator iterl = m_objectOldLayers.begin();
8901  while ( iterl != m_objectOldLayers.end() )
8902  {
8903  forEachIn( a2dCanvasObjectList, m_objects )
8904  {
8905  a2dCanvasObject* obj = *iter;
8906  obj->SetLayer( ( *iterl ) );
8907  iterl++;
8908  }
8909  }
8910  }
8911  m_objects->clear();
8912  return true;
8913 }
8914 
8915 //----------------------------------------------------------------------------
8916 // a2dCommand_DeleteMask
8917 //----------------------------------------------------------------------------
8918 a2dCommand_DeleteMask::a2dCommand_DeleteMask( a2dCanvasObject* parent, a2dCanvasObjectFlagsMask mask ):
8919  a2dCommandMasked( parent, NULL, mask, a2dCanvasOFlags::SELECTED2, false, false, a2dCommand_DeleteMask::Id )
8920 {
8921 }
8922 
8924 {
8925  GetCanvasCmp()->SetCurrentGroup( this );
8926 
8928 
8929  for( a2dCanvasObjectList::iterator iter = m_maskedObjects.begin(); iter != m_maskedObjects.end(); ++iter )
8930  {
8931  a2dCanvasObject* obj = ( *iter );
8932  obj->SetBin( true );
8933  }
8934 
8935  for( a2dCanvasObjectList::iterator iter = m_maskedObjects.begin(); iter != m_maskedObjects.end(); ++iter )
8936  {
8937  a2dCanvasObject* obj = ( *iter );
8939  GetCanvasCmp()->Submit( cmd, true );
8940  }
8941 
8942  for( a2dCanvasObjectList::iterator iter = m_maskedObjects.begin(); iter != m_maskedObjects.end(); ++iter )
8943  {
8944  a2dCanvasObject* obj = ( *iter );
8945  obj->SetBin( false );
8946  }
8947 
8948  GetCanvasCmp()->CommandGroupEnd( this );
8949  return true;
8950 }
8951 
8953 {
8955  return true;
8956 }
8957 
8959 {
8961  return true;
8962 }
8963 
8964 //----------------------------------------------------------------------------
8965 // a2dCommand_ToTopMask
8966 //----------------------------------------------------------------------------
8967 
8968 a2dCommand_ToTopMask::a2dCommand_ToTopMask( a2dCanvasObject* parent , a2dCanvasObjectFlagsMask mask ):
8969  a2dCommandMasked( parent, NULL, mask, a2dCanvasOFlags::SELECTED2, true, false, Id )
8970 {
8971 }
8972 
8974 {
8975  GetCanvasCmp()->SetCurrentGroup( this );
8976 
8978 
8980  objects->BringToTop( m_which );
8981 
8982  GetCanvasCmp()->CommandGroupEnd( this );
8983  return true;
8984 }
8985 
8987 {
8989 
8991  a2dlist< long >::iterator index = m_objectsIndex.begin();
8992  while ( index != m_objectsIndex.end() )
8993  {
8995  {
8996  a2dCanvasObject* obj = *iter;
8997  objects->Release( obj, false, false, true );
8998  objects->Insert( *index, obj, true );
8999  index++;
9000  }
9001  }
9002  return true;
9003 }
9004 
9006 {
9008 
9010  objects->BringToTop( m_which );
9011 
9012  return true;
9013 }
9014 
9015 
9016 //----------------------------------------------------------------------------
9017 // a2dCommand_ToBackMask
9018 //----------------------------------------------------------------------------
9019 
9020 a2dCommand_ToBackMask::a2dCommand_ToBackMask( a2dCanvasObject* parent , a2dCanvasObjectFlagsMask mask ):
9021  a2dCommandMasked( parent, NULL, mask, a2dCanvasOFlags::SELECTED2, true, false, Id )
9022 {
9023 }
9024 
9026 {
9027  GetCanvasCmp()->SetCurrentGroup( this );
9028 
9030 
9032  objects->BringToBack( m_which );
9033 
9034  GetCanvasCmp()->CommandGroupEnd( this );
9035  return true;
9036 }
9037 
9039 {
9041 
9043  a2dlist< long >::iterator index = m_objectsIndex.begin();
9044  while ( index != m_objectsIndex.end() )
9045  {
9047  {
9048  a2dCanvasObject* obj = *iter;
9049  objects->Release( obj, false, false, true );
9050  objects->Insert( *index, obj, true );
9051  index++;
9052  }
9053  }
9054  return true;
9055 }
9056 
9058 {
9060 
9062  objects->BringToBack( m_which );
9063 
9064  return true;
9065 }
9066 
9067 //----------------------------------------------------------------------------
9068 // a2dCommand_CopyMask
9069 //----------------------------------------------------------------------------
9070 
9072 {
9073  m_target = m_target == -1 ? GetDrawHabitat()->GetTarget() : m_target;
9074  if ( m_target > wxMAXLAYER )
9075  {
9076  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
9077  return false;
9078  }
9079 
9080  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9081 
9082  if ( objects != wxNullCanvasObjectList )
9083  objects->Copy( m_x, m_y, m_mask, m_toTarget == false ? -1 : m_target, true );
9084 
9085  m_objects = objects->CloneChecked( a2dObject::clone_flat );
9086  return true;
9087 }
9088 
9090 {
9091  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9092  if ( m_objects != wxNullCanvasObjectList )
9093  {
9094  forEachIn( a2dCanvasObjectList, m_objects )
9095  {
9096  a2dCanvasObject* obj = *iter;
9097  //delete right now and not delayed in idle time, this is save for sure.
9098  objects->Release( obj, false, false, true );
9099  }
9100  }
9101  m_objects->clear();
9102  m_parent->SetPending( true );
9103  return true;
9104 }
9105 
9106 //----------------------------------------------------------------------------
9107 // a2dCommand_MoveMask
9108 //----------------------------------------------------------------------------
9109 
9111 {
9112  m_target = m_target == -1 ? GetDrawHabitat()->GetTarget() : m_target;
9113  if ( m_target > wxMAXLAYER )
9114  {
9115  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
9116  return false;
9117  }
9118 
9119  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9120  m_objects = objects->Clone( m_mask, a2dObject::clone_flat );
9121 
9122  /* with depth maybe??
9123  a2dWalker_LayerCanvasObjects moveLayer( m_args.argValue.mask );
9124  moveLayer.SetRecursionDepth( 2 );
9125  moveLayer.SetOperation( a2dWalker_LayerCanvasObjects::moveLayers );
9126  moveLayer.SetTarget( m_args.argValue.target );
9127  moveLayer.Start( m_parent );
9128  */
9129 
9130  if ( m_objects != wxNullCanvasObjectList )
9131  {
9132  forEachIn( a2dCanvasObjectList, m_objects )
9133  {
9134  a2dCanvasObject* obj = *iter;
9135  m_objectOldLayers.push_back( obj->GetLayer() );
9136  }
9137  objects->Move( m_x, m_y, m_mask, m_toTarget == false ? -1 : m_target );
9138  m_parent->SetPending( true );
9139  }
9140 
9141  return true;
9142 }
9143 
9145 {
9146  if ( m_objects != wxNullCanvasObjectList )
9147  {
9148  a2dLayerGroup::iterator iterl = m_objectOldLayers.begin();
9149  while ( iterl != m_objectOldLayers.end() )
9150  {
9151  forEachIn( a2dCanvasObjectList, m_objects )
9152  {
9153  a2dCanvasObject* obj = *iter;
9154  obj->Translate( -m_x, -m_y );
9155  obj->SetLayer( ( *iterl ) );
9156  iterl++;
9157  }
9158  }
9159  }
9160  m_objects->clear();
9161  return true;
9162 }
9163 
9164 //----------------------------------------------------------------------------
9165 // a2dCommand_GroupMask
9166 //----------------------------------------------------------------------------
9167 
9169 {
9170  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9171  m_objects = objects->Clone( m_mask, a2dObject::clone_flat, &m_objectsIndex );
9172  if ( m_objects != wxNullCanvasObjectList )
9173  {
9174  m_groupobject = m_parent->CreateHierarchy( m_mask, false );
9175  if ( !m_name.IsEmpty() )
9176  m_groupobject->SetName( m_name );
9177  a2dWalker_SetSpecificFlagsCanvasObjects setflags( m_mask );
9178  setflags.SetSkipNotRenderedInDrawing( true );
9179  setflags.Start( m_parent, false );
9180  m_parent->SetPending( true );
9181  }
9182  return true;
9183 }
9184 
9186 {
9187  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9188  if ( m_objects != wxNullCanvasObjectList )
9189  {
9190  objects->Release( m_groupobject, false, false, true );
9191  double x = m_groupobject->GetPosX();
9192  double y = m_groupobject->GetPosY();
9193 
9194  a2dlist< long >::iterator index = m_objectsIndex.begin();
9195  while ( index != m_objectsIndex.end() )
9196  {
9197  forEachIn( a2dCanvasObjectList, m_objects )
9198  {
9199  a2dCanvasObject* obj = *iter;
9200  obj->Translate( x, y );
9201  objects->Insert( *index, obj, true );
9202  index++;
9203  }
9204  }
9205  }
9206  m_objects->clear();
9207  return true;
9208 }
9209 
9210 //----------------------------------------------------------------------------
9211 // a2dCommand_UnGroupMask
9212 //----------------------------------------------------------------------------
9213 
9215 {
9216  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9217  m_objects = objects->Clone( m_mask, a2dObject::clone_flat, &m_objectsIndex );
9218  if ( m_objects != wxNullCanvasObjectList )
9219  {
9220  a2dWalker_RemoveHierarchy remh( m_mask );
9221  if ( m_deep )
9222  remh.SetRecursionDepth( 20 );
9223  else
9224  remh.SetRecursionDepth( 1 );
9225  remh.SetSkipNotRenderedInDrawing( true );
9226  remh.Start( m_parent );
9227  m_parent->SetPending( true );
9228  }
9229  return true;
9230 }
9231 
9233 {
9234  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9235  if ( m_objects != wxNullCanvasObjectList )
9236  {
9237  a2dlist< long >::iterator index = m_objectsIndex.begin();
9238  while ( index != m_objectsIndex.end() )
9239  {
9240  forEachIn( a2dCanvasObjectList, m_objects )
9241  {
9242  a2dCanvasObject* obj = *iter;
9243  objects->Insert( *index, obj, true );
9244  index++;
9245  }
9246  }
9247  }
9248  m_objects->clear();
9249  return true;
9250 }
9251 
9252 //----------------------------------------------------------------------------
9253 // a2dCommand_MergeMask
9254 //----------------------------------------------------------------------------
9255 
9257 {
9258  m_target = m_target == -1 ? GetDrawHabitat()->GetTarget() : m_target;
9259  if ( m_target > wxMAXLAYER )
9260  {
9261  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
9262  return false;
9263  }
9264 
9265  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9266  if ( m_clearorg )
9267  m_objects = objects->Clone( m_mask, a2dObject::clone_flat, &m_objectsIndex );
9268 
9269  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
9270 
9271  if ( m_objects != wxNullCanvasObjectList )
9272  {
9273 #if wxART2D_USE_KBOOL
9274  a2dBooleanWalkerHandler booloper( m_mask );
9275  booloper.SetReleaseOrignals( m_clearorg );
9276  booloper.SetClearTarget( false );
9277  a2dLayerGroup groupA;
9278  groupA.push_back( wxLAYER_ALL );
9279  booloper.SetGroupA( groupA );
9280  a2dLayerGroup groupB;
9281  booloper.SetGroupB( groupB );
9282  booloper.SetTarget( m_takeLayerFirstObject ? -1 : m_target );
9283  booloper.SetRecursionDepth( m_depth );
9284  booloper.SetSelectedOnlyA( true );
9285  booloper.SetSelectedOnlyB( true );
9286 
9287  double marge = GetDrawHabitat()->GetBooleanEngineMarge();
9288  booloper.SetMarge( marge / drawing->GetUnitsScale() );
9289  booloper.SetGrid( GetDrawHabitat()->GetBooleanEngineGrid() );
9290  booloper.SetDGrid( GetDrawHabitat()->GetBooleanEngineDGrid() );
9291  booloper.SetCorrectionAber( double( GetDrawHabitat()->GetBooleanEngineCorrectionAber() ) / drawing->GetUnitsScale() );
9292  booloper.SetCorrectionFactor( double( GetDrawHabitat()->GetBooleanEngineCorrectionFactor() ) / drawing->GetUnitsScale() );
9293  booloper.SetMaxlinemerge( double( GetDrawHabitat()->GetBooleanEngineMaxlinemerge() ) / drawing->GetUnitsScale() );
9294  booloper.SetWindingRule( GetDrawHabitat()->GetBooleanEngineWindingRule() );
9295  booloper.SetLinkHoles( GetDrawHabitat()->GetBooleanEngineLinkHoles() );
9296  booloper.SetRoundfactor( GetDrawHabitat()->GetBooleanEngineRoundfactor() );
9297 
9299  booloper.SetSkipNotRenderedInDrawing( true );
9300  booloper.Start( m_parent );
9301 
9302  // bin2 flags is set for resulting polygons.
9303  m_mergedObjects = objects->Clone( a2dCanvasOFlags::BIN2, a2dObject::clone_flat, NULL );
9304 
9305  a2dWalker_SetSpecificFlagsCanvasObjects setflags( m_mask );
9306  setflags.SetSkipNotRenderedInDrawing( true );
9307  setflags.Start( m_parent, false );
9308  m_parent->SetPending( true );
9309 #endif //wxART2D_USE_KBOOL
9310  }
9311  return true;
9312 }
9313 
9315 {
9316  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9317  if ( m_objects != wxNullCanvasObjectList )
9318  {
9319  a2dlist< long >::iterator index = m_objectsIndex.begin();
9320  while ( index != m_objectsIndex.end() )
9321  {
9322  forEachIn( a2dCanvasObjectList, m_objects )
9323  {
9324  a2dCanvasObject* obj = *iter;
9325  obj->SetRelease( false );
9326  objects->Insert( *index, obj, true );
9327  index++;
9328  }
9329  }
9330  m_objects->clear();
9331  }
9332  forEachIn( a2dCanvasObjectList, m_mergedObjects )
9333  {
9334  a2dCanvasObject* obj = *iter;
9335  //delete right now and not delayed in idle time, this is save for sure.
9336  objects->Release( obj, false, false, true );
9337  }
9338  m_mergedObjects->clear();
9339  return true;
9340 }
9341 
9342 //----------------------------------------------------------------------------
9343 // a2dCommand_OffsetMask
9344 //----------------------------------------------------------------------------
9345 
9347 {
9348  m_target = m_target == -1 ? GetDrawHabitat()->GetTarget() : m_target;
9349  if ( m_target > wxMAXLAYER )
9350  {
9351  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
9352  return false;
9353  }
9354  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
9355 
9356  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9357  if ( m_clearorg )
9358  m_objects = objects->Clone( m_mask, a2dObject::clone_flat, &m_objectsIndex );
9359 
9360  if ( m_objects != wxNullCanvasObjectList )
9361  {
9362 #if wxART2D_USE_KBOOL
9363  a2dBooleanWalkerHandler booloper( m_mask );
9364  booloper.SetReleaseOrignals( m_clearorg );
9365  booloper.SetClearTarget( false );
9366  a2dLayerGroup groupA;
9367  groupA.push_back( wxLAYER_ALL );
9368  booloper.SetGroupA( groupA );
9369  a2dLayerGroup groupB;
9370  booloper.SetGroupB( groupB );
9371  booloper.SetTarget( m_takeLayerFirstObject ? -1 : m_target );
9372  booloper.SetRecursionDepth( m_depth );
9373  booloper.SetSelectedOnlyA( true );
9374  booloper.SetSelectedOnlyB( true );
9375 
9376  double marge = GetDrawHabitat()->GetBooleanEngineMarge();
9377  booloper.SetMarge( marge / drawing->GetUnitsScale() );
9378  booloper.SetGrid( GetDrawHabitat()->GetBooleanEngineGrid() );
9379  booloper.SetDGrid( GetDrawHabitat()->GetBooleanEngineDGrid() );
9380  booloper.SetCorrectionAber( double( GetDrawHabitat()->GetBooleanEngineCorrectionAber() ) / drawing->GetUnitsScale() );
9381  booloper.SetCorrectionFactor( double( GetDrawHabitat()->GetBooleanEngineCorrectionFactor() ) / drawing->GetUnitsScale() );
9382  booloper.SetMaxlinemerge( double( GetDrawHabitat()->GetBooleanEngineMaxlinemerge() ) / drawing->GetUnitsScale() );
9383  booloper.SetWindingRule( GetDrawHabitat()->GetBooleanEngineWindingRule() );
9384  booloper.SetLinkHoles( GetDrawHabitat()->GetBooleanEngineLinkHoles() );
9385  booloper.SetRoundfactor( GetDrawHabitat()->GetBooleanEngineRoundfactor() );
9386 
9388  booloper.SetSkipNotRenderedInDrawing( true );
9389  booloper.Start( m_parent );
9390 
9391  // bin2 flags is set for resulting polygons.
9392  m_offsetObjects = objects->Clone( a2dCanvasOFlags::BIN2, a2dObject::clone_flat, NULL );
9393 
9394  a2dWalker_SetSpecificFlagsCanvasObjects setflags( m_mask );
9395  setflags.SetSkipNotRenderedInDrawing( true );
9396  setflags.Start( m_parent, false );
9397  m_parent->SetPending( true );
9398 #endif //wxART2D_USE_KBOOL
9399  }
9400  return true;
9401 }
9402 
9404 {
9405  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9406  if ( m_objects != wxNullCanvasObjectList )
9407  {
9408  a2dlist< long >::iterator index = m_objectsIndex.begin();
9409  while ( index != m_objectsIndex.end() )
9410  {
9411  forEachIn( a2dCanvasObjectList, m_objects )
9412  {
9413  a2dCanvasObject* obj = *iter;
9414  obj->SetRelease( false );
9415  objects->Insert( *index, obj, true );
9416  index++;
9417  }
9418  }
9419  m_objects->clear();
9420  }
9421  forEachIn( a2dCanvasObjectList, m_offsetObjects )
9422  {
9423  a2dCanvasObject* obj = *iter;
9424  //delete right now and not delayed in idle time, this is save for sure.
9425  objects->Release( obj, false, false, true );
9426  }
9427  m_offsetObjects->clear();
9428  return true;
9429 }
9430 
9431 //----------------------------------------------------------------------------
9432 // a2dCommand_PolygonToSurfaceMask
9433 //----------------------------------------------------------------------------
9434 
9436 {
9437  m_target = m_target == -1 ? GetDrawHabitat()->GetTarget() : m_target;
9438  if ( m_target > wxMAXLAYER )
9439  {
9440  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
9441  return false;
9442  }
9443 
9444  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
9445 
9446  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9447  if ( m_clearorg )
9448  m_objects = objects->Clone( m_mask, a2dObject::clone_flat, &m_objectsIndex );
9449 
9450  if ( m_objects != wxNullCanvasObjectList )
9451  {
9452 #if wxART2D_USE_KBOOL
9453  a2dBooleanWalkerHandler booloper( m_mask );
9454  booloper.SetReleaseOrignals( m_clearorg );
9455  booloper.SetClearTarget( false );
9456  a2dLayerGroup groupA;
9457  groupA.push_back( wxLAYER_ALL );
9458  booloper.SetGroupA( groupA );
9459  a2dLayerGroup groupB;
9460  booloper.SetGroupB( groupB );
9461  booloper.SetTarget( m_takeLayerFirstObject ? -1 : m_target );
9462  booloper.SetRecursionDepth( m_depth );
9463  booloper.SetSelectedOnlyA( true );
9464  booloper.SetSelectedOnlyB( true );
9465 
9466  double marge = GetDrawHabitat()->GetBooleanEngineMarge();
9467  booloper.SetMarge( marge / drawing->GetUnitsScale() );
9468  booloper.SetGrid( GetDrawHabitat()->GetBooleanEngineGrid() );
9469  booloper.SetDGrid( GetDrawHabitat()->GetBooleanEngineDGrid() );
9470  booloper.SetCorrectionAber( double( GetDrawHabitat()->GetBooleanEngineCorrectionAber() ) / drawing->GetUnitsScale() );
9471  booloper.SetCorrectionFactor( double( GetDrawHabitat()->GetBooleanEngineCorrectionFactor() ) / drawing->GetUnitsScale() );
9472  booloper.SetMaxlinemerge( double( GetDrawHabitat()->GetBooleanEngineMaxlinemerge() ) / drawing->GetUnitsScale() );
9473  booloper.SetWindingRule( GetDrawHabitat()->GetBooleanEngineWindingRule() );
9474  booloper.SetLinkHoles( false );
9475  booloper.SetRoundfactor( GetDrawHabitat()->GetBooleanEngineRoundfactor() );
9477  booloper.SetSkipNotRenderedInDrawing( true );
9478 
9479  booloper.Start( m_parent );
9480 
9481  // bin2 flags is set for resulting polygons.
9482  m_offsetObjects = objects->Clone( a2dCanvasOFlags::BIN2, a2dObject::clone_flat, NULL );
9483 
9484  a2dWalker_SetSpecificFlagsCanvasObjects setflags( m_mask );
9485  setflags.SetSkipNotRenderedInDrawing( true );
9486  setflags.Start( m_parent, false );
9487  m_parent->SetPending( true );
9488 #endif //wxART2D_USE_KBOOL
9489  }
9490  return true;
9491 }
9492 
9494 {
9495  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9496  if ( m_objects != wxNullCanvasObjectList )
9497  {
9498  a2dlist< long >::iterator index = m_objectsIndex.begin();
9499  while ( index != m_objectsIndex.end() )
9500  {
9501  forEachIn( a2dCanvasObjectList, m_objects )
9502  {
9503  a2dCanvasObject* obj = *iter;
9504  obj->SetRelease( false );
9505  objects->Insert( *index, obj, true );
9506  index++;
9507  }
9508  }
9509  m_objects->clear();
9510  }
9511  forEachIn( a2dCanvasObjectList, m_offsetObjects )
9512  {
9513  a2dCanvasObject* obj = *iter;
9514  //delete right now and not delayed in idle time, this is save for sure.
9515  objects->Release( obj, false, false, true );
9516  }
9517  m_offsetObjects->clear();
9518  return true;
9519 }
9520 
9521 //----------------------------------------------------------------------------
9522 // a2dCommand_SurfaceToPolygonMask
9523 //----------------------------------------------------------------------------
9524 
9526 {
9527  if ( m_target > wxMAXLAYER )
9528  {
9529  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
9530  return false;
9531  }
9532 
9533  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
9534 
9535  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9536  if ( m_clearorg )
9537  m_objects = objects->Clone( m_mask, a2dObject::clone_flat, &m_objectsIndex );
9538 
9539  if ( m_objects != wxNullCanvasObjectList )
9540  {
9541 #if wxART2D_USE_KBOOL
9542  a2dBooleanWalkerHandler booloper( m_mask );
9543  booloper.SetReleaseOrignals( m_clearorg );
9544  booloper.SetClearTarget( false );
9545  a2dLayerGroup groupA;
9546  groupA.push_back( wxLAYER_ALL );
9547  booloper.SetGroupA( groupA );
9548  a2dLayerGroup groupB;
9549  booloper.SetGroupB( groupB );
9550  booloper.SetTarget( m_takeLayerFirstObject ? -1 : m_target );
9551  booloper.SetRecursionDepth( m_depth );
9552  booloper.SetSelectedOnlyA( true );
9553  booloper.SetSelectedOnlyB( true );
9554 
9555  double marge = GetDrawHabitat()->GetBooleanEngineMarge();
9556  booloper.SetMarge( marge / drawing->GetUnitsScale() );
9557  booloper.SetGrid( GetDrawHabitat()->GetBooleanEngineGrid() );
9558  booloper.SetDGrid( GetDrawHabitat()->GetBooleanEngineDGrid() );
9559  booloper.SetCorrectionAber( double( GetDrawHabitat()->GetBooleanEngineCorrectionAber() ) / drawing->GetUnitsScale() );
9560  booloper.SetCorrectionFactor( double( GetDrawHabitat()->GetBooleanEngineCorrectionFactor() ) / drawing->GetUnitsScale() );
9561  booloper.SetMaxlinemerge( double( GetDrawHabitat()->GetBooleanEngineMaxlinemerge() ) / drawing->GetUnitsScale() );
9562  booloper.SetWindingRule( GetDrawHabitat()->GetBooleanEngineWindingRule() );
9563  booloper.SetLinkHoles( true );
9564  booloper.SetRoundfactor( GetDrawHabitat()->GetBooleanEngineRoundfactor() );
9566  booloper.SetSkipNotRenderedInDrawing( true );
9567 
9568  booloper.Start( m_parent );
9569 
9570  // bin2 flags is set for resulting polygons.
9571  m_offsetObjects = objects->Clone( a2dCanvasOFlags::BIN2, a2dObject::clone_flat, NULL );
9572 
9573  a2dWalker_SetSpecificFlagsCanvasObjects setflags( m_mask );
9574  setflags.SetSkipNotRenderedInDrawing( true );
9575  setflags.Start( m_parent, false );
9576  m_parent->SetPending( true );
9577 #endif //wxART2D_USE_KBOOL
9578  }
9579  return true;
9580 }
9581 
9583 {
9584  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9585  if ( m_objects != wxNullCanvasObjectList )
9586  {
9587  a2dlist< long >::iterator index = m_objectsIndex.begin();
9588  while ( index != m_objectsIndex.end() )
9589  {
9590  forEachIn( a2dCanvasObjectList, m_objects )
9591  {
9592  a2dCanvasObject* obj = *iter;
9593  obj->SetRelease( false );
9594  objects->Insert( *index, obj, true );
9595  index++;
9596  }
9597  }
9598  m_objects->clear();
9599  }
9600  forEachIn( a2dCanvasObjectList, m_offsetObjects )
9601  {
9602  a2dCanvasObject* obj = *iter;
9603  //delete right now and not delayed in idle time, this is save for sure.
9604  objects->Release( obj, false, false, true );
9605  }
9606  m_offsetObjects->clear();
9607  return true;
9608 }
9609 
9610 //----------------------------------------------------------------------------
9611 // a2dCommand_UrlOnMask
9612 //----------------------------------------------------------------------------
9613 
9615 {
9616  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9617  m_oldobjects = objects->Clone( m_mask, a2dObject::clone_deep, &m_objectsIndex );
9618  m_objects = objects->Clone( m_mask, a2dObject::clone_flat );
9619 
9620  if ( m_objects != wxNullCanvasObjectList )
9621  {
9622  for( a2dCanvasObjectList::iterator iter = m_objects->begin(); iter != m_objects->end(); iter++ )
9623  {
9624  PROPID_URI->SetPropertyToObject( ( *iter ), m_uri.BuildURI() );
9625  }
9626  }
9627 
9628  return true;
9629 }
9630 
9632 {
9633  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9634  if ( m_oldobjects != wxNullCanvasObjectList )
9635  {
9636  a2dlist< long >::iterator index = m_objectsIndex.begin();
9637  while ( index != m_objectsIndex.end() )
9638  {
9639  forEachIn( a2dCanvasObjectList, m_objects )
9640  {
9641  a2dCanvasObject* obj = *iter;
9642  obj->SetRelease( false );
9643  objects->Insert( *index, obj, true );
9644  index++;
9645  }
9646  }
9647  m_oldobjects->clear();
9648  }
9649  forEachIn( a2dCanvasObjectList, m_objects )
9650  {
9651  a2dCanvasObject* obj = *iter;
9652  //delete right now and not delayed in idle time, this is save for sure.
9653  objects->Release( obj, false, false, true );
9654  }
9655  m_objects->clear();
9656  return true;
9657 }
9658 
9659 //----------------------------------------------------------------------------
9660 // a2dCommand_SetFillStrokeMask
9661 //----------------------------------------------------------------------------
9662 
9664 {
9665  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9666  m_oldobjects = objects->Clone( m_mask, a2dObject::clone_deep, &m_objectsIndex );
9667  m_objects = objects->Clone( m_mask, a2dObject::clone_flat );
9668 
9669  if ( m_objects != wxNullCanvasObjectList )
9670  {
9671  m_objects->SetDrawerStyle( GetDrawHabitat()->GetFill(), GetDrawHabitat()->GetStroke(), m_mask );
9672  }
9673 
9674  return true;
9675 }
9676 
9678 {
9679  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9680  if ( m_oldobjects != wxNullCanvasObjectList )
9681  {
9682  a2dlist< long >::iterator index = m_objectsIndex.begin();
9683  while ( index != m_objectsIndex.end() )
9684  {
9685  forEachIn( a2dCanvasObjectList, m_oldobjects )
9686  {
9687  a2dCanvasObject* obj = *iter;
9688  obj->SetRelease( false );
9689  objects->Insert( *index, obj, true );
9690  index++;
9691  }
9692  }
9693  m_oldobjects->clear();
9694  }
9695  forEachIn( a2dCanvasObjectList, m_objects )
9696  {
9697  a2dCanvasObject* obj = *iter;
9698  //delete right now and not delayed in idle time, this is save for sure.
9699  objects->Release( obj, false, false, true );
9700  }
9701  m_objects->clear();
9702  return true;
9703 }
9704 
9705 //----------------------------------------------------------------------------
9706 // a2dCommand_SetFillStrokeExtMask
9707 //----------------------------------------------------------------------------
9708 const a2dCommandId a2dCommand_SetFillStrokeExtMask::Id( wxT( "SetFillStrokeExtMask" ) );
9709 
9710 a2dCommand_SetFillStrokeExtMask::a2dCommand_SetFillStrokeExtMask( a2dCanvasObject* parent, const a2dExtStroke& extStroke, const a2dExtFill& extFill, a2dCanvasObjectFlagsMask mask ):
9711  a2dCommandMasked( parent, NULL, mask, a2dCanvasOFlags::SELECTED2, false, false, Id )
9712 {
9713  m_extStroke = extStroke;
9714  m_extFill = extFill;
9715 }
9716 
9718 {
9719  GetCanvasCmp()->SetCurrentGroup( this );
9720 
9722 
9724 
9725  a2dCanvasObjectList::iterator iter = m_maskedObjects.begin();
9726  while( iter != m_maskedObjects.end() )
9727  {
9728  a2dCanvasObject* obj = *iter;
9729 
9730  a2dStroke oldStroke = obj->GetStroke();
9731  a2dFill oldFill = obj->GetFill();
9732  bool layerStroke = false;
9733  bool layerFill = false;
9734 
9735  // in case of layer stroke, use the stroke from the layer setup, as input to mix with the extended stroke.
9736  if ( oldStroke == *a2dNullSTROKE && obj->GetRoot()->GetLayerSetup() )
9737  {
9738  layerStroke = true;
9739  oldStroke = obj->GetRoot()->GetLayerSetup()->GetStroke( obj->GetLayer() );
9740  }
9741  // in case of layer fill, use the fill from the layer setup, as input to mix with the extended fill.
9742  if ( oldFill == *a2dNullFILL && obj->GetRoot()->GetLayerSetup() )
9743  {
9744  layerFill = true;
9745  oldFill = obj->GetRoot()->GetLayerSetup()->GetFill( obj->GetLayer() );
9746  }
9747 
9748  bool changed = false;
9749  a2dStroke s1Edited = m_extStroke.Get( oldStroke );
9750  if ( s1Edited != oldStroke && !( s1Edited == *a2dNullSTROKE && layerStroke ) )
9751  {
9752  changed = true;
9753  obj->SetPending( true );
9754  obj->SetStroke( s1Edited );
9755  }
9756  a2dFill f1Edited = m_extFill.Get( oldFill );
9757  if ( f1Edited != oldFill && !( f1Edited == *a2dNullFILL && layerFill ) && obj->GetFilled() )
9758  {
9759  changed = true;
9760  obj->SetPending( true );
9761  obj->SetFill( f1Edited );
9762  }
9763 
9764  if ( changed )
9765  {
9766  m_strokes.push_back( oldStroke );
9767  m_fills.push_back( oldFill );
9768  iter++;
9769  }
9770  else
9771  iter = m_maskedObjects.erase( iter );
9772  }
9773 
9774  GetCanvasCmp()->CommandGroupEnd( this );
9775  return true;
9776 }
9777 
9779 {
9781 
9782  a2dlist< a2dStroke > strokes;
9783  a2dlist< a2dFill > fills;
9784 
9786  a2dlist< a2dStroke >::iterator indexs = m_strokes.begin();
9787  a2dlist< a2dFill >::iterator indexf = m_fills.begin();
9789  {
9790  a2dCanvasObject* obj = *iter;
9791  strokes.push_back( obj->GetStroke() );
9792  fills.push_back( obj->GetFill() );
9793 
9794  obj->SetStroke( *indexs );
9795  obj->SetFill( *indexf );
9796  obj->SetPending( true );
9797 
9798  indexs++; indexf++;
9799  }
9800 
9801  m_strokes = strokes;
9802  m_fills = fills;
9803  return true;
9804 }
9805 
9807 {
9808  return Undo();
9809 }
9810 
9811 //----------------------------------------------------------------------------
9812 // a2dCommand_SetTextChangesMask
9813 //----------------------------------------------------------------------------
9814 const a2dCommandId a2dCommand_SetTextChangesMask::Id( wxT( "SetFontExtMask" ) );
9815 
9816 a2dCommand_SetTextChangesMask::a2dCommand_SetTextChangesMask( a2dCanvasObject* parent, const a2dTextChanges& extFont, int alignment, a2dCanvasObjectFlagsMask mask ):
9817  a2dCommandMasked( parent, NULL, mask, a2dCanvasOFlags::SELECTED2, false, false, Id )
9818 {
9819  m_extFont = extFont;
9820  m_alignment = alignment;
9821 }
9822 
9824 {
9825  GetCanvasCmp()->SetCurrentGroup( this );
9826 
9828 
9830  wxArrayString valid_styles, valid_extras;
9831  // Create a list of valid styles for the given font (from a2dExtChanges)
9832  if( !m_extFont.IsStyleValid() )
9833  {
9834  wxString common_fonttype = m_extFont.GetFont().GetFontInfo().GetType();
9835  wxString common_fontname = m_extFont.GetFont().GetFontInfo().GetName();
9836 
9837  a2dFontInfoList *fonts = m_extFont.GetFontInfoList();
9838 
9839  for ( size_t i = 0; i < fonts->GetCount(); i++ )
9840  {
9841  wxString fonttype = fonts->Item( i )->GetData()->GetType();
9842  wxString fontname = fonts->Item( i )->GetData()->GetName();
9843  wxString fontstyle = fonts->Item( i )->GetData()->GetStyle();
9844  wxString fontextra = fonts->Item( i )->GetData()->GetExtra();
9845 
9846  if ( ( fonttype == common_fonttype || common_fonttype == _( "* (All types)" ) )
9847  && fontname == common_fontname )
9848  {
9849  valid_styles.push_back( fontstyle );
9850  valid_extras.push_back( fontextra );
9851  }
9852  }
9853  }
9854 
9855  a2dCanvasObjectList::iterator iter = m_maskedObjects.begin();
9856  while( iter != m_maskedObjects.end() )
9857  {
9858  a2dCanvasObject* obj = *iter;
9859  a2dText* text = wxDynamicCast( obj, a2dText );
9860 
9861  if ( obj->GetRelease() || !text )
9862  continue;
9863 
9864  a2dFont oldFont = text->GetFont();
9865  int oldAlign = text->GetAlignment();
9866  unsigned int oldFlags = text->GetTextFlags();
9867  a2dFont f1Edited = m_extFont.GetFont( oldFont, valid_styles, valid_extras );
9868  int alignEdited = m_extFont.GetAlignment( oldAlign );
9869  unsigned int flagsEdited = m_extFont.GetTextFlags( oldFlags );
9870 
9871  if( m_extFont.IsNameValid() && m_extFont.IsStyleValid() )
9872  text->SetWrongLoad( false );
9873 
9874  if ( f1Edited != oldFont || alignEdited != oldAlign || flagsEdited != oldFlags )
9875  {
9876  obj->SetPending( true );
9877  text->SetFont( f1Edited );
9878  text->SetAlignment( alignEdited );
9879  text->SetTextFlags( flagsEdited );
9880 
9881  m_fonts.push_back( oldFont );
9882  m_alignmentslist.push_back( oldAlign );
9883  m_textflagslist.push_back( oldFlags );
9884  iter++;
9885  }
9886  else
9887  iter = m_maskedObjects.erase( iter );
9888  }
9889 
9890  GetCanvasCmp()->CommandGroupEnd( this );
9891  return true;
9892 }
9893 
9895 {
9897 
9898  a2dlist< a2dFont > fonts;
9899  a2dlist< int > alignmentslist;
9900  a2dlist< unsigned int > textflagslist;
9901 
9903 
9904  a2dlist< a2dFont >::iterator indexf = m_fonts.begin();
9905  a2dlist< int >::iterator indexal = m_alignmentslist.begin();
9906  a2dlist< unsigned int >::iterator indextf = m_textflagslist.begin();
9908  {
9909  a2dCanvasObject* obj = *iter;
9910  a2dText* text = wxDynamicCast( obj, a2dText );
9911 
9912  if ( obj->GetRelease() || !text )
9913  continue;
9914  fonts.push_back( text->GetFont() );
9915  alignmentslist.push_back( text->GetAlignment() );
9916  textflagslist.push_back( text->GetTextFlags() );
9917 
9918  text->SetFont( *indexf );
9919  text->SetAlignment( *indexal );
9920  text->SetTextFlags( *indextf );
9921  obj->SetPending( true );
9922 
9923  indexf++;
9924  }
9925 
9926  m_fonts = fonts;
9927  m_alignmentslist = alignmentslist;
9928  m_textflagslist = textflagslist;
9929 
9930  return true;
9931 }
9932 
9934 {
9935  return Undo();
9936 }
9937 
9938 //----------------------------------------------------------------------------
9939 // a2dCommand_ImagesToRectMask
9940 //----------------------------------------------------------------------------
9941 
9943 {
9944  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9945  m_oldobjects = objects->Clone( m_mask, a2dObject::clone_deep, &m_objectsIndex );
9946  m_objects = objects->Clone( m_mask, a2dObject::clone_flat );
9947 
9948  if ( m_objects != wxNullCanvasObjectList )
9949  {
9950  for( a2dCanvasObjectList::iterator iter = m_objects->begin(); iter != m_objects->end(); iter++ )
9951  {
9952  a2dImage* image = wxDynamicCast( ( *iter ).Get() , a2dImage );
9953  if ( image )
9954  {
9955  a2dCanvasObjectList* rectangles = image->GetAsRectangles( *wxBLACK, wxColour( 173, 173, 175 ), true );
9956  objects->TakeOverFrom( rectangles );
9957  delete rectangles;
9958  }
9959  }
9960  }
9961 
9962  return true;
9963 }
9964 
9966 {
9967  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
9968  if ( m_oldobjects != wxNullCanvasObjectList )
9969  {
9970  a2dlist< long >::iterator index = m_objectsIndex.begin();
9971  while ( index != m_objectsIndex.end() )
9972  {
9973  forEachIn( a2dCanvasObjectList, m_objects )
9974  {
9975  a2dCanvasObject* obj = *iter;
9976  obj->SetRelease( false );
9977  objects->Insert( *index, obj, true );
9978  index++;
9979  }
9980  }
9981  m_oldobjects->clear();
9982  }
9983  forEachIn( a2dCanvasObjectList, m_objects )
9984  {
9985  a2dCanvasObject* obj = *iter;
9986  //delete right now and not delayed in idle time, this is save for sure.
9987  objects->Release( obj, false, false, true );
9988  }
9989  m_objects->clear();
9990  return true;
9991 }
9992 
9993 //----------------------------------------------------------------------------
9994 // a2dCommand_SetLayersProperty
9995 //----------------------------------------------------------------------------
9996 
9998 {
9999  wxUint16 i = 0;
10000  for ( i = 0; i < m_layerSetup->GetChildObjectsCount(); i++ )
10001  {
10002  a2dLayerInfo* layerinfo = m_layerSetup->GetLayerIndex()[i];
10003  m_oldLayersVisible.push_back( layerinfo->GetVisible() );
10004  if ( layerinfo != wxNullLayerInfo )
10005  {
10006  switch ( m_setWhat )
10007  {
10008  case visible:
10009  layerinfo->SetVisible( m_value );
10010  break;
10011  case selectable:
10012  layerinfo->SetSelectable( m_value );
10013  break;
10014  case readable:
10015  layerinfo->SetRead( m_value );
10016  break;
10017  case filling:
10018  {
10019  a2dFill fill = layerinfo->GetFill();
10020  fill.SetFilling( m_value );
10021  layerinfo->SetFill( fill );
10022  }
10023  break;
10024  }
10025  }
10026  }
10027  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
10028  a2dComEvent changedlayer( drawing, m_layerSetup, a2dDrawing::sig_layersetupChanged );
10029  drawing->ProcessEvent( changedlayer );
10030  return true;
10031 }
10032 
10034 {
10035  wxUint16 layer = 0;
10036  a2dlist< bool >::iterator index = m_oldLayersVisible.begin();
10037  while ( index != m_oldLayersVisible.end() )
10038  {
10039  bool value = *index;
10040  a2dLayerInfo* layerinfo = m_layerSetup->GetLayerIndex()[layer];
10041  if ( layerinfo != wxNullLayerInfo )
10042  {
10043  switch ( m_setWhat )
10044  {
10045  case visible:
10046  layerinfo->SetVisible( value );
10047  break;
10048  case selectable:
10049  layerinfo->SetSelectable( value );
10050  break;
10051  case readable:
10052  layerinfo->SetRead( value );
10053  break;
10054  }
10055  }
10056  }
10057  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
10058  a2dComEvent changedlayer( drawing, m_layerSetup, a2dDrawing::sig_layersetupChanged );
10059  drawing->ProcessEvent( changedlayer );
10060  return true;
10061 }
10062 
10063 bool a2dCommand_Select::Do()
10064 {
10065  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
10066  if ( m_args.argValue.what == SelectRect )
10067  {
10068  a2dBoundingBox bbox = a2dBoundingBox( m_args.argValue.x1, m_args.argValue.y1, m_args.argValue.x2, m_args.argValue.y2 );
10069  if ( m_parent->GetChildObjectList() != wxNullCanvasObjectList )
10070  {
10071  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
10072  m_oldobjects = new a2dCanvasObjectList();
10073  double xmin, ymax;
10074  xmin = DBL_MAX;
10075  ymax = DBL_MIN;
10076  a2dCanvasObject* preserveLastSelected = 0;
10077  a2dCanvasObject* lastSelected = 0;
10078 
10079  forEachIn( a2dCanvasObjectList, objects )
10080  {
10081  a2dCanvasObject* obj = *iter;
10082  if ( obj->GetRelease() || !obj->IsVisible() )
10083  {
10084  obj->SetSelected2( false );
10085  continue;
10086  }
10087  if ( obj->GetSelected() )
10088  {
10089  if ( obj->GetSelected2() )
10090  preserveLastSelected = obj; //preserve it
10091  obj->SetSelected2( false );
10092  //continue;
10093  }
10094  if ( obj->GetSelected2() ) // all others off
10095  obj->SetSelected2( false );
10096 
10097  // filter on boundingbox, only object within it will pass.
10098  if ( bbox.GetValid() )
10099  {
10100  a2dBoundingBox tmp;
10101  tmp.Expand( obj->GetBbox() );
10102  if ( bbox.Intersect( tmp ) != _IN )
10103  continue;
10104  }
10105 
10106  //filter on visible and selectable layers
10107  if ( m_args.argValue.layervisible && m_args.argValue.layerselectable && obj->GetRoot() && obj->GetRoot()->GetLayerSetup() )
10108  {
10109  if ( m_args.argValue.layervisible && !obj->GetRoot()->GetLayerSetup()->GetVisible( obj->GetLayer() ) )
10110  continue;
10111  if ( m_args.argValue.layerselectable && !obj->GetRoot()->GetLayerSetup()->GetSelectable( obj->GetLayer() ) )
10112  continue;
10113  }
10114  //filter on layer if set.
10115  if ( !m_args.argSet.layer || ( m_args.argSet.layer && obj->GetLayer() == m_args.argValue.layer ) )
10116  {
10117  //preserve for undo the select state of the objects
10118  m_oldobjectsSelected.push_back( obj->GetSelected() );
10119  obj->SetSelected( true );
10120  m_oldobjects->push_back( obj );
10121  }
10122  }
10123  if ( !lastSelected )
10124  {
10125  //search new lastselected
10126  // if for all objects: forEachIn( a2dCanvasObjectList, objects )
10127  forEachIn( a2dCanvasObjectList, m_oldobjects )
10128  {
10129  a2dCanvasObject* obj = *iter;
10130  obj->SetSelected2( false );
10131  if ( obj->GetRelease() || !obj->IsVisible() )
10132  continue;
10133  if ( !obj->GetSelected() )
10134  continue;
10135 
10136  if ( !lastSelected )
10137  {
10138  lastSelected = obj;
10139  xmin = obj->GetBboxMinX();
10140  ymax = obj->GetBboxMaxY();
10141  }
10142  else
10143  {
10144  if ( obj->GetBboxMinX() < xmin )
10145  {
10146  lastSelected = obj;
10147  xmin = obj->GetBboxMinX();
10148  ymax = obj->GetBboxMaxY();
10149  }
10150  else if ( obj->GetBboxMinX() == xmin )
10151  {
10152  if ( obj->GetBboxMaxY() < ymax )
10153  {
10154  lastSelected = obj;
10155  ymax = obj->GetBboxMaxY();
10156  }
10157  }
10158  }
10159  }
10160  if ( lastSelected )
10161  lastSelected->SetSelected2( true );
10162  else
10163  {
10164  if ( preserveLastSelected )
10165  preserveLastSelected->SetSelected2( true );
10166  }
10167  }
10168  }
10169  return true;
10170  }
10171  else if ( m_args.argValue.what == DeSelectRect )
10172  {
10173  a2dCanvasObject* preserveLastSelected = 0;
10174  a2dCanvasObject* lastSelected = 0;
10175  double xmin, ymax;
10176  xmin = DBL_MAX;
10177  ymax = DBL_MIN;
10178  a2dBoundingBox bbox = a2dBoundingBox( m_args.argValue.x1, m_args.argValue.y1, m_args.argValue.x2, m_args.argValue.y2 );
10179  if ( m_parent->GetChildObjectList() != wxNullCanvasObjectList )
10180  {
10181  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
10182  m_oldobjects = new a2dCanvasObjectList();
10183 
10184  forEachIn( a2dCanvasObjectList, objects )
10185  {
10186  a2dCanvasObject* obj = *iter;
10187  if ( obj->GetRelease() || !obj->IsVisible() || !obj->GetSelected() )
10188  continue;
10189  if ( bbox.GetValid() )
10190  {
10191  a2dBoundingBox tmp;
10192  tmp.Expand( obj->GetBbox() );
10193  if ( bbox.Intersect( tmp ) != _IN )
10194  continue;
10195  }
10196  if ( m_args.argValue.layervisible && m_args.argValue.layerselectable && obj->GetRoot() && obj->GetRoot()->GetLayerSetup() )
10197  {
10198  if ( m_args.argValue.layervisible && !obj->GetRoot()->GetLayerSetup()->GetVisible( obj->GetLayer() ) )
10199  continue;
10200  if ( m_args.argValue.layerselectable && !obj->GetRoot()->GetLayerSetup()->GetSelectable( obj->GetLayer() ) )
10201  continue;
10202  }
10203  if ( !m_args.argSet.layer || ( m_args.argSet.layer && obj->GetLayer() == m_args.argValue.layer ) )
10204  {
10205  m_oldobjectsSelected.push_back( obj->GetSelected() );
10206  obj->SetSelected( false );
10207  if ( obj->GetSelected2() )
10208  lastSelected = obj; //this was the last selected, need to search new one.
10209  obj->SetSelected2( false );
10210  m_oldobjects->push_back( obj );
10211  }
10212  }
10213  if ( lastSelected ) //lastselected was deselected
10214  {
10215  //search new lastselected
10216  // if for all objects: forEachIn( a2dCanvasObjectList, objects )
10217  forEachIn( a2dCanvasObjectList, m_oldobjects )
10218  {
10219  a2dCanvasObject* obj = *iter;
10220  obj->SetSelected2( false );
10221  if ( obj->GetRelease() || !obj->IsVisible() )
10222  continue;
10223  if ( !obj->GetSelected() )
10224  continue;
10225 
10226  if ( !lastSelected )
10227  {
10228  lastSelected = obj;
10229  xmin = obj->GetBboxMinX();
10230  ymax = obj->GetBboxMaxY();
10231  }
10232  else
10233  {
10234  if ( obj->GetBboxMinX() < xmin )
10235  {
10236  lastSelected = obj;
10237  xmin = obj->GetBboxMinX();
10238  ymax = obj->GetBboxMaxY();
10239  }
10240  else if ( obj->GetBboxMinX() == xmin )
10241  {
10242  if ( obj->GetBboxMaxY() < ymax )
10243  {
10244  lastSelected = obj;
10245  ymax = obj->GetBboxMaxY();
10246  }
10247  }
10248  }
10249  }
10250  if ( lastSelected )
10251  lastSelected->SetSelected2( true );
10252  else
10253  {
10254  if ( preserveLastSelected )
10255  preserveLastSelected->SetSelected2( true );
10256  }
10257  }
10258 
10259  }
10260  return true;
10261  }
10262  else if ( m_args.argValue.what == SelectAll )
10263  {
10264  if ( m_parent->GetChildObjectList() != wxNullCanvasObjectList )
10265  {
10266  double xmin, ymax;
10267  xmin = DBL_MAX;
10268  ymax = DBL_MIN;
10269  a2dCanvasObject* preserveLastSelected = 0;
10270  a2dCanvasObject* lastSelected = 0;
10271  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
10272  m_oldobjects = new a2dCanvasObjectList();
10273  forEachIn( a2dCanvasObjectList, objects )
10274  {
10275  a2dCanvasObject* obj = *iter;
10276  if ( obj->GetRelease() || !obj->IsVisible() )
10277  {
10278  obj->SetSelected2( false );
10279  continue;
10280  }
10281  if ( obj->GetSelected() )
10282  {
10283  if ( obj->GetSelected2() )
10284  preserveLastSelected = obj; //preserve it
10285  obj->SetSelected2( false );
10286  continue;
10287  }
10288  if ( obj->GetSelected2() ) // all others off
10289  obj->SetSelected2( false );
10290 
10291  if ( m_args.argValue.layervisible && m_args.argValue.layerselectable && obj->GetRoot() && obj->GetRoot()->GetLayerSetup() )
10292  {
10293  if ( m_args.argValue.layervisible && !obj->GetRoot()->GetLayerSetup()->GetVisible( obj->GetLayer() ) )
10294  continue;
10295  if ( m_args.argValue.layerselectable && !obj->GetRoot()->GetLayerSetup()->GetSelectable( obj->GetLayer() ) )
10296  continue;
10297  }
10298  if ( !m_args.argSet.layer || ( m_args.argSet.layer && obj->GetLayer() == m_args.argValue.layer ) )
10299  {
10300  m_oldobjectsSelected.push_back( obj->GetSelected() );
10301  obj->SetSelected( true );
10302  m_oldobjects->push_back( obj );
10303  }
10304  }
10305  if ( !lastSelected )
10306  {
10307  //search new lastselected
10308  forEachIn( a2dCanvasObjectList, objects )
10309  {
10310  a2dCanvasObject* obj = *iter;
10311  obj->SetSelected2( false );
10312  if ( obj->GetRelease() || !obj->IsVisible() )
10313  continue;
10314  if ( !obj->GetSelected() )
10315  continue;
10316 
10317  if ( !lastSelected )
10318  {
10319  lastSelected = obj;
10320  xmin = obj->GetBboxMinX();
10321  ymax = obj->GetBboxMaxY();
10322  }
10323  else
10324  {
10325  if ( obj->GetBboxMinX() < xmin )
10326  {
10327  lastSelected = obj;
10328  xmin = obj->GetBboxMinX();
10329  ymax = obj->GetBboxMaxY();
10330  }
10331  else if ( obj->GetBboxMinX() == xmin )
10332  {
10333  if ( obj->GetBboxMaxY() < ymax )
10334  {
10335  lastSelected = obj;
10336  ymax = obj->GetBboxMaxY();
10337  }
10338  }
10339  }
10340  }
10341  if ( lastSelected )
10342  lastSelected->SetSelected2( true );
10343  else
10344  {
10345  if ( preserveLastSelected )
10346  preserveLastSelected->SetSelected2( true );
10347  }
10348  }
10349  drawing->UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
10350  }
10351  return true;
10352  }
10353  else if ( m_args.argValue.what == DeSelectAll )
10354  {
10355  m_parent->SetSpecificFlags( false, a2dCanvasOFlags::SELECTED );
10356  if ( m_parent->GetChildObjectList() != wxNullCanvasObjectList )
10357  {
10358  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
10359  m_oldobjects = new a2dCanvasObjectList();
10360  forEachIn( a2dCanvasObjectList, objects )
10361  {
10362  a2dCanvasObject* obj = *iter;
10363  if ( obj->GetRelease() || !obj->IsVisible() || !obj->GetSelected() )
10364  continue;
10365  if ( m_args.argValue.layervisible && m_args.argValue.layerselectable && obj->GetRoot() && obj->GetRoot()->GetLayerSetup() )
10366  {
10367  if ( m_args.argValue.layervisible && !obj->GetRoot()->GetLayerSetup()->GetVisible( obj->GetLayer() ) )
10368  continue;
10369  if ( m_args.argValue.layerselectable && !obj->GetRoot()->GetLayerSetup()->GetSelectable( obj->GetLayer() ) )
10370  continue;
10371  }
10372  if ( !m_args.argSet.layer || ( m_args.argSet.layer && obj->GetLayer() == m_args.argValue.layer ) )
10373  {
10374  m_oldobjectsSelected.push_back( obj->GetSelected() );
10375  obj->SetSelected( false );
10376  obj->SetSelected2( false );
10377  m_oldobjects->push_back( obj );
10378  }
10379  }
10380  //drawing->UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
10381  }
10382  return true;
10383  }
10384  return false;
10385 }
10386 
10387 bool a2dCommand_Select::Undo()
10388 {
10389  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
10390  if ( m_args.argValue.what == SelectRect )
10391  {
10392  if ( m_oldobjects != wxNullCanvasObjectList )
10393  {
10394  a2dlist< bool >::iterator selectState = m_oldobjectsSelected.begin();
10395  forEachIn( a2dCanvasObjectList, m_oldobjects )
10396  {
10397  a2dCanvasObject* obj = *iter;
10398  obj->SetSelected( *selectState );
10399  selectState++;
10400  }
10401  drawing->UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
10402  }
10403  return true;
10404  }
10405  else if ( m_args.argValue.what == DeSelectRect )
10406  {
10407  if ( m_oldobjects != wxNullCanvasObjectList )
10408  {
10409  a2dlist< bool >::iterator selectState = m_oldobjectsSelected.begin();
10410  forEachIn( a2dCanvasObjectList, m_oldobjects )
10411  {
10412  a2dCanvasObject* obj = *iter;
10413  obj->SetSelected( *selectState );
10414  selectState++;
10415  }
10416  drawing->UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
10417  }
10418  return true;
10419  }
10420  else if ( m_args.argValue.what == SelectAll )
10421  {
10422  if ( m_oldobjects != wxNullCanvasObjectList )
10423  {
10424  a2dCanvasObjectList* objects = m_parent->GetChildObjectList();
10425  objects->SetSpecificFlags( false, a2dCanvasOFlags::SELECTED );
10426  a2dlist< bool >::iterator selectState = m_oldobjectsSelected.begin();
10427  forEachIn( a2dCanvasObjectList, m_oldobjects )
10428  {
10429  a2dCanvasObject* obj = *iter;
10430  obj->SetSelected( *selectState );
10431  selectState++;
10432  }
10433  drawing->UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
10434  }
10435  return true;
10436  }
10437  else if ( m_args.argValue.what == DeSelectAll )
10438  {
10439  if ( m_oldobjects != wxNullCanvasObjectList )
10440  {
10441  a2dlist< bool >::iterator selectState = m_oldobjectsSelected.begin();
10442  forEachIn( a2dCanvasObjectList, m_oldobjects )
10443  {
10444  a2dCanvasObject* obj = *iter;
10445  obj->SetSelected( *selectState );
10446  selectState++;
10447  }
10448  drawing->UpdateAllViews( a2dCANVIEW_UPDATE_ALL );
10449  }
10450  return true;
10451  }
10452  return false;
10453 }
10454 
10455 //----------------------------------------------------------------------------
10456 // a2dCommand_ConvertMask
10457 //----------------------------------------------------------------------------
10458 
10460 {
10461  a2dCanvasObjectPtr parent = m_args.argValue.parent;
10462  a2dCanvasObjectList* objects = parent->GetChildObjectList();
10463  //select objects with this mask
10464  m_maskobjects = objects->Clone( m_args.argValue.mask, a2dObject::clone_flat, &m_objectsIndex );
10465  if ( m_args.argValue.deleteOriginal )
10466  {
10467  for( a2dCanvasObjectList::iterator iter = m_maskobjects->begin(); iter != m_maskobjects->end(); ++iter )
10468  {
10469  a2dCanvasObject* obj = ( *iter );
10470  // remove the pin connections in an undoable way
10471  obj->ClearAllPinConnections();
10472  }
10473  parent->ReleaseChildObjects( m_args.argValue.mask );
10474  }
10475 
10476  return true;
10477 }
10478 
10480 {
10481  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
10482 
10483  m_args.argValue.target = m_args.argValue.target == -1 ? GetDrawHabitat()->GetTarget() : m_args.argValue.target;
10484  a2dCanvasObjectPtr parent = m_args.argValue.parent;
10485  if ( m_args.argValue.target > wxMAXLAYER )
10486  {
10487  ( void )wxMessageBox( _( "Target Layer is not available" ), _( "Layers" ), wxICON_INFORMATION | wxOK );
10488  return false;
10489  }
10490 
10491  double radiusMin = double( GetDrawHabitat()->GetRadiusMin() ) / drawing->GetUnitsScale();
10492  double radiusMax = double( GetDrawHabitat()->GetRadiusMax() ) / drawing->GetUnitsScale();
10493  double AberPolyToArc = double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale();
10494 
10495  if ( m_maskobjects != wxNullCanvasObjectList )
10496  {
10497  m_newobjects = new a2dCanvasObjectList();
10498 
10499  long destLayer = m_args.argValue.target;
10500  forEachIn( a2dCanvasObjectList, m_maskobjects )
10501  {
10502  a2dCanvasObject* obj = *iter;
10503  if ( m_args.argValue.keepLayer )
10504  destLayer = obj->GetLayer();
10505 
10506  if ( m_args.argValue.what == ConvertPolygonToArcs )
10507  {
10508  if ( 0 != wxDynamicCast( obj, a2dPolylineL ) && obj->GetContourWidth() )
10509  {
10510  a2dPolylineL* objc = wxDynamicCast( obj, a2dPolylineL );
10511  bool returnIsPolygon;
10512  a2dPolygonL* contour = new a2dPolygonL( objc->GetAsVertexList( returnIsPolygon ) );
10513  contour->SetLayer( destLayer );
10514  contour->SetBin( true );
10515  contour->GetSegments()->ConvertPolylineToArc( AberPolyToArc, radiusMin, radiusMax );
10516  parent->Append( contour );
10517  m_newobjects->push_back( contour );
10518  }
10519  else if ( 0 != wxDynamicCast( obj, a2dPolygonL ) )
10520  {
10521  a2dCanvasObject* cobj = obj->TClone( a2dObject::clone_deep );
10522  cobj->SetLayer( destLayer );
10523  cobj->SetBin( true );
10524  parent->Append( cobj );
10525  m_newobjects->push_back( cobj );
10526  a2dPolygonL* objc = wxDynamicCast( cobj, a2dPolygonL );
10527  objc->GetSegments()->ConvertPolygonToArc( AberPolyToArc, radiusMin, radiusMax );
10528  }
10529  }
10530  if ( m_args.argValue.what == ConvertPolylineToArcs )
10531  {
10532  if ( 0 != wxDynamicCast( obj, a2dPolylineL ) && obj->GetContourWidth() )
10533  {
10534  a2dCanvasObject* cobj = obj->TClone( a2dObject::clone_deep );
10535  a2dPolylineL* objc = wxDynamicCast( cobj, a2dPolylineL );
10536  cobj->SetLayer( destLayer );
10537  cobj->SetBin( true );
10538  parent->Append( cobj );
10539  m_newobjects->push_back( cobj );
10540  objc->GetSegments()->ConvertPolylineToArc( AberPolyToArc, radiusMin, radiusMax );
10541  }
10542  else if ( 0 != wxDynamicCast( obj, a2dPolylineL ) )
10543  {
10544  a2dCanvasObject* cobj = obj->TClone( a2dObject::clone_deep );
10545  cobj->SetLayer( destLayer );
10546  cobj->SetBin( true );
10547  parent->Append( cobj );
10548  m_newobjects->push_back( cobj );
10549  a2dPolylineL* objc = wxDynamicCast( cobj, a2dPolylineL );
10550  objc->GetSegments()->ConvertPolylineToArc( AberPolyToArc, radiusMin, radiusMax );
10551  }
10552  }
10553  if ( m_args.argValue.what == ConvertToPolygonPolylinesWithArcs )
10554  {
10555  a2dCanvasObjectList* polylist = GetCanvasCmp()->ConvertToPolygons( obj, true );
10556  if ( !polylist )
10557  continue;
10558  for( a2dCanvasObjectList::iterator iterp = polylist->begin(); iterp != polylist->end(); ++iterp )
10559  {
10560  a2dPolygonL* poly = wxDynamicCast( ( *iterp ).Get(), a2dPolygonL );
10561  a2dPolylineL* polyline = wxDynamicCast( ( *iterp ).Get(), a2dPolylineL );
10562  if ( polyline && polyline->GetNumberOfSegments() > 2 )
10563  {
10564  polyline->SetLayer( destLayer );
10565  polyline->SetBin( true );
10566  parent->Append( polyline );
10567  m_newobjects->push_back( polyline );
10568  }
10569  else if ( poly && poly->GetNumberOfSegments() > 2 )
10570  {
10571  poly->SetLayer( destLayer );
10572  poly->SetBin( true );
10573  parent->Append( poly );
10574  m_newobjects->push_back( poly );
10575  }
10576  }
10577  delete polylist;
10578  }
10579  if ( m_args.argValue.what == ConvertToPolygonPolylinesWithoutArcs )
10580  {
10581  a2dCanvasObjectList* polylist = GetCanvasCmp()->ConvertToPolygons( obj, true );
10582  if ( !polylist )
10583  continue;
10584  for( a2dCanvasObjectList::iterator iterp = polylist->begin(); iterp != polylist->end(); ++iterp )
10585  {
10586 
10587  a2dSmrtPtr<a2dPolylineL> polyline = wxDynamicCast( ( *iterp ).Get(), a2dPolylineL );
10588  if ( polyline )
10589  {
10590  bool returnIsPolygon;
10591  a2dSmrtPtr<a2dPolygonL> poly = new a2dPolygonL( polyline->GetAsVertexList( returnIsPolygon ) );
10592  if ( poly && poly->GetSegments()->HasArcs() )
10593  poly->GetSegments()->ConvertToLines();
10594 
10595  if ( poly )
10596  {
10597  if ( poly->GetNumberOfSegments() > 2 )
10598  {
10599  poly->SetLayer( destLayer );
10600  poly->SetBin( true );
10601  poly->GetSegments()->ConvertToLines();
10602  parent->Append( poly );
10603  m_newobjects->push_back( poly.Get() );
10604  }
10605  else
10606  {
10607  polyline->SetLayer( destLayer );
10608  polyline->SetBin( true );
10609  polyline->GetSegments()->ConvertToLines();
10610  parent->Append( polyline );
10611  m_newobjects->push_back( polyline.Get() );
10612  }
10613  }
10614  else
10615  {
10616  polyline->SetLayer( destLayer );
10617  polyline->SetBin( true );
10618  polyline->GetSegments()->ConvertToLines();
10619  parent->Append( polyline );
10620  m_newobjects->push_back( polyline.Get() );
10621  }
10622  }
10623  else
10624  {
10625  a2dSmrtPtr<a2dPolygonL> poly = wxDynamicCast( ( *iterp ).Get(), a2dPolygonL );
10626  if ( poly && poly->GetSegments()->HasArcs() )
10627  poly->GetSegments()->ConvertToLines();
10628 
10629  if ( poly && poly->GetNumberOfSegments() > 2 )
10630  {
10631  poly->SetLayer( destLayer );
10632  poly->SetBin( true );
10633  poly->GetSegments()->ConvertToLines();
10634  parent->Append( poly );
10635  m_newobjects->push_back( poly.Get() );
10636  }
10637  }
10638  }
10639  delete polylist;
10640  }
10641  if ( m_args.argValue.what == ConvertToVPaths )
10642  {
10643  a2dCanvasObjectList* vpath = GetCanvasCmp()->ConvertToVpath( obj, true );
10644  if ( vpath )
10645  {
10646  for( a2dCanvasObjectList::iterator iterp = vpath->begin(); iterp != vpath->end(); ++iterp )
10647  {
10648  a2dVectorPath* path = wxDynamicCast( ( *iterp ).Get(), a2dVectorPath );
10649  path->SetLayer( destLayer );
10650  path->SetBin( true );
10651  parent->Append( path );
10652  m_newobjects->push_back( path );
10653  }
10654  delete vpath;
10655  }
10656  }
10657  if ( m_args.argValue.what == ConvertToPolylines )
10658  {
10659  a2dCanvasObjectList* polylist = obj->GetAsPolylines( true );
10660  if ( polylist == wxNullCanvasObjectList )
10661  continue;
10662  int i, count = polylist->size();
10663  a2dCanvasObjectList::iterator iterp = polylist->begin();
10664  for( i = 0 ; i < count ; i++ )
10665  {
10666  a2dPolygonL* poly = wxDynamicCast( ( *iterp ).Get(), a2dPolygonL );
10667  a2dPolylineL* polyline = wxDynamicCast( ( *iterp ).Get(), a2dPolylineL );
10668  if ( polyline && polyline->GetNumberOfSegments() > 2 )
10669  {
10670  polyline->SetLayer( destLayer );
10671  polyline->SetBin( true );
10672  parent->Append( polyline );
10673  m_newobjects->push_back( polyline );
10674  iterp++;
10675  }
10676  else if ( poly && poly->GetNumberOfSegments() > 2 )
10677  {
10678  a2dPolylineL* conv = new a2dPolylineL( poly->GetSegments() );
10679 
10680  poly->SetLayer( destLayer );
10681  poly->SetBin( true );
10682  parent->Append( conv );
10683  m_newobjects->push_back( conv );
10684  iterp = polylist->erase( iterp );
10685  }
10686  }
10687  delete polylist;
10688  }
10689  if ( m_args.argValue.what == ConvertLinesArcs )
10690  {
10691  a2dCanvasObjectList* polylist = GetCanvasCmp()->ConvertToPolygons( obj, true );
10692  if ( !polylist )
10693  continue;
10694  int i, count = polylist->size();
10695  a2dCanvasObjectList::iterator iterp = polylist->begin();
10696  for( i = 0 ; i < count ; i++ )
10697  {
10698  a2dPolygonL* poly = wxDynamicCast( ( *iterp ).Get(), a2dPolygonL );
10699  poly->SetLayer( destLayer );
10700  poly->SetBin( true );
10701  a2dCanvasObjectList* linesAndArcs = poly->GetAsLinesArcs();
10702  forEachIn( a2dCanvasObjectList, linesAndArcs )
10703  {
10704  a2dCanvasObject* obj = *iter;
10705  parent->Append( obj );
10706  }
10707  m_newobjects->TakeOverFrom( linesAndArcs );
10708  iterp = polylist->erase( iterp );
10709  delete linesAndArcs;
10710  }
10711  delete polylist;
10712  }
10713  }
10714  parent->SetPending( true );
10715  }
10716 
10717  return true;
10718 }
10719 
10721 {
10722  if ( m_args.argValue.deleteOriginal && m_maskobjects != wxNullCanvasObjectList )
10723  {
10724  a2dlist< long >::iterator index = m_objectsIndex.begin();
10725  while ( index != m_objectsIndex.end() )
10726  {
10727  forEachIn( a2dCanvasObjectList, m_maskobjects )
10728  {
10729  a2dCanvasObject* obj = *iter;
10730  m_args.argValue.parent->Insert( *index, obj );
10731  index++;
10732  }
10733  }
10734  }
10735  m_maskobjects->clear();
10736 
10737  a2dCanvasObjectList* objects = m_args.argValue.parent->GetChildObjectList();
10738  if ( m_newobjects != wxNullCanvasObjectList )
10739  {
10740  forEachIn( a2dCanvasObjectList, m_newobjects )
10741  {
10742  a2dCanvasObject* obj = *iter;
10743  //delete right now and not delayed in idle time, this is save for sure.
10744  objects->Release( obj, false, false, true );
10745  }
10746  }
10747  m_newobjects->clear();
10748  m_args.argValue.parent->SetPending( true );
10749  return true;
10750 }
10751 
10752 //----------------------------------------------------------------------------
10753 // a2dCommand_GroupAB
10754 //----------------------------------------------------------------------------
10755 
10756 bool a2dCommand_GroupAB::Do()
10757 {
10758  m_args.argValue.target = m_args.argSet.target ? m_args.argValue.target : GetDrawHabitat()->GetTarget();
10759  m_args.argValue.clearTarget = m_args.argSet.clearTarget ? m_args.argValue.clearTarget : GetDrawHabitat()->GetClearTarget();
10760  m_args.argValue.selectedA = m_args.argSet.selectedA ? m_args.argValue.selectedA : GetDrawHabitat()->GetSelectedOnlyA();
10761  m_args.argValue.selectedB = m_args.argSet.selectedB ? m_args.argValue.selectedB : GetDrawHabitat()->GetSelectedOnlyB();
10762 
10763  a2dDrawing* drawing = GetCanvasCmp()->m_drawing;
10764 
10765  if ( m_args.argValue.what == ConvertToArcs )
10766  {
10768  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10770  ConvertToArcs.SetRadiusMin( double( GetDrawHabitat()->GetRadiusMin() ) / drawing->GetUnitsScale() );
10771  ConvertToArcs.SetRadiusMax( double( GetDrawHabitat()->GetRadiusMax() ) / drawing->GetUnitsScale() );
10772  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10773  ConvertToArcs.SetTarget( m_args.argValue.target );
10774  ConvertToArcs.SetDetectCircle( m_args.argValue.detectCircle );
10775  ConvertToArcs.Start( m_parent );
10776  }
10777  if ( m_args.argValue.what == ConvertToPolygonPolylinesWithArcs )
10778  {
10780  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10782  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10783  ConvertToArcs.SetTarget( m_args.argValue.target );
10784  ConvertToArcs.Start( m_parent );
10785  }
10786  if ( m_args.argValue.what == ConvertToPolygonPolylinesWithoutArcs )
10787  {
10789  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10791  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10792  ConvertToArcs.SetTarget( m_args.argValue.target );
10793  ConvertToArcs.Start( m_parent );
10794  }
10795  if ( m_args.argValue.what == ConvertPolygonToArcs )
10796  {
10798  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10800  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10801  ConvertToArcs.SetTarget( m_args.argValue.target );
10802  ConvertToArcs.SetDetectCircle( m_args.argValue.detectCircle );
10803  ConvertToArcs.Start( m_parent );
10804  }
10805  if ( m_args.argValue.what == ConvertPolylineToArcs )
10806  {
10808  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10810  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10811  ConvertToArcs.SetTarget( m_args.argValue.target );
10812  ConvertToArcs.SetDetectCircle( m_args.argValue.detectCircle );
10813  ConvertToArcs.Start( m_parent );
10814  }
10815  if ( m_args.argValue.what == ConvertLinesArcs )
10816  {
10818  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10820  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10821  ConvertToArcs.SetTarget( m_args.argValue.target );
10822 
10823  ConvertToArcs.Start( m_parent );
10824  }
10825  if ( m_args.argValue.what == ConvertToPolylines )
10826  {
10828  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10830  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10831  ConvertToArcs.SetTarget( m_args.argValue.target );
10832 
10833  ConvertToArcs.Start( m_parent );
10834  }
10835  if ( m_args.argValue.what == ConvertToVPaths )
10836  {
10838  ConvertToArcs.SetGroupA( GetDrawHabitat()->GetGroupA() );
10840  ConvertToArcs.SetAberPolyToArc( double( GetDrawHabitat()->GetAberPolyToArc() ) / drawing->GetUnitsScale() );
10841  ConvertToArcs.SetTarget( m_args.argValue.target );
10842 
10843  ConvertToArcs.Start( m_parent );
10844  }
10845  if ( m_args.argValue.what == DeleteGroupA )
10846  {
10847  a2dWalker_LayerCanvasObjects deleteLayer;
10848  deleteLayer.SetGroupA( GetDrawHabitat()->GetGroupA() );
10850  deleteLayer.SetSkipNotRenderedInDrawing( true );
10851 
10852  deleteLayer.Start( m_parent );
10853  }
10854  if ( m_args.argValue.what == MoveGroupA )
10855  {
10856  a2dWalker_LayerCanvasObjects moveLayer;
10857  moveLayer.SetGroupA( GetDrawHabitat()->GetGroupA() );
10859  moveLayer.SetTarget( m_args.argValue.target );
10860  moveLayer.SetSkipNotRenderedInDrawing( true );
10861 
10862  moveLayer.Start( m_parent );
10863  }
10864  if ( m_args.argValue.what == CopyGroupA )
10865  {
10866  a2dWalker_LayerCanvasObjects copyLayer;
10867  copyLayer.SetGroupA( GetDrawHabitat()->GetGroupA() );
10869  copyLayer.SetTarget( m_args.argValue.target );
10870  copyLayer.SetSkipNotRenderedInDrawing( true );
10871 
10872  copyLayer.Start( m_parent );
10873  }
10874  else if (
10875  m_args.argValue.what == Boolean_OR ||
10876  m_args.argValue.what == Boolean_AND ||
10877  m_args.argValue.what == Boolean_EXOR ||
10878  m_args.argValue.what == Boolean_A_SUB_B ||
10879  m_args.argValue.what == Boolean_B_SUB_A ||
10880  m_args.argValue.what == Boolean_CORRECTION ||
10881  m_args.argValue.what == Boolean_SMOOTHEN ||
10882  m_args.argValue.what == Boolean_MAKERING ||
10883  m_args.argValue.what == Boolean_Polygon2Surface ||
10884  m_args.argValue.what == Boolean_Surface2Polygon
10885  )
10886  {
10887 #if wxART2D_USE_KBOOL
10889  booloper.SetReleaseOrignals( false );
10890  booloper.SetClearTarget( m_args.argValue.clearTarget );
10891  booloper.SetGroupA( GetDrawHabitat()->GetGroupA() );
10892  booloper.SetGroupB( GetDrawHabitat()->GetGroupB() );
10893  booloper.SetTarget( m_args.argValue.target );
10894  booloper.SetSelectedOnlyA( m_args.argValue.selectedA );
10895  booloper.SetSelectedOnlyB( m_args.argValue.selectedB );
10896  booloper.SetRecursionDepth( 20 );
10897 
10898  booloper.SetMarge( GetDrawHabitat()->m_MARGE / drawing->GetUnitsScale() );
10899  booloper.SetGrid( GetDrawHabitat()->m_GRID );
10900  booloper.SetDGrid( GetDrawHabitat()->m_DGRID );
10901  booloper.SetCorrectionAber( GetDrawHabitat()->m_CORRECTIONABER / drawing->GetUnitsScale() );
10902  booloper.SetCorrectionFactor( GetDrawHabitat()->m_CORRECTIONFACTOR / drawing->GetUnitsScale() );
10903  booloper.SetMaxlinemerge( GetDrawHabitat()->m_MAXLINEMERGE / drawing->GetUnitsScale() );
10904  booloper.SetWindingRule( GetDrawHabitat()->m_WINDINGRULE );
10905  booloper.SetRoundfactor( GetDrawHabitat()->m_ROUNDFACTOR );
10906  booloper.SetLinkHoles( true );
10907 
10909 
10910  switch( m_args.argValue.what )
10911  {
10912  case Boolean_OR:
10913  {
10915  break;
10916  }
10917  case Boolean_AND:
10918  {
10920  break;
10921  }
10922  case Boolean_EXOR:
10923  {
10925  break;
10926  }
10927  case Boolean_A_SUB_B:
10928  {
10930  break;
10931  }
10932  case Boolean_B_SUB_A:
10933  {
10935  break;
10936  }
10937  case Boolean_CORRECTION:
10938  {
10939  booloper.SetCorrectionFactor( GetDrawHabitat()->m_CORRECTIONFACTOR / drawing->GetUnitsScale() );
10941  break;
10942  }
10943  case Boolean_SMOOTHEN:
10944  {
10946  break;
10947  }
10948  case Boolean_MAKERING:
10949  {
10950  booloper.SetCorrectionFactor( fabs( GetDrawHabitat()->m_CORRECTIONFACTOR / 2.0 / drawing->GetUnitsScale() ) );
10952  break;
10953  }
10955  {
10957  break;
10958  }
10960  {
10962  break;
10963  }
10964  default:
10965  break;
10966  }
10967  booloper.SetOperation( boolOp );
10968  booloper.Start( m_parent );
10969 
10970 #endif //wxART2D_USE_KBOOL
10971  }
10972  else if ( m_args.argValue.what == DetectSmall )
10973  {
10974  a2dWalker_DetectSmall walk;
10975  walk.SetGroupA( GetDrawHabitat()->GetGroupA() );
10976  walk.SetTarget( m_args.argValue.target );
10977  double smallest = double( GetDrawHabitat()->GetSmall() ) / drawing->GetUnitsScale();
10978  walk.SetSmall( smallest );
10979  walk.Start( m_parent );
10980 
10981  if ( m_args.argSet.fileNameOut )
10982  {
10983  wxString filename = m_args.argValue.fileNameOut;
10984 #if wxUSE_STD_IOSTREAM
10985  a2dDocumentFileOutputStream store( filename.mb_str(), wxSTD ios_base::out | wxSTD ios_base::binary );
10986  if ( store.fail() || store.bad() )
10987  {
10988  a2dGeneralGlobals->ReportErrorF( a2dError_FileCouldNotOpen, _( "Sorry, could not open file %s for saving" ), filename.c_str() );
10989  return false;
10990  }
10991  store << walk.GetString();
10992 #else
10993  wxFileOutputStream storeUnbuf( filename );
10994  if ( storeUnbuf.GetLastError() != wxSTREAM_NO_ERROR )
10995  {
10996  a2dGeneralGlobals->ReportErrorF( a2dError_FileCouldNotOpen, _( "Sorry, could not open file %s for saving" ), filename.c_str() );
10997  return false;
10998  }
10999  wxBufferedOutputStream store( storeUnbuf );
11000  store.Write( walk.GetString(), walk.GetString().Len() );
11001 #endif
11002  }
11003  //wxMessageBox( walk.GetString(), _("Report"), wxICON_INFORMATION | wxOK );
11004  }
11005  else if ( m_args.argValue.what == RemoveRedundant )
11006  {
11007  a2dWalker_LayerCanvasObjects removeredundant;
11008  removeredundant.SetGroupA( GetDrawHabitat()->GetGroupA() );
11009  removeredundant.SetTarget( m_args.argValue.target );
11011  removeredundant.Start( m_parent );
11012  }
11013  else
11014  return false;
11015  return true;
11016 }
11017 
11018 bool a2dCommand_GroupAB::Undo()
11019 {
11020  return false;
11021 }
11022 
11023 //----------------------------------------------------------------------------
11024 // a2dCommand_SetShowObject
11025 //----------------------------------------------------------------------------
11026 
11028 {
11029  a2dCanvasObject* g = NULL;
11030  if ( m_args.argSet.index )
11031  {
11032  g = GetCanvasCmp()->m_drawing->GetRootObject()->Find( _T( "" ), _T( "" ), m_args.argValue.index );
11033  if ( !g )
11034  {
11035  a2dGeneralGlobals->ReportErrorF( a2dError_NotSpecified, _T( "No Object with id %d in a2dCanvasCommandProcessor::SetShowObject()" ), m_args.argValue.index );
11036  return false;
11037  }
11038  }
11039  else if ( m_args.argSet.name )
11040  {
11041  g = GetCanvasCmp()->m_drawing->GetRootObject()->Find( m_args.argValue.name, _T( "" ), -1 );
11042  if ( !g )
11043  {
11044  a2dGeneralGlobals->ReportErrorF( a2dError_NotSpecified, _T( "No Object with id %d in a2dCanvasCommandProcessor::SetShowObject()" ), m_args.argValue.index );
11045  return false;
11046  }
11047  }
11048  else if ( m_args.argSet.selected )
11049  g = m_drawingPart->GetShowObject()->Find( wxT( "" ), wxT( "" ), a2dCanvasOFlags::SELECTED );
11050  else if ( m_args.argSet.canvasobject )
11051  g = m_args.argValue.canvasobject;
11052 
11053  if ( g )
11054  {
11055  m_previous = m_drawingPart->GetShowObject();
11056  m_showobject = g;
11057  g->SetSelected( false );
11059  m_drawingPart->SetShowObject( g );
11060  }
11061  //GetCanvasCmp()->SetLastXyEntry( 0, 0 );
11062  return true;
11063 }
11064 
11066 {
11067  m_showobject = m_previous;
11068  m_previous = m_drawingPart->GetShowObject();
11069  m_showobject->SetSelected( false );
11071  m_drawingPart->SetShowObject( m_showobject );
11072  return false;
11073 }
11074 
11075 //----------------------------------------------------------------------------
11076 // a2dCommand_PushInto
11077 //----------------------------------------------------------------------------
11078 
11080 {
11081  if ( m_args.argSet.name )
11082  m_pushIn = m_drawingPart->GetShowObject()->Find( m_args.argValue.name );
11083  else if ( m_args.argSet.selected )
11084  m_pushIn = m_drawingPart->GetShowObject()->Find( wxT( "" ), wxT( "" ), a2dCanvasOFlags::SELECTED );
11085  else if ( m_args.argSet.canvasobject )
11086  m_pushIn = m_args.argValue.canvasobject;
11087 
11088  if ( m_pushIn )
11089  m_pushIn = m_pushIn->PushInto( m_drawingPart->GetShowObject() );
11090 
11091  if ( m_pushIn )
11092  {
11093  m_previous = m_drawingPart->GetShowObject();
11094  //let drawer follow document if needed.
11095  //TODO when view switches its document when switching drawing
11096  //if ( doc->GetRootObject() != m_pushIn->GetRoot() )
11097  // drawer->SetDocument( m_pushIn->GetCanvasDocument() );
11098  m_pushIn->SetSelected( false );
11100  m_drawingPart->PushIn( m_pushIn );
11101  }
11102  else
11103  ( void )wxMessageBox( _( "Does not contain a group, unable to push into" ), _( "push into" ), wxICON_INFORMATION | wxOK );
11104 
11105  return true;
11106 }
11107 
11109 {
11110  if ( m_pushIn )
11111  {
11112  //let drawer follow document if needed.
11113  //TODO when view switches its document when switching drawing
11114  //if ( doc->GetRootObject() != m_previous->GetCanvasDocument()->GetRootObject() )
11115  // drawer->SetDocument( m_previous->GetCanvasDocument() );
11116  m_pushIn = m_previous;
11117  m_previous = m_drawingPart->GetShowObject();
11118  m_previous->SetSelected( false );
11120  m_drawingPart->PopOut();
11121  return true;
11122  }
11123  return false;
11124 }
11125 
11126 //----------------------------------------------------------------------------
11127 // a2dCommand_SetCanvasProperty
11128 //----------------------------------------------------------------------------
11129 
11130 a2dCommand_SetCanvasProperty::a2dCommand_SetCanvasProperty( a2dObject* object, const a2dPropertyIdCanvasObject* id, a2dCanvasObject* value ):
11131  a2dCommand_SetProperty( object, id )
11132 {
11133  a2dCanvasObjectPtrProperty* prop = new a2dCanvasObjectPtrProperty( id, value );
11134 
11135  m_property = prop;
11136 #if defined(_DEBUG) && defined (SMART_POINTER_DEBUG)
11137  //klion: it is because the CurrentSmartPointerOwner can change in Clone ( )
11138  CurrentSmartPointerOwner = this;
11139 #endif
11140 }
11141 
11142 a2dCommand_SetCanvasProperty::a2dCommand_SetCanvasProperty( a2dObject* object, const a2dPropertyIdMatrix* id, const a2dAffineMatrix& value ):
11143  a2dCommand_SetProperty( object, id )
11144 {
11145  a2dMatrixProperty* prop = new a2dMatrixProperty( id, value );
11146 
11147  m_property = prop;
11148 #if defined(_DEBUG) && defined (SMART_POINTER_DEBUG)
11149  //klion: it is because the CurrentSmartPointerOwner can change in Clone ( )
11150  CurrentSmartPointerOwner = this;
11151 #endif
11152 }
11153 
11154 a2dCommand_SetCanvasProperty::a2dCommand_SetCanvasProperty( a2dObject* object, const a2dPropertyIdPoint2D* id, const a2dPoint2D& point, int index, bool afterinversion ):
11155  a2dCommand_SetProperty( object, id )
11156 {
11157  a2dPoint2DProperty* prop = new a2dPoint2DProperty( id, point, index, afterinversion );
11158 
11159  m_property = prop;
11160 #if defined(_DEBUG) && defined (SMART_POINTER_DEBUG)
11161  //klion: it is because the CurrentSmartPointerOwner can change in Clone ( )
11162  CurrentSmartPointerOwner = this;
11163 #endif
11164 }
11165 
11166 a2dCommand_SetCanvasProperty::a2dCommand_SetCanvasProperty( a2dObject* object, const a2dPropertyIdFill* id, const a2dFill& fill )
11167 {
11168  a2dFillProperty* prop = new a2dFillProperty( id, fill );
11169 
11170  m_property = prop;
11171 }
11172 
11173 a2dCommand_SetCanvasProperty::a2dCommand_SetCanvasProperty( a2dObject* object, const a2dPropertyIdStroke* id, const a2dStroke& stroke )
11174 {
11175  a2dStrokeProperty* prop = new a2dStrokeProperty( id, stroke );
11176 
11177  m_property = prop;
11178 }
11179 
11180 a2dCommand_SetCanvasProperty::~a2dCommand_SetCanvasProperty( void )
11181 {
11182 }
11183 
11185 {
11186  wxASSERT( !m_propRefObject );
11187  return new a2dCommand_SetCanvasProperty( object, m_property->Clone( a2dObject::clone_flat ) );
11188 }
11189 
11191 {
11192  bool ret = a2dCommand_SetProperty::Do();
11193 
11194 
11195  return ret;
11196 }
11197 
11199 {
11200  bool ret = a2dCommand_SetProperty::Undo();
11201 
11202  return ret;
11203 }
11204 
11205 //----------------------------------------------------------------------------
11206 // a2dCommand_ChangeCanvasObjectStyle
11207 //----------------------------------------------------------------------------
11208 
11209 const a2dCommandId a2dCommand_ChangeCanvasObjectStyle::sm_SetFillStyleCommand = a2dCommandId( wxT( "SetCanvasObjectFillStyleCommand" ) );
11210 const a2dCommandId a2dCommand_ChangeCanvasObjectStyle::sm_SetStrokeStyleCommand = a2dCommandId( wxT( "SetCanvasObjectStrokeStyleCommand" ) );
11211 const a2dCommandId a2dCommand_ChangeCanvasObjectStyle::sm_SetStyleCommand = a2dCommandId( wxT( "SetCanvasObjectStyleCommand" ) );
11212 
11213 /*
11214 * a2dCommand_ChangeCanvasObjectStyle
11215 */
11216 a2dCommand_ChangeCanvasObjectStyle::a2dCommand_ChangeCanvasObjectStyle( a2dObject* object, const a2dFill& fill ):
11217  a2dCommand( true, sm_SetFillStyleCommand, sm_SetStyleCommand )
11218 {
11219  m_fill = fill;
11220  m_stroke = *a2dNullSTROKE;
11221 
11222  m_propObject = object;
11223 }
11224 
11225 a2dCommand_ChangeCanvasObjectStyle::a2dCommand_ChangeCanvasObjectStyle( a2dObject* object, const a2dStroke& stroke ):
11226  a2dCommand( true, sm_SetStrokeStyleCommand, sm_SetStyleCommand )
11227 {
11228  m_fill = *a2dNullFILL;
11229  m_stroke = stroke;
11230 
11231  m_propObject = object;
11232 }
11233 
11234 a2dCommand_ChangeCanvasObjectStyle::a2dCommand_ChangeCanvasObjectStyle( a2dObject* object,
11235  const a2dFill& fill, const a2dStroke& stroke ):
11236  a2dCommand( true, sm_SetStyleCommand, sm_SetStyleCommand )
11237 {
11238  m_fill = fill;
11239  m_stroke = stroke;
11240 
11241  m_propObject = object;
11242 }
11243 
11244 
11245 a2dCommand_ChangeCanvasObjectStyle::~a2dCommand_ChangeCanvasObjectStyle( void )
11246 {
11247 }
11248 
11250 {
11251  if ( !m_fill.IsNoFill() )
11252  {
11253  a2dFill fillold = a2dCanvasObject::PROPID_Fill->GetPropertyValue( m_propObject );
11254  a2dCanvasObject::PROPID_Fill->SetPropertyToObject( m_propObject, m_fill );
11255  m_fill = fillold;
11256  }
11257  if ( !m_stroke.IsNoStroke() )
11258  {
11259  a2dStroke strokeold = a2dCanvasObject::PROPID_Stroke->GetPropertyValue( m_propObject );
11260  a2dCanvasObject::PROPID_Stroke->SetPropertyToObject( m_propObject, m_stroke );
11261  m_stroke = strokeold;
11262  }
11263 
11264  return true;
11265 }
11266 
11268 {
11270 }
11271 
11272 // ----------------------------------------------------------------------------
11273 // wxDoubleNumberEntryDialog
11274 // ----------------------------------------------------------------------------
11275 
11276 BEGIN_EVENT_TABLE( wxDoubleNumberEntryDialog, wxDialog )
11277  EVT_BUTTON( wxID_OK, wxDoubleNumberEntryDialog::OnOK )
11278  EVT_BUTTON( wxID_CANCEL, wxDoubleNumberEntryDialog::OnCancel )
11279 END_EVENT_TABLE()
11280 
11281 IMPLEMENT_CLASS( wxDoubleNumberEntryDialog, wxDialog )
11282 
11283 wxDoubleNumberEntryDialog::wxDoubleNumberEntryDialog( wxWindow* parent,
11284  const wxString& message,
11285  const wxString& prompt,
11286  const wxString& caption,
11287  double value,
11288  double min,
11289  double max,
11290  const wxPoint& pos )
11291  : wxDialog( parent, wxID_ANY, caption,
11292  pos, wxDefaultSize )
11293 {
11294  m_value = value;
11295  m_max = max;
11296  m_min = min;
11297 
11298  wxBeginBusyCursor();
11299 
11300  wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL );
11301 #if wxUSE_STATTEXT
11302  // 1) text message
11303  topsizer->Add( CreateTextSizer( message ), 0, wxALL, 10 );
11304 #endif
11305 
11306  // 2) prompt and text ctrl
11307  wxBoxSizer* inputsizer = new wxBoxSizer( wxHORIZONTAL );
11308 
11309 #if wxUSE_STATTEXT
11310  // prompt if any
11311  if ( !prompt.empty() )
11312  inputsizer->Add( new wxStaticText( this, wxID_ANY, prompt ), 0, wxCENTER | wxLEFT, 10 );
11313 #endif
11314 
11315  // spin ctrl
11316  wxString valStr;
11317  valStr.Printf( wxT( "%f" ), m_value );
11318  m_textctrl = new wxTextCtrl( this, wxID_ANY, valStr, wxDefaultPosition, wxSize( 140, wxDefaultCoord ) );
11319  inputsizer->Add( m_textctrl, 1, wxCENTER | wxLEFT | wxRIGHT, 10 );
11320  // add both
11321  topsizer->Add( inputsizer, 0, wxEXPAND | wxLEFT | wxRIGHT, 5 );
11322 
11323  // 3) buttons if any
11324  wxSizer* buttonSizer = CreateSeparatedButtonSizer( wxOK | wxCANCEL );
11325  if ( buttonSizer )
11326  {
11327  topsizer->Add( buttonSizer, wxSizerFlags().Expand().DoubleBorder() );
11328  }
11329 
11330  SetSizer( topsizer );
11331  SetAutoLayout( true );
11332 
11333  topsizer->SetSizeHints( this );
11334  topsizer->Fit( this );
11335 
11336  Centre( wxBOTH );
11337 
11338  m_textctrl->SetSelection( -1, -1 );
11339  m_textctrl->SetFocus();
11340 
11341  wxEndBusyCursor();
11342 }
11343 
11344 void wxDoubleNumberEntryDialog::OnOK( wxCommandEvent& WXUNUSED( event ) )
11345 {
11346  wxString tmp = m_textctrl->GetValue();
11347 
11348  if ( !tmp.ToDouble( &m_value ) )
11349  EndModal( wxID_CANCEL );
11350  if ( m_value < m_min || m_value > m_max )
11351  {
11352  // not a number or out of range
11353  m_value = -1;
11354  EndModal( wxID_CANCEL );
11355  }
11356 
11357  EndModal( wxID_OK );
11358 }
11359 
11360 void wxDoubleNumberEntryDialog::OnCancel( wxCommandEvent& WXUNUSED( event ) )
11361 {
11362  EndModal( wxID_CANCEL );
11363 }
11364 
11365 // ----------------------------------------------------------------------------
11366 // global functions
11367 // ----------------------------------------------------------------------------
11368 
11369 // wxGetTextFromUser is in utilscmn.cpp
11370 
11371 double wxGetDoubleNumberFromUser( const wxString& msg,
11372  const wxString& prompt,
11373  const wxString& title,
11374  double value,
11375  double min,
11376  double max,
11377  wxWindow* parent,
11378  const wxPoint& pos )
11379 {
11380  wxDoubleNumberEntryDialog dialog( parent, msg, prompt, title,
11381  value, min, max, pos );
11382  if ( dialog.ShowModal() == wxID_OK )
11383  return dialog.GetValue();
11384 
11385  return DBL_MAX;
11386 }
11387 
11389 {
11390  double x = m_args.argValue.x;
11391  double y = m_args.argValue.y;
11392 
11393  //get current position
11394  m_xold = GetDrawHabitat()->GetLastXEntry();
11395  m_yold = GetDrawHabitat()->GetLastYEntry();
11396 
11397  //get current position
11398  if ( m_args.argValue.relative )
11399  {
11400  if ( m_args.argValue.polar )
11401  {
11402  double radius = y;
11403  double ang = x;
11404 
11405  x = m_xold + radius * cos( wxDegToRad( ang ) );
11406  y = m_yold + radius * sin( wxDegToRad( ang ) );
11407  }
11408  else
11409  {
11410  x += m_xold;
11411  y += m_yold;
11412  }
11413  }
11414  else
11415  {
11416  if ( m_args.argValue.polar )
11417  {
11418  double radius = y;
11419  double ang = x;
11420 
11421  x = radius * cos( wxDegToRad( ang ) );
11422  y = radius * sin( wxDegToRad( ang ) );
11423  }
11424  }
11425 
11426 
11427  int dx = GetCanvasCmp()->GetActiveDrawingPart()->GetDrawer2D()->WorldToDeviceX( x );
11428  int dy = GetCanvasCmp()->GetActiveDrawingPart()->GetDrawer2D()->WorldToDeviceY( y );
11429  GetCanvasCmp()->GetActiveDrawingPart()->GetDisplayWindow()->WarpPointer( dx, dy );
11430  GetDrawHabitat()->SetLastXyEntry( x, y );
11431 
11432  return true;
11433 }
11434 
11436 {
11437  int dx = GetCanvasCmp()->GetActiveDrawingPart()->GetDrawer2D()->WorldToDeviceX( m_xold );
11438  int dy = GetCanvasCmp()->GetActiveDrawingPart()->GetDrawer2D()->WorldToDeviceY( m_yold );
11439  GetCanvasCmp()->GetActiveDrawingPart()->GetDisplayWindow()->WarpPointer( dx, dy );
11440  return true;
11441 }
11442 
11443 // ----------------------------------------------------------------------------
11444 // a2dCommand_AddObjects
11445 // ----------------------------------------------------------------------------
11446 
11447 a2dCommand_AddObjects::a2dCommand_AddObjects( a2dCanvasObject* parent, a2dCanvasObjectList objects ):
11448  a2dCommand( true, a2dCommand_AddObjects::Id )
11449 {
11450  m_objects = objects;
11451  m_parent = parent;
11452 }
11453 
11455 {
11456  for( a2dCanvasObjectList::iterator iter = m_objects.begin(); iter != m_objects.end(); ++iter )
11457  {
11458  a2dCanvasObject* obj = *iter;
11459  m_parent->Append( obj );
11460  }
11461 
11462  return true;
11463 }
11464 
11466 {
11467  a2dCanvasObjectList* childs= m_parent->GetChildObjectList();
11468 
11469  a2dCanvasObjectList::iterator iter = childs->begin();
11470  while( iter != childs->end() )
11471  {
11472  a2dCanvasObject* obj = *iter;
11473  if ( m_objects.Find( obj ) )
11474  iter = childs->erase( iter );
11475  else
11476  ++iter;
11477  }
11478  m_parent->SetPending( true ); //redraw because object are removed without using pending mechanism
11479  return true;
11480 }
11481 
11483 {
11484  for( a2dCanvasObjectList::iterator iter = m_objects.begin(); iter != m_objects.end(); ++iter )
11485  {
11486  a2dCanvasObject* obj = *iter;
11487  m_parent->Append( obj );
11488  }
11489  return true;
11490 }
Prevent cloning a a2dCameleon reference at a deeper level.
Definition: gen.h:1219
static const a2dCanvasObjectFlagsMask SELECTED2
Definition: candefs.h:181
a2dStroke GetTextStroke() const
get the current text stroke
Definition: canglob.cpp:1025
void SetMappingUpp(double vx1, double vy1, double xpp, double ypp)
Give the virtual size to be displayed, the mapping matrix will be calculated.
Definition: drawer2d.cpp:250
virtual void SetYaxis(bool up)
set if the Yaxis goes up or down
Definition: drawer2d.cpp:438
Display Part of a a2dDrawing, in which a2dCanvasObjects are shown.
Definition: drawer.h:470
wxString m_menuString
if set this will be used for menu Undo/Redo labels, else the m_commandId its name is used...
Definition: comevt.h:282
a2dBoundingBox GetVisibleBbox() const
get visible area as a boundingbox in world coordinates
Definition: drawer2d.cpp:433
set check on a2dObject flag false or true
Definition: algos.h:665
a2dCircle at x,y, and with radius
Definition: canprim.h:554
int Copy(double x, double y, a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, long target=-1, bool check=false)
copy only in this group object with the same mask
Definition: objlist.cpp:406
bool GetAttributeValueBool(const wxString &attrib, bool defaultv=false)
Returns the boolean value of an attribute.
Definition: genxmlpars.cpp:537
a2dCanvasObject * GetCurrentCanvasObject()
get the current canvas object to add to parent as child
Definition: drawing.h:1198
a2dCanvasObjectList m_maskedObjects
objects found with required mask
Definition: drawing.h:1697
wxPoint2DDouble a2dPoint2D
this to define if coordinate numbers are integer or doubles
Definition: artglob.h:47
void SetCommandProcessor(a2dCommandProcessor *cmp)
set when submitting this command via a2dCommandProcessor
Definition: comevt.h:217
used to move points in polygon objects
Definition: drawing.h:1997
bool GetFilled() const
Definition: canobj.h:1476
double GetHeight() const
returns height of the boundingbox
Definition: bbox.cpp:334
see a2dCameleonEvent
Definition: cameleon.h:1098
a2dCanvasObjectList * ConvertToPolygons(a2dCanvasObject *canvasobject, bool transform)
Definition: drawing.cpp:6226
static const a2dCommandId COMID_PushTool_Rotate
push this tool on the tools stack
Definition: sttool.h:1302
bool ChangeLayer(wxUint16 layer, a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL)
move only in this group objects with the given mask to the layer given
Definition: objlist.cpp:268
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8427
user interface appearance for a2dCameleon
Definition: cameleon.h:585
void OnIdle(wxIdleEvent &event)
Called by ProcessEvent(wxEvent&amp; event) of document.
Definition: drawing.cpp:886
void SetLastError(a2dError error)
set last error encountered
Definition: gen.h:3541
used to move points in polygon objects
Definition: drawing.h:2033
(In) Visible property that can be added to Docview Objects.
Definition: gen.h:1785
virtual bool DisConnectWith(a2dCanvasObject *toDisConnect=NULL, const wxString &pinname=wxT(""), bool undo=false)
Do Disconnect from another a2dCanvasObject by pin name.
Definition: canobj.cpp:7081
bool SetSpecificFlags(bool setOrClear, a2dCanvasObjectFlagsMask which, const wxString &classname=wxT(""), a2dCanvasObjectFlagsMask whichobjects=a2dCanvasOFlags::ALL, const a2dBoundingBox &bbox=wxNonValidBbox, const a2dAffineMatrix &tworld=a2dIDENTITY_MATRIX)
set all given bit flags at once recursive for all objects in given boundingbox
Definition: objlist.cpp:519
virtual wxPrintout * OnCreatePrintout(a2dPrintWhat typeOfPrint, const wxPageSetupDialogData &pageSetupData)
to create a a2dDrawingPrintOut, used to print a view or its document
Definition: drawer.cpp:720
wxString AskFile(const wxString &message, const wxString &default_path="", const wxString &default_filename="", const wxString &default_extension="", const wxString &wildcard="*.*", int flags=0, int x=-1, int y=-1)
ask for a file using a file selector.
Definition: drawing.cpp:6339
A2DGENERALDLLEXP long wxGenNewId()
This function is like wxNewId, but it has its own ID set.
Definition: gen.cpp:92
#define wxDynamicCast(obj, className)
Define wxDynamicCast so that it will give a compiler error for unrelated types.
Definition: gen.h:75
Base class for all types of strokes, understood by a2dDrawer2D classes.
Definition: stylebase.h:378
void SetRoot(a2dDrawing *root, bool recurse=true)
Sets this object to a a2dCanvasDocument.
Definition: canobj.cpp:5933
bool Undo()
Override this to undo a command.
Definition: comevt.cpp:667
a2dPoint2D GetCentre() const
get centre
Definition: bbox.cpp:277
double GetPosX2(bool transform=true) const
Get (transformed) position of X2.
Definition: canprim.cpp:3865
for changing boolean select2 flag values inside canvas objects
Definition: drawing.h:1754
virtual bool Undo()
Undo one command or command group.
Definition: comevt.cpp:918
bool IsNoStroke() const
Definition: stylebase.h:510
objects which fit the mask to bottom in parent (rendered first)
Definition: drawing.h:2999
a2dCanvasObjectReference is a reference to any a2dCanvasObject derived class.
Definition: recur.h:53
void SetAllowMultiEdit(bool onOff)
if set true, Double Click on N selected objects, leads to editing them as a group ...
Definition: mastertool.h:183
Interactive drag a new object into a drawing.
Definition: sttool.h:1189
virtual void DoLoad(wxObject *parent, a2dIOHandlerXmlSerIn &parser, a2dXmlSer_flag xmlparts)
Load settings.
Definition: drawing.cpp:821
const a2dError a2dError_CommandError
convert segments in polygon/polyline with width objects in group A to Arcs where possible ...
Definition: drawing.h:3703
void WriteElement(const wxString &name, const wxString &content=wxT(""), bool newLine=true)
Writes start and end tag.
Definition: genxmlpars.cpp:794
virtual bool Redo()
Redo one command or command group.
Definition: comevt.cpp:933
used to move start or end point in line objects
Definition: drawing.h:2130
bool HasAttribute(const wxString &attrib)
Does the current tag have this attribute?
Definition: genxmlpars.cpp:560
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7042
const wxString & GetName() const
Get name of font, e.g. Arial.
Definition: stylebase.h:717
property to hold a a2dAffineMatrix
Definition: afmatrix.h:410
bool PushTool(a2dBaseTool *tool)
specialize to keep first tool on the stack active
Definition: sttool.cpp:451
Drag Selected canvasObjects.
Definition: sttool2.h:208
virtual void SetParent(a2dCanvasObject *parent)
set parent object of the pin or some other objects that needs a parent
Definition: canobj.h:2122
diagram is an appearance for a2dCameleon
Definition: cameleon.h:382
void AddPending(a2dIterC &ic)
search objects ( if nested recursive ) that have the pending flag Set
Definition: canobj.cpp:4521
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9778
double m_initialSizeY
for new document views what will be the size in userunits in Y
Definition: drawing.h:860
void SetSelectable(bool status)
set layer selectable
Definition: layerinf.cpp:366
a2dHandle is used inside editing versions of a certain objects.
Definition: canpin.h:30
a2dCanvasObject * GetCanvasObject()
Pointer to object selected.
Definition: strucdlg.cpp:751
see a2dDrawingEvent
Definition: drawing.h:933
The a2dBaseTool is used to derive tools from that are controlled by.
Definition: tools.h:379
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9525
convert segments in polygon/polyline with width objects in group A to Arcs where possible ...
Definition: drawing.h:2609
Port to be used in a diagram for connecting to symbol.
Definition: cameleon.h:54
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9314
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8798
void SetEndScaleX(double xs)
scaling in X for begin and end objects of lines and polylines
Definition: canglob.h:841
void SetAlignment(int alignment)
Set the position of the anchor point w.r.t the text.
Definition: cantext.h:294
bool LinkReference(a2dObject *other)
link a reference in the object to the given value
Definition: drawing.cpp:339
void SetTextStroke(const a2dStroke &stroke)
used for new text objects etc. to set the stroke
Definition: canglob.cpp:979
Display a font selection dialog.
Definition: fontdlg.h:67
virtual wxString GetName() const
Returns the name of this object, if no name is given the internal id will be returned.
Definition: gen.cpp:1310
const a2dPrintWhat a2dPRINT_PreviewDrawing
preview print a2dDrawing
Definition: drawing.cpp:76
void SetTextFill(const a2dFill &fill)
used for new text objects etc. to set the fill
Definition: canglob.cpp:994
virtual bool DoCommand(a2dCommand &cmd)
sents a a2dCommandProcessorEvent with id ::wxEVT_DO
Definition: comevt.cpp:787
void SetLayer(wxUint16 layer, bool setStyleOfLayer=false)
Definition: canglob.cpp:1076
a2dCanvasObject * GetLineEnd() const
get current line end object for line and polyline.
Definition: canglob.h:832
objects which fit the mask are converted to rectangles
Definition: drawing.h:3602
bool GetGridLines()
Get setting for grid to draw lines instead of points.
Definition: drawer.h:915
const a2dAffineMatrix & GetTransformMatrix() const
get the matrix used to position the object
Definition: canobj.h:500
void SetRelease(bool value)
set release flag
Definition: gen.h:1346
bool Do()
Override this to perform a command.
Definition: drawing.cpp:11190
a2dDrawingId GetDrawingId()
set special id to differentiate drawings
Definition: drawing.h:721
XMLeventType Next()
Walks to next element and returns event type.
Definition: genxmlpars.cpp:422
virtual bool Load(a2dDocumentInputStream &stream, wxObject *obj)=0
override to read the stream and store (part of) the contents in to a specific a2dDocument or othere o...
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9717
if set, set in the clone the PROPID_Original property to the copied object
Definition: gen.h:1212
static const a2dCommandId COMID_PushTool_DrawEllipse
push this tool on the tools stack
Definition: sttool.h:1530
a2dArc * Add_a2dArc(double xc, double yc, double radius, double start, double end)
add specific object
Definition: drawing.cpp:6512
bool Start(a2dCanvasObject *object)
start here
Definition: algos.cpp:1098
double GetVisibleMinX() const
get Minimal X of the visible part in world coordinates
Definition: drawer2d.cpp:403
Remove original and replace with one straight segment, dynamic pins move with segment.
Definition: connectgen.h:161
a2dCanvasObjectFlagsMask m_which
the mask required for the objects to search
Definition: drawing.h:1686
bool ResolveOrAdd(a2dSmrtPtr< a2dObject > *storedHere, const wxString &id=wxT(""))
try to resolve the object that is in storedHere when it is a reference.
Definition: gen.cpp:4760
void ConvertToLines(double aberation=0)
Convert complex segments to line segments.
Definition: polyver.cpp:1948
virtual void InsertSegment(unsigned int index, a2dLineSegmentPtr segin)
insert segment after index given
Definition: polygon.h:81
class to map references to objects stored in XML, in order to make the connection later on...
Definition: gen.h:3462
void SetSpline(bool spline)
certain drawing tools like polygon drawing use this setting
Definition: sttool.cpp:4295
virtual bool Undo()
Override this to undo a command.
Definition: drawing.cpp:11108
a2dlist< long > m_objectsIndex
indexes of found objects
Definition: drawing.h:1699
static const a2dCommandId COMID_PushTool_DrawPolygonL
push this tool on the tools stack
Definition: sttool.h:1722
see a2dCommandProcessorEvent
Definition: comevt.h:649
transfer this property via a command processor
Definition: id.h:169
a2dCanvasObject * GetCanvasObject()
Pointer to object selected.
Definition: strucdlg.cpp:373
a2dAutoZeroPtr< a2dObject > m_propRefObject
all property references will be set NULL when this object, having the property, will be deleted...
Definition: comevt.h:607
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9942
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9614
a2dCanvasObjectPtr m_parentObject
parent of found objects
Definition: drawing.h:1576
void SetGroupB(const a2dLayerGroup &groupB)
objects on layers in group B will be used as first operand
Definition: algos.h:864
unsigned int GetChildObjectsCount() const
get number of child objects
Definition: canobj.cpp:2570
a2dCommand * GetCommand()
the command ( if there was one ) that did it.
Definition: comevt.h:759
Interactive drawing of a circular arc.
Definition: sttool.h:1641
bool SameId(const a2dMenuIdItem &other) const
check if same id.
Definition: comevt.h:1586
bool Do()
Override this to perform a command.
Definition: comevt.cpp:655
set cursor
Definition: drawing.h:4227
virtual a2dCommand * CloneAndBind(a2dObject *object)
Copy and instantiate the command.
Definition: drawing.cpp:7778
dialog for defining style on an a2dCanvasObject
static const a2dCanvasObjectFlagsMask BIN2
Definition: candefs.h:193
const a2dError a2dError_CouldNotEvaluatePath
Add manhattan lines to end.
Definition: connectgen.h:167
wxPageSetupDialogData * m_pageSetupData
this is the global printer page setup data for printer
Definition: drawing.h:1393
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9403
void SetFill(const a2dFill &fill)
set fill if used inside a tool
Definition: tools.cpp:812
static const long Boolean_Surface2Polygon
Definition: booloper.h:54
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8528
a2dRect * Add_a2dRect(double x, double y, double w, double h, double radius=0)
add specific object
Definition: drawing.cpp:6492
OVERLAP Intersect(const a2dBoundingBox &, double Marge=0) const
Definition: bbox.cpp:205
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8855
virtual a2dCommand * CloneAndBind(a2dObject *object)
Copy and instantiate the command.
Definition: comevt.cpp:149
void SetSelected2(bool selected)
Set the object selected2 flag if allowed.
Definition: canobj.h:1639
a2dCanvasObject * GetRootObject() const
get the root object, which holds the objects in the document
Definition: drawing.h:521
bool SetParentObject(a2dCanvasObject *obj=0)
set top object available in the a2dCanvasDocument to be used for adding other objects ...
Definition: drawing.cpp:6434
bool Zoom(double x1, double y1, double x2, double y2, bool upp)
Zoom to this rectangle, or Upp at x1, y1.
Definition: drawing.cpp:6123
a2dPin is used in a2dCanvasObject to add pins to it.
Definition: canpin.h:233
void WriteStartElementAttributes(const wxString &name, bool newLine=true)
Writes start tag which has attributes.
Definition: genxmlpars.cpp:757
virtual a2dCommand * CloneAndBind(a2dObject *object)
Copy and instantiate the command.
Definition: drawing.cpp:7438
polygon defined with list of points.
Definition: polygon.h:45
virtual bool Start(a2dCanvasObject *object)
called for boolean operation
Definition: booloper.cpp:117
#define EVT_CHANGEDMODIFY_DRAWING(func)
event from a drawing when changed by commands
Definition: drawing.h:991
used to add points to polygon objects
Definition: drawing.h:1959
remove hierarchy in grouped objects
Definition: algos.h:794
===================== commands for cameleons =========================
Definition: cameleon.h:952
virtual void DoWalker(wxObject *parent, a2dWalkerIOHandler &handler)
iterate over this object and its children
Definition: gen.cpp:1488
Ref Counted base object.
Definition: gen.h:1045
bool GetPending() const
is this object pending for update?
Definition: canobj.h:1162
stack based tools for drawing and editing in a faster manner, but with less document feedback...
bool PreDo()
Override this to perform a dependency action before command is done.
Definition: drawing.cpp:7110
Master tool for objects graphics slecting and dragging nd zooming.
Definition: mastertool.h:429
static const long moveLayers
move layers to target
Definition: algos.h:918
void SetTransformMatrix(const a2dAffineMatrix &mat=a2dIDENTITY_MATRIX)
Returns the matrix used to position the object.
Definition: canobj.h:509
bool Rotate(double angle)
Rotate clockwise by the given number of degrees:
Definition: afmatrix.cpp:432
void Init(a2dCanvasObject *showObject)
selected child objects with this as parent will be shown
a2dDrawing * GetRoot() const
get a2dCanvasDocument of the object.
Definition: canobj.h:952
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:10720
a2dIOHandlerCVGIn and a2dIOHandlerCVGOut - XML I/O classes for the CVG format.
The a2dStTool is used to derive tools from.
Definition: sttool.h:115
#define EVT_DO(func)
event sent from a2DocumentCommandProcessor when a command is initially done
Definition: comevt.h:795
double wxDegToRad(double deg)
conversion from degrees to radians
Definition: artglob.cpp:30
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8628
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8021
double wxGetDoubleNumberFromUser(const wxString &message, const wxString &prompt, const wxString &caption, double value=0, double min=0, double max=100, wxWindow *parent=(wxWindow *) NULL, const wxPoint &pos=wxDefaultPosition)
get Double from user
Definition: drawing.cpp:11371
a2dObject * Clone(CloneOptions options, a2dRefMap *refs=NULL) const
create an exact copy of this property
Definition: gen.cpp:1199
void SetOneShot()
Only one action of the tool, after that it will ask the controller to stop this tool.
Definition: tools.h:430
void SetOperation(Operation operation)
set type of operation
Definition: algos.h:963
used to add objects to a a2dCanvasDocument in the current parent
Definition: drawing.h:4315
void SetMappingDeviceRect(int mapx, int mapy, int mapWidth, int mapHeight, bool remap=false)
to change the default mapping (to the complete buffer).
Definition: drawer2d.cpp:216
objects which fit the mask to top in parent (rendered last)
Definition: drawing.h:2968
objects which fit the mask are merge into one new object
Definition: drawing.h:3213
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:11388
store a menu Id generated by XRCID( menuIdString ) plus a menustring and helpstring ...
Definition: comevt.h:1563
bool m_updatespending
set by object in this a2dCanvasDocument, to tell they have changed and therefore it needs to be reren...
Definition: drawing.h:849
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7964
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8822
virtual bool Update(UpdateMode mode)
Update the state of the object according to its current position etc.
Definition: canobj.cpp:5149
void OnBusyBegin(a2dCommandProcessorEvent &event)
do this at command start
Definition: drawing.cpp:5948
virtual void DependencyPending(a2dWalkerIOHandler *handler)
called by to check if this object becomes pending as a result of other objects
Definition: canobj.cpp:4680
used to connect two pins
Definition: drawing.h:2411
Base class for adding to the list of appearances in a a2dCameleon.
Definition: cameleon.h:217
bool PostDo()
Override this to perform a dependency action after command is done.
Definition: drawing.cpp:7577
static const a2dCommandId COMID_PushTool_MultiEdit
push this tool on the tools stack
Definition: edit.h:293
void SetFastTools(bool onOff)
tools using inverse drawing will be used.
Definition: mastertool.h:177
convert segments in polygon/polyline objects in group A to Arcs where possible
Definition: drawing.h:2606
void ConnectEvent(wxEventType type, wxEvtHandler *eventSink)
Definition: gen.cpp:876
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8774
void OnUpdateMenu(wxUpdateUIEvent &event)
Definition: drawing.cpp:2291
int GetAttributeValueInt(const wxString &attrib, int defaultv=0)
Returns the integer value of an attribute.
Definition: genxmlpars.cpp:495
static const a2dCommandId COMID_PushTool_FastDragMulti
push this tool on the tools stack
Definition: sttool2.h:215
const a2dError a2dError_FileCouldNotOpen
#define EVT_NEW_CAMELEON(func)
event from a document when its views need to be updated
Definition: cameleon.h:1132
static const long ConvertToArcs
convert segments in polygon/polyline objects in group A to Arcs where possible
Definition: algos.h:924
bool IsIdentity(void) const
Is the matrix the identity matrix?
Definition: afmatrix.h:147
Defines a font to be set to a2dDrawer2D or stored in a2dCanvsObject etc.
Definition: stylebase.h:779
bool GetReverseOrder() const
Get Setting for draw layers in reverse order.
Definition: drawer.h:589
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7880
Interactive Zooming.
Definition: sttool.h:849
Input and output handler for the XmlSer format.
Definition: genxmlpars.h:819
Path searching.
Definition: gen.h:2926
void DependencyPending()
call DependencyPending on root object and recursive on childs.
Definition: drawing.cpp:389
void SetStroke(const a2dStroke &stroke)
used for new objects etc. to set the stroke
Definition: canglob.cpp:939
if set, clone childs, otherwise ref-copy them
Definition: gen.h:1207
void OptimizeRerouteWires(a2dCanvasObject *parent, bool removeZero=true, bool allowredirect=true)
Definition: wire.cpp:1202
a2dLineSegmentPtr m_seg
segment removed
Definition: drawing.h:2093
void Update(unsigned int how=(a2dCANVIEW_UPDATE_ALL|a2dCANVIEW_UPDATE_BLIT), wxObject *hintObject=NULL)
see OnUpdate
Definition: drawer.cpp:1744
a command processor specially designed to work with a a2dCanvasDocument
Definition: drawing.h:1046
virtual void SetPending(bool pending)
set this object pending for update
Definition: canobj.cpp:2585
#define EVT_REDO(func)
event sent from a2DocumentCommandProcessor when a command is redone
Definition: comevt.h:799
static const long deleteLayers
delete layers
Definition: algos.h:922
bool IsNoFill() const
Definition: stylebase.h:273
convert shapes to polylines even if polygons
Definition: drawing.h:2613
bool GetYaxis() const
get y axis orientation
Definition: drawer2d.h:280
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9185
void SetBackgroundFill(const a2dFill &backgroundfill)
background fill for the canvas
Definition: drawer.cpp:3131
const a2dError a2dError_NoTool
convert to simple polygons and polylines
Definition: drawing.h:2607
objects which fit the mask are offset corrected
Definition: drawing.h:3323
a2dRectC is a centered rectangle
Definition: canprim.h:99
void SetGrid(bool grid)
Set grid on/off.
Definition: drawer.h:905
a2dPin * IsConnectedTo(a2dPin *pin=a2dAnyPin) const
Return the pin to which this pin is connected.
Definition: canpin.cpp:751
wxTextCtrl * m_textctrl
the text control top get the double entry
Definition: drawing.h:372
a2dCanvasObjectList * m_maskedObjects
objects found with required mask
Definition: drawing.h:1572
static const a2dCommandId COMID_PushTool_DrawRectangleFast
push this tool on the tools stack
Definition: sttool2.h:324
double GetVisibleMinY() const
get Minimal X of the visible part in world coordinates
Definition: drawer2d.cpp:408
static const long Boolean_MAKERING
Definition: booloper.h:52
bool GetUpdatesPending()
returns true if some objects have changed recently within this document
Definition: drawing.cpp:424
using a file stream for input, stream the file into a a2dDocument or other object ...
Definition: gen.h:3632
wxString & GetDescription()
Returns the description of the document.
Definition: drawing.h:755
void SetDocumentDrawStyle(wxUint32 drawstyle)
set drawstyles to use for drawing the document
Definition: drawer.cpp:1016
a2dCommandProcessor * m_cmp
allows commands to get to the command processor that submitted the command.
Definition: comevt.h:279
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:8896
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9071
a2dCameleonSymbolicRef
Definition: cameleon.h:874
void SetSmall(double smallest)
set what is seen as small.
Definition: algos.h:1025
list of a2dNamedProperty objects
Definition: gen.h:804
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7193
static const a2dCommandId COMID_PushTool_DrawPolylineL
push this tool on the tools stack
Definition: sttool.h:1813
a2dFont GetTextFont() const
get current font active text font ( like used in text tool ).
Definition: canglob.cpp:1039
static const long ConvertLinesArcs
convert shapes to seperate lines and arcs
Definition: algos.h:936
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7784
void SetRadiusMax(double radiusMax)
Polygon/polyline to Arc Maximum radius to test.
Definition: algos.h:968
static const long ConvertToPolygonPolylinesWithArcs
convert to simple polygons and polylines preserve arcs
Definition: algos.h:926
Interactive drawing of a polygon.
Definition: sttool2.h:409
double GetBboxMinX()
get minimum X of the boundingbox in world coordinates relative to its parents
Definition: canobj.h:676
convert shapes to vector paths
Definition: drawing.h:2611
Remove original and replace with manhattan lines.
Definition: connectgen.h:166
for changing only the alignment of objects for which a certain mask was set
Definition: drawing.h:1893
const a2dCommandId * m_commandId
can be used to identify the command
Definition: comevt.h:273
set layer of objects which fit the mask
Definition: drawing.h:2891
static const long ConvertToVPaths
convert shapes to vector paths
Definition: algos.h:934
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7072
a2dCanvasObject * GetLineBegin() const
get current line begin object for line and polyline.
Definition: canglob.h:828
a2dCanvasObjectFlagsMask GetFlags() const
get bitflags as an integer
Definition: canobj.cpp:2660
object to show several appearance views on what it contains
Definition: cameleon.h:630
Interactive Zooming.
Definition: sttool2.h:69
virtual bool CanLoad(a2dDocumentInputStream &stream, const wxObject *obj=NULL, wxClassInfo *docClassInfo=NULL)=0
Should return true if the handler can read from the stream.
a2dCanvasObject is the base class for Canvas Objects.
Definition: canobj.h:371
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7253
std::vector< a2dLayerInfoPtr > & GetLayerIndex()
return array index on Layer
Definition: layerinf.cpp:555
perform a function on each a2dCanvasObject in the document
Definition: algos.h:85
property to hold a a2dPoint2D plus an index in e.g a polygon.
Definition: afmatrix.h:474
wxString GetContent()
Returns the current content.
Definition: genxmlpars.cpp:570
static const a2dCommandId COMID_PushTool_DrawArc
push this tool on the tools stack
Definition: sttool.h:1648
static const a2dCommandId COMID_PushTool_DrawCircleFast
push this tool on the tools stack
Definition: sttool2.h:369
static a2dPropertyIdUri * PROPID_URI
attach an URL to the object
Definition: gen.h:1601
void SetParentGroup(a2dCommandGroup *parent)
set the parent group of this group
Definition: comevt.h:414
a2dCanvasObject * CreateHierarchy(a2dCanvasObjectFlagsMask mask, bool createref=true)
object with the same given mask are made into a group.
Definition: canobj.cpp:6100
void SetCurrentCanvasObject(a2dCanvasObject *currentcanvasobject, bool takeOverProperties=true)
set the current canvas object, which gets the change in style etc
Definition: drawing.cpp:6315
a2dCanvas * GetCanvas() const
Get the Display window of the a2dView. But casted to a a2dCanvas.
Definition: drawer.h:525
a2dDrawingPart * GetDrawingPart()
Get the a2dDrawingPart object that the controller is plugged into.
Definition: tools.h:104
a2dCircle * Add_a2dCircle(double x, double y, double radius)
add specific object
Definition: drawing.cpp:6497
objects which fit the mask are offset corrected
Definition: drawing.h:3378
for changing boolean values inside canvas objects
Definition: drawing.h:1585
double GetBboxMaxY()
get maximum Y of the boundingbox in world coordinates relative to its parents
Definition: canobj.h:694
Interactive rotate an object.
Definition: sttool.h:1295
wxUint16 m_target
target layer in operations
Definition: canglob.h:1088
void PushIn(a2dCanvasObject *pushin)
set given canvasobject as show object, and store the current on the stack
Definition: drawer.cpp:3108
static const long ConvertPolylineToArcs
convert segments in polyline objects in group A to Arcs where possible
Definition: algos.h:932
void SetSelectedOnlyA(bool selectedOnlyA)
set selectedOnlyA in group operations
Definition: algos.h:870
void TakeOverProperties(a2dObject *from, a2dPropertyIdList *listOfIds)
Properties in the id list are taken from the given object, en set to this.
Definition: gen.cpp:1527
bool m_index
produce index of where masked object are found.
Definition: drawing.h:1691
void ConvertPolylineToArc(double aber, double Rmin, double Rmax)
Definition: polyver.cpp:2369
a2dOrigin * Add_a2dOrigin(double w, double h)
add specific object
Definition: drawing.cpp:6472
static const a2dCommandId Id
Print the current document or view.
Definition: drawing.h:2715
Interactive drawing of a Rectangle.
Definition: sttool.h:807
a2dLayers * GetLayerSetup()
Get the layersettings for the canvas.
Definition: drawing.h:506
a2dCanvasObjectList * GetChildObjectList()
get the list where the child objects are stored in.
Definition: canobj.cpp:2551
remove redundant segment
Definition: drawing.h:2616
a2dCanvas uses a2dCanvasView for displaying a view on a a2dCanvasDocument.
vertex list of line and arc segments.
Definition: polyver.h:600
void SetReleaseOrignals(bool releaseOrignals)
when an object takes part in operation, and this flag is true, the original is removed.
Definition: booloper.h:89
bool SaveLayers(const wxString &filename)
save layer object to CVG file
Definition: layerinf.cpp:615
bool m_mayEdit
if true, editing drawing is allowed
Definition: drawing.h:885
void SetFill(const a2dFill &fill)
used for new objects etc. to set the fill
Definition: canglob.cpp:955
bool GetSelected() const
is the object selected flag set
Definition: canobj.h:1603
void SetFlags(a2dCanvasObjectFlagsMask newmask)
set bit flags of object (true or false) to given newmask values
Definition: canobj.cpp:2650
void SetSelected(bool selected)
Set the object selected flag if allowed.
Definition: canobj.h:1620
bool GetVisible()
is the layer visible
Definition: layerinf.cpp:341
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9110
static const a2dSignal sig_layersetupChanged
layer info changed id sent around when m_layersetup is changed.
Definition: drawing.h:771
virtual void SetName(const wxString &name)
Creates the a2dStringProperty PROPID_Name.
Definition: gen.cpp:1305
bool GetSpline() const
certain drawing tools like polygon drawing use this setting
Definition: canglob.h:822
a2dCanvasObject * PopOut()
pop last pushed canvasobject from the stack, now last becomes show object.
Definition: drawer.cpp:3114
void SetEndScaleY(double ys)
scaling in Y for begin and end objects of lines and polylines
Definition: canglob.h:844
void WriteEndElement(bool newLine=true)
Writes correspondending end tag for the current start tag.
Definition: genxmlpars.cpp:862
void SetReverseOrder(bool revorder)
Set to draw layers in reverse order.
Definition: drawer.cpp:733
static const a2dCommandId COMID_PushTool_ZoomFast
push this tool on the tools stack
Definition: sttool2.h:76
base command processor
Definition: comevt.h:829
move object within a a2dDrawing
Definition: drawing.h:1476
a2dDrawingPart * GetActiveDrawingPart()
return the currently/last active drawing part.
Definition: canglob.h:1262
static const a2dCommandId COMID_PushTool_CopyMulti
push this tool on the tools stack
Definition: sttool.h:2155
for changing boolean flag values inside pins
Definition: drawing.h:1620
static const long Boolean_NON
Definition: booloper.h:44
a2dSmrtPtr< a2dCommandProcessor > m_commandProcessor
A pointer to the command processor associated with this document.
Definition: drawing.h:839
virtual a2dVertexList * GetAsVertexList(bool &returnIsPolygon) const
convert to a polygon.
Definition: polygon.cpp:1853
const a2dError a2dError_IOHandler
double GetUppX() const
return xpp Number of user units per pixel in x
Definition: drawer2d.h:353
void WriteStartDocument(const wxString &version, const wxString &encoding, bool standalone)
Writes the XML header declaration.
Definition: genxmlpars.cpp:723
Interactive Insertion of an a2dImage Object.
Definition: sttool.h:950
void SetBin(bool bin)
general flag use at will.
Definition: canobj.h:2259
used to change style of canvas objects in a a2dCanvasDocument
Definition: drawing.h:2201
virtual double GetVisibleHeight() const
get Height of visible part in world coordinates
Definition: drawer2d.cpp:428
bool IsVisible() const
get visibility (rendering depends on layer settings also)
Definition: canobj.h:1316
double GetValue() const
get the double
Definition: drawing.h:362
a2dFont GetFont() const
get font for text
Definition: cantext.h:251
objects which fit the mask are grouped into a new object
Definition: drawing.h:3126
int ReleaseChild(a2dCanvasObject *obj, bool backwards=false, bool all=false, bool now=false, bool undoCommands=false)
remove the given object from the childobjects
Definition: canobj.cpp:6260
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9089
static const a2dCommandId COMID_PushTool_Property
push this tool on the tools stack
Definition: sttool.h:2247
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8592
void AddToRoot(bool autoPlace=true)
add this to ms_centralCameleonRoot at a suitable position
Definition: cameleon.cpp:1260
int BringToTop(a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, bool check=false)
move only in this group objects with the given mask to the back of the list drawn last ...
Definition: objlist.cpp:461
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9965
bool GetGridAtFront()
Get grid setting for drawing grid in front or back.
Definition: drawer.h:881
a group of commands, used to group commands together for undo/redo
Definition: comevt.h:360
wxString m_units_measure
measuring unit (e.g. Meters Inch Microns etc.)
Definition: drawing.h:875
Identification Dialog.
static void SetNextLineDirection(bool up)
next line is higher in Y if true or lower if false
Definition: cameleon.h:235
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:8952
bool PostDo(void)
Override this to perform a dependency action after command is done.
Definition: drawing.cpp:7873
wxUint64 a2dCanvasObjectFlagsMask
mask flags for a2dCanvasObject
Definition: candefs.h:152
bool Show(bool show=true)
Show and intialize.
void SetTextFont(const a2dFont &font)
used for new text objects etc. to set the font
Definition: canglob.cpp:1009
void SetMappingShowAll(bool centre=true)
use the boundingbox of the ShowObject to set the mapping such that it will be displayed completely...
Definition: canvas.cpp:548
Io handler to iterate through a a2dDocument.
Definition: gen.h:3911
static void SetNextLineDirection(bool up)
next line is higher in Y if true or lower if false
Definition: cameleon.h:731
wxUint16 m_layer
layer to be set for new objects
Definition: canglob.h:1151
static const a2dCanvasObjectFlagsMask PENDING
Definition: candefs.h:194
void SetAberPolyToArc(double aber)
Polygon/polyline to Arc Maximum abberation.
Definition: algos.h:970
general style dialog to edit a2dCanvasObject style
Definition: styledialg.h:60
Interactive delete an object.
Definition: sttool.h:1353
a2dWirePolylineL is a polyline that adjusts itself when the objects it connects move ...
Definition: wire.h:42
virtual bool SubmitMultiple(a2dCommand *command, a2dCanvasObjectList *objects, bool storeIt=true)
submit a command template with multiple objects
Definition: drawing.cpp:6035
bool GetCheck() const
general flag use at will.
Definition: gen.h:1342
static const a2dSignal sig_changedLayer
when an object is removed from a layer,
Definition: drawing.h:774
bool Disconnect(a2dPin *pin=a2dAnyPin, bool forceErase=false)
Definition: canpin.cpp:789
void Init(a2dCanvasObjectList *objects)
take over object to show from objects
Definition: strucdlg.cpp:162
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7740
for changing only the matrix of objects for which a certain mask was set
Definition: drawing.h:1822
layer dialog for changing layer settings.
void SetVisible(bool status)
set layer visible
Definition: layerinf.cpp:361
Interactive edit properties of an object.
Definition: sttool.h:2240
void SetRootRecursive()
set a2dDrawing to its nested a2dCanvasObject&#39;s recursive for whole tree
Definition: drawing.cpp:913
a2dRectC * Add_a2dRectC(double xc, double yc, double w, double h, double angle=0, double radius=0)
add specific object
Definition: drawing.cpp:6482
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7935
a2dText is an abstract base class.
Definition: cantext.h:93
void SetGridAtFront(bool gridatfront)
Set grid setting for drawing grid in front or back.
Definition: drawer.h:878
void SetRadiusMin(double radiusMin)
Polygon/polyline to Arc Minimum radius to test.
Definition: algos.h:966
void SetRead(bool status)
read this layer from input files
Definition: layerinf.cpp:376
a2dCanvasObjectList * wxNullCanvasObjectList
define a NON a2dCanvasObjectList
Definition: objlist.cpp:53
used to change a property on objects
Definition: drawing.h:2244
#define EVT_BEGINBUSY(func)
event sent from a2DocumentCommandProcessor when a command submit/execute is starting ...
Definition: comevt.h:806
a2dCommandGroup * m_parentGroup
this is the parent group of this group
Definition: comevt.h:428
static a2dCanvasObject * GetCameleonRoot()
return the root where all a2dCameleon&#39;s are stored
Definition: cameleon.h:711
void Mirror(bool x=true, bool y=false)
Mirrors this object in x or y orientation.
Definition: canobj.cpp:2639
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9038
void ConnectTo(a2dPin *connectto)
connect this pin to the given pin
Definition: canpin.cpp:918
base for tools that draw and are stack based.
Definition: sttool.h:427
bool HasArcs() const
return true if there are a2dArcSegment segments.
Definition: polyver.cpp:1761
bool GetValid() const
returns true if boundingbox is calculated properly and therefore its valid flag is set...
Definition: bbox.cpp:299
const wxString & GetType() const
Get type of font, e.g. Freetype or Stroke.
Definition: stylebase.h:712
void Expand(const a2dPoint2D &, const a2dPoint2D &)
expand boundingbox width two points
Definition: bbox.cpp:155
virtual bool DoPreCommand(a2dCommand &cmd)
Called before doing the actual command.
Definition: comevt.cpp:769
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8694
double GetMinX() const
get minimum X of the boundingbox
Definition: bbox.cpp:304
virtual bool Remove(a2dCommand *command)
Remove the given command in this group or a subgroup.
Definition: comevt.cpp:379
Interactive Selection of an Object.
Definition: sttoolmes.h:143
a2dCanvasObjectReference * Add_a2dCanvasObjectReference(double x, double y, a2dCanvasObject *obj)
add specific object
Definition: drawing.cpp:6460
a2dCanvasObject * m_parent
sets current style object to current canvas object
Definition: drawing.h:1344
const a2dError a2dError_SaveFile
virtual class a2dCommandGroup * IsCommandGroup()
This is like a wxDynamicCast, but much faster.
Definition: comevt.h:232
bool GetScaleOnResize()
get current setting for ScaleOnResize
Definition: canvas.h:210
command on selected objects
Definition: drawing.h:2471
a2dOrigin stays at World Coordinate Zero (0,0) not matter what.
Definition: canprim.h:31
static const a2dCommandId COMID_PushTool_Delete
push this tool on the tools stack
Definition: sttool.h:1360
bool GetEditAtEndTools()
see SetEditAtEndTools
Definition: canglob.h:1256
a2dEllipticArc * Add_a2dEllipticArc(double xc, double yc, double width, double height, double start, double end)
add specific object
Definition: drawing.cpp:6507
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9997
double m_initialSizeX
for new document views what will be the size in userunits in X
Definition: drawing.h:857
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9346
void SetIgnorePendingObjects(bool onoff)
Switches ignorance of pending objects on and off.
Definition: drawing.cpp:432
a2dCameleon * GetCameleon()
this appearance is for the returned a2dCameleon here.
Definition: cameleon.h:229
Interactive drag an object.
Definition: sttool.h:1012
void Transform(const a2dAffineMatrix &tworld)
transform the object using the given matrix
Definition: canobj.h:577
void SetFont(const a2dFont &font, double lineSpaceFactor=0.1)
set font for text
Definition: cantext.cpp:527
void SetPosXY1(double x, double y, bool afterinversion=true)
sets position of first point
Definition: canprim.cpp:3902
#define forEachIn(listtype, list)
easy iteration for a2dlist
Definition: a2dlist.h:111
const a2dStroke & GetStroke() const
get the current stroke
Definition: canglob.h:797
void OnBusyEnd(a2dCommandProcessorEvent &event)
do this at command end
Definition: drawing.cpp:5957
void SetRouteMethod(RouteMethod routing)
set the way routing will be done
Definition: connectgen.h:344
delete objects which fit the mask
Definition: drawing.h:2937
void CommandGroupEnd(a2dCommandGroup *group)
End a command group.
Definition: comevt.cpp:1125
bool GetGrid()
Get grid setting on/off.
Definition: drawer.h:908
a2dEllipse centered at x,y.
Definition: canprim.h:635
delete group A objects
Definition: drawing.h:2603
polyline defined with list of points.
Definition: polygon.h:332
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7097
static const a2dCommandId COMID_PushTool_DrawPolylineL_Splined
push this tool on the tools stack
Definition: sttool.h:1817
wxUint16 a2dPrintWhat
defines what to print
Definition: gen.h:4052
unsigned int m_index
where did we remove it, in order to insert there in case of undo
Definition: drawing.h:2090
The a2dStToolContr is a Tool Controller specialized for working with a2dCanvasView.
Definition: sttool.h:485
void SetPropertyToObject(a2dObject *obj, const basetype &value, SetFlags setflags=set_none) const
Set the property in obj to value.
Definition: id.inl:238
a2dCameleonInst to show one appearance of an a2dCameleon.
Definition: cameleon.h:272
Definition of class for dialog to set groups for boolean operations.
void SetPosXYMidSegment(a2dLineSegmentPtr seg, double x, double y, bool afterinversion=true)
modify middle point of arcsegment at index to x,y
Definition: polygon.cpp:784
double m_units_accuracy
how many decimal places in fraction are valid
Definition: drawing.h:863
void OnCancel(wxCommandEvent &event)
implementation only
Definition: drawing.cpp:11360
used to remove points from polygon objects
Definition: drawing.h:2070
void Walker(wxObject *parent, a2dWalkerIOHandler &handler)
This is used to recursively walk through an object tree.
Definition: gen.cpp:1473
wxString m_units
unit (e.g. Meters Inch Microns etc.)
Definition: drawing.h:872
virtual a2dCanvasObjectList * GetAsCanvasVpaths(bool transform=true) const
when implemented the object without its children, is converted to
Definition: canobj.cpp:1505
void GetPosXYMidSegment(int index, double &x, double &y, bool transform=true) const
get middle point of arcsegment at index to x,y
Definition: polygon.cpp:667
double GetPosX() const
get x position from affine matrix
Definition: canobj.h:527
void Insert(size_t before, a2dCanvasObject *obj, bool ignoreReleased)
insert at index, taking into account released objects if needed.
Definition: objlist.cpp:742
#define EVT_COM_EVENT(func)
static wxEvtHandler for communication event
Definition: gen.h:564
edit properties of a2dCanvasObject&#39;s
Definition: canpropedit.h:148
a2dCommandGroup * CommandGroupBegin(const wxString &name)
Start a new command group.
Definition: comevt.cpp:1096
static const a2dCommandId COMID_PushTool_Copy
push this tool on the tools stack
Definition: sttool.h:1260
bool PreDo()
Override this to perform a dependency action before command is done.
Definition: drawing.cpp:10459
a2dSmrtPtr< a2dCommandGroup > m_currentGroup
this is the parent group of the current command ( which may be a group itself )
Definition: comevt.h:1025
bool GetSnap()
get current snap setting ( true or false ).
Definition: tools.h:248
Interactive drawing of a Circle.
Definition: sttool.h:1392
void SetSegments(a2dVertexList *points)
Set the list of points ( the old list is NOT DELETED !!! )
Definition: polygon.cpp:830
Definition: bbox.h:26
virtual double GetVisibleWidth() const
get Width of visible part in world coordinates
Definition: drawer2d.cpp:423
const a2dError a2dError_canvasObjectRelease
a2dPolylineL * Add_a2dPolylineL(a2dVertexList *points, bool spline=false)
add specific object
Definition: drawing.cpp:6547
#define wxStaticCast(obj, className)
The wxWindows 2.4.2 wxStaticCast is buggy. It evaluates its argument twice.
Definition: gen.h:123
a2dVertexListPtr GetSegments()
Get the list of points ( this is not a copy! )
Definition: polygon.h:219
Interactive drawing of a polyline wire.
Definition: sttool.h:1930
const a2dError a2dError_CouldNotLoad
Drawing context abstraction.
Definition: drawer2d.h:177
void SetPending(bool pending)
next to base sets m_indexed false
Definition: layerinf.cpp:545
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7810
static const a2dCommandId COMID_PushTool_DrawRectangle
push this tool on the tools stack
Definition: sttool.h:814
void StopAllTools(bool abort=true)
all tools currently on the tool stack will be terminated and poped ( forced )
Definition: tools.cpp:123
a2dCanvasObject * GetShowObject() const
return pointer of then currently shown object on the drawer.
Definition: drawer.h:680
wxUint32 GetObjectCount()
get currently counted number of objects on this layer inside a document.
Definition: layerinf.h:194
void SetClearTarget(bool clearTarget)
clear the target layer before adding result.
Definition: booloper.h:71
a2dImage (will scale/rotate image when needed)
Definition: canimage.h:33
void SetPosXYSegment(int index, double x, double y, bool afterinversion=true)
modify point at index to x,y
Definition: polygon.cpp:728
bool PostDo(void)
Override this to perform a dependency action after command is done.
Definition: drawing.cpp:8334
virtual void DoSave(wxObject *parent, a2dIOHandlerXmlSerOut &out, a2dXmlSer_flag xmlparts, a2dObjectList *towrite)
Save settings.
Definition: gen.cpp:1657
void SetSpecificFlags(bool setOrClear, a2dCanvasObjectFlagsMask which)
set all bit flags in object that or true in mask to true or false
Definition: canobj.cpp:2645
void SetDlgOrEditModal(bool dlgOrEditModal)
set style dlg as modal
Definition: mastertool.h:237
double m_value
teh value of the double
Definition: drawing.h:374
double m_max
max required
Definition: drawing.h:378
#define EVT_PROPOBJECT_EDITPROPERTIES_EVENT(func)
static event table macro for NON a2dCanvasObject when editing properties for wxEvtHandler ...
Definition: comevt.h:685
a2dSLine
Definition: canprim.h:987
static const long Boolean_AND
Definition: booloper.h:46
static const a2dSignal sig_changedLayerInfo
when one layer its a2dLayerInfo has changed ( e.g. visible or order of rendering ) ...
Definition: layerinf.h:322
objects which fit the mask are given a new fill and stroke style
Definition: drawing.h:3480
objects which fit the mask are given a new fill and stroke style
Definition: drawing.h:3525
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8416
static const long ConvertToPolylines
convert shapes to polylines even if polygons
Definition: algos.h:938
double GetUppY() const
return ypp Number of user units per pixel in y
Definition: drawer2d.h:356
bool m_withUndo
if set, for commands which can undo, will be submitted like that.
Definition: drawing.h:1355
A2DGENERALDLLEXP a2dSmrtPtr< a2dGeneralGlobal > a2dGeneralGlobals
a global pointer to get to global instance of important classes.
Definition: comevt.cpp:1148
a2dSmrtPtr< a2dLayers > m_layersetup
setup for layers in this document
Definition: drawing.h:836
void SetTarget(wxUint16 target)
set target layer in operation
Definition: canglob.cpp:1088
void Translate(double x, double y)
relative translate the object to position x,y in world coordinates
Definition: canobj.h:569
void SetUpdatesPending(bool onoff)
Tells the document that an object has changed.
Definition: drawing.cpp:405
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:8986
GUI to choose a tool, and execute it via the command processor.
Definition: tooldlg.h:33
a2dNamedProperty * Clone(a2dObject::CloneOptions options, a2dRefMap *refs=NULL) const
Virtual copy constructor.
Definition: gen.cpp:1820
static const a2dCommandId Id
Print the current document or view.
Definition: drawing.h:2815
virtual bool Undo()
Undo one command or command group.
Definition: drawing.cpp:6023
de-select objects in a rectangle area
Definition: drawing.h:2489
void SetTopTool(a2dBaseTool *toolOnTop)
when all tools are poped, this tool will be pushed.
Definition: sttool.cpp:302
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9256
used to disconnect two pins
Definition: drawing.h:2439
for changing boolean values inside a rectangle of the current parent object.
Definition: drawing.h:1542
int Release(a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, const wxString &classname=wxT(""), const a2dPropertyId *id=NULL, const wxString &name=wxT(""), bool now=true)
release only objects with the given mask and classname and has property named propertyname and object...
Definition: objlist.cpp:306
static const a2dCommandId COMID_PushTool_DrawWirePolylineL
push this tool on the tools stack
Definition: sttool.h:1938
objects which fit the mask are copied to target and translated
Definition: drawing.h:3031
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7633
double GetLineSpacing() const
Get Space in world coordinates between two lines.
Definition: cantext.h:190
wxUint16 GetLayer() const
Returns the layer index where this object is drawn upon.
Definition: canobj.h:2368
virtual bool Undo()
Override this to undo a command.
Definition: comevt.cpp:465
static const a2dCommandId COMID_PushTool_DrawPolygonL_Splined
push this tool on the tools stack
Definition: sttool.h:1726
a2dText * Add_a2dText(const wxString &text, double x, double y, double angle, const a2dFont &font)
add specific object
Definition: drawing.cpp:6537
convert to simple polygons and polylines
Definition: drawing.h:2608
convert segments in polyline objects in group A to Arcs where possible
Definition: drawing.h:3704
void SetSpecificFlags(bool setOrClear, a2dCanvasObjectFlagsMask which, const wxString &classname=wxT(""), a2dCanvasObjectFlagsMask whichobjects=a2dCanvasOFlags::ALL)
set all bit flags in object that or true in mask to true or false
Definition: drawing.cpp:907
Hint to clone enough of the object to do proper dragging in graphics.
Definition: gen.h:1221
a2dDrawer2D * GetDrawer2D()
get the internal m_drawer2D that is used for rendering the document
Definition: drawer.h:1125
static const a2dCommandId COMID_PushTool_DrawPolylineLFast_Splined
push this tool on the tools stack
Definition: sttool2.h:512
This tool does do a hit test on objects to edit, and then starts editing the object.
Definition: edit.h:226
bool HasPins(bool realcheck=false)
are there a2dPin derived children
Definition: canobj.cpp:6414
void Prepend(a2dCanvasObject *obj)
prepend a a2dCanvasObject to the childobjects
Definition: canobj.cpp:6209
contains the layer properties for one layer,
Definition: layerinf.h:41
void SetRootObject(a2dCanvasObject *newRoot)
set new root object ( may not be NULL )
Definition: drawing.cpp:368
bool SaveToFile(const wxString &filename, a2dIOHandlerStrOut *handler=new a2dIOHandlerCVGOut()) const
save document to a file with the given name and given output writer type
Definition: drawing.cpp:688
Drag Selected canvasObjects.
Definition: sttool.h:2021
Input and output handler for the XmlSer format.
Definition: genxmlpars.h:862
bool CheckMask(a2dCanvasObjectFlagsMask mask) const
Compares all flags in object to the given mask and return true is the same.
Definition: canobj.cpp:2665
static const a2dCanvasObjectFlagsMask SELECTED
Definition: candefs.h:180
bool GetBin() const
general flag use at will.
Definition: canobj.h:2262
static const a2dCommandId COMID_PushTool_Measure
push this tool on the tools stack
Definition: sttoolmes.h:150
static const a2dCommandId COMID_PushTool_RecursiveEdit
push this tool on the tools stack
Definition: edit.h:233
bool Start(a2dObject *object, a2dCanvasObjectFuncW func)
object to start the algorithm
Definition: algos.cpp:148
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:10479
static const long copyLayers
copy layers to target
Definition: algos.h:920
bool RotateObject90LeftRight(bool Right)
rotate object of first tool on the stack, when appropriate.
Definition: sttool.cpp:953
virtual void DoWalker(wxObject *parent, a2dWalkerIOHandler &handler)
also walks m_layersetup and m_rootobject.
Definition: drawing.cpp:464
used to replace an object in a a2dCanvasDocument in the current parent
Definition: drawing.h:1512
convert shapes to polylines even if polygons
Definition: drawing.h:3707
double m_units_scale
scaling factor (how many &quot;m_units_measure&quot; is one unit)
Definition: drawing.h:866
static const a2dCommandId COMID_PushTool_Zoom
push this tool on the tools stack
Definition: sttool.h:856
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8641
a2dCanvasObject * m_parentObject
parent of found objects
Definition: drawing.h:1703
a2dCommandList m_subcommands
the list of subcommands
Definition: comevt.h:438
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8742
virtual void CreateCommandProcessor()
create a command processor and set it for the document.
Definition: drawing.cpp:380
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9214
const a2dFill * a2dNullFILL
global a2dFill stock object for defining NO filling
a2dCanvasObjectPtr m_target
target object
Definition: drawing.h:1701
Remove from property in a hierarchy of a canvas document.
Definition: algos.h:188
static const a2dCommandId COMID_PushTool_DragMulti
push this tool on the tools stack
Definition: sttool.h:2028
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:11198
Symbolic appearance for a2dCameleon.
Definition: cameleon.h:470
double GetPosY2(bool transform=true) const
Get (transformed) position of Y2.
Definition: canprim.cpp:3875
void SetScaleOnResize(bool val)
set if the drawing should be resclaed on a window resize
Definition: canvas.h:207
bool LoadLayers(a2dDocumentInputStream &stream, a2dLayers *layers)
load a layer definition from a CVG file.
Definition: xmlpars.cpp:93
void OnPushToolMenu(wxCommandEvent &event)
All menu&#39;s a2dMenuIdItem used can be intercepted here.
Definition: drawing.cpp:5213
void Init(a2dLayers *layersetup)
initialize with this layer setup
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7714
a2dEllipse * Add_a2dEllipse(double xc, double yc, double width, double height)
add specific object
Definition: drawing.cpp:6502
a2dCanvasObject flags as a structure
Definition: candefs.h:164
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8571
void SentBusyEvent(bool start, a2dCommand *command)
Definition: comevt.cpp:823
Contains a2dDrawing Class to hold a drawing.
static const a2dCommandId COMID_PushTool_DrawLine
push this tool on the tools stack
Definition: sttool.h:1443
virtual a2dObject * DoClone(CloneOptions options, a2dRefMap *refs) const
Clone this object and return a pointer to the new object.
Definition: drawing.cpp:7492
virtual void DoSave(wxObject *parent, a2dIOHandlerXmlSerOut &out, a2dXmlSer_flag xmlparts, a2dObjectList *towrite)
Save settings.
Definition: drawing.cpp:782
used to set the complete Segment list/array of polygons
Definition: drawing.h:2102
virtual bool Save(a2dDocumentOutputStream &stream, const wxObject *obj)=0
Override to write to the stream and store (part of) of the document contents in the stream...
a2dArrow is used for having line begin and ends on specific objects.
Definition: canprim.h:198
set a2dCanvasObjects flags in a hierarchy of a a2dCanvasDocument
Definition: algos.h:486
void WriteEndAttributes(bool close=false)
&quot;Closes&quot; the start tag after writing all attributes (writes the &quot;&gt;&quot; or &quot;/&gt;&quot; bracket).
Definition: genxmlpars.cpp:837
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9894
virtual bool Redo()
Definition: comevt.cpp:444
void SetNormalizeScale(double scale)
see GetNormalizeScale()
Definition: drawing.h:696
int IndexOf(a2dCanvasObject *obj) const
returns index of the given a2dCanvasObject in this childobjects
Definition: canobj.cpp:6320
This tool is for editing a single object.
Definition: edit.h:73
Each a2dCommand is given a command id at construction.
Definition: comevt.h:99
void Refresh()
full update of drawing
Definition: drawing.cpp:6064
void SetChord(bool chord)
draw jus a cord object
Definition: sttool.h:1663
static const a2dCommandId COMID_PushTool_Image
push this tool on the tools stack
Definition: sttool.h:957
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7325
virtual bool Submit(a2dCommand *command, bool storeIt=true)
next to the base class submit, it sets a2DocumentCommandProcessor for a2dCommand
Definition: comevt.cpp:842
int m_refcount
how many references to this object do exist
Definition: gen.h:1564
used to add object to a a2dCanvasDocument in the current parent
Definition: drawing.h:1403
void SetCheck(bool check)
general flag use at will.
Definition: gen.h:1339
a2dFill GetTextFill() const
get the current text fill
Definition: canglob.cpp:1032
Keep manhattan lines at end intact.
Definition: connectgen.h:168
a2dScaledEndLine
Definition: canprim.h:1277
defines common settinsg for a habitat for a set of a2dCameleons.
Definition: canglob.h:439
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9493
Drag and Copy Selected canvasObjects.
Definition: sttool.h:2148
void SetLastXyEntry(double x, double y)
set last mouse X position in world coordinates, as set by tools.
Definition: canglob.h:774
using a file stream for output, stream a a2dDocument or other wxObject into a stream.
Definition: gen.h:3751
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9144
unsigned int GetTextFlags() const
Get the text flags.
Definition: cantext.h:195
const a2dPrintWhat a2dPRINT_PreviewDrawingPart
preview print a2dDrawing Part
Definition: drawing.cpp:78
boolean operation on primitives in a a2dDocument.
A 2x3 affine matrix class for 2D transformations.
Definition: afmatrix.h:53
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:8973
Same as StraightSegment, unless there are dynamic pins on segment.
Definition: connectgen.h:165
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9582
bool GetCrossHair()
get enable crosshair cursor
Definition: drawer.h:818
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7408
double GetAttributeValueDouble(const wxString &attrib, double defaultv=0)
Returns the double value of an attribute.
Definition: genxmlpars.cpp:474
Master tool for objects graphics slecting and dragging nd zooming.
Definition: mastertool.h:390
const a2dStroke * a2dNullSTROKE
global a2dStroke stock object for NO stroking
double GetMaxX() const
get maximum X of the boundingbox
Definition: bbox.cpp:316
void SetRelativeStart(double x, double y)
set RelativeStart measurement X and Y position in world coordinates
Definition: canglob.h:785
bool Start(a2dCanvasObject *object)
Definition: algos.cpp:318
Interactive Selection of an Object.
Definition: sttool2.h:120
bool HasPopOut() const
is there structure to popout (see PushIn )
Definition: drawer.h:695
void SetLineBegin(a2dCanvasObject *begin)
defines line begin object for line and polyline drawing tools
Definition: sttool.cpp:4685
double GetPosX1(bool transform=true) const
Get (transformed) position of X1.
Definition: canprim.cpp:3845
bool ShowDlgStyle(bool onOff)
show style dialog or not, return true of changed from previous state
Definition: drawing.cpp:6095
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9435
if set, set in the clone the PROPID_editcopy property to the original object
Definition: gen.h:1215
void OnOK(wxCommandEvent &event)
implementation only
Definition: drawing.cpp:11344
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:11267
double GetPosY() const
get y position from affine matrix
Definition: canobj.h:530
Dialog for displaying/editing layers and properties of layers.
Definition: layerdlg.h:30
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7231
objects which fit the mask are offset corrected
Definition: drawing.h:3268
convert segments in polyline objects in group A to Arcs where possible
Definition: drawing.h:2610
virtual void DoLoad(wxObject *parent, a2dIOHandlerXmlSerIn &parser, a2dXmlSer_flag xmlparts)
Load settings.
Definition: gen.cpp:1699
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9631
bool m_rewire
objects connected with pins rewiring is optional
Definition: drawing.h:1694
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8675
bool LoadFromFile(const wxString &filename, a2dIOHandlerStrIn *handler=new a2dIOHandlerCVGIn())
load document from a file with the given filename and given parser type
Definition: drawing.cpp:650
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8720
for choosing a a2dCanvasObject from a list.
static const a2dCommandId COMID_PushTool_FastCopyMulti
push this tool on the tools stack
Definition: sttool2.h:281
void AddPropertyId(a2dPropertyId *id)
add a a2dPropertyId to the list
Definition: algos.cpp:312
static const a2dCommandId COMID_PushTool_Drag
push this tool on the tools stack
Definition: sttool.h:1019
virtual void ClearAllPinConnections(bool withundo=true)
Remove all pin connections by issuing a2dCommand_DisConnectPins commands.
Definition: canobj.cpp:6408
void OnUndoEvent(a2dCommandProcessorEvent &event)
track modification of document
Definition: drawing.cpp:125
virtual double GetContourWidth() const
get the Contour width of the shape
Definition: canobj.h:1411
bool Select(double x1, double y1, double x2, double y2)
select this area
Definition: drawing.cpp:6202
Interactive drawing of a EllipticArc.
Definition: sttool.h:1569
Interactive copy an object.
Definition: sttool.h:1253
while iterating a a2dCanvasDocument, this holds the context.
Definition: canobj.h:3212
bool PostDo()
Override this to perform a dependency action after command is done.
Definition: drawing.cpp:7957
a2dCanvasObject * m_currentobject
last added object
Definition: drawing.h:1347
void SetToObjectClone(a2dObject *obj, a2dPropertyId::SetFlags setflags=a2dPropertyId::set_none) const
Set this property to an object and clone it if neccessary.
Definition: gen.h:1855
double m_normalize_scale
normalization factor to scale normalized objects.
Definition: drawing.h:869
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7305
virtual wxString GetName() const
Definition: comevt.cpp:138
void SetLineEnd(a2dCanvasObject *end)
defines line end object for line and polyline drawing tools
Definition: sttool.cpp:4690
int Move(double x, double y, a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, long target=-1, bool check=false)
move only in this group object with the same mask
Definition: objlist.cpp:438
virtual bool CanSave(const wxObject *obj=NULL)=0
Should return true if the handler can write this document to a stream.
a2dWalker based algorithms
a2dCanvasObject * AddCurrent(a2dCanvasObject *objectToAdd, bool withUndo=false, a2dPropertyIdList *setStyles=NULL, a2dCanvasObject *parentObject=NULL)
add the current canvas object to parent as child
Definition: drawing.cpp:6290
convert to simple polygons and polylines
Definition: drawing.h:3702
static const a2dCommandId COMID_PushTool_DrawEllipticArc_Chord
push this tool on the tools stack
Definition: sttool.h:1580
All updates of these modes force an update (e.g. update non-pending valid bounding boxes) ...
Definition: canobj.h:1107
a2dLineSegment * AddPoint(double x, double y, a2dLineSegmentPtr seg=NULL, bool afterinversion=true)
add point/segment after a segment.
Definition: polygon.cpp:356
virtual void DependentCommands(a2dCanvasObject *parent, a2dCommand *command)
call this when a a2dCommands should result in extra commands, to become part of a parent a2dCommandGr...
Definition: canobj.cpp:4691
virtual bool DoPostCommand(a2dCommand &cmd)
Called after doing the actual command.
Definition: comevt.cpp:778
objects which fit the mask are grouped into a new object
Definition: cameleon.h:1000
a2dArrow * Add_a2dArrow(double xt, double yt, double l1, double l2, double b, bool spline=false)
add specific object
Definition: drawing.cpp:6487
a2dlist< a2dDumbPtr< a2dPin > > & GetConnectedPins()
Return list fo connected pins.
Definition: canpin.h:462
a2dCommandProcessor * GetCommandProcessor() const
Returns a pointer to the command processor associated with this document.
Definition: drawing.h:549
bool ReleaseChildObjects(a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL)
removes and release only from the childobjects the objects with the given mask
Definition: canobj.cpp:6296
a2dPolygonL * Add_a2dPolygonL(a2dVertexList *points, bool spline=false)
add specific object
Definition: drawing.cpp:6542
special a2dCanvasObject to make a multi view hierachy.
virtual bool Do()
Override this to perform a command.
Definition: drawing.cpp:11079
const a2dFill & GetFill() const
get the current fill
Definition: canglob.h:804
Interactive drawing of a Rectangle.
Definition: sttool2.h:317
a2dConnectionGenerator * GetConnectionGenerator() const
Get class for generating new connection objects between object and pins.
Definition: canglob.h:601
static const a2dCommandId COMID_PushTool_DrawEllipticArc
push this tool on the tools stack
Definition: sttool.h:1576
virtual bool Submit(a2dCommand *command, bool storeIt=true)
Definition: drawing.cpp:5966
bool Modifies()
Definition: comevt.h:214
for changing only the matrix of objects for which a certain mask was set
Definition: drawing.h:1857
void SetStroke(const wxColour &strokecolor, double width=0, a2dStrokeStyle style=a2dSTROKE_SOLID)
Set a stroke for the object which will be used instead of the layer stroke.
Definition: canobj.cpp:2924
Reuse last straight segment at begin or end of line, dynamic pins move with segment.
Definition: connectgen.h:162
a2dSLine * Add_a2dSLine(double x1, double y1, double x2, double y2)
add specific object
Definition: drawing.cpp:6517
int TakeOverFrom(a2dCanvasObjectList *total, const wxString &type=wxT(""), a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, const a2dPropertyId *id=NULL)
Move objects fitting the given filter from the total list to this list.
Definition: objlist.cpp:724
static const long Boolean_B_SUB_A
Definition: booloper.h:49
static const long Boolean_A_SUB_B
Definition: booloper.h:48
used to release object from a a2dCanvasDocument in the current parent
Definition: drawing.h:1437
static const a2dCanvasObjectFlagsMask VISIBLE
Definition: candefs.h:186
virtual void Load(wxObject *parent, a2dIOHandlerXmlSerIn &parser)
load object from CVG file
Definition: gen.cpp:1396
wxString GetAttributeValue(const wxString &attrib, const wxString &defaultv=wxT(""))
Returns the value of an attribute.
Definition: genxmlpars.cpp:450
Interactive drawing of a polygon.
Definition: sttool.h:1715
bool GetSpline()
certain drawing tools like polygon drawing use this setting
Definition: sttool.h:1750
virtual void Load(wxObject *parent, a2dIOHandlerXmlSerIn &parser)
load object from CVG file
Definition: drawing.cpp:730
a2dRestrictionEngine * GetRestrictionEngine()
Get restriction engine (grid snapping)
Definition: canglob.cpp:934
static const a2dCommandId COMID_PushTool_DrawPolygonLFast
push this tool on the tools stack
Definition: sttool2.h:416
const a2dError a2dError_NoView
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9823
void SetText(const wxString &text)
set the text for the object &#39; &#39; in string means new line
Definition: cantext.h:165
static const long Boolean_CORRECTION
Definition: booloper.h:50
set pending flag in a drawing
Definition: algos.h:517
double GetUnitsScale()
this is the number that defines the physical dimension in meters / inch/ etc.
Definition: drawing.h:676
create new group at x,y
Definition: drawing.h:2708
virtual a2dCommand * CloneAndBind(a2dObject *object)
Copy and instantiate the command.
Definition: drawing.cpp:7387
a2dObject * m_parent
in case of a single parent, this can be set.
Definition: drawing.h:846
bool Move_Point(int index, double x, double y)
add a point to the current a2dCanvasObject
Definition: drawing.cpp:6561
property to hold a a2dStroke type variable to be associated with a a2dObject
Definition: styleprop.h:98
a2dLayers * GetLayerSetup()
Get the central layersettings for the canvas library.
Definition: canglob.h:478
void SetSpline(bool spline)
certain drawing tools like polygon drawing use this setting
Definition: sttool2.cpp:1858
a2dEndsLine * Add_a2dEndsLine(double x1, double y1, double x2, double y2)
add specific object
Definition: drawing.cpp:6522
bool GetRelease() const
get release flag
Definition: gen.h:1350
editing tool for a2dCanvasObject&#39;s
Interactive drawing a text object.
Definition: sttool.h:2191
a2dCanvasCommandProcessor * GetCanvasCommandProcessor()
get a pointer to the command processor
Definition: drawing.cpp:375
void SetTextFlags(unsigned int textflags)
Set the text flags.
Definition: cantext.h:193
dialog for choosing fonts
Interactive drawing of a EllipticArc.
Definition: sttool.h:1436
bool ZoomRealSize(double scaleFromRealSize, bool selected)
Zoom to a real size or a factor of it.
Definition: drawing.cpp:6139
void WriteEndDocument()
Checks if all open tags are closed.
Definition: genxmlpars.cpp:730
a2dEndsLine with begin and/or end object.
Definition: canprim.h:1174
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:11435
static const a2dCommandId COMID_PushTool_DrawText
push this tool on the tools stack
Definition: sttool.h:2198
bool Start(a2dCanvasObject *object)
start at this object
Definition: algos.cpp:1249
void SetCurrentToLastActive()
Set the current command to the last command in the active group.
Definition: comevt.cpp:750
double GetMaxY() const
get maximum Y of the boundingbox
Definition: bbox.cpp:322
double GetWidth() const
returns width of the boundingbox
Definition: bbox.cpp:328
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8831
a2dCanvasObject * SetShowObject(const wxString &name)
set object available in the a2dDrawing to be shown on the drawer
Definition: drawer.cpp:2947
void SetDlgOrEdit(bool dlgOrEdit)
set dlg at Double Left Down if dlgOrEdit == true
Definition: mastertool.h:231
base for tools that draw and are stack based.
Definition: sttool2.h:27
int GetCaret() const
Get position of caret (-1 means off)
Definition: cantext.h:257
void SetStroke(const a2dStroke &stroke)
set stroke if used inside a tool
Definition: tools.cpp:817
void Require(const XMLeventType &type, wxString name)
Forces a special tag.
Definition: genxmlpars.cpp:390
a2dCanvasObjectList * GetAsRectangles(const wxColour &col1, const wxColour &col2, bool transform)
return a list of a2dRect, for each pixel which has a colour in the box formed by col1 and col2 ...
Definition: canimage.cpp:154
a2dCanvasObjectList * CloneChecked(a2dObject::CloneOptions options=a2dObject::clone_deep, a2dlist< long > *objectsIndex=NULL) const
clone to new list only objects with check flag set
Definition: objlist.cpp:238
a2dBaseTool * GetFirstTool() const
get currently used eventhandler (always the first in the list)
Definition: tools.cpp:91
a2dBoundingBox GetAlignmentBbox()
calls GetAlignmentPoints()
Definition: canobj.cpp:4473
bool Add_Point(double x, double y)
add a point to the current a2dCanvasObject
Definition: drawing.cpp:6552
void TriggerChangedTime()
make the changed time Now
Definition: drawing.h:787
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:10033
wxString GetTagName()
Returns name of the current XML tag.
Definition: genxmlpars.cpp:565
void SetTemplateObject(a2dSLine *templateobject)
get template for line object
Definition: sttool.h:1487
static const a2dCommandId COMID_PushTool_DrawPolygonLFast_Splined
push this tool on the tools stack
Definition: sttool2.h:420
select all objects
Definition: drawing.h:2486
a2dDrawing(const wxString &name=wxT(""), a2dHabitat *habitat=NULL)
Constructor.
Definition: drawing.cpp:163
select objects in a rectangle area
Definition: drawing.h:2488
bool m_ignorePendingObjects
if set ignore all setting for pendingobjects
Definition: drawing.h:852
a2dNamedPropertyPtr m_property
property set to the object.
Definition: comevt.h:610
void SetPosXY(double x, double y, bool restrict=false)
set position to x,y
Definition: canobj.cpp:1624
void SetTarget(wxUint16 targetlayer)
set the layer where the result will be placed
Definition: algos.cpp:1243
void SetFont(const a2dFont &font)
used for to set the font for non Text objects
Definition: canglob.cpp:971
bool Start(a2dCanvasObject *object, bool setTo)
start removing properties from the object given, and down.
Definition: algos.cpp:784
property to hold a a2dCanvasObject pointer type variable to be associated with a canvasobject ...
Definition: canprop.h:202
bool m_AppendOrPrepend
add in front of parent childs or add end
Definition: drawing.h:1350
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8862
virtual void ReportErrorF(const a2dError &error, const wxChar *Format,...)
concatenate to the the error report the given error.
Definition: comevt.cpp:1312
Same as StraightEndSegment, unless there are dynamic pins on segment.
Definition: connectgen.h:164
#define EVT_ENDBUSY(func)
event sent from a2DocumentCommandProcessor when a command submit/execute is ending ...
Definition: comevt.h:808
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9677
static const a2dCommandId COMID_PushTool_DrawPolylineLFast
push this tool on the tools stack
Definition: sttool2.h:508
static const a2dCommandId COMID_PushTool_DrawVPath
push this tool on the tools stack
Definition: sttool.h:2433
layer group A and B commands
Definition: drawing.h:3961
convert to simple polygons and polylines
Definition: drawing.h:3701
static const a2dCommandId Id
layer group A and B command
Definition: drawing.h:3969
Master tool for objects graphics slecting and dragging.
Interactive drawing of a polyline.
Definition: sttool2.h:501
a2dObject * GetParent() const
Definition: drawing.h:466
bool m_saveLayers
save layers or not
Definition: drawing.h:888
Event sent to a2dCommandProcessor.
Definition: comevt.h:701
objects which fit the mask are given a new font and other text properties
Definition: drawing.h:3563
dialog for choosing a tool
holds a list of layers numbers
Definition: canglob.h:60
void SetWrongLoad(bool wrongLoad)
Set the flag if text couldn&#39;t be loadad from file.
Definition: cantext.h:182
This tool does do a hit test on objects to edit, and then starts editing the object.
Definition: edit.h:286
if set, clone members (e.g. line end styles), otherwise ref-copy them
Definition: gen.h:1203
a2dTextFlags
Definition: cantext.h:96
const a2dError a2dError_NotSpecified
see a2dComEvent
Definition: gen.h:371
static const a2dCommandId COMID_PushTool_DrawArc_Chord
push this tool on the tools stack
Definition: sttool.h:1652
virtual bool Undo()
Override this to undo a command.
Definition: drawing.cpp:11065
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9025
static const a2dCommandId COMID_PushTool_FastSelect
push this tool on the tools stack
Definition: sttool2.h:127
a2dCanvasObject * Find(a2dCanvasObject *obj) const
return the object if it is part of the list
Definition: objlist.cpp:553
virtual a2dCommand * CloneAndBind(a2dObject *object)
Copy and instantiate the command.
Definition: drawing.cpp:7708
Convert straight segments to manhattan lines and keep manhattan lines at end intact.
Definition: connectgen.h:169
void SetGroupA(const a2dLayerGroup &groupA)
objects on layers in group A will be used as first operand
Definition: algos.h:861
static const long Boolean_OR
Definition: booloper.h:45
a2dRect
Definition: canprim.h:440
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9663
base classes for tools and controller on top of the tools.
A list used for enumerating fonts.
Interactive drawing of a Circle.
Definition: sttool2.h:362
The a2dBoundingBox class stores one a2dBoundingBox of a a2dCanvasObject.
Definition: bbox.h:39
de-select all objects
Definition: drawing.h:2487
bool Invert(void)
Invert matrix.
Definition: afmatrix.cpp:197
virtual bool Do()
Override this to perform a command.
Definition: drawing.cpp:11027
static const a2dCommandId COMID_PushTool_DragOrg
push this tool on the tools stack
Definition: sttool.h:1105
void SetSelectedOnlyB(bool selectedOnlyB)
set selectedOnlyB in group operations
Definition: algos.h:876
void SetDetectCircle(bool detectCircle)
Definition: algos.h:974
virtual bool MayConnectTo(a2dPin *connectto)
Is given pin allowed to connect to this pin.
Definition: canpin.cpp:997
void SetLayerSetup(a2dLayers *layersetup)
set the layersettings for the canvas.
Definition: drawing.cpp:280
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:11465
void Modify(bool increment)
set the drawing as modified or not
Definition: drawing.cpp:146
virtual a2dCanvasObject * PushInto(a2dCanvasObject *parent)
when wanting to traverse hierarchy what level is down here.
Definition: canobj.cpp:2577
void OnMenu(wxCommandEvent &event)
All menu&#39;s a2dMenuIdItem used can be intercepted here.
Definition: drawing.cpp:3205
a2dCanvasObjectList * Clone(a2dObject::CloneOptions options) const
Clone everything ( Clones objects also) in a new created list.
Definition: objlist.cpp:173
bool Undo(void)
Override this to undo a command.
Definition: drawing.cpp:9232
bool Do()
Override this to perform a command.
Definition: drawing.cpp:11454
Master tool for objects graphics slecting and dragging.
double GetMinY() const
get minimum Y of the boundingbox
Definition: bbox.cpp:310
a2dDrawing * GetDrawing() const
get drawing via top object
Definition: drawer.cpp:726
void OnRedoEvent(a2dCommandProcessorEvent &event)
track modification of document
Definition: drawing.cpp:119
wxString GetAsString()
Get all search paths as one string.
Definition: gen.cpp:4470
static a2dPropertyIdBoundingBox * PROPID_BoundingBox
used to store state ( redraw area) of the object as it was before a change
Definition: canobj.h:2684
Classes for generating connection between pins in canvas objects.
bool SetDrawerStyle(const a2dFill &brush, const a2dStroke &stroke, a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL)
set only in this list fill and stroke of objects with the given mask
Definition: objlist.cpp:607
void DuplicateConnectedToOtherPins(bool undo=false)
all connections to this pins, will become available in those connected pins too.
Definition: canpin.cpp:836
void SetFilling(bool OnOff)
Definition: stylebase.cpp:5060
a2dArc centered at x,y
Definition: canprim.h:823
the a2dDrawingPart is a a2dView specially designed for displaying parts of a a2dDrawing. It uses a a2dDrawer2D to actually redraw things from the document, by giving that a2dDrawer2D as drawing context to the document, and telling the document to redraw a certain rectangular area. At that last is what this class is for. It optimizes the areas to be redrawn after object in the document were changed. To do that it combines redraw areas to a minimal set of redrawing areas. All the administration for this and the way things will be redrawn is from this view.
a2dCanvasObjectFlagsMask m_targetMask
target mask for m_target
Definition: drawing.h:1688
bool AddPendingUpdatesOldNew()
adds current and future boundingbox of the objects with pending flag set, to the pendinglist of all a...
Definition: drawing.cpp:525
static const a2dCommandId COMID_PushTool_DrawCircle
push this tool on the tools stack
Definition: sttool.h:1399
virtual bool PopTool(a2dSmrtPtr< a2dBaseTool > &poped, bool force=true)
specialize to keep m_topTool tool active
Definition: sttool.cpp:461
void SetCaret(int position)
set position of caret (-1 means off)
Definition: cantext.h:254
Input handler for the CVG format.
Definition: xmlpars.h:59
virtual void Store(a2dCommand *command)
just store the command without executing it
Definition: comevt.cpp:895
void SetLinkHoles(bool doLinkHoles)
Definition: booloper.h:85
void SetMakePending(bool makePending)
if set when a property is removed make the canvas object pending.
Definition: algos.h:214
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7453
basetype GetPropertyValue(const a2dObject *obj) const
Get the property value in obj.
Definition: id.inl:325
bool GetSelected2() const
is the object selected2 flag set
Definition: canobj.h:1629
move group A objects
Definition: drawing.h:2604
bool Do()
Override this to perform a command.
Definition: drawing.cpp:11249
copy group A objects
Definition: drawing.h:2605
a2dCanvasGlobal * a2dCanvasGlobals
global a2dCanvasGlobal to have easy access to global settings
Definition: canglob.cpp:1234
virtual bool Redo()
Redo one command or command group.
Definition: drawing.cpp:6029
objects which fit the mask are grouped into a new object
Definition: drawing.h:3170
virtual void Save(wxObject *parent, a2dIOHandlerXmlSerOut &out, a2dObjectList *towrite)
write all needed to an XML type of file called the CVG format
Definition: gen.cpp:1343
#define EVT_UNDO(func)
event sent from a2DocumentCommandProcessor when a command is undone
Definition: comevt.h:797
a2dCanvasObject for a Vector Path
Definition: vpath.h:55
walk a document tree and perform boolean opration on primitives.
Definition: booloper.h:39
size_t GetNumberOfSegments()
get the number of points in the pointlist
Definition: polygon.h:229
void SetCrossHair(bool onoff)
set enable crosshair cursor
Definition: drawer.cpp:1091
Reroute using Lee routing.
Definition: connectgen.h:163
The a2dToolContr is the base class for Tool controller classes.
Definition: tools.h:87
algorithm to delete a2dCanvasObjects on layers or to move, copy to other layers
Definition: algos.h:911
a2dHandle * Add_a2dHandle(double xc, double yc, int w, int h, double angle=0, int radius=0)
add specific object
Definition: drawing.cpp:6477
set the a2dCanvasObject&#39;s a2dDrawing root recursive
Definition: algos.h:723
const a2dPrintWhat a2dPRINT_PrintDrawingPart
print a2dDrawing Part
Definition: drawing.cpp:77
virtual a2dCanvasObjectList * GetAsPolygons(bool transform=true) const
convert to a list of polygons.
Definition: canobj.cpp:1510
int GetAlignment() const
Get the position of the anchor point w.r.t the text.
Definition: cantext.h:304
This template class is for property ids with a known data type.
Definition: id.h:477
double GetPosY1(bool transform=true) const
Get (transformed) position of Y1.
Definition: canprim.cpp:3855
a2dCanvasObjectList * ConvertToVpath(a2dCanvasObject *canvasobject, bool transform)
Definition: drawing.cpp:6266
Drag and Copy Selected canvasObjects.
Definition: sttool2.h:274
static const long ConvertPolygonToArcs
convert segments in polygon/polyline with width objects in group A to Arcs where possible ...
Definition: algos.h:930
void SetSnap(bool snap)
enable all snapping features or not
Definition: restrict.h:189
void SetWireMode(bool drawWire)
set wire first mode on or off
virtual void RemoveSegment(double &x, double &y, a2dLineSegmentPtr seg=NULL, bool transformed=true)
removes point at index
Definition: polygon.cpp:531
virtual a2dCanvasObjectList * GetAsPolylines(bool transform=true) const
convert to a list of polylines.
Definition: canobj.cpp:1545
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:7209
static const a2dCanvasObjectFlagsMask ALL
Definition: candefs.h:220
wxUint32 GetDocumentDrawStyle()
get drawstyles used for drawing the document
Definition: drawer.h:1141
const a2dFontInfo & GetFontInfo() const
Get fontinfo of the font.
Definition: stylebase.cpp:2901
command on selected objects
Definition: drawing.h:2589
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7393
void GetPosXYSegment(int index, double &x, double &y, bool transform=true) const
get point x and y at index
Definition: polygon.cpp:605
bool DeSelect(double x1, double y1, double x2, double y2)
de select this area
Definition: drawing.cpp:6214
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7014
Interactive drawing of a polyline.
Definition: sttool.h:1806
objects which fit the mask are moved to target and translated
Definition: drawing.h:3078
Interactive drawing of a polygon.
Definition: sttool.h:2426
void SetGridLines(bool gridlines)
Get grid setting for line drawing.
Definition: drawer.h:912
a2dCanvasObject * Find(const wxString &objectname, const wxString &classname=wxT(""), a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, const a2dPropertyId *propid=NULL, const wxString &valueAsString=wxT(""), wxUint32 id=0) const
return the object which fits the filter.
Definition: canobj.cpp:4505
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:9168
int CollectObjects(a2dCanvasObjectList *total, const wxString &classname=wxT(""), a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, const a2dPropertyId *id=0, const a2dBoundingBox &bbox=wxNonValidBbox) const
Copy objects with the right conditions to the total list.
Definition: canobj.cpp:4495
void Insert(size_t before, a2dCanvasObject *obj, bool ignoreReleased=true)
insert a a2dCanvasObject to the childobjects
Definition: canobj.cpp:6246
const a2dError a2dError_NoController
void SetLineSpacing(double linespace)
Set Space in world coordinates between two lines.
Definition: cantext.h:187
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7444
detection of small objects.
Definition: algos.h:1005
void SetPosXY2(double x, double y, bool afterinversion=true)
sets position of second point
Definition: canprim.cpp:3917
void Append(a2dCanvasObject *obj)
append a a2dCanvasObject to the childobjects
Definition: canobj.cpp:6224
virtual bool Do()
Override this to perform a command.
Definition: comevt.cpp:421
void SetAvailable(bool status)
set layer available (will be rendered)
Definition: layerinf.h:111
a2dCanvasObject * GetParent() const
get parent object of the pin
Definition: canpin.h:295
set all layers visible or not
Definition: drawing.h:3647
objects which fit the mask are given an Url property
Definition: drawing.h:3433
virtual void SetLayer(wxUint16 layer)
set layer index where this object is drawn upon.
Definition: canobj.cpp:5920
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:8872
used to change text and caret of canvas text objects in a a2dCanvasDocument
Definition: drawing.h:2167
property to hold a a2dFill type variable to be associated with a a2dObject
Definition: styleprop.h:44
wxString GetText() const
get the text of the object &#39; &#39; in string means new line
Definition: cantext.h:168
bool Do()
Override this to perform a command.
Definition: drawing.cpp:8487
Interactive Selection of an Object.
Definition: sttool.h:898
stack based tools controller and tools for drawing and editing.
bool GetWireMode() const
what is the current mode.
objects which fit the mask are converted to polygons or vector paths
Definition: drawing.h:3691
virtual bool IsConnect() const
return true, if this object is used to connect other object&#39;s using rubberband like structures...
Definition: canobj.h:1831
void SetRecursionDepth(int depth=INT_MAX)
how far we go into nested a2dObject&#39;s
Definition: algos.h:291
list of a2dObject&#39;s
Definition: gen.h:3157
int BringToBack(a2dCanvasObjectFlagsMask mask=a2dCanvasOFlags::ALL, bool check=false)
move only in this group objects with the given mask to the front of the list drawn first ...
Definition: objlist.cpp:494
virtual bool LinkReferences(bool ignoreNonResolved=false)
link references to their destination
Definition: gen.cpp:4862
static const a2dCommandId COMID_PushTool_ObjectEdit
push this tool on the tools stack
Definition: edit.h:80
static const long Boolean_Polygon2Surface
Definition: booloper.h:53
Interactive drawing of a Ellipse.
Definition: sttool.h:1523
virtual a2dCommand * CloneAndBind(a2dObject *object)
Copy and instantiate the command.
Definition: drawing.cpp:11184
a2dImage * Add_a2dImage(const wxImage &image, double xc, double yc, double w, double h)
add specific object
Definition: drawing.cpp:6527
const a2dPrintWhat a2dPRINT_PrintDrawing
print a2dDrawing
Definition: drawing.cpp:75
a2dText * GetTextTemplateObject()
set template for line object
Definition: canglob.h:920
~a2dCommandMasked(void)
destructor
Definition: drawing.cpp:7488
for changing boolean select flag values inside canvas objects
Definition: drawing.h:1715
wxString GetName() const
get name
Definition: comevt.h:113
bool Start(a2dObject *object)
start removing properties from the object given, and down.
Definition: algos.h:634
const a2dFont & GetFontData() const
Returns the font.
Definition: fontdlg.cpp:356
virtual void SetActive(bool active=true)
set the tool active or inactive.
Definition: sttool.cpp:1099
create new group at x,y
Definition: drawing.h:2808
bool Undo()
Override this to undo a command.
Definition: drawing.cpp:8341
static const a2dCommandId COMID_PushTool_Select
push this tool on the tools stack
Definition: sttool.h:905
void SetFormatVersion(wxString formatVersion)
set version of library or document being parsed for
Definition: genxmlpars.h:844
CloneOptions
options for cloning
Definition: gen.h:1200
virtual void SetMappingWidthHeight(double vx1, double vy1, double width, double height)
Give the virtual size to be displayed, the mapping matrix will be calculated.
Definition: drawer2d.cpp:333
convert shapes to seperate lines and arcs
Definition: drawing.h:3706
convert shapes to vector paths
Definition: drawing.h:3705
void Init(a2dLayers *layersetup)
initialize with this layer setup
static const long Boolean_EXOR
Definition: booloper.h:47
convert shapes to seperate lines and arcs
Definition: drawing.h:2612
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7847
a2dFill & GetBackgroundFill()
get current background fill for the canvas
Definition: drawer.h:875
a2dBoundingBox & GetBbox()
get boundingbox in world coordinates exclusive stroke width relative to its parent ...
Definition: canobj.cpp:3175
Contain one drawing as hierarchical tree of a2dCanvasObject&#39;s.
Definition: drawing.h:434
For exceptions thrown from commands.
Definition: comevt.h:294
used to change a property on objects
Definition: comevt.h:460
a2dCanvasObject * Add_a2dCanvasObject(double x=0, double y=0)
add specific object
Definition: drawing.cpp:6455
objects which fit the mask are grouped into a new object
Definition: cameleon.h:1044
static const long RemoveRedundant
remove redundant segment
Definition: algos.h:940
wxDoubleNumberEntryDialog: a dialog with spin control, [ok] and [cancel] buttons
Definition: drawing.h:351
void SetMappingShowAll()
use the boundingbox of the ShowObject to set the mapping such that it will be displayed completely on...
Definition: drawer.cpp:3149
void SetFill(const a2dFill &fill)
Set a fill for the object which will be used instead of the layer fill.
Definition: canobj.cpp:2874
wxInt64 GetUniqueSerializationId() const
return a unique id for this object
Definition: gen.cpp:1450
a2dEllipticArc centered at x,y
Definition: canprim.h:697
bool Do(void)
Override this to perform a command.
Definition: drawing.cpp:8923
&lt; generate a report of small objects
Definition: drawing.h:2615
bool Do()
Override this to perform a command.
Definition: drawing.cpp:7507
static const long Boolean_SMOOTHEN
Definition: booloper.h:51
general canvas module declarations and classes
void WriteStartElement(const wxString &name, bool newLine=true)
Writes start tag which has no attributes.
Definition: genxmlpars.cpp:738
virtual bool PopTool(a2dBaseToolPtr &poped, bool force=true)
remove first tool on the tool stack
Definition: tools.cpp:364
static const a2dCommandId sm_SetFillStyleCommand
non info.
Definition: drawing.h:2210
a base command for the a2dCommandProcessor
Definition: comevt.h:140
#define a2dREFOBJECTPTR_KEEPALIVE
Definition: gen.h:1631
drawing.cpp Source File -- Sun Oct 12 2014 17:04:19 -- Sun Oct 12 2014 -- 1.8.5 -- wxArt2D -- . -- Main Page Reference Documentation