4 using System.Collections.Generic;
7 using SiliconStudio.Core;
9 namespace SiliconStudio.ActionStack
24 protected readonly Stack<List<IActionItem>> TransactionStack =
new Stack<List<IActionItem>>();
41 : base(capacity, initialActionsItems)
61 displayName = getName();
65 displayName =
"<<ERROR>>";
68 EndTransaction(displayName);
89 var currentTransaction =
new List<IActionItem>();
90 TransactionStack.Push(currentTransaction);
96 EndTransaction(name, x => AggregateActionItems(x, name));
102 if (TransactionStack.Count == 0)
throw new InvalidOperationException(Properties.ExceptionMessages.CannotEndNoTransactionInProgress);
104 var currentTransaction = TransactionStack.Pop();
105 var aggregateActionItem = aggregateActionItems(currentTransaction);
106 Add(aggregateActionItem);
112 if (TransactionStack.Count == 0)
throw new InvalidOperationException(Properties.ExceptionMessages.CannotEndNoTransactionInProgress);
113 var currentTransaction = TransactionStack.Pop();
123 if (TransactionStack.Count == 0)
throw new InvalidOperationException(Properties.ExceptionMessages.CannotEndNoTransactionInProgress);
124 TransactionStack.Pop();
133 if (TransactionStack.Count == 0)
throw new InvalidOperationException(Properties.ExceptionMessages.NoTransactionInProgress);
134 return TransactionStack.Peek();
142 var currentTransaction = TransactionStack.Peek();
143 currentTransaction.Add(item);
151 private static IActionItem AggregateActionItems(IReadOnlyCollection<IActionItem> actionItems,
string name = null)
153 if (actionItems.Count == 1)
155 var actionItem = actionItems.First();
156 if (!
string.IsNullOrEmpty(name))
157 actionItem.
Name = name;
160 return new AggregateActionItem(name, actionItems);
override void Add(IActionItem item)
Adds an action item to the stack. Discards any action item that is currently undone. The action item to add to the stack.
This class is an implementation of the ITransactionalActionStack interface.
virtual void CancelTransaction()
Cancels a transaction started with BeginTransaction. Every action from the cancelled transaction will...
IDisposable BeginDiscardTransaction()
Creates a BeginTransaction-DiscardTransaction transaction subscription. Use it with a using statement...
virtual void DiscardTransaction()
Discard a transaction started with BeginTransaction. This method will ends the transaction and discar...
TransactionalActionStack(int capacity, IEnumerable< IActionItem > initialActionsItems)
Initializes a new instance of the TransactionalActionStack class with the given capacity and existing...
IDisposable BeginEndTransaction(Func< string > getName)
Creates a BeginTransaction-EndTransaction subscription. Use it with a using statement to ensure balan...
IReadOnlyCollection< IActionItem > GetCurrentTransactions()
Gets the action items in the current transaction.
void EndTransaction(string name)
Ends a transaction started with BeginTransaction. Once the transaction is ended, an aggregate action ...
IDisposable BeginEndTransaction(string name)
Creates a BeginTransaction-EndTransaction subscription. Use it with a using statement to ensure balan...
IDisposable BeginCancelTransaction()
Creates a BeginTransaction-CancelTransaction transaction subscription. Use it with a using statement ...
Base interface for action items.
string Name
Gets or sets the name of the current action.
virtual void EndTransaction(string name, Func< IReadOnlyCollection< IActionItem >, IActionItem > aggregateActionItems)
Ends a transaction started with BeginTransaction. A function that will aggregate an enumeration of ac...
This class allows implementation of IDisposable using anonymous functions. The anonymous function wil...
TransactionalActionStack(int capacity)
Initializes a new instance of the TransactionalActionStack class with the given capacity.
Item discarded because an undo/redo operation is currently in progress.
This class represents a thread-safe stack of action items that can be undone/redone.
virtual void BeginTransaction()
Begins a transaction. IActionItem added after a call to BeginTransaction are stored in a temporary tr...
Base interface for a transactional action stack.