diff options
Diffstat (limited to 'src/quicktemplates2/qquickpopup.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 72 |
1 files changed, 67 insertions, 5 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index bdcfe6ca..b0281cdf 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -40,6 +40,7 @@ #include "qquickshortcutcontext_p_p.h" #include "qquickoverlay_p_p.h" #include "qquickcontrol_p_p.h" +#include "qquickdialog_p.h" #include <QtGui/private/qshortcutmap_p.h> #include <QtGui/private/qguiapplication_p.h> @@ -64,7 +65,7 @@ QT_BEGIN_NAMESPACE \qml import QtQuick.Window 2.2 - import QtQuick.Controls 2.0 + import QtQuick.Controls 2.1 ApplicationWindow { id: window @@ -252,6 +253,14 @@ void QQuickPopupPrivate::init() QObject::connect(popupItem, &QQuickControl::paddingChanged, q, &QQuickPopup::paddingChanged); } +static void closeOrReject(QQuickPopup *popup) +{ + if (QQuickDialog *dialog = qobject_cast<QQuickDialog*>(popup)) + dialog->reject(); + else + popup->close(); +} + bool QQuickPopupPrivate::tryClose(QQuickItem *item, QMouseEvent *event) { Q_Q(QQuickPopup); @@ -261,7 +270,7 @@ bool QQuickPopupPrivate::tryClose(QQuickItem *item, QMouseEvent *event) if (onOutside || onOutsideParent) { if (!popupItem->contains(item->mapToItem(popupItem, event->pos()))) { if (!onOutsideParent || !parentItem || !parentItem->contains(item->mapToItem(parentItem, event->pos()))) { - q->close(); + closeOrReject(q); return true; } } @@ -436,6 +445,8 @@ public: void resolveFont() override; + QQuickItem *getContentItem() override; + int backId; int escapeId; QQuickPopup *popup; @@ -467,6 +478,14 @@ void QQuickPopupItemPrivate::resolveFont() inheritFont(window->font()); } +QQuickItem *QQuickPopupItemPrivate::getContentItem() +{ + Q_Q(QQuickPopupItem); + if (!contentItem) + contentItem = new QQuickItem(q); + return contentItem; +} + QQuickPopupItem::QQuickPopupItem(QQuickPopup *popup) : QQuickControl(*(new QQuickPopupItemPrivate(popup)), nullptr) { @@ -476,7 +495,7 @@ QQuickPopupItem::QQuickPopupItem(QQuickPopup *popup) : setAcceptedMouseButtons(Qt::AllButtons); // TODO: switch to QStyleHints::useHoverEffects in Qt 5.8 - setAcceptHoverEvents(true); + setHoverEnabled(true); // setAcceptHoverEvents(QGuiApplication::styleHints()->useHoverEffects()); // connect(QGuiApplication::styleHints(), &QStyleHints::useHoverEffectsChanged, this, &QQuickItem::setAcceptHoverEvents); } @@ -521,7 +540,7 @@ bool QQuickPopupItem::event(QEvent *event) if (event->type() == QEvent::Shortcut) { QShortcutEvent *se = static_cast<QShortcutEvent *>(event); if (se->shortcutId() == d->escapeId || se->shortcutId() == d->backId) { - d->popup->close(); + closeOrReject(d->popup); return true; } } @@ -636,6 +655,13 @@ void QQuickPopupItem::paddingChange(const QMarginsF &newPadding, const QMarginsF d->popup->paddingChange(newPadding, oldPadding); } +void QQuickPopupItem::spacingChange(qreal newSpacing, qreal oldSpacing) +{ + Q_D(QQuickPopupItem); + QQuickControl::spacingChange(newSpacing, oldSpacing); + d->popup->spacingChange(newSpacing, oldSpacing); +} + QFont QQuickPopupItem::defaultFont() const { Q_D(const QQuickPopupItem); @@ -698,7 +724,7 @@ void QQuickPopupPositioner::setParentItem(QQuickItem *parent) m_popup->reposition(); } -void QQuickPopupPositioner::itemGeometryChanged(QQuickItem *, const QRectF &, const QRectF &) +void QQuickPopupPositioner::itemGeometryChanged(QQuickItem *, QQuickGeometryChange, const QRectF &) { if (m_parentItem && m_popup->popupItem->isVisible()) m_popup->reposition(); @@ -1265,6 +1291,35 @@ qreal QQuickPopup::availableHeight() const } /*! + \since QtQuick.Controls 2.1 + \qmlproperty real QtQuick.Controls::Popup::spacing + + This property holds the spacing. + + Spacing is useful for popups that have multiple or repetitive building + blocks. For example, some styles use spacing to determine the distance + between the header, content, and footer of \l Dialog. Spacing is not + enforced by Popup, so each style may interpret it differently, and some + may ignore it altogether. +*/ +qreal QQuickPopup::spacing() const +{ + Q_D(const QQuickPopup); + return d->popupItem->spacing(); +} + +void QQuickPopup::setSpacing(qreal spacing) +{ + Q_D(QQuickPopup); + d->popupItem->setSpacing(spacing); +} + +void QQuickPopup::resetSpacing() +{ + setSpacing(0); +} + +/*! \qmlproperty real QtQuick.Controls::Popup::margins This property holds the default margins around the popup. @@ -2352,6 +2407,13 @@ void QQuickPopup::paddingChange(const QMarginsF &newPadding, const QMarginsF &ol emit availableHeightChanged(); } +void QQuickPopup::spacingChange(qreal newSpacing, qreal oldSpacing) +{ + Q_UNUSED(newSpacing); + Q_UNUSED(oldSpacing); + emit spacingChanged(); +} + QFont QQuickPopup::defaultFont() const { return QQuickControlPrivate::themeFont(QPlatformTheme::SystemFont); |