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);
			}
		}
        /// <summary>
        /// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match.
        /// Hit testing continues while the callback returns true.
        /// </summary>
        public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface, Predicate<DesignPanelHitTestResult> callback, HitTestType hitTestType)
        {
            if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width || mousePosition.Y > this.RenderSize.Height) {
                return;
            }
            // First try hit-testing on the adorner layer.

            bool continueHitTest = true;

            HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? (x => FilterHitTestInvisibleElements(x, hitTestType));
            CustomHitTestFilterBehavior = null;

            if (testAdorners) {

                RunHitTest(
                    _adornerLayer, mousePosition, filterBehavior,
                    delegate(HitTestResult result) {
                        if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
                            DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
                            DependencyObject obj = result.VisualHit;
                            while (obj != null && obj != _adornerLayer) {
                                AdornerPanel adorner = obj as AdornerPanel;
                                if (adorner != null) {
                                    customResult.AdornerHit = adorner;
                                }
                                obj = VisualTreeHelper.GetParent(obj);
                            }
                            continueHitTest = callback(customResult);
                            return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop;
                        } else {
                            return HitTestResultBehavior.Continue;
                        }
                    });
            }

            if (continueHitTest && testDesignSurface) {
                RunHitTest(
                    this.Child, mousePosition, filterBehavior,
                    delegate(HitTestResult result) {
                        if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
                            DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);

                            ViewService viewService = _context.Services.View;
                            DependencyObject obj = result.VisualHit;

                            while (obj != null) {
                                if ((customResult.ModelHit = viewService.GetModel(obj)) != null)
                                    break;
                                obj = VisualTreeHelper.GetParent(obj);
                            }
                            if (customResult.ModelHit == null) {
                                customResult.ModelHit = _context.RootItem;
                            }

                            continueHitTest = callback(customResult);
                            return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop;
                        } else {
                            return HitTestResultBehavior.Continue;
                        }
                    }
                );
            }
        }
		void MouseUp(object sender,MouseEventArgs e)
		{
			result = designPanel.HitTest(e.GetPosition(designPanel), false, true);
			if (result.ModelHit == ExtendedItem && result.VisualHit is TextBlock && numClicks>0){
				if (!isGettingDragged) {
					PlaceEditor(result.VisualHit, e);
					editor.Visibility = Visibility.Visible;
				}
			}else{ // Clicked outside the Text - > hide the editor and make the actualt text visible again
				editor.Visibility = Visibility.Hidden;
				if (textBlock != null) textBlock.Visibility = Visibility.Visible;
			}

			isMouseDown = false;
			isGettingDragged = false;
		}
		void MouseMove(object sender, MouseEventArgs e)
		{
			Current += e.GetPosition(null) - Start;
			result = designPanel.HitTest(e.GetPosition(designPanel), false, true);
			if (result.ModelHit == ExtendedItem && result.VisualHit is TextBlock) {
				if (numClicks > 0) {
					if (isMouseDown &&
					    ((Current-Start).X > SystemParameters.MinimumHorizontalDragDistance
					     || (Current-Start).Y > SystemParameters.MinimumVerticalDragDistance)) {

						isGettingDragged = true;
						editor.Focus();
					}
				}
				DrawBorder((FrameworkElement) result.VisualHit);
			}else{
				RemoveBorder();
			}
		}
		void MouseDown(object sender,MouseEventArgs e)
		{
			result = designPanel.HitTest(e.GetPosition(designPanel), false, true);
			if(result.ModelHit==ExtendedItem && result.VisualHit is TextBlock) {
				Start = Mouse.GetPosition(null);
				Current = Start;
				isMouseDown = true;
			}
			numClicks++;
		}
		/// <summary>
		/// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match.
		/// Hit testing continues while the callback returns true.
		/// </summary>
		public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface, Predicate<DesignPanelHitTestResult> callback, HitTestType hitTestType)
		{
			if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width || mousePosition.Y > this.RenderSize.Height) {
				return;
			}
			// First try hit-testing on the adorner layer.
			
			bool continueHitTest = true;
			
			hitTestElements.Clear();
			
			if (testAdorners) {
				RunHitTest(
					_adornerLayer, mousePosition, FilterHitTestInvisibleElements,
					delegate(HitTestResult result) {
						if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
							DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
							DependencyObject obj = result.VisualHit;
							while (obj != null && obj != _adornerLayer) {
								AdornerPanel adorner = obj as AdornerPanel;
								if (adorner != null) {
									customResult.AdornerHit = adorner;
								}
								obj = VisualTreeHelper.GetParent(obj);
							}
							continueHitTest = callback(customResult);
							return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop;
						} else {
							return HitTestResultBehavior.Continue;
						}
					});
			}
			
			if (continueHitTest && testDesignSurface) {
				RunHitTest(
					this.Child, mousePosition, FilterHitTestInvisibleElements,
					delegate(HitTestResult result) {
						if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
							DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
							
							ViewService viewService = _context.Services.View;
							DependencyObject obj = result.VisualHit;
							
							if (hitTestType == HitTestType.ElementSelection)
							{
								if (Keyboard.IsKeyDown(Key.LeftAlt))
								if (lastElement != null && lastElement != _context.RootItem.Component &&
									hitTestElements.Contains(lastElement))
								{
									var idx = hitTestElements.IndexOf(lastElement) - 1;
									if (idx >= 0)
										obj = hitTestElements[idx];
								}
							}
							
							while (obj != null) {
								if ((customResult.ModelHit = viewService.GetModel(obj)) != null)
									break;
								obj = VisualTreeHelper.GetParent(obj);
							}
							if (customResult.ModelHit == null) {
								customResult.ModelHit = _context.RootItem;
							}
							
							if (hitTestType == HitTestType.ElementSelection)
							{
								lastElement = obj;
							}
							
							
							continueHitTest = callback(customResult);
							return continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop;
						} else {
							return HitTestResultBehavior.Continue;
						}
					}
				);
			}
		}
Exemple #7
0
        /// <summary>
        /// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match.
        /// Hit testing continues while the callback returns true.
        /// </summary>
        public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface,
                            Predicate <DesignPanelHitTestResult> callback, HitTestType hitTestType)
        {
            if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width ||
                mousePosition.Y > this.RenderSize.Height)
            {
                return;
            }
            // First try hit-testing on the adorner layer.

            bool continueHitTest = true;

            HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ??
                                                   (x => FilterHitTestInvisibleElements(x, hitTestType));

            CustomHitTestFilterBehavior = null;

            if (testAdorners)
            {
                RunHitTest(
                    _adornerLayer, mousePosition, filterBehavior,
                    delegate(HitTestResult result)
                {
                    if (result != null && result.VisualHit != null && result.VisualHit is Visual)
                    {
                        DesignPanelHitTestResult customResult =
                            new DesignPanelHitTestResult((Visual)result.VisualHit);
                        DependencyObject obj = result.VisualHit;
                        while (obj != null && obj != _adornerLayer)
                        {
                            AdornerPanel adorner = obj as AdornerPanel;
                            if (adorner != null)
                            {
                                customResult.AdornerHit = adorner;
                            }
                            obj = VisualTreeHelper.GetParent(obj);
                        }
                        continueHitTest = callback(customResult);
                        return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop);
                    }
                    else
                    {
                        return(HitTestResultBehavior.Continue);
                    }
                });
            }

            if (continueHitTest && testDesignSurface)
            {
                RunHitTest(
                    this.Child, mousePosition, filterBehavior,
                    delegate(HitTestResult result)
                {
                    if (result != null && result.VisualHit != null && result.VisualHit is Visual)
                    {
                        DesignPanelHitTestResult customResult =
                            new DesignPanelHitTestResult((Visual)result.VisualHit);

                        ViewService viewService = _context.Services.View;
                        DependencyObject obj    = result.VisualHit;

                        while (obj != null)
                        {
                            if ((customResult.ModelHit = viewService.GetModel(obj)) != null)
                            {
                                break;
                            }
                            obj = VisualTreeHelper.GetParent(obj);
                        }
                        if (customResult.ModelHit == null)
                        {
                            customResult.ModelHit = _context.RootItem;
                        }


                        continueHitTest = callback(customResult);
                        return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop);
                    }
                    else
                    {
                        return(HitTestResultBehavior.Continue);
                    }
                }
                    );
            }
        }
Exemple #8
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(this.GetType()) != this)
                    {
                        return;
                    }
                    // TODO: dropLayer in designPanel
                    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));
                        if (items != null)
                        {
                            if (AddItemsWithDefaultSize(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;
                                // 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
                        {
                            DesignItem createdItem = CreateItemWithPosition(designPanel.Context, e.GetPosition(result.ModelHit.View));
                            if (AddItemsWithDefaultSize(result.ModelHit, new[] { createdItem }))
                            {
                                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);
            }
        }
        void MouseUp(object sender, MouseEventArgs e)
        {
            result = designPanel.HitTest(e.GetPosition(designPanel), true, true, HitTestType.Default);
            if (((result.ModelHit == ExtendedItem && result.VisualHit is TextBlock) || (result.VisualHit != null && result.VisualHit.TryFindParent<InPlaceEditor>() == editor)) && numClicks > 0)
            {
                if (!isGettingDragged) {
                    PlaceEditor(ExtendedItem.View, e);
                    foreach (var extension in ExtendedItem.Extensions)
                    {
                        if (!(extension is InPlaceEditorExtension) && !(extension is SelectedElementRectangleExtension)) {
                            ExtendedItem.RemoveExtension(extension);
                        }
                    }
                    editor.Visibility = Visibility.Visible;
                }
            }
            else { // Clicked outside the Text - > hide the editor and make the actualt text visible again
                editor.Visibility = Visibility.Hidden;
                if (textBlock != null) {
                    textBlock.Visibility = Visibility.Visible;
                }
                this.ExtendedItem.ReapplyAllExtensions();
            }

            isMouseDown = false;
            isGettingDragged = false;
        }
Exemple #10
0
 public new 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);
     }
 }
        /// <summary>
        /// Performs a hit test on the design surface, raising <paramref name="callback"/> for each match.
        /// Hit testing continues while the callback returns true.
        /// </summary>
        public void HitTest(Point mousePosition, bool testAdorners, bool testDesignSurface, Predicate <DesignPanelHitTestResult> callback, HitTestType hitTestType)
        {
            if (mousePosition.X < 0 || mousePosition.Y < 0 || mousePosition.X > this.RenderSize.Width || mousePosition.Y > this.RenderSize.Height)
            {
                return;
            }
            // First try hit-testing on the adorner layer.

            bool continueHitTest = true;

            HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? FilterHitTestInvisibleElements;

            CustomHitTestFilterBehavior = null;
            hitTestElements.Clear();

            if (testAdorners)
            {
                RunHitTest(
                    _adornerLayer, mousePosition, filterBehavior,
                    delegate(HitTestResult result) {
                    if (result != null && result.VisualHit != null && result.VisualHit is Visual)
                    {
                        DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
                        DependencyObject obj = result.VisualHit;
                        while (obj != null && obj != _adornerLayer)
                        {
                            AdornerPanel adorner = obj as AdornerPanel;
                            if (adorner != null)
                            {
                                customResult.AdornerHit = adorner;
                            }
                            obj = VisualTreeHelper.GetParent(obj);
                        }
                        continueHitTest = callback(customResult);
                        return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop);
                    }
                    else
                    {
                        return(HitTestResultBehavior.Continue);
                    }
                });
            }

            if (continueHitTest && testDesignSurface)
            {
                RunHitTest(
                    this.Child, mousePosition, filterBehavior,
                    delegate(HitTestResult result) {
                    if (result != null && result.VisualHit != null && result.VisualHit is Visual)
                    {
                        DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);

                        ViewService viewService = _context.Services.View;
                        DependencyObject obj    = result.VisualHit;

                        if (hitTestType == HitTestType.ElementSelection)
                        {
                            if (Keyboard.IsKeyDown(Key.LeftAlt))
                            {
                                if (lastElement != null && lastElement != _context.RootItem.Component &&
                                    hitTestElements.Contains(lastElement))
                                {
                                    var idx = hitTestElements.IndexOf(lastElement) - 1;
                                    if (idx >= 0)
                                    {
                                        obj = hitTestElements[idx];
                                    }
                                }
                            }
                        }

                        while (obj != null)
                        {
                            if ((customResult.ModelHit = viewService.GetModel(obj)) != null)
                            {
                                break;
                            }
                            obj = VisualTreeHelper.GetParent(obj);
                        }
                        if (customResult.ModelHit == null)
                        {
                            customResult.ModelHit = _context.RootItem;
                        }

                        if (hitTestType == HitTestType.ElementSelection)
                        {
                            lastElement = obj;
                        }


                        continueHitTest = callback(customResult);
                        return(continueHitTest ? HitTestResultBehavior.Continue : HitTestResultBehavior.Stop);
                    }
                    else
                    {
                        return(HitTestResultBehavior.Continue);
                    }
                }
                    );
            }
        }