204 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// NoesisGUI - http://www.noesisengine.com
 | 
						|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
#ifndef __GUI_GRIDSPLITTER_H__
 | 
						|
#define __GUI_GRIDSPLITTER_H__
 | 
						|
 | 
						|
 | 
						|
#include <NsCore/Noesis.h>
 | 
						|
#include <NsCore/Ptr.h>
 | 
						|
#include <NsGui/Thumb.h>
 | 
						|
#include <NsGui/GridLength.h>
 | 
						|
 | 
						|
namespace Noesis
 | 
						|
{
 | 
						|
 | 
						|
NS_INTERFACE ILayerManager;
 | 
						|
class Grid;
 | 
						|
class BaseDefinition;
 | 
						|
class Style;
 | 
						|
class Control;
 | 
						|
class TranslateTransform;
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Specifies whether a GridSplitter control redistributes space between rows or between columns.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
enum GridResizeDirection : int32_t
 | 
						|
{
 | 
						|
    /// Space is redistributed based on the values of the HorizontalAlignment, VerticalAlignment,
 | 
						|
    /// ActualWidth, and ActualHeight properties of the GridSplitter.
 | 
						|
    GridResizeDirection_Auto = 0,
 | 
						|
 | 
						|
    /// Space is redistributed between columns.
 | 
						|
    GridResizeDirection_Columns = 1,
 | 
						|
 | 
						|
    /// Space is redistributed between rows.
 | 
						|
    GridResizeDirection_Rows = 2
 | 
						|
};
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Specifies the rows or columns that are resized by a GridSplitter control.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
enum GridResizeBehavior : int32_t
 | 
						|
{
 | 
						|
    /// Space is redistributed based on the value of the HorizontalAlignment and
 | 
						|
    /// VerticalAlignment properties.
 | 
						|
    GridResizeBehavior_BasedOnAlignment = 0,
 | 
						|
 | 
						|
    /// For a horizontal GridSplitter, space is redistributed between the row that is specified
 | 
						|
    /// for the GridSplitter and the next row that is below it. For a vertical GridSplitter,
 | 
						|
    /// space is redistributed between the column that is specified for the GridSplitter and 
 | 
						|
    /// the next column that is to the right.
 | 
						|
    GridResizeBehavior_CurrentAndNext = 1,
 | 
						|
 | 
						|
    /// For a horizontal GridSplitter, space is redistributed between the row that is specified
 | 
						|
    /// for the GridSplitter and the next row that is above it. For a vertical GridSplitter, 
 | 
						|
    /// space is redistributed between the column that is specified for the GridSplitter and 
 | 
						|
    /// the next column that is to the left.
 | 
						|
    GridResizeBehavior_PreviousAndCurrent = 2,
 | 
						|
 | 
						|
    /// For a horizontal GridSplitter, space is redistributed between the rows that are above 
 | 
						|
    /// and below the row that is specified for the GridSplitter. For a vertical GridSplitter,
 | 
						|
    /// space is redistributed between the columns that are to the left and right of the column
 | 
						|
    /// that is specified for the GridSplitter.
 | 
						|
    GridResizeBehavior_PreviousAndNext = 3
 | 
						|
};
 | 
						|
 | 
						|
NS_WARNING_PUSH
 | 
						|
NS_MSVC_WARNING_DISABLE(4251)
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Represents the control that redistributes space between columns or rows of a Grid control.
 | 
						|
///
 | 
						|
/// .. code-block:: xml
 | 
						|
///
 | 
						|
///    <Grid>
 | 
						|
///      <Grid.ColumnDefinitions>
 | 
						|
///        <ColumnDefinition Width="1*"/>
 | 
						|
///        <ColumnDefinition Width="4*"/>
 | 
						|
///      </Grid.ColumnDefinitions>
 | 
						|
/// 
 | 
						|
///      <GridSplitter Width="5" HorizontalAlignment="Right" VerticalAlignment="Stretch"/>
 | 
						|
///    </Grid>
 | 
						|
///
 | 
						|
/// .. code-block:: xml
 | 
						|
///
 | 
						|
///    <Grid>
 | 
						|
///      <Grid.RowDefinitions>
 | 
						|
///        <RowDefinition Height="5*"/>
 | 
						|
///        <RowDefinition Height="2*"/>
 | 
						|
///      </Grid.RowDefinitions>
 | 
						|
/// 
 | 
						|
///      <GridSplitter Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
 | 
						|
///        ShowsPreview="True"/>
 | 
						|
///    </Grid>
 | 
						|
///
 | 
						|
/// http://msdn.microsoft.com/en-us/library/system.windows.controls.gridsplitter.aspx
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
class NS_GUI_CORE_API GridSplitter : public Thumb
 | 
						|
{
 | 
						|
public:
 | 
						|
    GridSplitter();
 | 
						|
    ~GridSplitter();
 | 
						|
 | 
						|
    /// Gets or sets the distance that user must drag the GridSplitter control to resize
 | 
						|
    /// columns or rows.
 | 
						|
    //@{
 | 
						|
    float GetDragIncrement() const;
 | 
						|
    void SetDragIncrement(float value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets GridSplitter's step size when moving it with arrow keys.
 | 
						|
    //@{
 | 
						|
    float GetKeyboardIncrement() const;
 | 
						|
    void SetKeyboardIncrement(float value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets whether to resize columns or rows.
 | 
						|
    //@{
 | 
						|
    GridResizeDirection GetResizeDirection() const;
 | 
						|
    void SetResizeDirection(GridResizeDirection value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets whichs columns or rows to resize relative to the column or row in which
 | 
						|
    /// the GridSplitter control is definied.
 | 
						|
    //@{
 | 
						|
    GridResizeBehavior GetResizeBehavior() const;
 | 
						|
    void SetResizeBehavior(GridResizeBehavior value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets whether column or row size should be updated as the GridSplitter
 | 
						|
    /// is being dragged.
 | 
						|
    //@{
 | 
						|
    bool GetShowsPreview() const;
 | 
						|
    void SetShowsPreview(bool value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the Style of the GridSplitter control preview which is displayed
 | 
						|
    /// when the ShowsPreview property is set to true.
 | 
						|
    //@{
 | 
						|
    Style* GetPreviewStyle() const;
 | 
						|
    void SetPreviewStyle(Style* value);
 | 
						|
    //@}
 | 
						|
 | 
						|
public:
 | 
						|
    /// Dependency properties
 | 
						|
    //@{
 | 
						|
    static const DependencyProperty* DragIncrementProperty;
 | 
						|
    static const DependencyProperty* KeyboardIncrementProperty;
 | 
						|
    static const DependencyProperty* ResizeDirectionProperty;
 | 
						|
    static const DependencyProperty* ResizeBehaviorProperty;
 | 
						|
    static const DependencyProperty* ShowsPreviewProperty;
 | 
						|
    static const DependencyProperty* PreviewStyleProperty;
 | 
						|
    //@}
 | 
						|
 | 
						|
protected:
 | 
						|
    /// From UIElement
 | 
						|
    //@{
 | 
						|
    void OnKeyDown(const KeyEventArgs& e) override;
 | 
						|
    void OnRenderSizeChanged(const SizeChangedInfo& info) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
private:
 | 
						|
    // Thumb event handlers
 | 
						|
    void OnDragStarted(const DragStartedEventArgs&);
 | 
						|
    void OnDragDelta(const DragDeltaEventArgs&);
 | 
						|
    void OnDragCompleted(const DragCompletedEventArgs&);
 | 
						|
 | 
						|
    // Return actual values when ResizeBehavior is BasedOnAlignment and ResizeDirection is Auto
 | 
						|
    GridResizeDirection GetActualResizeDirection() const;
 | 
						|
    GridResizeBehavior GetActualResizeBehavior() const;
 | 
						|
 | 
						|
    // Wrapper around the GetColumnDefinitions/GetRowDefinitions
 | 
						|
    int GetBaseDefinitionCount();
 | 
						|
    BaseDefinition* GetBaseDefinition(int index);
 | 
						|
 | 
						|
    // Return ActualWidth/ActualHeight based on ResizeDirection
 | 
						|
    float GetBaseDefinitionSize(BaseDefinition* baseDefinition) const;
 | 
						|
 | 
						|
    // Resize the columns/rows
 | 
						|
    void Resize(float horiz, float vert);
 | 
						|
    bool KeyboardResize(float horiz, float vert);
 | 
						|
    void CancelResize();
 | 
						|
 | 
						|
    void CacheResizeData();
 | 
						|
 | 
						|
private:
 | 
						|
    struct ResizeData;
 | 
						|
    ResizeData* mResizeData;
 | 
						|
 | 
						|
    NS_DECLARE_REFLECTION(GridSplitter, Thumb)
 | 
						|
};
 | 
						|
 | 
						|
NS_WARNING_POP
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
NS_DECLARE_REFLECTION_ENUM_EXPORT(NS_GUI_CORE_API, Noesis::GridResizeDirection)
 | 
						|
NS_DECLARE_REFLECTION_ENUM_EXPORT(NS_GUI_CORE_API, Noesis::GridResizeBehavior)
 | 
						|
 | 
						|
#endif
 |