173 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// NoesisGUI - http://www.noesisengine.com
 | 
						|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
#ifndef __GUI_PASSWORDBOX_H__
 | 
						|
#define __GUI_PASSWORDBOX_H__
 | 
						|
 | 
						|
 | 
						|
#include <NsCore/Noesis.h>
 | 
						|
#include <NsGui/CoreApi.h>
 | 
						|
#include <NsGui/Control.h>
 | 
						|
 | 
						|
 | 
						|
namespace Noesis
 | 
						|
{
 | 
						|
 | 
						|
class PasswordBoxTextContainer;
 | 
						|
struct CanExecuteRoutedEventArgs;
 | 
						|
struct ExecutedRoutedEventArgs;
 | 
						|
 | 
						|
NS_WARNING_PUSH
 | 
						|
NS_MSVC_WARNING_DISABLE(4251 4275)
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Represents a control designed for entering and handling passwords.
 | 
						|
///
 | 
						|
/// http://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox.aspx
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
class NS_GUI_CORE_API PasswordBox: public Control
 | 
						|
{
 | 
						|
public:
 | 
						|
    PasswordBox();
 | 
						|
    ~PasswordBox();
 | 
						|
 | 
						|
    /// Selects the entire contents of the PasswordBox
 | 
						|
    void SelectAll();
 | 
						|
 | 
						|
    /// Gets or sets the brush that is used to paint the caret of the PasswordBox
 | 
						|
    //@{
 | 
						|
    Brush* GetCaretBrush() const;
 | 
						|
    void SetCaretBrush(Brush* brush);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the maximum length for passwords to be handled by this PasswordBox
 | 
						|
    //@{
 | 
						|
    int GetMaxLength() const;
 | 
						|
    void SetMaxLength(int length);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the masking character for the PasswordBox
 | 
						|
    //@{
 | 
						|
    uint32_t GetPasswordChar() const;
 | 
						|
    void SetPasswordChar(uint32_t value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the password currently held by the PasswordBox.
 | 
						|
    //@{
 | 
						|
    const char* GetPassword() const;
 | 
						|
    void SetPassword(const char* password);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the placeholder text
 | 
						|
    //@{
 | 
						|
    const char* GetPlaceholder() const;
 | 
						|
    void SetPlaceholder(const char* text);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// 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 the duration in milliseconds that the last character typed in the PasswordBox
 | 
						|
    /// remains visible before it is converted into the corresponding *PasswordChar*
 | 
						|
    //@{
 | 
						|
    uint32_t GetShowLastCharacterDuration() const;
 | 
						|
    void SetShowLastCharacterDuration(uint32_t duration);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Removes the caret until control gets focused again
 | 
						|
    void HideCaret();
 | 
						|
 | 
						|
    /// Occurs when password changes
 | 
						|
    UIElement::RoutedEvent_<RoutedEventHandler> PasswordChanged();
 | 
						|
 | 
						|
public:
 | 
						|
    static const DependencyProperty* CaretBrushProperty;
 | 
						|
    static const DependencyProperty* MaxLengthProperty;
 | 
						|
    static const DependencyProperty* PasswordCharProperty;
 | 
						|
    static const DependencyProperty* PlaceholderProperty;
 | 
						|
    static const DependencyProperty* SelectionBrushProperty;
 | 
						|
    static const DependencyProperty* SelectionOpacityProperty;
 | 
						|
    static const DependencyProperty* ShowLastCharacterDurationProperty;
 | 
						|
 | 
						|
    static const RoutedEvent* PasswordChangedEvent;
 | 
						|
 | 
						|
protected:
 | 
						|
    // From DependencyObject
 | 
						|
    //@{
 | 
						|
    bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    // From UIElement
 | 
						|
    //@{
 | 
						|
    void OnKeyDown(const KeyEventArgs& e) override;
 | 
						|
    void OnTextInput(const TextCompositionEventArgs& e) override;
 | 
						|
    void OnGotKeyboardFocus(const KeyboardFocusChangedEventArgs& e) override;
 | 
						|
    void OnLostKeyboardFocus(const KeyboardFocusChangedEventArgs& e) override;
 | 
						|
    void OnMouseLeftButtonDown(const MouseButtonEventArgs& e) override;
 | 
						|
    void OnMouseLeftButtonUp(const MouseButtonEventArgs& e) override;
 | 
						|
    void OnMouseMove(const MouseEventArgs& e) override;
 | 
						|
    void OnTouchDown(const TouchEventArgs& e) override;
 | 
						|
    void OnTapped(const TappedEventArgs& e) override;
 | 
						|
    void OnDoubleTapped(const DoubleTappedEventArgs& e) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    // From Control
 | 
						|
    //@{
 | 
						|
    void OnTemplateChanged(FrameworkTemplate* oldTemplate, FrameworkElement* oldRoot,
 | 
						|
        FrameworkTemplate* newTemplate, FrameworkElement* newRoot) override;
 | 
						|
    void OnMouseDoubleClick(const MouseButtonEventArgs& e) override;
 | 
						|
    void OnIsFocusEngagedChanged(bool engaged) override;
 | 
						|
    void UpdateVisualStates() override;
 | 
						|
    //@}
 | 
						|
 | 
						|
private:
 | 
						|
    void CancelTimer();
 | 
						|
    uint32_t OnTimerElapsed();
 | 
						|
 | 
						|
private:
 | 
						|
    Ptr<FrameworkElement> mContentHost;
 | 
						|
    PasswordBoxTextContainer* mTextContainer;
 | 
						|
 | 
						|
    String mPassword;
 | 
						|
 | 
						|
    uint32_t mLastCharIndex;
 | 
						|
    uint32_t mTimerId;
 | 
						|
 | 
						|
    union
 | 
						|
    {
 | 
						|
        mutable struct
 | 
						|
        {
 | 
						|
            bool mouseDown : 1;
 | 
						|
            bool caretDisabled : 1;
 | 
						|
            bool showLastChar : 1;
 | 
						|
        } mFlags;
 | 
						|
 | 
						|
        // To quickly set all flags to 0
 | 
						|
        mutable uint8_t mAllFlags;
 | 
						|
    };
 | 
						|
 | 
						|
    NS_DECLARE_REFLECTION(PasswordBox, Control)
 | 
						|
};
 | 
						|
 | 
						|
NS_WARNING_POP
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#endif
 |