Beispiel #1
0
        public override void CommitDrag(Point dragTerminationPoint, Point offset)
        {
            //  This is really messy. This ought to be generalized somehow.

            //  If the drag ended over a layer icon, then perform a layer membership operation

            IEnumerable <LayerIcon> occludedLayerIcons = Utility.DrawingAids.FindOccludedIcons <LayerIcon>(Designer.LayerIconsListBox,
                                                                                                           Utility.DrawingAids.NormalizePoint(Designer.LayerIconsListBox, Designer.IconSurface, dragTerminationPoint));

            if (occludedLayerIcons.Count() > 0)
            {
                CancelDrag();
                LayerIcon       layerIcon = occludedLayerIcons.First();
                ViewModel.Layer layer     = layerIcon.ReferencedObject as ViewModel.Layer;

                if (layer.Members.Contains(ReferencedObject))
                {
                    if (layer != Designer.DefaultLayer)
                    {
                        Designer.RemoveLayerMember(layer, ReferencedObject as ObjectModel.ITransitionEndpoint);
                    }
                }
                else
                {
                    Designer.AddLayerMember(layer, ReferencedObject as ObjectModel.ITransitionEndpoint, layer.DefaultGroupStatus, (ReferencedObject as ObjectModel.ITransitionEndpoint).LeftTopPosition);
                }
            }
            else
            {
                base.CommitDrag(dragTerminationPoint, offset);
            }
        }
        internal AddLayerRecord(ViewModel.ViewModelController controller, ViewModel.Layer layer) : base(ActionTypes.AddLayer, controller, layer)
        {
            DefaultGroupStatus = layer.DefaultGroupStatus;
            MemberIds          = layer.Members.Select(m => m.Id).ToArray();

#if DEBUGUNDOREDO
            Debug.WriteLine($@">>> AddLayerRecord.AddLayerRecord: Created {UnitDescription} record, ID: {Id}, Name: {Name}");
#endif
        }
        public override void Do(IOleUndoManager pUndoManager)
        {
#if DEBUGUNDOREDO
            Debug.WriteLine(">>> SetLayerActiveRecord.Do");
#endif

            ViewModel.Layer newLayer = Controller.StateMachine.Find(Id) as ViewModel.Layer;
            ViewModel.Layer oldLayer = Controller.StateMachine.Find(OldLayerId) as ViewModel.Layer;

            Designer.CurrentLayer = newLayer;
        }
        public override void Do(IOleUndoManager pUndoManager)
        {
#if DEBUGUNDOREDO
            Debug.WriteLine(">>> DeleteLayerRecord.Do");
#endif
            using (new ViewModel.ViewModelController.GuiChangeBlock(Controller))
            {
                ViewModel.Layer targetLayer    = Controller.StateMachine.Layers.Where(r => r.Id == Id).First();
                AddLayerRecord  addLayerRecord = new AddLayerRecord(Controller, targetLayer);
                Controller.StateMachine.Layers.Remove(targetLayer);

                Controller.UndoManager.Add(addLayerRecord);
            }
        }
        public override void Do(IOleUndoManager pUndoManager)
        {
#if DEBUGUNDOREDO
            Debug.WriteLine(">>> DeleteLayerMemberRecord.Do");
#endif
            using (new ViewModel.ViewModelController.GuiChangeBlock(Controller))
            {
                ViewModel.Layer layer = Controller.StateMachine.Find(LayerId) as ViewModel.Layer;
                ObjectModel.ITransitionEndpoint member        = Controller.StateMachine.Find(MemberId) as ObjectModel.ITransitionEndpoint;
                ObjectModel.LayerPosition       layerPosition = Controller.StateMachine.Find(Id) as ObjectModel.LayerPosition;
                Controller.UndoManager.Add(new AddLayerMemberRecord(Controller, layerPosition, member));
                member.LayerPositions.Remove(layerPosition);
                layer.Members.Remove(member);
            }
        }
Beispiel #6
0
        public override void Drag(Point mousePosition, Point offset)
        {
            base.Drag(mousePosition, offset);
            if (CandidateLayerIcon != null)
            {
                CandidateLayerIcon.MembershipAction = LayerIcon.MembershipActions.None;
                CandidateLayerIcon = null;
            }

            // If the mouse is over a layer icon, let the user know

            IEnumerable <LayerIcon> occludedLayerIcons = Utility.DrawingAids.FindOccludedIcons <LayerIcon>(Designer.LayerIconsListBox,
                                                                                                           Utility.DrawingAids.NormalizePoint(Designer.LayerIconsListBox, Designer.IconSurface, mousePosition));

            if (occludedLayerIcons.Count() == 1)
            {
                LayerIcon       layerIcon = occludedLayerIcons.First();
                ViewModel.Layer layer     = layerIcon.ReferencedObject as ViewModel.Layer;

                if (layer.Members.Contains(ReferencedObject))
                {
                    if (layer.IsDefaultLayer)
                    {
                        layerIcon.MembershipAction = LayerIcon.MembershipActions.Forbidden;
                    }
                    else
                    {
                        if ((ReferencedObject as LayeredPositionableObject).CurrentLayerPosition.Layer == layer &&
                            (ReferencedObject as LayeredPositionableObject).CurrentLayerPosition.GroupStatus == LayerPosition.GroupStatuses.Implicit)
                        {
                            layerIcon.MembershipAction = LayerIcon.MembershipActions.Forbidden;
                        }
                        else
                        {
                            layerIcon.MembershipAction = LayerIcon.MembershipActions.Remove;
                        }
                    }
                }
                else
                {
                    layerIcon.MembershipAction = LayerIcon.MembershipActions.Add;
                }
                CandidateLayerIcon = layerIcon;
            }
        }
        //  Constructor for new object creation through commands

        private Group(ViewModelController controller, string rootName, ViewModel.Layer currentLayer) : base(controller, controller.StateMachine.Groups, rootName, currentLayer)
        {
        }
 internal static Group Create(ViewModelController controller, IconControls.OptionsPropertiesPage optionsPage, ViewModel.Layer currentLayer)
 {
     using (new UndoRedo.DontLogBlock(controller))
     {
         return(new Group(controller, optionsPage.GroupRootName, currentLayer));
     }
 }
 internal TransitionHost(ViewModel.ViewModelController controller, IEnumerable <NamedObject> existingObjectList, string rootName, ViewModel.Layer currentLayer) : base(controller, existingObjectList, rootName, currentLayer)
 {
     TransitionsFrom = new ObservableCollection <ObjectModel.ITransition>();
     TransitionsTo   = new ObservableCollection <ObjectModel.ITransition>();
 }
        //  Constructor for new object creation through commands

        private TransitionHost(ViewModelController controller, string rootName, ViewModel.Layer currentLayer) : base(controller, controller.StateMachine.States, rootName, currentLayer)
        {
            TransitionsFrom = new ObservableCollection <ObjectModel.ITransition>();
            TransitionsTo   = new ObservableCollection <ObjectModel.ITransition>();
        }
        internal SetLayerActiveRecord(ViewModel.ViewModelController controller, DesignerControl designer, ViewModel.Layer newLayer, ViewModel.Layer oldLayer) : base(ActionTypes.AddLayer, controller, newLayer)
        {
            Designer   = designer;
            OldLayerId = oldLayer?.Id ?? TrackableObject.NullId;
#if DEBUGUNDOREDO
            Debug.WriteLine($@">>> SetLayerActiveRecord.SetLayerActiveRecord: Created {UnitDescription} record, ID: {Id}, Name: {newLayer.Name}, Old Layer ID: {OldLayerId}, Old Layer Name: {oldLayer?.Name ?? "<null>"}");
#endif
        }
        internal DeleteLayerRecord(ViewModel.ViewModelController controller, ViewModel.Layer layer) : base(ActionTypes.DeleteLayer, controller, layer)
        {
#if DEBUGUNDOREDO
            Debug.WriteLine($@">>> DeleteLayerRecord.DeleteLayerRecord: Created {UnitDescription} record, ID: {Id}, Name: {Name}");
#endif
        }