diff options
author | Kevin Ottens <ervin@kde.org> | 2013-03-14 14:41:47 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-04-29 18:41:55 +0200 |
commit | ac06bfdc76414c8d8c727ff5278b1baafe610860 (patch) | |
tree | 166dccf2158150aa1572141b6dc4f2a43657aaef /tests | |
parent | 2e749c089f6fd93909e7cd4cc8129f2969b35185 (diff) |
Add QUrl based static methods to QFileDialog
With QUrl variants of the static methods, it is possible to get to use
VFS facilities of the platform if available.
Since we can't predict if the application will use the VFS available in
the platform or its own mechanisms, an extra parameter is provided to
restrict the protocols allowed to the user. This extra parameter
defaults to no restriction, which is the most convenient if the platform
file dialog and the application use a matching VFS. It's likely to be
the most common use.
Change-Id: I4c9effde9d194d226cd8b7a140eb9036187ba87b
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp | 46 | ||||
-rw-r--r-- | tests/manual/dialogs/filedialogpanel.cpp | 70 | ||||
-rw-r--r-- | tests/manual/dialogs/filedialogpanel.h | 6 |
3 files changed, 122 insertions, 0 deletions
diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp index d797c553db..98c4bf69f3 100644 --- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp @@ -1346,6 +1346,38 @@ QString saveName(QWidget *, const QString &, const QString &, const QString &, Q return "saveName"; } +QT_BEGIN_NAMESPACE +typedef QUrl (*_qt_filedialog_existing_directory_url_hook)(QWidget *parent, const QString &caption, const QUrl &dir, QFileDialog::Options options, const QStringList &supportedSchemes); +extern Q_WIDGETS_EXPORT _qt_filedialog_existing_directory_url_hook qt_filedialog_existing_directory_url_hook; +QT_END_NAMESPACE +QUrl existingUrl(QWidget *, const QString &, const QUrl &, QFileDialog::Options, const QStringList &) { + return QUrl("http://dirUrl"); +} + +QT_BEGIN_NAMESPACE +typedef QUrl (*_qt_filedialog_open_file_url_hook)(QWidget * parent, const QString &caption, const QUrl &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options, const QStringList &supportedSchemes); +extern Q_WIDGETS_EXPORT _qt_filedialog_open_file_url_hook qt_filedialog_open_file_url_hook; +QT_END_NAMESPACE +QUrl openUrl(QWidget *, const QString &, const QUrl &, const QString &, QString *, QFileDialog::Options, const QStringList &) { + return QUrl("http://openUrl"); +} + +QT_BEGIN_NAMESPACE +typedef QList<QUrl> (*_qt_filedialog_open_file_urls_hook)(QWidget * parent, const QString &caption, const QUrl &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options, const QStringList &supportedSchemes); +extern Q_WIDGETS_EXPORT _qt_filedialog_open_file_urls_hook qt_filedialog_open_file_urls_hook; +QT_END_NAMESPACE +QList<QUrl> openUrls(QWidget *, const QString &, const QUrl &, const QString &, QString *, QFileDialog::Options, const QStringList &) { + return QList<QUrl>() << QUrl("http://openUrls"); +} + +QT_BEGIN_NAMESPACE +typedef QUrl (*_qt_filedialog_save_file_url_hook)(QWidget * parent, const QString &caption, const QUrl &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options, const QStringList &supportedSchemes); +extern Q_WIDGETS_EXPORT _qt_filedialog_save_file_url_hook qt_filedialog_save_file_url_hook; +QT_END_NAMESPACE +QUrl saveUrl(QWidget *, const QString &, const QUrl &, const QString &, QString *, QFileDialog::Options, const QStringList &) { + return QUrl("http://saveUrl"); +} + void tst_QFiledialog::hooks() { @@ -1358,6 +1390,20 @@ void tst_QFiledialog::hooks() QCOMPARE(QFileDialog::getOpenFileName(), QString("openName")); QCOMPARE(QFileDialog::getOpenFileNames(), QStringList("openNames")); QCOMPARE(QFileDialog::getSaveFileName(), QString("saveName")); + QCOMPARE(QFileDialog::getExistingDirectoryUrl(), QUrl::fromLocalFile("dir")); + QCOMPARE(QFileDialog::getOpenFileUrl(), QUrl::fromLocalFile("openName")); + QCOMPARE(QFileDialog::getOpenFileUrls(), QList<QUrl>() << QUrl::fromLocalFile("openNames")); + QCOMPARE(QFileDialog::getSaveFileUrl(), QUrl::fromLocalFile("saveName")); + + qt_filedialog_existing_directory_url_hook = &existingUrl; + qt_filedialog_save_file_url_hook = &saveUrl; + qt_filedialog_open_file_url_hook = &openUrl; + qt_filedialog_open_file_urls_hook = &openUrls; + + QCOMPARE(QFileDialog::getExistingDirectoryUrl(), QUrl("http://dirUrl")); + QCOMPARE(QFileDialog::getOpenFileUrl(), QUrl("http://openUrl")); + QCOMPARE(QFileDialog::getOpenFileUrls(), QList<QUrl>() << QUrl("http://openUrls")); + QCOMPARE(QFileDialog::getSaveFileUrl(), QUrl("http://saveUrl")); } #ifdef Q_OS_UNIX diff --git a/tests/manual/dialogs/filedialogpanel.cpp b/tests/manual/dialogs/filedialogpanel.cpp index 636e65b684..b524e3d669 100644 --- a/tests/manual/dialogs/filedialogpanel.cpp +++ b/tests/manual/dialogs/filedialogpanel.cpp @@ -157,6 +157,7 @@ FileDialogPanel::FileDialogPanel(QWidget *parent) , m_acceptMode(createCombo(this, acceptModeComboData, sizeof(acceptModeComboData)/sizeof(ComboData))) , m_fileMode(createCombo(this, fileModeComboData, sizeof(fileModeComboData)/sizeof(ComboData))) , m_viewMode(createCombo(this, viewModeComboData, sizeof(viewModeComboData)/sizeof(ComboData))) + , m_allowedSchemes(new QLineEdit(this)) , m_defaultSuffix(new QLineEdit(this)) , m_directory(new QLineEdit(this)) , m_selectedFileName(new QLineEdit(this)) @@ -171,6 +172,7 @@ FileDialogPanel::FileDialogPanel(QWidget *parent) optionsLayout->addRow(tr("AcceptMode:"), m_acceptMode); optionsLayout->addRow(tr("FileMode:"), m_fileMode); optionsLayout->addRow(tr("ViewMode:"), m_viewMode); + optionsLayout->addRow(tr("Allowed Schemes:"), m_allowedSchemes); optionsLayout->addRow(m_native); optionsLayout->addRow(m_confirmOverWrite); optionsLayout->addRow(m_nameFilterDetailsVisible); @@ -216,9 +218,13 @@ FileDialogPanel::FileDialogPanel(QWidget *parent) row = 0; column++; addButton(tr("getOpenFileName"), buttonLayout, row, column, this, SLOT(getOpenFileName())); + addButton(tr("getOpenFileUrl"), buttonLayout, row, column, this, SLOT(getOpenFileUrl())); addButton(tr("getOpenFileNames"), buttonLayout, row, column, this, SLOT(getOpenFileNames())); + addButton(tr("getOpenFileUrls"), buttonLayout, row, column, this, SLOT(getOpenFileUrls())); addButton(tr("getSaveFileName"), buttonLayout, row, column, this, SLOT(getSaveFileName())); + addButton(tr("getSaveFileUrl"), buttonLayout, row, column, this, SLOT(getSaveFileUrl())); addButton(tr("getExistingDirectory"), buttonLayout, row, column, this, SLOT(getExistingDirectory())); + addButton(tr("getExistingDirectoryUrl"), buttonLayout, row, column, this, SLOT(getExistingDirectoryUrl())); addButton(tr("Restore defaults"), buttonLayout, row, column, this, SLOT(restoreDefaults())); // Main layout @@ -319,6 +325,11 @@ QFileDialog::Options FileDialogPanel::options() const return result; } +QStringList FileDialogPanel::allowedSchemes() const +{ + return m_allowedSchemes->text().simplified().split(' ', QString::SkipEmptyParts); +} + void FileDialogPanel::getOpenFileNames() { QString selectedFilter = m_selectedNameFilter->text().trimmed(); @@ -334,6 +345,22 @@ void FileDialogPanel::getOpenFileNames() } } +void FileDialogPanel::getOpenFileUrls() +{ + QString selectedFilter = m_selectedNameFilter->text().trimmed(); + const QList<QUrl> files = + QFileDialog::getOpenFileUrls(this, tr("getOpenFileNames Qt %1").arg(QLatin1String(QT_VERSION_STR)), + QUrl(m_directory->text()), filterString(), &selectedFilter, options(), + allowedSchemes()); + if (!files.isEmpty()) { + QString result; + QDebug(&result).nospace() + << "Files: " << QUrl::toStringList(files) + << "\nName filter: " << selectedFilter; + QMessageBox::information(this, tr("getOpenFileNames"), result, QMessageBox::Ok); + } +} + void FileDialogPanel::getOpenFileName() { QString selectedFilter = m_selectedNameFilter->text().trimmed(); @@ -349,6 +376,22 @@ void FileDialogPanel::getOpenFileName() } } +void FileDialogPanel::getOpenFileUrl() +{ + QString selectedFilter = m_selectedNameFilter->text().trimmed(); + const QUrl file = + QFileDialog::getOpenFileUrl(this, tr("getOpenFileUrl Qt %1").arg(QLatin1String(QT_VERSION_STR)), + QUrl(m_directory->text()), filterString(), &selectedFilter, options(), + allowedSchemes()); + if (file.isValid()) { + QString result; + QDebug(&result).nospace() + << "File: " << file.toString() + << "\nName filter: " << selectedFilter; + QMessageBox::information(this, tr("getOpenFileName"), result, QMessageBox::Ok); + } +} + void FileDialogPanel::getSaveFileName() { QString selectedFilter = m_selectedNameFilter->text().trimmed(); @@ -364,6 +407,22 @@ void FileDialogPanel::getSaveFileName() } } +void FileDialogPanel::getSaveFileUrl() +{ + QString selectedFilter = m_selectedNameFilter->text().trimmed(); + const QUrl file = + QFileDialog::getSaveFileUrl(this, tr("getSaveFileName Qt %1").arg(QLatin1String(QT_VERSION_STR)), + QUrl(m_directory->text()), filterString(), &selectedFilter, options(), + allowedSchemes()); + if (file.isValid()) { + QString result; + QDebug(&result).nospace() + << "File: " << file.toString() + << "\nName filter: " << selectedFilter; + QMessageBox::information(this, tr("getSaveFileNames"), result, QMessageBox::Ok); + } +} + void FileDialogPanel::getExistingDirectory() { const QString dir = @@ -373,12 +432,23 @@ void FileDialogPanel::getExistingDirectory() QMessageBox::information(this, tr("getExistingDirectory"), QLatin1String("Directory: ") + dir, QMessageBox::Ok); } +void FileDialogPanel::getExistingDirectoryUrl() +{ + const QUrl dir = + QFileDialog::getExistingDirectoryUrl(this, tr("getExistingDirectory Qt %1").arg(QLatin1String(QT_VERSION_STR)), + QUrl(m_directory->text()), options() | QFileDialog::ShowDirsOnly, + allowedSchemes()); + if (!dir.isEmpty()) + QMessageBox::information(this, tr("getExistingDirectory"), QLatin1String("Directory: ") + dir.toString(), QMessageBox::Ok); +} + void FileDialogPanel::restoreDefaults() { QFileDialog d; setComboBoxValue(m_acceptMode, d.acceptMode()); setComboBoxValue(m_fileMode, d.fileMode()); setComboBoxValue(m_viewMode, d.viewMode()); + m_allowedSchemes->setText(QString()); m_confirmOverWrite->setChecked(d.confirmOverwrite()); m_nameFilterDetailsVisible->setChecked(d.isNameFilterDetailsVisible()); m_resolveSymLinks->setChecked(d.resolveSymlinks()); diff --git a/tests/manual/dialogs/filedialogpanel.h b/tests/manual/dialogs/filedialogpanel.h index 7ee7cb3f60..601fb7fc51 100644 --- a/tests/manual/dialogs/filedialogpanel.h +++ b/tests/manual/dialogs/filedialogpanel.h @@ -66,9 +66,13 @@ public slots: void deleteNonModalDialog(); void deleteModalDialog(); void getOpenFileNames(); + void getOpenFileUrls(); void getOpenFileName(); + void getOpenFileUrl(); void getSaveFileName(); + void getSaveFileUrl(); void getExistingDirectory(); + void getExistingDirectoryUrl(); void accepted(); void showAcceptedResult(); void restoreDefaults(); @@ -80,6 +84,7 @@ private slots: private: QString filterString() const; QFileDialog::Options options() const; + QStringList allowedSchemes() const; void applySettings(QFileDialog *d) const; QCheckBox *m_readOnly; @@ -90,6 +95,7 @@ private: QComboBox *m_acceptMode; QComboBox *m_fileMode; QComboBox *m_viewMode; + QLineEdit *m_allowedSchemes; QLineEdit *m_defaultSuffix; QLineEdit *m_directory; QLineEdit *m_selectedFileName; |