diff options
Diffstat (limited to 'xbmc/guilib/GUIEditControl.h')
-rw-r--r-- | xbmc/guilib/GUIEditControl.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/xbmc/guilib/GUIEditControl.h b/xbmc/guilib/GUIEditControl.h new file mode 100644 index 0000000..9f44f8c --- /dev/null +++ b/xbmc/guilib/GUIEditControl.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +/*! +\file GUIEditControl.h +\brief +*/ + +#include "GUIButtonControl.h" +#include "utils/Stopwatch.h" +#include "utils/StringValidation.h" +#include "utils/Variant.h" + +/*! + \ingroup controls + \brief + */ + +class CGUIEditControl : public CGUIButtonControl +{ +public: + enum INPUT_TYPE { + INPUT_TYPE_READONLY = -1, + INPUT_TYPE_TEXT = 0, + INPUT_TYPE_NUMBER, + INPUT_TYPE_SECONDS, + INPUT_TYPE_TIME, + INPUT_TYPE_DATE, + INPUT_TYPE_IPADDRESS, + INPUT_TYPE_PASSWORD, + INPUT_TYPE_PASSWORD_MD5, + INPUT_TYPE_SEARCH, + INPUT_TYPE_FILTER, + INPUT_TYPE_PASSWORD_NUMBER_VERIFY_NEW + }; + + CGUIEditControl(int parentID, int controlID, float posX, float posY, + float width, float height, const CTextureInfo &textureFocus, const CTextureInfo &textureNoFocus, + const CLabelInfo& labelInfo, const std::string &text); + explicit CGUIEditControl(const CGUIButtonControl &button); + ~CGUIEditControl(void) override; + CGUIEditControl* Clone() const override { return new CGUIEditControl(*this); } + + bool OnMessage(CGUIMessage &message) override; + bool OnAction(const CAction &action) override; + void OnClick() override; + + void SetLabel(const std::string &text) override; + void SetLabel2(const std::string &text) override; + void SetHint(const KODI::GUILIB::GUIINFO::CGUIInfoLabel& hint); + + std::string GetLabel2() const override; + + unsigned int GetCursorPosition() const; + void SetCursorPosition(unsigned int iPosition); + + void SetInputType(INPUT_TYPE type, const CVariant& heading); + + void SetTextChangeActions(const CGUIAction& textChangeActions) + { + m_textChangeActions = textChangeActions; + } + + bool HasTextChangeActions() const { return m_textChangeActions.HasActionsMeetingCondition(); } + + virtual bool HasInvalidInput() const { return m_invalidInput; } + virtual void SetInputValidation(StringValidation::Validator inputValidator, void *data = NULL); + +protected: + void SetFocus(bool focus) override; + void ProcessText(unsigned int currentTime) override; + void RenderText() override; + CGUILabel::COLOR GetTextColor() const override; + std::wstring GetDisplayedText() const; + std::string GetDescriptionByIndex(int index) const override; + bool SetStyledText(const std::wstring &text); + void RecalcLabelPosition(); + void ValidateCursor(); + void UpdateText(bool sendUpdate = true); + void OnPasteClipboard(); + void OnSMSCharacter(unsigned int key); + void DefaultConstructor(); + + virtual bool ValidateInput(const std::wstring &data) const; + void ValidateInput(); + + /*! \brief Clear out the current text input if it's an MD5 password. + \return true if the password is cleared, false otherwise. + */ + bool ClearMD5(); + + std::wstring m_text2; + std::string m_text; + KODI::GUILIB::GUIINFO::CGUIInfoLabel m_hintInfo; + float m_textOffset; + float m_textWidth; + CRect m_clipRect; ///< clipping rect for the second label + + static const int spaceWidth = 5; + + unsigned int m_cursorPos; + unsigned int m_cursorBlink; + + std::string m_inputHeading; + INPUT_TYPE m_inputType; + bool m_isMD5; + + CGUIAction m_textChangeActions; + + bool m_invalidInput; + StringValidation::Validator m_inputValidator; + void *m_inputValidatorData; + + unsigned int m_smsKeyIndex; + unsigned int m_smsLastKey; + CStopWatch m_smsTimer; + + std::wstring m_edit; + int m_editOffset; + int m_editLength; + + static const char* smsLetters[10]; + static const unsigned int smsDelay; +}; |