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
|