From f44ecaa4f27e7538ddcad66d40e543bffa2d2d86 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 4 Jun 2017 16:57:49 +0200 Subject: sync with upstream --- .../include/kodi/gui/DialogNumeric.h | 366 +++++++++++++++++++++ 1 file changed, 366 insertions(+) create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/DialogNumeric.h (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/DialogNumeric.h') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/DialogNumeric.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/DialogNumeric.h new file mode 100644 index 0000000..8b5c592 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/DialogNumeric.h @@ -0,0 +1,366 @@ +#pragma once +/* + * Copyright (C) 2005-2017 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * . + * + */ + +#include "definitions.h" +#include "../AddonBase.h" + +namespace kodi +{ +namespace gui +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_DialogNumeric Dialog Numeric + /// \ingroup cpp_kodi_gui + /// @{ + /// @brief \cpp_namespace{ kodi::gui::DialogNumeric } + /// **Numeric dialogs** + /// + /// The functions listed below have to be permitted by the user for the + /// representation of a numeric keyboard around an input. + /// + /// The class supports several kinds, from an easy number choice up to the + /// passport Word production and their confirmation for add-on. + /// + /// It has the header \ref DialogNumeric.h "#include " + /// be included to enjoy it. + /// + namespace DialogNumeric + { + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Use dialog to get numeric new password + /// + /// @param[out] newPassword String to preload into the keyboard + /// accumulator. Overwritten with user input + /// if return=true. Returned in MD5 format. + /// @return true if successful display and user + /// input entry/re-entry. + /// false if unsuccessful display, no user + /// input, or canceled editing. + /// + inline bool ShowAndVerifyNewPassword(std::string& newPassword) + { + using namespace ::kodi::addon; + char* pw = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_new_password(CAddonBase::m_interface->toKodi->kodiBase, &pw); + if (pw != nullptr) + { + if (std::strlen(pw)) + newPassword = pw; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, pw); + } + return ret; + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Use dialog to verify numeric password. + /// + /// @param[in] password Password to compare with user input, need + /// in MD5 format. + /// @param[in] heading Heading to display + /// @param[in] retries If greater than 0, shows "Incorrect + /// password, %d retries left" on dialog + /// line 2, else line 2 is blank. + /// @return Possible values: + /// - 0 if successful display and user input. + /// - 1 if unsuccessful input. + /// - -1 if no user input or canceled editing. + /// + /// + ///------------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.cpp} + /// #include /* fprintf */ + /// #include + /// #include + /// + /// /* + /// * The example below shows the complete use of keyboard dialog for password + /// * check. If only one check from add-on needed can be function with retries + /// * set to '0' called alone. + /// * + /// * The use of MD5 translated password is always required for the check on Kodi! + /// */ + /// + /// int maxretries = 3; + /// + /// /* + /// * Password names need to be send as md5 sum to kodi. + /// */ + /// std::string password = kodi::GetMD5("1234"); + /// + /// /* + /// * To the loop about password checks. + /// */ + /// int ret; + /// for (unsigned int i = 0; i < maxretries; i++) + /// { + /// /* + /// * Ask the user about the password. + /// */ + /// ret = kodi::gui::DialogNumeric::ShowAndVerifyPassword(password, "Demo numeric password call for PW '1234'", i); + /// if (ret == 0) + /// { + /// fprintf(stderr, "Numeric password successfull confirmed after '%i' tries\n", i+1); + /// break; + /// } + /// else if (ret < 0) + /// { + /// fprintf(stderr, "Canceled editing on try '%i'\n", i+1); + /// break; + /// } + /// else /* if (ret > 0) */ + /// { + /// fprintf(stderr, "Wrong numeric password entered on try '%i'\n", i+1); + /// } + /// } + /// ~~~~~~~~~~~~~ + /// + inline int ShowAndVerifyPassword(const std::string& password, const std::string& heading, int retries) + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_password(CAddonBase::m_interface->toKodi->kodiBase, + password.c_str(), heading.c_str(), retries); + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Use dialog to verify numeric password + /// + /// @param[in,out] toVerify Value to compare against user input. + /// @param[in] heading Heading to display + /// @param[in] verifyInput If set as true we verify the users input + /// versus toVerify. + /// @return true if successful display and user + /// input. false if unsuccessful display, no + /// user input, or canceled editing. + /// + inline bool ShowAndVerifyInput(std::string& toVerify, const std::string& heading, bool verifyInput) + { + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_input(CAddonBase::m_interface->toKodi->kodiBase, + toVerify.c_str(), &retString, heading.c_str(), verifyInput); + if (retString != nullptr) + { + if (std::strlen(retString)) + toVerify = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); + } + return ret; + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Use dialog to get time value. + /// + /// @param[out] time Overwritten with user input if + /// return=true and time inserted. + /// @param[in] heading Heading to display. + /// @return true if successful display and user + /// input. false if unsuccessful display, no + /// user input, or canceled editing. + /// + /// + ///------------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.cpp} + /// #include /* printf */ + /// #include /* time_t, struct tm, time, localtime, strftime */ + /// #include + /// + /// time_t rawtime; + /// struct tm * timeinfo; + /// char buffer [10]; + /// + /// time (&rawtime); + /// timeinfo = localtime(&rawtime); + /// bool bRet = kodi::gui::DialogNumeric::ShowAndGetTime(*timeinfo, "Selected time test call"); + /// strftime(buffer, sizeof(buffer), "%H:%M.", timeinfo); + /// printf("Selected time it's %s and was on Dialog %s\n", buffer, bRet ? "OK" : "Canceled"); + /// ~~~~~~~~~~~~~ + /// + inline bool ShowAndGetTime(tm& time, const std::string& heading) + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_time(CAddonBase::m_interface->toKodi->kodiBase, &time, heading.c_str()); + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Use dialog to get date value. + /// + /// @param[in,out] date Overwritten with user input if + /// return=true and date inserted. + /// @param[in] heading Heading to display + /// @return true if successful display and user + /// input. false if unsuccessful display, no + /// user input, or canceled editing. + /// + /// + ///------------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.cpp} + /// #include /* printf */ + /// #include /* time_t, struct tm, time, localtime, strftime */ + /// #include + /// + /// time_t rawtime; + /// struct tm * timeinfo; + /// char buffer [20]; + /// + /// time (&rawtime); + /// timeinfo = localtime(&rawtime); + /// bool bRet = kodi::gui::DialogNumeric::ShowAndGetDate(*timeinfo, "Selected date test call"); + /// strftime(buffer, sizeof(buffer), "%Y-%m-%d", timeinfo); + /// printf("Selected date it's %s and was on Dialog %s\n", buffer, bRet ? "OK" : "Canceled"); + /// ~~~~~~~~~~~~~ + /// + inline bool ShowAndGetDate(tm& date, const std::string& heading) + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_date(CAddonBase::m_interface->toKodi->kodiBase, &date, heading.c_str()); + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Use dialog to get a IP + /// + /// @param[in,out] ipAddress Overwritten with user input if + /// return=true and IP address inserted. + /// @param[in] heading Heading to display. + /// @return true if successful display and + /// user input. false if unsuccessful + /// display, no user input, or canceled + /// editing. + /// + inline bool ShowAndGetIPAddress(std::string& ipAddress, const std::string& heading) + { + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_ip_address(CAddonBase::m_interface->toKodi->kodiBase, + ipAddress.c_str(), &retString, heading.c_str()); + if (retString != nullptr) + { + if (std::strlen(retString)) + ipAddress = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); + } + return ret; + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Use dialog to get normal number. + /// + /// @param[in,out] input Overwritten with user input if + /// return=true and time in seconds inserted + /// @param[in] heading Heading to display + /// @param[in] autoCloseTimeoutMs To close the dialog after a specified + /// time, in milliseconds, default is 0 + /// which keeps the dialog open + /// indefinitely. + /// @return true if successful display and user + /// input. false if unsuccessful display, no + /// user input, or canceled editing. + /// + /// + ///------------------------------------------------------------------------- + /// + /// **Example:** + /// ~~~~~~~~~~~~~{.cpp} + /// #include /* printf */ + /// #include /* strtoull (C++11) */ + /// #include + /// + /// std::string number; + /// bool bRet = kodi::gui::DialogNumeric::ShowAndGetNumber(number, "Number test call"); + /// printf("Written number input is : %llu and was %s\n", + /// strtoull(number.c_str(), nullptr, 0), bRet ? "OK" : "Canceled"); + /// ~~~~~~~~~~~~~ + /// + inline bool ShowAndGetNumber(std::string& input, const std::string& heading, unsigned int autoCloseTimeoutMs = 0) + { + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_number(CAddonBase::m_interface->toKodi->kodiBase, + input.c_str(), &retString, heading.c_str(), autoCloseTimeoutMs); + if (retString != nullptr) + { + if (std::strlen(retString)) + input = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); + } + return ret; + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_DialogNumeric + /// @brief Show numeric keypad to get seconds. + /// + /// @param[in,out] time Overwritten with user input if return=true and + /// time in seconds inserted. + /// @param[in] heading Heading to display + /// @return true if successful display and user input. false + /// if unsuccessful display, no user input, or + /// canceled editing. + /// + inline bool ShowAndGetSeconds(std::string& time, const std::string& heading) + { + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_seconds(CAddonBase::m_interface->toKodi->kodiBase, + time.c_str(), &retString, heading.c_str()); + if (retString != nullptr) + { + if (std::strlen(retString)) + time = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); + } + return ret; + } + //-------------------------------------------------------------------------- + }; + /// @} + +} /* namespace gui */ +} /* namespace kodi */ -- cgit v1.2.3