267 lines
8.7 KiB
C++
267 lines
8.7 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// NoesisGUI - http://www.noesisengine.com
|
|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#ifndef __GUI_CONTROL_H__
|
|
#define __GUI_CONTROL_H__
|
|
|
|
|
|
#include <NsCore/Noesis.h>
|
|
#include <NsGui/FrameworkElement.h>
|
|
|
|
|
|
namespace Noesis
|
|
{
|
|
|
|
class Brush;
|
|
class FontFamily;
|
|
class ControlTemplate;
|
|
enum FontStretch: int32_t;
|
|
enum FontStyle: int32_t;
|
|
enum FontWeight: int32_t;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/// Represents the base class for all user interactive elements.
|
|
///
|
|
/// http://msdn.microsoft.com/en-us/library/system.windows.controls.control.aspx
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
class NS_GUI_CORE_API Control: public FrameworkElement
|
|
{
|
|
public:
|
|
Control();
|
|
~Control();
|
|
|
|
/// Gets or sets a Brush that describes the background of a control
|
|
//@{
|
|
Brush* GetBackground() const;
|
|
void SetBackground(Brush* brush);
|
|
//@}
|
|
|
|
/// Gets or sets a Brush that describes the border of a control
|
|
//@{
|
|
Brush* GetBorderBrush() const;
|
|
void SetBorderBrush(Brush* brush);
|
|
//@}
|
|
|
|
/// Gets or sets the border Thickness of a control
|
|
//@{
|
|
const Thickness& GetBorderThickness() const;
|
|
void SetBorderThickness(const Thickness& thickness);
|
|
//@}
|
|
|
|
/// Gets or sets the FontFamily of the control
|
|
//@{
|
|
FontFamily* GetFontFamily() const;
|
|
void SetFontFamily(FontFamily* fontFamily);
|
|
//@}
|
|
|
|
/// Gets or sets the font size
|
|
//@{
|
|
float GetFontSize() const;
|
|
void SetFontSize(float size);
|
|
//@}
|
|
|
|
/// Gets or sets the FontStretch
|
|
//@{
|
|
FontStretch GetFontStretch() const;
|
|
void SetFontStretch(FontStretch stretch);
|
|
//@}
|
|
|
|
/// Gets or sets the FontStyle
|
|
//@{
|
|
FontStyle GetFontStyle() const;
|
|
void SetFontStyle(FontStyle style);
|
|
//@}
|
|
|
|
/// Gets or sets the FontWeight or thickness of the specified font
|
|
//@{
|
|
FontWeight GetFontWeight() const;
|
|
void SetFontWeight(FontWeight weight);
|
|
//@}
|
|
|
|
/// Gets or sets a Brush that describes the foreground color
|
|
//@{
|
|
Brush* GetForeground() const;
|
|
void SetForeground(Brush* foreground);
|
|
//@}
|
|
|
|
/// Gets or sets the HorizontalAlignment of a control's content
|
|
//@{
|
|
HorizontalAlignment GetHorizontalContentAlignment() const;
|
|
void SetHorizontalContentAlignment(HorizontalAlignment halign);
|
|
//@}
|
|
|
|
/// Gets or sets a value that indicates whether a control is included in tab navigation.
|
|
//@{
|
|
bool GetIsTabStop() const;
|
|
void SetIsTabStop(bool value);
|
|
//@}
|
|
|
|
/// Gets or sets the padding inside a control
|
|
//@{
|
|
const Thickness& GetPadding() const;
|
|
void SetPadding(const Thickness& padding);
|
|
//@}
|
|
|
|
/// Gets or sets a value that determines the order in which elements receive focus when the
|
|
/// user navigates through controls by using the TAB key.
|
|
//@{
|
|
int32_t GetTabIndex() const;
|
|
void SetTabIndex(int32_t value);
|
|
//@}
|
|
|
|
/// Gets or sets ControlTemplate for this element
|
|
//@{
|
|
ControlTemplate* GetTemplate() const;
|
|
void SetTemplate(ControlTemplate* controlTemplate);
|
|
//@}
|
|
|
|
/// Gets or sets the VerticalAlignment of a control's content
|
|
//@{
|
|
VerticalAlignment GetVerticalContentAlignment() const;
|
|
void SetVerticalContentAlignment(VerticalAlignment valign);
|
|
//@}
|
|
|
|
/// Get or sets a value that indicates whether focus is constrained within the control
|
|
/// boundaries (for game pad/remote interaction)
|
|
//@{
|
|
bool GetIsFocusEngaged() const;
|
|
void SetIsFocusEngaged(bool engage);
|
|
//@}
|
|
|
|
/// Get or sets a value that indicates whether focus can be constrained within the control
|
|
/// boundaries (for game pad / remote interaction)
|
|
//@{
|
|
bool GetIsFocusEngagementEnabled() const;
|
|
void SetIsFocusEngagementEnabled(bool enable);
|
|
//@}
|
|
|
|
// Indicates if this control is using focus engagement. For internal use only.
|
|
//@{
|
|
bool GetUsingFocusEngagement() const;
|
|
void SetUsingFocusEngagement(bool value);
|
|
//@}
|
|
|
|
/// Gets or sets the object that gets focus when a user presses Left direction on a keyboard or
|
|
/// a controller. Setting this property overrides default directional navigation behavior
|
|
//@{
|
|
UIElement* GetXYFocusLeft() const;
|
|
void SetXYFocusLeft(UIElement* value);
|
|
//@}
|
|
|
|
/// Gets or sets the object that gets focus when a user presses Right direction on a keyboard or
|
|
/// a controller. Setting this property overrides default directional navigation behavior
|
|
//@{
|
|
UIElement* GetXYFocusRight() const;
|
|
void SetXYFocusRight(UIElement* value);
|
|
//@}
|
|
|
|
/// Gets or sets the object that gets focus when a user presses Up direction on a keyboard or a
|
|
/// controller. Setting this property overrides default directional navigation behavior
|
|
//@{
|
|
UIElement* GetXYFocusUp() const;
|
|
void SetXYFocusUp(UIElement* value);
|
|
//@}
|
|
|
|
/// Gets or sets the object that gets focus when a user presses Down direction on a keyboard or
|
|
/// a controller. Setting this property overrides default directional navigation behavior
|
|
//@{
|
|
UIElement* GetXYFocusDown() const;
|
|
void SetXYFocusDown(UIElement* value);
|
|
//@}
|
|
|
|
/// Occurs when a mouse button is clicked two or more times
|
|
UIElement::RoutedEvent_<MouseButtonEventHandler> MouseDoubleClick();
|
|
|
|
/// Occurs when a user clicks the mouse button two or more times
|
|
UIElement::RoutedEvent_<MouseButtonEventHandler> PreviewMouseDoubleClick();
|
|
|
|
public:
|
|
/// Dependency properties
|
|
//@{
|
|
static const DependencyProperty* BackgroundProperty;
|
|
static const DependencyProperty* BorderBrushProperty;
|
|
static const DependencyProperty* BorderThicknessProperty;
|
|
static const DependencyProperty* FontFamilyProperty;
|
|
static const DependencyProperty* FontSizeProperty;
|
|
static const DependencyProperty* FontStretchProperty;
|
|
static const DependencyProperty* FontStyleProperty;
|
|
static const DependencyProperty* FontWeightProperty;
|
|
static const DependencyProperty* ForegroundProperty;
|
|
static const DependencyProperty* HorizontalContentAlignmentProperty;
|
|
static const DependencyProperty* IsTabStopProperty;
|
|
static const DependencyProperty* PaddingProperty;
|
|
static const DependencyProperty* TabIndexProperty;
|
|
static const DependencyProperty* TemplateProperty;
|
|
static const DependencyProperty* VerticalContentAlignmentProperty;
|
|
|
|
static const DependencyProperty* IsFocusEngagedProperty;
|
|
static const DependencyProperty* IsFocusEngagementEnabledProperty;
|
|
|
|
static const DependencyProperty* XYFocusLeftProperty;
|
|
static const DependencyProperty* XYFocusRightProperty;
|
|
static const DependencyProperty* XYFocusUpProperty;
|
|
static const DependencyProperty* XYFocusDownProperty;
|
|
//@}
|
|
|
|
/// Dependency events
|
|
//@{
|
|
static const RoutedEvent* MouseDoubleClickEvent;
|
|
static const RoutedEvent* PreviewMouseDoubleClickEvent;
|
|
//@}
|
|
|
|
protected:
|
|
/// Property change notification for inheritors
|
|
//@{
|
|
virtual void OnFontFamilyChanged(FontFamily* fontFamily);
|
|
virtual void OnFontSizeChanged(float fontSize);
|
|
virtual void OnFontStretchChanged(FontStretch fontStretch);
|
|
virtual void OnFontStyleChanged(FontStyle fontStyle);
|
|
virtual void OnFontWeightChanged(FontWeight fontWeight);
|
|
virtual void OnForegroundChanged(Brush* brush);
|
|
virtual void OnIsFocusEngagedChanged(bool engaged);
|
|
//@}
|
|
|
|
/// Function to be called when a property involved in the internal VisualStates of the control
|
|
/// has changed
|
|
virtual void UpdateVisualStates();
|
|
|
|
/// Calls VisualStateManager GoToState()
|
|
//@{
|
|
void GoToState(Symbol stateName);
|
|
void GoToState(Symbol stateName, Symbol fallbackStateName);
|
|
//@}
|
|
|
|
/// Raises the MouseDoubleClick routed event.
|
|
virtual void OnMouseDoubleClick(const MouseButtonEventArgs& e);
|
|
|
|
/// Raises the PreviewMouseDoubleClick routed event.
|
|
virtual void OnPreviewMouseDoubleClick(const MouseButtonEventArgs& e);
|
|
|
|
/// From UIElement
|
|
//@{
|
|
void OnPreviewMouseDown(const MouseButtonEventArgs& e) override;
|
|
void OnPreviewKeyDown(const KeyEventArgs& e) override;
|
|
void OnPreviewLostKeyboardFocus(const KeyboardFocusChangedEventArgs& e) override;
|
|
//@}
|
|
|
|
/// From FrameworkElement
|
|
//@{
|
|
void OnPreApplyTemplate() override;
|
|
void OnPostApplyTemplate() override;
|
|
//@}
|
|
|
|
/// From DependencyObject
|
|
//@{
|
|
bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override;
|
|
//@}
|
|
|
|
NS_DECLARE_REFLECTION(Control, FrameworkElement)
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|