From 4c3251ec645c8b71820dab7e51e612e5919d4e75 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 23 Jul 2017 16:59:43 +0200 Subject: sync with upstream --- .../include/kodi/gui/dialogs/ContextMenu.h | 98 +++++ .../include/kodi/gui/dialogs/ExtendedProgress.h | 247 ++++++++++++ .../include/kodi/gui/dialogs/FileBrowser.h | 296 +++++++++++++++ .../include/kodi/gui/dialogs/Keyboard.h | 419 +++++++++++++++++++++ .../include/kodi/gui/dialogs/Numeric.h | 369 ++++++++++++++++++ .../include/kodi/gui/dialogs/OK.h | 107 ++++++ .../include/kodi/gui/dialogs/Progress.h | 252 +++++++++++++ .../include/kodi/gui/dialogs/Select.h | 105 ++++++ .../include/kodi/gui/dialogs/TextViewer.h | 118 ++++++ .../include/kodi/gui/dialogs/YesNo.h | 190 ++++++++++ 10 files changed, 2201 insertions(+) create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ContextMenu.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/FileBrowser.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Keyboard.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Numeric.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/OK.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Progress.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Select.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/TextViewer.h create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/YesNo.h (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ContextMenu.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ContextMenu.h new file mode 100644 index 0000000..47afc23 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ContextMenu.h @@ -0,0 +1,98 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_ContextMenu Dialog Context Menu + /// \ingroup cpp_kodi_gui + /// @brief \cpp_namespace{ kodi::gui::dialogs::ContextMenu } + /// **Context menu dialog** + /// + /// 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 Show(const std::string& heading, const std::vector& entries) + { + using namespace ::kodi::addon; + unsigned int size = 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; + } + //-------------------------------------------------------------------------- + }; + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h new file mode 100644 index 0000000..e9c5a9d --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h @@ -0,0 +1,247 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_CExtendedProgress Dialog Extended Progress + /// \ingroup cpp_kodi_gui + /// @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 CExtendedProgress + { + public: + //========================================================================== + /// + /// \ingroup cpp_kodi_gui_dialogs_CExtendedProgress + /// Construct a new dialog + /// + /// @param[in] title Title string + /// + 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: + void* m_DialogHandle; + }; + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/FileBrowser.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/FileBrowser.h new file mode 100644 index 0000000..401a78d --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/FileBrowser.h @@ -0,0 +1,296 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_FileBrowser Dialog File Browser + /// \ingroup cpp_kodi_gui + /// @brief \cpp_namespace{ kodi::gui::dialogs::FileBrowser } + /// **File browser dialog** + /// + /// 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 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 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 If set show thumbs if possible on dialog. + /// @param[in] useFileDirectories If set also packages (e.g. *.zip) are + /// handled as directories. + /// @return False if selection becomes canceled. + /// + inline bool 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 If set show thumbs if possible on dialog. + /// @param[in] useFileDirectories If set also packages (e.g. *.zip) are + /// handled as directories. + /// @param[in] singleList + /// @return False if selection becomes canceled. + /// + inline bool 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 If set show thumbs if possible on dialog. + /// @param[in] useFileDirectories If set also packages (e.g. *.zip) are + /// handled as directories. + /// @return False if selection becomes canceled. + /// + inline bool 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.push_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 With additionalShare becomes the available + /// start folders be set (optional). + /// @param[in] type + /// @return False if selection becomes canceled. + /// + inline bool 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 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 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.push_back(list[i]); + CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list(CAddonBase::m_interface->toKodi->kodiBase, &list, listSize); + } + return ret; + } + //-------------------------------------------------------------------------- + }; + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Keyboard.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Keyboard.h new file mode 100644 index 0000000..cff30d8 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Keyboard.h @@ -0,0 +1,419 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_Keyboard Dialog Keyboard + /// \ingroup cpp_kodi_gui + /// @brief \cpp_namespace{ kodi::gui::dialogs::Keyboard } + /// **Keyboard dialogs** + /// + /// 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 The inserted input is not shown as text. + /// @param[in] autoCloseMs 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 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) + { + if (std::strlen(retString)) + 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 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 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) + { + if (std::strlen(retString)) + 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 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 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) + { + if (std::strlen(retString)) + 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 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 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) + { + if (std::strlen(retString)) + 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 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 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) + { + if (std::strlen(retString)) + 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 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 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) + { + if (std::strlen(retString)) + 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 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 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) + { + if (std::strlen(retString)) + 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 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 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) + { + if (std::strlen(retString)) + 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 The open dialog is if also closed on 'true'. + /// @return true if successful done, false if + /// unsuccessful or keyboard not present. + /// + inline bool 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 IsKeyboardActivated() + { + using namespace ::kodi::addon; + return CAddonBase::m_interface->toKodi->kodi_gui->dialogKeyboard->is_keyboard_activated(CAddonBase::m_interface->toKodi->kodiBase); + } + //-------------------------------------------------------------------------- + }; + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Numeric.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Numeric.h new file mode 100644 index 0000000..dddbf7e --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Numeric.h @@ -0,0 +1,369 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_Numeric Dialog Numeric + /// \ingroup cpp_kodi_gui + /// @{ + /// @brief \cpp_namespace{ kodi::gui::dialogs::Numeric } + /// **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 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 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_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 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 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_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 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 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 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_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 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 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_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 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 dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/OK.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/OK.h new file mode 100644 index 0000000..12799b7 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/OK.h @@ -0,0 +1,107 @@ +#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 "../../AddonBase.h" +#include "../definitions.h" + +namespace kodi +{ +namespace gui +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_OK Dialog OK + /// \ingroup cpp_kodi_gui + /// @{ + /// @brief \cpp_namespace{ kodi::gui::dialogs::OK } + /// **OK dialog** + /// + /// 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 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 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 dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Progress.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Progress.h new file mode 100644 index 0000000..3f18499 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Progress.h @@ -0,0 +1,252 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_CProgress Dialog Progress + /// \ingroup cpp_kodi_gui + /// @brief \cpp_class{ kodi::gui::dialogs::CProgress } + /// **Progress dialog shown in center** + /// + /// The with \ref DialogProgress.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 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: + void* m_DialogHandle; + }; + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Select.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Select.h new file mode 100644 index 0000000..963c84c --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Select.h @@ -0,0 +1,105 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_Select Dialog Select + /// \ingroup cpp_kodi_gui + /// @{ + /// @brief \cpp_namespace{ kodi::gui::dialogs::Select } + /// **Selection dialog** + /// + /// 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 Show(const std::string& heading, const std::vector& entries, int selected = -1, unsigned int autoclose = 0) + { + using namespace ::kodi::addon; + unsigned int size = 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; + } + //-------------------------------------------------------------------------- + }; + /// @} + +} /* namespace dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/TextViewer.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/TextViewer.h new file mode 100644 index 0000000..c64bc1e --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/TextViewer.h @@ -0,0 +1,118 @@ +#pragma once +/* + * Copyright (C) 2015-2016 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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_TextViewer Dialog Text Viewer + /// \ingroup cpp_kodi_gui + /// @{ + /// @brief \cpp_namespace{ kodi::gui::dialogs::TextViewer } + /// **Text viewer dialog** + /// + /// 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 Small 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 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 dialogs */ +} /* namespace gui */ +} /* namespace kodi */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/YesNo.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/YesNo.h new file mode 100644 index 0000000..d9c34ff --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/YesNo.h @@ -0,0 +1,190 @@ +#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 +{ +namespace dialogs +{ + + //============================================================================ + /// + /// \defgroup cpp_kodi_gui_dialogs_YesNo Dialog Yes/No + /// \ingroup cpp_kodi_gui + /// @{ + /// @brief \cpp_namespace{ kodi::gui::dialogs::YesNo } + /// **Yes / No dialog** + /// + /// 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; + /// 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 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 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; + /// 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 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 dialogs */ +} /* namespace gui */ +} /* namespace kodi */ -- cgit v1.2.3