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()
{
}
@@ -264,11 +269,6 @@ FormEditorItem* ResizeController::formEditorItem() const
return m_data->formEditorItem.data();
}
QWeakPointer<ResizeControllerData> ResizeController::weakPointer() const
{
return m_data;
}
bool ResizeController::isTopLeftHandle(const ResizeHandleItem *handle) const
{
return handle == m_data->topLeftItem;
@@ -309,4 +309,41 @@ bool ResizeController::isBottomHandle(const ResizeHandleItem *handle) const
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 ResizeControllerData;
class WeakResizeController;
class ResizeController
{
friend class WeakResizeController;
public:
friend class ResizeHandleItem;
ResizeController();
ResizeController(LayerItem *layerItem, FormEditorItem *formEditorItem);
ResizeController(const ResizeController &resizeController);
ResizeController(const WeakResizeController &resizeController);
~ResizeController();
ResizeController& operator=(const ResizeController &other);
@@ -73,13 +75,32 @@ public:
bool isRightHandle(const ResizeHandleItem *handle) const;
bool isBottomHandle(const ResizeHandleItem *handle) const;
WeakResizeController toWeakResizeController() const;
private: // functions
ResizeController(const QSharedPointer<ResizeControllerData> &data);
QWeakPointer<ResizeControllerData> weakPointer() const;
private: // variables
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

View File

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

View File

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