aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2013-08-05 15:41:11 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-17 13:24:07 +0200
commit37492efee021ccc6e550ecb67a3240b76eb2219e (patch)
tree52a8f1bd3a7973e69728f69563948fa10263f03f /src/imports
parent7ebd0523e10fee949eec2a05b20e0897c3eeb1ba (diff)
Qt Quick Dialogs: can see and control geometry of QML implementations
QQuickAbstractDialog had x/y/width/height properties already but they didn't do anything. It's still not possible with the native dialogs because neither QPlatformDialogHelper nor QFileDialogOptions etc. have any geometric properties; but the application author can now see and control the geometry of any QML dialog implementation. Change-Id: Icdac9592c72e81175436436027f7fe3d75ff7f42 Reviewed-by: Liang Qi <liang.qi@digia.com>
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/dialogs/qquickabstractdialog.cpp53
-rw-r--r--src/imports/dialogs/qquickabstractdialog_p.h10
2 files changed, 50 insertions, 13 deletions
diff --git a/src/imports/dialogs/qquickabstractdialog.cpp b/src/imports/dialogs/qquickabstractdialog.cpp
index 560cbaf3e0..17f8d1aef2 100644
--- a/src/imports/dialogs/qquickabstractdialog.cpp
+++ b/src/imports/dialogs/qquickabstractdialog.cpp
@@ -63,6 +63,7 @@ QQuickAbstractDialog::QQuickAbstractDialog(QObject *parent)
, m_windowDecoration(0)
, m_hasNativeWindows(QGuiApplicationPrivate::platformIntegration()->
hasCapability(QPlatformIntegration::MultipleWindows))
+ , m_hasAspiredPosition(false)
{
}
@@ -124,8 +125,24 @@ void QQuickAbstractDialog::setVisible(bool v)
}
}
}
- if (m_dialogWindow)
+ if (m_dialogWindow) {
+ // "grow up" to the size and position expected to achieve
+ if (!m_sizeAspiration.isNull()) {
+ if (m_hasAspiredPosition)
+ m_dialogWindow->setGeometry(m_sizeAspiration);
+ else {
+ if (m_sizeAspiration.width() > 0)
+ m_dialogWindow->setWidth(m_sizeAspiration.width());
+ if (m_sizeAspiration.height() > 0)
+ m_dialogWindow->setHeight(m_sizeAspiration.height());
+ }
+ }
connect(m_dialogWindow, SIGNAL(visibleChanged(bool)), this, SLOT(visibleChanged(bool)));
+ connect(m_dialogWindow, SIGNAL(xChanged(int)), this, SLOT(setX(int)));
+ connect(m_dialogWindow, SIGNAL(yChanged(int)), this, SLOT(setY(int)));
+ connect(m_dialogWindow, SIGNAL(widthChanged(int)), this, SLOT(setWidth(int)));
+ connect(m_dialogWindow, SIGNAL(heightChanged(int)), this, SLOT(setHeight(int)));
+ }
}
if (m_windowDecoration) {
m_windowDecoration->setVisible(v);
@@ -230,66 +247,84 @@ int QQuickAbstractDialog::x() const
{
if (m_dialogWindow)
return m_dialogWindow->x();
- return -1;
+ return m_sizeAspiration.x();
}
int QQuickAbstractDialog::y() const
{
if (m_dialogWindow)
return m_dialogWindow->y();
- return -1;
+ return m_sizeAspiration.y();
}
int QQuickAbstractDialog::width() const
{
if (m_dialogWindow)
return m_dialogWindow->width();
- return -1;
+ return m_sizeAspiration.width();
}
int QQuickAbstractDialog::height() const
{
if (m_dialogWindow)
return m_dialogWindow->height();
- return -1;
+ return m_sizeAspiration.height();
}
void QQuickAbstractDialog::setX(int arg)
{
+ m_hasAspiredPosition = true;
+ m_sizeAspiration.setX(arg);
if (helper()) {
// TODO
} else if (m_dialogWindow) {
- m_dialogWindow->setX(arg);
+ if (sender() != m_dialogWindow)
+ m_dialogWindow->setX(arg);
+ } else if (m_contentItem) {
+ m_contentItem->setX(arg);
}
emit geometryChanged();
}
void QQuickAbstractDialog::setY(int arg)
{
+ m_hasAspiredPosition = true;
+ m_sizeAspiration.setY(arg);
if (helper()) {
// TODO
} else if (m_dialogWindow) {
- m_dialogWindow->setY(arg);
+ if (sender() != m_dialogWindow)
+ m_dialogWindow->setY(arg);
+ } else if (m_contentItem) {
+ m_contentItem->setY(arg);
}
emit geometryChanged();
}
void QQuickAbstractDialog::setWidth(int arg)
{
+ m_sizeAspiration.setWidth(arg);
if (helper()) {
// TODO
} else if (m_dialogWindow) {
- m_dialogWindow->setWidth(arg);
+ if (sender() != m_dialogWindow)
+ m_dialogWindow->setWidth(arg);
+ } else if (m_contentItem) {
+ m_contentItem->setWidth(arg);
}
emit geometryChanged();
}
void QQuickAbstractDialog::setHeight(int arg)
{
+ m_sizeAspiration.setHeight(arg);
if (helper()) {
// TODO
} else if (m_dialogWindow) {
- m_dialogWindow->setHeight(arg);
+ if (sender() != m_dialogWindow)
+ m_dialogWindow->setHeight(arg);
+ } else if (m_contentItem) {
+ m_contentItem->setHeight(arg);
}
emit geometryChanged();
}
diff --git a/src/imports/dialogs/qquickabstractdialog_p.h b/src/imports/dialogs/qquickabstractdialog_p.h
index 5e3d9b43f7..c18df33c6c 100644
--- a/src/imports/dialogs/qquickabstractdialog_p.h
+++ b/src/imports/dialogs/qquickabstractdialog_p.h
@@ -91,14 +91,14 @@ public:
virtual void setTitle(const QString &t) = 0;
void setQmlImplementation(QObject* obj);
bool isWindow() const { return m_hasNativeWindows; }
- void setX(int arg);
- void setY(int arg);
- void setWidth(int arg);
- void setHeight(int arg);
public Q_SLOTS:
void open() { setVisible(true); }
void close() { setVisible(false); }
+ void setX(int arg);
+ void setY(int arg);
+ void setWidth(int arg);
+ void setHeight(int arg);
Q_SIGNALS:
void visibilityChanged();
@@ -130,6 +130,8 @@ protected: // variables for pure-QML implementations only
QQuickItem *m_contentItem;
QQuickItem *m_windowDecoration;
bool m_hasNativeWindows;
+ QRect m_sizeAspiration;
+ bool m_hasAspiredPosition;
static QQmlComponent *m_decorationComponent;