236 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			236 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// NoesisGUI - http://www.noesisengine.com
 | 
						|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
#ifndef __GUI_BASETEXTBOX_H__
 | 
						|
#define __GUI_BASETEXTBOX_H__
 | 
						|
 | 
						|
 | 
						|
#include <NsCore/Noesis.h>
 | 
						|
#include <NsGui/Control.h>
 | 
						|
 | 
						|
 | 
						|
namespace Noesis
 | 
						|
{
 | 
						|
 | 
						|
class Brush;
 | 
						|
class ScrollViewer;
 | 
						|
struct CanExecuteRoutedEventArgs;
 | 
						|
struct ExecutedRoutedEventArgs;
 | 
						|
enum PanningMode: int32_t;
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// An abstract base class that provides functionality for text editing controls.
 | 
						|
///
 | 
						|
/// http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.textboxbase.aspx
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
class NS_GUI_CORE_API BaseTextBox: public Control
 | 
						|
{
 | 
						|
public:
 | 
						|
    BaseTextBox();
 | 
						|
    virtual ~BaseTextBox() = 0;
 | 
						|
 | 
						|
    /// Gets or sets a value that indicates how the text editing control responds when the user
 | 
						|
    /// presses the *ENTER* key.
 | 
						|
    //@{
 | 
						|
    bool GetAcceptsReturn() const;
 | 
						|
    void SetAcceptsReturn(bool value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets a value that indicates how the text editing control responds when the user
 | 
						|
    /// presses the *TAB* key.
 | 
						|
    //@{
 | 
						|
    bool GetAcceptsTab() const;
 | 
						|
    void SetAcceptsTab(bool value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the brush that is used to paint the caret of the text box
 | 
						|
    //@{
 | 
						|
    Brush* GetCaretBrush() const;
 | 
						|
    void SetCaretBrush(Brush* brush);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets a value that indicates whether a horizontal scroll bar is shown
 | 
						|
    //@{
 | 
						|
    ScrollBarVisibility GetHorizontalScrollBarVisibility() const;
 | 
						|
    void SetHorizontalScrollBarVisibility(ScrollBarVisibility value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets a value that indicates whether the text editing control is read-only to a user 
 | 
						|
    /// interacting with the control
 | 
						|
    //@{
 | 
						|
    bool GetIsReadOnly() const;
 | 
						|
    void SetIsReadOnly(bool value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets a value that indicates whether the text box has focus and selected text
 | 
						|
    bool GetIsSelectionActive() const;
 | 
						|
 | 
						|
    /// Gets or sets the way TextBox reacts to touch manipulation
 | 
						|
    //@{
 | 
						|
    PanningMode GetPanningMode() const;
 | 
						|
    void SetPanningMode(PanningMode panningMode);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the brush that highlights selected text
 | 
						|
    //@{
 | 
						|
    Brush* GetSelectionBrush() const;
 | 
						|
    void SetSelectionBrush(Brush* selectionBrush);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the opacity of the *SelectionBrush*. If *SelectionOpacity* is set to 0, the
 | 
						|
    /// *SelectionBrush* is transparent and is not visible. If *SelectionOpacity* is set to 1.0 or
 | 
						|
    /// greater, the *SelectionBrush* is opaque and the selected text is not visible
 | 
						|
    //@{
 | 
						|
    float GetSelectionOpacity() const;
 | 
						|
    void SetSelectionOpacity(float selectionOpacity);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets a value that indicates whether a vertical scroll bar is shown
 | 
						|
    //@{
 | 
						|
    ScrollBarVisibility GetVerticalScrollBarVisibility() const;
 | 
						|
    void SetVerticalScrollBarVisibility(ScrollBarVisibility value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Horizontal size of scrollable content; 0.0 if TextBox is non-scrolling
 | 
						|
    /// \prop
 | 
						|
    float GetExtentWidth() const;
 | 
						|
 | 
						|
    /// Vertical size of scrollable content; 0.0 if TextBox is non-scrolling
 | 
						|
    /// \prop
 | 
						|
    float GetExtentHeight() const;
 | 
						|
 | 
						|
    /// Horizontal size of scroll area; 0.0 if TextBox is non-scrolling
 | 
						|
    /// \prop
 | 
						|
    float GetViewportWidth() const;
 | 
						|
 | 
						|
    /// Vertical size of scroll area; 0.0 if TextBox is non-scrolling
 | 
						|
    /// \prop
 | 
						|
    float GetViewportHeight() const;
 | 
						|
 | 
						|
    /// Actual HorizontalOffset contains the ScrollViewer's current horizontal offset.
 | 
						|
    /// This is a computed value, depending on the state of ScrollViewer, its Viewport, Extent
 | 
						|
    /// and previous scrolling commands.
 | 
						|
    /// \prop
 | 
						|
    float GetHorizontalOffset() const;
 | 
						|
 | 
						|
    /// Actual VerticalOffset contains the ScrollViewer's current vertical offset.
 | 
						|
    /// This is a computed value, depending on the state of ScrollViewer, its Viewport, Extent
 | 
						|
    /// and previous scrolling commands.
 | 
						|
    /// \prop
 | 
						|
    float GetVerticalOffset() const;
 | 
						|
 | 
						|
    /// Scroll content by one line to the left.
 | 
						|
    void LineLeft();
 | 
						|
 | 
						|
    /// Scroll content by one line to the right.
 | 
						|
    void LineRight();
 | 
						|
 | 
						|
    /// Scroll content by one page to the left.
 | 
						|
    void PageLeft();
 | 
						|
 | 
						|
    /// Scroll content by one page to the right.
 | 
						|
    void PageRight();
 | 
						|
 | 
						|
    /// Scroll content by one line to the top.
 | 
						|
    void LineUp();
 | 
						|
 | 
						|
    /// Scroll content by one line to the bottom.
 | 
						|
    void LineDown();
 | 
						|
 | 
						|
    /// Scroll content by one page to the top.
 | 
						|
    void PageUp();
 | 
						|
 | 
						|
    /// Scroll content by one page to the bottom.
 | 
						|
    void PageDown();
 | 
						|
 | 
						|
    /// Vertically scroll to the beginning of the content.
 | 
						|
    void ScrollToHome();
 | 
						|
 | 
						|
    /// Vertically scroll to the end of the content.
 | 
						|
    void ScrollToEnd();
 | 
						|
 | 
						|
    /// Scroll horizontally to the specified offset.
 | 
						|
    void ScrollToHorizontalOffset(float offset);
 | 
						|
 | 
						|
    /// Scroll vertically to the specified offset.
 | 
						|
    void ScrollToVerticalOffset(float offset);
 | 
						|
 | 
						|
    /// Occurs when the text selection has changed
 | 
						|
    UIElement::RoutedEvent_<RoutedEventHandler> SelectionChanged();
 | 
						|
 | 
						|
    /// Occurs when content changes in the text element
 | 
						|
    UIElement::RoutedEvent_<RoutedEventHandler> TextChanged();
 | 
						|
 | 
						|
public:
 | 
						|
    /// Dependency Properties
 | 
						|
    //@{
 | 
						|
    static const DependencyProperty* AcceptsReturnProperty;
 | 
						|
    static const DependencyProperty* AcceptsTabProperty;
 | 
						|
    static const DependencyProperty* CaretBrushProperty;
 | 
						|
    static const DependencyProperty* HorizontalScrollBarVisibilityProperty;
 | 
						|
    static const DependencyProperty* IsReadOnlyProperty;
 | 
						|
    static const DependencyProperty* IsSelectionActiveProperty;
 | 
						|
    static const DependencyProperty* PanningModeProperty;
 | 
						|
    static const DependencyProperty* SelectionBrushProperty;
 | 
						|
    static const DependencyProperty* SelectionOpacityProperty;
 | 
						|
    static const DependencyProperty* VerticalScrollBarVisibilityProperty;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Routed Events
 | 
						|
    //@{
 | 
						|
    static const RoutedEvent* SelectionChangedEvent;
 | 
						|
    static const RoutedEvent* TextChangedEvent;
 | 
						|
    //@}
 | 
						|
 | 
						|
protected:
 | 
						|
    void SetIsSelectionActive(bool isActive);
 | 
						|
 | 
						|
    void RaiseSelectionChanged();
 | 
						|
    virtual void OnSelectionChanged(const RoutedEventArgs& e);
 | 
						|
 | 
						|
    void RaiseTextChanged();
 | 
						|
    virtual void OnTextChanged(const RoutedEventArgs& e);
 | 
						|
 | 
						|
    // Notifies inheritors of BaseTextBox property changes
 | 
						|
    //@{
 | 
						|
    virtual void OnCaretBrushChanged(Brush* oldBrush, Brush* newBrush);
 | 
						|
    virtual void OnSelectionBrushChanged(Brush* oldBrush, Brush* newBrush);
 | 
						|
    virtual void OnSelectionOpacityChanged(float oldOpacity, float newOpacity);
 | 
						|
    virtual void OnIsReadOnlyChanged(bool oldValue, bool newValue);
 | 
						|
    //@}
 | 
						|
 | 
						|
    // Do the work of line up. Can be overridden by subclass to implement true line up.
 | 
						|
    virtual void DoLineUp(ScrollViewer* scrollViewer);
 | 
						|
 | 
						|
    // Do the work of line down. Can be overridden by subclass to implement true line down.
 | 
						|
    virtual void DoLineDown(ScrollViewer* scrollViewer);
 | 
						|
 | 
						|
    // Gets the ScrollViewer that manages text scroll
 | 
						|
    virtual ScrollViewer* GetScrollViewer() const;
 | 
						|
 | 
						|
    /// From DependencyObject
 | 
						|
    //@{
 | 
						|
    bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From UIElement
 | 
						|
    //@{
 | 
						|
    void OnMouseWheel(const MouseWheelEventArgs& e) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From Control
 | 
						|
    //@{
 | 
						|
    void UpdateVisualStates() override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    NS_DECLARE_REFLECTION(BaseTextBox, Control)
 | 
						|
};
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#endif
 |