71 std::string
redoName = myCurrentChange->redoName();
96 myCurrentChange = myCurrentChange->next;
104 myCurrentChange(change),
110 myCurrentChange(nullptr),
142 throw ProcessError(
"GNEUndoList::undo() cannot call undo inside begin-end block");
165 throw ProcessError(
"GNEUndoList::redo() cannot call undo inside begin-end block");
226 throw ProcessError(
"GNEChangeGroup::begin: already working on undo or redo");
231 while (changeGroup->
group) {
232 changeGroup = changeGroup->
group;
258 if (!changeGroup->
group) {
259 throw ProcessError(
"GNEChangeGroup::end: no matching call to begin");
263 throw ProcessError(
"GNEChangeGroup::end: already working on undo or redo");
267 changeGroup = changeGroup->
group;
270 change = changeGroup->
group;
271 changeGroup->
group =
nullptr;
273 if (!change->
empty()) {
334 throw ProcessError(
"GNEChangeGroup::add: nullptr change argument");
338 throw ProcessError(
"GNEChangeGroup::add: already working on undo or redo");
348 while (changeGroup->
group) {
349 changeGroup = changeGroup->
group;
380 return begin->getGroupSupermode();
396 return begin->getGroupSupermode();
430 const FXButton* button =
dynamic_cast<FXButton*
>(sender);
434 if (enable && !button->isEnabled()) {
435 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE),
nullptr);
437 }
else if (!enable && button->isEnabled()) {
438 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
442 sender->handle(
this, enable ? FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE) : FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
445 FXMenuCommand* menuCommand =
dynamic_cast<FXMenuCommand*
>(sender);
454 caption =
TL(
"Cannot Undo in the middle of ") +
myChangeGroups.top()->getDescription();
456 caption =
TL(
"Undo");
458 menuCommand->setText(caption.c_str());
459 menuCommand->update();
477 const FXButton* button =
dynamic_cast<FXButton*
>(sender);
481 if (enable && !button->isEnabled()) {
482 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE),
nullptr);
484 }
else if (!enable && button->isEnabled()) {
485 sender->handle(
this, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
489 sender->handle(
this, enable ? FXSEL(SEL_COMMAND, FXWindow::ID_ENABLE) : FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE),
nullptr);
492 FXMenuCommand* menuCommand =
dynamic_cast<FXMenuCommand*
>(sender);
501 caption =
TL(
"Cannot Redo in the middle of ") +
myChangeGroups.top()->getDescription();
503 caption =
TL(
"Redo");
505 menuCommand->setText(caption.c_str());
506 menuCommand->update();
529 if (!changeGroup->
group) {
530 throw ProcessError(
"GNEChangeGroup::abort: no matching call to begin");
534 throw ProcessError(
"GNEChangeGroup::abort: already working on undo or redo");
538 changeGroup = changeGroup->
group;
541 delete changeGroup->
group;
543 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
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.
GNEChangeGroup()
FOX need this.
the function-object for an editing operation (abstract base)
virtual void redo()=0
redo action/operation
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
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