/// <summary> /// Adds the copies of the given elements to a data object and adds it to the clipboard. /// </summary> /// <param name="modelElements">Elements to move.</param> public static void ExecuteCut(Collection <ModelElement> modelElements) { System.Windows.IDataObject dataObject = new System.Windows.DataObject(); ModelElementOperations.CopyToMove(modelElements, dataObject); System.Windows.Clipboard.SetDataObject(dataObject, true); }
/// <summary> /// Executes the paste operation on the given element. /// </summary> /// <param name="modelElement">Element.</param> /// <returns>Validation result, indicating problems during the paste operation.</returns> public static ValidationResult ExecutePaste(ModelElement modelElement) { System.Windows.IDataObject idataObject = System.Windows.Clipboard.GetDataObject(); ValidationResult result = null; using (Transaction transaction = modelElement.Store.TransactionManager.BeginTransaction("Paste", true)) { result = ModelElementOperations.Merge(modelElement, idataObject); List <Guid> shapes = DiagramsShapeStore.GetFromStore(modelElement.Id); if (shapes != null) { foreach (Guid s in shapes) { NodeShape shape = modelElement.Store.ElementDirectory.FindElement(s) as NodeShape; if (shape != null) { using (Transaction tShape = modelElement.Store.TransactionManager.BeginTransaction("Create shape", true)) { shape.FixUpMissingShapes(); tShape.Commit(); } using (Transaction tLinkShapes = modelElement.Store.TransactionManager.BeginTransaction("Fixup missing link shapes", true)) { shape.FixUpMissingLinkShapes(); tLinkShapes.Commit(); } } } } transaction.Commit(); } ModelProtoGroup group = ModelElementOperations.GetModelProtoGroup(idataObject); if (group != null) { if (group.Operation == ModelProtoGroupOperation.Move) { System.Windows.Clipboard.Clear(); ElementsInMoveMode.Clear(); } } return(result); }
/// <summary> /// Helper method of the cut opeation. /// </summary> /// <param name="eventManager">Event manager.</param> /// <param name="idataObject">Data object.</param> public static void ProcessMoveMode(ViewModelEventManager eventManager, System.Windows.IDataObject idataObject) { bool isInMoveMode = false; if (idataObject != null) { ModelProtoGroup group = ModelElementOperations.GetModelProtoGroup(idataObject); if (group != null) { if (group.Operation == ModelProtoGroupOperation.Move) { isInMoveMode = true; List <System.Guid> guids = new List <System.Guid>(); foreach (ModelProtoElement root in group.ProtoRootElements) { guids.Add(root.ElementId); } foreach (System.Guid id in guids) { if (!ElementsInMoveMode.Contains(id)) { eventManager.GetEvent <ModelElementCustomEvent <bool> >().Publish(true, ModelElementCustomEventNames.ModelElementMoveModeStatus, id); ElementsInMoveMode.Add(id); } } for (int i = ElementsInMoveMode.Count - 1; i >= 0; i--) { if (!guids.Contains(ElementsInMoveMode[i])) { eventManager.GetEvent <ModelElementCustomEvent <bool> >().Publish(false, ModelElementCustomEventNames.ModelElementMoveModeStatus, ElementsInMoveMode[i]); ElementsInMoveMode.RemoveAt(i); } } } } } if (!isInMoveMode) { // remove all elements from the current list and notify them to change status foreach (System.Guid id in ElementsInMoveMode) { eventManager.GetEvent <ModelElementCustomEvent <bool> >().Publish(false, ModelElementCustomEventNames.ModelElementMoveModeStatus, id); } } }
/// <summary> /// Verifies if a paste operation can be executed. /// </summary> /// <param name="rootElement">Element to execute paste on.</param> /// <param name="dataObject">Data.</param> /// <returns>True if the paste operation can be executed. False otherwise.</returns> public static bool CanExecutePaste(ModelElement rootElement, System.Windows.IDataObject dataObject) { return(ModelElementOperations.CanMerge(rootElement, dataObject)); }
/// <summary> /// Verifies if a collection of elements can be moved. /// </summary> /// <param name="modelElements">Elements.</param> /// <returns>True if the elements can be moved. False otherwise.</returns> public static bool CanExecuteMove(Collection <ModelElement> modelElements) { return(ModelElementOperations.CanMove(modelElements)); }