QmlDesigner: Introduce WeakResizeController

WeakResizeController is a wrapper class for a weak pointer to the
ResizeControllerData.

Change-Id: I9052a26e6a5c29d2e794ceecc33075d3ae9970db
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
Marco Bubke
2013-04-08 16:43:18 +02:00
parent 6a3a54ea90
commit 0203f7499b
4 changed files with 74 additions and 13 deletions

View File

@@ -158,6 +158,11 @@ ResizeController::ResizeController(const ResizeController &other)
} }
ResizeController::ResizeController(const WeakResizeController &resizeController)
: m_data(resizeController.m_data.toStrongRef())
{
}
ResizeController::~ResizeController() ResizeController::~ResizeController()
{ {
} }
@@ -264,11 +269,6 @@ FormEditorItem* ResizeController::formEditorItem() const
return m_data->formEditorItem.data(); return m_data->formEditorItem.data();
} }
QWeakPointer<ResizeControllerData> ResizeController::weakPointer() const
{
return m_data;
}
bool ResizeController::isTopLeftHandle(const ResizeHandleItem *handle) const bool ResizeController::isTopLeftHandle(const ResizeHandleItem *handle) const
{ {
return handle == m_data->topLeftItem; return handle == m_data->topLeftItem;
@@ -309,4 +309,41 @@ bool ResizeController::isBottomHandle(const ResizeHandleItem *handle) const
return handle == m_data->bottomItem; return handle == m_data->bottomItem;
} }
WeakResizeController ResizeController::toWeakResizeController() const
{
return WeakResizeController(*this);
}
WeakResizeController::WeakResizeController()
{
}
WeakResizeController::WeakResizeController(const WeakResizeController &resizeController)
: m_data(resizeController.m_data)
{
}
WeakResizeController::WeakResizeController(const ResizeController &resizeController)
: m_data(resizeController.m_data.toWeakRef())
{
}
WeakResizeController::~WeakResizeController()
{
}
WeakResizeController &WeakResizeController::operator =(const WeakResizeController &other)
{
if (m_data != other.m_data)
m_data = other.m_data;
return *this;
}
ResizeController WeakResizeController::toResizeController() const
{
return ResizeController(*this);
}
} }

View File

@@ -41,15 +41,17 @@ class LayerItem;
class ResizeHandleItem; class ResizeHandleItem;
class ResizeControllerData; class ResizeControllerData;
class WeakResizeController;
class ResizeController class ResizeController
{ {
friend class WeakResizeController;
public: public:
friend class ResizeHandleItem;
ResizeController(); ResizeController();
ResizeController(LayerItem *layerItem, FormEditorItem *formEditorItem); ResizeController(LayerItem *layerItem, FormEditorItem *formEditorItem);
ResizeController(const ResizeController &resizeController); ResizeController(const ResizeController &resizeController);
ResizeController(const WeakResizeController &resizeController);
~ResizeController(); ~ResizeController();
ResizeController& operator=(const ResizeController &other); ResizeController& operator=(const ResizeController &other);
@@ -73,13 +75,32 @@ public:
bool isRightHandle(const ResizeHandleItem *handle) const; bool isRightHandle(const ResizeHandleItem *handle) const;
bool isBottomHandle(const ResizeHandleItem *handle) const; bool isBottomHandle(const ResizeHandleItem *handle) const;
WeakResizeController toWeakResizeController() const;
private: // functions private: // functions
ResizeController(const QSharedPointer<ResizeControllerData> &data); ResizeController(const QSharedPointer<ResizeControllerData> &data);
QWeakPointer<ResizeControllerData> weakPointer() const;
private: // variables private: // variables
QSharedPointer<ResizeControllerData> m_data; QSharedPointer<ResizeControllerData> m_data;
}; };
class WeakResizeController
{
friend class ResizeController;
public:
WeakResizeController();
WeakResizeController(const WeakResizeController &resizeController);
WeakResizeController(const ResizeController &resizeController);
~WeakResizeController();
WeakResizeController& operator=(const WeakResizeController &other);
ResizeController toResizeController() const;
private: // variables
QWeakPointer<ResizeControllerData> m_data;
};
} }
#endif // RESIZECONTROLLER_H #endif // RESIZECONTROLLER_H

View File

@@ -36,7 +36,7 @@ namespace QmlDesigner {
ResizeHandleItem::ResizeHandleItem(QGraphicsItem *parent, const ResizeController &resizeController) ResizeHandleItem::ResizeHandleItem(QGraphicsItem *parent, const ResizeController &resizeController)
: QGraphicsPixmapItem(QPixmap(":/icon/handle/resize_handle.png"), parent), : QGraphicsPixmapItem(QPixmap(":/icon/handle/resize_handle.png"), parent),
m_resizeControllerData(resizeController.weakPointer()) m_weakResizeController(resizeController.toWeakResizeController())
{ {
setShapeMode(QGraphicsPixmapItem::BoundingRectShape); setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
setOffset(-pixmap().rect().center()); setOffset(-pixmap().rect().center());
@@ -44,6 +44,10 @@ ResizeHandleItem::ResizeHandleItem(QGraphicsItem *parent, const ResizeController
setFlag(QGraphicsItem::ItemIgnoresTransformations, true); setFlag(QGraphicsItem::ItemIgnoresTransformations, true);
} }
ResizeHandleItem::~ResizeHandleItem()
{
}
void ResizeHandleItem::setHandlePosition(const QPointF & globalPosition, const QPointF & itemSpacePosition) void ResizeHandleItem::setHandlePosition(const QPointF & globalPosition, const QPointF & itemSpacePosition)
{ {
m_itemSpacePosition = itemSpacePosition; m_itemSpacePosition = itemSpacePosition;
@@ -62,8 +66,7 @@ QPainterPath ResizeHandleItem::shape() const
ResizeController ResizeHandleItem::resizeController() const ResizeController ResizeHandleItem::resizeController() const
{ {
Q_ASSERT(!m_resizeControllerData.isNull()); return ResizeController(m_weakResizeController.toResizeController());
return ResizeController(m_resizeControllerData.toStrongRef());
} }
ResizeHandleItem* ResizeHandleItem::fromGraphicsItem(QGraphicsItem *item) ResizeHandleItem* ResizeHandleItem::fromGraphicsItem(QGraphicsItem *item)

View File

@@ -48,7 +48,7 @@ public:
ResizeHandleItem(QGraphicsItem *parent, const ResizeController &resizeController); ResizeHandleItem(QGraphicsItem *parent, const ResizeController &resizeController);
~ResizeHandleItem();
void setHandlePosition(const QPointF & globalPosition, const QPointF & itemSpacePosition); void setHandlePosition(const QPointF & globalPosition, const QPointF & itemSpacePosition);
int type() const; int type() const;
@@ -72,7 +72,7 @@ public:
QPointF itemSpacePosition() const; QPointF itemSpacePosition() const;
private: private:
QWeakPointer<ResizeControllerData> m_resizeControllerData; WeakResizeController m_weakResizeController;
QPointF m_itemSpacePosition; QPointF m_itemSpacePosition;
}; };