215 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			215 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_SLIDER_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_SLIDER_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Vector.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/CoreApi.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/RangeBase.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Track;
							 | 
						||
| 
								 | 
							
								class RoutedCommand;
							 | 
						||
| 
								 | 
							
								struct DragStartedEventArgs;
							 | 
						||
| 
								 | 
							
								struct DragDeltaEventArgs;
							 | 
						||
| 
								 | 
							
								struct CanExecuteRoutedEventArgs;
							 | 
						||
| 
								 | 
							
								struct ExecutedRoutedEventArgs;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_PUSH
							 | 
						||
| 
								 | 
							
								NS_MSVC_WARNING_DISABLE(4251 4275)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Represents a control that lets the user select from a range of values by moving a Thumb
							 | 
						||
| 
								 | 
							
								/// control along a Track.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// http://msdn.microsoft.com/en-us/library/system.windows.controls.slider.aspx
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class NS_GUI_CORE_API Slider: public RangeBase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    Slider();
							 | 
						||
| 
								 | 
							
								    ~Slider();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the amount of time in milliseconds that a RepeatButton waits, while it is 
							 | 
						||
| 
								 | 
							
								    /// pressed, before a command to move the Thumb executes, such as a *DecreaseLarge* command
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    int32_t GetDelay() const;
							 | 
						||
| 
								 | 
							
								    void SetDelay(int32_t delay);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the amount of time in milliseconds between increase or decrease commands when
							 | 
						||
| 
								 | 
							
								    /// a user clicks the RepeatButton of a Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    int32_t GetInterval() const;
							 | 
						||
| 
								 | 
							
								    void SetInterval(int32_t interval);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the direction of increasing value
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool GetIsDirectionReversed() const;
							 | 
						||
| 
								 | 
							
								    void SetIsDirectionReversed(bool value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets a value that indicates whether the Thumb of a Slider moves immediately to the
							 | 
						||
| 
								 | 
							
								    /// location of the mouse click that occurs while the mouse pointer pauses on the Slider track
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool GetIsMoveToPointEnabled() const;
							 | 
						||
| 
								 | 
							
								    void SetIsMoveToPointEnabled(bool value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets a value that indicates whether the Slider displays a selection range along the
							 | 
						||
| 
								 | 
							
								    /// Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool GetIsSelectionRangeEnabled() const;
							 | 
						||
| 
								 | 
							
								    void SetIsSelectionRangeEnabled(bool value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets a value that indicates whether the Slider automatically moves the Thumb to the
							 | 
						||
| 
								 | 
							
								    /// closest tick mark
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool GetIsSnapToTickEnabled() const;
							 | 
						||
| 
								 | 
							
								    void SetIsSnapToTickEnabled(bool value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the orientation of a Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Orientation GetOrientation() const;
							 | 
						||
| 
								 | 
							
								    void SetOrientation(Orientation orientation);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the largest value of a specified selection for a Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetSelectionEnd() const;
							 | 
						||
| 
								 | 
							
								    void SetSelectionEnd(float value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the smallest value of a specified selection for a Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetSelectionStart() const;
							 | 
						||
| 
								 | 
							
								    void SetSelectionStart(float value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the interval between tick marks
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetTickFrequency() const;
							 | 
						||
| 
								 | 
							
								    void SetTickFrequency(float value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the position of tick marks with respect to the Track of the Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    TickPlacement GetTickPlacement() const;
							 | 
						||
| 
								 | 
							
								    void SetTickPlacement(TickPlacement placement);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the positions of the tick marks to display for a Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    const char* GetTicks() const;
							 | 
						||
| 
								 | 
							
								    void SetTicks(const char* value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the Track for a Slider control
							 | 
						||
| 
								 | 
							
								    Track* GetTrack() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    /// Dependency Properties
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* DelayProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IntervalProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IsDirectionReversedProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IsMoveToPointEnabledProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IsSelectionRangeEnabledProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IsSnapToTickEnabledProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* OrientationProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* SelectionEndProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* SelectionStartProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TickFrequencyProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TickPlacementProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TicksProperty;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Routed Commands
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    static const RoutedCommand* DecreaseLargeCommand;
							 | 
						||
| 
								 | 
							
								    static const RoutedCommand* DecreaseSmallCommand;
							 | 
						||
| 
								 | 
							
								    static const RoutedCommand* IncreaseLargeCommand;
							 | 
						||
| 
								 | 
							
								    static const RoutedCommand* IncreaseSmallCommand;
							 | 
						||
| 
								 | 
							
								    static const RoutedCommand* MaximizeValueCommand;
							 | 
						||
| 
								 | 
							
								    static const RoutedCommand* MinimizeValueCommand;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    // Slider value changes
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    virtual void OnDecreaseLarge();
							 | 
						||
| 
								 | 
							
								    virtual void OnIncreaseLarge();
							 | 
						||
| 
								 | 
							
								    virtual void OnDecreaseSmall();
							 | 
						||
| 
								 | 
							
								    virtual void OnIncreaseSmall();
							 | 
						||
| 
								 | 
							
								    virtual void OnMinimizeValue();
							 | 
						||
| 
								 | 
							
								    virtual void OnMaximizeValue();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From DependencyObject
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From UIElement
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnPreviewMouseLeftButtonDown(const MouseButtonEventArgs& e) override;
							 | 
						||
| 
								 | 
							
								    void OnPreviewTouchDown(const TouchEventArgs& e) override;
							 | 
						||
| 
								 | 
							
								    void OnManipulationStarting(const ManipulationStartingEventArgs& e) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From Control
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnTemplateChanged(FrameworkTemplate* oldTemplate, FrameworkElement* oldRoot,
							 | 
						||
| 
								 | 
							
								        FrameworkTemplate* newTemplate, FrameworkElement* newRoot) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From Slider
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnValueChanged(float oldValue, float newValue) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    bool PreviewDown(const Point& p, bool isTouch, uint64_t touchDevice = 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void OnThumbDragStarted(BaseComponent* sender, const DragStartedEventArgs& e);
							 | 
						||
| 
								 | 
							
								    void OnThumbDragDelta(BaseComponent* sender, const DragDeltaEventArgs& e);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void RegisterDelegates();
							 | 
						||
| 
								 | 
							
								    void FreeDelegates();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void InvalidateTicks();
							 | 
						||
| 
								 | 
							
								    void EnsureTicks();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void MoveToNearestTick(float newValue);
							 | 
						||
| 
								 | 
							
								    void MoveToNextTick(float directionDelta);
							 | 
						||
| 
								 | 
							
								    float FindNextTick(float currentValue);
							 | 
						||
| 
								 | 
							
								    float FindPrevTick(float currentValue);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    Ptr<Track> mTrackInternal;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef Vector<float> Ticks;
							 | 
						||
| 
								 | 
							
								    Ticks mTicksInternal;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NS_DECLARE_REFLECTION(Slider, RangeBase)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_POP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |