53 lines
1.6 KiB
C
53 lines
1.6 KiB
C
|
|
//pluginItemWrapper.h
|
||
|
|
#pragma once
|
||
|
|
|
||
|
|
#include "functionModelItem/graphicsFunctionModelItem.h"
|
||
|
|
#include "pluginCommon/iCanvasItem.h"
|
||
|
|
#include <QObject>
|
||
|
|
|
||
|
|
// 内部包装器,不暴露给外部
|
||
|
|
class PluginItemWrapper : public GraphicsFunctionModelItem
|
||
|
|
{
|
||
|
|
Q_OBJECT
|
||
|
|
|
||
|
|
public:
|
||
|
|
explicit PluginItemWrapper(ICanvasItem *pluginItem, QGraphicsItem *parent = nullptr);
|
||
|
|
virtual ~PluginItemWrapper();
|
||
|
|
|
||
|
|
// 克隆
|
||
|
|
virtual GraphicsFunctionModelItem* clone() const override;
|
||
|
|
|
||
|
|
// 绘图
|
||
|
|
virtual void paint(QPainter *painter,
|
||
|
|
const QStyleOptionGraphicsItem *option,
|
||
|
|
QWidget *widget = nullptr) override;
|
||
|
|
|
||
|
|
virtual QRectF boundingRect() const override;
|
||
|
|
virtual QPainterPath shape() const override;
|
||
|
|
|
||
|
|
// 几何操作
|
||
|
|
virtual void updateCoordinate() override;
|
||
|
|
virtual void resize(int handle, double dx, double dy, const QPointF &pos) override;
|
||
|
|
virtual void move(const QPointF &delta) override;
|
||
|
|
|
||
|
|
// 获取插件项
|
||
|
|
ICanvasItem* pluginItem() const;
|
||
|
|
|
||
|
|
protected:
|
||
|
|
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
|
||
|
|
|
||
|
|
private:
|
||
|
|
ICanvasItem *m_pluginItem = nullptr;
|
||
|
|
QRectF m_cachedBounds;
|
||
|
|
|
||
|
|
void updateCache();
|
||
|
|
void connectSignals();
|
||
|
|
QVariantMap saveState() const;
|
||
|
|
bool loadStateIntoPluginItem(ICanvasItem *pluginItem, const QVariantMap &state) const;
|
||
|
|
void copyPropertiesFrom(const PluginItemWrapper *source);
|
||
|
|
|
||
|
|
private slots:
|
||
|
|
void onPluginBoundsChanged(const QRectF &newBounds);
|
||
|
|
void onPluginPropertyChanged(const QString &key, const QVariant &value);
|
||
|
|
};
|