From 436fd7e7626916349ca83d6f7413d9c305f5983c Mon Sep 17 00:00:00 2001 From: Artur Duque de Souza Date: Wed, 27 Apr 2011 19:27:52 -0300 Subject: [PATCH] Separate the DeclarativeItemContainer so it can be used by others We are going to need the declarative container for the tooltips, so it makes sense to put this guy in it's own files. Signed-off-by: Artur Duque de Souza --- declarativeimports/core/CMakeLists.txt | 1 + .../core/declarativeitemcontainer.cpp | 66 +++++++++++++++++++ .../core/declarativeitemcontainer_p.h | 46 +++++++++++++ declarativeimports/core/dialog.cpp | 50 +------------- 4 files changed, 114 insertions(+), 49 deletions(-) create mode 100644 declarativeimports/core/declarativeitemcontainer.cpp create mode 100644 declarativeimports/core/declarativeitemcontainer_p.h 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)