From be933ef2241d79558f91796cc5b3a161f72ebf9c Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 19 Oct 2020 00:52:24 +0200 Subject: sync with upstream --- .../include/kodi/gui/dialogs/CMakeLists.txt | 14 + .../include/kodi/gui/dialogs/ContextMenu.h | 186 ++++++++++ .../include/kodi/gui/dialogs/ExtendedProgress.h | 242 ++++++++++++ .../include/kodi/gui/dialogs/FileBrowser.h | 302 +++++++++++++++ .../include/kodi/gui/dialogs/Keyboard.h | 404 +++++++++++++++++++++ .../include/kodi/gui/dialogs/Numeric.h | 346 ++++++++++++++++++ .../kodi-dev-kit/include/kodi/gui/dialogs/OK.h | 101 ++++++ .../include/kodi/gui/dialogs/Progress.h | 244 +++++++++++++ .../kodi-dev-kit/include/kodi/gui/dialogs/Select.h | 269 ++++++++++++++ .../include/kodi/gui/dialogs/TextViewer.h | 109 ++++++ .../kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h | 188 ++++++++++ 11 files changed, 2405 insertions(+) create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h create mode 100644 xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h (limited to 'xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs') diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt new file mode 100644 index 0000000..9aaee4f --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt @@ -0,0 +1,14 @@ +set(HEADERS ContextMenu.h + ExtendedProgress.h + FileBrowser.h + Keyboard.h + Numeric.h + OK.h + Progress.h + Select.h + TextViewer.h + YesNo.h) + +if(NOT ENABLE_STATIC_LIBS) + core_add_library(addons_kodi-dev-kit_include_kodi_gui_dialogs) +endif() diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h new file mode 100644 index 0000000..b576b9a --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h @@ -0,0 +1,186 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/context_menu.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_ContextMenu Dialog Context Menu +/// @ingroup cpp_kodi_gui_dialogs +/// @brief @cpp_namespace{ kodi::gui::dialogs::ContextMenu } +/// **Context menu dialog**@n +/// The function listed below permits the call of a dialogue as context menu to +/// select of an entry as a key +/// +/// It has the header @ref ContextMenu.h "#include " +/// be included to enjoy it. +/// +/// +namespace ContextMenu +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_ContextMenu +/// @brief Show a context menu dialog about given parts. +/// +/// @param[in] heading Dialog heading name +/// @param[in] entries String list about entries +/// @return The selected entry, if return -1 was nothing selected or canceled +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// const std::vector entries +/// { +/// "Test 1", +/// "Test 2", +/// "Test 3", +/// "Test 4", +/// "Test 5" +/// }; +/// +/// int selected = kodi::gui::dialogs::ContextMenu::Show("Test selection", entries); +/// if (selected < 0) +/// fprintf(stderr, "Item selection canceled\n"); +/// else +/// fprintf(stderr, "Selected item is: %i\n", selected); +/// ~~~~~~~~~~~~~ +/// +inline int ATTRIBUTE_HIDDEN Show(const std::string& heading, + const std::vector& entries) +{ + using namespace ::kodi::addon; + unsigned int size = static_cast(entries.size()); + const char** cEntries = static_cast(malloc(size * sizeof(const char**))); + for (unsigned int i = 0; i < size; ++i) + { + cEntries[i] = entries[i].c_str(); + } + int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size); + free(cEntries); + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_ContextMenu +/// @brief Show a context menu dialog about given parts. +/// +/// @param[in] heading Dialog heading name +/// @param[in] entries String list about entries +/// @return The selected entry, if return -1 was nothing selected or canceled +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// const std::vector> entries +/// { +/// { "ID 1", "Test 1" }, +/// { "ID 2", "Test 2" }, +/// { "ID 3", "Test 3" }, +/// { "ID 4", "Test 4" }, +/// { "ID 5", "Test 5" } +/// }; +/// +/// int selected = kodi::gui::dialogs::ContextMenu::Show("Test selection", entries); +/// if (selected < 0) +/// fprintf(stderr, "Item selection canceled\n"); +/// else +/// fprintf(stderr, "Selected item is: %i\n", selected); +/// ~~~~~~~~~~~~~ +/// +inline int ATTRIBUTE_HIDDEN Show(const std::string& heading, + const std::vector>& entries) +{ + using namespace ::kodi::addon; + unsigned int size = static_cast(entries.size()); + const char** cEntries = static_cast(malloc(size * sizeof(const char**))); + for (unsigned int i = 0; i < size; ++i) + { + cEntries[i] = entries[i].second.c_str(); + } + int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size); + free(cEntries); + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_ContextMenu +/// @brief Show a context menu dialog about given parts. +/// +/// @param[in] heading Dialog heading name +/// @param[in] entries String list about entries +/// @return The selected entry, if return -1 was nothing selected or canceled +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// const std::vector> entries +/// { +/// { 1, "Test 1" }, +/// { 2, "Test 2" }, +/// { 3, "Test 3" }, +/// { 4, "Test 4" }, +/// { 5, "Test 5" } +/// }; +/// +/// int selected = kodi::gui::dialogs::ContextMenu::Show("Test selection", entries); +/// if (selected < 0) +/// fprintf(stderr, "Item selection canceled\n"); +/// else +/// fprintf(stderr, "Selected item is: %i\n", selected); +/// ~~~~~~~~~~~~~ +/// +inline int ATTRIBUTE_HIDDEN Show(const std::string& heading, + const std::vector>& entries) +{ + using namespace ::kodi::addon; + unsigned int size = static_cast(entries.size()); + const char** cEntries = static_cast(malloc(size * sizeof(const char**))); + for (unsigned int i = 0; i < size; ++i) + { + cEntries[i] = entries[i].second.c_str(); + } + int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size); + free(cEntries); + return ret; +} +//------------------------------------------------------------------------------ +}; // namespace ContextMenu + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h new file mode 100644 index 0000000..c650483 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h @@ -0,0 +1,242 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/extended_progress.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_CExtendedProgress Dialog Extended Progress +/// @ingroup cpp_kodi_gui_dialogs +/// @brief @cpp_class{ kodi::gui::dialogs::ExtendedProgress } +/// **Progress dialog shown for background work** +/// +/// The with @ref ExtendedProgress.h "#include " +/// given class are basically used to create Kodi's extended progress. +/// +/// +/// -------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// kodi::gui::dialogs::CExtendedProgress *ext_progress = new kodi::gui::dialogs::CExtendedProgress("Test Extended progress"); +/// ext_progress->SetText("Test progress"); +/// for (unsigned int i = 0; i < 50; i += 10) +/// { +/// ext_progress->SetProgress(i, 100); +/// sleep(1); +/// } +/// +/// ext_progress->SetTitle("Test Extended progress - Second round"); +/// ext_progress->SetText("Test progress - Step 2"); +/// +/// for (unsigned int i = 50; i < 100; i += 10) +/// { +/// ext_progress->SetProgress(i, 100); +/// sleep(1); +/// } +/// delete ext_progress; +/// ~~~~~~~~~~~~~ +/// +class ATTRIBUTE_HIDDEN CExtendedProgress +{ +public: + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// Construct a new dialog. + /// + /// @param[in] title [opt] Title string + /// + explicit CExtendedProgress(const std::string& title = "") + { + using namespace ::kodi::addon; + m_DialogHandle = CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->new_dialog( + CAddonBase::m_interface->toKodi->kodiBase, title.c_str()); + if (!m_DialogHandle) + kodi::Log(ADDON_LOG_FATAL, + "kodi::gui::CDialogExtendedProgress can't create window class from Kodi !!!"); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// Destructor. + /// + ~CExtendedProgress() + { + using namespace ::kodi::addon; + if (m_DialogHandle) + CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->delete_dialog( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief Get the used title. + /// + /// @return Title string + /// + std::string Title() const + { + using namespace ::kodi::addon; + std::string text; + char* strMsg = CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->get_title( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + if (strMsg != nullptr) + { + if (std::strlen(strMsg)) + text = strMsg; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + strMsg); + } + return text; + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief To set the title of dialog. + /// + /// @param[in] title Title string + /// + void SetTitle(const std::string& title) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_title( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, title.c_str()); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief Get the used text information string. + /// + /// @return Text string + /// + std::string Text() const + { + using namespace ::kodi::addon; + std::string text; + char* strMsg = CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->get_text( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + if (strMsg != nullptr) + { + if (std::strlen(strMsg)) + text = strMsg; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + strMsg); + } + return text; + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief To set the used text information string. + /// + /// @param[in] text Information text to set + /// + void SetText(const std::string& text) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_text( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, text.c_str()); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief To ask dialog is finished. + /// + /// @return True if on end + /// + bool IsFinished() const + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->is_finished( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief Mark progress finished. + /// + void MarkFinished() + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->mark_finished( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief Get the current progress position as percent. + /// + /// @return Position + /// + float Percentage() const + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->get_percentage( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief To set the current progress position as percent. + /// + /// @param[in] percentage Position to use from 0.0 to 100.0 + /// + void SetPercentage(float percentage) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_percentage( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, percentage); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// @brief To set progress position with predefined places. + /// + /// @param[in] currentItem Place position to use + /// @param[in] itemCount Amount of used places + /// + void SetProgress(int currentItem, int itemCount) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_progress( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, currentItem, itemCount); + } + //---------------------------------------------------------------------------- + +private: + KODI_GUI_HANDLE m_DialogHandle; +}; + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h new file mode 100644 index 0000000..244c76c --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h @@ -0,0 +1,302 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/filebrowser.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_FileBrowser Dialog File Browser +/// @ingroup cpp_kodi_gui_dialogs +/// @brief @cpp_namespace{ kodi::gui::dialogs::FileBrowser } +/// **File browser dialog**\n +/// The functions listed below of the class "FileBrowser" offer the possibility +/// to select to a file by the user of the add-on. +/// +/// It allows all the options that are possible in Kodi itself and offers all +/// support file types. +/// +/// It has the header @ref FileBrowser.h "#include " +/// be included to enjoy it. +/// +namespace FileBrowser +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_FileBrowser +/// @brief Directory selection dialog. +/// +/// @param[in] shares With Shares becomes the available start folders be set +/// @param[in] heading Dialog header name +/// @param[in,out] path As in the path to start and return value about +/// selected directory +/// @param[in] writeOnly [opt] If set only writeable folders are shown +/// @return False if selection becomes canceled +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// // Example show directory selection dialog with on 'share' (first value) +/// // defined directory types. +/// // +/// // If this becomes leaved empty and 'directory' is empty goes it to the +/// // base path of the hard disk. +/// // +/// // Also can be with path written to 'directory' before the dialog forced +/// // to a start place. +/// std::string directory; +/// bool ret = kodi::gui::dialogs::FileBrowser::ShowAndGetDirectory("local|network|removable", +/// "Test directory selection", +/// directory, +/// false); +/// fprintf(stderr, "Selected directory is : %s and was %s\n", directory.c_str(), ret ? "OK" : "Canceled"); +/// ~~~~~~~~~~~~~ +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetDirectory(const std::string& shares, + const std::string& heading, + std::string& path, + bool writeOnly = false) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_directory( + CAddonBase::m_interface->toKodi->kodiBase, shares.c_str(), heading.c_str(), path.c_str(), + &retString, writeOnly); + if (retString != nullptr) + { + if (std::strlen(retString)) + path = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_FileBrowser +/// @brief File selection dialog. +/// +/// @param[in] shares With Shares becomes the available start folders be set. +/// @param[in] mask The mask to filter visible files, e.g. ".m3u|.pls|.b4s|.wpl" +/// @param[in] heading Dialog header name +/// @param[in,out] path As in the path to start and Return value about selected +/// file +/// @param[in] useThumbs [opt] If set show thumbs if possible on dialog +/// @param[in] useFileDirectories [opt] If set also packages (e.g. *.zip) are +/// handled as directories. +/// @return False if selection becomes canceled +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetFile(const std::string& shares, + const std::string& mask, + const std::string& heading, + std::string& path, + bool useThumbs = false, + bool useFileDirectories = false) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file( + CAddonBase::m_interface->toKodi->kodiBase, shares.c_str(), mask.c_str(), heading.c_str(), + path.c_str(), &retString, useThumbs, useFileDirectories); + if (retString != nullptr) + { + if (std::strlen(retString)) + path = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_FileBrowser +/// @brief File selection from a directory. +/// +/// @param[in] directory The directory name where the dialog start, possible are +/// normal names and kodi's special names +/// @param[in] mask The mask to filter visible files, e.g. ".m3u|.pls|.b4s|.wpl" +/// @param[in] heading Dialog header name +/// @param[in,out] path As in the path to start and Return value about selected +/// file +/// @param[in] useThumbs [opt] If set show thumbs if possible on dialog +/// @param[in] useFileDirectories [opt] If set also packages (e.g. *.zip) are +/// handled as directories +/// @param[in] singleList [opt] +/// @return False if selection becomes canceled +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetFileFromDir(const std::string& directory, + const std::string& mask, + const std::string& heading, + std::string& path, + bool useThumbs = false, + bool useFileDirectories = false, + bool singleList = false) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = + CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_from_dir( + CAddonBase::m_interface->toKodi->kodiBase, directory.c_str(), mask.c_str(), + heading.c_str(), path.c_str(), &retString, useThumbs, useFileDirectories, singleList); + if (retString != nullptr) + { + if (std::strlen(retString)) + path = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_FileBrowser +/// @brief File selection dialog to get several in to a list. +/// +/// @param[in] shares With Shares becomes the available start folders be set. +/// @param[in] mask The mask to filter visible files, e.g. ".m3u|.pls|.b4s|.wpl" +/// @param[in] heading Dialog header name +/// @param[out] fileList Return value about selected files +/// @param[in] useThumbs [opt] If set show thumbs if possible on dialog. +/// @param[in] useFileDirectories [opt] If set also packages (e.g. *.zip) are +/// handled as directories. +/// @return False if selection becomes canceled. +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetFileList(const std::string& shares, + const std::string& mask, + const std::string& heading, + std::vector& fileList, + bool useThumbs = false, + bool useFileDirectories = false) +{ + using namespace ::kodi::addon; + char** list = nullptr; + unsigned int listSize = 0; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_list( + CAddonBase::m_interface->toKodi->kodiBase, shares.c_str(), mask.c_str(), heading.c_str(), + &list, &listSize, useThumbs, useFileDirectories); + if (ret) + { + for (unsigned int i = 0; i < listSize; ++i) + fileList.emplace_back(list[i]); + CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list( + CAddonBase::m_interface->toKodi->kodiBase, &list, listSize); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_FileBrowser +/// @brief Source selection dialog. +/// +/// @param[in,out] path As in the path to start and Return value about selected +/// source +/// @param[in] allowNetworkShares Allow also access to network +/// @param[in] additionalShare [opt] With additionalShare becomes the available +/// start folders be set. +/// @param[in] type [opt] +/// @return False if selection becomes canceled +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetSource(std::string& path, + bool allowNetworkShares, + const std::string& additionalShare = "", + const std::string& type = "") +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_source( + CAddonBase::m_interface->toKodi->kodiBase, path.c_str(), &retString, allowNetworkShares, + additionalShare.c_str(), type.c_str()); + if (retString != nullptr) + { + if (std::strlen(retString)) + path = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_FileBrowser +/// @brief Image selection dialog. +/// +/// @param[in] shares With Shares becomes the available start folders be set +/// @param[in] heading Dialog header name +/// @param[out] path Return value about selected image +/// @return False if selection becomes canceled +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetImage(const std::string& shares, + const std::string& heading, + std::string& path) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image( + CAddonBase::m_interface->toKodi->kodiBase, shares.c_str(), heading.c_str(), path.c_str(), + &retString); + if (retString != nullptr) + { + if (std::strlen(retString)) + path = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_FileBrowser +/// @brief Image selection dialog to get several in to a list. +/// +/// @param[in] shares With Shares becomes the available start folders be set +/// @param[in] heading Dialog header name +/// @param[out] file_list Return value about selected images +/// @return False if selection becomes canceled +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetImageList(const std::string& shares, + const std::string& heading, + std::vector& file_list) +{ + using namespace ::kodi::addon; + char** list = nullptr; + unsigned int listSize = 0; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image_list( + CAddonBase::m_interface->toKodi->kodiBase, shares.c_str(), heading.c_str(), &list, &listSize); + if (ret) + { + for (unsigned int i = 0; i < listSize; ++i) + file_list.emplace_back(list[i]); + CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list( + CAddonBase::m_interface->toKodi->kodiBase, &list, listSize); + } + return ret; +} +//------------------------------------------------------------------------------ +}; // namespace FileBrowser + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h new file mode 100644 index 0000000..710b7dd --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h @@ -0,0 +1,404 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/keyboard.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//================================================================================ +/// @defgroup cpp_kodi_gui_dialogs_Keyboard Dialog Keyboard +/// @ingroup cpp_kodi_gui_dialogs +/// @brief @cpp_namespace{ kodi::gui::dialogs::Keyboard } +/// **Keyboard dialogs**\n +/// The functions listed below have to be permitted by the user for the +/// representation of a keyboard around an input. +/// +/// The class supports several kinds, from an easy text choice up to the +/// passport Word production and their confirmation for add-on. +/// +/// It has the header @ref Keyboard.h "#include " +/// be included to enjoy it. +/// +namespace Keyboard +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Show keyboard with initial value `text` and replace with result +/// string. +/// +/// @param[in,out] text Overwritten with user input if return=true. +/// @param[in] heading String shown on dialog title. +/// @param[in] allowEmptyResult Whether a blank password is valid or not. +/// @param[in] hiddenInput [opt] The inserted input is not shown as text. +/// @param[in] autoCloseMs [opt] 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 +/// +/// // The example shows the display of keyboard call dialog at Kodi from the add-on. +/// // Below all values are set, however, can last two (hidden input = false and autoCloseMs = 0) +/// // to be released if not needed. +/// std::string text = "Please change me to them want you want"; // It can be leaved empty or a entry text added +/// bool bRet = ::kodi::gui::dialogs::Keyboard::ShowAndGetInput(text, +/// "Demonstration text entry", +/// true, +/// false, +/// 0); +/// fprintf(stderr, "Written keyboard input is : '%s' and was %s\n", +/// text.c_str(), bRet ? "OK" : "Canceled"); +/// ~~~~~~~~~~~~~ +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetInput(std::string& text, + const std::string& heading, + bool allowEmptyResult, + bool hiddenInput = false, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = + CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_input_with_head( + CAddonBase::m_interface->toKodi->kodiBase, text.c_str(), &retString, heading.c_str(), + allowEmptyResult, hiddenInput, autoCloseMs); + if (retString != nullptr) + { + text = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief The example shows the display of keyboard call dialog at Kodi +/// from the add-on. +/// +/// @param[out] text Overwritten with user input if return=true. +/// @param[in] allowEmptyResult If set to true keyboard can also exited without +/// entered text. +/// @param[in] autoCloseMs [opt] 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. +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetInput(std::string& text, + bool allowEmptyResult, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_input( + CAddonBase::m_interface->toKodi->kodiBase, text.c_str(), &retString, allowEmptyResult, + autoCloseMs); + if (retString != nullptr) + { + text = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Shows keyboard and prompts for a password. Differs from +/// `ShowAndVerifyNewPassword()` in that no second verification. +/// +/// @param[in,out] newPassword Overwritten with user input if return=true. +/// @param[in] heading String shown on dialog title. +/// @param[in] allowEmptyResult Whether a blank password is valid or not. +/// @param[in] autoCloseMs [opt] 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. +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetNewPassword(std::string& newPassword, + const std::string& heading, + bool allowEmptyResult, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard + ->show_and_get_new_password_with_head( + CAddonBase::m_interface->toKodi->kodiBase, newPassword.c_str(), &retString, + heading.c_str(), allowEmptyResult, autoCloseMs); + if (retString != nullptr) + { + newPassword = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Shows keyboard and prompts for a password. Differs from +/// `ShowAndVerifyNewPassword()` in that no second verification. +/// +/// @param[in,out] newPassword Overwritten with user input if return=true. +/// @param[in] autoCloseMs [opt] 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. +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetNewPassword(std::string& newPassword, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_new_password( + CAddonBase::m_interface->toKodi->kodiBase, newPassword.c_str(), &retString, autoCloseMs); + if (retString != nullptr) + { + newPassword = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Show keyboard twice to get and confirm a user-entered password +/// string. +/// +/// @param[out] newPassword Overwritten with user input if return=true. +/// @param[in] heading String shown on dialog title. +/// @param[in] allowEmptyResult +/// @param[in] autoCloseMs [opt] 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 +/// #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("kodi", password); +/// +/// // 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::dialogs::Keyboard::ShowAndVerifyPassword(password, "Demo password call for PW 'kodi'", i, 0); +/// if (ret == 0) +/// { +/// fprintf(stderr, "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 password entered on try '%i'\n", i+1); +/// } +/// } +/// ~~~~~~~~~~~~~ +/// +inline bool ATTRIBUTE_HIDDEN ShowAndVerifyNewPassword(std::string& newPassword, + const std::string& heading, + bool allowEmptyResult, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard + ->show_and_verify_new_password_with_head(CAddonBase::m_interface->toKodi->kodiBase, + &retString, heading.c_str(), + allowEmptyResult, autoCloseMs); + if (retString != nullptr) + { + newPassword = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Show keyboard twice to get and confirm a user-entered password +/// string. +/// +/// @param[out] newPassword Overwritten with user input if return=true. +/// @param[in] autoCloseMs [opt] 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. +/// +inline bool ATTRIBUTE_HIDDEN ShowAndVerifyNewPassword(std::string& newPassword, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = + CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_verify_new_password( + CAddonBase::m_interface->toKodi->kodiBase, &retString, autoCloseMs); + if (retString != nullptr) + { + newPassword = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Show keyboard and verify user input against `password`. +/// +/// @param[in,out] password Value to compare against user input. +/// @param[in] heading String shown on dialog title. +/// @param[in] retries If greater than 0, shows "Incorrect password, %d retries +/// left" on dialog line 2, else line 2 is blank. +/// @param[in] autoCloseMs [opt] To close the dialog after a specified time, in +/// milliseconds, default is 0 which keeps the dialog +/// open indefinitely. +/// @return 0 if successful display and user input. 1 if unsuccessful input. +/// -1 if no user input or canceled editing. +/// +inline int ATTRIBUTE_HIDDEN ShowAndVerifyPassword(std::string& password, + const std::string& heading, + int retries, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_verify_password( + CAddonBase::m_interface->toKodi->kodiBase, password.c_str(), &retString, heading.c_str(), + retries, autoCloseMs); + if (retString != nullptr) + { + password = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Shows a filter related keyboard. +/// +/// @param[in,out] text Overwritten with user input if return=true. +/// @param[in] searching Use dialog for search and send our search message in +/// safe way (only the active window needs it) +/// - header name if true is "Enter search string" +/// - header name if false is "Enter value" +/// @param autoCloseMs [opt] 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. +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetFilter(std::string& text, + bool searching, + unsigned int autoCloseMs = 0) +{ + using namespace ::kodi::addon; + char* retString = nullptr; + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_filter( + CAddonBase::m_interface->toKodi->kodiBase, text.c_str(), &retString, searching, autoCloseMs); + if (retString != nullptr) + { + text = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Send a text to a visible keyboard. +/// +/// @param[in] text Overwritten with user input if return=true. +/// @param[in] closeKeyboard [opt] The open dialog is if also closed on 'true'. +/// @return true if successful done, false if unsuccessful or keyboard not +/// present. +/// +inline bool ATTRIBUTE_HIDDEN SendTextToActiveKeyboard(const std::string& text, + bool closeKeyboard = false) +{ + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->send_text_to_active_keyboard( + CAddonBase::m_interface->toKodi->kodiBase, text.c_str(), closeKeyboard); +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Keyboard +/// @brief Check for visible keyboard on GUI. +/// +/// @return true if keyboard present, false if not present +/// +inline bool ATTRIBUTE_HIDDEN IsKeyboardActivated() +{ + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->is_keyboard_activated( + CAddonBase::m_interface->toKodi->kodiBase); +} +//------------------------------------------------------------------------------ +}; // namespace Keyboard + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h new file mode 100644 index 0000000..835a8d4 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h @@ -0,0 +1,346 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/numeric.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_Numeric Dialog Numeric +/// @ingroup cpp_kodi_gui_dialogs +/// @{ +/// @brief @cpp_namespace{ kodi::gui::dialogs::Numeric } +/// **Numeric dialogs**\n +/// 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 Numeric.h "#include " +/// be included to enjoy it. +/// +namespace Numeric +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Numeric +/// @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 ATTRIBUTE_HIDDEN 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) + { + newPassword = pw; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, pw); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// +/// @ingroup cpp_kodi_gui_dialogs_Numeric +/// @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::dialogs::Numeric::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 ATTRIBUTE_HIDDEN 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_dialogs_Numeric +/// @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 ATTRIBUTE_HIDDEN 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) + { + toVerify = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Numeric +/// @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::dialogs::Numeric::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 ATTRIBUTE_HIDDEN 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_dialogs_Numeric +/// @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::dialogs::Numeric::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 ATTRIBUTE_HIDDEN 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_dialogs_Numeric +/// @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 ATTRIBUTE_HIDDEN 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) + { + ipAddress = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Numeric +/// @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 [opt] 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::dialogs::Numeric::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 ATTRIBUTE_HIDDEN 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) + { + input = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Numeric +/// @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 ATTRIBUTE_HIDDEN 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) + { + time = retString; + CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, + retString); + } + return ret; +} +//------------------------------------------------------------------------------ +}; // namespace Numeric +/// @} + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h new file mode 100644 index 0000000..747ab9d --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h @@ -0,0 +1,101 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/ok.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_OK Dialog OK +/// @ingroup cpp_kodi_gui_dialogs +/// @{ +/// @brief @cpp_namespace{ kodi::gui::dialogs::OK } +/// **OK dialog**\n +/// The functions listed below permit the call of a dialogue of information, a +/// confirmation of the user by press from OK required. +/// +/// It has the header @ref OK.h "#include " +/// be included to enjoy it. +/// +namespace OK +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_OK +/// @brief Use dialog to inform user with text and confirmation with OK with +/// continued string. +/// +/// @param[in] heading Dialog heading. +/// @param[in] text Multi-line text. +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// ... +/// kodi::gui::dialogs::OK::ShowAndGetInput("Test dialog", "Hello World!\nI'm a call from add-on\n :) :D"); +/// ~~~~~~~~~~~~~ +/// +inline void ATTRIBUTE_HIDDEN ShowAndGetInput(const std::string& heading, const std::string& text) +{ + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogOK->show_and_get_input_single_text( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), text.c_str()); +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_OK +/// @brief Use dialog to inform user with text and confirmation with OK with +/// strings separated to the lines. +/// +/// @param[in] heading Dialog heading. +/// @param[in] line0 Line #1 text. +/// @param[in] line1 Line #2 text. +/// @param[in] line2 Line #3 text. +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// ... +/// kodi::gui::dialogs::OK::ShowAndGetInput("Test dialog", "Hello World!", "I'm a call from add-on", " :) :D"); +/// ~~~~~~~~~~~~~ +/// +inline void ATTRIBUTE_HIDDEN ShowAndGetInput(const std::string& heading, + const std::string& line0, + const std::string& line1, + const std::string& line2) +{ + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogOK->show_and_get_input_line_text( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), line0.c_str(), line1.c_str(), + line2.c_str()); +} +//------------------------------------------------------------------------------ +} // namespace OK +/// @} + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h new file mode 100644 index 0000000..d242a56 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h @@ -0,0 +1,244 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/progress.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_CProgress Dialog Progress +/// @ingroup cpp_kodi_gui_dialogs +/// @brief @cpp_class{ kodi::gui::dialogs::CProgress } +/// **Progress dialog shown in center**\n +/// The with @ref Progress.h "#include " +/// given class are basically used to create Kodi's progress dialog with named +/// text fields. +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// kodi::gui::dialogs::CProgress *progress = new kodi::gui::dialogs::CProgress; +/// progress->SetHeading("Test progress"); +/// progress->SetLine(1, "line 1"); +/// progress->SetLine(2, "line 2"); +/// progress->SetLine(3, "line 3"); +/// progress->SetCanCancel(true); +/// progress->ShowProgressBar(true); +/// progress->Open(); +/// for (unsigned int i = 0; i < 100; i += 10) +/// { +/// progress->SetPercentage(i); +/// sleep(1); +/// } +/// delete progress; +/// ~~~~~~~~~~~~~ +/// +class ATTRIBUTE_HIDDEN CProgress +{ +public: + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief Construct a new dialog + /// + CProgress() + { + using namespace ::kodi::addon; + m_DialogHandle = CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->new_dialog( + CAddonBase::m_interface->toKodi->kodiBase); + if (!m_DialogHandle) + kodi::Log(ADDON_LOG_FATAL, + "kodi::gui::dialogs::CProgress can't create window class from Kodi !!!"); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief Destructor + /// + ~CProgress() + { + using namespace ::kodi::addon; + if (m_DialogHandle) + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->delete_dialog( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To open the dialog + /// + void Open() + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->open( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief Set the heading title of dialog + /// + /// @param[in] heading Title string to use + /// + void SetHeading(const std::string& heading) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->set_heading( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, heading.c_str()); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To set the line text field on dialog from 0 - 2 + /// + /// @param[in] iLine Line number + /// @param[in] line Text string + /// + void SetLine(unsigned int iLine, const std::string& line) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->set_line( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, iLine, line.c_str()); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To enable and show cancel button on dialog + /// + /// @param[in] canCancel if true becomes it shown + /// + void SetCanCancel(bool canCancel) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->set_can_cancel( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, canCancel); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To check dialog for clicked cancel button + /// + /// @return True if canceled + /// + bool IsCanceled() const + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->is_canceled( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief Get the current progress position as percent + /// + /// @param[in] percentage Position to use from 0 to 100 + /// + void SetPercentage(int percentage) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->set_percentage( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, percentage); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To set the current progress position as percent + /// + /// @return Current Position used from 0 to 100 + /// + int GetPercentage() const + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->get_percentage( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To show or hide progress bar dialog + /// + /// @param[in] onOff If true becomes it shown + /// + void ShowProgressBar(bool onOff) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->show_progress_bar( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, onOff); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief Set the maximum position of progress, needed if `SetProgressAdvance(...)` is used + /// + /// @param[in] max Biggest usable position to use + /// + void SetProgressMax(int max) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->set_progress_max( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, max); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To increase progress bar by defined step size until reach of maximum position + /// + /// @param[in] steps Step size to increase, default is 1 + /// + void SetProgressAdvance(int steps = 1) + { + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->set_progress_advance( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle, steps); + } + //---------------------------------------------------------------------------- + + //============================================================================ + /// @ingroup cpp_kodi_gui_dialogs_CProgress + /// @brief To check progress was canceled on work + /// + /// @return True if aborted + /// + bool Abort() + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogProgress->abort( + CAddonBase::m_interface->toKodi->kodiBase, m_DialogHandle); + } + //---------------------------------------------------------------------------- + +private: + KODI_GUI_HANDLE m_DialogHandle; +}; + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h new file mode 100644 index 0000000..9b1923e --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h @@ -0,0 +1,269 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/select.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_Select_Defs Definitions, structures and enumerators +/// @ingroup cpp_kodi_gui_dialogs_Select +/// @brief **Dialog Select definition values**\n +/// Data structures associated with this dialog. +/// +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Select_Defs +/// @brief **Selection entry structure**\n +/// Used to provide the necessary data for the selection dialog and to declare +/// the selected position in it. +/// +typedef struct SSelectionEntry +{ + /*! \cond PRIVATE */ + SSelectionEntry() = default; + /*! \endcond */ + + /// Entry identfication string + std::string id; + + /// Entry name to show on GUI dialog + std::string name; + + /// Place where entry can be preselected and after return the from user + /// selected is set. + bool selected = false; +} SSelectionEntry; +//------------------------------------------------------------------------------ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_Select Dialog Select +/// @ingroup cpp_kodi_gui_dialogs +/// @{ +/// @brief @cpp_namespace{ kodi::gui::dialogs::Select } +/// **Selection dialog**\n +/// The function listed below permits the call of a dialogue to select of an +/// entry as a key +/// +/// It has the header @ref Select.h "#include " +/// be included to enjoy it. +/// +/// +namespace Select +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Select +/// @brief Show a selection dialog about given parts. +/// +/// @param[in] heading Dialog heading name +/// @param[in] entries String list about entries +/// @param[in] selected [opt] Predefined selection (default is -1 for +/// the first) +/// @param[in] autoclose [opt] To close dialog automatic after the given time +/// in ms. As '0' it stays open. +/// @return The selected entry, if return -1 was nothing selected or +/// canceled +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// const std::vector entries +/// { +/// "Test 1", +/// "Test 2", +/// "Test 3", +/// "Test 4", +/// "Test 5" +/// }; +/// +/// int selected = kodi::gui::dialogs::Select::Show("Test selection", entries, -1); +/// if (selected < 0) +/// fprintf(stderr, "Item selection canceled\n"); +/// else +/// fprintf(stderr, "Selected item is: %i\n", selected); +/// ~~~~~~~~~~~~~ +/// +inline int ATTRIBUTE_HIDDEN Show(const std::string& heading, + const std::vector& entries, + int selected = -1, + unsigned int autoclose = 0) +{ + using namespace ::kodi::addon; + unsigned int size = static_cast(entries.size()); + const char** cEntries = (const char**)malloc(size * sizeof(const char**)); + for (unsigned int i = 0; i < size; ++i) + { + cEntries[i] = entries[i].c_str(); + } + int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogSelect->open( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size, selected, + autoclose); + free(cEntries); + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Select +/// @brief Show a selection dialog about given parts. +/// +/// This function is mostly equal to the other, only becomes the string list +/// here done by a @ref SSelectionEntry, where a ID string can be defined. +/// +/// @param[in] heading Dialog heading name +/// @param[in] entries @ref SSelectionEntry list about entries +/// @param[in] selected [opt] Predefined selection (default is -1 for +/// the first) +/// @param[in] autoclose [opt] To close dialog automatic after the given time +/// in ms. As '0' it stays open. +/// @return The selected entry, if return -1 was nothing selected +/// or canceled +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// std::vector entries +/// { +/// { "ID 1", "Test 1", false }, +/// { "ID 2", "Test 2", false }, +/// { "ID 3", "Test 3", false }, +/// { "ID 4", "Test 4", false }, +/// { "ID 5", "Test 5", false } +/// }; +/// +/// int selected = kodi::gui::dialogs::Select::Show("Test selection", entries, -1); +/// if (selected < 0) +/// fprintf(stderr, "Item selection canceled\n"); +/// else +/// fprintf(stderr, "Selected item is: %i\n", selected); +/// ~~~~~~~~~~~~~ +/// +inline int ATTRIBUTE_HIDDEN Show(const std::string& heading, + std::vector& entries, + int selected = -1, + unsigned int autoclose = 0) +{ + using namespace ::kodi::addon; + unsigned int size = static_cast(entries.size()); + const char** cEntries = static_cast(malloc(size * sizeof(const char*))); + for (unsigned int i = 0; i < size; ++i) + { + cEntries[i] = entries[i].name.c_str(); + if (selected == -1 && entries[i].selected) + selected = i; + } + int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogSelect->open( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size, selected, + autoclose); + if (ret >= 0) + { + entries[ret].selected = true; + } + free(cEntries); + return ret; +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_Select +/// @brief Show a multiple selection dialog about given parts. +/// +/// @param[in] heading Dialog heading name +/// @param[in] entries @ref SSelectionEntry list about entries +/// @param[in] autoclose [opt] To close dialog automatic after the given time in +/// ms. As '0' it stays open. +/// @return The selected entries, if return empty was nothing selected +/// or canceled +/// +/// With selected on @ref SSelectionEntry can be a pre selection defined. +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// std::vector entries +/// { +/// { "ID 1", "Test 1", false }, +/// { "ID 2", "Test 2", false }, +/// { "ID 3", "Test 3", false }, +/// { "ID 4", "Test 4", false }, +/// { "ID 5", "Test 5", false } +/// }; +/// +/// bool ret = kodi::gui::dialogs::Select::ShowMultiSelect("Test selection", entries); +/// if (!ret) +/// fprintf(stderr, "Selection canceled\n"); +/// else +/// { +/// fprintf(stderr, "Selected items:\n"); +/// for (const auto& entry : entries) +/// { +/// if (entry.selected) +/// fprintf(stderr, " - %s\n", entry.selected.id.c_str()); +/// } +/// } +/// ~~~~~~~~~~~~~ +/// +inline bool ATTRIBUTE_HIDDEN ShowMultiSelect(const std::string& heading, + std::vector& entries, + int autoclose = 0) +{ + using namespace ::kodi::addon; + unsigned int size = static_cast(entries.size()); + const char** cEntryIDs = static_cast(malloc(size * sizeof(const char*))); + const char** cEntryNames = static_cast(malloc(size * sizeof(const char*))); + bool* cEntriesSelected = static_cast(malloc(size * sizeof(bool))); + for (unsigned int i = 0; i < size; ++i) + { + cEntryIDs[i] = entries[i].id.c_str(); + cEntryNames[i] = entries[i].name.c_str(); + cEntriesSelected[i] = entries[i].selected; + } + bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogSelect->open_multi_select( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntryIDs, cEntryNames, + cEntriesSelected, size, autoclose); + if (ret) + { + for (unsigned int i = 0; i < size; ++i) + entries[i].selected = cEntriesSelected[i]; + } + free(cEntryNames); + free(cEntryIDs); + free(cEntriesSelected); + return ret; +} +//------------------------------------------------------------------------------ +}; // namespace Select +/// @} + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h new file mode 100644 index 0000000..42a86f3 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2015-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 "../../AddonBase.h" +#include "../../c-api/gui/dialogs/text_viewer.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_TextViewer Dialog Text Viewer +/// @ingroup cpp_kodi_gui_dialogs +/// @{ +/// @brief @cpp_namespace{ kodi::gui::dialogs::TextViewer } +/// **Text viewer dialog**\n +/// The text viewer dialog can be used to display descriptions, help texts or +/// other larger texts. +/// +/// In order to achieve a line break is a \\n directly in the text or +/// in the "./resources/language/resource.language.??_??/strings.po" +/// to call with std::string kodi::general::GetLocalizedString(...);. +/// +/// It has the header \ref TextViewer.h "#include " +/// be included to enjoy it. +/// +namespace TextViewer +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_TextViewer +/// @brief Show info text dialog +/// +/// @param[in] heading mall heading text +/// @param[in] text Showed text on dialog +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// kodi::gui::dialogs::TextViewer::Show("The Wizard of Oz (1939 film)", +/// "The Wizard of Oz is a 1939 American musical comedy-drama fantasy film " +/// "produced by Metro-Goldwyn-Mayer, and the most well-known and commercially " +/// "successful adaptation based on the 1900 novel The Wonderful Wizard of Oz " +/// "by L. Frank Baum. The film stars Judy Garland as Dorothy Gale. The film" +/// "co-stars Terry the dog, billed as Toto; Ray Bolger, Jack Haley, Bert Lahr, " +/// "Frank Morgan, Billie Burke, Margaret Hamilton, with Charley Grapewin and " +/// "Clara Blandick, and the Singer Midgets as the Munchkins.\n" +/// "\n" +/// "Notable for its use of Technicolor, fantasy storytelling, musical score and " +/// "unusual characters, over the years it has become an icon of American popular " +/// "culture. It was nominated for six Academy Awards, including Best Picture but " +/// "lost to Gone with the Wind. It did win in two other categories including Best " +/// "Original Song for \"Over the Rainbow\". However, the film was a box office " +/// "disappointment on its initial release, earning only $3,017,000 on a $2,777,000 " +/// "budget, despite receiving largely positive reviews. It was MGM's most " +/// "expensive production at that time, and did not completely recoup the studio's " +/// "investment and turn a profit until theatrical re-releases starting in 1949.\n" +/// "\n" +/// "The 1956 broadcast television premiere of the film on CBS re-introduced the " +/// "film to the wider public and eventually made the presentation an annual " +/// "tradition, making it one of the most known films in cinema history. The " +/// "film was named the most-viewed motion picture on television syndication by " +/// "the Library of Congress who also included the film in its National Film " +/// "Registry in its inaugural year in 1989. Designation on the registry calls " +/// "for efforts to preserve it for being \"culturally, historically, and " +/// "aesthetically significant\". It is also one of the few films on UNESCO's " +/// "Memory of the World Register.\n" +/// "\n" +/// "The Wizard of Oz is often ranked on best-movie lists in critics' and public " +/// "polls. It is the source of many quotes referenced in modern popular culture. " +/// "It was directed primarily by Victor Fleming (who left production to take " +/// "over direction on the troubled Gone with the Wind production). Noel Langley, " +/// "Florence Ryerson and Edgar Allan Woolf received credit for the screenplay, " +/// "but there were uncredited contributions by others. The songs were written " +/// "by Edgar \"Yip\" Harburg (lyrics) and Harold Arlen (music). The incidental " +/// "music, based largely on the songs, was composed by Herbert Stothart, with " +/// "interspersed renderings from classical composers.\n"); +/// ~~~~~~~~~~~~~ +/// +inline void ATTRIBUTE_HIDDEN Show(const std::string& heading, const std::string& text) +{ + using namespace ::kodi::addon; + CAddonBase::m_interface->toKodi->kodi_gui->dialogTextViewer->open( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), text.c_str()); +} +//------------------------------------------------------------------------------ +}; // namespace TextViewer +/// @} + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h new file mode 100644 index 0000000..6e6e069 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h @@ -0,0 +1,188 @@ +/* + * 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 + +#include "../../AddonBase.h" +#include "../../c-api/gui/dialogs/yes_no.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + +//============================================================================== +/// @defgroup cpp_kodi_gui_dialogs_YesNo Dialog Yes/No +/// @ingroup cpp_kodi_gui_dialogs +/// @{ +/// @brief @cpp_namespace{ kodi::gui::dialogs::YesNo } +/// **Yes / No dialog**\n +/// The Yes / No dialog can be used to inform the user about questions and get +/// the answer. +/// +/// In order to achieve a line break is a \\n directly in the text or +/// in the "./resources/language/resource.language.??_??/strings.po" +/// to call with std::string kodi::general::GetLocalizedString(...);. +/// +/// It has the header @ref YesNo.h "#include " +/// be included to enjoy it. +/// +namespace YesNo +{ +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_YesNo +/// @brief Use dialog to get numeric new password with one text string shown +/// everywhere and cancel return field. +/// +/// @param[in] heading Dialog heading +/// @param[in] text Multi-line text +/// @param[out] canceled Return value about cancel button +/// @param[in] noLabel [opt] label to put on the no button +/// @param[in] yesLabel [opt] label to put on the yes button +/// @return Returns True if 'Yes' was pressed, else False +/// +/// @note It is preferred to only use this as it is actually a multi-line text. +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// bool canceled = false; +/// bool ret = kodi::gui::dialogs::YesNo::ShowAndGetInput( +/// "Yes / No test call", // The Header +/// "You has opened Yes / No dialog for test\n\nIs this OK for you?", +/// canceled, // return value about cancel button +/// "Not really", // No label, is optional and if empty "No" +/// "Ohhh yes"); // Yes label, also optional and if empty "Yes" +/// fprintf(stderr, "You has called Yes/No, returned '%s' and was %s\n", +/// ret ? "yes" : "no", +/// canceled ? "canceled" : "not canceled"); +/// ~~~~~~~~~~~~~ +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetInput(const std::string& heading, + const std::string& text, + bool& canceled, + const std::string& noLabel = "", + const std::string& yesLabel = "") +{ + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogYesNo->show_and_get_input_single_text( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), text.c_str(), &canceled, + noLabel.c_str(), yesLabel.c_str()); +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_YesNo +/// @brief Use dialog to get numeric new password with separated line strings. +/// +/// @param[in] heading Dialog heading +/// @param[in] line0 Line #0 text +/// @param[in] line1 Line #1 text +/// @param[in] line2 Line #2 text +/// @param[in] noLabel [opt] label to put on the no button +/// @param[in] yesLabel [opt] label to put on the yes button +/// @return Returns True if 'Yes' was pressed, else False +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// bool ret = kodi::gui::dialogs::YesNo::ShowAndGetInput( +/// "Yes / No test call", // The Header +/// "You has opened Yes / No dialog for test", +/// "", +/// "Is this OK for you?", +/// "Not really", // No label, is optional and if empty "No" +/// "Ohhh yes"); // Yes label, also optional and if empty "Yes" +/// fprintf(stderr, "You has called Yes/No, returned '%s'\n", +/// ret ? "yes" : "no"); +/// ~~~~~~~~~~~~~ +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetInput(const std::string& heading, + const std::string& line0, + const std::string& line1, + const std::string& line2, + const std::string& noLabel = "", + const std::string& yesLabel = "") +{ + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogYesNo->show_and_get_input_line_text( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), line0.c_str(), line1.c_str(), + line2.c_str(), noLabel.c_str(), yesLabel.c_str()); +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi_gui_dialogs_YesNo +/// @brief Use dialog to get numeric new password with separated line strings +/// and cancel return field. +/// +/// @param[in] heading Dialog heading +/// @param[in] line0 Line #0 text +/// @param[in] line1 Line #1 text +/// @param[in] line2 Line #2 text +/// @param[out] canceled Return value about cancel button +/// @param[in] noLabel [opt] label to put on the no button +/// @param[in] yesLabel [opt] label to put on the yes button +/// @return Returns True if 'Yes' was pressed, else False +/// +/// +///------------------------------------------------------------------------- +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// +/// bool canceled = false; +/// bool ret = kodi::gui::dialogs::YesNo::ShowAndGetInput( +/// "Yes / No test call", // The Header +/// "You has opened Yes / No dialog for test", +/// "", +/// "Is this OK for you?", +/// canceled, // return value about cancel button +/// "Not really", // No label, is optional and if empty "No" +/// "Ohhh yes"); // Yes label, also optional and if empty "Yes" +/// fprintf(stderr, "You has called Yes/No, returned '%s' and was %s\n", +/// ret ? "yes" : "no", +/// canceled ? "canceled" : "not canceled"); +/// ~~~~~~~~~~~~~ +/// +inline bool ATTRIBUTE_HIDDEN ShowAndGetInput(const std::string& heading, + const std::string& line0, + const std::string& line1, + const std::string& line2, + bool& canceled, + const std::string& noLabel = "", + const std::string& yesLabel = "") +{ + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogYesNo + ->show_and_get_input_line_button_text( + CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), line0.c_str(), line1.c_str(), + line2.c_str(), &canceled, noLabel.c_str(), yesLabel.c_str()); +} +//------------------------------------------------------------------------------ +}; // namespace YesNo +/// @} + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ + +#endif /* __cplusplus */ -- cgit v1.2.3