Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e)
        {
            //Initialize to avoid exception
            if (this.designerItem == null || this.designerCanvas == null)
            {
                return;
            }


            //Initialize the selected widgets' context when first move
            if (bIsMousePressMove == false)
            {
                designerItem.IsAfterDraged = true;
                if (designerItem.IsSelected == false)
                {
                    designerItem.SelectCurrentWidget();
                }

                if (Keyboard.IsKeyDown(Key.LeftCtrl) == true || Keyboard.IsKeyDown(Key.RightCtrl) == true)
                {
                    IsCtrlPressed = true;
                }
                else
                {
                    IsCtrlPressed = false;
                }

                if (IsCtrlPressed == true && Mouse.LeftButton == MouseButtonState.Pressed)
                {
                    //Cursor = CopyCur;
                    //designerItem.IsStyleBrushModel = null;
                    if (designerItem == null)
                    {
                        return;
                    }
                    WidgetViewModBase wVM = designerItem.DataContext as WidgetViewModBase;
                    wVM.IsBrushModel = null;
                }

                AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(designerCanvas);
                if (adornerLayer != null)
                {
                    adorner = new PreveiwMoveAdorner(designerCanvas);
                    if (adorner != null)
                    {
                        adornerLayer.Add(adorner);
                    }
                }

                IPagePropertyData Page = designerCanvas.DataContext as IPagePropertyData;
                foreach (WidgetViewModBase item in Page.GetSelectedwidgets())
                {
                    if (item.IsLocked == true)
                    {
                        continue;
                    }

                    if (item.IsGroup == true)
                    {
                        GroupViewModel group = item as GroupViewModel;
                        if (group == null)
                        {
                            continue;
                        }

                        // Create a property memento when drag start
                        foreach (WidgetViewModBase child in group.WidgetChildren)
                        {
                            child.CreateNewPropertyMementos();
                            child.PropertyMementos.AddPropertyMemento(new PropertyMemento("Left", child.Raw_Left, child.Raw_Left));
                            child.PropertyMementos.AddPropertyMemento(new PropertyMemento("Top", child.Raw_Top, child.Raw_Top));

                            _infoItems.Add(child);
                        }
                        _groups.Add(group);
                    }
                    else
                    {
                        item.CreateNewPropertyMementos();

                        item.PropertyMementos.AddPropertyMemento(new PropertyMemento("Left", item.Raw_Left, item.Raw_Left));
                        item.PropertyMementos.AddPropertyMemento(new PropertyMemento("Top", item.Raw_Top, item.Raw_Top));

                        if (item.WidgetType == WidgetType.Toast && item.Top == 0)
                        {
                            item.PropertyMementos.AddPropertyMemento(new PropertyMemento("DisplayPosition", ToastDisplayPosition.Top, ToastDisplayPosition.Top));
                        }
                        _infoItems.Add(item);
                    }
                }
                bIsMousePressMove = true;
            }

            SendFirePositionEvent(false);

            //Move adorner to show drag process
            MoveAdorner(sender, e);

            //Move Widgets, the older solution, discarded
            //if (_infoItems.Count > 0 || _groups.Count > 0)
            //{
            //    MoveSelectedWidgets(sender,e);
            //}

            //set routed event is handled
            e.Handled = true;
        }