xmake.repo/packages/n/noesis/latest/Include/NsGui/BaseTextBox.h
2024-12-22 19:15:02 +08:00

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