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); }); } }
protected void Initialize() { IFlowSharpMenuService menuService = ServiceManager.Get <IFlowSharpMenuService>(); IFlowSharpCanvasService canvasService = ServiceManager.Get <IFlowSharpCanvasService>(); IFlowSharpMouseControllerService mouseService = ServiceManager.Get <IFlowSharpMouseControllerService>(); menuService.Initialize(form); menuService.Initialize(canvasService.ActiveController); canvasService.AddCanvas += (sndr, args) => CreateCanvas(); canvasService.LoadLayout += OnLoadLayout; canvasService.SaveLayout += OnSaveLayout; // mouseService.Initialize(canvasService.ActiveController); InformServicesOfNewCanvas(canvasService.ActiveController); }
protected void InformServicesOfNewCanvas(BaseController controller) { // Wire up menu for this canvas controller. IFlowSharpMenuService menuService = ServiceManager.Get <IFlowSharpMenuService>(); menuService.Initialize(controller); // Wire up mouse for this canvas controller. IFlowSharpMouseControllerService mouseService = ServiceManager.Get <IFlowSharpMouseControllerService>(); mouseService.Initialize(controller); // Debug window needs to know too. ServiceManager.Get <IFlowSharpDebugWindowService>().Initialize(controller); // PropertyGrid service needs to hook controller events. ServiceManager.Get <IFlowSharpPropertyGridService>().Initialize(controller); // Update document tab when canvas name changes. controller.CanvasNameChanged += (sndr, args) => { IDockDocument doc = ((IDockDocument)((BaseController)sndr).Canvas.Parent.Parent); doc.TabText = controller.CanvasName; // Update the metadata for the controller document so the layout contains this info on save. doc.Metadata = Constants.META_CANVAS + "," + controller.Filename + "," + doc.TabText; }; // Update the metadata for the controller document so the layout contains this info on save. controller.FilenameChanged += (sndr, args) => { IDockDocument doc = ((IDockDocument)((BaseController)sndr).Canvas.Parent.Parent); doc.Metadata = Constants.META_CANVAS + "," + controller.Filename + "," + doc.TabText; }; // Inform debug window, so it can select the shape in the shape list when a shape is selected on the canvas. controller.ElementSelected += (sndr, args) => { ServiceManager.Get <IFlowSharpDebugWindowService>().FindShape(args.Element); }; ServiceManager.Get <IFlowSharpEditService>().NewCanvas(controller); // Update any other services needing to know about the new canvas. These are additional services that are not // part of the core FlowSharp application (for example, the FlowSharpCode services.) NewCanvas.Fire(this, new NewCanvasEventArgs() { Controller = controller }); }
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); } }); }); } }
protected void Initialize() { IFlowSharpMenuService menuService = ServiceManager.Get <IFlowSharpMenuService>(); IFlowSharpCanvasService canvasService = ServiceManager.Get <IFlowSharpCanvasService>(); IFlowSharpMouseControllerService mouseService = ServiceManager.Get <IFlowSharpMouseControllerService>(); menuService.Initialize(form); canvasService.AddCanvas += (sndr, args) => CreateCanvas(); canvasService.LoadLayout += OnLoadLayout; canvasService.SaveLayout += OnSaveLayout; // mouseService.Initialize(canvasService.ActiveController); // Will be null if canvas was not created when app starts. Sanity check here // mainly for when we debug a form with no panels initialized by default. if (canvasService.ActiveController != null) { menuService.Initialize(canvasService.ActiveController); InformServicesOfNewCanvas(canvasService.ActiveController); } }
protected void InformServicesOfNewCanvas(BaseController controller) { // Wire up menu for this canvas controller. IFlowSharpMenuService menuService = ServiceManager.Get <IFlowSharpMenuService>(); menuService.Initialize(controller); // Wire up mouse for this canvas controller. IFlowSharpMouseControllerService mouseService = ServiceManager.Get <IFlowSharpMouseControllerService>(); mouseService.Initialize(controller); // Debug window needs to know too. ServiceManager.Get <IFlowSharpDebugWindowService>().Initialize(controller); // PropertyGrid service needs to hook controller events. ServiceManager.Get <IFlowSharpPropertyGridService>().Initialize(controller); // Update document tab when canvas name changes. controller.CanvasNameChanged += (sndr, args) => { IDockDocument doc = ((IDockDocument)((BaseController)sndr).Canvas.Parent.Parent); doc.TabText = controller.CanvasName; // Update the metadata for the controller document so the layout contains this info on save. doc.Metadata = Constants.META_CANVAS + "," + controller.Filename + "," + doc.TabText; }; // Update the metadata for the controller document so the layout contains this info on save. controller.FilenameChanged += (sndr, args) => { IDockDocument doc = ((IDockDocument)((BaseController)sndr).Canvas.Parent.Parent); doc.Metadata = Constants.META_CANVAS + "," + controller.Filename + "," + doc.TabText; }; // Update any other services needing to know about the new canvas. NewCanvas.Fire(this, new NewCanvasEventArgs() { Controller = controller }); }