# include  <QApplication> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "tools/cabana/commands.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// EditMsgCommand
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EditMsgCommand : : EditMsgCommand ( const  MessageId  & id ,  const  QString  & name ,  int  size ,  QUndoCommand  * parent ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    :  id ( id ) ,  new_name ( name ) ,  new_size ( size ) ,  QUndoCommand ( parent )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( auto  msg  =  dbc ( ) - > msg ( id ) )  { 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    old_name  =  msg - > name ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    old_size  =  msg - > size ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    setText ( QObject : : tr ( " edit message %1:%2 " ) . arg ( name ) . arg ( id . address ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    setText ( QObject : : tr ( " new message %1:%2 " ) . arg ( name ) . arg ( id . address ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  EditMsgCommand : : undo ( )  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( old_name . isEmpty ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dbc ( ) - > removeMsg ( id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  else 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    dbc ( ) - > updateMsg ( id ,  old_name ,  old_size ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  EditMsgCommand : : redo ( )  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  dbc ( ) - > updateMsg ( id ,  new_name ,  new_size ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// RemoveMsgCommand
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								RemoveMsgCommand : : RemoveMsgCommand ( const  MessageId  & id ,  QUndoCommand  * parent )  :  id ( id ) ,  QUndoCommand ( parent )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( auto  msg  =  dbc ( ) - > msg ( id ) )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    message  =  * msg ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    setText ( QObject : : tr ( " remove message %1:%2 " ) . arg ( message . name ) . arg ( id . address ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  RemoveMsgCommand : : undo ( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! message . name . isEmpty ( ) )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dbc ( ) - > updateMsg ( id ,  message . name ,  message . size ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  ( auto  s  :  message . getSignals ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      dbc ( ) - > addSignal ( id ,  * s ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  RemoveMsgCommand : : redo ( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! message . name . isEmpty ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dbc ( ) - > removeMsg ( id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AddSigCommand
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								AddSigCommand : : AddSigCommand ( const  MessageId  & id ,  const  cabana : : Signal  & sig ,  QUndoCommand  * parent ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    :  id ( id ) ,  signal ( sig ) ,  QUndoCommand ( parent )  { 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  setText ( QObject : : tr ( " add signal %1 to %2:%3 " ) . arg ( sig . name ) . arg ( msgName ( id ) ) . arg ( id . address ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  AddSigCommand : : undo ( )  {  dbc ( ) - > removeSignal ( id ,  signal . name ) ;  } 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  AddSigCommand : : redo ( )  {  dbc ( ) - > addSignal ( id ,  signal ) ;  } 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// RemoveSigCommand
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								RemoveSigCommand : : RemoveSigCommand ( const  MessageId  & id ,  const  cabana : : Signal  * sig ,  QUndoCommand  * parent ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    :  id ( id ) ,  signal ( * sig ) ,  QUndoCommand ( parent )  { 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  setText ( QObject : : tr ( " remove signal %1 from %2:%3 " ) . arg ( signal . name ) . arg ( msgName ( id ) ) . arg ( id . address ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  RemoveSigCommand : : undo ( )  {  dbc ( ) - > addSignal ( id ,  signal ) ;  } 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  RemoveSigCommand : : redo ( )  {  dbc ( ) - > removeSignal ( id ,  signal . name ) ;  } 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// EditSignalCommand
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								EditSignalCommand : : EditSignalCommand ( const  MessageId  & id ,  const  cabana : : Signal  * sig ,  const  cabana : : Signal  & new_sig ,  QUndoCommand  * parent ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    :  id ( id ) ,  old_signal ( * sig ) ,  new_signal ( new_sig ) ,  QUndoCommand ( parent )  { 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  setText ( QObject : : tr ( " edit signal %1 in %2:%3 " ) . arg ( old_signal . name ) . arg ( msgName ( id ) ) . arg ( id . address ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  EditSignalCommand : : undo ( )  {  dbc ( ) - > updateSignal ( id ,  new_signal . name ,  old_signal ) ;  } 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  EditSignalCommand : : redo ( )  {  dbc ( ) - > updateSignal ( id ,  old_signal . name ,  new_signal ) ;  } 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  UndoStack  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								QUndoStack  * instance ( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  static  QUndoStack  * undo_stack  =  new  QUndoStack ( qApp ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  undo_stack ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}   // namespace UndoStack