You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.8 KiB
109 lines
3.8 KiB
//=========== Copyright Valve Corporation, All rights reserved. ===============// |
|
// |
|
// Purpose: |
|
//=============================================================================// |
|
|
|
#ifndef PANORAMA_TEXTINPUT_H |
|
#define PANORAMA_TEXTINPUT_H |
|
|
|
#include "panorama/controls/panel2d.h" |
|
#include "panorama/input/iuiinput.h" |
|
|
|
namespace panorama |
|
{ |
|
|
|
class ITextInputControl; |
|
class CTextInputHandlerSettings; |
|
|
|
// When text input finished, bool = true for Done, = false for Cancel; char const * = string that user typed |
|
// Dispatched to ITextInputControl::GetAssociatedPanel() |
|
DECLARE_PANEL_EVENT2( TextInputFinished, bool, char const * ); |
|
|
|
// When the handler is up and sees gamepad right-stick input, it passes it through to the containing |
|
// control, so the control can do something with it. Dispatched to ITextInputControl::GetAssociatedPanel() |
|
DECLARE_PANEL_EVENT1( TextInputAnalogStickPassthrough, GamePadData_t ); |
|
|
|
panorama::ETextInputHandlerType_t ETextInputHandlerType_tFromName( const char *pchName ); |
|
const char *PchNameFromETextInputHandlerType_t( int eType ); |
|
|
|
// |
|
// Input submodes for text input handlers, used also by textentry |
|
// |
|
enum ETextInputMode_t |
|
{ |
|
k_ETextInputModeNormal, |
|
k_ETextInputModeNormalLower, |
|
k_ETextInputModePassword, |
|
k_ETextInputModeEmail, |
|
k_ETextInputModeNumeric, |
|
k_ETextInputModeNumericPassword, |
|
k_ETextInputModeURL, |
|
k_ETextInputModeSteamCode, |
|
k_ETextInputModePhoneNumber, |
|
}; |
|
|
|
ETextInputMode_t ETextInputMode_tFromName( const char *pchName ); |
|
const char *PchNameFromETextInputMode_t( int eMode ); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: an interface that the text input uses to feed and be fed text |
|
//----------------------------------------------------------------------------- |
|
class ITextInputControl |
|
{ |
|
public: |
|
virtual ~ITextInputControl() {} |
|
|
|
virtual bool OnKeyDown( const KeyData_t &code ) = 0; |
|
virtual bool OnKeyUp( const KeyData_t & code ) = 0; |
|
virtual bool OnKeyTyped( const KeyData_t &unichar ) = 0; |
|
|
|
// return true if you own the backing store of the text and can return it immediately on request, |
|
// false otherwise (html returns false here) |
|
virtual bool BSupportsImmediateTextReturn() = 0; |
|
|
|
virtual int32 GetCursorOffset() const = 0; |
|
virtual uint GetCharCount() const = 0; |
|
|
|
virtual const char *PchGetText() const = 0; |
|
virtual const wchar_t *PwchGetText() const = 0; |
|
|
|
virtual void InsertCharacterAtCursor( const wchar_t &unichar ) = 0; |
|
virtual void InsertCharactersAtCursor( const wchar_t *pwch, size_t cwch ) = 0; |
|
|
|
virtual CPanel2D *GetAssociatedPanel() = 0; |
|
|
|
// request string the control now contains |
|
virtual void RequestControlString() = 0; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: The interface over a text input handler. Derives from CPanel2D |
|
// for convenience. |
|
//----------------------------------------------------------------------------- |
|
class CTextInputHandler : public panorama::CPanel2D |
|
{ |
|
public: |
|
CTextInputHandler( panorama::IUIWindow *pParent, const char *pchID ); |
|
CTextInputHandler( panorama::CPanel2D *pParent, const char *pchID ); |
|
virtual ~CTextInputHandler(); |
|
|
|
virtual void OpenHandler() = 0; |
|
void CloseHandler( bool bCommitText ); |
|
virtual ETextInputHandlerType_t GetType() = 0; |
|
virtual ITextInputControl *GetControlInterface() = 0; |
|
virtual void SuggestWord( const wchar_t *pwch, int ich ) = 0; |
|
virtual void SetYButtonAction( const char *pchLabel, IUIEvent *pEvent ) = 0; |
|
|
|
protected: |
|
virtual void CloseHandlerImpl( bool bCommitText ) = 0; |
|
}; |
|
|
|
// Factory methods |
|
CTextInputHandler *CreateTextInputHandler( panorama::IUIWindow *pParent, const CTextInputHandlerSettings &settings, ITextInputControl *pControl ); |
|
CTextInputHandler *CreateTextInputHandler( panorama::CPanel2D *pParent, const CTextInputHandlerSettings &settings, ITextInputControl *pControl ); |
|
|
|
} // namespace panorama |
|
|
|
#endif // PANORAMA_TEXTINPUT_H |
|
|
|
|