diff --git a/declarativeimports/core/CMakeLists.txt b/declarativeimports/core/CMakeLists.txt index 2485ee8bc..9ca40d806 100644 --- a/declarativeimports/core/CMakeLists.txt +++ b/declarativeimports/core/CMakeLists.txt @@ -1,6 +1,7 @@ project(corebindings) set(corebindings_SRCS + declarativeitemcontainer.cpp corebindingsplugin.cpp dataengineconsumer.cpp theme.cpp diff --git a/declarativeimports/core/declarativeitemcontainer.cpp b/declarativeimports/core/declarativeitemcontainer.cpp new file mode 100644 index 000000000..c71f13f4b --- /dev/null +++ b/declarativeimports/core/declarativeitemcontainer.cpp @@ -0,0 +1,66 @@ +/*************************************************************************** + * Copyright 2011 Marco Martin * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ + +#include "declarativeitemcontainer_p.h" + +DeclarativeItemContainer::DeclarativeItemContainer(QGraphicsItem *parent) + : QGraphicsWidget(parent) +{ +} + +DeclarativeItemContainer::~DeclarativeItemContainer() +{ +} + +void DeclarativeItemContainer::setDeclarativeItem(QDeclarativeItem *item, bool reparent) +{ + if (m_declarativeItem) { + m_declarativeItem.data()->removeSceneEventFilter(this); + } + m_declarativeItem = item; + if (reparent) { + static_cast(item)->setParentItem(this); + } + setMinimumWidth(item->implicitWidth()); + setMinimumHeight(item->implicitHeight()); + resize(item->width(), item->height()); + item->installSceneEventFilter(this); +} + +QDeclarativeItem *DeclarativeItemContainer::declarativeItem() const +{ + return m_declarativeItem.data(); +} + +void DeclarativeItemContainer::resizeEvent(QGraphicsSceneResizeEvent *event) +{ + if (m_declarativeItem) { + m_declarativeItem.data()->setProperty("width", event->newSize().width()); + m_declarativeItem.data()->setProperty("height", event->newSize().height()); + } +} + +bool DeclarativeItemContainer::sceneEventFilter(QGraphicsItem *watched, QEvent *event) +{ + if (event->type() == QEvent::GraphicsSceneResize) { + resize(watched->boundingRect().size()); + } + + return QGraphicsWidget::sceneEventFilter(watched, event); +} diff --git a/declarativeimports/core/declarativeitemcontainer_p.h b/declarativeimports/core/declarativeitemcontainer_p.h new file mode 100644 index 000000000..1cbef3d22 --- /dev/null +++ b/declarativeimports/core/declarativeitemcontainer_p.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright 2011 Marco Martin * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ + +#ifndef DECLARATIVEITEMCONTAINER_P +#define DECLARATIVEITEMCONTAINER_P + +#include +#include +#include +#include + + +class DeclarativeItemContainer : public QGraphicsWidget +{ +public: + DeclarativeItemContainer(QGraphicsItem *parent = 0); + ~DeclarativeItemContainer(); + + void setDeclarativeItem(QDeclarativeItem *item, bool reparent = true); + QDeclarativeItem *declarativeItem() const; + +protected: + void resizeEvent(QGraphicsSceneResizeEvent *event); + bool sceneEventFilter(QGraphicsItem *watched, QEvent *event); + +private: + QWeakPointer m_declarativeItem; +}; + +#endif diff --git a/declarativeimports/core/dialog.cpp b/declarativeimports/core/dialog.cpp index 4ce4690e8..ac900806d 100644 --- a/declarativeimports/core/dialog.cpp +++ b/declarativeimports/core/dialog.cpp @@ -18,6 +18,7 @@ ***************************************************************************/ #include "dialog.h" +#include "declarativeitemcontainer_p.h" #include #include @@ -27,55 +28,6 @@ #include #include -class DeclarativeItemContainer : public QGraphicsWidget -{ -public: - DeclarativeItemContainer(QGraphicsItem *parent = 0) - : QGraphicsWidget(parent) - {} - - ~DeclarativeItemContainer() - {} - - void setDeclarativeItem(QDeclarativeItem *item) - { - if (m_declarativeItem) { - m_declarativeItem.data()->removeSceneEventFilter(this); - } - m_declarativeItem = item; - static_cast(item)->setParentItem(this); - setMinimumWidth(item->implicitWidth()); - setMinimumHeight(item->implicitHeight()); - resize(item->width(), item->height()); - item->installSceneEventFilter(this); - } - - QDeclarativeItem *declarativeItem() const - { - return m_declarativeItem.data(); - } - -protected: - void resizeEvent(QGraphicsSceneResizeEvent *event) - { - if (m_declarativeItem) { - m_declarativeItem.data()->setProperty("width", event->newSize().width()); - m_declarativeItem.data()->setProperty("height", event->newSize().height()); - } - } - - bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) - { - if (event->type() == QEvent::GraphicsSceneResize) { - resize(watched->boundingRect().size()); - } - - return QGraphicsWidget::sceneEventFilter(watched, event); - } - -private: - QWeakPointer m_declarativeItem; -}; DialogProxy::DialogProxy(QObject *parent) : QObject(parent)