diff --git a/declarativeimports/core/dialog.cpp b/declarativeimports/core/dialog.cpp index e6fbd15f9..64f430fa9 100644 --- a/declarativeimports/core/dialog.cpp +++ b/declarativeimports/core/dialog.cpp @@ -30,11 +30,62 @@ #include +DialogMargins::DialogMargins(Plasma::Dialog *dialog, QObject *parent) + : QObject(parent), + m_dialog(dialog) +{ + checkMargins(); +} + +void DialogMargins::checkMargins() +{ + int left, top, right, bottom; + m_dialog->getContentsMargins(&left, &top, &right, &bottom); + + if (left != m_left) { + m_left = left; + emit leftChanged(); + } + if (top != m_top) { + m_top = top; + emit topChanged(); + } + if (right != m_right) { + m_right = right; + emit rightChanged(); + } + if (bottom != m_bottom) { + m_bottom = bottom; + emit bottomChanged(); + } +} + +int DialogMargins::left() const +{ + return m_left; +} + +int DialogMargins::top() const +{ + return m_top; +} + +int DialogMargins::right() const +{ + return m_right; +} + +int DialogMargins::bottom() const +{ + return m_bottom; +} + DialogProxy::DialogProxy(QObject *parent) : QObject(parent), m_declarativeItemContainer(0) { m_dialog = new Plasma::Dialog(); + m_margins = new DialogMargins(m_dialog, this); m_dialog->installEventFilter(this); m_flags = m_dialog->windowFlags(); } @@ -177,6 +228,11 @@ void DialogProxy::setWindowFlags(const int flags) m_dialog->setWindowFlags((Qt::WindowFlags)flags); } +QObject *DialogProxy::margins() const +{ + return m_margins; +} + bool DialogProxy::eventFilter(QObject *watched, QEvent *event) { if (watched == m_dialog && event->type() == QEvent::Move) { @@ -187,6 +243,9 @@ bool DialogProxy::eventFilter(QObject *watched, QEvent *event) if (me->oldPos().y() != me->pos().y()) { emit yChanged(); } + if ((me->oldPos().x() != me->pos().x()) || (me->oldPos().y() != me->pos().y())) { + m_margins->checkMargins(); + } } else if (watched == m_dialog && event->type() == QEvent::Resize) { QResizeEvent *re = static_cast(event); if (re->oldSize().width() != re->size().width()) { diff --git a/declarativeimports/core/dialog.h b/declarativeimports/core/dialog.h index 8cfdc1664..41845b699 100644 --- a/declarativeimports/core/dialog.h +++ b/declarativeimports/core/dialog.h @@ -32,6 +32,41 @@ namespace Plasma class DeclarativeItemContainer; +class DialogMargins : public QObject +{ + Q_OBJECT + + Q_PROPERTY(int left READ left NOTIFY leftChanged) + Q_PROPERTY(int top READ top NOTIFY topChanged) + Q_PROPERTY(int right READ right NOTIFY rightChanged) + Q_PROPERTY(int bottom READ bottom NOTIFY bottomChanged) + +public: + DialogMargins(Plasma::Dialog *dialog, QObject *parent = 0); + + int left() const; + int top() const; + int right() const; + int bottom() const; + +Q_SIGNALS: + void leftChanged(); + void rightChanged(); + void topChanged(); + void bottomChanged(); + +protected: + void checkMargins(); + +private: + int m_left; + int m_top; + int m_right; + int m_bottom; + Plasma::Dialog *m_dialog; + friend class DialogProxy; +}; + class DialogProxy : public QObject { Q_OBJECT @@ -44,6 +79,7 @@ class DialogProxy : public QObject Q_PROPERTY(int width READ width NOTIFY widthChanged) Q_PROPERTY(int height READ width NOTIFY heightChanged) Q_PROPERTY(int windowFlags READ windowFlags WRITE setWindowFlags) + Q_PROPERTY(QObject *margins READ margins CONSTANT) public: enum WidgetAttribute { @@ -72,6 +108,8 @@ public: int windowFlags() const; void setWindowFlags(const int); + QObject *margins() const; + //FIXME: alignment should be Qt::AlignmentFlag Q_INVOKABLE QPoint popupPosition(QGraphicsObject *item, int alignment=Qt::AlignLeft) const; //FIXME:: Qt::WidgetAttribute should be already @@ -96,6 +134,7 @@ private: Qt::WindowFlags m_flags; DeclarativeItemContainer *m_declarativeItemContainer; QWeakPointer m_mainItem; + DialogMargins *m_margins; }; #endif