예제 #1
0
        public void Delete()
        {
            BaseController canvasController = ServiceManager.Get <IFlowSharpCanvasService>().ActiveController;

            if (canvasController.Canvas.Focused)
            {
                List <ZOrderMap>      originalZOrder   = canvasController.GetZOrderOfSelectedElements();
                List <GraphicElement> selectedElements = canvasController.SelectedElements.ToList();

                // TODO: Better implementation would be for the mouse controller to hook a shape deleted event?
                IFlowSharpMouseControllerService mouseController = ServiceManager.Get <IFlowSharpMouseControllerService>();
                canvasController.SelectedElements.ForEach(el => mouseController.ShapeDeleted(el));

                canvasController.UndoStack.UndoRedo("Delete",
                                                    () =>
                {
                    canvasController.DeleteSelectedElementsHierarchy(false);
                },
                                                    () =>
                {
                    canvasController.RestoreZOrderWithHierarchy(originalZOrder);
                    RestoreConnections(originalZOrder);
                    canvasController.DeselectCurrentSelectedElements();
                    canvasController.SelectElements(selectedElements);
                });
            }
        }
예제 #2
0
        public void Delete()
        {
            BaseController canvasController = ServiceManager.Get <IFlowSharpCanvasService>().ActiveController;

            if (canvasController.Canvas.Focused)
            {
                List <ZOrderMap>      originalZOrder   = canvasController.GetZOrderOfSelectedElements();
                List <GraphicElement> selectedElements = canvasController.SelectedElements.ToList();
                Dictionary <GraphicElement, GraphicElement> elementParent = new Dictionary <GraphicElement, GraphicElement>();
                selectedElements.ForEach(el => elementParent[el] = el.Parent);

                // TODO: Better implementation would be for the mouse controller to hook a shape deleted event?
                IFlowSharpMouseControllerService mouseController = ServiceManager.Get <IFlowSharpMouseControllerService>();
                canvasController.SelectedElements.ForEach(el => mouseController.ShapeDeleted(el));

                canvasController.UndoStack.UndoRedo("Delete",
                                                    () =>
                {
                    canvasController.DeleteSelectedElementsHierarchy(false);

                    // Delete any parent association:
                    selectedElements.Where(el => el.Parent != null).ForEach(el =>
                    {
                        el.Parent.GroupChildren.Remove(el);
                        el.Parent = null;
                    });
                },
                                                    () =>
                {
                    canvasController.RestoreZOrderWithHierarchy(originalZOrder);
                    RestoreConnections(originalZOrder);
                    canvasController.DeselectCurrentSelectedElements();
                    canvasController.SelectElements(selectedElements);

                    // Restore parent associations:
                    selectedElements.ForEach(el =>
                    {
                        el.Parent = elementParent[el];

                        if (el.Parent != null)
                        {
                            el.Parent.GroupChildren.Add(el);
                        }
                    });
                });
            }
        }