Skip to content

Commit 6a77c8d

Browse files
committed
Run undo/redo commands only if there is something to undo/redo.
1 parent 8b68f5d commit 6a77c8d

File tree

6 files changed

+43
-12
lines changed

6 files changed

+43
-12
lines changed

Sources/NodeUIEngine/NUIE_InteractionHandler.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -624,13 +624,6 @@ void InteractionHandler::ExecuteCommand (NodeUIEnvironment& uiEnvironment, NUIE:
624624
MenuCommandPtr menuCommand = nullptr;
625625

626626
switch (command) {
627-
case CommandCode::Delete:
628-
{
629-
if (!selectedNodes.IsEmpty ()) {
630-
menuCommand.reset (new DeleteNodesMenuCommand (uiManager, uiEnvironment, selectedNodes));
631-
}
632-
}
633-
break;
634627
case CommandCode::SelectAll:
635628
{
636629
NE::NodeCollection allSelectedNodes;
@@ -650,6 +643,13 @@ void InteractionHandler::ExecuteCommand (NodeUIEnvironment& uiEnvironment, NUIE:
650643
}
651644
}
652645
break;
646+
case CommandCode::Delete:
647+
{
648+
if (!selectedNodes.IsEmpty ()) {
649+
menuCommand.reset (new DeleteNodesMenuCommand (uiManager, uiEnvironment, selectedNodes));
650+
}
651+
}
652+
break;
653653
case CommandCode::Copy:
654654
{
655655
if (!selectedNodes.IsEmpty ()) {
@@ -681,12 +681,16 @@ void InteractionHandler::ExecuteCommand (NodeUIEnvironment& uiEnvironment, NUIE:
681681
break;
682682
case CommandCode::Undo:
683683
{
684-
menuCommand.reset (new UndoMenuCommand (uiManager, uiEnvironment));
684+
if (uiManager.CanUndo ()) {
685+
menuCommand.reset (new UndoMenuCommand (uiManager, uiEnvironment));
686+
}
685687
}
686688
break;
687689
case CommandCode::Redo:
688690
{
689-
menuCommand.reset (new RedoMenuCommand (uiManager, uiEnvironment));
691+
if (uiManager.CanRedo ()) {
692+
menuCommand.reset (new RedoMenuCommand (uiManager, uiEnvironment));
693+
}
690694
}
691695
break;
692696
case CommandCode::Escape:

Sources/NodeUIEngine/NUIE_InteractionHandler.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ enum class CommandCode
1717
{
1818
Undefined,
1919
Escape,
20-
Delete,
2120
SelectAll,
2221
SetParameters,
22+
Delete,
2323
Copy,
2424
Paste,
2525
Group,

Sources/NodeUIEngine/NUIE_NodeUIManager.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,16 @@ void NodeUIManager::SaveUndoState ()
625625
undoHandler.SaveUndoState (nodeManager);
626626
}
627627

628+
bool NodeUIManager::CanUndo () const
629+
{
630+
return undoHandler.CanUndo ();
631+
}
632+
633+
bool NodeUIManager::CanRedo () const
634+
{
635+
return undoHandler.CanRedo ();
636+
}
637+
628638
bool NodeUIManager::Undo (NE::EvaluationEnv& env)
629639
{
630640
NodeUIManagerUpdateEventHandler eventHandler (*this, env);

Sources/NodeUIEngine/NUIE_NodeUIManager.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ class NodeUIManager
153153
NE::NodeCollection Duplicate (const NE::NodeCollection& nodeCollection);
154154

155155
void SaveUndoState ();
156+
bool CanUndo () const;
157+
bool CanRedo () const;
156158
bool Undo (NE::EvaluationEnv& env);
157159
bool Redo (NE::EvaluationEnv& env);
158160

Sources/NodeUIEngine/NUIE_UndoHandler.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,19 @@ void UndoHandler::SaveUndoState (const NE::NodeManager& nodeManager)
2222
SaveAndAddState (nodeManager, undoStack);
2323
}
2424

25+
bool UndoHandler::CanUndo () const
26+
{
27+
return !undoStack.empty ();
28+
}
29+
30+
bool UndoHandler::CanRedo () const
31+
{
32+
return !redoStack.empty ();
33+
}
34+
2535
bool UndoHandler::Undo (NE::NodeManager& targetNodeManager, NE::UpdateEventHandler& eventHandler)
2636
{
27-
if (undoStack.empty ()) {
37+
if (!CanUndo ()) {
2838
return false;
2939
}
3040

@@ -38,7 +48,7 @@ bool UndoHandler::Undo (NE::NodeManager& targetNodeManager, NE::UpdateEventHandl
3848

3949
bool UndoHandler::Redo (NE::NodeManager& targetNodeManager, NE::UpdateEventHandler& eventHandler)
4050
{
41-
if (redoStack.empty ()) {
51+
if (!CanRedo ()) {
4252
return false;
4353
}
4454

Sources/NodeUIEngine/NUIE_UndoHandler.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,13 @@ class UndoHandler
1515
UndoHandler ();
1616

1717
void SaveUndoState (const NE::NodeManager& nodeManager);
18+
19+
bool CanUndo () const;
20+
bool CanRedo () const;
21+
1822
bool Undo (NE::NodeManager& targetNodeManager, NE::UpdateEventHandler& eventHandler);
1923
bool Redo (NE::NodeManager& targetNodeManager, NE::UpdateEventHandler& eventHandler);
24+
2025
void Clear ();
2126

2227
private:

0 commit comments

Comments
 (0)