DiagramDesigner/diagramCavas/include/util/baseSelector.h

92 lines
2.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
*\file baseSelector.h
*
*\brief selector是用来实现对图元进行具体操作的类例如创建、编辑、旋转、移动等通过对鼠标的行为动作进行具体的逻辑编写实现操作表达
*
*\author dsc
*/
#ifndef BASESELECTOR_H
#define BASESELECTOR_H
#include <QObject>
#include "designerScene.h"
enum SelectorType
{
ST_base = 0, //基本
ST_cerating, //创建
ST_moving, //移动
ST_editing, //顶点编辑
ST_scaling, //缩放
ST_rotation, //旋转
ST_connecting, //连接
ST_subMoving, //子对象移动
ST_linkMoving, //连接线移动
};
enum OperationMode
{
OM_none = 0,
OM_move, //移动
OM_create, //创建
OM_edit, //顶点编辑
OM_scale, //缩放
OM_rotate, //旋转
OM_connect, //连接
OM_subMove,//子对象移动
OM_linkMove, //连接线移动
};
class GraphicsBaseItem;
using ItemMap = QMap<QString,QMap<QString,GraphicsBaseItem*>>;
class BaseSelector : public QObject
{
Q_OBJECT
public:
explicit BaseSelector(FixedPortsModel* model,QObject *parent = 0);
virtual ~BaseSelector();
public:
virtual void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*, DesignerScene*);
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*);
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*);
virtual void dropEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*);
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event,DesignerScene*);
SelectorType getSelectorType() { return m_type; }
//void setOperationMode(OperationMode m) { m_opMode = m; }
OperationMode getOperationMode() { return ms_opMode; }
void setCursor(DesignerScene*, const QCursor&);
void setSceneName(const QString& str) {m_sceneName = str;}
QString sceneName() const {return m_sceneName;}
FixedPortsModel* getModel() {return _model;}
void updateConnectLineByTopology(QList<QGraphicsItem *>); //通过拓扑关系更新位置
signals:
void setWorkingSelector(SelectorType);
protected:
//静态变量用于不同类型selector间的成员共享
static OperationMode ms_opMode;
static QPointF ms_ptMouseDown;
static QPointF ms_ptMouseLast;
static double ms_dAngleMouseDownToItem; //鼠标按下时其位置和item中心点形成的夹角
static int ms_nDragHandle; //当前抓取的控制点
SelectorType m_type;
QString m_sceneName;
FixedPortsModel* _model;
private:
bool m_bHoverOnHandel; //鼠标是否悬停在handel
OperationMode m_opMode;
};
#endif