summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2017-09-02 15:02:54 +0200
committermanuel <manuel@mausz.at>2017-09-02 15:02:54 +0200
commit0afb1d4d51973cf52973617c92236d851a039d31 (patch)
tree300741b800f0e013ba1e709cc46460de6383f2bb /xbmc/addons/kodi-addon-dev-kit/include/kodi/gui
parent86b22151f0758311fd146ff508e7254337414bc1 (diff)
downloadkodi-pvr-build-0afb1d4d51973cf52973617c92236d851a039d31.tar.gz
kodi-pvr-build-0afb1d4d51973cf52973617c92236d851a039d31.tar.bz2
kodi-pvr-build-0afb1d4d51973cf52973617c92236d851a039d31.zip
sync with upstream
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/gui')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/ListItem.h4
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/Window.h4
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/definitions.h2
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ContextMenu.h94
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h2
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Keyboard.h24
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Numeric.h15
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Select.h165
8 files changed, 281 insertions, 29 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/ListItem.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/ListItem.h
index 944b1b9..13cf2d1 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/ListItem.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/ListItem.h
@@ -37,7 +37,7 @@ namespace gui
37 GUIHANDLE GetControlHandle() const { return m_controlHandle; } 37 GUIHANDLE GetControlHandle() const { return m_controlHandle; }
38 38
39 protected: 39 protected:
40 CAddonGUIControlBase(CAddonGUIControlBase* window) 40 explicit CAddonGUIControlBase(CAddonGUIControlBase* window)
41 : m_controlHandle(nullptr), 41 : m_controlHandle(nullptr),
42 m_interface(::kodi::addon::CAddonBase::m_interface->toKodi), 42 m_interface(::kodi::addon::CAddonBase::m_interface->toKodi),
43 m_Window(window) {} 43 m_Window(window) {}
@@ -111,7 +111,7 @@ namespace gui
111 * Related to call of "ListItemPtr kodi::gui::CWindow::GetListItem(int listPos)" 111 * Related to call of "ListItemPtr kodi::gui::CWindow::GetListItem(int listPos)"
112 * Not needed for addon development itself 112 * Not needed for addon development itself
113 */ 113 */
114 CListItem(GUIHANDLE listItemHandle) 114 explicit CListItem(GUIHANDLE listItemHandle)
115 : CAddonGUIControlBase(nullptr) 115 : CAddonGUIControlBase(nullptr)
116 { 116 {
117 m_controlHandle = listItemHandle; 117 m_controlHandle = listItemHandle;
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/Window.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/Window.h
index b78585f..c369c62 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/Window.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/Window.h
@@ -128,6 +128,10 @@ namespace gui
128 /// @note If your Add-On ends this window will be closed to. To show it forever, 128 /// @note If your Add-On ends this window will be closed to. To show it forever,
129 /// make a loop at the end of your Add-On or use doModal() instead. 129 /// make a loop at the end of your Add-On or use doModal() instead.
130 /// 130 ///
131 /// @warning If used must be the class be global present until Kodi becomes
132 /// closed. The creation can be done after before "Show" becomes called, but
133 /// not delete class after them.
134 ///
131 /// @return Return true if call and show is successed, 135 /// @return Return true if call and show is successed,
132 /// if false was something failed to get needed 136 /// if false was something failed to get needed
133 /// skin parts. 137 /// skin parts.
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/definitions.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/definitions.h
index 61af9fe..1dd03cc 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/definitions.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/definitions.h
@@ -262,6 +262,8 @@ typedef struct AddonToKodiFuncTable_kodi_gui_dialogProgress
262typedef struct AddonToKodiFuncTable_kodi_gui_dialogSelect 262typedef struct AddonToKodiFuncTable_kodi_gui_dialogSelect
263{ 263{
264 int (*open)(void* kodiBase, const char *heading, const char *entries[], unsigned int size, int selected, unsigned int autoclose); 264 int (*open)(void* kodiBase, const char *heading, const char *entries[], unsigned int size, int selected, unsigned int autoclose);
265 bool (*open_multi_select)(void* kodiBase, const char* heading, const char* entryIDs[], const char* entryNames[],
266 bool entriesSelected[], unsigned int size, unsigned int autoclose);
265} AddonToKodiFuncTable_kodi_gui_dialogSelect; 267} AddonToKodiFuncTable_kodi_gui_dialogSelect;
266 268
267typedef struct AddonToKodiFuncTable_kodi_gui_dialogTextViewer 269typedef struct AddonToKodiFuncTable_kodi_gui_dialogTextViewer
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
index 47afc23..39b21b4 100644
--- 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
@@ -91,6 +91,100 @@ namespace dialogs
91 return ret; 91 return ret;
92 } 92 }
93 //-------------------------------------------------------------------------- 93 //--------------------------------------------------------------------------
94
95 //==========================================================================
96 ///
97 /// \ingroup cpp_kodi_gui_dialogs_ContextMenu
98 /// @brief Show a context menu dialog about given parts.
99 ///
100 /// @param[in] heading Dialog heading name
101 /// @param[in] entries String list about entries
102 /// @return The selected entry, if return <tt>-1</tt> was nothing selected or canceled
103 ///
104 ///
105 ///-------------------------------------------------------------------------
106 ///
107 /// **Example:**
108 /// ~~~~~~~~~~~~~{.cpp}
109 /// #include <kodi/gui/dialogs/ContextMenu.h>
110 ///
111 /// const std::vector<std::pair<std::string, std::string>> entries
112 /// {
113 /// { "ID 1", "Test 1" },
114 /// { "ID 2", "Test 2" },
115 /// { "ID 3", "Test 3" },
116 /// { "ID 4", "Test 4" },
117 /// { "ID 5", "Test 5" }
118 /// };
119 ///
120 /// int selected = kodi::gui::dialogs::ContextMenu::Show("Test selection", entries);
121 /// if (selected < 0)
122 /// fprintf(stderr, "Item selection canceled\n");
123 /// else
124 /// fprintf(stderr, "Selected item is: %i\n", selected);
125 /// ~~~~~~~~~~~~~
126 ///
127 inline int Show(const std::string& heading, const std::vector<std::pair<std::string, std::string>>& entries)
128 {
129 using namespace ::kodi::addon;
130 unsigned int size = entries.size();
131 const char** cEntries = static_cast<const char**>(malloc(size*sizeof(const char**)));
132 for (unsigned int i = 0; i < size; ++i)
133 {
134 cEntries[i] = entries[i].second.c_str();
135 }
136 int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open(CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size);
137 free(cEntries);
138 return ret;
139 }
140 //--------------------------------------------------------------------------
141
142 //==========================================================================
143 ///
144 /// \ingroup cpp_kodi_gui_dialogs_ContextMenu
145 /// @brief Show a context menu dialog about given parts.
146 ///
147 /// @param[in] heading Dialog heading name
148 /// @param[in] entries String list about entries
149 /// @return The selected entry, if return <tt>-1</tt> was nothing selected or canceled
150 ///
151 ///
152 ///-------------------------------------------------------------------------
153 ///
154 /// **Example:**
155 /// ~~~~~~~~~~~~~{.cpp}
156 /// #include <kodi/gui/dialogs/ContextMenu.h>
157 ///
158 /// const std::vector<std::pair<int, std::string>> entries
159 /// {
160 /// { 1, "Test 1" },
161 /// { 2, "Test 2" },
162 /// { 3, "Test 3" },
163 /// { 4, "Test 4" },
164 /// { 5, "Test 5" }
165 /// };
166 ///
167 /// int selected = kodi::gui::dialogs::ContextMenu::Show("Test selection", entries);
168 /// if (selected < 0)
169 /// fprintf(stderr, "Item selection canceled\n");
170 /// else
171 /// fprintf(stderr, "Selected item is: %i\n", selected);
172 /// ~~~~~~~~~~~~~
173 ///
174 inline int Show(const std::string& heading, const std::vector<std::pair<int, std::string>>& entries)
175 {
176 using namespace ::kodi::addon;
177 unsigned int size = entries.size();
178 const char** cEntries = static_cast<const char**>(malloc(size*sizeof(const char**)));
179 for (unsigned int i = 0; i < size; ++i)
180 {
181 cEntries[i] = entries[i].second.c_str();
182 }
183 int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open(CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size);
184 free(cEntries);
185 return ret;
186 }
187 //--------------------------------------------------------------------------
94 }; 188 };
95 189
96} /* namespace dialogs */ 190} /* namespace dialogs */
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
index e9c5a9d..5878958 100644
--- 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
@@ -75,7 +75,7 @@ namespace dialogs
75 /// 75 ///
76 /// @param[in] title Title string 76 /// @param[in] title Title string
77 /// 77 ///
78 CExtendedProgress(const std::string& title = "") 78 explicit CExtendedProgress(const std::string& title = "")
79 { 79 {
80 using namespace ::kodi::addon; 80 using namespace ::kodi::addon;
81 m_DialogHandle = CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->new_dialog(CAddonBase::m_interface->toKodi->kodiBase, title.c_str()); 81 m_DialogHandle = CAddonBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->new_dialog(CAddonBase::m_interface->toKodi->kodiBase, title.c_str());
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
index cff30d8..6d2b32b 100644
--- 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
@@ -96,8 +96,7 @@ namespace dialogs
96 hiddenInput, autoCloseMs); 96 hiddenInput, autoCloseMs);
97 if (retString != nullptr) 97 if (retString != nullptr)
98 { 98 {
99 if (std::strlen(retString)) 99 text = retString;
100 text = retString;
101 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 100 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
102 } 101 }
103 return ret; 102 return ret;
@@ -129,8 +128,7 @@ namespace dialogs
129 allowEmptyResult, autoCloseMs); 128 allowEmptyResult, autoCloseMs);
130 if (retString != nullptr) 129 if (retString != nullptr)
131 { 130 {
132 if (std::strlen(retString)) 131 text = retString;
133 text = retString;
134 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 132 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
135 } 133 }
136 return ret; 134 return ret;
@@ -162,8 +160,7 @@ namespace dialogs
162 allowEmptyResult, autoCloseMs); 160 allowEmptyResult, autoCloseMs);
163 if (retString != nullptr) 161 if (retString != nullptr)
164 { 162 {
165 if (std::strlen(retString)) 163 newPassword = retString;
166 newPassword = retString;
167 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 164 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
168 } 165 }
169 return ret; 166 return ret;
@@ -192,8 +189,7 @@ namespace dialogs
192 newPassword.c_str(), &retString, autoCloseMs); 189 newPassword.c_str(), &retString, autoCloseMs);
193 if (retString != nullptr) 190 if (retString != nullptr)
194 { 191 {
195 if (std::strlen(retString)) 192 newPassword = retString;
196 newPassword = retString;
197 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 193 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
198 } 194 }
199 return ret; 195 return ret;
@@ -275,8 +271,7 @@ namespace dialogs
275 autoCloseMs); 271 autoCloseMs);
276 if (retString != nullptr) 272 if (retString != nullptr)
277 { 273 {
278 if (std::strlen(retString)) 274 newPassword = retString;
279 newPassword = retString;
280 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 275 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
281 } 276 }
282 return ret; 277 return ret;
@@ -305,8 +300,7 @@ namespace dialogs
305 &retString, autoCloseMs); 300 &retString, autoCloseMs);
306 if (retString != nullptr) 301 if (retString != nullptr)
307 { 302 {
308 if (std::strlen(retString)) 303 newPassword = retString;
309 newPassword = retString;
310 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 304 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
311 } 305 }
312 return ret; 306 return ret;
@@ -339,8 +333,7 @@ namespace dialogs
339 retries, autoCloseMs); 333 retries, autoCloseMs);
340 if (retString != nullptr) 334 if (retString != nullptr)
341 { 335 {
342 if (std::strlen(retString)) 336 password = retString;
343 password = retString;
344 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 337 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
345 } 338 }
346 return ret; 339 return ret;
@@ -373,8 +366,7 @@ namespace dialogs
373 text.c_str(), &retString, searching, autoCloseMs); 366 text.c_str(), &retString, searching, autoCloseMs);
374 if (retString != nullptr) 367 if (retString != nullptr)
375 { 368 {
376 if (std::strlen(retString)) 369 text = retString;
377 text = retString;
378 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 370 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
379 } 371 }
380 return ret; 372 return ret;
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
index dddbf7e..70e9e7b 100644
--- 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
@@ -68,8 +68,7 @@ namespace dialogs
68 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_new_password(CAddonBase::m_interface->toKodi->kodiBase, &pw); 68 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_new_password(CAddonBase::m_interface->toKodi->kodiBase, &pw);
69 if (pw != nullptr) 69 if (pw != nullptr)
70 { 70 {
71 if (std::strlen(pw)) 71 newPassword = pw;
72 newPassword = pw;
73 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, pw); 72 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, pw);
74 } 73 }
75 return ret; 74 return ret;
@@ -172,8 +171,7 @@ namespace dialogs
172 toVerify.c_str(), &retString, heading.c_str(), verifyInput); 171 toVerify.c_str(), &retString, heading.c_str(), verifyInput);
173 if (retString != nullptr) 172 if (retString != nullptr)
174 { 173 {
175 if (std::strlen(retString)) 174 toVerify = retString;
176 toVerify = retString;
177 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 175 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
178 } 176 }
179 return ret; 177 return ret;
@@ -279,8 +277,7 @@ namespace dialogs
279 ipAddress.c_str(), &retString, heading.c_str()); 277 ipAddress.c_str(), &retString, heading.c_str());
280 if (retString != nullptr) 278 if (retString != nullptr)
281 { 279 {
282 if (std::strlen(retString)) 280 ipAddress = retString;
283 ipAddress = retString;
284 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 281 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
285 } 282 }
286 return ret; 283 return ret;
@@ -326,8 +323,7 @@ namespace dialogs
326 input.c_str(), &retString, heading.c_str(), autoCloseTimeoutMs); 323 input.c_str(), &retString, heading.c_str(), autoCloseTimeoutMs);
327 if (retString != nullptr) 324 if (retString != nullptr)
328 { 325 {
329 if (std::strlen(retString)) 326 input = retString;
330 input = retString;
331 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 327 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
332 } 328 }
333 return ret; 329 return ret;
@@ -354,8 +350,7 @@ namespace dialogs
354 time.c_str(), &retString, heading.c_str()); 350 time.c_str(), &retString, heading.c_str());
355 if (retString != nullptr) 351 if (retString != nullptr)
356 { 352 {
357 if (std::strlen(retString)) 353 time = retString;
358 time = retString;
359 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString); 354 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
360 } 355 }
361 return ret; 356 return ret;
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
index 963c84c..8276832 100644
--- 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
@@ -22,6 +22,38 @@
22#include "../definitions.h" 22#include "../definitions.h"
23#include "../../AddonBase.h" 23#include "../../AddonBase.h"
24 24
25//==============================================================================
26/// \defgroup cpp_kodi_vfs_Defs Definitions, structures and enumerators
27/// \ingroup cpp_kodi_gui_dialogs_Select
28/// @brief **Dialog Select definition values**
29//------------------------------------------------------------------------------
30
31//==============================================================================
32/// \ingroup cpp_kodi_vfs_Defs
33/// @brief **Selection entry structure**
34///
35typedef struct SSelectionEntry
36{
37 //============================================================================
38 /// Structure constructor
39 ///
40 /// There becomes selected always set to false.
41 ///
42 SSelectionEntry() : selected(false) { }
43 //----------------------------------------------------------------------------
44
45 /// Entry identfication string
46 std::string id;
47
48 /// Entry name to show on GUI dialog
49 std::string name;
50
51 /// Place where entry can be preselected and after return the from user
52 /// selected is set.
53 bool selected;
54} SSelectionEntry;
55//------------------------------------------------------------------------------
56
25namespace kodi 57namespace kodi
26{ 58{
27namespace gui 59namespace gui
@@ -97,6 +129,139 @@ namespace dialogs
97 return ret; 129 return ret;
98 } 130 }
99 //-------------------------------------------------------------------------- 131 //--------------------------------------------------------------------------
132
133 //==========================================================================
134 ///
135 /// \ingroup cpp_kodi_gui_dialogs_Select
136 /// @brief Show a selection dialog about given parts.
137 ///
138 /// This function is mostly equal to the other, only becomes the string list
139 /// here done by a SSelectionEntry, where a ID string can be defined.
140 ///
141 /// @param[in] heading Dialog heading name
142 /// @param[in] entries SSelectionEntry list about entries
143 /// @param[in] selected [opt] Predefined selection (default is
144 /// <tt>-1</tt> for the first)
145 /// @param[in] autoclose [opt] To close dialog automatic after the given
146 /// time in ms. As '0' it stays open.
147 /// @return The selected entry, if return <tt>-1</tt> was
148 /// nothing selected or canceled
149 ///
150 ///
151 ///-------------------------------------------------------------------------
152 ///
153 /// **Example:**
154 /// ~~~~~~~~~~~~~{.cpp}
155 /// #include <kodi/gui/dialogs/Select.h>
156 ///
157 /// std::vector<SSelectionEntry> entries
158 /// {
159 /// { "ID 1", "Test 1", false },
160 /// { "ID 2", "Test 2", false },
161 /// { "ID 3", "Test 3", false },
162 /// { "ID 4", "Test 4", false },
163 /// { "ID 5", "Test 5", false }
164 /// };
165 ///
166 /// int selected = kodi::gui::dialogs::Select::Show("Test selection", entries, -1);
167 /// if (selected < 0)
168 /// fprintf(stderr, "Item selection canceled\n");
169 /// else
170 /// fprintf(stderr, "Selected item is: %i\n", selected);
171 /// ~~~~~~~~~~~~~
172 ///
173 inline int Show(const std::string& heading, std::vector<SSelectionEntry>& entries, int selected = -1, unsigned int autoclose = 0)
174 {
175 using namespace ::kodi::addon;
176 unsigned int size = entries.size();
177 const char** cEntries = static_cast<const char**>(malloc(size*sizeof(const char*)));
178 for (unsigned int i = 0; i < size; ++i)
179 {
180 cEntries[i] = entries[i].name.c_str();
181 if (selected == -1 && entries[i].selected)
182 selected = i;
183 }
184 int ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogSelect->open(CAddonBase::m_interface->toKodi->kodiBase, heading.c_str(),
185 cEntries, size, selected, autoclose);
186 if (ret >= 0)
187 {
188 entries[ret].selected = true;
189 }
190 free(cEntries);
191 return ret;
192 }
193 //--------------------------------------------------------------------------
194
195 //==========================================================================
196 ///
197 /// \ingroup cpp_kodi_gui_dialogs_Select
198 /// @brief Show a multiple selection dialog about given parts.
199 ///
200 /// @param[in] heading Dialog heading name
201 /// @param[in] entries SSelectionEntry list about entries
202 /// @param[in] autoclose [opt] To close dialog automatic after the given
203 /// time in ms. As '0' it stays open.
204 /// @return The selected entries, if return <tt>empty</tt> was
205 /// nothing selected or canceled
206 ///
207 /// With selected on SSelectionEntry can be a pre selection defined.
208 ///
209 ///-------------------------------------------------------------------------
210 ///
211 /// **Example:**
212 /// ~~~~~~~~~~~~~{.cpp}
213 /// #include <kodi/gui/dialogs/Select.h>
214 ///
215 /// std::vector<SSelectionEntry> entries
216 /// {
217 /// { "ID 1", "Test 1", false },
218 /// { "ID 2", "Test 2", false },
219 /// { "ID 3", "Test 3", false },
220 /// { "ID 4", "Test 4", false },
221 /// { "ID 5", "Test 5", false }
222 /// };
223 ///
224 /// bool ret = kodi::gui::dialogs::Select::ShowMultiSelect("Test selection", entries);
225 /// if (!ret)
226 /// fprintf(stderr, "Selection canceled\n");
227 /// else
228 /// {
229 /// fprintf(stderr, "Selected items:\n");
230 /// for (const auto& entry : entries)
231 /// {
232 /// if (entry.selected)
233 /// fprintf(stderr, " - %s\n", entry.selected.id.c_str());
234 /// }
235 /// }
236 /// ~~~~~~~~~~~~~
237 ///
238 inline bool ShowMultiSelect(const std::string& heading, std::vector<SSelectionEntry>& entries, int autoclose = 0)
239 {
240 using namespace ::kodi::addon;
241 unsigned int size = entries.size();
242 const char** cEntryIDs = static_cast<const char**>(malloc(size*sizeof(const char*)));
243 const char** cEntryNames = static_cast<const char**>(malloc(size*sizeof(const char*)));
244 bool* cEntriesSelected = static_cast<bool*>(malloc(size*sizeof(bool)));
245 for (unsigned int i = 0; i < size; ++i)
246 {
247 cEntryIDs[i] = entries[i].id.c_str();
248 cEntryNames[i] = entries[i].name.c_str();
249 cEntriesSelected[i] = entries[i].selected;
250 }
251 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogSelect->open_multi_select(CAddonBase::m_interface->toKodi->kodiBase,
252 heading.c_str(), cEntryIDs, cEntryNames,
253 cEntriesSelected, size, autoclose);
254 if (ret)
255 {
256 for (unsigned int i = 0; i < size; ++i)
257 entries[i].selected = cEntriesSelected[i];
258 }
259 free(cEntryNames);
260 free(cEntryIDs);
261 free(cEntriesSelected);
262 return ret;
263 }
264 //--------------------------------------------------------------------------
100 }; 265 };
101 /// @} 266 /// @}
102 267