/// <summary> /// Add change to history. /// Called after finishing moving/resizing. /// </summary> public void AddChangeToHistory(DrawingCanvas drawingCanvas) { if (commandChangeState != null && wasMove) { // Keep state after moving/resizing and add command to history commandChangeState.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(commandChangeState); commandChangeState = null; } }
/// <summary> /// Left mouse is released. /// New object is created and resized. /// </summary> public override void OnMouseUp(DrawingCanvas drawingCanvas, MouseButtonEventArgs e) { if (drawingCanvas.Count > 0) { drawingCanvas[drawingCanvas.Count - 1].Normalize(); drawingCanvas.AddCommandToHistory(new CommandAdd(drawingCanvas[drawingCanvas.Count - 1])); } //drawingCanvas.Tool = ToolType.Pointer; drawingCanvas.Cursor = HelperFunctions.DefaultCursor; drawingCanvas.ReleaseMouseCapture(); }
/// <summary> /// Apply new color /// </summary> public static bool ApplyColor(DrawingCanvas drawingCanvas, Color value, bool addToHistory) { CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; foreach (GraphicsBase g in drawingCanvas.Selection) { if (g.ObjectColor != value) { g.ObjectColor = value; wasChange = true; } } if ( wasChange && addToHistory ) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } return wasChange; }
/// <summary> /// Apply new font size /// </summary> public static bool ApplyFontSize(DrawingCanvas drawingCanvas, double value, bool addToHistory) { CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; foreach (GraphicsBase g in drawingCanvas.Selection) { GraphicsText gt = g as GraphicsText; if (gt != null) { if (gt.TextFontSize != value) { gt.TextFontSize = value; wasChange = true; } } } if (wasChange && addToHistory) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } return wasChange; }
/// <summary> /// Move selection to front /// </summary> public static void MoveSelectionToFront(DrawingCanvas drawingCanvas) { // Moving to front of z-order means moving // to the end of VisualCollection. // Read GraphicsList in the reverse order, and move every selected object // to temporary list. List<GraphicsBase> list = new List<GraphicsBase>(); CommandChangeOrder command = new CommandChangeOrder(drawingCanvas); for(int i = drawingCanvas.Count - 1; i >= 0; i--) { if ( drawingCanvas[i].IsSelected ) { list.Insert(0, drawingCanvas[i]); drawingCanvas.GraphicsList.RemoveAt(i); } } // Add all items from temporary list to the end of GraphicsList foreach(GraphicsBase g in list) { drawingCanvas.GraphicsList.Add(g); } if ( list.Count > 0 ) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } }
/// <summary> /// Delete selected graphic objects /// </summary> public static void DeleteSelection(DrawingCanvas drawingCanvas) { CommandDelete command = new CommandDelete(drawingCanvas); bool wasChange = false; for (int i = drawingCanvas.Count - 1; i >= 0; i--) { if ( drawingCanvas[i].IsSelected ) { drawingCanvas.GraphicsList.RemoveAt(i); wasChange = true; } } if ( wasChange ) { drawingCanvas.AddCommandToHistory(command); } }
/// <summary> /// Delete all graphic objects /// </summary> public static void DeleteAll(DrawingCanvas drawingCanvas) { if (drawingCanvas.GraphicsList.Count > 0 ) { drawingCanvas.AddCommandToHistory(new CommandDeleteAll(drawingCanvas)); drawingCanvas.GraphicsList.Clear(); } }
/// <summary> /// Apply currently active properties to selected objects /// </summary> public static void ApplyProperties(DrawingCanvas drawingCanvas) { // Apply every property. // Call every Apply* function with addToHistory = false. // History is updated here and not in called functions. CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; // Line Width if ( ApplyLineWidth(drawingCanvas, drawingCanvas.LineWidth, false)) { wasChange = true; } // Color if ( ApplyColor(drawingCanvas, drawingCanvas.ObjectColor, false) ) { wasChange = true; } // Font properties if ( ApplyFontFamily(drawingCanvas, drawingCanvas.TextFontFamilyName, false) ) { wasChange = true; } if ( ApplyFontSize(drawingCanvas, drawingCanvas.TextFontSize, false) ) { wasChange = true; } if ( ApplyFontStretch(drawingCanvas, drawingCanvas.TextFontStretch, false) ) { wasChange = true; } if ( ApplyFontStyle(drawingCanvas, drawingCanvas.TextFontStyle, false) ) { wasChange = true; } if ( ApplyFontWeight(drawingCanvas, drawingCanvas.TextFontWeight, false) ) { wasChange = true; } if ( wasChange ) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } }
/// <summary> /// Apply new line width /// </summary> public static bool ApplyLineWidth(DrawingCanvas drawingCanvas, double value, bool addToHistory) { CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; // LineWidth is set for all objects except of GraphicsText. // Though GraphicsText has this property, it should remain constant. foreach(GraphicsBase g in drawingCanvas.Selection) { if (g is GraphicsTableBlock || g is GraphicsBeacon || g is GraphicsBarrier) { if ( g.LineWidth != value ) { g.LineWidth = value; wasChange = true; } } } if (wasChange && addToHistory) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } return wasChange; }