178 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			178 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_TICKBAR_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_TICKBAR_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Vector.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/CoreApi.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/FrameworkElement.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Brush;
							 | 
						||
| 
								 | 
							
								class StreamGeometry;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_PUSH
							 | 
						||
| 
								 | 
							
								NS_MSVC_WARNING_DISABLE(4251 4275)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Represents a control that draws a set of tick marks for a Slider control.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.tickbar.aspx
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class NS_GUI_CORE_API TickBar: public FrameworkElement
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    TickBar();
							 | 
						||
| 
								 | 
							
								    ~TickBar();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the Brush that is used to draw the tick marks
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Brush* GetFill() const;
							 | 
						||
| 
								 | 
							
								    void SetFill(Brush* fill);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the direction of increasing value of the tick marks
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool GetIsDirectionReversed() const;
							 | 
						||
| 
								 | 
							
								    void SetIsDirectionReversed(bool directionReversed);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets whether the TickBar displays a selection range
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool GetIsSelectionRangeEnabled() const;
							 | 
						||
| 
								 | 
							
								    void SetIsSelectionRangeEnabled(bool selectionRangeEnabled);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the maximum value that is possible for a tick mark
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetMaximum() const;
							 | 
						||
| 
								 | 
							
								    void SetMaximum(float maximum);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the minimum value that is possible for a tick mark
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetMinimum() const;
							 | 
						||
| 
								 | 
							
								    void SetMinimum(float minimum);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets where tick marks appear relative to a Track of a Slider control
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    TickBarPlacement GetPlacement() const;
							 | 
						||
| 
								 | 
							
								    void SetPlacement(TickBarPlacement placement);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets a space buffer for the area that contains the tick marks that are specified
							 | 
						||
| 
								 | 
							
								    /// for a TickBar
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetReservedSpace() const;
							 | 
						||
| 
								 | 
							
								    void SetReservedSpace(float reservedSpace);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the end point of a selection
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetSelectionEnd() const;
							 | 
						||
| 
								 | 
							
								    void SetSelectionEnd(float selectionEnd);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the start point of a selection
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetSelectionStart() const;
							 | 
						||
| 
								 | 
							
								    void SetSelectionStart(float selectionStart);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the interval between tick marks
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetTickFrequency() const;
							 | 
						||
| 
								 | 
							
								    void SetTickFrequency(float tickFrequency);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the positions of the tick marks. For example, "0.5 1.0 43" or "0.5,1.0,43"
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    const char* GetTicks() const;
							 | 
						||
| 
								 | 
							
								    void SetTicks(const char* ticks);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    /// Dependency properties
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* FillProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IsDirectionReversedProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* IsSelectionRangeEnabledProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* MaximumProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* MinimumProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* PlacementProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* ReservedSpaceProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* SelectionEndProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* SelectionStartProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TickFrequencyProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TicksProperty;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    /// From DependencyObject
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From UIElement
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnRender(DrawingContext* context) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /// From FrameworkElement
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Size MeasureOverride(const Size& availableSize) override;
							 | 
						||
| 
								 | 
							
								    void OnTemplatedParentChanged(FrameworkElement* oldParent,
							 | 
						||
| 
								 | 
							
								        FrameworkElement* newParent) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    friend class TickBarTest;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void GetRenderInfo(float& range, float& offset, float& tickLength,
							 | 
						||
| 
								 | 
							
								        Vector2& origin, Vector2& tickDirection, Vector2& tickBarDirection);
							 | 
						||
| 
								 | 
							
								    bool UpdateFixedTicks();
							 | 
						||
| 
								 | 
							
								    bool UpdateTicks(float range, float offset);
							 | 
						||
| 
								 | 
							
								    bool UpdateSelection(float range, float offset);
							 | 
						||
| 
								 | 
							
								    void UpdateGeometry(float range, float offset, float tickLength, const Vector2& origin,
							 | 
						||
| 
								 | 
							
								        const Vector2& tickDirection, const Vector2& tickBarDirection);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void RegisterBindings();
							 | 
						||
| 
								 | 
							
								    void BindToTemplatedParent(const char* path, const DependencyProperty* dp);
							 | 
						||
| 
								 | 
							
								    void BindReservedSpace();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    int mUpdateFlags;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    float mPreviousRange;
							 | 
						||
| 
								 | 
							
								    float mPreviousOffset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef Vector<float> Ticks;
							 | 
						||
| 
								 | 
							
								    Ticks mFixedTicks;
							 | 
						||
| 
								 | 
							
								    Ticks mTicksInternal;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    float mSelectionStartInternal;
							 | 
						||
| 
								 | 
							
								    float mSelectionEndInternal;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Ptr<StreamGeometry> mGeometry;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool mReservedSpaceBinded;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NS_DECLARE_REFLECTION(TickBar, FrameworkElement)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_POP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |