diff options
Diffstat (limited to 'xbmc/guilib/GUIKeyboard.h')
-rw-r--r-- | xbmc/guilib/GUIKeyboard.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/xbmc/guilib/GUIKeyboard.h b/xbmc/guilib/GUIKeyboard.h new file mode 100644 index 0000000..a6ca5ad --- /dev/null +++ b/xbmc/guilib/GUIKeyboard.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2012-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 + +#include "threads/Timer.h" + +#include <string> + +class CGUIKeyboard; +enum FILTERING { FILTERING_NONE = 0, FILTERING_CURRENT, FILTERING_SEARCH }; +typedef void (*char_callback_t) (CGUIKeyboard *ref, const std::string &typedString); + +#ifdef TARGET_WINDOWS // disable 4355: 'this' used in base member initializer list +#pragma warning(push) +#pragma warning(disable: 4355) +#endif + +class CGUIKeyboard : public ITimerCallback +{ + public: + CGUIKeyboard() : m_idleTimer(this) {} + ~CGUIKeyboard() override = default; + + // entrypoint + /*! + * \brief each native keyboard needs to implement this function with the following behaviour: + * + * \param pCallback implementation should call this on each keypress with the current whole string + * \param initialString implementation should show that initialstring + * \param typedstring returns the typed string after close if return is true + * \param heading implementation should show a heading (e.x. "search for a movie") + * \param bHiddenInput if true the implementation should obfuscate the user input (e.x. by printing "*" for each char) + * + * \return - true if typedstring is valid and user has confirmed input - false if typedstring is undefined and user canceled the input + * + */ + virtual bool ShowAndGetInput(char_callback_t pCallback, + const std::string &initialString, + std::string &typedString, + const std::string &heading, + bool bHiddenInput = false) = 0; + + /*! + *\brief This call should cancel a currently shown keyboard dialog. The implementation should + * return false from the modal ShowAndGetInput once anyone calls this method. + */ + virtual void Cancel() = 0; + + virtual int GetWindowId() const {return 0;} + + // CTimer Interface for autoclose + void OnTimeout() override + { + Cancel(); + } + + // helpers for autoclose function + void startAutoCloseTimer(unsigned int autoCloseMs) + { + if ( autoCloseMs > 0 ) + m_idleTimer.Start(std::chrono::milliseconds(autoCloseMs), false); + } + + void resetAutoCloseTimer() + { + if (m_idleTimer.IsRunning()) + m_idleTimer.Restart(); + } + + virtual bool SetTextToKeyboard(const std::string &text, bool closeKeyboard = false) { return false; } + + private: + CTimer m_idleTimer; +}; + +#ifdef TARGET_WINDOWS +#pragma warning(pop) +#endif |