summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/FileBrowser.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/FileBrowser.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/FileBrowser.h296
1 files changed, 296 insertions, 0 deletions
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 @@
1#pragma once
2/*
3 * Copyright (C) 2005-2017 Team KODI
4 * http://kodi.tv
5 *
6 * This Program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
10 *
11 * This Program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with KODI; see the file COPYING. If not, see
18 * <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#include "../definitions.h"
23#include "../../AddonBase.h"
24
25namespace kodi
26{
27namespace gui
28{
29namespace dialogs
30{
31
32 //============================================================================
33 ///
34 /// \defgroup cpp_kodi_gui_dialogs_FileBrowser Dialog File Browser
35 /// \ingroup cpp_kodi_gui
36 /// @brief \cpp_namespace{ kodi::gui::dialogs::FileBrowser }
37 /// **File browser dialog**
38 ///
39 /// The functions listed below of the class "FileBrowser" offer
40 /// the possibility to select to a file by the user of the add-on.
41 ///
42 /// It allows all the options that are possible in Kodi itself and offers all
43 /// support file types.
44 ///
45 /// It has the header \ref FileBrowser.h "#include <kodi/gui/dialogs/FileBrowser.h>"
46 /// be included to enjoy it.
47 ///
48 namespace FileBrowser
49 {
50 //==========================================================================
51 ///
52 /// \ingroup cpp_kodi_gui_dialogs_FileBrowser
53 /// @brief Directory selection dialog
54 ///
55 /// @param[in] shares With Shares becomes the available start folders
56 /// be set.
57 /// @param[in] heading Dialog header name
58 /// @param[in,out] path As in the path to start and return value about
59 /// selected directory
60 /// @param[in] writeOnly If set only writeable folders are shown.
61 /// @return False if selection becomes canceled.
62 ///
63 /// **Example:**
64 /// ~~~~~~~~~~~~~{.cpp}
65 /// #include <kodi/gui/dialogs/FileBrowser.h>
66 ///
67 /// /*
68 /// * Example show directory selection dialog with on 'share' (first value)
69 /// * defined directory types.
70 /// *
71 /// * If this becomes leaved empty and 'directory' is empty goes it to the
72 /// * base path of the hard disk.
73 /// *
74 /// * Also can be with path written to 'directory' before the dialog forced
75 /// * to a start place.
76 /// */
77 /// std::string directory;
78 /// bool ret = kodi::gui::dialogs::FileBrowser::ShowAndGetDirectory("local|network|removable",
79 /// "Test directory selection",
80 /// directory,
81 /// false);
82 /// fprintf(stderr, "Selected directory is : %s and was %s\n", directory.c_str(), ret ? "OK" : "Canceled");
83 /// ~~~~~~~~~~~~~
84 ///
85 inline bool ShowAndGetDirectory(const std::string& shares, const std::string& heading, std::string& path, bool writeOnly = false)
86 {
87 using namespace ::kodi::addon;
88 char* retString = nullptr;
89 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_directory(CAddonBase::m_interface->toKodi->kodiBase,
90 shares.c_str(), heading.c_str(), path.c_str(), &retString, writeOnly);
91 if (retString != nullptr)
92 {
93 if (std::strlen(retString))
94 path = retString;
95 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
96 }
97 return ret;
98 }
99 //--------------------------------------------------------------------------
100
101 //==========================================================================
102 ///
103 /// \ingroup cpp_kodi_gui_dialogs_FileBrowser
104 /// @brief File selection dialog
105 ///
106 /// @param[in] shares With Shares becomes the available start
107 /// folders be set.
108 /// @param[in] mask The mask to filter visible files, e.g.
109 /// ".m3u|.pls|.b4s|.wpl".
110 /// @param[in] heading Dialog header name
111 /// @param[in,out] path As in the path to start and Return value
112 /// about selected file
113 /// @param[in] useThumbs If set show thumbs if possible on dialog.
114 /// @param[in] useFileDirectories If set also packages (e.g. *.zip) are
115 /// handled as directories.
116 /// @return False if selection becomes canceled.
117 ///
118 inline bool ShowAndGetFile(const std::string& shares, const std::string& mask, const std::string& heading,
119 std::string& path, bool useThumbs = false, bool useFileDirectories = false)
120 {
121 using namespace ::kodi::addon;
122 char* retString = nullptr;
123 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file(CAddonBase::m_interface->toKodi->kodiBase,
124 shares.c_str(), mask.c_str(), heading.c_str(), path.c_str(), &retString,
125 useThumbs, useFileDirectories);
126 if (retString != nullptr)
127 {
128 if (std::strlen(retString))
129 path = retString;
130 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
131 }
132 return ret;
133 }
134 //--------------------------------------------------------------------------
135
136 //==========================================================================
137 ///
138 /// \ingroup cpp_kodi_gui_dialogs_FileBrowser
139 /// @brief File selection from a directory
140 ///
141 /// @param[in] directory The directory name where the dialog
142 /// start, possible are normal names and
143 /// kodi's special names.
144 /// @param[in] mask The mask to filter visible files, e.g.
145 /// ".m3u|.pls|.b4s|.wpl".
146 /// @param[in] heading Dialog header name
147 /// @param[in,out] path As in the path to start and Return value
148 /// about selected file
149 /// @param[in] useThumbs If set show thumbs if possible on dialog.
150 /// @param[in] useFileDirectories If set also packages (e.g. *.zip) are
151 /// handled as directories.
152 /// @param[in] singleList
153 /// @return False if selection becomes canceled.
154 ///
155 inline bool ShowAndGetFileFromDir(const std::string& directory, const std::string& mask, const std::string& heading, std::string& path,
156 bool useThumbs = false, bool useFileDirectories = false, bool singleList = false)
157 {
158 using namespace ::kodi::addon;
159 char* retString = nullptr;
160 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_from_dir(CAddonBase::m_interface->toKodi->kodiBase,
161 directory.c_str(), mask.c_str(), heading.c_str(),
162 path.c_str(), &retString, useThumbs,
163 useFileDirectories, singleList);
164 if (retString != nullptr)
165 {
166 if (std::strlen(retString))
167 path = retString;
168 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
169 }
170 return ret;
171 }
172 //--------------------------------------------------------------------------
173
174 //==========================================================================
175 ///
176 /// \ingroup cpp_kodi_gui_dialogs_FileBrowser
177 /// @brief File selection dialog to get several in to a list
178 ///
179 /// @param[in] shares With Shares becomes the available start
180 /// folders be set.
181 /// @param[in] mask The mask to filter visible files, e.g.
182 /// ".m3u|.pls|.b4s|.wpl".
183 /// @param[in] heading Dialog header name
184 /// @param[out] fileList Return value about selected files
185 /// @param[in] useThumbs If set show thumbs if possible on dialog.
186 /// @param[in] useFileDirectories If set also packages (e.g. *.zip) are
187 /// handled as directories.
188 /// @return False if selection becomes canceled.
189 ///
190 inline bool ShowAndGetFileList(const std::string& shares, const std::string& mask, const std::string& heading,
191 std::vector<std::string>& fileList, bool useThumbs = false, bool useFileDirectories = false)
192 {
193 using namespace ::kodi::addon;
194 char** list = nullptr;
195 unsigned int listSize = 0;
196 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_list(CAddonBase::m_interface->toKodi->kodiBase,
197 shares.c_str(), mask.c_str(), heading.c_str(), &list, &listSize,
198 useThumbs, useFileDirectories);
199 if (ret)
200 {
201 for (unsigned int i = 0; i < listSize; ++i)
202 fileList.push_back(list[i]);
203 CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list(CAddonBase::m_interface->toKodi->kodiBase, &list, listSize);
204 }
205 return ret;
206 }
207 //--------------------------------------------------------------------------
208
209 //==========================================================================
210 ///
211 /// \ingroup cpp_kodi_gui_dialogs_FileBrowser
212 /// @brief Source selection dialog
213 ///
214 /// @param[in,out] path As in the path to start and Return value
215 /// about selected source
216 /// @param[in] allowNetworkShares Allow also access to network
217 /// @param[in] additionalShare With additionalShare becomes the available
218 /// start folders be set (optional).
219 /// @param[in] type
220 /// @return False if selection becomes canceled.
221 ///
222 inline bool ShowAndGetSource(std::string& path, bool allowNetworkShares, const std::string& additionalShare = "", const std::string& type = "")
223 {
224 using namespace ::kodi::addon;
225 char* retString = nullptr;
226 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_source(CAddonBase::m_interface->toKodi->kodiBase, path.c_str(), &retString,
227 allowNetworkShares, additionalShare.c_str(), type.c_str());
228 if (retString != nullptr)
229 {
230 if (std::strlen(retString))
231 path = retString;
232 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
233 }
234 return ret;
235 }
236 //--------------------------------------------------------------------------
237
238 //==========================================================================
239 ///
240 /// \ingroup cpp_kodi_gui_dialogs_FileBrowser
241 /// @brief Image selection dialog
242 ///
243 /// @param[in] shares With Shares becomes the available start folders be
244 /// set.
245 /// @param[in] heading Dialog header name
246 /// @param[out] path Return value about selected image
247 /// @return False if selection becomes canceled.
248 ///
249 inline bool ShowAndGetImage(const std::string& shares, const std::string& heading, std::string& path)
250 {
251 using namespace ::kodi::addon;
252 char* retString = nullptr;
253 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image(CAddonBase::m_interface->toKodi->kodiBase,
254 shares.c_str(), heading.c_str(), path.c_str(), &retString);
255 if (retString != nullptr)
256 {
257 if (std::strlen(retString))
258 path = retString;
259 CAddonBase::m_interface->toKodi->free_string(CAddonBase::m_interface->toKodi->kodiBase, retString);
260 }
261 return ret;
262 }
263 //--------------------------------------------------------------------------
264
265 //==========================================================================
266 ///
267 /// \ingroup cpp_kodi_gui_dialogs_FileBrowser
268 /// @brief Image selection dialog to get several in to a list
269 ///
270 /// @param[in] shares With Shares becomes the available start folders
271 /// be set.
272 /// @param[in] heading Dialog header name
273 /// @param[out] file_list Return value about selected images
274 /// @return False if selection becomes canceled.
275 ///
276 inline bool ShowAndGetImageList(const std::string& shares, const std::string& heading, std::vector<std::string>& file_list)
277 {
278 using namespace ::kodi::addon;
279 char** list = nullptr;
280 unsigned int listSize = 0;
281 bool ret = CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image_list(CAddonBase::m_interface->toKodi->kodiBase,
282 shares.c_str(), heading.c_str(), &list, &listSize);
283 if (ret)
284 {
285 for (unsigned int i = 0; i < listSize; ++i)
286 file_list.push_back(list[i]);
287 CAddonBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list(CAddonBase::m_interface->toKodi->kodiBase, &list, listSize);
288 }
289 return ret;
290 }
291 //--------------------------------------------------------------------------
292 };
293
294} /* namespace dialogs */
295} /* namespace gui */
296} /* namespace kodi */