summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Select.h
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/dialogs/Select.h
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/dialogs/Select.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/Select.h165
1 files changed, 165 insertions, 0 deletions
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