//---------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // //---------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System.Runtime; internal static class ModelItemHelper { internal static ModelEditingScope ModelItemBeginEdit(ModelTreeManager modelTreeManager, string description, bool shouldApplyChangesImmediately) { if (shouldApplyChangesImmediately && modelTreeManager.Context.Services.GetService().IsBookmarkInPlace) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.InvalidNestedModelItemBeginEditExceptionMessage)); } EditingScope editingScope = modelTreeManager.CreateEditingScope(description, shouldApplyChangesImmediately); if (shouldApplyChangesImmediately && editingScope == null) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.InvalidNestedModelItemBeginEditExceptionMessage)); } return editingScope; } internal static bool CanCreateImmediateEditingScope(ModelItem modelItem) { Fx.Assert(modelItem is IModelTreeItem, "modelItem must implement IModelTreeItem"); return ((IModelTreeItem)modelItem).ModelTreeManager.CanCreateImmediateEditingScope(); } internal static void TryCreateImmediateEditingScopeAndExecute(EditingContext context, string editingScopeDescription, Action modelEditingWork) { Fx.Assert(context != null, "context should not be null."); Fx.Assert(modelEditingWork != null, "modelEditingWork should not be null."); ModelTreeManager manager = context.Services.GetRequiredService(); if (manager.CanCreateImmediateEditingScope()) { using (EditingScope editingScope = manager.CreateEditingScope(editingScopeDescription, true)) { modelEditingWork(editingScope); } } else { modelEditingWork(null); } } internal static EditingScope TryCreateImmediateEditingScope(ModelTreeManager manager, string editingScopeDescription) { if (manager.CanCreateImmediateEditingScope()) { return manager.CreateEditingScope(editingScopeDescription, true); } return null; } } }