public MainPage() { this.InitializeComponent(); // Instantiate lists and stacks to keep track of the state _shapeList = new List <PaintBase>(); _undoStack = new Stack <List <PaintBase> >(); _redoStack = new Stack <List <PaintBase> >(); // Initialize invokers for the command pattern _canvasInvoker = new ClickInvoker(); _userInvoker = new UserActionInvoker(); // Set initial selection to circle CircleToggle.IsChecked = true; _cmd = new DrawShapeCommand(this) { ShapeType = CircleShape.Instance }; // Set canvas Z indici Canvas.SetZIndex(BottomPanel, 100); Canvas.SetZIndex(TopBar, 100); Canvas.SetZIndex(ShapeList, 100); }
/// <summary> /// Handles UI toggles /// </summary> private void BrushToggle_OnClick(object sender, RoutedEventArgs e) { if (sender is AppBarToggleButton button) { // Make sure all toggles are off before turning a new one on ClickSelectToggle.IsChecked = false; SelectToggle.IsChecked = false; MoveToggle.IsChecked = false; ScaleToggle.IsChecked = false; CircleToggle.IsChecked = false; RectangleToggle.IsChecked = false; EditDecorator.IsChecked = false; // Check what button is toggled and change the active command accordingly switch (button.Name) { case "ClickSelectToggle": ClickSelectToggle.IsChecked = true; _cmd = new ClickSelectCommand(this); break; case "SelectToggle": SelectToggle.IsChecked = true; _cmd = new SelectCommand(this); break; case "EditDecorator": EditDecorator.IsChecked = true; _cmd = new ChangeDecoratorCommand(this); break; case "MoveToggle": MoveToggle.IsChecked = true; _cmd = new MoveCommand(this); break; case "ScaleToggle": ScaleToggle.IsChecked = true; _cmd = new ScaleCommand(this); break; case "RectangleToggle": RectangleToggle.IsChecked = true; _cmd = new DrawShapeCommand(this) { ShapeType = RectangleShape.Instance }; break; case "CircleToggle": CircleToggle.IsChecked = true; _cmd = new DrawShapeCommand(this) { ShapeType = CircleShape.Instance }; break; } } }
public void StoreAndExecute(ICanvasCommand command) { try{ command.Execute(); OnExecuteSuccess(); } catch (Exception e) { OnExcuteException(e); } }
/// <summary> /// Invokes the command for pointer move /// </summary> /// <param name="cmd">Command</param> public async Task InvokePointerMovedAsync(ICanvasCommand cmd) { await cmd.PointerMovedExecuteAsync(); }