private void PushUndoStack() { // Undo/Redo ISupportUndo pageVMUndo = designerCanvas.DataContext as ISupportUndo; IGroupOperation pageVMGroup = designerCanvas.DataContext as IGroupOperation; if (pageVMUndo == null) { return; } CompositeCommand cmds = new CompositeCommand(); IPagePropertyData Page = designerCanvas.DataContext as IPagePropertyData; bool bHasGroup = Page.GetSelectedwidgets().Any(a => a.IsGroup); // Create undoable command for widgets foreach (WidgetViewModBase item in _infoItems) { item.PropertyMementos.SetPropertyNewValue("Left", item.Raw_Left); item.PropertyMementos.SetPropertyNewValue("Top", item.Raw_Top); if (item.WidgetType == WidgetType.Toast && item.Top != 0) { item.PropertyMementos.SetPropertyNewValue("DisplayPosition", ToastDisplayPosition.UserSetting); } PropertyChangeCommand cmd = new PropertyChangeCommand(item, item.PropertyMementos); cmds.AddCommand(cmd); } // Create undoable command for groups if (pageVMGroup != null) { List <Guid> groupGuids = _groups.Select(x => x.WidgetID).ToList(); if (designerItem.ParentID != Guid.Empty) { groupGuids.Add(designerItem.ParentID); } if (groupGuids.Count > 0) { UpdateGroupCommand cmd = new UpdateGroupCommand(pageVMGroup, groupGuids); cmds.AddCommand(cmd); } } // Push to undo stack if (cmds.Count > 0) { List <IWidgetPropertyData> allSelects = _selectionService.GetSelectedWidgets(); cmds.AddCommand(new SelectCommand(pageVMGroup, allSelects)); cmds.DeselectAllWidgetsFirst(); pageVMUndo.UndoManager.Push(cmds); } }
private void RotateThumb_DragCompleted(object sender, DragCompletedEventArgs e) { if (_infoItems.Count <= 0) { return; } // Undo/Redo ISupportUndo pageVMUndo = canvas.DataContext as ISupportUndo; IGroupOperation pageVMGroup = canvas.DataContext as IGroupOperation; if (pageVMUndo == null) { return; } CompositeCommand cmds = new CompositeCommand(); // Create undoable command for widgets foreach (WidgetViewModBase item in _infoItems) { item.PropertyMementos.SetPropertyNewValue("RotateAngle", item.RotateAngle); if (this.designerItem.IsGroup) { item.PropertyMementos.SetPropertyNewValue("Left", item.Raw_Left); item.PropertyMementos.SetPropertyNewValue("Top", item.Raw_Top); } PropertyChangeCommand cmd = new PropertyChangeCommand(item, item.PropertyMementos); cmds.AddCommand(cmd); } // Create undoable command for groups if (pageVMGroup != null) { List <Guid> groupGuids = new List <Guid>(); if (designerItem.ParentID != Guid.Empty) { groupGuids.Add(designerItem.ParentID); UpdateGroupCommand cmd = new UpdateGroupCommand(pageVMGroup, groupGuids); cmds.AddCommand(cmd); } if (this.designerItem.IsGroup) { groupGuids.Add((designerItem.DataContext as GroupViewModel).WidgetID); UpdateGroupCommand cmd = new UpdateGroupCommand(pageVMGroup, groupGuids); cmds.AddCommand(cmd); } } // Push to undo stack if (cmds.Count > 0) { List <IWidgetPropertyData> allSelects = _selectionService.GetSelectedWidgets(); cmds.AddCommand(new SelectCommand(pageVMGroup, allSelects)); cmds.DeselectAllWidgetsFirst(); pageVMUndo.UndoManager.Push(cmds); } }