From 56f6eb2c09d453db9359d7c781b0bc56741eb420 Mon Sep 17 00:00:00 2001 From: Inkamari Harjula Date: Fri, 8 Dec 2023 11:45:32 +0200 Subject: [PATCH] Doc: Review and improve QFileDialog documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Grammar improvements made. A screenshot added. Task-number: QTBUG-119551 Change-Id: Ia14c654e92eede5a32bba18cd4d05a74d289f64b Reviewed-by: Mats Honkamaa (cherry picked from commit 26ac6bd4a4e004acd4602d346c3fe45e79a51bf6) Reviewed-by: Kai Köhne --- src/widgets/dialogs/qfiledialog.cpp | 243 +++++++++--------- .../images/qtquickdialogs-filedialog-gtk.png | Bin 0 -> 39560 bytes 2 files changed, 123 insertions(+), 120 deletions(-) create mode 100644 src/widgets/doc/images/qtquickdialogs-filedialog-gtk.png diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index b8a4d8f8c48..6439952abd1 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -58,14 +58,17 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) /*! \class QFileDialog - \brief The QFileDialog class provides a dialog that allow users to select files or directories. + \brief The QFileDialog class provides a dialog that allows users to select files or directories. \ingroup standard-dialogs \inmodule QtWidgets - The QFileDialog class enables a user to traverse the file system in - order to select one or many files or a directory. + The QFileDialog class enables a user to traverse the file system + to select one or many files or a directory. - The easiest way to create a QFileDialog is to use the static functions. + \image qtquickdialogs-filedialog-gtk.png + + The easiest way to create a QFileDialog is to use the static functions, + such as \l getOpenFileName(). \snippet code/src_gui_dialogs_qfiledialog.cpp 0 @@ -90,7 +93,7 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) AnyFile, meaning that the user can select any file, or even specify a file that doesn't exist. This mode is useful for creating a "Save As" file dialog. Use ExistingFile if the user must select an - existing file, or \l Directory if only a directory may be selected. + existing file, or \l Directory if only a directory can be selected. See the \l QFileDialog::FileMode enum for the complete list of modes. The fileMode property contains the mode of operation for the dialog; @@ -99,9 +102,9 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) \snippet code/src_gui_dialogs_qfiledialog.cpp 3 - In the above example, the filter is set to \c{"Images (*.png *.xpm *.jpg)"}, - this means that only files with the extension \c png, \c xpm, - or \c jpg will be shown in the QFileDialog. You can apply + In the above example, the filter is set to \c{"Images (*.png *.xpm *.jpg)"}. + This means that only files with the extension \c png, \c xpm, + or \c jpg are shown in the QFileDialog. You can apply several filters by using setNameFilters(). Use selectNameFilter() to select one of the filters you've given as the file dialog's default filter. @@ -115,7 +118,7 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) \snippet code/src_gui_dialogs_qfiledialog.cpp 4 - The last important function you will need to use when creating your + The last important function you need to use when creating your own file dialog is selectedFiles(). \snippet code/src_gui_dialogs_qfiledialog.cpp 5 @@ -130,13 +133,13 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) The \l{dialogs/standarddialogs}{Standard Dialogs} example shows how to use QFileDialog as well as other built-in Qt dialogs. - By default, a platform-native file dialog will be used if the platform has - one. In that case, the widgets which would otherwise be used to construct the - dialog will not be instantiated, so related accessors such as layout() and - itemDelegate() will return null. Also, not all platforms show file dialogs + By default, a platform-native file dialog is used if the platform has + one. In that case, the widgets that would otherwise be used to construct the + dialog are not instantiated, so related accessors such as layout() and + itemDelegate() return null. Also, not all platforms show file dialogs with a title bar, so be aware that the caption text might not be visible to the user. You can set the \l DontUseNativeDialog option to ensure that the - widget-based implementation will be used instead of the native dialog. + widget-based implementation is used instead of the native dialog. \sa QDir, QFileInfo, QFile, QColorDialog, QFontDialog, {Standard Dialogs Example} */ @@ -151,8 +154,8 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) /*! \enum QFileDialog::ViewMode - This enum describes the view mode of the file dialog; i.e. what - information about each file will be displayed. + This enum describes the view mode of the file dialog; that is, what + information about each file is displayed. \value Detail Displays an icon, a name, and details for each item in the directory. @@ -166,7 +169,7 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) \enum QFileDialog::FileMode This enum is used to indicate what the user may select in the file - dialog; i.e. what the dialog will return if the user clicks OK. + dialog; that is, what the dialog returns if the user clicks OK. \value AnyFile The name of a file, whether it exists or not. \value ExistingFile The name of a single existing file. @@ -190,7 +193,7 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) dialog. By default symlinks are resolved. \value DontConfirmOverwrite Don't ask for confirmation if an - existing file is selected. By default, confirmation is requested. + existing file is selected. By default, confirmation is requested. (Valid only if \l acceptMode is \l {QFileDialog::}{AcceptSave}). Note: This option is not supported on macOS when using the @@ -211,7 +214,7 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) \value DontUseCustomDirectoryIcons Always use the default directory icon. Some platforms allow the user to set a different icon. Custom icon lookup - cause a big performance impact over network or removable drives. + causes a big performance impact over network or removable drives. Setting this will enable the QFileIconProvider::DontUseCustomDirectoryIcons option in the icon provider. This enum value was added in Qt 5.2. */ @@ -380,7 +383,7 @@ QFileDialog::~QFileDialog() \snippet filedialogurls/filedialogurls.cpp 0 - The file dialog will then look like this: + Then the file dialog looks like this: \image filedialogurls.png @@ -737,7 +740,7 @@ bool QFileDialog::testOption(Option option) const /*! \property QFileDialog::options - \brief the various options that affect the look and feel of the dialog + \brief The various options that affect the look and feel of the dialog. \since 4.5 By default, all options are disabled. @@ -811,11 +814,11 @@ QFileDialog::Options QFileDialog::options() const /*! \since 4.5 - This function connects one of its signals to the slot specified by \a receiver - and \a member. The specific signal depends is filesSelected() if fileMode is - ExistingFiles and fileSelected() if fileMode is anything else. + This function shows the dialog, and connects the slot specified by \a receiver + and \a member to the signal that informs about selection changes. If the fileMode is + ExistingFiles, this is the filesSelected() signal, otherwise it is the fileSelected() signal. - The signal will be disconnected from the slot when the dialog is closed. + The signal is disconnected from the slot when the dialog is closed. */ void QFileDialog::open(QObject *receiver, const char *member) { @@ -904,7 +907,7 @@ void QFileDialogPrivate::_q_goToUrl(const QUrl &url) \note On iOS, if you set \a directory to \l{QStandardPaths::standardLocations()} {QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()}, - a native image picker dialog will be used for accessing the user's photo album. + a native image picker dialog is used for accessing the user's photo album. The filename returned can be loaded using QFile and related APIs. For this to be enabled, the Info.plist assigned to QMAKE_INFO_PLIST in the project file must contain the key \c NSPhotoLibraryUsageDescription. See @@ -1397,15 +1400,15 @@ QStringList qt_strip_filters(const QStringList &filters) assumption that the file extension determines the file type is not consistent on every operating system. It is possible to have a file with no dot in its name (for example, \c Makefile). In a native Windows file - dialog, \b{*.*} will match such files, while in other types of file dialogs - it may not. So it is better to use \b{*} if you mean to select any file. + dialog, \b{*.*} matches such files, while in other types of file dialogs + it might not match. So, it's better to use \b{*} if you mean to select any file. \snippet code/src_gui_dialogs_qfiledialog.cpp 7 \l setMimeTypeFilters() has the advantage of providing all possible name filters for each file type. For example, JPEG images have three possible extensions; if your application can open such files, selecting the - \c image/jpeg mime type as a filter will allow you to open all of them. + \c image/jpeg mime type as a filter allows you to open all of them. */ void QFileDialog::setNameFilters(const QStringList &filters) { @@ -1641,7 +1644,7 @@ QString QFileDialog::selectedMimeTypeFilter() const /*! \property QFileDialog::viewMode - \brief the way files and directories are displayed in the dialog + \brief The way files and directories are displayed in the dialog. By default, the \c Detail mode is used to display information about files and directories. @@ -1670,14 +1673,14 @@ QFileDialog::ViewMode QFileDialog::viewMode() const /*! \property QFileDialog::fileMode - \brief the file mode of the dialog + \brief The file mode of the dialog. The file mode defines the number and type of items that the user is expected to select in the dialog. By default, this property is set to AnyFile. - This function will set the labels for the FileName and + This function sets the labels for the FileName and \l{QFileDialog::}{Accept} \l{DialogLabel}s. It is possible to set custom text after the call to setFileMode(). @@ -1722,7 +1725,7 @@ QFileDialog::FileMode QFileDialog::fileMode() const /*! \property QFileDialog::acceptMode - \brief the accept mode of the dialog + \brief The accept mode of the dialog. The action mode defines whether the dialog is for opening or saving files. @@ -1750,14 +1753,14 @@ void QFileDialog::setAcceptMode(QFileDialog::AcceptMode mode) /*! \property QFileDialog::supportedSchemes - \brief the URL schemes that the file dialog should allow navigating to. + \brief The URL schemes that the file dialog should allow navigating to. \since 5.6 Setting this property allows to restrict the type of URLs the - user will be able to select. It is a way for the application to declare - the protocols it will support to fetch the file content. An empty list + user can select. It is a way for the application to declare + the protocols it supports to fetch the file content. An empty list means that no restriction is applied (the default). - Supported for local files ("file" scheme) is implicit and always enabled; + Support for local files ("file" scheme) is implicit and always enabled; it is not necessary to include it in the restriction. */ @@ -1839,10 +1842,10 @@ QFileDialog::AcceptMode QFileDialog::acceptMode() const /*! \property QFileDialog::defaultSuffix - \brief suffix added to the filename if no other suffix was specified + \brief Suffix added to the filename if no other suffix was specified. - This property specifies a string that will be added to the - filename if it has no suffix already. The suffix is typically + This property specifies a string that is added to the + filename if it has no suffix yet. The suffix is typically used to indicate the file type (e.g. "txt" indicates a text file). @@ -2045,41 +2048,41 @@ QString QFileDialog::labelText(DialogLabel label) const \snippet code/src_gui_dialogs_qfiledialog.cpp 8 The function creates a modal file dialog with the given \a parent widget. - If \a parent is not \nullptr, the dialog will be shown centered over the + If \a parent is not \nullptr, the dialog is shown centered over the parent widget. - The file dialog's working directory will be set to \a dir. If \a dir - includes a file name, the file will be selected. Only files that match the - given \a filter are shown. The filter selected is set to \a selectedFilter. + The file dialog's working directory is set to \a dir. If \a dir + includes a file name, the file is selected. Only files that match the + given \a filter are shown. The selected filter is set to \a selectedFilter. The parameters \a dir, \a selectedFilter, and \a filter may be empty strings. If you want multiple filters, separate them with ';;', for example: \snippet code/src_gui_dialogs_qfiledialog.cpp 14 - The \a options argument holds various options about how to run the dialog, - see the QFileDialog::Option enum for more information on the flags you can + The \a options argument holds various options about how to run the dialog. + See the QFileDialog::Option enum for more information on the flags you can pass. - The dialog's caption is set to \a caption. If \a caption is not specified + The dialog's caption is set to \a caption. If \a caption is not specified, then a default caption will be used. - On Windows, and \macos, this static function will use the + On Windows, and \macos, this static function uses the native file dialog and not a QFileDialog. Note that the \macos native file dialog does not show a title bar. - On Windows the dialog will spin a blocking modal event loop that will not - dispatch any QTimers, and if \a parent is not \nullptr then it will position + On Windows the dialog spins a blocking modal event loop that does not + dispatch any QTimers, and if \a parent is not \nullptr then it positions the dialog just below the parent's title bar. On Unix/X11, the normal behavior of the file dialog is to resolve and follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp}, - the file dialog will change to \c{/var/tmp} after entering \c{/usr/tmp}. If - \a options includes DontResolveSymlinks, the file dialog will treat + the file dialog changes to \c{/var/tmp} after entering \c{/usr/tmp}. If + \a options includes DontResolveSymlinks, the file dialog treats symlinks as regular directories. \warning Do not delete \a parent during the execution of the dialog. If you - want to do this, you should create the dialog yourself using one of the + want to do this, you must create the dialog yourself using one of the QFileDialog constructors. \sa getOpenFileNames(), getSaveFileName(), getExistingDirectory() @@ -2107,21 +2110,21 @@ QString QFileDialog::getOpenFileName(QWidget *parent, The function is used similarly to QFileDialog::getOpenFileName(). In particular \a parent, \a caption, \a dir, \a filter, \a selectedFilter - and \a options are used in the exact same way. + and \a options are used in exactly the same way. The main difference with QFileDialog::getOpenFileName() comes from the ability offered to the user to select a remote file. That's why the return type and the type of \a dir is QUrl. The \a supportedSchemes argument allows to restrict the type of URLs the - user will be able to select. It is a way for the application to declare + user is able to select. It is a way for the application to declare the protocols it will support to fetch the file content. An empty list means that no restriction is applied (the default). - Supported for local files ("file" scheme) is implicit and always enabled; + Support for local files ("file" scheme) is implicit and always enabled; it is not necessary to include it in the restriction. - When possible, this static function will use the native file dialog and - not a QFileDialog. On platforms which don't support selecting remote + When possible, this static function uses the native file dialog and + not a QFileDialog. On platforms that don't support selecting remote files, Qt will allow to select only local files. \sa getOpenFileName(), getOpenFileUrls(), getSaveFileUrl(), getExistingDirectoryUrl() @@ -2155,33 +2158,33 @@ QUrl QFileDialog::getOpenFileUrl(QWidget *parent, } /*! - This is a convenience static function that will return one or more existing + This is a convenience static function that returns one or more existing files selected by the user. \snippet code/src_gui_dialogs_qfiledialog.cpp 9 This function creates a modal file dialog with the given \a parent widget. - If \a parent is not \nullptr, the dialog will be shown centered over the + If \a parent is not \nullptr, the dialog is shown centered over the parent widget. - The file dialog's working directory will be set to \a dir. If \a dir - includes a file name, the file will be selected. The filter is set to + The file dialog's working directory is set to \a dir. If \a dir + includes a file name, the file is selected. The filter is set to \a filter so that only those files which match the filter are shown. The filter selected is set to \a selectedFilter. The parameters \a dir, - \a selectedFilter and \a filter may be empty strings. If you need multiple + \a selectedFilter and \a filter can be empty strings. If you need multiple filters, separate them with ';;', for instance: \snippet code/src_gui_dialogs_qfiledialog.cpp 14 - The dialog's caption is set to \a caption. If \a caption is not specified - then a default caption will be used. + The dialog's caption is set to \a caption. If \a caption is not specified, + then a default caption is used. - On Windows, and \macos, this static function will use the + On Windows and \macos, this static function uses the native file dialog and not a QFileDialog. Note that the \macos native file dialog does not show a title bar. - On Windows the dialog will spin a blocking modal event loop that will not - dispatch any QTimers, and if \a parent is not \nullptr then it will position + On Windows the dialog spins a blocking modal event loop that does not + dispatch any QTimers, and if \a parent is not \nullptr then it positions the dialog just below the parent's title bar. On Unix/X11, the normal behavior of the file dialog is to resolve and @@ -2192,7 +2195,7 @@ QUrl QFileDialog::getOpenFileUrl(QWidget *parent, pass. \warning Do not delete \a parent during the execution of the dialog. If you - want to do this, you should create the dialog yourself using one of the + want to do this, you must create the dialog yourself using one of the QFileDialog constructors. \sa getOpenFileName(), getSaveFileName(), getExistingDirectory() @@ -2215,13 +2218,13 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, } /*! - This is a convenience static function that will return one or more existing + This is a convenience static function that returns one or more existing files selected by the user. If the user presses Cancel, it returns an empty list. The function is used similarly to QFileDialog::getOpenFileNames(). In particular \a parent, \a caption, \a dir, \a filter, \a selectedFilter - and \a options are used in the exact same way. + and \a options are used in exactly the same way. The main difference with QFileDialog::getOpenFileNames() comes from the ability offered to the user to select remote files. That's why @@ -2229,14 +2232,14 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, and QUrl. The \a supportedSchemes argument allows to restrict the type of URLs the - user will be able to select. It is a way for the application to declare - the protocols it will support to fetch the file content. An empty list + user can select. It is a way for the application to declare + the protocols it supports to fetch the file content. An empty list means that no restriction is applied (the default). - Supported for local files ("file" scheme) is implicit and always enabled; + Support for local files ("file" scheme) is implicit and always enabled; it is not necessary to include it in the restriction. - When possible, this static function will use the native file dialog and - not a QFileDialog. On platforms which don't support selecting remote + When possible, this static function uses the native file dialog and + not a QFileDialog. On platforms that don't support selecting remote files, Qt will allow to select only local files. \sa getOpenFileNames(), getOpenFileUrl(), getSaveFileUrl(), getExistingDirectoryUrl() @@ -2270,15 +2273,15 @@ QList QFileDialog::getOpenFileUrls(QWidget *parent, } /*! - This is a convenience static function that will return the content of a file + This is a convenience static function that returns the content of a file selected by the user. This function is used to access local files on Qt for WebAssembly, where the web - sandbox places restrictions on how such access may happen. Its implementation will + sandbox places restrictions on how such access can happen. Its implementation will make the browser display a native file dialog, where the user makes the file selection based on the parameter \a nameFilter. - It can also be used on other platforms, where it will fall back to using QFileDialog. + It can also be used on other platforms, where it falls back to using QFileDialog. The function is asynchronous and returns immediately. The \a fileOpenCompleted callback will be called when a file has been selected and its contents have been @@ -2345,10 +2348,10 @@ void QFileDialog::getOpenFileContent(const QString &nameFilter, const std::funct suggest a file name to the user. This function is used to save files to the local file system on Qt for WebAssembly, where - the web sandbox places restrictions on how such access may happen. Its implementation will + the web sandbox places restrictions on how such access can happen. Its implementation will make the browser display a native file dialog, where the user makes the file selection. - It can also be used on other platforms, where it will fall back to using QFileDialog. + It can also be used on other platforms, where it falls back to using QFileDialog. The function is asynchronous and returns immediately. @@ -2380,7 +2383,7 @@ void QFileDialog::saveFileContent(const QByteArray &fileContent, const QString & } /*! - This is a convenience static function that will return a file name selected + This is a convenience static function that returns a file name selected by the user. The file does not have to exist. It creates a modal file dialog with the given \a parent widget. If @@ -2389,8 +2392,8 @@ void QFileDialog::saveFileContent(const QByteArray &fileContent, const QString & \snippet code/src_gui_dialogs_qfiledialog.cpp 11 - The file dialog's working directory will be set to \a dir. If \a dir - includes a file name, the file will be selected. Only files that match the + The file dialog's working directory is set to \a dir. If \a dir + includes a file name, the file is selected. Only files that match the \a filter are shown. The filter selected is set to \a selectedFilter. The parameters \a dir, \a selectedFilter, and \a filter may be empty strings. Multiple filters are separated with ';;'. For instance: @@ -2405,24 +2408,24 @@ void QFileDialog::saveFileContent(const QByteArray &fileContent, const QString & desired value. The dialog's caption is set to \a caption. If \a caption is not specified, - a default caption will be used. + a default caption is used. - On Windows, and \macos, this static function will use the + On Windows, and \macos, this static function uses the native file dialog and not a QFileDialog. - On Windows the dialog will spin a blocking modal event loop that will not - dispatch any QTimers, and if \a parent is not \nullptr then it will - position the dialog just below the parent's title bar. On \macos, with its + On Windows the dialog spins a blocking modal event loop that does not + dispatch any QTimers, and if \a parent is not \nullptr then it + positions the dialog just below the parent's title bar. On \macos, with its native file dialog, the filter argument is ignored. On Unix/X11, the normal behavior of the file dialog is to resolve and follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp}, - the file dialog will change to \c{/var/tmp} after entering \c{/usr/tmp}. If - \a options includes DontResolveSymlinks the file dialog will treat symlinks + the file dialog changes to \c{/var/tmp} after entering \c{/usr/tmp}. If + \a options includes DontResolveSymlinks, the file dialog treats symlinks as regular directories. \warning Do not delete \a parent during the execution of the dialog. If you - want to do this, you should create the dialog yourself using one of the + want to do this, you must create the dialog yourself using one of the QFileDialog constructors. \sa getOpenFileName(), getOpenFileNames(), getExistingDirectory() @@ -2450,21 +2453,21 @@ QString QFileDialog::getSaveFileName(QWidget *parent, The function is used similarly to QFileDialog::getSaveFileName(). In particular \a parent, \a caption, \a dir, \a filter, \a selectedFilter - and \a options are used in the exact same way. + and \a options are used in exactly the same way. The main difference with QFileDialog::getSaveFileName() comes from the ability offered to the user to select a remote file. That's why the return type and the type of \a dir is QUrl. The \a supportedSchemes argument allows to restrict the type of URLs the - user will be able to select. It is a way for the application to declare - the protocols it will support to save the file content. An empty list + user can select. It is a way for the application to declare + the protocols it supports to save the file content. An empty list means that no restriction is applied (the default). - Supported for local files ("file" scheme) is implicit and always enabled; + Support for local files ("file" scheme) is implicit and always enabled; it is not necessary to include it in the restriction. - When possible, this static function will use the native file dialog and - not a QFileDialog. On platforms which don't support selecting remote + When possible, this static function uses the native file dialog and + not a QFileDialog. On platforms that don't support selecting remote files, Qt will allow to select only local files. \sa getSaveFileName(), getOpenFileUrl(), getOpenFileUrls(), getExistingDirectoryUrl() @@ -2499,25 +2502,25 @@ QUrl QFileDialog::getSaveFileUrl(QWidget *parent, } /*! - This is a convenience static function that will return an existing + This is a convenience static function that returns an existing directory selected by the user. \snippet code/src_gui_dialogs_qfiledialog.cpp 12 This function creates a modal file dialog with the given \a parent widget. - If \a parent is not \nullptr, the dialog will be shown centered over the + If \a parent is not \nullptr, the dialog is shown centered over the parent widget. The dialog's working directory is set to \a dir, and the caption is set to - \a caption. Either of these may be an empty string in which case the - current directory and a default caption will be used respectively. + \a caption. Either of these can be an empty string in which case the + current directory and a default caption are used respectively. - The \a options argument holds various options about how to run the dialog, - see the QFileDialog::Option enum for more information on the flags you can + The \a options argument holds various options about how to run the dialog. + See the QFileDialog::Option enum for more information on the flags you can pass. To ensure a native file dialog, \l{QFileDialog::}{ShowDirsOnly} must be set. - On Windows and \macos, this static function will use the + On Windows and \macos, this static function uses the native file dialog and not a QFileDialog. However, the native Windows file dialog does not support displaying files in the directory chooser. You need to pass \l{QFileDialog::}{DontUseNativeDialog} to display files using a @@ -2527,16 +2530,16 @@ QUrl QFileDialog::getSaveFileUrl(QWidget *parent, On Unix/X11, the normal behavior of the file dialog is to resolve and follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp}, - the file dialog will change to \c{/var/tmp} after entering \c{/usr/tmp}. If - \a options includes DontResolveSymlinks, the file dialog will treat + the file dialog changes to \c{/var/tmp} after entering \c{/usr/tmp}. If + \a options includes DontResolveSymlinks, the file dialog treats symlinks as regular directories. - On Windows, the dialog will spin a blocking modal event loop that will not - dispatch any QTimers, and if \a parent is not \nullptr then it will position + On Windows, the dialog spins a blocking modal event loop that does not + dispatch any QTimers, and if \a parent is not \nullptr then it positions the dialog just below the parent's title bar. \warning Do not delete \a parent during the execution of the dialog. If you - want to do this, you should create the dialog yourself using one of the + want to do this, you must create the dialog yourself using one of the QFileDialog constructors. \sa getOpenFileName(), getOpenFileNames(), getSaveFileName() @@ -2556,28 +2559,28 @@ QString QFileDialog::getExistingDirectory(QWidget *parent, } /*! - This is a convenience static function that will return an existing + This is a convenience static function that returns an existing directory selected by the user. If the user presses Cancel, it returns an empty url. The function is used similarly to QFileDialog::getExistingDirectory(). In particular \a parent, \a caption, \a dir and \a options are used - in the exact same way. + in exactly the same way. The main difference with QFileDialog::getExistingDirectory() comes from the ability offered to the user to select a remote directory. That's why the return type and the type of \a dir is QUrl. The \a supportedSchemes argument allows to restrict the type of URLs the - user will be able to select. It is a way for the application to declare - the protocols it will support to fetch the file content. An empty list + user is able to select. It is a way for the application to declare + the protocols it supports to fetch the file content. An empty list means that no restriction is applied (the default). - Supported for local files ("file" scheme) is implicit and always enabled; + Support for local files ("file" scheme) is implicit and always enabled; it is not necessary to include it in the restriction. - When possible, this static function will use the native file dialog and - not a QFileDialog. On platforms which don't support selecting remote - files, Qt will allow to select only local files. + When possible, this static function uses the native file dialog and + not a QFileDialog. On platforms that don't support selecting remote + files, Qt allows to select only local files. \sa getExistingDirectory(), getOpenFileUrl(), getOpenFileUrls(), getSaveFileUrl() \since 5.2 @@ -3143,8 +3146,8 @@ void QFileDialogPrivate::_q_showHeader(QAction *action) want to modify the underlying model; for example, to add columns, filter data or add drives. - Any existing proxy model will be removed, but not deleted. The file dialog - will take ownership of the \a proxyModel. + Any existing proxy model is removed, but not deleted. The file dialog + takes ownership of the \a proxyModel. \sa proxyModel() */ diff --git a/src/widgets/doc/images/qtquickdialogs-filedialog-gtk.png b/src/widgets/doc/images/qtquickdialogs-filedialog-gtk.png new file mode 100644 index 0000000000000000000000000000000000000000..9360d747a2b9fef3600d0a453710c8ee49800c71 GIT binary patch literal 39560 zcma(2by!qU-v*58(2ao7CEd~u0!p_6QUcN?LpM00Ac%AhE!~|GgCHFe1JXk`NW)NP zqdxEZyyrXDxxRnknwcGIueJ7Ccl|;&)fMotDX{O|yN9Qw_)PoWJrwZ0d-q2%(SdJD zv)Cx_-GgcKHr zbe>Q0n`0(GM^!gZY-8V;bNt~SaUqfB}^A2dg1lmd15sDjc zaH6dYZm;ylwtMc)MrQ=x=)awBW}7TGVY#~paHAMJgf5t~L046EKz*>KS#TbHF8zf? z@Wzx-RE0>7nTd%>m0zyWc^REJ`CrRi$QmA{a`5rFB(9md3#5;ozX;IxiT)j1=4|L%c_uJFey$MQDVaEu zdPqQC3&uy=lhH#-*qNth{Y=UerC*)*&<-3zC-dCSzh}Sabn=c5tdGga zGqFGqQnFH<^#xjY`?lbt?|3pya>e0eMVCqKiT&6+ z`R}>23}7!7BepM(DV)gd7H^V9!Vl@|QSo&G&*YZ2a&ptOx(8^b|BOG|rxo{`IZkP{ zwgv@6k$v1GYq}QBS$TLXIBN#Gz{dG{89$1|Kbm z1CGw>q9h+=%^38`g>{gKU{n3Ma28ApaTo%FPZX3K*vj+w-P$!nM+o+mtU+g=iczJ! z4?F$Q&?5c}Hi-qKfB3={`9l(V#^AXNsJET-?LykxxnrJ&TzB{kf$`Zk=@q8CHB9z zvGst~)#rsJ9vh+Kle6pCO~epc_7%3Bhwn>913ka;9!4#l{w6do&YaJ^3)gn~YrLO! zS#unx;cL6`Ql6j?y!vK*jRToVqNO(P>RfL&@Sl!Z2_S61OA#uPxV(J+c@D+m?OZS( z&4Y%LwarCJ;?~>O6i9*CrQCjHxVWVC)@Yr!9)5_p&+(@ky9F6`Z+H|_ ze}c+0iyW$vR-D-u!$(~DP#)B`hEMPPr?Y$@)iLXmV8lDM`Dyp9$MjidE?dX8C-wf; zCMlg}t*ImlCD>Gc*=ivX+Lc9#B}Od<_$IV=%)v=H{&6J;vVzV|glY zXzl9N#gWVDj{Zq2O8C>D`jQOE6#0K0%9x0XFQ{X6Oeyk8$smNg)#c*QlIu1=8J@n# zBjtI#Tahjs|NXPp#xr(70am0vkk;(}% z_vL~Wr<8SaUN&MYYj<>XIQAzs1|=u1SonB7Lqt%EZ^fK{@N#!Kqy6P1=4A7#;Fj|d{@q`VFVy5@2}X!`7&%pw0~2Wi`tnXJ&EO{#LNPzD&Fn5Deb0(e+iN`1 z#EP}w$FgYjRmPDV6dCK)M#2--NE;mUE-_gD&ZHbVoY_kAZdJ%{I-c~Tqz$l-i%S(W z!tZz_TY;j|p&TzDOy`9#0k`y@*sy2s`OxLAYJtGL%;%Zmo1i`#Dr8e?bf)I+3 z)pMAx-(EH}h$&Wkn+*o|Bb93n+*e{<9===}yxn9G#KWq!J+hi2Yz4w2ye$W;}P?lFmZpUKVUIjadyBk6GjgnmLxL=` zO{VLKSsGIbungC#mHD=|or#DkIjo0rly-+((y*zBj5S#OB5y14FHhc1?ohDcUixlN za8XW{8E5~`f`#(c{0+Q;D2iNwWwwz+Q!sy)yrG}jsYh;qjx=>0lo%89)$Ui`VA3WS ziNvEEZ8MUr``!T%7iX z8?1nfb#i&NiRJ$6>({U2&uc~k$0WC(r@R`dx0(~npXoXtG^{red-R{q=>b_Y4Hu)| z{%W0Lc0Q%M4R5R63M@m%uc=b!xUen0v>s0NKGJbj_ktW;c7zb;n2lNS9ru?zpwQ;w z%0)yrQRVL1%sf6IWUl1JfN9M zG{(W+NzC)cFElhXdO!avb7wLPwg}pusIK?nJ%6OuNmN7puz^Ffl$53DHj{pf+Rc8l zJodu}FF`z%yp8Sey)=RzB@{LvK?;AC^F2=pir2~HVn=9Evc=RedvUYa&FR?Tgqgv7 zi+WJ-mU#KJ`-RgvE&?@l38!Rlm==fs2P)}l7H9ks3ZEcslz7)2x zyh3Mz_j2!ZovR;>HX3@uX@|nZNxUFIjQWe;KjIVx(Z1d=mKQ&W5>4I7VvuL$mwz*O zYnv5UcAgwp_B$DuitnXC?Ka&J=~YgG9#$?^Myu3#5`EV3u;Oo-j$jV*%Nz&q16#Pk zGc`JLADYDQ|96l=uF7 zhew%7TV9>-YTrXayYN=d*M}kdl}=NQ{}zbeeNZB>$1$)vi+QLDW`F2}AHB7)73GJx zcJu7Ww9aR4pC8+@cVDv;lk%sqGDvM zHoqn4kh**2_VyeN6<>`G=e-HAKL5Nr2zdW*mS9)GR^4vMY84A|n_O01>W;=57fClk z>n3zp-x)w55&mbyBqD!so^})(H$6SK1~0LQ#`-!vn5?Ch?);+yDz}u>Uh98d?ngIm z--`j%p|K0^@I*)@ANHSn;!}tH4>pN<&k4Q|1%Ol!8szhrFOC1fEdS^G(9qWZ{+^dt z%R4L?Ho_yp2_6~II(ztEtr8RCyK5ElBL>>rgC#VV--!F6;o%KDm^e894d3W^C}{$o ze*OCR5ViUa`*eUviK;XbxQ!XJvf7CrJa}Eu&b#!=dEn}R`0jzD-hWCDB*4L$Kz%Hs z*Df@8IChLffRmcuQz8HI`k@s#JWlv;zmPF<^BnH$9{u_KFQfy`P7V3j!dU%Ba^lPa0QKWPB(Jy^Z3zse>c5Ye^oK))=1^*>DcN?QipzHR8+Qr3s2HXUj>M!lNdtp}0y~P8r8aQ9o zyt@8j{eOOu(>y}=9&7(UUuq)$k|s^W-9=+kK%`X7dI_BRJ@heHmG=TTFbMXn)g#(X z|NVXm!tge%w#qg7=Ai~KqFvq!f^?(XYy44R5if$?dz;R{?2iQBTzTt%^LWVg-{*x) zfA}w`PJ?oZ=sj83r}LMSJ&nPYU<2Q?jaa}39^>DQia{Z^=?TKvMthh>HXBkgkbE@! z3MaOp_RK#}mQe$BZ@e&;hNZsFwM`b14dVqK<8K#{G=LbvW@hb-D1RPa6L|k}eqzt| z#U@}I?Dx#B!06qH$N2774ymwxD#(qGkxNvSoCL~VXFzInl%zBtr++pVsQVAj@BpCy^Rru(OebM zLWA0{7k>W!aK8auB4F%D8s0O2&Hgouga{H8CuldWsAN#A%VoJcEf@p!F@iS$P_o`( zN>^uz>Y4$8Tm0 zfmMK2+yi~B@8*#}R4WESaP+?xVWQ&4+913gqT#wx=lf+re@$O? z8h0$r^0^S5)*g1S_>qF$DEzCMcuE5vg_u#WpXm3~M*U(Tq6dox1NhWpj1P-m#-30L zKf=6QsiF^ciu&>fQ>t0P7_)EY-)F1@(vl`-X3izIc3bU4z@c-xpI0c87dB{cb^gZGw)UuARX_R2>AqJJJb)*UAer-& z;z`bFv>0qUaoHSY`mt7OnCtdK+0LN1 zYSps+`$zT3SSXZT*l9kB-&&m%6C!6Kw6niCmS4>Xe((TeRxZ}!({v5_7{9-?JJOA7 zu3yE-DEyg%g3WMPe@qm(XHg7Pcgqb1hBT;w0leILA*4d205N|;Mj}FhLuG*{8=NQ6 zMIo#>6T_s!*GmaQd2nPd>WPLw$gTA`M0?$qRDLp6`;W#IbR>w@_MP&e8}3-z&{iA;1#aClawe?`XZ#)B*+~8}eHMc!Gwi^61KL z=Cr4uFaQbFm?IV4RKvGACVTQ5pFNZBo2s^shq-T0af}Ih?9Mwvbx-O1>5caI?1zk) z5`axmFXMnTL$6%lJOyKOr#zJ7W*=T(PNB&Rs3t=;Z(82Km6^bor@K01hINiCyJGGW zIegD!Vq$ac2B-Pfw#yy24|hl8?BKUX@SCh)5?SLSzvoz3Sh_rj;0Cn}LBmjAuV){2 zel;@KcgLeaT=kazY$l*Y3_)<&PkV%)AGAsG6PB`E+vT3P_vw^%eB9=k@Y~r;M%=Ht zL3!a$%?H8I2q?dwHBYi`f;%I4<1EA**w8f*RUF{c!!;~OhuF5=WAxDW+X5L^!8R$A zmf$aZr`<*f51TXnmc}u;nhl>R5SC_SO=ZHi&BiC^!%xFj)FcZ{zRH;(bV;6v>HhSzr)dpf>W8r6AP@!w_%;As$frMHU6K(A#*diPSd1Y8L&?rTHsF_ui zsG1_G;vei_cJF~dvhLlk9r^NUc)$5;&g{TCllc)(W8c#lE%UZIe?U@*9xpJI9uuMi zTiIG_G{K%X;GwJAj(&|lrWH{1-xCIBo}X+ML-n?fa&Ts?^lN=;k<#3IQH~ULJ#G-g zI=@CFZLN)1Qk(pokKMdZv0f2H&-wX6Vz)<=+gU7qM~M9;5tn&)V0MBnyezF`p+ZWf z8?}l79Od_S4?=;ADP(o}&ZoA>!p_+tYlA6;7bu`QOK-y1lkLe~hDeF8@-N2hPiXvp z%S>fT#!+!a1~?X2x(XcTPF3lmmU-^K)^7FlwsOJBf;Do1fhAW*Z3X~qr*Euu5aA1r z4B*VK%-|?ig{qIVT|`Xx#QDj9aNhm9GO2EsE>{ z!frwdVOR?qeWSdVI*5`!O0+-N(q&T;Oh$*Q9c&d*wtzCJF&Hw<@40|tEsbp%&mPYY z_c0^s)id#bE*SbOm{maFS-cg+<(3($@_2)p$rIxRjB3k4)V*)}tvU>EzUs$FRWZ?j z0EI}I>ORfj%I?%R#&4)jTlm4LdoqB05C^!4SG4vGIOPA zs)U@F`s@dwpDYb92*SPcnbg(m{Csq18nW*7dMoHV^yhm$G2b(rgStFk|5IIs;Ha<>5{x#RP zQCVla_|Y^VaID~=q&qA;pi?uf8=cV863i$W%goxro=(eMc2+>t?f>c}_2wtTl@E9% z(jv-)Og4K*6s{hshlb#h${tP;A7sX&&&kB0LhUgg9UYy8E>LSZjO3+RdLP-sr#F4* zD7PfR;&sKtQQ4U-zAxK2?>HWlH1Z0-hcD%3wljEL7+c4r<rzVFlCv}w zb@hSK0{~{~fBd^AH2#r}A(zGo%@?b-vs3u;Gaq|iEdoBC`ee02tRSY5qRl5{>doW5 z!A6(nM!Zo{mpH?xD=x0Sd$M;J759!wlNdnc)Z+7dOLsRI89P+1be1$Hs^^O8?6} z6|)|S2!tF7Y|e!C3(^TDavN)3mmlx{?Cw8rd=hQAUYYrSE-voIIZmZ==96An?45G(%_AQ9 ze@|-a%o4hP^gz}qXaRfm%m2`S>$`EhQzriSY=0W{XH@uY0A1xzhyQ>5^pE`iuRa3c z%>VtM{R(w&AbISMCZivG*WQx5i-gNk_Z;&j1ppt=zx<2?Rr9zLw%upt;5{&8eKb4q=tsv_wutA^68tzA`f9h@EcfnARgc${lvH~i zEFHr27^u{JH**s$+TYVAw=;fNF@&V>`bHSF_{9GikVZzjXf3U}%Y6VHTJ9q8_?+4` zs{G*Wg4Y1FfRYU8Ebw2aO1J$!+k)FC=atS>@B%i|$c2ax=kvj8n_g|l)+bYeh)g8y zf|)nA5k3~+Lpon9eQp(UzC>NYj?<^RGr2NB==k|}M(Ia= z#7_%rfEb@iZ0w+MKju@8C(1@88auXfkt%FH#M3bsCzMn(*bvjZx*S@?mSMfNZ{i8j!mTh!?Tyq z4x<_B444?44-P&a2G~7EL%6#u2n9h^F zScx4i*3s3BR?0}{s?;*OUCsgXE+d8+HFU3LM3jmj_eEp z-Qq>}04^7xh^m0{B{{i`8VYW@gLa3~zTu;Bvx~{gp6%=HUY}qj&U>l{R+v%W7}hBx z_UH@;)93T$0$G31gjL52lpD3k3(|ggwbl$j z+k#;FqC8eJEly}dlarIomWaOie(uX|onl?MkQ0E3xo~D-5R`b->7%93JOBW;8uVL9 z^PG>asL*7Jah$G6SWov=9~~Vk*!&|??9Zz$E#WIEDpp8b{q9hn{w+Om1}J=C_4W0R z{u^x}{!$)01yoY0bhpUKwm3gNIY7Y~DuU6U?#$%VP?%j3h>$c4sQHx@drvye#%;C- z6RAlahpgtRB#y5Wv#1vhv)T#>5%YRrP9|O?*8-~`1FdqZj(7EAx`sqqMor3`$!Sib z=4a}u5}TT2;rH*uYJPv}k@c0XWd|#Ee^g0er=Mx%*Q7rB@tKq#YZf5J@LNg%vdpNboP;T`-RpP zq`eNJ#@{WB8yr=FLF=ap0)ZU*UpKjF-2hM52gp25#0_dGLeqJqT*&C6=rL&m3IWCW zfJ?`dKv~&lgWH>Hv%1ZVZoMWqTPvG88o~s&>4IR;DPwDe+46vudVB41xLQo^ziPDl z@&Y24f$HbE<%X0a3(DEZ&G?k`OHMr{eS_&Muopy|Fb+}Qb%Rf)zPId~uT6nlwRU>t z#;)vOAG2Remi>-`9(Pkl2SI2vl|@_5Ehi88tf8oRn;kqrrf45d6*}^CH-G&DEIEyo zUl6pQs_v9V*(e%*9%*b2MCyR-kFje^g;L2rb&oW`Gpy6epZtoK*Oyi@6tF zT`t_}-U8CD3>H6Y@1ziISv)lW`jJqBUH%+ zc})HSGG>2#JTynfr0T@{UQtz9ec!Lux*Xcw!&C3XkI`%TOHAF6x2k|4E`SKK$FPtS1QHR_9-O~^S#K>hXb~CI5;TPx8ty6*YV}LwY z6sshD!%(X1^)emBR<>6YO%eb#5@4l(HeJA+Oes`ijSh6AQ5_mSB;pWxkFg0h1>NB^ z&a=SJRMPB}kPZ*`4y zz)6iidQ)eNZ6rk~^0UHB?g9}+z{tlZ3kXw%=*sP%Vv(N`_b{nom~rK;$S^x~@4Z=l zEId3dl*}i0?>ILHDCAd*wFWa}Oyw&tE*~@%0r_CX0(5Jfl)03}tDmIzc`AM=CIVAg zD+vu>u76+JOLOjM4N!1CQOV!$Qv689*cbgo#P`d)^bsD1v$51iA~^)|zdMf}l-IUz zyM`~J+0H*C$;rzWW&VI2Sj_>pTL0njjYK4S8$X5l^{Y z@`rw7NC#33SdSP9%gI@_b3SnzHAImc0N^U`4_+`hJ`ZTaCVR|Nr16G7`c(+Mql9^~ZlP)qI*1@HZp%*M|a*H@`D%KKzA$ z*qCFH{|f*$pOUFcV^i_lejr@RgDui4-Wg^wI(Jwt<}*ld_Z#XTOOI3TF0b>~JN}E~ z{-qE8-uCX8zaEq9-(1gM*XZp+PD_`9N@;6#=eM*B0fz}~3IRJhHG{h7E^6Q6ecm(z z{<|~(q^qJN9yLJabXArg4dyOn%J7*jc^#ZB&=nT45jAi;eZ+mE1$YdyYTbT*nRhv@ zzYn+)4TF=_X#rG?Q%ftl%HcvA3wM?q1^pyeUadJ-F5iR5l~p+=l2Ju*LkbXxK0>A2 zq-=^b6r)6C)^iSy8OOYN<{CIm%Ea|eX^Yx!m`8m#omGyI+!D;bv1PrD_MR)q;WlOP zp}Vc%`lp#02mZ59K9%+zwn_%IbyO#4eZ)3nSaEwR_r$Niwt%{-M{6VbF?M++XWxDGKN90)x56{6I|v&g6d2 zRm=Lg)T%Brnfg|5TSNIcG=<%X60#NrFPDA;k@s?c{s+q`Q)}>N6Jq}oBQgqAPdcD0qmN@@3p!~ zD;JkFZ8S6%U!_zj#PvAI6^V4lut0U1ztK^*?FJHZ`t3WOje@6PMwb_519PtG0gab4 zlJDOL&9#DY+6)=aB^TfUFNd&o2Tb#0d^k73 zKk6~BWt;!NWu@r@O^Z6CS`r$= zS?N4NL`FhKZ+1C;C3<4|>XC=cDbu>zns7NPcYcJZc&*k+9%EQtL!XF`HbSV|NY|@q zf|sW}gZe;^>FOL$ztED14a~?=acg{PBYsZ>H0MKUil~H7hN<1MkHYNvu%L%^351@Q0hgp^Bg-1%%CNXiGwpj z%Cn2FHh&cc#T9GnS`DQ$i+k=yA=RJ_@$^$9{`&B+EOH#ane!P7pQ;bkEpP1ug2F|g z%72IRMerSXu`aY;8s@3Crr(z>xRKo|oF@p@0RMa;asZ z)@Ax;T{f$G=}xyA%svONk2FZ0GC-%h*cm?TPg_{|b&-*K`ISU)aEjNw^+y)z$_`w- z=ovZFwADbaBnoX?o(Noo3THR&QbAr{k!mZJM8hufwGMIbvb($)SgQ zj*2Qdw5Rn}@?4Zdi`0&k_bwyNJI)kSa>8rcJ-bvh<6Vn2JQEU5yWbsEJ`+b5SnLcq zx4#th+f@o3i$EL0Pirc)!#ugDY^i;a_>$svi@V+_qw%-=DV+?}8%ESR8P4 zUXhqap)RYr)lMux*tZEV&y;1~G}r9^(q-2xWo(`ETh;U{dG?GZuBO^{H0y=$Ma>(g z{%!fLM?@b&$d#45ouo?nW}CuAi)45W0b5UQ7trcnK-cC-rjI zS&z>VC7CzXGe?rIs3&T35}om&z~l9CfEx3@mdWmOCwdEtGU>hF@V(OCUk*t zthA%jtE7aICE|2-;7^t#SEV zOzb4zdF-Xj^$P*9Dv3Po-YH`4RRWIl&$fi^d5n>`Q515MhFc6DHY~k<%V-*5rN&zV z;ZeRv1xzEWFs(II0@pYSxrr?+3#btnhSo^T^Q(j$i=tdv$3avslx*pNN)4o&B7riX zDGxP-$M2Gj-9KUoE)z8?jFZ+OE}i-|JjEv>V#N@pgNbXA-@QZl%@Jsr$<>ZE>9GL=*Sb07=37GoIw>KlTxbz17P~12 zo}0Fij(ZXfdo8NaWbq~iF^W#q2cBCA?8iMCph-uqFvr`UF)-!oqY}*2VqdAdolY?V z$LJ%EZeK`7Ty!1vwBqDmnhuxY(IcrMQOjlK`O%8X`j>^e`ot}3+U1s>2iwB0wraQD zG`+@Ue6vt82t+M8&22sNRpbg!mYusUgrRXzQ{CA-APi)J;re7}v4ox#hu;R2AacZ3B&SJuh5I`+n*KXu(ZoWg`+s%03wZ>^r9gCDnwZL2D~bi|lQW;ocU5vp@78m?Yk5Dh zvqbj!-5kG`3GK4C_G~)EA4!VW7-;?0xSkgw6?+fYt`VA_gD_Hx*P_VimQDNc>Jwzf z;zlSnlCe{V2Yge^#kLk8(E}CX^ZE;LmjZ}PTlCvt{4GK<0hDomE-M1pOLLDJ;9V$C z{TMsR9Q{_&4AS;fv*MoQSkrV?;@+ z;WDqda)0Wh23>MBR%f-Wshn%gooxo5!o}XBuM-dwzmgknS8W9NdSBW~Dz&xRH-{fs z1?l&+$maOku&JQlP`JdKdwKWd+Fn&(68(=*IW4Js)oNULBa8T5zkW=2LJB(DQ7Kmm zN{?L`jO0)brQpi3n2XRJFa8);G%`N=g*HgR^d4s1`PbVIQkcQq<~9kz5K%f#Bx|Hq zeOVJb)f;GL4ocbi5-CwXGLO7A^Wf zoZXP6@p3nOgmjQ*Eh1tnfShBd(Q7$k%N2d`nOK%ns+362cf^q$r4Qcg&-x1E_fU|T zC}LLomU7Gl?>|B%2O=HGFnDFEdE$n$MVX*%W|w4~oyo9GKK%Ahq~_5(0|{e*&6OS` zQRgy6koMyWSgce%25+nfUw7QRLDj~DRtvl#R*umb2uM6P-d?yaQ9|9*J2#4du} zw4uRsp2$^oIf$)J6zlHnM|a7n{+O* zu~LT-jZ1UBVdJON#i(Tt%jt*Fdi-n)2b3zp0dYM`?M~9TE!^g0tPJw~n25#V$($rE zl;o%Dz7iHAROk%oZ^*0_Kp`Qb$}dJx@wdZ70y>y!y9TiA>YwnLHPjLGAQ}wtYoBaC z<}PH`==q6iPvBu5{A0&#ZzG8s$VYox^TA&nt+93N5PLCjoxqm(^DQ^>Z24kN?b_tH z-{hR|R?)az42Zw0q6U|o%Oih_zRSf|)kp8$WHA>%H@hk#e9rcm09DIbaS$qKd5v@* zKqZphn_-TV?BW?3|1j!gRZ)tyIyT(Odh+c{;^YDsHgXs%8(642#1fhPKPwxPfA*MgZsVn=4_m{SHcc=`gFtUPHnC&@V8G zo#D*#Qsyay;SQc=!So-A=#5peI}3})laZZqV>0~%9yiyCSQ7v=W6Zsa+PA4wM$;{o&=ip zb0RNJqPE~INzTjwtGlC;*hceMsq-w{-#{2|-n?0XV9-PXs%gRS`fx_+hx|)fuCU`9NZTcjSj zkOLY21VC}`9tqHD^dbFye!8gmPbb!f(z0)yCI%Gdz1OL+aBy@6xn^o?xrQarQtyhO z#{B*LSFg_&^ai;#QWfJJXX>Wy_6Jb$Z$1AXg5@m`rd;VDkOpesoMx^HB;_2JE6o*F ze=nk5Ot#%HWy^mVsA&a~bp`&SKq=37ftGO?3ENT)`rgizKWjEuIrG}^z^Uc>AMTGRw?uU!boE$cL70orzo)q741Z$!xW!Y9-t!r zshl+WH-zU&9`-O4CFeMcLG8a@Jhp41Qv-5Oy$}8fcrl#UN8^PrRu^t> z>XCtfYpGmU5sp7`+ePUlVoY22#oOova;KEVyd0kpCDxKv-20DXCGWA+N+cqn1|+5C zTU4+JQHNgtq%$C-4ZKyWYqdy!B+~O3`bum@R~HQ*@#;V_Aw$IZ@t+>K^S*A`QT73HEnRf<1DCCFrOnyKY6?N3>=#>uY`h>QyPn_F=%5iaO#f-k>W}xI zSE!dr7lSaKfL4pkTfahIq>Fp%I^v*YzIxcO-+HNw2Lth<+1lC`@z72L32aR6;|R{_ z$7=pZ6uL9yhf&pOb!nf5Z;cmbKN}RGmA7*MbmXgDr@&b0+l%3)RUNKa0huj>TD!vF zliOw5TUN`yIIV1*Ej40ZOf0*lC)!NG=iQpOKr(1Y1xSjplRkV{cuHE%1grX`Ab?}p1qGxcpr`NLMI&IS0A|by@&p1w`t<>&xMaUf zrfZ!T@F<0&BGRV&5%fXhXGueUok>ulJ;?f@6((Trr2q+`$E7oMaakSc{U1V?e=GzB z<>cilBFgURH=HYw3;N_hBQE|kq!R34vdxjAX7UsoBH5m6IitKf!4O)245gAEogc2rb_zuir0SgZeK5hU^O@gaM5+KcW~ z9T^$Gpw(%aN0-(688I`q`GO1;zn1+W`%6M;X`t5gei*g5M?w4Qu|di48QNKe+CsB; zHIb`ztx;5b+tn(M%lZ&?$k;dc?L2I)l8KmPtXUuip0@c7urLb0f1M2jN`!mv%%xjJ zVP6Qp3Q%oux65N!zy!4f!Jql85A6jmKzTGsHg}co)05L#rHV$$`p^* z26gg?HzSFTOad-`)JZ99zL97fs#}i$xEs;TIgpgfs?#cYRjCSEx1)?W9frHd&mI40 zJUKbhsbwV_p{V68aO9UaHO-VjZe(v6w4ca9I7D~@Z~WK{Y6^B;ffz^}$!4X^$Yby2 zFT$zZCO|of>UV2e8=*$qu{_R)^1n>_BT)B_hNV5d7Y;05JrKD(2E03~VXFVql{Uj3 z=KR0amDo%gt5)3^jxe#lckBQe89t|ZiFnZo%K@#@@F_mPv9P0yy1>W6iU#atWlhbf z(qobGZVn>l_X}w7uk1^8j58;o?l#EDwo-tGxl+$Wo0qMVKYpM7G!c(s7C;ih~8$(i~p9R?5FC|#!HM}K4-4jjX_*)U4^X#CWvX(=NG4V2(GDh;a13dMIMSsY(2RoP1Nj z^?isaGDrrfAZ;sa^{l0Ow%m?E8wWsEtD<(9FO%Wq{0;=JJFzr`ptwGuJkA;5nY?)@ zYYG&AGCg$MoOz0udv4wpUTFyi56HXe*Dmmkt7mm765tx#GXp>JT3|(XiHN=RCqy?7 zCRl zIlM%B&@iMW5^Vo-&Nqh}d>WLGpl)Y<1qfQ}?EV1RH<~;8Q(+Fo7T(Lr5D&M-fOm+Y|R=)y`_cOst0d!=1=0!$!h$ygytwh`jIR0YCn_~(}w90{LmOW98 zapfNsWjg$l>+FN-k?6?Q?&HzT;N028aT zC26>#Jy)A=_I@Gg{iCsa|25C}(=l@+-y{r_k2P=S4DOJPAYF+6)5ESWlnewAHM(3s^}k1?dWDqIKR${2K-OdR*L?R46HwAJ4? zk;vBX2?L5Lk7p06Os0!6qQs$F%PIhH^X=wd(Lx2Lx`9}V4nJoxIj1Koir@#u7dy0k ziZ(8v@+yW<@z*J8O@@XdlVQn@!^*_U3hUFXV5=E0GdQA*Lj#Kn$uyWIu4kE-hR5M_ z<^SZ+Gcykd1exY0>B$r=)solj558&adP;0EU@!FSrg~V)clacXxp_!F#NC}sddXnXtWty6cBZh}ZD0H;dN>&i1Is|%NbLIOg`ZBH z`L2P5OLOXdllEMzTXhNAwFZinc2bA!*7MpqMUiowCcSRg8*RaV)v|j_z@1&~$pzGS z@%?vI5t@%37O2Jmjqrw=tQRQ8PCGH?3Sm~;uzpWLEg5yuP4}p0c%vF~Q=k=!08m+7Z^X6pa{Rp>x2?h3*@q(4 zyN$}UmsY6_=v08hA(V=hn!Vje3<~kQFf)m!DKM*~)onHJj(Hay2b(qZt5J9{Xn!1LG z9z>?b&o6+sq<<$_?yu`r1}No$0Sjd>1L?u%Gp;^SNF0doY3^jM%&^koTKB`;XI~y^ zSG`qW+k(qBr_@%tEh}ttqw7D#;#H12x&PRWTrR{1ci_I+h=R9(A^PU z90aZk-8+h?19d@(zrPNXeIVZa(CUmdr3}I#(4F~d|NHk13+|Il0d!~G#Xto-h zP8az~*zQuZBd@U%(^#%2Ky(7}L1 zaP9ul6=MHTuH704SPbJ$qMYJoXUqOfMN83KTX@Rf0|+3+_Gs%wnO2xpnZnVXtl14h z&KYvVeGn9kA{n)ChRCI+_X1faDZKw5(#|?8%CFn|gn)nws7QkW2qGXcbSNMw3P{%g zDm~O7DLF_Qlp;uXm-GJ?A{vxz4%X`AbH)W8ZtPz1C-a z*SeXF9O%!Jr1>w>lbHT|d05{?D)q!AT=>l6XA?pcLGVK9gU$X}pXQ`fn4L{ehPdd* zCTp^!wk5CYw*$q+MCw}4Y+$R?gGYowNh)xwBcQa%t}9vh!X2XTCV!59i`q(}z3kKf zti|mcpl~w&voG9Mxi!#k1!s|^p`Krqj62OfB|MF`-{*?_=s)2T;%fBiM#u?8h3016 z;zR*MQU*KWD^2njIv?G*#unu0$_{UvtF#$bg$Om*e2L+A$Pc|?q57aUu=nViPC<^K zOi{GFiW0tBKvTiY3N}kcnsiU==~$t*BALn@MbzNgWNoP?WGVTbu*s9 z)<$l3vy5N)zP>EKsy?v~Nr z`|^B=@;ne^q~L{>_)H|I6WV3;!+=~S5ZnUU>o0^xOa1Rk+g}n6yyEwtrO3a27hiw- z=XA$~IryLP7yV1dFwpCF*BLP)Yh;`OtjEIvM zATjH!vAf40Vf+66J2B(^1JOG$*ozY@6cK?heF0=p%A0@pyS)@i5lSRA0JXI`Ve+{n z^2+B@u>0nkG}KFNbO@CKl@z!~_6bU;mUGlk*Tpm+bbB=aTNG+p@Zkel>wy+S31`?< zf#5WD{o01WfR#5ob_RL78#b5^p1Po}kpuV+0*O0;bjA??!qR>XzP7RfELx@TDlirq zuFIqAK=GMBs~O4&0sO2Q#Zo3YI}F3o&pKHikW4Z%O1c(!7!QL;zPiVY9z^mnpa{90 z?dYe{)0OJk7Bt!r=#b2Jp*3Y*Fc>V0g6s-0=_&Xg?(q8?HNnEEV&8*&uifdGb+kjn zv;pps;o;%oI*=vid4H{Ov5D>ZlngZSfN1U`x&%>;kb0^ z*0*opGCZ~xGztwM?X!Ig>mHLW)lRd5k?-DdQOWMVxBdG5(mf(k=eY+J_~Ns6HQ57p z-=EEFQNq(YxBN zHcwfWM=K{q`VLi|wR_HE=}*(@kAI9m*0o=@iZ z5UZLE;>A6jOx@Ap9?Xa<6~fvNoQ62@Y%h(ZPpk9i9ywyRiDCx9 zP)(cqwSVS}3IilM`oEFrZ=gEbMmsS++EsCj`{|EHG7iWVGHwS*_Vd^Y1xePL+#+~8 zoc7&c;7;i;^rZS<vxz?rjGrjR>9K|y)eU11Cxsp5y=J2&mLgx9Yh*Rbq4>(#mzUJH>oxVRia z?s!2@RC&C!g`~Bw*hKc}*5GDS1L#`UwlJ7KSVqYq%%5Ox@cnqQ7Q_xrzpNp8;iD{VCS5|mGFPP%6tUU6@^JZOHfS&PxdCFY_+Y|8Qdt32$ z(4RoL9>|6T2Vs*ldmuxRKMEPJpD(R~Ps(kjH@VGe2CpiHvvPotyp%Vb(y~7*w6Z(m z8dNy!M3?Pe*ftAQ6A&?fets@@;Zpd^LG^RW1x!c$hLx`vtmPZ;a8f`I&m{0eB|-l#9TEl}oq{&u&LwCKc+x3O6| z7eoPoUFE(Y6z=U(BZ_&u>8OkCSlK;~1i48VZLUsX-uA=2p`ojtT=1VOULr|?@m1zboCBO3ro9CJ{m4Kw;=zPyKeq@Z^4GK|pQe@8%G z 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 literal 0 HcmV?d00001