100 myCurrentChange = myCurrentChange->next;
108 myCurrentChange(change),
114 myCurrentChange(nullptr),
146 throw ProcessError(
"GNEUndoList::undo() cannot call undo inside begin-end block");
169 throw ProcessError(
"GNEUndoList::redo() cannot call undo inside begin-end block");
224 throw ProcessError(
"GNEChangeGroup::begin: already working on undo or redo");
229 while (changeGroup->
group) {
230 changeGroup = changeGroup->
group;
256 if (!changeGroup->
group) {
257 throw ProcessError(
"GNEChangeGroup::end: no matching call to begin");
261 throw ProcessError(
"GNEChangeGroup::end: already working on undo or redo");
265 changeGroup = changeGroup->
group;
268 change = changeGroup->
group;
269 changeGroup->
group =
nullptr;
271 if (!change->
empty()) {
332 throw ProcessError(
"GNEChangeGroup::add: nullptr change argument");
336 throw ProcessError(
"GNEChangeGroup::add: already working on undo or redo");
346 while (changeGroup->
group) {
347 changeGroup = changeGroup->
group;
438 const FXButton* button =
dynamic_cast<FXButton*
>(sender);
442 if (enable && !button->isEnabled()) {
443 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE),
nullptr);
445 }
else if (!enable && button->isEnabled()) {
446 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
450 sender->handle(
this, enable ? FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE) : FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
453 FXMenuCommand* menuCommand =
dynamic_cast<FXMenuCommand*
>(sender);
462 caption =
"Cannot Undo in the middle of " +
myChangeGroups.top()->getDescription();
466 menuCommand->setText(caption.c_str());
467 menuCommand->update();
485 const FXButton* button =
dynamic_cast<FXButton*
>(sender);
489 if (enable && !button->isEnabled()) {
490 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE),
nullptr);
492 }
else if (!enable && button->isEnabled()) {
493 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
497 sender->handle(
this, enable ? FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE) : FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
500 FXMenuCommand* menuCommand =
dynamic_cast<FXMenuCommand*
>(sender);
509 caption =
"Cannot Redo in the middle of " +
myChangeGroups.top()->getDescription();
513 menuCommand->setText(caption.c_str());
514 menuCommand->update();
537 if (!changeGroup->
group) {
538 throw ProcessError(
"GNEChangeGroup::abort: no matching call to begin");
542 throw ProcessError(
"GNEChangeGroup::abort: already working on undo or redo");
546 changeGroup = changeGroup->
group;
549 delete changeGroup->
group;
551 changeGroup->
group =
nullptr;
FXDEFMAP(GNEUndoList) GNEUndoListMap[]
@ DATA_SELECT
mode for selecting data elements
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ NETWORK_SELECT
mode for selecting network elements
@ DEMAND_SELECT
mode for selecting demand elements
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
GUIIcon
An enumeration of icons used by the gui applications.
The main window of Netedit.
void updateControls()
update control contents after undo/redo or recompute
GNEViewNet * getViewNet()
get pointer to viewNet
const std::string & isUndoRedoEnabled() const
check if undo-redo is enabled
the function-object for an editing operation (abstract base)
bool trueChange()
wether original and new value differ
GNEChange * undoList
undo list command (can be access by GNEUndoList)
const std::string & getTimeStamp()
get timeStamp
GUIIcon getGroupIcon() const
get icon associated with this ChangeGroup
GNEChange * redoList
redo list command (can be access by GNEUndoList)
GNEChangeGroup * group
group (can be access by GNEUndoList)
bool empty() const
Return TRUE if empty.
Supermode getGroupSupermode() const
get supermode associated with this ChangeGroup
void undo()
Undo whole command group.
GNEChangeGroup()
FOX need this.
the function-object for an editing operation (abstract base)
virtual void redo()=0
redo action/operation
virtual int size() const
Return the size of the command group.
virtual void undo()=0
undo action/operation
Supermode getSupermode() const
get supermode
bool mergeWith(GNEChange *command)
Called by the undo system to try and merge the new incoming command with this command; should return ...
virtual std::string redoName() const =0
return rendoName
virtual std::string undoName() const =0
return undoName
bool canMerge() const
Return TRUE if this command can be merged with previous undo commands. This is useful to combine e....
SelectionInformation * getSelectionInformation() const
get modul for selection information
const std::string getTimeStamp() const
get timeStamp
const std::string getDescription() const
get description
bool end() const
check if iterator is at the end
FXIcon * getIcon() const
get icon
Iterator()
default constructor
Iterator & operator++(int)
increment operator
GNEChange * myCurrentChange
current change
int getIndex() const
get index
RedoIterator(const GNEUndoList *undoList)
constructor for GNEUndoList
UndoIterator(const GNEUndoList *undoList)
constructor for GNEUndoList
void abortCurrentSubGroup()
Abort the current command sub-group being compiled. All commands already added to the sub-groups undo...
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
bool hasCommandGroup() const
Check if undoList has command group.
void undo()
undo the last command group
long onUpdUndo(FXObject *, FXSelector, void *)
event after Undo
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
std::string undoName() const
Return name of the first undo command available; if no undo command available this will return the em...
GNEApplicationWindow *const myGNEApplicationWindowParent
void abortAllChangeGroups()
reverts and discards ALL active chained change groups
Supermode getRedoSupermode() const
get redo supermode
long onUpdRedo(FXObject *, FXSelector, void *)
event after Redo
bool myWorking
Currently busy with undo or redo.
void cut()
Cut the redo list. This is automatically invoked when a new undo command is added.
bool canRedo() const
Can we redo more commands.
Supermode getUndoSupermode() const
get undo supermode
bool canUndo() const
Can we undo more commands.
std::stack< GNEChangeGroup * > myChangeGroups
void redo()
redo the last command group
long onCmdUndo(FXObject *, FXSelector, void *)
int currentCommandGroupSize() const
get size of current CommandGroup
void abortLastChangeGroup()
reverts last active chained change group
long onCmdRedo(FXObject *, FXSelector, void *)
redo change
bool busy() const
Return TRUE if currently inside undo or redo operation; this is useful to avoid generating another un...
std::string redoName() const
Return name of the first redo command available; if no Redo command available this will return the em...
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
void changeAttribute(GNEChange_Attribute *change)
special method for change attributes, avoid empty changes, always execute
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
GNEViewParent * getViewParent() const
get the net object
void updateViewNet() const
Mark the entire GNEViewNet to be repainted later.
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Supermode currentSupermode
the current supermode