aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickdialogs
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickdialogs')
-rw-r--r--src/quickdialogs/quickdialogs/CMakeLists.txt6
-rw-r--r--src/quickdialogs/quickdialogs/doc/qtquickdialogs.qdocconf2
-rw-r--r--src/quickdialogs/quickdialogs/doc/snippets/qtquickdialogs-filedialog.qml2
-rw-r--r--src/quickdialogs/quickdialogs/qquickabstractdialog.cpp80
-rw-r--r--src/quickdialogs/quickdialogs/qquickabstractdialog_p.h34
-rw-r--r--src/quickdialogs/quickdialogs/qquickcolordialog.cpp1
-rw-r--r--src/quickdialogs/quickdialogs/qquickcolordialog_p.h4
-rw-r--r--src/quickdialogs/quickdialogs/qquickfiledialog.cpp3
-rw-r--r--src/quickdialogs/quickdialogs/qquickfiledialog_p.h4
-rw-r--r--src/quickdialogs/quickdialogs/qquickfolderdialog.cpp2
-rw-r--r--src/quickdialogs/quickdialogs/qquickfolderdialog_p.h4
-rw-r--r--src/quickdialogs/quickdialogs/qquickfontdialog_p.h4
-rw-r--r--src/quickdialogs/quickdialogs/qquickmessagedialog.cpp16
-rw-r--r--src/quickdialogs/quickdialogs/qquickmessagedialog_p.h6
-rw-r--r--src/quickdialogs/quickdialogs/qtquickdialogs2global_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/CMakeLists.txt71
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/ColorDialog.qml3
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml27
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialogDelegate.qml2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml5
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml26
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml5
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml24
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialogDelegate.qml2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Material/MessageDialog.qml2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Universal/ColorDialog.qml5
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml27
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialogDelegate.qml2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Universal/MessageDialog.qml2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml3
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml23
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegate.qml4
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegateLabel.qml7
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/FolderDialogDelegate.qml2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker.cpp5
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker_p.h4
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl.cpp24
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p.h6
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickcolorinputs_p.h5
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory.cpp5
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate.cpp11
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate_p.h4
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl.cpp111
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p.h14
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p_p.h11
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p.h4
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p.h6
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p.h6
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl.cpp18
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p.h6
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickplatformcolordialog_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickplatformfiledialog_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickplatformfolderdialog_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickplatformfontdialog_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquickplatformmessagedialog_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qquicksaturationlightnesspicker_p.h4
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qtquickdialogs2quickimplglobal_p.h2
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/shaders/SaturationLightness.frag3
-rw-r--r--src/quickdialogs/quickdialogsutils/CMakeLists.txt4
-rw-r--r--src/quickdialogs/quickdialogsutils/qquickfilenamefilter_p.h2
-rw-r--r--src/quickdialogs/quickdialogsutils/qtquickdialogs2utilsglobal_p.h2
68 files changed, 504 insertions, 189 deletions
diff --git a/src/quickdialogs/quickdialogs/CMakeLists.txt b/src/quickdialogs/quickdialogs/CMakeLists.txt
index 529d021d3c..893ee7cad8 100644
--- a/src/quickdialogs/quickdialogs/CMakeLists.txt
+++ b/src/quickdialogs/quickdialogs/CMakeLists.txt
@@ -12,6 +12,7 @@ qt_internal_add_qml_module(QuickDialogs2
PLUGIN_TARGET qtquickdialogsplugin
DEPENDENCIES
QtQuick/auto
+ QtQuick.Dialogs.quickimpl/auto
SOURCES
qquickabstractdialog.cpp
qquickabstractdialog_p.h
@@ -44,13 +45,12 @@ qt_internal_add_qml_module(QuickDialogs2
Qt::QuickDialogs2UtilsPrivate
Qt::QuickDialogs2QuickImpl
Qt::QuickDialogs2QuickImplPrivate
+ Qt::QuickTemplates2Private
PUBLIC_LIBRARIES
Qt::Core
Qt::Gui
Qt::Quick
- GENERATE_CPP_EXPORTS
- GENERATE_PRIVATE_CPP_EXPORTS
-)
+ )
qt_internal_add_docs(QuickDialogs2
doc/qtquickdialogs.qdocconf
diff --git a/src/quickdialogs/quickdialogs/doc/qtquickdialogs.qdocconf b/src/quickdialogs/quickdialogs/doc/qtquickdialogs.qdocconf
index 9fd4891d02..b19b96d691 100644
--- a/src/quickdialogs/quickdialogs/doc/qtquickdialogs.qdocconf
+++ b/src/quickdialogs/quickdialogs/doc/qtquickdialogs.qdocconf
@@ -37,5 +37,5 @@ navigation.qmltypespage = "Qt Quick Dialogs QML Types"
tagfile = qtquickdialogs.tags
-# Fail the documentation build if there are more warnings than the limit
+# Enforce zero documentation warnings
warninglimit = 0
diff --git a/src/quickdialogs/quickdialogs/doc/snippets/qtquickdialogs-filedialog.qml b/src/quickdialogs/quickdialogs/doc/snippets/qtquickdialogs-filedialog.qml
index ab3f33f910..b443a927bc 100644
--- a/src/quickdialogs/quickdialogs/doc/snippets/qtquickdialogs-filedialog.qml
+++ b/src/quickdialogs/quickdialogs/doc/snippets/qtquickdialogs-filedialog.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [file]
import QtCore
diff --git a/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp b/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp
index 857a75c7bd..5f5a56a233 100644
--- a/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp
+++ b/src/quickdialogs/quickdialogs/qquickabstractdialog.cpp
@@ -103,8 +103,6 @@ Q_LOGGING_CATEGORY(lcDialogs, "qt.quick.dialogs")
\sa accepted()
*/
-Q_DECLARE_LOGGING_CATEGORY(lcDialogs)
-
QQuickAbstractDialog::QQuickAbstractDialog(QQuickDialogType type, QObject *parent)
: QObject(parent),
m_type(type)
@@ -150,6 +148,8 @@ QWindow *QQuickAbstractDialog::parentWindow() const
void QQuickAbstractDialog::setParentWindow(QWindow *window)
{
qCDebug(lcDialogs) << "set parent window to" << window;
+ m_parentWindowExplicitlySet = bool(window);
+
if (m_parentWindow == window)
return;
@@ -157,6 +157,17 @@ void QQuickAbstractDialog::setParentWindow(QWindow *window)
emit parentWindowChanged();
}
+void QQuickAbstractDialog::resetParentWindow()
+{
+ m_parentWindowExplicitlySet = false;
+
+ if (!m_parentWindow)
+ return;
+
+ m_parentWindow = nullptr;
+ emit parentWindowChanged();
+}
+
/*!
\qmlproperty string QtQuick.Dialogs::Dialog::title
@@ -248,7 +259,7 @@ void QQuickAbstractDialog::setVisible(bool visible)
}
/*!
- \qmlproperty StandardCode QtQuick.Dialogs::Dialog::result
+ \qmlproperty int QtQuick.Dialogs::Dialog::result
This property holds the result code.
@@ -259,12 +270,12 @@ void QQuickAbstractDialog::setVisible(bool visible)
\note MessageDialog sets the result to the value of the clicked standard
button instead of using the standard result codes.
*/
-QQuickAbstractDialog::StandardCode QQuickAbstractDialog::result() const
+int QQuickAbstractDialog::result() const
{
return m_result;
}
-void QQuickAbstractDialog::setResult(StandardCode result)
+void QQuickAbstractDialog::setResult(int result)
{
if (m_result == result)
return;
@@ -287,7 +298,8 @@ void QQuickAbstractDialog::open()
return;
onShow(m_handle.get());
- m_visible = m_handle->show(m_flags, m_modality, m_parentWindow);
+
+ m_visible = m_handle->show(m_flags, m_modality, windowForOpen());
if (m_visible) {
m_result = Rejected; // in case an accepted dialog gets re-opened, then closed
emit visibleChanged();
@@ -310,11 +322,13 @@ void QQuickAbstractDialog::close()
onHide(m_handle.get());
m_handle->hide();
m_visible = false;
+ if (!m_parentWindowExplicitlySet)
+ m_parentWindow = nullptr;
emit visibleChanged();
- if (m_result == Accepted)
+ if (dialogCode() == Accepted)
emit accepted();
- else // if (m_result == Rejected)
+ else if (dialogCode() == Rejected)
emit rejected();
}
@@ -343,13 +357,13 @@ void QQuickAbstractDialog::reject()
}
/*!
- \qmlmethod void QtQuick.Dialogs::Dialog::done(StandardCode result)
+ \qmlmethod void QtQuick.Dialogs::Dialog::done(int result)
Closes the dialog and sets the \a result.
\sa accept(), reject(), result
*/
-void QQuickAbstractDialog::done(StandardCode result)
+void QQuickAbstractDialog::done(int result)
{
setResult(result);
close();
@@ -364,16 +378,22 @@ void QQuickAbstractDialog::componentComplete()
qCDebug(lcDialogs) << "componentComplete";
m_complete = true;
- if (!m_parentWindow) {
- qCDebug(lcDialogs) << "- no parent window; searching for one";
- setParentWindow(findParentWindow());
- }
+ if (!m_visibleRequested)
+ return;
- if (m_visibleRequested) {
- qCDebug(lcDialogs) << "visible was bound to true before component completion; opening dialog";
+ m_visibleRequested = false;
+
+ if (windowForOpen()) {
open();
- m_visibleRequested = false;
+ return;
}
+
+ // Since visible were set to true by the user, we want the dialog to be open by default.
+ // There is no guarantee that the dialog will work when it exists in a object tree that lacks a window,
+ // and since qml components are sometimes instantiated before they're given a window
+ // (which is the case when using QQuickView), we want to delay the call to open(), until the window is provided.
+ if (const auto parentItem = findParentItem())
+ connect(parentItem, &QQuickItem::windowChanged, this, &QQuickAbstractDialog::deferredOpen, Qt::SingleShotConnection);
}
static const char *qmlTypeName(const QObject *object)
@@ -461,21 +481,35 @@ void QQuickAbstractDialog::onHide(QPlatformDialogHelper *dialog)
Q_UNUSED(dialog);
}
-QWindow *QQuickAbstractDialog::findParentWindow() const
+int QQuickAbstractDialog::dialogCode() const { return m_result; }
+
+QQuickItem *QQuickAbstractDialog::findParentItem() const
{
QObject *obj = parent();
while (obj) {
- QWindow *window = qobject_cast<QWindow *>(obj);
- if (window)
- return window;
QQuickItem *item = qobject_cast<QQuickItem *>(obj);
- if (item && item->window())
- return item->window();
+ if (item)
+ return item;
obj = obj->parent();
}
return nullptr;
}
+QWindow *QQuickAbstractDialog::windowForOpen() const
+{
+ if (m_parentWindowExplicitlySet)
+ return m_parentWindow;
+ else if (auto parentItem = findParentItem())
+ return parentItem->window();
+ return m_parentWindow;
+}
+
+void QQuickAbstractDialog::deferredOpen(QWindow *window)
+{
+ m_parentWindow = window;
+ open();
+}
+
QT_END_NAMESPACE
#include "moc_qquickabstractdialog_p.cpp"
diff --git a/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h b/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h
index f1d046eb89..6299b439c4 100644
--- a/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h
+++ b/src/quickdialogs/quickdialogs/qquickabstractdialog_p.h
@@ -17,6 +17,7 @@
#include <memory>
+#include <QtCore/qloggingcategory.h>
#include <QtCore/qobject.h>
#include <QtGui/qpa/qplatformtheme.h>
#include <QtGui/qpa/qplatformdialoghelper.h>
@@ -29,20 +30,22 @@
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(lcDialogs)
+
class QWindow;
class QPlatformDialogHelper;
-class Q_QUICKDIALOGS2_PRIVATE_EXPORT QQuickAbstractDialog : public QObject, public QQmlParserStatus
+class Q_QUICKDIALOGS2_EXPORT QQuickAbstractDialog : public QObject, public QQmlParserStatus
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
Q_PROPERTY(QQmlListProperty<QObject> data READ data FINAL)
- Q_PROPERTY(QWindow *parentWindow READ parentWindow WRITE setParentWindow NOTIFY parentWindowChanged FINAL)
+ Q_PROPERTY(QWindow *parentWindow READ parentWindow WRITE setParentWindow NOTIFY parentWindowChanged RESET resetParentWindow FINAL)
Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL)
Q_PROPERTY(Qt::WindowFlags flags READ flags WRITE setFlags NOTIFY flagsChanged FINAL)
Q_PROPERTY(Qt::WindowModality modality READ modality WRITE setModality NOTIFY modalityChanged FINAL)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
- Q_PROPERTY(StandardCode result READ result WRITE setResult NOTIFY resultChanged FINAL)
+ Q_PROPERTY(int result READ result WRITE setResult NOTIFY resultChanged FINAL)
Q_CLASSINFO("DefaultProperty", "data")
Q_MOC_INCLUDE(<QtGui/qwindow.h>)
QML_ANONYMOUS
@@ -58,6 +61,7 @@ public:
QWindow *parentWindow() const;
void setParentWindow(QWindow *window);
+ void resetParentWindow();
QString title() const;
void setTitle(const QString &title);
@@ -74,15 +78,15 @@ public:
enum StandardCode { Rejected, Accepted };
Q_ENUM(StandardCode)
- StandardCode result() const;
- void setResult(StandardCode result);
+ int result() const;
+ void setResult(int result);
public Q_SLOTS:
void open();
void close();
virtual void accept();
virtual void reject();
- virtual void done(StandardCode result);
+ virtual void done(int result);
Q_SIGNALS:
void accepted();
@@ -105,14 +109,13 @@ protected:
virtual void onCreate(QPlatformDialogHelper *dialog);
virtual void onShow(QPlatformDialogHelper *dialog);
virtual void onHide(QPlatformDialogHelper *dialog);
+ virtual int dialogCode() const;
- QWindow *findParentWindow() const;
+ QQuickItem *findParentItem() const;
+ QWindow *windowForOpen() const;
+ void deferredOpen(QWindow *window);
- bool m_visibleRequested = false;
- bool m_visible = false;
- bool m_complete = false;
- bool m_firstShow = true;
- StandardCode m_result = Rejected;
+ int m_result = Rejected;
QWindow *m_parentWindow = nullptr;
QString m_title;
Qt::WindowFlags m_flags = Qt::Dialog;
@@ -120,10 +123,13 @@ protected:
QQuickDialogType m_type = QQuickDialogType::FileDialog;
QList<QObject *> m_data;
std::unique_ptr<QPlatformDialogHelper> m_handle;
+ bool m_visibleRequested = false;
+ bool m_visible = false;
+ bool m_complete = false;
+ bool m_parentWindowExplicitlySet = false;
+ bool m_firstShow = true;
};
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickAbstractDialog)
-
#endif // QQUICKABSTRACTDIALOG_P_H
diff --git a/src/quickdialogs/quickdialogs/qquickcolordialog.cpp b/src/quickdialogs/quickdialogs/qquickcolordialog.cpp
index 55fa073296..08b16f4ab0 100644
--- a/src/quickdialogs/quickdialogs/qquickcolordialog.cpp
+++ b/src/quickdialogs/quickdialogs/qquickcolordialog.cpp
@@ -102,6 +102,7 @@ void QQuickColorDialog::setSelectedColor(const QColor &color)
\value ColorDialog.ShowAlphaChannel Show a slider and additional input fields for the alpha value.
\value ColorDialog.NoButtons Don't display \uicontrol Open and \uicontrol Cancel buttons (useful
for "live dialogs").
+ \value ColorDialog.NoEyeDropperButton Don't display \uicontrol {Eye Dropper} button. This value was added in Qt 6.6.
\value ColorDialog.DontUseNativeDialog Forces the dialog to use a non-native quick implementation.
*/
diff --git a/src/quickdialogs/quickdialogs/qquickcolordialog_p.h b/src/quickdialogs/quickdialogs/qquickcolordialog_p.h
index 9b424d6b7e..c8ff98531a 100644
--- a/src/quickdialogs/quickdialogs/qquickcolordialog_p.h
+++ b/src/quickdialogs/quickdialogs/qquickcolordialog_p.h
@@ -21,7 +21,7 @@
QT_BEGIN_NAMESPACE
-class Q_QUICKDIALOGS2_PRIVATE_EXPORT QQuickColorDialog : public QQuickAbstractDialog
+class Q_QUICKDIALOGS2_EXPORT QQuickColorDialog : public QQuickAbstractDialog
{
Q_OBJECT
Q_PROPERTY(QColor selectedColor READ selectedColor WRITE setSelectedColor NOTIFY selectedColorChanged)
@@ -56,6 +56,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickColorDialog)
-
#endif // QQUICKCOLORDIALOG_P_H
diff --git a/src/quickdialogs/quickdialogs/qquickfiledialog.cpp b/src/quickdialogs/quickdialogs/qquickfiledialog.cpp
index 88b4047e40..5995f0c3f3 100644
--- a/src/quickdialogs/quickdialogs/qquickfiledialog.cpp
+++ b/src/quickdialogs/quickdialogs/qquickfiledialog.cpp
@@ -14,8 +14,7 @@ QT_BEGIN_NAMESPACE
using namespace Qt::StringLiterals;
-Q_DECLARE_LOGGING_CATEGORY(lcDialogs)
-Q_LOGGING_CATEGORY(lcFileDialog, "qt.quick.dialogs.filedialog")
+Q_STATIC_LOGGING_CATEGORY(lcFileDialog, "qt.quick.dialogs.filedialog")
/*!
\qmltype FileDialog
diff --git a/src/quickdialogs/quickdialogs/qquickfiledialog_p.h b/src/quickdialogs/quickdialogs/qquickfiledialog_p.h
index 7214c907f3..95b239f4fb 100644
--- a/src/quickdialogs/quickdialogs/qquickfiledialog_p.h
+++ b/src/quickdialogs/quickdialogs/qquickfiledialog_p.h
@@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE
class QQuickFileNameFilter;
-class Q_QUICKDIALOGS2_PRIVATE_EXPORT QQuickFileDialog : public QQuickAbstractDialog
+class Q_QUICKDIALOGS2_EXPORT QQuickFileDialog : public QQuickAbstractDialog
{
Q_OBJECT
Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode NOTIFY fileModeChanged FINAL)
@@ -127,6 +127,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFileDialog)
-
#endif // QQUICKFILEDIALOG_P_H
diff --git a/src/quickdialogs/quickdialogs/qquickfolderdialog.cpp b/src/quickdialogs/quickdialogs/qquickfolderdialog.cpp
index db8885cc88..089c55570d 100644
--- a/src/quickdialogs/quickdialogs/qquickfolderdialog.cpp
+++ b/src/quickdialogs/quickdialogs/qquickfolderdialog.cpp
@@ -8,8 +8,6 @@
QT_BEGIN_NAMESPACE
-Q_DECLARE_LOGGING_CATEGORY(lcDialogs)
-
/*!
\qmltype FolderDialog
\inherits Dialog
diff --git a/src/quickdialogs/quickdialogs/qquickfolderdialog_p.h b/src/quickdialogs/quickdialogs/qquickfolderdialog_p.h
index e1231ab3a5..b588b0cd3d 100644
--- a/src/quickdialogs/quickdialogs/qquickfolderdialog_p.h
+++ b/src/quickdialogs/quickdialogs/qquickfolderdialog_p.h
@@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE
class QQuickFileNameFilter;
-class Q_QUICKDIALOGS2_PRIVATE_EXPORT QQuickFolderDialog : public QQuickAbstractDialog
+class Q_QUICKDIALOGS2_EXPORT QQuickFolderDialog : public QQuickAbstractDialog
{
Q_OBJECT
Q_PROPERTY(QUrl currentFolder READ currentFolder WRITE setCurrentFolder NOTIFY currentFolderChanged FINAL)
@@ -75,6 +75,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFolderDialog)
-
#endif // QQUICKFOLDERDIALOG_P_H
diff --git a/src/quickdialogs/quickdialogs/qquickfontdialog_p.h b/src/quickdialogs/quickdialogs/qquickfontdialog_p.h
index f5df6d2a9f..ce3719b75d 100644
--- a/src/quickdialogs/quickdialogs/qquickfontdialog_p.h
+++ b/src/quickdialogs/quickdialogs/qquickfontdialog_p.h
@@ -21,7 +21,7 @@
QT_BEGIN_NAMESPACE
-class Q_QUICKDIALOGS2_PRIVATE_EXPORT QQuickFontDialog : public QQuickAbstractDialog
+class Q_QUICKDIALOGS2_EXPORT QQuickFontDialog : public QQuickAbstractDialog
{
Q_OBJECT
Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont NOTIFY selectedFontChanged)
@@ -62,6 +62,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFontDialog)
-
#endif // QQUICKFONTDIALOG_P_H
diff --git a/src/quickdialogs/quickdialogs/qquickmessagedialog.cpp b/src/quickdialogs/quickdialogs/qquickmessagedialog.cpp
index 075ccd54db..7e16cfb9dd 100644
--- a/src/quickdialogs/quickdialogs/qquickmessagedialog.cpp
+++ b/src/quickdialogs/quickdialogs/qquickmessagedialog.cpp
@@ -218,7 +218,9 @@ void QQuickMessageDialog::setButtons(QPlatformDialogHelper::StandardButtons butt
void QQuickMessageDialog::handleClick(QPlatformDialogHelper::StandardButton button,
QPlatformDialogHelper::ButtonRole role)
{
+ m_roleOfLastButtonPressed = role;
emit buttonClicked(button, role);
+ done(button);
}
void QQuickMessageDialog::onCreate(QPlatformDialogHelper *dialog)
@@ -240,6 +242,20 @@ void QQuickMessageDialog::onShow(QPlatformDialogHelper *dialog)
messageDialog->setOptions(m_options); // setOptions only assigns a member and isn't virtual
}
+int QQuickMessageDialog::dialogCode() const
+{
+ switch (m_roleOfLastButtonPressed) {
+ case QPlatformDialogHelper::AcceptRole:
+ case QPlatformDialogHelper::YesRole:
+ return Accepted;
+ case QPlatformDialogHelper::RejectRole:
+ case QPlatformDialogHelper::NoRole:
+ return Rejected;
+ default:
+ return QQuickAbstractDialog::dialogCode();
+ }
+}
+
QT_END_NAMESPACE
#include "moc_qquickmessagedialog_p.cpp"
diff --git a/src/quickdialogs/quickdialogs/qquickmessagedialog_p.h b/src/quickdialogs/quickdialogs/qquickmessagedialog_p.h
index 40a2b6da8d..ea0b2bbae2 100644
--- a/src/quickdialogs/quickdialogs/qquickmessagedialog_p.h
+++ b/src/quickdialogs/quickdialogs/qquickmessagedialog_p.h
@@ -19,7 +19,7 @@
QT_BEGIN_NAMESPACE
-class Q_QUICKDIALOGS2_PRIVATE_EXPORT QQuickMessageDialog : public QQuickAbstractDialog
+class Q_QUICKDIALOGS2_EXPORT QQuickMessageDialog : public QQuickAbstractDialog
{
Q_OBJECT
@@ -63,13 +63,13 @@ private Q_SLOTS:
protected:
void onCreate(QPlatformDialogHelper *dialog) override;
void onShow(QPlatformDialogHelper *dialog) override;
+ int dialogCode() const override;
private:
QSharedPointer<QMessageDialogOptions> m_options;
+ QPlatformDialogHelper::ButtonRole m_roleOfLastButtonPressed = QPlatformDialogHelper::NoRole;
};
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickMessageDialog)
-
#endif // QQUICKMESSAGEDIALOG_P_H
diff --git a/src/quickdialogs/quickdialogs/qtquickdialogs2global_p.h b/src/quickdialogs/quickdialogs/qtquickdialogs2global_p.h
index 85f9ce6dc4..68a540af12 100644
--- a/src/quickdialogs/quickdialogs/qtquickdialogs2global_p.h
+++ b/src/quickdialogs/quickdialogs/qtquickdialogs2global_p.h
@@ -17,6 +17,6 @@
#include <QtCore/qglobal.h>
#include <QtQml/private/qqmlglobal_p.h>
-#include <QtQuickDialogs2/private/qtquickdialogs2exports_p.h>
+#include <QtQuickDialogs2/qtquickdialogs2exports.h>
#endif // QTQUICKDIALOGS2GLOBAL_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/CMakeLists.txt b/src/quickdialogs/quickdialogsquickimpl/CMakeLists.txt
index c4ccceef39..5e219624bc 100644
--- a/src/quickdialogs/quickdialogsquickimpl/CMakeLists.txt
+++ b/src/quickdialogs/quickdialogsquickimpl/CMakeLists.txt
@@ -63,6 +63,7 @@ qt_internal_add_qml_module(QuickDialogs2QuickImpl
DEPENDENCIES
QtQuick/auto
QtQuick.Templates/auto
+ QtQuick.Layouts/auto
SOURCES
qquickabstractcolorpicker.cpp
qquickabstractcolorpicker_p.h
@@ -76,31 +77,11 @@ qt_internal_add_qml_module(QuickDialogs2QuickImpl
qquickcolorinputs_p.h
qquickdialogimplfactory.cpp
qquickdialogimplfactory_p.h
- qquickfiledialogdelegate.cpp
- qquickfiledialogdelegate_p.h
- qquickfiledialogimpl.cpp
- qquickfiledialogimpl_p.h
- qquickfiledialogimpl_p_p.h
- qquickfolderbreadcrumbbar.cpp
- qquickfolderbreadcrumbbar_p.h
- qquickfolderbreadcrumbbar_p_p.h
- qquickfolderdialogimpl.cpp
- qquickfolderdialogimpl_p.h
- qquickfolderdialogimpl_p_p.h
- qquickfontdialogimpl.cpp
- qquickfontdialogimpl_p.h
- qquickfontdialogimpl_p_p.h
qquickmessagedialogimpl.cpp
qquickmessagedialogimpl_p.h
qquickmessagedialogimpl_p_p.h
qquickplatformcolordialog.cpp
qquickplatformcolordialog_p.h
- qquickplatformfiledialog.cpp
- qquickplatformfiledialog_p.h
- qquickplatformfolderdialog.cpp
- qquickplatformfolderdialog_p.h
- qquickplatformfontdialog.cpp
- qquickplatformfontdialog_p.h
qquickplatformmessagedialog.cpp
qquickplatformmessagedialog_p.h
qquicksaturationlightnesspicker.cpp
@@ -120,18 +101,58 @@ qt_internal_add_qml_module(QuickDialogs2QuickImpl
Qt::CorePrivate
Qt::GuiPrivate
Qt::QmlPrivate
- Qt::QuickPrivate
- Qt::QuickTemplates2
- Qt::QuickTemplates2Private
Qt::QuickControls2ImplPrivate
Qt::QuickDialogs2Utils
Qt::QuickDialogs2UtilsPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2
+ Qt::QuickTemplates2Private
PUBLIC_LIBRARIES
Qt::Core
Qt::Gui
Qt::Quick
- GENERATE_CPP_EXPORTS
- GENERATE_PRIVATE_CPP_EXPORTS
+)
+
+add_dependencies(QuickDialogs2QuickImpl Qt::QuickControls2Basic)
+
+if(QT_FEATURE_quickcontrols2_fusion)
+ add_dependencies(QuickDialogs2QuickImpl QuickControls2Fusion)
+endif()
+
+if(QT_FEATURE_quickcontrols2_imagine)
+ add_dependencies(QuickDialogs2QuickImpl QuickControls2Imagine)
+endif()
+
+if(QT_FEATURE_quickcontrols2_material)
+ add_dependencies(QuickDialogs2QuickImpl QuickControls2Material)
+endif()
+
+if(QT_FEATURE_quickcontrols2_universal)
+ add_dependencies(QuickDialogs2QuickImpl QuickControls2Universal)
+endif()
+
+qt_internal_extend_target(QuickDialogs2QuickImpl CONDITION QT_FEATURE_quick_listview
+ SOURCES
+ qquickfiledialogdelegate.cpp
+ qquickfiledialogdelegate_p.h
+ qquickfiledialogimpl.cpp
+ qquickfiledialogimpl_p.h
+ qquickfiledialogimpl_p_p.h
+ qquickfolderbreadcrumbbar.cpp
+ qquickfolderbreadcrumbbar_p.h
+ qquickfolderbreadcrumbbar_p_p.h
+ qquickfolderdialogimpl.cpp
+ qquickfolderdialogimpl_p.h
+ qquickfolderdialogimpl_p_p.h
+ qquickfontdialogimpl.cpp
+ qquickfontdialogimpl_p.h
+ qquickfontdialogimpl_p_p.h
+ qquickplatformfiledialog.cpp
+ qquickplatformfiledialog_p.h
+ qquickplatformfolderdialog.cpp
+ qquickplatformfolderdialog_p.h
+ qquickplatformfontdialog.cpp
+ qquickplatformfontdialog_p.h
)
# Resources:
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/ColorDialog.qml
index 591ac46a84..142fecbf7a 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/ColorDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/ColorDialog.qml
@@ -64,6 +64,7 @@ ColorDialogImpl {
padding: 6
Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15
Layout.leftMargin: 12
Layout.alignment: Qt.AlignLeft
}
@@ -85,10 +86,10 @@ ColorDialogImpl {
SaturationLightnessPicker {
id: colorPicker
objectName: "colorPicker"
- implicitHeight: width
color: control.color
Layout.fillWidth: true
+ Layout.fillHeight: true
}
Slider {
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml
index a928a4b0cc..965f56bdc7 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialog.qml
@@ -31,6 +31,29 @@ FileDialogImpl {
standardButtons: T.Dialog.Open | T.Dialog.Cancel
+ Dialog {
+ id: overwriteConfirmationDialog
+ objectName: "confirmationDialog"
+ anchors.centerIn: parent
+ closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
+ dim: true
+ modal: true
+ title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName)
+
+ Label {
+ text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName)
+ }
+
+ footer: DialogButtonBox {
+ alignment: Qt.AlignHCenter
+ standardButtons: DialogButtonBox.Yes | DialogButtonBox.No
+ }
+
+ Overlay.modal: Rectangle {
+ color: Fusion.darkShade
+ }
+ }
+
/*
We use attached properties because we want to handle logic in C++, and:
- We can't assume the footer only contains a DialogButtonBox (which would allow us
@@ -45,6 +68,7 @@ FileDialogImpl {
FileDialogImpl.breadcrumbBar: breadcrumbBar
FileDialogImpl.fileNameLabel: fileNameLabel
FileDialogImpl.fileNameTextField: fileNameTextField
+ FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog
background: Rectangle {
implicitWidth: 600
@@ -124,7 +148,7 @@ FileDialogImpl {
fileDetailRowWidth: nameFiltersComboBox.width
KeyNavigation.backtab: breadcrumbBar
- KeyNavigation.tab: nameFiltersComboBox
+ KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox
}
}
}
@@ -143,7 +167,6 @@ FileDialogImpl {
TextField {
id: fileNameTextField
objectName: "fileNameTextField"
- text: control.fileName
visible: false
Layout.fillWidth: true
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialogDelegate.qml
index 475528d2ec..20e8421d3f 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialogDelegate.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Fusion/FileDialogDelegate.qml
@@ -34,7 +34,7 @@ DialogsQuickImpl.FileDialogDelegate {
required property int index
required property string fileName
required property url fileUrl
- required property int fileSize
+ required property double fileSize
required property date fileModified
required property bool fileIsDir
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml
index 641453bca5..655b55cf83 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml
@@ -57,6 +57,7 @@ ColorDialogImpl {
header: RowLayout {
Label {
+ objectName: "titleLabel"
text: control.title
elide: Label.ElideRight
font.bold: true
@@ -67,10 +68,12 @@ ColorDialogImpl {
bottomPadding: 16
Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15
}
Button {
id: eyeDropperButton
+ objectName: "eyeDropperButton"
icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png"
flat: true
topPadding: 16
@@ -86,10 +89,10 @@ ColorDialogImpl {
SaturationLightnessPicker {
id: colorPicker
objectName: "colorPicker"
- implicitHeight: width
color: control.color
Layout.fillWidth: true
+ Layout.fillHeight: true
}
Slider {
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml
index 664965e571..8568be710a 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml
@@ -39,12 +39,34 @@ FileDialogImpl {
standardButtons: T.Dialog.Open | T.Dialog.Cancel
+ Dialog {
+ id: overwriteConfirmationDialog
+ objectName: "confirmationDialog"
+ anchors.centerIn: parent
+ closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
+ dim: true
+ modal: true
+ spacing: 12
+ title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName)
+
+ Label {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName)
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ footer: DialogButtonBox {
+ standardButtons: DialogButtonBox.Yes | DialogButtonBox.No
+ }
+ }
+
FileDialogImpl.buttonBox: buttonBox
FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox
FileDialogImpl.fileDialogListView: fileDialogListView
FileDialogImpl.breadcrumbBar: breadcrumbBar
FileDialogImpl.fileNameLabel: fileNameLabel
FileDialogImpl.fileNameTextField: fileNameTextField
+ FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog
background: NinePatchImage {
source: Imagine.url + "dialog-background"
@@ -115,6 +137,9 @@ FileDialogImpl {
highlighted: ListView.isCurrentItem
dialog: control
fileDetailRowWidth: nameFiltersComboBox.width
+
+ KeyNavigation.backtab: breadcrumbBar
+ KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox
}
}
@@ -133,7 +158,6 @@ FileDialogImpl {
TextField {
id: fileNameTextField
objectName: "fileNameTextField"
- text: control.fileName
visible: false
Layout.fillWidth: true
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml
index 30094a7d9d..a4f627d48e 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml
@@ -39,7 +39,7 @@ DialogsQuickImpl.FileDialogDelegate {
required property int index
required property string fileName
required property url fileUrl
- required property int fileSize
+ required property double fileSize
required property date fileModified
required property bool fileIsDir
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml
index 313e8645b4..dd1f887dd9 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml
@@ -50,6 +50,7 @@ ColorDialogImpl {
header: RowLayout {
Label {
+ objectName: "titleLabel"
text: control.title
elide: Label.ElideRight
font.bold: true
@@ -60,10 +61,12 @@ ColorDialogImpl {
bottomPadding: 24
Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15
}
Button {
id: eyeDropperButton
+ objectName: "eyeDropperButton"
icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png"
flat: true
topPadding: 24
@@ -80,10 +83,10 @@ ColorDialogImpl {
SaturationLightnessPicker {
id: colorPicker
objectName: "colorPicker"
- implicitHeight: width
color: control.color
Layout.fillWidth: true
+ Layout.fillHeight: true
}
Slider {
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml
index cd2c513c2e..9700aeba79 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialog.qml
@@ -32,12 +32,32 @@ FileDialogImpl {
Material.elevation: 24
+ Dialog {
+ id: overwriteConfirmationDialog
+ objectName: "confirmationDialog"
+ anchors.centerIn: parent
+ closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
+ dim: true
+ modal: true
+ title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName)
+
+ Label {
+ text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName)
+ }
+
+ footer: DialogButtonBox {
+ alignment: Qt.AlignHCenter
+ standardButtons: DialogButtonBox.Yes | DialogButtonBox.No
+ }
+ }
+
FileDialogImpl.buttonBox: buttonBox
FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox
FileDialogImpl.fileDialogListView: fileDialogListView
FileDialogImpl.breadcrumbBar: breadcrumbBar
FileDialogImpl.fileNameLabel: fileNameLabel
FileDialogImpl.fileNameTextField: fileNameTextField
+ FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog
background: Rectangle {
implicitWidth: 600
@@ -97,6 +117,9 @@ FileDialogImpl {
highlighted: ListView.isCurrentItem
dialog: control
fileDetailRowWidth: nameFiltersComboBox.width
+
+ KeyNavigation.backtab: breadcrumbBar
+ KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox
}
}
@@ -116,7 +139,6 @@ FileDialogImpl {
TextField {
id: fileNameTextField
objectName: "fileNameTextField"
- text: control.fileName
visible: false
Layout.topMargin: 12
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialogDelegate.qml
index c96231345d..9ec992b7a6 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialogDelegate.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/FileDialogDelegate.qml
@@ -31,7 +31,7 @@ DialogsQuickImpl.FileDialogDelegate {
required property int index
required property string fileName
required property url fileUrl
- required property int fileSize
+ required property double fileSize
required property date fileModified
required property bool fileIsDir
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/MessageDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/MessageDialog.qml
index a678503d6c..e336185430 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/MessageDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/MessageDialog.qml
@@ -117,6 +117,8 @@ MessageDialogImpl {
Layout.bottomMargin: 20
background: Rectangle {
+ implicitWidth: 120
+ implicitHeight: control.Material.textFieldHeight
color: Qt.rgba(1,1,1,1)
radius: 3
border.color: Qt.darker(control.palette.light)
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/ColorDialog.qml
index d13b751652..384fa41e7e 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/ColorDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/ColorDialog.qml
@@ -47,6 +47,7 @@ ColorDialogImpl {
spacing: 12
Label {
+ objectName: "titleLabel"
text: control.title
elide: Label.ElideRight
// TODO: QPlatformTheme::TitleBarFont
@@ -63,10 +64,12 @@ ColorDialogImpl {
Layout.leftMargin: 18
Layout.fillWidth: true
Layout.preferredWidth: control.title.length > 0 ? implicitHeight : 0
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15
}
Button {
id: eyeDropperButton
+ objectName: "eyeDropperButton"
icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png"
flat: true
topPadding: 24
@@ -83,10 +86,10 @@ ColorDialogImpl {
SaturationLightnessPicker {
id: colorPicker
objectName: "colorPicker"
- implicitHeight: width
color: control.color
Layout.fillWidth: true
+ Layout.fillHeight: true
}
Slider {
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml
index c029b06293..0d2db8b426 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialog.qml
@@ -30,12 +30,35 @@ FileDialogImpl {
standardButtons: T.Dialog.Open | T.Dialog.Cancel
+ Dialog {
+ id: overwriteConfirmationDialog
+ objectName: "confirmationDialog"
+ anchors.centerIn: parent
+ closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
+ dim: true
+ modal: true
+ title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName)
+
+ Label {
+ text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName)
+ }
+
+ footer: DialogButtonBox {
+ standardButtons: DialogButtonBox.Yes | DialogButtonBox.No
+ }
+
+ Overlay.modal: Rectangle {
+ color: overwriteConfirmationDialog.Universal.baseMediumColor
+ }
+ }
+
FileDialogImpl.buttonBox: buttonBox
FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox
FileDialogImpl.fileDialogListView: fileDialogListView
FileDialogImpl.breadcrumbBar: breadcrumbBar
FileDialogImpl.fileNameLabel: fileNameLabel
FileDialogImpl.fileNameTextField: fileNameTextField
+ FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog
background: Rectangle {
implicitWidth: 600
@@ -99,6 +122,9 @@ FileDialogImpl {
highlighted: ListView.isCurrentItem
dialog: control
fileDetailRowWidth: nameFiltersComboBox.width
+
+ KeyNavigation.backtab: breadcrumbBar
+ KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox
}
}
@@ -117,7 +143,6 @@ FileDialogImpl {
TextField {
id: fileNameTextField
objectName: "fileNameTextField"
- text: control.fileName
visible: false
Layout.fillWidth: true
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialogDelegate.qml
index 7650ec7a34..dd23f3d1e7 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialogDelegate.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/FileDialogDelegate.qml
@@ -32,7 +32,7 @@ DialogsQuickImpl.FileDialogDelegate {
required property int index
required property string fileName
required property url fileUrl
- required property int fileSize
+ required property double fileSize
required property date fileModified
required property bool fileIsDir
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/MessageDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/MessageDialog.qml
index ac63d281d1..37284503d2 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/MessageDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Universal/MessageDialog.qml
@@ -115,6 +115,8 @@ MessageDialogImpl {
Layout.bottomMargin: 20
background: Rectangle {
+ implicitWidth: 60 // TextControlThemeMinWidth - 4 (border)
+ implicitHeight: 28 // TextControlThemeMinHeight - 4 (border)
color: Qt.rgba(1,1,1,1)
radius: 3
border.color: Qt.darker(control.palette.light)
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml
index c8395bacd0..a4cbe498f0 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml
@@ -59,6 +59,7 @@ ColorDialogImpl {
font.bold: true
Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15
Layout.leftMargin: 12
Layout.alignment: Qt.AlignLeft
}
@@ -81,10 +82,10 @@ ColorDialogImpl {
SaturationLightnessPicker {
id: colorPicker
objectName: "colorPicker"
- implicitHeight: width
color: control.color
Layout.fillWidth: true
+ Layout.fillHeight: true
}
Slider {
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml
index 0f25dee35b..defb7dd4e2 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialog.qml
@@ -34,6 +34,25 @@ FileDialogImpl {
standardButtons: T.Dialog.Open | T.Dialog.Cancel
+ Dialog {
+ id: overwriteConfirmationDialog
+ objectName: "confirmationDialog"
+ anchors.centerIn: parent
+ closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
+ dim: true
+ modal: true
+ title: qsTr("“%1” already exists. Do you want to replace it?").arg(control.fileName)
+
+ Label {
+ text: qsTr("A file with the same name already exists in %1.\nReplacing it will overwrite its current contents.").arg(control.currentFolderName)
+ }
+
+ footer: DialogButtonBox {
+ alignment: Qt.AlignHCenter
+ standardButtons: DialogButtonBox.Yes | DialogButtonBox.No
+ }
+ }
+
/*
We use attached properties because we want to handle logic in C++, and:
- We can't assume the footer only contains a DialogButtonBox (which would allow us
@@ -48,6 +67,7 @@ FileDialogImpl {
FileDialogImpl.breadcrumbBar: breadcrumbBar
FileDialogImpl.fileNameLabel: fileNameLabel
FileDialogImpl.fileNameTextField: fileNameTextField
+ FileDialogImpl.overwriteConfirmationDialog: overwriteConfirmationDialog
background: Rectangle {
implicitWidth: 600
@@ -106,7 +126,7 @@ FileDialogImpl {
fileDetailRowWidth: nameFiltersComboBox.width
KeyNavigation.backtab: breadcrumbBar
- KeyNavigation.tab: nameFiltersComboBox
+ KeyNavigation.tab: fileNameTextField.visible ? fileNameTextField : nameFiltersComboBox
}
}
@@ -135,7 +155,6 @@ FileDialogImpl {
TextField {
id: fileNameTextField
objectName: "fileNameTextField"
- text: control.fileName
visible: false
Layout.fillWidth: true
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegate.qml
index 3abe35f43e..eea3ab93d6 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegate.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegate.qml
@@ -3,7 +3,7 @@
import QtQuick
import QtQuick.Controls
-import QtQuick.Controls.impl as ControlsImpl
+import QtQuick.Controls.impl
import QtQuick.Dialogs.quickimpl as DialogsQuickImpl
DialogsQuickImpl.FileDialogDelegate {
@@ -34,7 +34,7 @@ DialogsQuickImpl.FileDialogDelegate {
required property int index
required property string fileName
required property url fileUrl
- required property int fileSize
+ required property double fileSize
required property date fileModified
required property bool fileIsDir
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegateLabel.qml b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegateLabel.qml
index ac543e735d..a28d9dea08 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegateLabel.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/FileDialogDelegateLabel.qml
@@ -50,7 +50,12 @@ Item {
implicitHeight: childrenRect.height
Label {
- text: locale.formattedDataSize(root.delegate.fileSize)
+ text: {
+ const fileSize = root.delegate.fileSize;
+ return fileSize > Number.MAX_SAFE_INTEGER
+ ? ('>' + locale.formattedDataSize(Number.MAX_SAFE_INTEGER))
+ : locale.formattedDataSize(fileSize);
+ }
font.pixelSize: root.delegate.font.pixelSize * 0.75
color: root.fileDetailRowTextColor
}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/FolderDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/FolderDialogDelegate.qml
index 750a581a5d..87b826809a 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qml/FolderDialogDelegate.qml
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/FolderDialogDelegate.qml
@@ -3,7 +3,7 @@
import QtQuick
import QtQuick.Controls
-import QtQuick.Controls.impl as ControlsImpl
+import QtQuick.Controls.impl
import QtQuick.Dialogs.quickimpl as DialogsQuickImpl
DialogsQuickImpl.FileDialogDelegate {
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker.cpp b/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker.cpp
index 4606c00502..5b5b2abdae 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker.cpp
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker.cpp
@@ -13,11 +13,6 @@
QQuickAbstractColorPickerPrivate::QQuickAbstractColorPickerPrivate() = default;
-static inline QString handleName()
-{
- return QStringLiteral("handle");
-}
-
bool QQuickAbstractColorPickerPrivate::handlePress(const QPointF &point, ulong timestamp)
{
Q_Q(QQuickAbstractColorPicker);
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker_p.h
index b29e488b3a..204bfd77b5 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickabstractcolorpicker_p.h
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QQUICKABSTRACTCOLORPICKER_P_H
#define QQUICKABSTRACTCOLORPICKER_P_H
@@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE
class QQuickAbstractColorPickerPrivate;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickAbstractColorPicker : public QQuickControl
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickAbstractColorPicker : public QQuickControl
{
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl.cpp b/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl.cpp
index 9721bae736..6772f24faa 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl.cpp
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl.cpp
@@ -9,6 +9,7 @@
#include <QtQuickTemplates2/private/qquickslider_p.h>
#include <qpa/qplatformintegration.h>
+#include <qpa/qplatformservices.h>
#include <private/qguiapplication_p.h>
QT_BEGIN_NAMESPACE
@@ -91,7 +92,7 @@ QQuickColorDialogImplAttached *QQuickColorDialogImplPrivate::attachedOrWarn()
void QQuickColorDialogImplPrivate::eyeDropperEnter()
{
- Q_Q(const QQuickColorDialogImpl);
+ Q_Q(QQuickColorDialogImpl);
if (m_eyeDropperMode)
return;
@@ -104,6 +105,19 @@ void QQuickColorDialogImplPrivate::eyeDropperEnter()
m_eyeDropperWindow = window;
}
+ if (auto *platformServices = QGuiApplicationPrivate::platformIntegration()->services();
+ platformServices && platformServices->hasCapability(QPlatformServices::Capability::ColorPicking)) {
+ if (auto *colorPickerService = platformServices->colorPicker(m_eyeDropperWindow)) {
+ q->connect(colorPickerService, &QPlatformServiceColorPicker::colorPicked, q,
+ [q, colorPickerService](const QColor &color) {
+ colorPickerService->deleteLater();
+ q->setColor(color);
+ });
+ colorPickerService->pickColor();
+ return;
+ }
+ }
+
m_eyeDropperPreviousColor = q->color();
if (!bool(eyeDropperEventFilter))
@@ -423,9 +437,13 @@ void QQuickColorDialogImpl::setOptions(const QSharedPointer<QColorDialogOptions>
QQuickColorDialogImplAttached *attached = d->attachedOrWarn();
if (attached) {
- const bool screenGrabbingAllowed = QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ScreenWindowGrabbing);
+ const auto *integration = QGuiApplicationPrivate::platformIntegration();
+ const bool canSupportEyeDropper =
+ integration->hasCapability(QPlatformIntegration::ScreenWindowGrabbing)
+ || integration->services()->hasCapability(QPlatformServices::Capability::ColorPicking);
const bool offscreen = qgetenv("QT_QPA_PLATFORM").compare(QLatin1String("offscreen"), Qt::CaseInsensitive) == 0;
- attached->eyeDropperButton()->setVisible(screenGrabbingAllowed && !offscreen);
+ const bool noEyeDropperButton = (d->options && d->options->options() & QColorDialogOptions::NoEyeDropperButton);
+ attached->eyeDropperButton()->setVisible(!noEyeDropperButton && canSupportEyeDropper && !offscreen);
if (d->options) {
attached->buttonBox()->setVisible(
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p.h
index 110298b5f2..a714047c84 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p.h
@@ -30,7 +30,7 @@ class QQuickColorDialogImplAttached;
class QQuickColorDialogImplAttachedPrivate;
class QQuickColorDialogImplPrivate;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickColorDialogImpl : public QQuickDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickColorDialogImpl : public QQuickDialog
{
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
@@ -96,7 +96,7 @@ private:
Q_DECLARE_PRIVATE(QQuickColorDialogImpl)
};
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickColorDialogImplAttached : public QObject
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickColorDialogImplAttached : public QObject
{
Q_OBJECT
Q_PROPERTY(QQuickDialogButtonBox *buttonBox READ buttonBox WRITE setButtonBox NOTIFY buttonBoxChanged FINAL)
@@ -145,6 +145,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickColorDialogImpl)
-
#endif // QQUICKCOLORDIALOGIMPL_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p_p.h
index b7c4dc8e2c..503dff1a77 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickcolordialogimpl_p_p.h
@@ -24,6 +24,8 @@
#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
#include <QtQuickTemplates2/private/qquickslider_p.h>
+#include <QtCore/qpointer.h>
+
QT_BEGIN_NAMESPACE
class QQuickEyeDropperEventFilter : public QObject
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickcolorinputs_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickcolorinputs_p.h
index 4827627d6f..a4e428fba0 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickcolorinputs_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickcolorinputs_p.h
@@ -17,16 +17,17 @@
#include <QtGui/qcolor.h>
#include <QtQuick/private/qquickitem_p.h>
-#include <QtQuickTemplates2/private/qquickcombobox_p.h>
#include <QtQuickTemplates2/private/qquicktextfield_p.h>
#include "qtquickdialogs2quickimplglobal_p.h"
#include "qquickcolordialogutils_p.h"
+#include <QtCore/qpointer.h>
+
QT_BEGIN_NAMESPACE
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickColorInputs : public QQuickItem
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickColorInputs : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory.cpp b/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory.cpp
index 9a63fb0718..594b148528 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory.cpp
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory.cpp
@@ -5,9 +5,12 @@
#include <QtCore/qloggingcategory.h>
+#include <QtQuick/private/qtquickglobal_p.h>
+#if QT_CONFIG(quick_listview)
#include "qquickplatformfiledialog_p.h"
#include "qquickplatformfolderdialog_p.h"
#include "qquickplatformfontdialog_p.h"
+#endif
#include "qquickplatformcolordialog_p.h"
#include "qquickplatformmessagedialog_p.h"
@@ -29,6 +32,7 @@ std::unique_ptr<QPlatformDialogHelper> QQuickDialogImplFactory::createPlatformDi
dialogHelper.reset(new QQuickPlatformColorDialog(parent));
break;
}
+#if QT_CONFIG(quick_listview)
case QQuickDialogType::FileDialog: {
dialogHelper.reset(new QQuickPlatformFileDialog(parent));
break;
@@ -41,6 +45,7 @@ std::unique_ptr<QPlatformDialogHelper> QQuickDialogImplFactory::createPlatformDi
dialogHelper.reset(new QQuickPlatformFontDialog(parent));
break;
}
+#endif
case QQuickDialogType::MessageDialog: {
dialogHelper.reset(new QQuickPlatformMessageDialog(parent));
break;
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory_p.h
index 5072c9e1cb..337c4f175a 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickdialogimplfactory_p.h
@@ -25,7 +25,7 @@
QT_BEGIN_NAMESPACE
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickDialogImplFactory
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickDialogImplFactory
{
public:
static std::unique_ptr<QPlatformDialogHelper> createPlatformDialogHelper(QQuickDialogType type, QObject *parent);
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate.cpp b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate.cpp
index 71b1fccbc5..369176f844 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate.cpp
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate.cpp
@@ -11,6 +11,7 @@
#include <QtQuickTemplates2/private/qquickitemdelegate_p_p.h>
#include "qquickfiledialogimpl_p.h"
+#include "qquickfiledialogimpl_p_p.h"
#include "qquickfolderdialogimpl_p.h"
QT_BEGIN_NAMESPACE
@@ -67,6 +68,16 @@ void QQuickFileDialogDelegatePrivate::chooseFile()
Q_ASSERT(fileDialog);
// Otherwise it's a file, so select it and close the dialog.
fileDialog->setSelectedFile(file);
+
+ // Prioritize closing the dialog with QQuickDialogPrivate::handleClick() over QQuickDialog::accept()
+ const QQuickFileDialogImplAttached *attached = QQuickFileDialogImplPrivate::get(fileDialog)->attachedOrWarn();
+ if (Q_LIKELY(attached)) {
+ auto *openButton = attached->buttonBox()->standardButton(QPlatformDialogHelper::Open);
+ if (Q_LIKELY(openButton)) {
+ emit openButton->clicked();
+ return;
+ }
+ }
fileDialog->accept();
}
}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate_p.h
index 36804497d7..de84b91f50 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogdelegate_p.h
@@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE
class QQuickDialog;
class QQuickFileDialogDelegatePrivate;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFileDialogDelegate : public QQuickItemDelegate
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFileDialogDelegate : public QQuickItemDelegate
{
Q_OBJECT
Q_PROPERTY(QQuickDialog *dialog READ dialog WRITE setDialog NOTIFY dialogChanged)
@@ -55,6 +55,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFileDialogDelegate)
-
#endif // QQUICKFILEDIALOGDELEGATE_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl.cpp b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl.cpp
index 72f2ea25cf..687e899d18 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl.cpp
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl.cpp
@@ -137,12 +137,24 @@ void QQuickFileDialogImplPrivate::updateSelectedFile(const QString &oldFolderPat
qCDebug(lcUpdateSelectedFile).nospace() << "updateSelectedFile is setting selectedFile to " << newSelectedFileUrl
<< ", newSelectedFileIndex is " << newSelectedFileIndex;
q->setSelectedFile(newSelectedFileUrl);
+ updateFileNameTextEdit();
// If the index is -1, there are no files in the directory, and so fileDialogListView's
// currentIndex will already be -1.
if (newSelectedFileIndex != -1)
tryUpdateFileDialogListViewCurrentIndex(newSelectedFileIndex);
}
+void QQuickFileDialogImplPrivate::updateFileNameTextEdit()
+{
+ QQuickFileDialogImplAttached *attached = attachedOrWarn();
+ if (Q_UNLIKELY(!attached))
+ return;
+
+ const QFileInfo fileInfo(selectedFile.toLocalFile());
+ if (fileInfo.isFile())
+ attached->fileNameTextField()->setText(fileInfo.fileName());
+}
+
QDir::SortFlags QQuickFileDialogImplPrivate::fileListSortFlags()
{
QDir::SortFlags sortFlags = QDir::IgnoreCase;
@@ -238,14 +250,35 @@ void QQuickFileDialogImplPrivate::handleClick(QQuickAbstractButton *button)
// Don't call accept(), because selecting a folder != accepting the dialog.
} else {
// Otherwise it's a file, so select it and close the dialog.
- q->setSelectedFile(selectedFile);
- q->accept();
- QQuickDialogPrivate::handleClick(button);
- emit q->fileSelected(selectedFile);
+
+ lastButtonClicked = button;
+
+ // Unless it already exists...
+ const bool dontConfirmOverride = q->options()->testOption(QFileDialogOptions::DontConfirmOverwrite);
+ const bool isSaveMode = q->options()->fileMode() == QFileDialogOptions::AnyFile;
+ if (QQuickFileDialogImplAttached *attached = attachedOrWarn();
+ attached && fileInfo.exists() && isSaveMode && !dontConfirmOverride) {
+ QQuickDialog *confirmationDialog = attached->overwriteConfirmationDialog();
+ confirmationDialog->open();
+ static_cast<QQuickDialogButtonBox *>(confirmationDialog->footer())->standardButton(QPlatformDialogHelper::Yes)
+ ->forceActiveFocus(Qt::PopupFocusReason);
+ } else {
+ selectFile();
+ }
}
}
}
+void QQuickFileDialogImplPrivate::selectFile()
+{
+ Q_Q(QQuickFileDialogImpl);
+ Q_ASSERT(lastButtonClicked);
+ q->setSelectedFile(selectedFile);
+ q->accept();
+ QQuickDialogPrivate::handleClick(lastButtonClicked);
+ emit q->fileSelected(selectedFile);
+}
+
QQuickFileDialogImpl::QQuickFileDialogImpl(QObject *parent)
: QQuickDialog(*(new QQuickFileDialogImplPrivate), parent)
{
@@ -332,6 +365,7 @@ void QQuickFileDialogImpl::setInitialCurrentFolderAndSelectedFile(const QUrl &fi
qCDebug(lcSelectedFile) << "setting initial currentFolder to" << fileDirUrl << "and selectedFile to" << file;
setCurrentFolder(fileDirUrl, QQuickFileDialogImpl::SetReason::Internal);
setSelectedFile(file);
+ d->updateFileNameTextEdit();
d->setCurrentIndexToInitiallySelectedFile = true;
// If the currentFolder didn't change, the FolderListModel won't change and
@@ -426,8 +460,11 @@ void QQuickFileDialogImpl::setAcceptLabel(const QString &label)
return;
}
+ auto buttonType = (d->options && d->options->acceptMode() == QFileDialogOptions::AcceptSave)
+ ? QPlatformDialogHelper::Save
+ : QPlatformDialogHelper::Open;
acceptButton->setText(!label.isEmpty()
- ? label : QQuickDialogButtonBoxPrivate::buttonText(QPlatformDialogHelper::Open));
+ ? label : QQuickDialogButtonBoxPrivate::buttonText(buttonType));
}
void QQuickFileDialogImpl::setRejectLabel(const QString &label)
@@ -467,7 +504,15 @@ void QQuickFileDialogImpl::setFileName(const QString &fileName)
if (previous == fileName)
return;
- setSelectedFile(QUrl(currentFolder().path() + u'/' + fileName));
+ QUrl newSelectedFile;
+ newSelectedFile.setScheme(currentFolder().scheme());
+ newSelectedFile.setPath(currentFolder().path() + u'/' + fileName);
+ setSelectedFile(newSelectedFile);
+}
+
+QString QQuickFileDialogImpl::currentFolderName() const
+{
+ return QDir(currentFolder().toLocalFile()).dirName();
}
void QQuickFileDialogImpl::componentComplete()
@@ -561,6 +606,7 @@ void QQuickFileDialogImplAttachedPrivate::fileDialogListViewCurrentIndexChanged(
auto fileDialogImplPrivate = QQuickFileDialogImplPrivate::get(fileDialogImpl);
if (moveReason != QQuickItemViewPrivate::Other) {
fileDialogImpl->setSelectedFile(fileDialogDelegate->file());
+ fileDialogImplPrivate->updateFileNameTextEdit();
} else if (fileDialogImplPrivate->setCurrentIndexToInitiallySelectedFile) {
// When setting selectedFile before opening the FileDialog,
// we need to ensure that the currentIndex is correct, because the initial change
@@ -573,7 +619,17 @@ void QQuickFileDialogImplAttachedPrivate::fileDialogListViewCurrentIndexChanged(
}
}
-void QQuickFileDialogImplAttachedPrivate::fileNameChangedByUser()
+void QQuickFileDialogImplAttachedPrivate::fileNameEditedByUser()
+{
+ if (!buttonBox)
+ return;
+ auto openButton = buttonBox->standardButton(QPlatformDialogHelper::Open);
+ if (!openButton || !fileNameTextField)
+ return;
+ openButton->setEnabled(!fileNameTextField->text().isEmpty());
+}
+
+void QQuickFileDialogImplAttachedPrivate::fileNameEditingByUserFinished()
{
auto fileDialogImpl = qobject_cast<QQuickFileDialogImpl *>(parent);
if (!fileDialogImpl)
@@ -740,19 +796,50 @@ void QQuickFileDialogImplAttached::setFileNameTextField(QQuickTextField *fileNam
if (fileNameTextField == d->fileNameTextField)
return;
- if (d->fileNameTextField)
+ if (d->fileNameTextField) {
QObjectPrivate::disconnect(d->fileNameTextField, &QQuickTextField::editingFinished,
- d, &QQuickFileDialogImplAttachedPrivate::fileNameChangedByUser);
+ d, &QQuickFileDialogImplAttachedPrivate::fileNameEditingByUserFinished);
+ QObjectPrivate::disconnect(d->fileNameTextField, &QQuickTextField::textEdited,
+ d, &QQuickFileDialogImplAttachedPrivate::fileNameEditedByUser);
+ }
d->fileNameTextField = fileNameTextField;
- if (d->fileNameTextField)
+ if (d->fileNameTextField) {
QObjectPrivate::connect(d->fileNameTextField, &QQuickTextField::editingFinished,
- d, &QQuickFileDialogImplAttachedPrivate::fileNameChangedByUser);
-
+ d, &QQuickFileDialogImplAttachedPrivate::fileNameEditingByUserFinished);
+ QObjectPrivate::connect(d->fileNameTextField, &QQuickTextField::textEdited,
+ d, &QQuickFileDialogImplAttachedPrivate::fileNameEditedByUser);
+ }
emit fileNameTextFieldChanged();
}
+QQuickDialog *QQuickFileDialogImplAttached::overwriteConfirmationDialog() const
+{
+ Q_D(const QQuickFileDialogImplAttached);
+ return d->overwriteConfirmationDialog;
+}
+
+void QQuickFileDialogImplAttached::setOverwriteConfirmationDialog(QQuickDialog *dialog)
+{
+ Q_D(QQuickFileDialogImplAttached);
+ if (dialog == d->overwriteConfirmationDialog)
+ return;
+
+ QQuickFileDialogImpl *fileDialogImpl = qobject_cast<QQuickFileDialogImpl*>(parent());
+ if (d->overwriteConfirmationDialog && fileDialogImpl)
+ QObjectPrivate::disconnect(d->overwriteConfirmationDialog, &QQuickDialog::accepted,
+ QQuickFileDialogImplPrivate::get(fileDialogImpl), &QQuickFileDialogImplPrivate::selectFile);
+
+ d->overwriteConfirmationDialog = dialog;
+
+ if (d->overwriteConfirmationDialog && fileDialogImpl)
+ QObjectPrivate::connect(d->overwriteConfirmationDialog, &QQuickDialog::accepted,
+ QQuickFileDialogImplPrivate::get(fileDialogImpl), &QQuickFileDialogImplPrivate::selectFile, Qt::QueuedConnection);
+
+ emit overwriteConfirmationDialogChanged();
+}
+
QT_END_NAMESPACE
#include "moc_qquickfiledialogimpl_p.cpp"
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p.h
index 4c64c5e4dd..f024892a97 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p.h
@@ -33,7 +33,7 @@ class QQuickFileDialogImplPrivate;
class QQuickFileNameFilter;
class QQuickFolderBreadcrumbBar;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFileDialogImpl : public QQuickDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFileDialogImpl : public QQuickDialog
{
Q_OBJECT
Q_PROPERTY(QUrl currentFolder READ currentFolder WRITE setCurrentFolder NOTIFY currentFolderChanged FINAL)
@@ -41,6 +41,7 @@ class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFileDialogImpl : public QQui
Q_PROPERTY(QStringList nameFilters READ nameFilters NOTIFY nameFiltersChanged FINAL)
Q_PROPERTY(QQuickFileNameFilter *selectedNameFilter READ selectedNameFilter CONSTANT)
Q_PROPERTY(QString fileName READ fileName WRITE setFileName NOTIFY selectedFileChanged FINAL)
+ Q_PROPERTY(QString currentFolderName READ currentFolderName NOTIFY selectedFileChanged FINAL)
QML_NAMED_ELEMENT(FileDialogImpl)
QML_ATTACHED(QQuickFileDialogImplAttached)
QML_ADDED_IN_VERSION(6, 2)
@@ -80,6 +81,8 @@ public:
QString fileName() const;
void setFileName(const QString &fileName);
+ QString currentFolderName() const;
+
public Q_SLOTS:
void selectNameFilter(const QString &filter);
@@ -98,7 +101,7 @@ private:
Q_DECLARE_PRIVATE(QQuickFileDialogImpl)
};
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFileDialogImplAttached : public QObject
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFileDialogImplAttached : public QObject
{
Q_OBJECT
Q_PROPERTY(QQuickDialogButtonBox *buttonBox READ buttonBox WRITE setButtonBox NOTIFY buttonBoxChanged FINAL)
@@ -107,6 +110,7 @@ class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFileDialogImplAttached : pub
Q_PROPERTY(QQuickFolderBreadcrumbBar *breadcrumbBar READ breadcrumbBar WRITE setBreadcrumbBar NOTIFY breadcrumbBarChanged)
Q_PROPERTY(QQuickLabel *fileNameLabel READ fileNameLabel WRITE setFileNameLabel NOTIFY fileNameLabelChanged FINAL)
Q_PROPERTY(QQuickTextField *fileNameTextField READ fileNameTextField WRITE setFileNameTextField NOTIFY fileNameTextFieldChanged FINAL)
+ Q_PROPERTY(QQuickDialog *overwriteConfirmationDialog READ overwriteConfirmationDialog WRITE setOverwriteConfirmationDialog NOTIFY overwriteConfirmationDialogChanged FINAL)
Q_MOC_INCLUDE(<QtQuickTemplates2/private/qquickdialogbuttonbox_p.h>)
Q_MOC_INCLUDE(<QtQuickTemplates2/private/qquickcombobox_p.h>)
Q_MOC_INCLUDE(<QtQuickTemplates2/private/qquicktextfield_p.h>)
@@ -136,6 +140,9 @@ public:
QQuickTextField *fileNameTextField() const;
void setFileNameTextField(QQuickTextField *fileNameTextField);
+ QQuickDialog *overwriteConfirmationDialog() const;
+ void setOverwriteConfirmationDialog(QQuickDialog *dialog);
+
Q_SIGNALS:
void buttonBoxChanged();
void nameFiltersComboBoxChanged();
@@ -143,6 +150,7 @@ Q_SIGNALS:
void breadcrumbBarChanged();
void fileNameLabelChanged();
void fileNameTextFieldChanged();
+ void overwriteConfirmationDialogChanged();
private:
Q_DISABLE_COPY(QQuickFileDialogImplAttached)
@@ -151,6 +159,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFileDialogImpl)
-
#endif // QQUICKFILEDIALOGIMPL_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p_p.h
index 6f3cc55e86..66a77ab5e0 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfiledialogimpl_p_p.h
@@ -23,11 +23,13 @@
#include "qquickfiledialogimpl_p.h"
+#include <QtCore/qpointer.h>
+
QT_BEGIN_NAMESPACE
class QQuickFileNameFilter;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFileDialogImplPrivate : public QQuickDialogPrivate
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFileDialogImplPrivate : public QQuickDialogPrivate
{
public:
Q_DECLARE_PUBLIC(QQuickFileDialogImpl)
@@ -45,6 +47,7 @@ public:
void updateEnabled();
void updateSelectedFile(const QString &oldFolderPath);
+ void updateFileNameTextEdit();
static QDir::SortFlags fileListSortFlags();
static QFileInfoList fileList(const QDir &dir);
void setFileDialogListViewCurrentIndex(int newCurrentIndex);
@@ -53,10 +56,12 @@ public:
void handleAccept() override;
void handleClick(QQuickAbstractButton *button) override;
+ void selectFile();
QSharedPointer<QFileDialogOptions> options;
QUrl currentFolder;
QUrl selectedFile;
+ QQuickAbstractButton *lastButtonClicked = nullptr;
QStringList nameFilters;
mutable QQuickFileNameFilter *selectedNameFilter = nullptr;
QString acceptLabel;
@@ -70,7 +75,8 @@ class QQuickFileDialogImplAttachedPrivate : public QObjectPrivate
{
void nameFiltersComboBoxItemActivated(int index);
void fileDialogListViewCurrentIndexChanged();
- void fileNameChangedByUser();
+ void fileNameEditedByUser();
+ void fileNameEditingByUserFinished();
public:
Q_DECLARE_PUBLIC(QQuickFileDialogImplAttached)
@@ -81,6 +87,7 @@ public:
QPointer<QQuickFolderBreadcrumbBar> breadcrumbBar;
QPointer<QQuickLabel> fileNameLabel;
QPointer<QQuickTextField> fileNameTextField;
+ QPointer<QQuickDialog> overwriteConfirmationDialog;
};
QT_END_NAMESPACE
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p.h
index d210112b33..ce952c453b 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p.h
@@ -25,7 +25,7 @@ QT_BEGIN_NAMESPACE
class QQuickFolderBreadcrumbBarPrivate;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFolderBreadcrumbBar : public QQuickContainer
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFolderBreadcrumbBar : public QQuickContainer
{
Q_OBJECT
Q_PROPERTY(QQuickDialog *dialog READ dialog WRITE setDialog NOTIFY dialogChanged)
@@ -89,6 +89,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFolderBreadcrumbBar)
-
#endif // QQUICKFOLDERBREADCRUMBBAR_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p_p.h
index 42c794256d..4ad6c5280a 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfolderbreadcrumbbar_p_p.h
@@ -27,7 +27,7 @@ class QQuickTextField;
class QQuickFileDialogImpl;
class QQuickFolderDialogImpl;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFolderBreadcrumbBarPrivate : public QQuickContainerPrivate
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFolderBreadcrumbBarPrivate : public QQuickContainerPrivate
{
public:
Q_DECLARE_PUBLIC(QQuickFolderBreadcrumbBar)
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p.h
index 021ef5479a..fe92ac1525 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p.h
@@ -29,7 +29,7 @@ class QQuickFolderDialogImplAttachedPrivate;
class QQuickFolderDialogImplPrivate;
class QQuickFolderBreadcrumbBar;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFolderDialogImpl : public QQuickDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFolderDialogImpl : public QQuickDialog
{
Q_OBJECT
Q_PROPERTY(QUrl currentFolder READ currentFolder WRITE setCurrentFolder NOTIFY currentFolderChanged FINAL)
@@ -68,7 +68,7 @@ private:
Q_DECLARE_PRIVATE(QQuickFolderDialogImpl)
};
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFolderDialogImplAttached : public QObject
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFolderDialogImplAttached : public QObject
{
Q_OBJECT
Q_PROPERTY(QQuickListView *folderDialogListView READ folderDialogListView WRITE setFolderDialogListView NOTIFY folderDialogListViewChanged)
@@ -95,6 +95,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFolderDialogImpl)
-
#endif // QQUICKFOLDERDIALOGIMPL_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p_p.h
index b5abda79ad..329391a972 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfolderdialogimpl_p_p.h
@@ -20,6 +20,8 @@
#include "qquickfolderdialogimpl_p.h"
+#include <QtCore/qpointer.h>
+
QT_BEGIN_NAMESPACE
class QQuickFolderDialogImplPrivate : public QQuickDialogPrivate
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p.h
index 6c30eb2474..313caf327a 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p.h
@@ -32,7 +32,7 @@ class QQuickFontDialogImplAttached;
class QQuickFontDialogImplAttachedPrivate;
class QQuickFontDialogImplPrivate;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFontDialogImpl : public QQuickDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFontDialogImpl : public QQuickDialog
{
Q_OBJECT
Q_PROPERTY(QFont currentFont READ currentFont WRITE setCurrentFont NOTIFY currentFontChanged FINAL)
@@ -65,7 +65,7 @@ private:
Q_DECLARE_PRIVATE(QQuickFontDialogImpl)
};
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickFontDialogImplAttached : public QObject
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickFontDialogImplAttached : public QObject
{
Q_OBJECT
Q_PROPERTY(QQuickListView *familyListView READ familyListView WRITE setFamilyListView
@@ -178,6 +178,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickFontDialogImpl)
-
#endif // QQUICKFONTDIALOGIMPL_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p_p.h
index cd2ceb49b4..e7bbe9f474 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickfontdialogimpl_p_p.h
@@ -21,6 +21,8 @@
#include "qquickfontdialogimpl_p.h"
+#include <QtCore/qpointer.h>
+
QT_BEGIN_NAMESPACE
class QQuickFontDialogImplPrivate : public QQuickDialogPrivate
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl.cpp b/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl.cpp
index d80011d127..578da61559 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl.cpp
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl.cpp
@@ -21,8 +21,6 @@ void QQuickMessageDialogImplPrivate::handleClick(QQuickAbstractButton *button)
emit q->buttonClicked(standardButton, role);
}
-
- QQuickDialogPrivate::handleClick(button);
}
QQuickMessageDialogImplAttached *QQuickMessageDialogImplPrivate::attachedOrWarn()
@@ -125,13 +123,9 @@ void QQuickMessageDialogImplAttached::setButtonBox(QQuickDialogButtonBox *button
QQuickMessageDialogImpl *messageDialogImpl =
qobject_cast<QQuickMessageDialogImpl *>(parent());
if (messageDialogImpl) {
- auto dialogPrivate = QQuickDialogPrivate::get(messageDialogImpl);
- QObjectPrivate::disconnect(d->buttonBox, &QQuickDialogButtonBox::accepted,
- dialogPrivate, &QQuickDialogPrivate::handleAccept);
- QObjectPrivate::disconnect(d->buttonBox, &QQuickDialogButtonBox::rejected,
- dialogPrivate, &QQuickDialogPrivate::handleReject);
+ auto dialogPrivate = QQuickMessageDialogImplPrivate::get(messageDialogImpl);
QObjectPrivate::disconnect(d->buttonBox, &QQuickDialogButtonBox::clicked, dialogPrivate,
- &QQuickDialogPrivate::handleClick);
+ &QQuickMessageDialogImplPrivate::handleClick);
}
}
@@ -141,13 +135,9 @@ void QQuickMessageDialogImplAttached::setButtonBox(QQuickDialogButtonBox *button
QQuickMessageDialogImpl *messageDialogImpl =
qobject_cast<QQuickMessageDialogImpl *>(parent());
if (messageDialogImpl) {
- auto dialogPrivate = QQuickDialogPrivate::get(messageDialogImpl);
- QObjectPrivate::connect(d->buttonBox, &QQuickDialogButtonBox::accepted, dialogPrivate,
- &QQuickDialogPrivate::handleAccept);
- QObjectPrivate::connect(d->buttonBox, &QQuickDialogButtonBox::rejected, dialogPrivate,
- &QQuickDialogPrivate::handleReject);
+ auto dialogPrivate = QQuickMessageDialogImplPrivate::get(messageDialogImpl);
QObjectPrivate::connect(d->buttonBox, &QQuickDialogButtonBox::clicked, dialogPrivate,
- &QQuickDialogPrivate::handleClick);
+ &QQuickMessageDialogImplPrivate::handleClick);
}
}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p.h
index c7871b8d11..317b0e4eda 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p.h
@@ -29,7 +29,7 @@ class QQuickMessageDialogImplAttached;
class QQuickMessageDialogImplAttachedPrivate;
class QQuickMessageDialogImplPrivate;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickMessageDialogImpl : public QQuickDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickMessageDialogImpl : public QQuickDialog
{
Q_OBJECT
Q_PROPERTY(QString text READ text NOTIFY optionsChanged)
@@ -66,7 +66,7 @@ private:
Q_DECLARE_PRIVATE(QQuickMessageDialogImpl)
};
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickMessageDialogImplAttached : public QObject
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickMessageDialogImplAttached : public QObject
{
Q_OBJECT
Q_PROPERTY(QQuickDialogButtonBox *buttonBox READ buttonBox WRITE setButtonBox NOTIFY
@@ -93,6 +93,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickMessageDialogImpl)
-
#endif // QQUICKMESSAGEDIALOGIMPL_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p_p.h
index dca7ad218c..c2a66eae28 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickmessagedialogimpl_p_p.h
@@ -19,6 +19,8 @@
#include "qquickmessagedialogimpl_p.h"
+#include <QtCore/qpointer.h>
+
QT_BEGIN_NAMESPACE
class QQuickMessageDialogImplPrivate : public QQuickDialogPrivate
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickplatformcolordialog_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickplatformcolordialog_p.h
index fa4aef9be2..f6fbf83226 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickplatformcolordialog_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickplatformcolordialog_p.h
@@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE
class QQuickColorDialogImpl;
class QWindow;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickPlatformColorDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickPlatformColorDialog
: public QPlatformColorDialogHelper
{
Q_OBJECT
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickplatformfiledialog_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickplatformfiledialog_p.h
index 0e0dedf71a..614ec6441a 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickplatformfiledialog_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickplatformfiledialog_p.h
@@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE
class QQuickFileDialogImpl;
class QWindow;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickPlatformFileDialog : public QPlatformFileDialogHelper
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickPlatformFileDialog : public QPlatformFileDialogHelper
{
Q_OBJECT
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickplatformfolderdialog_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickplatformfolderdialog_p.h
index 73e2b2899b..6dc7f31945 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickplatformfolderdialog_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickplatformfolderdialog_p.h
@@ -25,7 +25,7 @@ QT_BEGIN_NAMESPACE
class QQuickFileDialogImpl;
class QWindow;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickPlatformFolderDialog : public QPlatformFileDialogHelper
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickPlatformFolderDialog : public QPlatformFileDialogHelper
{
Q_OBJECT
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickplatformfontdialog_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickplatformfontdialog_p.h
index ec7ecc7bfe..31f3639218 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickplatformfontdialog_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickplatformfontdialog_p.h
@@ -24,7 +24,7 @@ QT_BEGIN_NAMESPACE
class QQuickFontDialogImpl;
class QWindow;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickPlatformFontDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickPlatformFontDialog
: public QPlatformFontDialogHelper
{
Q_OBJECT
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquickplatformmessagedialog_p.h b/src/quickdialogs/quickdialogsquickimpl/qquickplatformmessagedialog_p.h
index 86e44dd85d..77f6fe2b26 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquickplatformmessagedialog_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquickplatformmessagedialog_p.h
@@ -22,7 +22,7 @@
QT_BEGIN_NAMESPACE
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickPlatformMessageDialog
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickPlatformMessageDialog
: public QPlatformMessageDialogHelper
{
Q_OBJECT
diff --git a/src/quickdialogs/quickdialogsquickimpl/qquicksaturationlightnesspicker_p.h b/src/quickdialogs/quickdialogsquickimpl/qquicksaturationlightnesspicker_p.h
index 1263e9173f..d08cbaf934 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qquicksaturationlightnesspicker_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qquicksaturationlightnesspicker_p.h
@@ -22,7 +22,7 @@ QT_BEGIN_NAMESPACE
class QQuickSaturationLightnessPickerPrivate;
-class Q_QUICKDIALOGS2QUICKIMPL_PRIVATE_EXPORT QQuickSaturationLightnessPicker
+class Q_QUICKDIALOGS2QUICKIMPL_EXPORT QQuickSaturationLightnessPicker
: public QQuickAbstractColorPicker
{
Q_OBJECT
@@ -41,6 +41,4 @@ private:
QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickSaturationLightnessPicker)
-
#endif // QQUICKSATURATIONLIGHTNESSPICKER_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/qtquickdialogs2quickimplglobal_p.h b/src/quickdialogs/quickdialogsquickimpl/qtquickdialogs2quickimplglobal_p.h
index ec593f048d..53b3bbf510 100644
--- a/src/quickdialogs/quickdialogsquickimpl/qtquickdialogs2quickimplglobal_p.h
+++ b/src/quickdialogs/quickdialogsquickimpl/qtquickdialogs2quickimplglobal_p.h
@@ -17,6 +17,6 @@
#include <QtCore/qglobal.h>
#include <QtQml/private/qqmlglobal_p.h>
-#include <QtQuickDialogs2QuickImpl/private/qtquickdialogs2quickimplexports_p.h>
+#include <QtQuickDialogs2QuickImpl/qtquickdialogs2quickimplexports.h>
#endif // QTQUICKDIALOGS2QUICKIMPLGLOBAL_P_H
diff --git a/src/quickdialogs/quickdialogsquickimpl/shaders/SaturationLightness.frag b/src/quickdialogs/quickdialogsquickimpl/shaders/SaturationLightness.frag
index eb69d83ca6..ad2b23faa1 100644
--- a/src/quickdialogs/quickdialogsquickimpl/shaders/SaturationLightness.frag
+++ b/src/quickdialogs/quickdialogsquickimpl/shaders/SaturationLightness.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
diff --git a/src/quickdialogs/quickdialogsutils/CMakeLists.txt b/src/quickdialogs/quickdialogsutils/CMakeLists.txt
index 32c175241b..7254a98e44 100644
--- a/src/quickdialogs/quickdialogsutils/CMakeLists.txt
+++ b/src/quickdialogs/quickdialogsutils/CMakeLists.txt
@@ -24,6 +24,4 @@ qt_internal_add_module(QuickDialogs2Utils
Qt::GuiPrivate
PUBLIC_LIBRARIES
Qt::Core
- GENERATE_CPP_EXPORTS
- GENERATE_PRIVATE_CPP_EXPORTS
-)
+ )
diff --git a/src/quickdialogs/quickdialogsutils/qquickfilenamefilter_p.h b/src/quickdialogs/quickdialogsutils/qquickfilenamefilter_p.h
index 20722f01fa..dd3ff80d36 100644
--- a/src/quickdialogs/quickdialogsutils/qquickfilenamefilter_p.h
+++ b/src/quickdialogs/quickdialogsutils/qquickfilenamefilter_p.h
@@ -24,7 +24,7 @@
QT_BEGIN_NAMESPACE
-class Q_QUICKDIALOGS2UTILS_PRIVATE_EXPORT QQuickFileNameFilter : public QObject
+class Q_QUICKDIALOGS2UTILS_EXPORT QQuickFileNameFilter : public QObject
{
Q_OBJECT
Q_PROPERTY(int index READ index WRITE setIndex NOTIFY indexChanged FINAL)
diff --git a/src/quickdialogs/quickdialogsutils/qtquickdialogs2utilsglobal_p.h b/src/quickdialogs/quickdialogsutils/qtquickdialogs2utilsglobal_p.h
index 6a59111d14..02a4edfdb1 100644
--- a/src/quickdialogs/quickdialogsutils/qtquickdialogs2utilsglobal_p.h
+++ b/src/quickdialogs/quickdialogsutils/qtquickdialogs2utilsglobal_p.h
@@ -16,6 +16,6 @@
//
#include <QtCore/qglobal.h>
-#include <QtQuickDialogs2Utils/private/qtquickdialogs2utilsexports_p.h>
+#include <QtQuickDialogs2Utils/qtquickdialogs2utilsexports.h>
#endif // QTQUICKDIALOGS2UTILSUTILSGLOBAL_P_H