summaryrefslogtreecommitdiffstats
path: root/xbmc/guilib/GUIEditControl.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/guilib/GUIEditControl.h')
-rw-r--r--xbmc/guilib/GUIEditControl.h131
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;
+};