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 <asouza@kde.org>
This commit is contained in:
Artur Duque de Souza 2011-04-27 19:27:52 -03:00
parent 0aaa04c2dc
commit 436fd7e762
4 changed files with 114 additions and 49 deletions

View File

@ -1,6 +1,7 @@
project(corebindings)
set(corebindings_SRCS
declarativeitemcontainer.cpp
corebindingsplugin.cpp
dataengineconsumer.cpp
theme.cpp

View File

@ -0,0 +1,66 @@
/***************************************************************************
* Copyright 2011 Marco Martin <mart@kde.org> *
* *
* 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<QGraphicsItem *>(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);
}

View File

@ -0,0 +1,46 @@
/***************************************************************************
* Copyright 2011 Marco Martin <mart@kde.org> *
* *
* 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 <QDeclarativeItem>
#include <QGraphicsObject>
#include <QGraphicsWidget>
#include <QGraphicsSceneResizeEvent>
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<QDeclarativeItem> m_declarativeItem;
};
#endif

View File

@ -18,6 +18,7 @@
***************************************************************************/
#include "dialog.h"
#include "declarativeitemcontainer_p.h"
#include <QDeclarativeItem>
#include <QGraphicsObject>
@ -27,55 +28,6 @@
#include <Plasma/Corona>
#include <Plasma/Dialog>
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<QGraphicsItem *>(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<QDeclarativeItem> m_declarativeItem;
};
DialogProxy::DialogProxy(QObject *parent)
: QObject(parent)