本文整理汇总了C#中Dynamo.Core.UndoRedoRecorder类的典型用法代码示例。如果您正苦于以下问题:C# UndoRedoRecorder类的具体用法?C# UndoRedoRecorder怎么用?C# UndoRedoRecorder使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
UndoRedoRecorder类属于Dynamo.Core命名空间,在下文中一共展示了UndoRedoRecorder类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WorkspaceModel
protected WorkspaceModel(
String name, IEnumerable<NodeModel> e, IEnumerable<ConnectorModel> c, double x, double y)
{
Name = name;
Nodes = new TrulyObservableCollection<NodeModel>(e);
Connectors = new TrulyObservableCollection<ConnectorModel>(c);
Notes = new ObservableCollection<NoteModel>();
X = x;
Y = y;
HasUnsavedChanges = false;
LastSaved = DateTime.Now;
WorkspaceSaved += OnWorkspaceSaved;
WorkspaceVersion = AssemblyHelper.GetDynamoVersion();
undoRecorder = new UndoRedoRecorder(this);
}
示例2: CommitChanges
private void CommitChanges(UndoRedoRecorder recorder)
{
// Code block editor can lose focus in many scenarios (e.g. switching
// of tabs or application), if there has not been any changes, do not
// commit the change.
//
if (!codeBlockNode.Code.Equals(InnerTextEditor.Text))
{
UpdateNodeValue("Code");
}
if (createdForNewCodeBlock)
{
// If this editing was started due to a new code block node,
// then by this point there would have been two action groups
// recorded on the undo-stack: one for node creation, and
// another for node editing (as part of ExecuteCommand above).
// Pop off the two action groups...
//
recorder.PopFromUndoGroup(); // Pop off modification action.
// Note that due to various external factors a code block node
// loaded from file may be created empty. In such cases, the
// creation step would not have been recorded (there was no
// explicit creation of the node, it was created from loading
// of a file), and nothing should be popped off of the undo stack.
if (recorder.CanUndo)
recorder.PopFromUndoGroup(); // Pop off creation action.
// ... and record this new node as new creation.
using (recorder.BeginActionGroup())
{
recorder.RecordCreationForUndo(codeBlockNode);
}
}
}
示例3: HandleModelEventCore
internal override bool HandleModelEventCore(string eventName, int value, UndoRedoRecorder recorder)
{
return VariableInputController.HandleModelEventCore(eventName, value, recorder)
|| base.HandleModelEventCore(eventName, value, recorder);
}
示例4: DummyWorkspace
internal DummyWorkspace()
{
undoRecorder = new UndoRedoRecorder(this);
}
示例5: TestConstructor
public void TestConstructor()
{
Assert.Throws<ArgumentNullException>(() =>
{
UndoRedoRecorder temp = new UndoRedoRecorder(null);
});
}
示例6: DiscardChangesAndOptionallyRemoveNode
private void DiscardChangesAndOptionallyRemoveNode(UndoRedoRecorder recorder)
{
if (!string.IsNullOrEmpty(InnerTextEditor.Text))
{
throw new InvalidOperationException(
"This method is meant only for empty text box");
}
if (createdForNewCodeBlock)
{
// If this editing was started due to a new code block node,
// then by this point the creation of the node would have been
// recorded, we need to pop that off the undo stack. Note that
// due to various external factors a code block node loaded
// from file may be created empty. In such cases, the creation
// step would not have been recorded (there was no explicit
// creation of the node, it was created from loading of a file),
// and nothing should be popped off of the undo stack.
//
if (recorder.CanUndo)
recorder.PopFromUndoGroup(); // Pop off creation action.
}
else
{
// If the editing was started for an existing code block node,
// and user deletes the text contents, it should be restored to
// the original codes.
InnerTextEditor.Text = nodeModel.Code;
}
}
示例7: RecordModelsForUndo
internal static void RecordModelsForUndo(Dictionary<ModelBase, UndoRedoRecorder.UserAction> models, UndoRedoRecorder recorder)
{
if (null == recorder)
return;
if (!ShouldProceedWithRecording(models))
return;
using (recorder.BeginActionGroup())
{
foreach (var modelPair in models)
{
switch (modelPair.Value)
{
case UndoRedoRecorder.UserAction.Creation:
recorder.RecordCreationForUndo(modelPair.Key);
break;
case UndoRedoRecorder.UserAction.Deletion:
recorder.RecordDeletionForUndo(modelPair.Key);
break;
case UndoRedoRecorder.UserAction.Modification:
recorder.RecordModificationForUndo(modelPair.Key);
break;
}
}
}
}
示例8: RecordModelForModification
// See RecordModelsForModification below for more details.
internal static void RecordModelForModification(ModelBase model, UndoRedoRecorder recorder)
{
if (null != model)
{
var models = new List<ModelBase> { model };
RecordModelsForModification(models, recorder);
}
}
示例9: HandleModelEventCore
internal bool HandleModelEventCore(string eventName, UndoRedoRecorder recorder)
{
if (eventName == "AddInPort")
{
AddInputToModel();
model.RegisterAllPorts();
return true; // Handled here.
}
if (eventName == "RemoveInPort")
{
RemoveInputFromModel();
model.RegisterAllPorts();
return true; // Handled here.
}
return false; // base.HandleModelEventCore(eventName);
}
示例10: ModelModificationUndoHelper
public ModelModificationUndoHelper(UndoRedoRecorder recorder, IEnumerable<ModelBase> models)
{
this.recorder = recorder;
this.models = new List<ModelBase>(models);
existingConnectors = new Dictionary<Guid, XmlElement>();
remainingConnectors = new Dictionary<Guid, ConnectorModel>();
var allConnectors = new List<ConnectorModel>();
using (this.recorder.BeginActionGroup())
{
// Assuming no connectors will be modified as part of this, we
// record the node prior to it being modified. If for some
// reason connectors are dropped/created along the way, then
// this particular action group will be pop off the undo stack.
//
foreach (var model in this.models)
{
var nodeModel = model as NodeModel;
if (nodeModel != null)
allConnectors.AddRange(nodeModel.AllConnectors);
this.recorder.RecordModificationForUndo(model);
}
}
// Record the existing connectors...
foreach (var connectorModel in allConnectors)
{
var element = connectorModel.Serialize(
recorder.document, SaveContext.Undo);
existingConnectors[connectorModel.GUID] = element;
}
}
示例11: ActionGroupDisposable
public ActionGroupDisposable(UndoRedoRecorder recorder)
{
this.recorder = recorder;
}
示例12: HandleModelEvent
/// <summary>
/// This method is currently used as a way to send an event to ModelBase
/// derived objects. Its primary use is in DynamoNodeButton class, which
/// sends this event when clicked, to change the number of ports in a
/// VariableInputNode.
/// </summary>
/// <param name="eventName">The name of the event.</param>
/// <param name="value">For the SetInPortCount event, the number of
/// ports desired. Ignored for other events.</param>
/// <param name="recorder"></param>
/// <returns>Returns true if the call has been handled, or false otherwise.
/// </returns>
internal bool HandleModelEvent(string eventName, int value, UndoRedoRecorder recorder)
{
return HandleModelEventCore(eventName, value, recorder);
}
示例13: RecordModels
private void RecordModels(UndoRedoRecorder recorder)
{
if (model.InPorts.Count == 0)
return;
var connectors = model.InPorts.Last().Connectors;
if (connectors.Count != 0)
{
if (connectors.Count != 1)
{
throw new InvalidOperationException(
"There should be only one connection to an input port");
}
var models = new Dictionary<ModelBase, UndoRedoRecorder.UserAction>
{
{ connectors[0], UndoRedoRecorder.UserAction.Deletion },
{ model, UndoRedoRecorder.UserAction.Modification }
};
WorkspaceModel.RecordModelsForUndo(models, recorder);
}
else
WorkspaceModel.RecordModelForModification(model, recorder);
}
示例14: HandleModelEvent
/// <summary>
/// This method is currently used as a way to send an event to ModelBase
/// derived objects. Its primary use is in DynamoNodeButton class, which
/// sends this event when clicked.
/// </summary>
/// <param name="eventName">The name of the event.</param>
/// <param name="recorder"></param>
/// <returns>Returns true if the call has been handled, or false otherwise.
/// </returns>
public bool HandleModelEvent(string eventName, UndoRedoRecorder recorder)
{
return HandleModelEventCore(eventName, recorder);
}
示例15: RecordModelsForModification
/// <summary>
/// TODO(Ben): This method is exposed this way for external codes (e.g.
/// the DragCanvas) to record models before they are modified. This is
/// by no means ideal. The ideal case of course is for ALL codes that
/// end up modifying models to be folded back into WorkspaceViewModel in
/// the form of commands. These commands then internally record those
/// affected models before updating them. We need this method to be gone
/// sooner than later.
/// </summary>
/// <param name="models">The models to be recorded for undo.</param>
/// <param name="recorder"></param>
internal static void RecordModelsForModification(List<ModelBase> models, UndoRedoRecorder recorder)
{
if (null == recorder)
return;
if (!ShouldProceedWithRecording(models))
return;
using (recorder.BeginActionGroup())
{
foreach (var model in models)
recorder.RecordModificationForUndo(model);
}
}