diff options
Diffstat (limited to 'src/widgets/dialogs')
-rw-r--r-- | src/widgets/dialogs/qcolordialog.cpp | 9 | ||||
-rw-r--r-- | src/widgets/dialogs/qdialog.cpp | 5 | ||||
-rw-r--r-- | src/widgets/dialogs/qdialog.h | 15 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog.cpp | 86 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog.h | 25 | ||||
-rw-r--r-- | src/widgets/dialogs/qinputdialog.cpp | 17 | ||||
-rw-r--r-- | src/widgets/dialogs/qmessagebox.cpp | 2 | ||||
-rw-r--r-- | src/widgets/dialogs/qwizard.cpp | 10 |
8 files changed, 146 insertions, 23 deletions
diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp index 92ab846a41..c0bacd553d 100644 --- a/src/widgets/dialogs/qcolordialog.cpp +++ b/src/widgets/dialogs/qcolordialog.cpp @@ -1179,7 +1179,8 @@ QColorShower::QColorShower(QColorDialog *parent) curQColor = Qt::white; gl = new QGridLayout(this); - gl->setMargin(gl->spacing()); + const int s = gl->spacing(); + gl->setContentsMargins(s, s, s, s); lab = new QColorShowLabel(this); #ifdef QT_SMALL_COLORDIALOG @@ -1807,7 +1808,7 @@ void QColorDialogPrivate::initWidgets() rightLay->addStretch(); cs = new QColorShower(q); - pickLay->setMargin(cs->gl->margin()); + pickLay->setContentsMargins(cs->gl->contentsMargins()); QObject::connect(cs, SIGNAL(newCol(QRgb)), q, SLOT(_q_newColorTypedIn(QRgb))); QObject::connect(cs, SIGNAL(currentColorChanged(QColor)), q, SIGNAL(currentColorChanged(QColor))); @@ -1816,7 +1817,7 @@ void QColorDialogPrivate::initWidgets() #else rightLay->addWidget(cs); if (leftLay) - leftLay->addSpacing(cs->gl->margin()); + leftLay->addSpacing(cs->gl->contentsMargins().right()); #endif buttons = new QDialogButtonBox(q); @@ -1887,7 +1888,7 @@ bool QColorDialogPrivate::canBeNativeDialog() const } static const Qt::WindowFlags DefaultWindowFlags = - Qt::Dialog | Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint + Qt::Dialog | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint; /*! diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp index cc04110a30..3c49016e2c 100644 --- a/src/widgets/dialogs/qdialog.cpp +++ b/src/widgets/dialogs/qdialog.cpp @@ -779,7 +779,9 @@ void QDialog::setVisible(bool visible) return; QWidget::setVisible(visible); +#if QT_DEPRECATED_SINCE(5, 13) showExtension(d->doShowExtension); +#endif QWidget *fw = window()->focusWidget(); if (!fw) fw = this; @@ -946,6 +948,7 @@ void QDialog::adjustPosition(QWidget* w) move(p); } +#if QT_DEPRECATED_SINCE(5, 13) /*! \obsolete @@ -1090,7 +1093,7 @@ void QDialog::showExtension(bool showIt) #endif } } - +#endif /*! \reimp */ QSize QDialog::sizeHint() const diff --git a/src/widgets/dialogs/qdialog.h b/src/widgets/dialogs/qdialog.h index 7f267dd939..ce57ce5de7 100644 --- a/src/widgets/dialogs/qdialog.h +++ b/src/widgets/dialogs/qdialog.h @@ -69,11 +69,12 @@ public: void setVisible(bool visible) override; - void setOrientation(Qt::Orientation orientation); - Qt::Orientation orientation() const; - - void setExtension(QWidget* extension); - QWidget* extension() const; +#if QT_DEPRECATED_SINCE(5, 13) + QT_DEPRECATED void setOrientation(Qt::Orientation orientation); + QT_DEPRECATED Qt::Orientation orientation() const; + QT_DEPRECATED void setExtension(QWidget* extension); + QT_DEPRECATED QWidget* extension() const; +#endif QSize sizeHint() const override; QSize minimumSizeHint() const override; @@ -96,7 +97,9 @@ public Q_SLOTS: virtual void accept(); virtual void reject(); - void showExtension(bool); +#if QT_DEPRECATED_SINCE(5, 13) + QT_DEPRECATED void showExtension(bool); +#endif protected: QDialog(QDialogPrivate &, QWidget *parent, Qt::WindowFlags f = Qt::WindowFlags()); diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index edaa7854ba..d8a4ad5f24 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -73,6 +73,9 @@ #elif defined(Q_OS_WIN) # include <QtCore/qt_windows.h> #endif +#if defined(Q_OS_WASM) +#include <private/qwasmlocalfileaccess_p.h> +#endif QT_BEGIN_NAMESPACE @@ -1359,6 +1362,7 @@ void QFileDialog::setNameFilter(const QString &filter) } +#if QT_DEPRECATED_SINCE(5, 13) /*! \property QFileDialog::nameFilterDetailsVisible \obsolete @@ -1380,6 +1384,7 @@ bool QFileDialog::isNameFilterDetailsVisible() const { return !testOption(HideNameFilterDetails); } +#endif /* @@ -1859,6 +1864,7 @@ QFileDialog::AcceptMode QFileDialog::acceptMode() const return static_cast<AcceptMode>(d->options->acceptMode()); } +#if QT_DEPRECATED_SINCE(5, 13) /*! \property QFileDialog::readOnly \obsolete @@ -1918,6 +1924,7 @@ bool QFileDialog::confirmOverwrite() const { return !testOption(DontConfirmOverwrite); } +#endif /*! \property QFileDialog::defaultSuffix @@ -2344,6 +2351,85 @@ QList<QUrl> QFileDialog::getOpenFileUrls(QWidget *parent, } /*! + This is a convenience static function that will return 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 + 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. + + The function is asynchronous and returns immediately. The \a fileOpenCompleted + callback will be called when a file has been selected and its contents has been + read into memory. + + \snippet code/src_gui_dialogs_qfiledialog.cpp 14 + \since 5.13 +*/ +void QFileDialog::getOpenFileContent(const QString &nameFilter, const std::function<void(const QString &, const QByteArray &)> &fileOpenCompleted) +{ +#ifdef Q_OS_WASM + auto openFileImpl = std::make_shared<std::function<void(void)>>(); + QString fileName; + QByteArray fileContent; + *openFileImpl = [=]() mutable { + auto fileDialogClosed = [&](bool fileSelected) { + if (!fileSelected) { + fileOpenCompleted(fileName, fileContent); + openFileImpl.reset(); + } + }; + auto acceptFile = [&](uint64_t size, const std::string name) -> char * { + const uint64_t twoGB = 1ULL << 31; // QByteArray limit + if (size > twoGB) + return nullptr; + + fileName = QString::fromStdString(name); + fileContent.resize(size); + return fileContent.data(); + }; + auto fileContentReady = [&]() mutable { + fileOpenCompleted(fileName, fileContent); + openFileImpl.reset(); + }; + + auto qtFilterStringToWebAcceptString = [](const QString &qtString) { + // The Qt and Web name filter string formats are similar, but + // not identical. + return qtString.toStdString(); // ### TODO + }; + + QWasmLocalFileAccess::openFile(qtFilterStringToWebAcceptString(nameFilter), fileDialogClosed, acceptFile, fileContentReady); + }; + + (*openFileImpl)(); +#else + QFileDialog *dialog = new QFileDialog(); + dialog->selectNameFilter(nameFilter); + + auto fileSelected = [=](const QString &fileName) { + QByteArray fileContent; + if (!fileName.isNull()) { + QFile selectedFile(fileName); + selectedFile.open(QIODevice::ReadOnly); + fileContent = selectedFile.readAll(); + } + fileOpenCompleted(fileName, fileContent); + }; + + auto dialogClosed = [=](int code) { + Q_UNUSED(code); + delete dialog; + }; + + connect(dialog, &QFileDialog::fileSelected, fileSelected); + connect(dialog, &QFileDialog::finished, dialogClosed); + dialog->show(); +#endif +} + +/*! This is a convenience static function that will return a file name selected by the user. The file does not have to exist. diff --git a/src/widgets/dialogs/qfiledialog.h b/src/widgets/dialogs/qfiledialog.h index a4d289a77a..95e03618ac 100644 --- a/src/widgets/dialogs/qfiledialog.h +++ b/src/widgets/dialogs/qfiledialog.h @@ -46,6 +46,8 @@ #include <QtCore/qurl.h> #include <QtWidgets/qdialog.h> +#include <functional> + QT_REQUIRE_CONFIG(filedialog); QT_BEGIN_NAMESPACE @@ -64,19 +66,22 @@ class Q_WIDGETS_EXPORT QFileDialog : public QDialog Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode) Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode) Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode) + Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix) +#if QT_DEPRECATED_SINCE(5, 13) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly DESIGNABLE false) - Q_PROPERTY(bool resolveSymlinks READ resolveSymlinks WRITE setResolveSymlinks DESIGNABLE false) Q_PROPERTY(bool confirmOverwrite READ confirmOverwrite WRITE setConfirmOverwrite DESIGNABLE false) - Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix) + Q_PROPERTY(bool resolveSymlinks READ resolveSymlinks WRITE setResolveSymlinks DESIGNABLE false) Q_PROPERTY(bool nameFilterDetailsVisible READ isNameFilterDetailsVisible WRITE setNameFilterDetailsVisible DESIGNABLE false) +#endif Q_PROPERTY(Options options READ options WRITE setOptions) Q_PROPERTY(QStringList supportedSchemes READ supportedSchemes WRITE setSupportedSchemes) public: enum ViewMode { Detail, List }; Q_ENUM(ViewMode) - enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, DirectoryOnly }; + enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, + DirectoryOnly Q_DECL_ENUMERATOR_DEPRECATED_X("Use setOption(ShowDirsOnly, true) instead")}; Q_ENUM(FileMode) enum AcceptMode { AcceptOpen, AcceptSave }; Q_ENUM(AcceptMode) @@ -117,8 +122,12 @@ public: void selectUrl(const QUrl &url); QList<QUrl> selectedUrls() const; +#if QT_DEPRECATED_SINCE(5, 13) + QT_DEPRECATED_X("Use setOption(HideNameFilterDetails, !enabled) instead") void setNameFilterDetailsVisible(bool enabled); + QT_DEPRECATED_X("Use !testOption(HideNameFilterDetails) instead") bool isNameFilterDetailsVisible() const; +#endif void setNameFilter(const QString &filter); void setNameFilters(const QStringList &filters); @@ -145,11 +154,15 @@ public: void setAcceptMode(AcceptMode mode); AcceptMode acceptMode() const; +#if QT_DEPRECATED_SINCE(5, 13) void setReadOnly(bool enabled); bool isReadOnly() const; + QT_DEPRECATED_X("Use setOption(DontResolveSymlinks, !enabled) instead") void setResolveSymlinks(bool enabled); + QT_DEPRECATED_X("Use !testOption(DontResolveSymlinks) instead") bool resolveSymlinks() const; +#endif void setSidebarUrls(const QList<QUrl> &urls); QList<QUrl> sidebarUrls() const; @@ -157,8 +170,12 @@ public: QByteArray saveState() const; bool restoreState(const QByteArray &state); +#if QT_DEPRECATED_SINCE(5, 13) + QT_DEPRECATED_X("Use setOption(DontConfirmOverwrite, !enabled) instead") void setConfirmOverwrite(bool enabled); + QT_DEPRECATED_X("Use !testOption(DontConfirmOverwrite) instead") bool confirmOverwrite() const; +#endif void setDefaultSuffix(const QString &suffix); QString defaultSuffix() const; @@ -263,6 +280,8 @@ public: Options options = Options(), const QStringList &supportedSchemes = QStringList()); + static void getOpenFileContent(const QString &nameFilter, + const std::function<void(const QString &, const QByteArray &)> &fileContentsReady); protected: QFileDialog(const QFileDialogArgs &args); diff --git a/src/widgets/dialogs/qinputdialog.cpp b/src/widgets/dialogs/qinputdialog.cpp index 5a7d6edddf..3cfe8367e0 100644 --- a/src/widgets/dialogs/qinputdialog.cpp +++ b/src/widgets/dialogs/qinputdialog.cpp @@ -168,6 +168,18 @@ private: } }; +class QInputDialogListView : public QListView +{ +public: + QInputDialogListView(QWidget *parent = 0) : QListView(parent) {} + QVariant inputMethodQuery(Qt::InputMethodQuery query) const override + { + if (query == Qt::ImEnabled) + return false; + return QListView::inputMethodQuery(query); + } +}; + class QInputDialogPrivate : public QDialogPrivate { Q_DECLARE_PUBLIC(QInputDialog) @@ -201,7 +213,7 @@ public: mutable QSpinBox *intSpinBox; mutable QDoubleSpinBox *doubleSpinBox; mutable QComboBox *comboBox; - mutable QListView *listView; + mutable QInputDialogListView *listView; mutable QWidget *inputWidget; mutable QVBoxLayout *mainLayout; QInputDialog::InputDialogOptions opts; @@ -298,8 +310,7 @@ void QInputDialogPrivate::ensureListView() Q_Q(QInputDialog); if (!listView) { ensureComboBox(); - - listView = new QListView(q); + listView = new QInputDialogListView(q); listView->hide(); listView->setEditTriggers(QAbstractItemView::NoEditTriggers); listView->setSelectionMode(QAbstractItemView::SingleSelection); diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index c9818624fb..f143e3b527 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -113,7 +113,7 @@ public: , copyAvailable(false) { QVBoxLayout *layout = new QVBoxLayout; - layout->setMargin(0); + layout->setContentsMargins(QMargins()); QFrame *line = new QFrame(this); line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp index 9345a4b583..88b187cd7f 100644 --- a/src/widgets/dialogs/qwizard.cpp +++ b/src/widgets/dialogs/qwizard.cpp @@ -331,7 +331,7 @@ QWizardHeader::QWizardHeader(QWidget *parent) titleLabel->setFont(font); layout = new QGridLayout(this); - layout->setMargin(0); + layout->setContentsMargins(QMargins()); layout->setSpacing(0); layout->setRowMinimumHeight(3, 1); @@ -456,7 +456,7 @@ public: QSize minimumSizeHint() const override { if (pixmap() && !pixmap()->isNull()) - return pixmap()->size(); + return pixmap()->size() / pixmap()->devicePixelRatio(); return QFrame::minimumSizeHint(); } @@ -1032,13 +1032,13 @@ void QWizardPrivate::recreateLayout(const QWizardLayoutInfo &info) int pageColumn = qMin(1, numColumns - 1); if (mac) { - mainLayout->setMargin(0); + mainLayout->setContentsMargins(QMargins()); mainLayout->setSpacing(0); buttonLayout->setContentsMargins(MacLayoutLeftMargin, MacButtonTopMargin, MacLayoutRightMargin, MacLayoutBottomMargin); - pageVBoxLayout->setMargin(7); + pageVBoxLayout->setContentsMargins(7, 7, 7, 7); } else { if (modern) { - mainLayout->setMargin(0); + mainLayout->setContentsMargins(QMargins()); mainLayout->setSpacing(0); pageVBoxLayout->setContentsMargins(deltaMarginLeft, deltaMarginTop, deltaMarginRight, deltaMarginBottom); |