97 myCurrentChange = myCurrentChange->next;
105 myCurrentChange(change),
111 myCurrentChange(nullptr),
143 throw ProcessError(
"GNEUndoList::undo() cannot call undo inside begin-end block");
168 throw ProcessError(
"GNEUndoList::redo() cannot call undo inside begin-end block");
231 throw ProcessError(
"GNEChangeGroup::begin: already working on undo or redo");
236 while (changeGroup->
group) {
237 changeGroup = changeGroup->
group;
267 if (!changeGroup->
group) {
268 throw ProcessError(
"GNEChangeGroup::end: no matching call to begin");
272 throw ProcessError(
"GNEChangeGroup::end: already working on undo or redo");
276 changeGroup = changeGroup->
group;
279 change = changeGroup->
group;
280 changeGroup->
group =
nullptr;
282 if (!change->
empty()) {
343 throw ProcessError(
"GNEChangeGroup::add: nullptr change argument");
347 throw ProcessError(
"GNEChangeGroup::add: already working on undo or redo");
357 while (changeGroup->
group) {
358 changeGroup = changeGroup->
group;
441 const FXButton* button =
dynamic_cast<FXButton*
>(sender);
445 if (buttonEnabled && !button->isEnabled()) {
446 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE),
nullptr);
448 }
else if (!buttonEnabled && button->isEnabled()) {
449 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
453 sender->handle(
this, buttonEnabled ? FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE) : FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
456 FXMenuCommand* menuCommand =
dynamic_cast<FXMenuCommand*
>(sender);
463 caption =
TL(
"Disabled undo");
467 caption =
TL(
"Cannot Undo in the middle of ") +
myChangeGroups.top()->getDescription();
469 caption =
TL(
"Undo");
471 menuCommand->setText(caption.c_str());
472 menuCommand->update();
492 const FXButton* button =
dynamic_cast<FXButton*
>(sender);
496 if (enable && !button->isEnabled()) {
497 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE),
nullptr);
499 }
else if (!enable && button->isEnabled()) {
500 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
504 sender->handle(
this, enable ? FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE) : FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
507 FXMenuCommand* menuCommand =
dynamic_cast<FXMenuCommand*
>(sender);
514 caption =
TL(
"Disabled redo");
518 caption =
TL(
"Cannot Redo in the middle of ") +
myChangeGroups.top()->getDescription();
520 caption =
TL(
"Redo");
522 menuCommand->setText(caption.c_str());
523 menuCommand->update();
546 if (!changeGroup->
group) {
547 throw ProcessError(
"GNEChangeGroup::abort: no matching call to begin");
551 throw ProcessError(
"GNEChangeGroup::abort: already working on undo or redo");
555 changeGroup = changeGroup->
group;
558 delete changeGroup->
group;
560 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.
GUIViewUpdater gViewUpdater
GUIIcon
An enumeration of icons used by the gui applications.
The main window of Netedit.
const std::string & isUndoRedoEnabledTemporally() const
check if undo-redo is enabled temporally
void updateControls()
update control contents after undo/redo or recompute
GNEViewNet * getViewNet()
get pointer to viewNet
bool isUndoRedoAllowed() const
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
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 redoName
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
GUIIcon getGUIIcon() const
get GUI icon associated to this Tag
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...
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
GNEViewParent * getViewParent() const
get the net object
void updateViewNet(const bool ignoreViewUpdater=true) 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
void enableUpdate()
enable update
void disableUpdate()
disable update
Supermode currentSupermode
the current supermode