# 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