Beispiel #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DesktopElement"/> class.
 /// </summary>
 protected DesktopElement()
 {
     this.previewDragOrResizeStatus = DragOrResizeStatus.None;
     this.dragOrResizeStatus        = DragOrResizeStatus.None;
     this.startMousePosition        = new Point();
     this.oldCanResize = this.CanResize;
 }
Beispiel #2
0
        private DragOrResizeStatus GetDragOrResizeMode(Point position)
        {
            DragOrResizeStatus status = DragOrResizeStatus.None;

            if (this.CanDrag &&
                this.partDragger != null &&
                this.partDragger.IsMouseOver)
            {
                status = DragOrResizeStatus.Drag;
            }
            else if (this.CanResize)
            {
                if (position.X <= ResizeSideThichness) // left
                {
                    status = this.GetLeftDragStatus(position);
                }
                else if (this.ActualWidth - position.X <= ResizeSideThichness) // right
                {
                    status = this.GetRightDragStatus(position);
                }
                else if (position.Y <= ResizeSideThichness) // top
                {
                    status = this.GetTopDragStatus(position);
                }
                else if (this.ActualHeight - position.Y <= ResizeSideThichness) // bottom
                {
                    status = this.GetBottomDragStatus(position);
                }
            }

            return(status);
        }
Beispiel #3
0
        private void CancelDragOrResize()
        {
            this.Cursor                    = null;
            this.dragOrResizeStatus        = DragOrResizeStatus.None;
            this.previewDragOrResizeStatus = DragOrResizeStatus.None;

            this.ReleaseMouseCapture();
        }
Beispiel #4
0
        /// <summary>
        /// Invoked when an unhandled <see cref="E:System.Windows.Input.Mouse.PreviewMouseMove"/> attached event
        /// reaches an element in its route that is derived from this class.
        /// Implement this method to add class handling for this event.
        /// </summary>
        /// <param name="e">The <see cref="T:System.Windows.Input.MouseEventArgs"/> that contains the event data.</param>
        protected override void OnPreviewMouseMove(MouseEventArgs e)
        {
            if (this.dragOrResizeStatus == DragOrResizeStatus.None)
            {
                // http://www.switchonthecode.com/tutorials/wpf-snippet-reliably-getting-the-mouse-position
                Point point = e.GetPosition(this);

                this.previewDragOrResizeStatus = this.GetDragOrResizeMode(point);

                if (!this.CanResize &&
                    this.previewDragOrResizeStatus != DragOrResizeStatus.Drag &&
                    this.previewDragOrResizeStatus != DragOrResizeStatus.None)
                {
                    this.previewDragOrResizeStatus = DragOrResizeStatus.None;
                }

                this.SetResizeCursor(this.previewDragOrResizeStatus);
            }
            else if (this.IsMouseCaptured)
            {
                if (e.MouseDevice.LeftButton == MouseButtonState.Pressed)
                {
                    // http://www.switchonthecode.com/tutorials/wpf-snippet-reliably-getting-the-mouse-position
                    Point point = e.GetPosition(this);

                    if (Math.Abs(point.X - this.previousMousePosition.X) > SystemParameters.MinimumHorizontalDragDistance ||
                        Math.Abs(point.Y - this.previousMousePosition.Y) > SystemParameters.MinimumVerticalDragDistance)
                    {
                        e.Handled = true;

                        this.AdjustBounds(point);
                        this.previousMousePosition = point;
                    }
                }
                else
                {
                    this.CancelDragOrResize();
                }
            }
            else
            {
                this.CancelDragOrResize();
            }

            base.OnPreviewMouseMove(e);
        }
Beispiel #5
0
        /// <summary>
        /// Invoked when an unhandled <see cref="E:System.Windows.UIElement.PreviewMouseLeftButtonDown"/> routed event
        /// reaches an element in its route that is derived from this class.
        /// Implement this method to add class handling for this event.
        /// </summary>
        /// <param name="e">
        /// The <see cref="T:System.Windows.Input.MouseButtonEventArgs"/> that contains the event data.
        /// The event data reports that the left mouse button was pressed.
        /// </param>
        protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            if (!e.Handled &&
                e.ClickCount == 1 &&
                e.Source == this)
            {
                if (this.dragOrResizeStatus == DragOrResizeStatus.None &&
                    this.previewDragOrResizeStatus != DragOrResizeStatus.None)
                {
                    e.Handled = true;

                    this.dragOrResizeStatus = this.previewDragOrResizeStatus;
                    this.startMousePosition = this.previousMousePosition = e.GetPosition(this);

                    this.CaptureMouse();
                }
            }

            base.OnPreviewMouseLeftButtonDown(e);
        }
Beispiel #6
0
 private void SetResizeCursor(DragOrResizeStatus resizeStatus)
 {
     if (this.CanResize || this.CanDrag)
     {
         if (resizeStatus.IsDragging)
         {
             this.Cursor = null;
         }
         else if (resizeStatus.IsOnTopLeftOrBottomRight)
         {
             this.Cursor = Cursors.SizeNWSE;
         }
         else if (resizeStatus.IsOnTopRightOrBottomLeft)
         {
             this.Cursor = Cursors.SizeNESW;
         }
         else if (resizeStatus.IsOnTopRightOrBottomLeft)
         {
             this.Cursor = Cursors.SizeNESW;
         }
         else if (resizeStatus.IsOnTopCenterOrBottomCenter)
         {
             this.Cursor = Cursors.SizeNS;
         }
         else if (resizeStatus.IsOnMiddleLeftOrMiddleRight)
         {
             this.Cursor = Cursors.SizeWE;
         }
         else if (this.Cursor != null)
         {
             this.Cursor = null;
         }
     }
     else if (this.Cursor != null)
     {
         this.Cursor = null;
     }
 }
Beispiel #7
0
        /// <summary>
        /// Closes the desktop element
        /// </summary>
        public virtual void Close()
        {
            if (this.Parent != null)
            {
                this.Parent.Children.Remove(this);
            }

            // Clean up
            this.Id = Guid.Empty;
            this.previewDragOrResizeStatus = DragOrResizeStatus.None;
            this.dragOrResizeStatus        = DragOrResizeStatus.None;
            this.startMousePosition        = new Point();
            this.previousMousePosition     = new Point();
            this.oldPosition   = new Point();
            this.previousSize  = Size.Empty;
            this.originalSize  = Size.Empty;
            this.isInitialized = false;
            this.oldCanResize  = false;
            this.partDragger   = null;
            this.parent        = null;
            this.Content       = null;
            this.DataContext   = null;
        }
Beispiel #8
0
 private void SetResizeCursor(DragOrResizeStatus resizeStatus)
 {
     if (this.CanResize || this.CanDrag)
     {
         if (resizeStatus.IsDragging)
         {
             this.Cursor = null;
         }
         else if (resizeStatus.IsOnTopLeftOrBottomRight)
         {
             this.Cursor = Cursors.SizeNWSE;
         }
         else if (resizeStatus.IsOnTopRightOrBottomLeft)
         {
             this.Cursor = Cursors.SizeNESW;
         }
         else if (resizeStatus.IsOnTopRightOrBottomLeft)
         {
             this.Cursor = Cursors.SizeNESW;
         }
         else if (resizeStatus.IsOnTopCenterOrBottomCenter)
         {
             this.Cursor = Cursors.SizeNS;
         }
         else if (resizeStatus.IsOnMiddleLeftOrMiddleRight)
         {
             this.Cursor = Cursors.SizeWE;
         }
         else if (this.Cursor != null)
         {
             this.Cursor = null;
         }
     }
     else if (this.Cursor != null)
     {
         this.Cursor = null;
     }
 }
Beispiel #9
0
        private void CancelDragOrResize()
        {
            this.Cursor                     = null;
            this.dragOrResizeStatus         = DragOrResizeStatus.None;
            this.previewDragOrResizeStatus  = DragOrResizeStatus.None;

            this.ReleaseMouseCapture();
        }
Beispiel #10
0
        /// <summary>
        /// Invoked when an unhandled <see cref="E:System.Windows.Input.Mouse.PreviewMouseMove"/> attached event 
        /// reaches an element in its route that is derived from this class. 
        /// Implement this method to add class handling for this event.
        /// </summary>
        /// <param name="e">The <see cref="T:System.Windows.Input.MouseEventArgs"/> that contains the event data.</param>
        protected override void OnPreviewMouseMove(MouseEventArgs e)
        {
            if (this.dragOrResizeStatus == DragOrResizeStatus.None)
            {
                // http://www.switchonthecode.com/tutorials/wpf-snippet-reliably-getting-the-mouse-position
                Point point = e.GetPosition(this);

                this.previewDragOrResizeStatus = this.GetDragOrResizeMode(point);

                if (!this.CanResize
                    && this.previewDragOrResizeStatus != DragOrResizeStatus.Drag
                    && this.previewDragOrResizeStatus != DragOrResizeStatus.None)
                {
                    this.previewDragOrResizeStatus = DragOrResizeStatus.None;
                }

                this.SetResizeCursor(this.previewDragOrResizeStatus);
            }
            else if (this.IsMouseCaptured)
            {
                if (e.MouseDevice.LeftButton == MouseButtonState.Pressed)
                {
                    // http://www.switchonthecode.com/tutorials/wpf-snippet-reliably-getting-the-mouse-position
                    Point point = e.GetPosition(this);

                    if (Math.Abs(point.X - this.previousMousePosition.X) > SystemParameters.MinimumHorizontalDragDistance ||
                        Math.Abs(point.Y - this.previousMousePosition.Y) > SystemParameters.MinimumVerticalDragDistance)
                    {
                        e.Handled = true;

                        this.AdjustBounds(point);
                        this.previousMousePosition = point;
                    }
                }
                else
                {
                    this.CancelDragOrResize();
                }
            }
            else
            {
                this.CancelDragOrResize();
            }

            base.OnPreviewMouseMove(e);
        }
Beispiel #11
0
        /// <summary>
        /// Invoked when an unhandled <see cref="E:System.Windows.UIElement.PreviewMouseLeftButtonDown"/> routed event 
        /// reaches an element in its route that is derived from this class. 
        /// Implement this method to add class handling for this event.
        /// </summary>
        /// <param name="e">
        /// The <see cref="T:System.Windows.Input.MouseButtonEventArgs"/> that contains the event data. 
        /// The event data reports that the left mouse button was pressed.
        /// </param>
        protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            if (!e.Handled
                && e.ClickCount == 1
                && e.Source == this)
            {
                if (this.dragOrResizeStatus == DragOrResizeStatus.None &&
                    this.previewDragOrResizeStatus != DragOrResizeStatus.None)
                {
                    e.Handled = true;

                    this.dragOrResizeStatus = this.previewDragOrResizeStatus;
                    this.startMousePosition = this.previousMousePosition = e.GetPosition(this);

                    this.CaptureMouse();
                }
            }

            base.OnPreviewMouseLeftButtonDown(e);
        }
Beispiel #12
0
        /// <summary>
        /// Closes the desktop element
        /// </summary>
        public virtual void Close()
        {
            if (this.Parent != null)
            {
                this.Parent.Children.Remove(this);
            }

            // Clean up
            this.Id                         = Guid.Empty;
            this.previewDragOrResizeStatus  = DragOrResizeStatus.None;
            this.dragOrResizeStatus         = DragOrResizeStatus.None;
            this.startMousePosition         = new Point();
            this.previousMousePosition      = new Point();
            this.oldPosition                = new Point();
            this.previousSize               = Size.Empty;
            this.originalSize               = Size.Empty;
            this.isInitialized              = false;
            this.oldCanResize               = false;
            this.partDragger                = null;
            this.parent                     = null;
            this.Content                    = null;
            this.DataContext                = null;
        }
Beispiel #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DesktopElement"/> class.
 /// </summary>
 protected DesktopElement()
 {
     this.previewDragOrResizeStatus  = DragOrResizeStatus.None;
     this.dragOrResizeStatus         = DragOrResizeStatus.None;
     this.startMousePosition         = new Point();
     this.oldCanResize               = this.CanResize;
 }