예제 #1
0
		public void StartDrawItem(DesignItem clickedOn, Type createItemType, IDesignPanel panel, System.Windows.Input.MouseEventArgs e)
		{
			var createdItem = CreateItem(panel.Context, createItemType);

			var startPoint = e.GetPosition(clickedOn.View);
			var operation = PlacementOperation.TryStartInsertNewComponents(clickedOn,
			                                                               new DesignItem[] { createdItem },
			                                                               new Rect[] { new Rect(startPoint.X, startPoint.Y, double.NaN, double.NaN) },
			                                                               PlacementType.AddItem);
			if (operation != null) {
				createdItem.Services.Selection.SetSelectedComponents(new DesignItem[] { createdItem });
				operation.Commit();
			}
			
			createdItem.Properties[Shape.StrokeProperty].SetValue(Brushes.Black);
			createdItem.Properties[Shape.StrokeThicknessProperty].SetValue(2d);
			createdItem.Properties[Shape.StretchProperty].SetValue(Stretch.None);
			
			var figure = new PathFigure();
			var geometry = new PathGeometry();
			var geometryDesignItem = createdItem.Services.Component.RegisterComponentForDesigner(geometry);
			var figureDesignItem = createdItem.Services.Component.RegisterComponentForDesigner(figure);
			createdItem.Properties[Path.DataProperty].SetValue(geometry);
			//geometryDesignItem.Properties[PathGeometry.FiguresProperty].CollectionElements.Add(figureDesignItem);
			figureDesignItem.Properties[PathFigure.StartPointProperty].SetValue(new Point(0,0));
			
			new DrawPathMouseGesture(figure, createdItem, clickedOn.View, changeGroup, this.ExtendedItem.GetCompleteAppliedTransformationToView()).Start(panel, (MouseButtonEventArgs) e);
		}
        public void StartDrawItem(DesignItem clickedOn, Type createItemType, IDesignPanel panel, System.Windows.Input.MouseEventArgs e)
        {
            var createdItem = CreateItem(panel.Context, createItemType);

            var startPoint = e.GetPosition(clickedOn.View);
            var operation  = PlacementOperation.TryStartInsertNewComponents(clickedOn,
                                                                            new DesignItem[] { createdItem },
                                                                            new Rect[] { new Rect(startPoint.X, startPoint.Y, double.NaN, double.NaN) },
                                                                            PlacementType.AddItem);

            if (operation != null)
            {
                createdItem.Services.Selection.SetSelectedComponents(new DesignItem[] { createdItem });
                operation.Commit();
            }

            createdItem.Properties[Shape.StrokeProperty].SetValue(Brushes.Black);
            createdItem.Properties[Shape.StrokeThicknessProperty].SetValue(2d);
            createdItem.Properties[Shape.StretchProperty].SetValue(Stretch.None);

            if (createItemType == typeof(Polyline))
            {
                createdItem.Properties[Polyline.PointsProperty].CollectionElements.Add(createdItem.Services.Component.RegisterComponentForDesigner(new Point(0, 0)));
            }
            else
            {
                createdItem.Properties[Polygon.PointsProperty].CollectionElements.Add(createdItem.Services.Component.RegisterComponentForDesigner(new Point(0, 0)));
            }

            new DrawPolylineMouseGesture(createdItem, clickedOn.View, changeGroup).Start(panel, (MouseButtonEventArgs)e);
        }
예제 #3
0
        void designPanel_DragOver(object sender, DragEventArgs e)
        {
            try
            {
                IDesignPanel designPanel = (IDesignPanel)sender;
                e.Effects = DragDropEffects.Copy;
                e.Handled = true;
                Point p = e.GetPosition(designPanel);

                if (moveLogic == null)
                {
                    if (e.Data.GetData(typeof(CreateComponentTool)) != this)
                    {
                        return;
                    }
                    // TODO: dropLayer in designPanel
                    designPanel.IsAdornerLayerHitTestVisible = false;
                    DesignPanelHitTestResult result = designPanel.HitTest(p, false, true, HitTestType.Default);

                    if (result.ModelHit != null)
                    {
                        designPanel.Focus();
                        DesignItem createdItem = CreateItem(designPanel.Context);
                        if (AddItemWithDefaultSize(result.ModelHit, createdItem, e.GetPosition(result.ModelHit.View)))
                        {
                            moveLogic = new MoveLogic(createdItem);

                            if (designPanel.Context.Services.Component is XamlComponentService)
                            {
                                ((XamlComponentService)designPanel.Context.Services.Component)
                                .RaiseComponentRegisteredAndAddedToContainer(createdItem);
                            }

                            createPoint = p;
                            // We'll keep the ChangeGroup open as long as the moveLogic is active.
                        }
                        else
                        {
                            // Abort the ChangeGroup created by the CreateItem() call.
                            changeGroup.Abort();
                        }
                    }
                }
                else if ((moveLogic.ClickedOn.View as FrameworkElement).IsLoaded)
                {
                    if (moveLogic.Operation == null)
                    {
                        moveLogic.Start(createPoint);
                    }
                    else
                    {
                        moveLogic.Move(p);
                    }
                }
            }
            catch (Exception x)
            {
                DragDropExceptionHandler.RaiseUnhandledException(x);
            }
        }
예제 #4
0
        public void StartDrawItem(DesignItem clickedOn, Type createItemType, IDesignPanel panel, MouseEventArgs e, Action <DesignItem> drawItemCallback)
        {
            var createdItem = CreateItem(panel.Context, createItemType);

            var startPoint = e.GetPosition(clickedOn.View);
            var operation  = PlacementOperation.TryStartInsertNewComponents(clickedOn,
                                                                            new DesignItem[] { createdItem },
                                                                            new Rect[] { new Rect(startPoint.X, startPoint.Y, double.NaN, double.NaN) },
                                                                            PlacementType.AddItem);

            if (operation != null)
            {
                createdItem.Services.Selection.SetSelectedComponents(new DesignItem[] { createdItem });
                operation.Commit();
            }

            createdItem.Properties[Shape.StrokeProperty].SetValue(Brushes.Black);
            createdItem.Properties[Shape.StrokeThicknessProperty].SetValue(2d);
            createdItem.Properties[Shape.StretchProperty].SetValue(Stretch.None);
            if (drawItemCallback != null)
            {
                drawItemCallback(createdItem);
            }

            var figure             = new PathFigure();
            var geometry           = new PathGeometry();
            var geometryDesignItem = createdItem.Services.Component.RegisterComponentForDesigner(geometry);
            var figureDesignItem   = createdItem.Services.Component.RegisterComponentForDesigner(figure);

            createdItem.Properties[Path.DataProperty].SetValue(geometry);
            //geometryDesignItem.Properties[PathGeometry.FiguresProperty].CollectionElements.Add(figureDesignItem);
            figureDesignItem.Properties[PathFigure.StartPointProperty].SetValue(new Point(0, 0));

            new DrawPathMouseGesture(figure, createdItem, clickedOn.View, changeGroup, this.ExtendedItem.GetCompleteAppliedTransformationToView()).Start(panel, (MouseButtonEventArgs)e);
        }
		public void StartDrawItem(DesignItem clickedOn, Type createItemType, IDesignPanel panel, System.Windows.Input.MouseEventArgs e)
		{
			var createdItem = CreateItem(panel.Context, createItemType);

			var startPoint = e.GetPosition(clickedOn.View);
			var operation = PlacementOperation.TryStartInsertNewComponents(clickedOn,
			                                                               new DesignItem[] { createdItem },
			                                                               new Rect[] { new Rect(startPoint.X, startPoint.Y, double.NaN, double.NaN) },
			                                                               PlacementType.AddItem);
			if (operation != null) {
				createdItem.Services.Selection.SetSelectedComponents(new DesignItem[] { createdItem });
				operation.Commit();
			}
			
			createdItem.Properties[Shape.StrokeProperty].SetValue(Brushes.Black);
			createdItem.Properties[Shape.StrokeThicknessProperty].SetValue(2d);
			createdItem.Properties[Shape.StretchProperty].SetValue(Stretch.None);
			
			if (createItemType == typeof(Polyline))
				createdItem.Properties[Polyline.PointsProperty].CollectionElements.Add(createdItem.Services.Component.RegisterComponentForDesigner(new Point(0,0)));
			else
				createdItem.Properties[Polygon.PointsProperty].CollectionElements.Add(createdItem.Services.Component.RegisterComponentForDesigner(new Point(0,0)));
			
			new DrawPolylineMouseGesture(createdItem, clickedOn.View, changeGroup).Start(panel, (MouseButtonEventArgs) e);
		}
예제 #6
0
        public void Start(IDesignPanel designPanel, MouseButtonEventArgs e)
        {
            if (designPanel == null)
            {
                throw new ArgumentNullException("designPanel");
            }
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }
            if (isStarted)
            {
                throw new InvalidOperationException("Gesture already was started");
            }

            isStarted        = true;
            this.designPanel = designPanel;
            this.services    = designPanel.Context.Services;
            if (designPanel.CaptureMouse())
            {
                RegisterEvents();
                OnStarted(e);
            }
            else
            {
                Stop();
            }
        }
예제 #7
0
 public void Deactivate(IDesignPanel designPanel)
 {
     designPanel.MouseDown -= OnMouseDown;
     designPanel.DragOver  -= designPanel_DragOver;
     designPanel.Drop      -= designPanel_Drop;
     designPanel.DragLeave -= designPanel_DragLeave;
 }
예제 #8
0
        public void StartDrawItem(DesignItem clickedOn, Type createItemType, IDesignPanel panel, MouseEventArgs e, Action <DesignItem> drawItemCallback)
        {
            var createdItem = CreateItem(panel.Context, createItemType);

            var startPoint = e.GetPosition(clickedOn.View);
            var operation  = PlacementOperation.TryStartInsertNewComponents(clickedOn,
                                                                            new DesignItem[] { createdItem },
                                                                            new Rect[] { new Rect(startPoint.X, startPoint.Y, double.NaN, double.NaN) },
                                                                            PlacementType.AddItem);

            if (operation != null)
            {
                createdItem.Services.Selection.SetSelectedComponents(new DesignItem[] { createdItem });
                operation.Commit();
            }

            createdItem.Properties[Shape.StrokeProperty].SetValue(Brushes.Black);
            createdItem.Properties[Shape.StrokeThicknessProperty].SetValue(2d);
            createdItem.Properties[Shape.StretchProperty].SetValue(Stretch.None);
            if (drawItemCallback != null)
            {
                drawItemCallback(createdItem);
            }

            var lineHandler = createdItem.Extensions.OfType <LineHandlerExtension>().First();

            lineHandler.DragListener.ExternalStart();

            new DrawLineMouseGesture(lineHandler, clickedOn.View, changeGroup).Start(panel, (MouseButtonEventArgs)e);
        }
예제 #9
0
 public void Activate(IDesignPanel designPanel)
 {
     designPanel.MouseDown += OnMouseDown;
     designPanel.DragOver  += designPanel_DragOver;
     designPanel.Drop      += designPanel_Drop;
     designPanel.DragLeave += designPanel_DragLeave;
 }
예제 #10
0
        void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left && MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left))
            {
                e.Handled = true;
                IDesignPanel             designPanel = (IDesignPanel)sender;
                DesignPanelHitTestResult result      = designPanel.HitTest(e.GetPosition(designPanel), false, true, HitTestType.Default);
                if (result.ModelHit != null)
                {
                    var darwItemBehaviors = result.ModelHit.Extensions.OfType <IDrawItemExtension>();
                    var drawItembehavior  = darwItemBehaviors.FirstOrDefault(x => x.CanItemBeDrawn(componentType));
                    if (drawItembehavior != null && drawItembehavior.CanItemBeDrawn(componentType))
                    {
                        drawItembehavior.StartDrawItem(result.ModelHit, componentType, designPanel, e, SetPropertiesForDrawnItem);
                    }
                    else
                    {
                        var placementBehavior = result.ModelHit.GetBehavior <IPlacementBehavior>();
                        if (placementBehavior != null)
                        {
                            var createdItem = CreateItem(designPanel.Context);

                            new CreateComponentMouseGesture(result.ModelHit, createdItem, changeGroup).Start(designPanel, e);
                            // CreateComponentMouseGesture now is responsible for the changeGroup created by CreateItem()
                            changeGroup = null;
                        }
                    }
                }
            }
        }
예제 #11
0
        void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            IDesignPanel             designPanel = (IDesignPanel)sender;
            DesignPanelHitTestResult result      = designPanel.HitTest(e.GetPosition(designPanel), false, true);

            if (result.ModelHit != null)
            {
                IHandlePointerToolMouseDown b = result.ModelHit.GetBehavior <IHandlePointerToolMouseDown>();
                if (b != null)
                {
                    b.HandleSelectionMouseDown(designPanel, e, result);
                }
                if (!e.Handled)
                {
                    if (e.ChangedButton == MouseButton.Left && MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left))
                    {
                        e.Handled = true;
                        ISelectionService selectionService = designPanel.Context.Services.Selection;
                        selectionService.SetSelectedComponents(new DesignItem[] { result.ModelHit }, SelectionTypes.Auto);
                        if (selectionService.IsComponentSelected(result.ModelHit))
                        {
                            new DragMoveMouseGesture(result.ModelHit, e.ClickCount == 2).Start(designPanel, e);
                        }
                    }
                }
            }
        }
예제 #12
0
		public void Dispose()
		{
			if (_designPanel != null) {
				_currentTool.Deactivate(_designPanel);
				_designPanel = null;
			}
		}
		public void HandleSelectionMouseDown(IDesignPanel designPanel, MouseButtonEventArgs e, DesignPanelHitTestResult result)
		{
			if (e.ChangedButton == MouseButton.Left && MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left)) {
				e.Handled = true;
				new RangeSelectionGesture(result.ModelHit).Start(designPanel, e);
			}
		}
예제 #14
0
		public void Activate(IDesignPanel designPanel)
		{
			designPanel.MouseDown += OnMouseDown;
			//designPanel.DragEnter += designPanel_DragOver;
			designPanel.DragOver += designPanel_DragOver;
			designPanel.Drop += designPanel_Drop;
			designPanel.DragLeave += designPanel_DragLeave;
		}
예제 #15
0
		public void Deactivate(IDesignPanel designPanel)
		{
			designPanel.MouseDown -= OnMouseDown;
			//designPanel.DragEnter -= designPanel_DragOver;
			designPanel.DragOver -= designPanel_DragOver;
			designPanel.Drop -= designPanel_Drop;
			designPanel.DragLeave -= designPanel_DragLeave;
		}
 public void HandleSelectionMouseDown(IDesignPanel designPanel, MouseButtonEventArgs e, DesignPanelHitTestResult result)
 {
     if (e.ChangedButton == MouseButton.Left && MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left))
     {
         e.Handled = true;
         new PartialRangeSelectionGesture(result.ModelHit).Start(designPanel, e);
     }
 }
예제 #17
0
 public void Dispose()
 {
     if (_designPanel != null)
     {
         _currentTool.Deactivate(_designPanel);
         _designPanel = null;
     }
 }
예제 #18
0
		public DefaultToolService(DesignContext context)
		{
			_currentTool = this.PointerTool;
			context.Services.RunWhenAvailable<IDesignPanel>(
				delegate(IDesignPanel designPanel) {
					_designPanel = designPanel;
					_currentTool.Activate(designPanel);
				});
		}
예제 #19
0
 public DefaultToolService(DesignContext context)
 {
     _currentTool = this.PointerTool;
     context.Services.RunWhenAvailable <IDesignPanel>(
         delegate(IDesignPanel designPanel) {
         _designPanel = designPanel;
         _currentTool.Activate(designPanel);
     });
 }
 internal static void Stop(ref InfoTextEnterArea grayOut)
 {
     if (grayOut != null)
     {
         IDesignPanel designPanel          = grayOut.designPanel;
         AdornerPanel adornerPanelToRemove = grayOut.adornerPanel;
         designPanel.Adorners.Remove(adornerPanelToRemove);
         grayOut = null;
     }
 }
        internal void OnAdornerRemove(AdornerPanel item)
        {
            if (!isVisible)
            {
                return;
            }

            IDesignPanel avs = Services.GetService <IDesignPanel>();

            avs.Adorners.Remove(item);
        }
        internal void OnAdornerAdd(AdornerPanel item)
        {
            if (!isVisible)
            {
                return;
            }

            item.SetAdornedElement(this.ExtendedItem.View, this.ExtendedItem);

            IDesignPanel avs = Services.GetService <IDesignPanel>();

            avs.Adorners.Add(item);
        }
 internal static void Stop(ref GrayOutDesignerExceptActiveArea grayOut)
 {
     if (grayOut != null)
     {
         Animate(grayOut.GrayOutBrush, Brush.OpacityProperty, 0);
         IDesignPanel    designPanel          = grayOut.designPanel;
         AdornerPanel    adornerPanelToRemove = grayOut.adornerPanel;
         DispatcherTimer timer = new DispatcherTimer();
         timer.Interval = animationTime;
         timer.Tick    += delegate {
             timer.Stop();
             designPanel.Adorners.Remove(adornerPanelToRemove);
         };
         timer.Start();
         grayOut = null;
     }
 }
예제 #24
0
        void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            IDesignPanel             designPanel = (IDesignPanel)sender;
            DesignPanelHitTestResult result      = designPanel.HitTest(e.GetPosition(designPanel), false, true,
                                                                       HitTestType.ElementSelection);

            if (result.ModelHit != null)
            {
                IHandlePointerToolMouseDown b = result.ModelHit.GetBehavior <IHandlePointerToolMouseDown>();
                if (b != null)
                {
                    b.HandleSelectionMouseDown(designPanel, e, result);
                }
                if (!e.Handled)
                {
                    if (e.ChangedButton == MouseButton.Left &&
                        MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left))
                    {
                        e.Handled = true;
                        ISelectionService selectionService = designPanel.Context.Services.Selection;
                        bool setSelectionIfNotMoving       = false;
                        if (selectionService.IsComponentSelected(result.ModelHit))
                        {
                            setSelectionIfNotMoving = true;
                            // There might be multiple components selected. We might have
                            // to set the selection to only the item clicked on
                            // (or deselect the item clicked on if Ctrl is pressed),
                            // but we should do so only if the user isn't performing a drag operation.
                        }
                        else
                        {
                            selectionService.SetSelectedComponents(new DesignItem[] { result.ModelHit },
                                                                   SelectionTypes.Auto);
                        }
                        if (selectionService.IsComponentSelected(result.ModelHit))
                        {
                            new DragMoveMouseGesture(result.ModelHit, e.ClickCount == 2,
                                                     setSelectionIfNotMoving).Start(designPanel, e);
                        }
                    }
                }
            }
        }
예제 #25
0
		public void Start(IDesignPanel designPanel, MouseButtonEventArgs e)
		{
			if (designPanel == null)
				throw new ArgumentNullException("designPanel");
			if (e == null)
				throw new ArgumentNullException("e");
			if (isStarted)
				throw new InvalidOperationException("Gesture already was started");
			
			isStarted = true;
			this.designPanel = designPanel;
			this.services = designPanel.Context.Services;
			if (designPanel.CaptureMouse()) {
				RegisterEvents();
				OnStarted(e);
			} else {
				Stop();
			}
		}
        void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left && MouseGestureBase.IsOnlyButtonPressed(e, MouseButton.Left))
            {
                e.Handled = true;
                IDesignPanel             designPanel = (IDesignPanel)sender;
                DesignPanelHitTestResult result      = designPanel.HitTest(e.GetPosition(designPanel), false, true, HitTestType.Default);
                if (result.ModelHit != null)
                {
                    IPlacementBehavior behavior = result.ModelHit.GetBehavior <IPlacementBehavior>();
                    if (behavior != null)
                    {
                        DesignItem createdItem = CreateItem(designPanel.Context);

                        new CreateComponentMouseGesture(result.ModelHit, createdItem, changeGroup).Start(designPanel, e);
                        // CreateComponentMouseGesture now is responsible for the changeGroup created by CreateItem()
                        changeGroup = null;
                    }
                }
            }
        }
예제 #27
0
		public void StartDrawItem(DesignItem clickedOn, Type createItemType, IDesignPanel panel, System.Windows.Input.MouseEventArgs e)
		{
			var createdItem = CreateItem(panel.Context, createItemType);

			var startPoint = e.GetPosition(clickedOn.View);
			var operation = PlacementOperation.TryStartInsertNewComponents(clickedOn,
			                                                               new DesignItem[] { createdItem },
			                                                               new Rect[] { new Rect(startPoint.X, startPoint.Y, double.NaN, double.NaN) },
			                                                               PlacementType.AddItem);
			if (operation != null) {
				createdItem.Services.Selection.SetSelectedComponents(new DesignItem[] { createdItem });
				operation.Commit();
			}
			
			createdItem.Properties[Shape.StrokeProperty].SetValue(Brushes.Black);
			createdItem.Properties[Shape.StrokeThicknessProperty].SetValue(2d);
			createdItem.Properties[Shape.StretchProperty].SetValue(Stretch.None);
			
			var lineHandler = createdItem.Extensions.OfType<LineHandlerExtension>().First();
			lineHandler.DragListener.ExternalStart();
			
			new DrawLineMouseGesture(lineHandler, clickedOn.View, changeGroup).Start(panel, (MouseButtonEventArgs) e);
		}
예제 #28
0
		public void Deactivate(IDesignPanel designPanel)
		{
			designPanel.MouseDown -= OnMouseDown;
		}
예제 #29
0
 public void Activate(IDesignPanel designPanel)
 {
     designPanel.MouseDown += OnMouseDown;
 }
예제 #30
0
 public void Deactivate(IDesignPanel designPanel)
 {
     designPanel.MouseDown -= OnMouseDown;
 }
        void designPanel_DragOver(object sender, DragEventArgs e)
        {
            try
            {
                IDesignPanel designPanel = (IDesignPanel)sender;
                e.Effects = DragDropEffects.Copy;
                e.Handled = true;
                Point p = e.GetPosition(designPanel);

                if (moveLogic == null)
                {
                    if (ChangeGroup != null)
                    {
                        ChangeGroup.Abort();
                        ChangeGroup = null;
                    }
                    ChangeGroup = designPanel.Context.RootItem.OpenGroup("Add Control");
                    designPanel.IsAdornerLayerHitTestVisible = false;
                    DesignPanelHitTestResult result = designPanel.HitTest(p, false, true, HitTestType.Default);

                    if (result.ModelHit != null)
                    {
                        designPanel.Focus();
                        var items = CreateItemsWithPosition(designPanel.Context, e.GetPosition(result.ModelHit.View), e);
                        if (items != null)
                        {
                            if (AddItems(result.ModelHit, items))
                            {
                                moveLogic = new MoveLogic(items[0]);

                                foreach (var designItem in items)
                                {
                                    if (designPanel.Context.Services.Component is XamlComponentService)
                                    {
                                        ((XamlComponentService)designPanel.Context.Services.Component).RaiseComponentRegisteredAndAddedToContainer(designItem);
                                    }
                                }
                                createPoint = p;
                            }
                            else
                            {
                                ChangeGroup.Abort();
                                ChangeGroup = null;
                            }
                        }
                        else
                        {
                            e.Effects = DragDropEffects.None;
                        }
                    }
                }
                else if ((moveLogic.ClickedOn.View as FrameworkElement).IsLoaded)
                {
                    if (moveLogic.Operation == null)
                    {
                        moveLogic.Start(createPoint);
                    }
                    else
                    {
                        moveLogic.Move(p);
                    }
                }
            }
            catch (Exception x)
            {
                DragDropExceptionHandler.RaiseUnhandledException(x);
            }
        }
예제 #32
0
		public void Activate(IDesignPanel designPanel)
		{
			designPanel.MouseDown += OnMouseDown;
		}
예제 #33
0
 public void StartDrawItem(DesignItem clickedOn, Type createItemType, IDesignPanel panel, MouseEventArgs e,
                           Action <DesignItem> drawItemCallback)
 {
     throw new NotImplementedException();
 }