162 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			162 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_THUMB_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_THUMB_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/CoreApi.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/Control.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Provides information about the *DragCompleted* event that occurs when a user completes a drag
							 | 
						||
| 
								 | 
							
								/// operation with the mouse of a Thumb control.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								struct DragCompletedEventArgs: public RoutedEventArgs
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// Gets whether the drag operation for a Thumb was canceled by a call to the CancelDrag method
							 | 
						||
| 
								 | 
							
								    bool canceled;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets horizontal change in position of the Thumb after the user drags the control with mouse
							 | 
						||
| 
								 | 
							
								    float horizontalChange;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets vertical change in position of the Thumb after the user drags the control with mouse
							 | 
						||
| 
								 | 
							
								    float verticalChange;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DragCompletedEventArgs(BaseComponent* source, bool canceled, float hChange, float vChange);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef Delegate<void (BaseComponent*, const DragCompletedEventArgs&)> DragCompletedEventHandler;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Provides information about the *DragStarted* event that occurs when a user drags a Thumb control
							 | 
						||
| 
								 | 
							
								/// with the mouse.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								struct DragStartedEventArgs: public RoutedEventArgs
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// Gets the horizontal offset of the mouse click relative to the screen coordinates of Thumb
							 | 
						||
| 
								 | 
							
								    float horizontalOffset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the vertical offset of the mouse click relative to the screen coordinates of the Thumb
							 | 
						||
| 
								 | 
							
								    float verticalOffset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DragStartedEventArgs(BaseComponent* source, float hOffset, float voffset);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef Delegate<void (BaseComponent*, const DragStartedEventArgs&)> DragStartedEventHandler;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Provides information about the *DragDelta* event that occurs one or more times when a user drags
							 | 
						||
| 
								 | 
							
								/// a Thumb control with the mouse.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								struct DragDeltaEventArgs: public RoutedEventArgs
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// Gets horizontal change in position of the Thumb after the user drags the control with mouse
							 | 
						||
| 
								 | 
							
								    float horizontalChange;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets vertical change in position of the Thumb after the user drags the control with mouse
							 | 
						||
| 
								 | 
							
								    float verticalChange;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    DragDeltaEventArgs(BaseComponent* source, float hChange, float vChange);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef Delegate<void (BaseComponent*, const DragDeltaEventArgs&)> DragDeltaEventHandler;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_PUSH
							 | 
						||
| 
								 | 
							
								NS_MSVC_WARNING_DISABLE(4251 4275)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Represents a control that can be dragged by the user.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.thumb.aspx
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class NS_GUI_CORE_API Thumb: public Control
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    Thumb();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets whether the Thumb control has logical focus and mouse capture and the left mouse
							 | 
						||
| 
								 | 
							
								    /// button is pressed
							 | 
						||
| 
								 | 
							
								    bool GetIsDragging() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Cancels current dragging operation
							 | 
						||
| 
								 | 
							
								    void CancelDrag();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Occurs when the Thumb control loses mouse capture
							 | 
						||
| 
								 | 
							
								    UIElement::RoutedEvent_<DragCompletedEventHandler> DragCompleted();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Occurs one or more times as the mouse changes position when a Thumb control has logical
							 | 
						||
| 
								 | 
							
								    /// focus and mouse capture
							 | 
						||
| 
								 | 
							
								    UIElement::RoutedEvent_<DragDeltaEventHandler> DragDelta();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Occurs when a Thumb control receives logical focus and mouse capture
							 | 
						||
| 
								 | 
							
								    UIElement::RoutedEvent_<DragStartedEventHandler> DragStarted();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    /// Dependency properties
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IsDraggingProperty;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Dependency events
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    static const RoutedEvent* DragCompletedEvent;
							 | 
						||
| 
								 | 
							
								    static const RoutedEvent* DragDeltaEvent;
							 | 
						||
| 
								 | 
							
								    static const RoutedEvent* DragStartedEvent;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    // Responds to a change in the value of the IsDragging property
							 | 
						||
| 
								 | 
							
								    virtual void OnDraggingChanged(const DependencyPropertyChangedEventArgs& e);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // From Control
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void UpdateVisualStates();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // From UIElement
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnMouseLeftButtonDown(const MouseButtonEventArgs& e);
							 | 
						||
| 
								 | 
							
								    void OnMouseLeftButtonUp(const MouseButtonEventArgs& e);
							 | 
						||
| 
								 | 
							
								    void OnMouseMove(const MouseEventArgs& e);
							 | 
						||
| 
								 | 
							
								    void OnTouchDown(const TouchEventArgs& e);
							 | 
						||
| 
								 | 
							
								    void OnTouchUp(const TouchEventArgs& e);
							 | 
						||
| 
								 | 
							
								    void OnTouchMove(const TouchEventArgs& e);
							 | 
						||
| 
								 | 
							
								    void OnManipulationStarting(const ManipulationStartingEventArgs& e);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // From DependencyObject
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    bool StartDrag(const Point& p);
							 | 
						||
| 
								 | 
							
								    bool StopDrag(const Point& p);
							 | 
						||
| 
								 | 
							
								    bool Drag(const Point& p);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    friend class Slider;
							 | 
						||
| 
								 | 
							
								    Point mStartThumbPosition;
							 | 
						||
| 
								 | 
							
								    Point mStartScreenPosition;
							 | 
						||
| 
								 | 
							
								    Point mCurrentScreenPosition;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NS_DECLARE_REFLECTION(Thumb, Control)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_POP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsGui/Thumb.inl>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |