diff --git a/common/include/baseProperty.h b/common/include/baseProperty.h index 968a9b5..6045fd9 100644 --- a/common/include/baseProperty.h +++ b/common/include/baseProperty.h @@ -33,27 +33,43 @@ class ModelProperty:public AbstractProperty //模型基类 public: ModelProperty(QObject* parent); virtual ~ModelProperty(); - virtual void setType(int n) {nType = n;} + virtual void setType(int n) {nType = n;} //设置实际类型 virtual int type() const {return nType;} + virtual void setGraphicsType(int n) {nGraphicsType = n;} //设置显示类型 + virtual int graphicsType() const {return nGraphicsType;} virtual void setModelName(QString sName) {sModelName = sName;} virtual QString modelName() const {return sModelName;} virtual void setMetaModelName(QString sName) {sMetaName = sName;} virtual QString metaModelName() const {return sMetaName;} virtual void notifyUpdate(){emit updateData();} + + void setPrepareDelete(bool b) {_prepareDelete = b;} + bool prepareDelete() const {return _prepareDelete;} + void setDataChanged(bool b) {_dataChanged = b;} //数据变换标签 + bool dataChanged() const {return _dataChanged;} signals: void updateData(); //通知数据拥有者更新 protected: int nType; //设备类型 + int nGraphicsType; QString sModelName; //模型名 QString sMetaName; //元模型名 + + bool _dataChanged; //数据状态,为真则写入库 + bool _prepareDelete; //状态,为真准备删除 }; +class BaseProperty; class BaseModelProperty:public ModelProperty //图像基模属性 { Q_OBJECT public: BaseModelProperty(QObject* parent); virtual ~BaseModelProperty(); + + virtual void addProData(QString sPage,BaseProperty* pData) {_generatedData.insert(sPage,pData);} +private: + QMap _generatedData; //该数据生成过的工程模数据 }; class BaseProperty:public ModelProperty //图像工程模模属性类,存放电路元件属性 @@ -84,10 +100,6 @@ public: void setStation(const QString& s) {sStation = s;} QString station() const {return sStation;} - void setPrepareDelete(bool b) {_prepareDelete = b;} - bool prepareDelete() const {return _prepareDelete;} - void setDataChanged(bool b) {_dataChanged = b;} //数据变换标签 - bool dataChanged() const {return _dataChanged;} protected: QString sPath; QString sDescription; @@ -100,8 +112,6 @@ protected: QJsonObject jConnectedBus; QJsonObject jLabel; - bool _dataChanged; //数据状态,为真则写入库 - bool _prepareDelete; //状态,为真准备删除 }; typedef QMap VariableMap; //属性名,值 diff --git a/common/include/global.h b/common/include/global.h index 7150b88..55a1f11 100644 --- a/common/include/global.h +++ b/common/include/global.h @@ -133,6 +133,8 @@ struct modelType //模型类型 int id = 0; QString modelType; QString modelName; + int graphicEelement; //类型 + QByteArray icon; //图片 QString remark; }; @@ -490,6 +492,7 @@ struct DiagramInfo //组态图结构信息 QString sName; QString sTag; QVariant parentId; + QString sBasePageName; //基模组态图名称 }; struct DiagramContent { @@ -517,9 +520,22 @@ struct CtExtraInfo QString accuracyClass; //精度等级 QString secondaryLoadCapacity; //二次负载容量 }; + +//================================================== +struct baseComponentInfo //基模图元数据 +{ + int id = 0; + QUuid uuid; + QString name; + QString tag; + int typeId = 0; + QJsonObject context; + QString metaMmodel; + QString projectModel; +}; //================================================== -struct componentInfo +struct componentInfo //工程模图元数据 { int id = 0; QUuid uuid; @@ -540,13 +556,20 @@ struct componentInfo int op = 0; }; +struct componentTypeInfo //元件类型 +{ + int id = 0; + QString type; + QString name; + QJsonObject config; +}; + struct topologicInfo { int id = -1; QUuid uuid_from; QUuid uuid_to; - QUuid from_pin; - QUuid to_pin; + QJsonObject context; int flag; QString description; int op; diff --git a/common/source/baseProperty.cpp b/common/source/baseProperty.cpp index 5b74130..c265fd3 100644 --- a/common/source/baseProperty.cpp +++ b/common/source/baseProperty.cpp @@ -16,6 +16,8 @@ AbstractProperty::~AbstractProperty() ModelProperty::ModelProperty(QObject* parent) :AbstractProperty(parent) { + _dataChanged = false; + _prepareDelete = false; } ModelProperty::~ModelProperty() @@ -43,9 +45,6 @@ BaseProperty::BaseProperty(QObject* parent) nState = 1; nStatus = 1; - _dataChanged = false; - _prepareDelete = false; - sGrid=QString("1"); //暂时修改,数据库字段不为空 sZone=QString("1"); sStation=QString("1"); diff --git a/diagramCavas/CMakeLists.txt b/diagramCavas/CMakeLists.txt index 6b7a061..58e2e4b 100644 --- a/diagramCavas/CMakeLists.txt +++ b/diagramCavas/CMakeLists.txt @@ -18,6 +18,7 @@ set(DIAGRAMCAVAS_HEADER_FILES include/baseContentDlg.h include/ptExtraInfoDlg.h include/ctExtraInfoDlg.h + include/projectModelSetting.h include/diagramEditor/editPanel.h include/diagramEditor/editView.h include/diagramEditor/editScene.h @@ -80,6 +81,7 @@ set(DIAGRAMCAVAS_SOURCE_FILES source/baseContentDlg.cpp source/ptExtraInfoDlg.cpp source/ctExtraInfoDlg.cpp + source/projectModelSetting.cpp source/diagramEditor/editPanel.cpp source/diagramEditor/editView.cpp source/diagramEditor/editScene.cpp @@ -129,6 +131,7 @@ set(UI_FILES ui/ctExtraInfoDlg.ui ui/editorSettingDlg.ui ui/diagramEditorWizard.ui + ui/projectModelSetting.ui ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) diff --git a/diagramCavas/include/baseModelItem/electricBaseModelSvgItem.h b/diagramCavas/include/baseModelItem/electricBaseModelSvgItem.h index 2dd5b3e..79f4f68 100644 --- a/diagramCavas/include/baseModelItem/electricBaseModelSvgItem.h +++ b/diagramCavas/include/baseModelItem/electricBaseModelSvgItem.h @@ -8,16 +8,17 @@ class ElectricBaseModelSvgItem :public GraphicsBaseModelItem { Q_OBJECT public: - ElectricBaseModelSvgItem(const QRect &rect, bool genNewPort = true,QGraphicsItem *parent = 0); //genNewPort生成新接线点 + ElectricBaseModelSvgItem(const QRect &rect, QGraphicsItem *parent = 0); //genNewPort生成新接线点 virtual ~ElectricBaseModelSvgItem(); void updateCoordinate(); void move(const QPointF&); + void loadSvg(const QByteArray&); protected: virtual QPainterPath shape(); virtual void editShape(int, const QPointF&); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); - virtual void loadSvg(const QString&); + protected: QRectF m_lastBoudingRect; //记录上一时刻的boundingRect QSvgRenderer* m_pRender; diff --git a/diagramCavas/include/diagramCavas.h b/diagramCavas/include/diagramCavas.h index 75b6771..064e124 100644 --- a/diagramCavas/include/diagramCavas.h +++ b/diagramCavas/include/diagramCavas.h @@ -22,6 +22,7 @@ public: DiagramCavas(QWidget *parent = nullptr); ~DiagramCavas(); + DrawingPanel* getPanel(QString); public: void initial(); public slots: @@ -47,7 +48,7 @@ public slots: void onSignal_deleteDiagram(DiagramInfo); void onSignal_selectDiagram(DiagramInfo); - void onCreateTestBaseModelDiagram(); + void onCreateTestBaseModelDiagram(); //生成测试基模图 /******************************生成组态***********************************/ void onSignal_createEditPanel(QString); EditPanel* onSignal_addEditPanel(QString); diff --git a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h index 324a959..ca4ef0f 100644 --- a/diagramCavas/include/graphicsDataModel/fixedPortsModel.h +++ b/diagramCavas/include/graphicsDataModel/fixedPortsModel.h @@ -16,10 +16,12 @@ class BaseProperty; class BaseModelProperty; class DesignerScene; class HttpInterface; +class DiagramCavas; struct Connection; class PowerEntity; class ElectricConnectLineItem; +class ProjectModelSetting; class FixedPortsModel : public BaseModel, public Serializable { @@ -46,13 +48,15 @@ public: QWidget* getTopWidget(); QPointF getTerminalPos(const QString& sTerminalId); //获取拓扑接线点在当前diagram中的位置 ElectricConnectLineItem* getLineItemById(const QString& terminalId); + template void establishConnection(GraphicsBaseItem*,GraphicsBaseItem*,TypeLine*); //在两个item之间建立连接 + QPointF calculateBusPortPos(GraphicsBaseItem* pBus,GraphicsBaseItem* item); //计算母线上接线点位置 void showModelDlg(const QString&,QUuid,GraphicsProjectModelItem*); //点击时显示指定模型的dlg、指定item的数据(模型名,对象Uuid,触发事件的item) void initialPropertyDlg(); //初始化属性设置dlg,每个模型拥各自的dlg void generatePropertyDlg(const QString&); ConfigurationDiagram* getTopologyDiagram(); //返回当前组态图的拓扑实体 - void createTopoTerminalsByItem(GraphicsBaseItem*); //通过图形对象创建port接线点(新建) - void createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon); //通过componet数据创建port接线点(加载) + void createTopoTerminalsByItem(GraphicsBaseItem*,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过图形对象创建port接线点(新建) + void createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过componet数据创建port接线点(加载) bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接 void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用) @@ -61,7 +65,12 @@ public: QVector allBaseConnections(); QMap allBaseNodePos() const; + bool addBaseItem(QUuid uuid,GraphicsBaseModelItem*); BaseModelProperty* addBaseNodeData(QUuid id,int type,QString name,QString metaName); //添加图元基模数据 + + void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框 + void generateProjectModel(const QString&,QList); //由基模生成工程模 + void addTestData(); //生成测试基模 Q_SIGNALS: void activatePage(const QString&); //激活当前model所在page public: @@ -69,6 +78,7 @@ public: QString pageName() const {return _pageName;} void activateModel() {Q_EMIT activatePage(_pageName);} //发送激活信号(点击) void startHttpRequest(); //开始请求数据(运行时) + void setCavas(DiagramCavas* p) {_cavas = p;} //设置所属顶层容器 public Q_SLOTS: void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在 void onTimeOut(); @@ -80,6 +90,7 @@ private: QMap _baseItem; //基模对象 QString _pageName; + DiagramCavas* _cavas; DesignerScene* _scene; DrawingPanel* _widget; //顶层widget HttpInterface* _Interface; @@ -89,6 +100,7 @@ private: QMap _modelStateInfo; //模型结构信息 QMap _modelDataInfo; //模型数据信息 + ProjectModelSetting* m_proModelSettingDlg; public: static bool _dataInitialised; }; diff --git a/diagramCavas/include/graphicsItem/electricConnectLineItem.h b/diagramCavas/include/graphicsItem/electricConnectLineItem.h index 394e952..bffc230 100644 --- a/diagramCavas/include/graphicsItem/electricConnectLineItem.h +++ b/diagramCavas/include/graphicsItem/electricConnectLineItem.h @@ -19,7 +19,7 @@ public: void calculatePath(); void resetCurLine(){_curLine = QPoint();} - void setConnection(Connection con){m_connectState = con;} + void setConnection(Connection con){m_connectState = con;} //保留,用以获取当前图中的连接 Connection getConnection() const {return m_connectState;} protected: diff --git a/diagramCavas/include/graphicsItem/graphicsBaseItem.h b/diagramCavas/include/graphicsItem/graphicsBaseItem.h index 64fc9e9..3c0bad6 100644 --- a/diagramCavas/include/graphicsItem/graphicsBaseItem.h +++ b/diagramCavas/include/graphicsItem/graphicsBaseItem.h @@ -461,16 +461,21 @@ public: virtual bool itemChanged() const {return _itemChanged;} virtual void setItemType(GraphicsItemType type){m_Itemtype = type;} virtual GraphicsItemType getItemType() const {return m_Itemtype;} + virtual void setInnerType(int type){m_inerType = type;} + virtual int getInnerType() const {return m_inerType;} virtual void renderSelectBackground(QPainter*); virtual ItemPort* getPortById(QString) const; virtual ItemPort* getPortPtr(int) const; virtual ItemControlHandle* getHandlePtr(int) const; virtual QMap getPorts() {return m_mapPort;} + //virtual GraphicsBaseItem* + virtual void initialPortsByDatabase(); //从数据库初始化port信息 public slots: void onUpdateData(); //data发送的更新通知 protected: QUuid m_itemId; - GraphicsItemType m_Itemtype; + GraphicsItemType m_Itemtype; //显示类型 + int m_inerType; //实际类型 ModelProperty* _property; PowerEntity* _pEntity; //图元拓扑 bool _itemChanged; //图元变化标志,判断是否需要保存 @@ -483,6 +488,8 @@ class GraphicsBaseModelItem : public GraphicsBaseItem //基模item public: GraphicsBaseModelItem(QGraphicsItem *parent); virtual ~GraphicsBaseModelItem(); +protected: + virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange, const QVariant&); }; class GraphicsProjectModelItem : public GraphicsBaseItem //工程模item diff --git a/diagramCavas/include/projectModelSetting.h b/diagramCavas/include/projectModelSetting.h new file mode 100644 index 0000000..76e9205 --- /dev/null +++ b/diagramCavas/include/projectModelSetting.h @@ -0,0 +1,32 @@ +#ifndef PROJECTMODELSETTING_H +#define PROJECTMODELSETTING_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class projectModelSetting; } +QT_END_NAMESPACE + +class GraphicsBaseModelItem; + +class ProjectModelSetting : public QDialog +{ + Q_OBJECT +public: + ProjectModelSetting(QWidget *parent = nullptr); + ~ProjectModelSetting(); + + void initial(); + void showDlg(GraphicsBaseModelItem*); +protected: + void onOkClicked(); + void onCancelClicked(); + void onSaveAsClicked(); + + void onAddClicked(); //添加属性 + void onDecreaseClicked(); //减少属性 +private: + Ui::projectModelSetting *ui; +}; + +#endif diff --git a/diagramCavas/include/util/baseSelector.h b/diagramCavas/include/util/baseSelector.h index 6f284b3..3d6003a 100644 --- a/diagramCavas/include/util/baseSelector.h +++ b/diagramCavas/include/util/baseSelector.h @@ -51,14 +51,14 @@ public: 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*); + virtual void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode); + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode); + virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode); + virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode); + virtual void dropEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode); + virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event,DesignerScene*,DiagramMode); SelectorType getSelectorType() { return m_type; } //void setOperationMode(OperationMode m) { m_opMode = m; } diff --git a/diagramCavas/include/util/connectingSelector.h b/diagramCavas/include/util/connectingSelector.h index 2314f6a..81c205c 100644 --- a/diagramCavas/include/util/connectingSelector.h +++ b/diagramCavas/include/util/connectingSelector.h @@ -26,9 +26,9 @@ public: void setTargetHighLight(bool val); //设置目标高亮 void createConnectLline(GraphicsProjectModelItem* connecting,GraphicsProjectModelItem* touched,DesignerScene* scene); public: - void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); private: GraphicsProjectModelItem* m_pConnectingItem; GraphicsProjectModelItem* m_pTouchedItem; //连线时接触的对象 diff --git a/diagramCavas/include/util/creatingSelector.h b/diagramCavas/include/util/creatingSelector.h index f56a4ec..38567e7 100644 --- a/diagramCavas/include/util/creatingSelector.h +++ b/diagramCavas/include/util/creatingSelector.h @@ -31,9 +31,9 @@ public: virtual ~CreatingSelector(); public: - virtual void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + virtual void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); void setCreatingItem(modelStateInfo& info) { m_creatingItemInfo=info; } private: diff --git a/diagramCavas/include/util/editingSelector.h b/diagramCavas/include/util/editingSelector.h index 6c75a0f..7e3e7d1 100644 --- a/diagramCavas/include/util/editingSelector.h +++ b/diagramCavas/include/util/editingSelector.h @@ -23,9 +23,9 @@ public: virtual ~EditingSelector(); public: - void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); private: GraphicsProjectModelItem* m_pEditingItem; diff --git a/diagramCavas/include/util/linkMovingSelector.h b/diagramCavas/include/util/linkMovingSelector.h index f207e46..2ae2501 100644 --- a/diagramCavas/include/util/linkMovingSelector.h +++ b/diagramCavas/include/util/linkMovingSelector.h @@ -20,9 +20,9 @@ public: explicit LinkMovingSelector(FixedPortsModel* model,QObject *parent = 0); virtual ~LinkMovingSelector(); public: - void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); private: ElectricConnectLineItem* m_pMovingLine; }; diff --git a/diagramCavas/include/util/movingSelector.h b/diagramCavas/include/util/movingSelector.h index 2c0b274..d22878a 100644 --- a/diagramCavas/include/util/movingSelector.h +++ b/diagramCavas/include/util/movingSelector.h @@ -19,9 +19,9 @@ public: explicit MovingSelector(FixedPortsModel* model,QObject *parent = 0); virtual ~MovingSelector(); public: - void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); }; diff --git a/diagramCavas/include/util/rotationSelector.h b/diagramCavas/include/util/rotationSelector.h index 0d603ac..97bdabd 100644 --- a/diagramCavas/include/util/rotationSelector.h +++ b/diagramCavas/include/util/rotationSelector.h @@ -20,9 +20,9 @@ public: virtual ~RotationSelector(); public: - void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); }; #endif diff --git a/diagramCavas/include/util/scalingSelector.h b/diagramCavas/include/util/scalingSelector.h index 0682c97..654d206 100644 --- a/diagramCavas/include/util/scalingSelector.h +++ b/diagramCavas/include/util/scalingSelector.h @@ -19,9 +19,9 @@ public: virtual ~ScalingSelector(); public: - void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); private: QPointF m_scalBasePoint; diff --git a/diagramCavas/include/util/subMovingSelector.h b/diagramCavas/include/util/subMovingSelector.h index e4a3ad7..f87e179 100644 --- a/diagramCavas/include/util/subMovingSelector.h +++ b/diagramCavas/include/util/subMovingSelector.h @@ -18,9 +18,9 @@ public: explicit SubMovingSelector(FixedPortsModel* model,QObject *parent = 0); virtual ~SubMovingSelector(); public: - void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*); - void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*); + void mousePressEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseMoveEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*, DesignerScene*,DiagramMode sceneMode); private: GraphicsProjectModelItem* m_pParentItem; }; diff --git a/diagramCavas/source/baseModelItem/electricBaseModelSvgItem.cpp b/diagramCavas/source/baseModelItem/electricBaseModelSvgItem.cpp index 7f1ca8a..8f5e4ad 100644 --- a/diagramCavas/source/baseModelItem/electricBaseModelSvgItem.cpp +++ b/diagramCavas/source/baseModelItem/electricBaseModelSvgItem.cpp @@ -6,7 +6,7 @@ #include #include -ElectricBaseModelSvgItem::ElectricBaseModelSvgItem(const QRect &rect, bool autoGenPort,QGraphicsItem *parent) +ElectricBaseModelSvgItem::ElectricBaseModelSvgItem(const QRect &rect, QGraphicsItem *parent) : GraphicsBaseModelItem(parent),m_pRender(nullptr) { m_lastBoudingRect = rect; @@ -63,12 +63,44 @@ void ElectricBaseModelSvgItem::paint(QPainter* painter, const QStyleOptionGraphi if (option->state & QStyle::State_Selected) //是选中状态,绘制选中框 { renderSelectBackground(painter); + /*int nPenWidth = 1; + painter->setPen(QPen(QColor(135,206,235,180))); //蓝色的外框 + + painter->setBrush(QBrush(QColor(135,206,235,180))); + + double dx = m_boundingRect_selected.x(); + double dy = m_boundingRect_selected.y(); + double dWidth = m_boundingRect_selected.width(); + double dHeight = m_boundingRect_selected.height(); + + + //画弧线0度是3点钟方向 + if(dWidth > dHeight) + { + painter->drawRect(m_boundingRect_selected); + painter->drawChord(dx-dHeight*0.5,dy,dHeight,dHeight,90*16,180*16); + painter->drawChord(dx+dWidth-dHeight*0.5,dy,dHeight,dHeight,(-90)*16,180*16); + } + else if(dWidth < dHeight) + { + painter->drawRect(m_boundingRect_selected); + painter->drawChord(dx,dy-dWidth*0.5,dWidth,dWidth,0*16,180*16); + painter->drawChord(dx,dy+dHeight-dWidth*0.5,dWidth,dWidth,180*16,180*16); + //painter->drawChord(dx+dWidth-dHeight*0.5,dy,dHeight,dHeight,(-90)*16,180*16); + } + else + { + painter->drawEllipse(QPointF(dx+dWidth*0.5,dy+dHeight*0.5),dHeight*0.5,dHeight*0.5); + }*/ + painter->drawText(QPointF(0,0),"yes"); } + else + painter->drawText(QPointF(0,0),"no"); } -void ElectricBaseModelSvgItem::loadSvg(const QString& str) +void ElectricBaseModelSvgItem::loadSvg(const QByteArray& data) { - m_pRender = new QSvgRenderer(str); + m_pRender = new QSvgRenderer(data); } void ElectricBaseModelSvgItem::move(const QPointF& point) diff --git a/diagramCavas/source/designerScene.cpp b/diagramCavas/source/designerScene.cpp index 6455204..4b065c2 100644 --- a/diagramCavas/source/designerScene.cpp +++ b/diagramCavas/source/designerScene.cpp @@ -71,9 +71,10 @@ void DesignerScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->mousePressEvent(mouseEvent, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->mousePressEvent(mouseEvent, this,mode); update(); } else @@ -84,9 +85,10 @@ void DesignerScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseMoveEvent(mouseEvent, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseMoveEvent(mouseEvent, this,mode); update(); } else @@ -97,9 +99,10 @@ void DesignerScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseReleaseEvent(mouseEvent, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseReleaseEvent(mouseEvent, this,mode); update(); } else @@ -110,9 +113,10 @@ void DesignerScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mouseEvent) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseDoubleClickEvent(mouseEvent, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->mouseDoubleClickEvent(mouseEvent, this,mode); update(); } else @@ -133,9 +137,10 @@ void DesignerScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->contextMenuEvent(event, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->contextMenuEvent(event, this,mode); update(); } else @@ -146,9 +151,10 @@ void DesignerScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->dragEnterEvent(event, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->dragEnterEvent(event, this,mode); update(); } else @@ -159,9 +165,10 @@ void DesignerScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->dragMoveEvent(event, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->dragMoveEvent(event, this,mode); update(); } else @@ -172,9 +179,10 @@ void DesignerScene::dropEvent(QGraphicsSceneDragDropEvent *event) { if(m_pDrawingPanel) { - if(m_pDrawingPanel->getMode() == DM_run) + DiagramMode mode = m_pDrawingPanel->getMode(); + if(mode == DM_run) return; - m_pDrawingPanel->selectorManager()->getWorkingSelector()->dropEvent(event, this); + m_pDrawingPanel->selectorManager()->getWorkingSelector()->dropEvent(event, this,mode); update(); } else diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index 2523bbf..715e6ff 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -25,6 +25,13 @@ DiagramCavas::~DiagramCavas() } +DrawingPanel* DiagramCavas::getPanel(QString sPage) +{ + if(m_mapDrawPanel.contains(sPage)) + return m_mapDrawPanel[sPage].first; + return nullptr; +} + void DiagramCavas::initial() { //todo:读取数据并初始化 @@ -49,6 +56,7 @@ void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode) pPanel->show(); FixedPortsModel* pModel = pPanel->getModel(); + pModel->setCavas(this); connect(pModel,&FixedPortsModel::activatePage,this,&DiagramCavas::onSignal_activatePage); connect(pPanel,&DrawingPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete); @@ -336,6 +344,8 @@ void DiagramCavas::onCreateTestBaseModelDiagram() pEntity = TopologyManager::instance().createDiagram(id.toString(),"测试1"); onSignal_addDrawingPanel(pEntity,DM_baseModel); + DrawingPanel* pPanel = getPanel(pEntity->name()); + pPanel->getModel()->addTestData(); } } diff --git a/diagramCavas/source/drawingPanel.cpp b/diagramCavas/source/drawingPanel.cpp index 3e668be..43bb3d6 100644 --- a/diagramCavas/source/drawingPanel.cpp +++ b/diagramCavas/source/drawingPanel.cpp @@ -23,7 +23,7 @@ DrawingPanel::DrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode _pModel = new FixedPortsModel(pEntity); _pModel->setTopWidget(this); - if(mode == DM_edit) + if(mode == DM_edit || mode == DM_baseModel) m_pSelectorManager = new SelectorManager(_pModel,this); m_pGraphicsScene = new DesignerScene(_pModel,this); //设置场景大小.前两个参数为scene的坐标远点,设置到view的中心点后,无论view如何缩放,secne的坐标原点都不会动,方便后续的位置计算 diff --git a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp index 15df421..08443e8 100644 --- a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp +++ b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp @@ -5,6 +5,9 @@ #include "graphicsItem/electricSvgItemTriangle.h" #include "graphicsItem/electricConnectLineItem.h" #include "baseModelItem/electricBaseModelLineItem.h" +#include "baseModelItem/electricBaseModelSvgItem.h" +#include "baseModelItem/electricBaseModelSvgBus.h" +#include "baseModelItem/electricBaseModelLineItem.h" #include "graphicsItem/itemPort.h" #include "designerScene.h" #include "dataBase.h" @@ -15,9 +18,11 @@ #include "powerEntity.h" #include "topologyManager.h" #include "basePropertyManager.h" +#include "diagramCavas.h" #include #include #include "baseProperty.h" +#include "projectModelSetting.h" bool FixedPortsModel::_dataInitialised = false; @@ -26,7 +31,9 @@ FixedPortsModel::FixedPortsModel(PowerEntity* pEntity) ,_widget(nullptr) ,_Interface(nullptr) ,_pEntity(pEntity) + ,m_proModelSettingDlg(nullptr) { + _cavas = nullptr; loadNodeDataFromDataBase(); _Interface = new HttpInterface(this); _timer = new QTimer(this); @@ -208,7 +215,10 @@ void FixedPortsModel::loadNodeDataFromDataBase() QList lstTopo = DataBase::GetInstance()->getAllTopologics(); for(auto &info:lstTopo) { - TopologyManager::instance().createConnection(QString::number(info.id),info.from_pin.toString(),info.to_pin.toString(),info.uuid_from.toString(),info.uuid_to.toString()); + QString from_pin = info.context["from_pin"].toString(); + QString to_pin = info.context["to_pin"].toString(); + + TopologyManager::instance().createConnection(QString::number(info.id),from_pin,to_pin,info.uuid_from.toString(),info.uuid_to.toString()); } _dataInitialised = true; } @@ -450,6 +460,9 @@ void FixedPortsModel::saveNode(int nPageId) { QString fromPin = con.nSrcPortId.toString(); QString toPin = con.nDestPortId.toString(); + QJsonObject context; + context["from_pin"] = fromPin; + context["to_pin"] = toPin; PowerConnection* pCon = TopologyManager::instance().connection(fromPin,toPin); if(pCon) { @@ -462,7 +475,7 @@ void FixedPortsModel::saveNode(int nPageId) TopologyManager::instance().removeConnection(pCon->id()); break; case DataState::changed: - DataBase::GetInstance()->insertTopologic(con.nSrcNodeId,con.nDestNodeId,con.nSrcPortId,con.nDestPortId,0,"",0); + DataBase::GetInstance()->insertTopologic(con.nSrcNodeId,con.nDestNodeId,context,0,"",0); break; default: break; @@ -619,6 +632,89 @@ ElectricConnectLineItem* FixedPortsModel::getLineItemById(const QString& termina return nullptr; } +template void FixedPortsModel::establishConnection(GraphicsBaseItem* pSrc,GraphicsBaseItem* pDest,TypeLine* pItem) +{ + ItemPort* pSrcPort = nullptr; + ItemPort* pDestPort = nullptr; + if(pSrc->getItemType() == GIT_baseBus) + { + int index = pSrc->addPort(p_movable,pSrc->mapFromScene(calculateBusPortPos(pSrc,pDest))); + createTopoTerminalsByItem(pSrc,ModelFunctionType::BaseModel); + pSrcPort = pSrc->getPortPtr(index); + + QMap mapPorts = pDest->getPorts(); + + for(auto& port:mapPorts) + { + if(port->getType() == T_lineIn) + { + pDestPort = port; + break; + } + } + + } + else if(pDest->getItemType() == GIT_baseBus) + { + int index = pDest->addPort(p_movable,pDest->mapFromScene(calculateBusPortPos(pDest,pSrc))); + createTopoTerminalsByItem(pDest,ModelFunctionType::BaseModel); + pDestPort = pDest->getPortPtr(index); + + QMap mapPorts = pSrc->getPorts(); + + for(auto& port:mapPorts) + { + if(port->getType() == T_lineOut) + { + pSrcPort = port; + break; + } + } + } + else + { + QMap mapSrc = pSrc->getPorts(); + pSrcPort = nullptr; + for(auto& port:mapSrc) + { + if(port->getType() == T_lineOut) + { + pSrcPort = port; + break; + } + } + + QMap mapDest = pDest->getPorts(); + pDestPort = nullptr; + for(auto& port:mapDest) + { + if(port->getType() == T_lineIn) + { + pDestPort = port; + break; + } + } + } + if(pSrcPort && pDestPort) + { + QPointF srcPortPos = pSrcPort->scenePos(); + QPointF destPortPos = pDestPort->scenePos(); + pItem->setStartPoint(srcPortPos); + pItem->setEndPoint(destPortPos); + pItem->calculatePath(); + + PowerConnection* pCon = TopologyManager::instance().createConnection(pItem->itemId().toString(),pSrcPort->getId(),pDestPort->getId(),pSrc->itemId().toString(),pDest->itemId().toString(),ModelFunctionType::BaseModel); //创建拓扑连接(逻辑) + if(pCon) + pCon->setState(DataState::changed); + pItem->setConnection(Connection(pSrc->itemId(),QUuid(pSrcPort->getId()),pSrcPort->getType(),pSrcPort->portPos(),pDest->itemId(),QUuid(pDestPort->getId()),pDestPort->getType(),pDestPort->portPos())); + } +} + +QPointF FixedPortsModel::calculateBusPortPos(GraphicsBaseItem* pBus,GraphicsBaseItem* item) +{ + return QPointF(item->pos().x(),pBus->pos().y()); +} + void FixedPortsModel::showModelDlg(const QString& sName,QUuid uuid,GraphicsProjectModelItem* pItem) { modelStateInfo stateInfo = _modelStateInfo[sName]; @@ -662,7 +758,7 @@ ConfigurationDiagram* FixedPortsModel::getTopologyDiagram() return dynamic_cast(_pEntity); } -void FixedPortsModel::createTopoTerminalsByItem(GraphicsBaseItem* pItem) +void FixedPortsModel::createTopoTerminalsByItem(GraphicsBaseItem* pItem,ModelFunctionType funType) { PowerEntity* pEntity = pItem->entity(); @@ -687,12 +783,12 @@ void FixedPortsModel::createTopoTerminalsByItem(GraphicsBaseItem* pItem) default: break; } - TopologyManager::instance().createTerminal(pEntity->id(),terType,"",port->pos(),port->getId()); + TopologyManager::instance().createTerminal(pEntity->id(),terType,"",port->pos(),port->getId(),funType); } } } -void FixedPortsModel::createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon) +void FixedPortsModel::createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon,ModelFunctionType funType) { QJsonArray portsArray = componentCon["port"].toArray(); for (QJsonValueRef portJson : portsArray) //每个属性的状态信息 @@ -718,7 +814,7 @@ void FixedPortsModel::createTopoTerminalsByData(PowerEntity* pParent,QJsonObject default: break; } - TopologyManager::instance().createTerminal(pParent->id(),terType,"",QPointF(x,y),portId); + TopologyManager::instance().createTerminal(pParent->id(),terType,"",QPointF(x,y),portId,funType); } } @@ -770,6 +866,17 @@ QMap FixedPortsModel::allBaseNodePos() const return map; } +bool FixedPortsModel::addBaseItem(QUuid uuid,GraphicsBaseModelItem* pItem) +{ + if(_baseItem.contains(uuid)) + return false; + else + { + _baseItem.insert(uuid,pItem); + return true; + } +} + BaseModelProperty* FixedPortsModel::addBaseNodeData(QUuid id,int type,QString name,QString metaName) { BaseModelProperty* pData = BasePropertyManager::instance().findBaseEntityData(id); //已存在不不创建 @@ -789,3 +896,105 @@ BaseModelProperty* FixedPortsModel::addBaseNodeData(QUuid id,int type,QString na } return item; } + +void FixedPortsModel::showProjectModelSettingDlg(GraphicsBaseModelItem* srcItem) +{ + if(m_proModelSettingDlg == nullptr) + { + m_proModelSettingDlg = new ProjectModelSetting(_widget); + } + m_proModelSettingDlg->showDlg(srcItem); +} + +void FixedPortsModel::generateProjectModel(const QString& sPageName,QList lstData) +{ + DrawingPanel* pProPanel = nullptr; + if(_cavas){ + DiagramInfo info; + info.id = QUuid::createUuid(); + info.sName = sPageName; + info.sTag = sPageName; + info.sBasePageName = _pageName; + _cavas->onSignal_createDiagram(info); + pProPanel = _cavas->getPanel(sPageName); + } + + for(auto& pBase:lstData) + { + QUuid id = QUuid::createUuid(); + BaseProperty* pData = addNodeData(id,pBase->type(),pBase->name(),pBase->modelName()); + if(pData) + { + //pitem->setProperty(pData); + pData->setDataChanged(true); //数据状态改变 + + PowerEntity* pEntity = TopologyManager::instance().createEntity(EntityType::Component,id.toString(),pBase->name()); + //if(pEntity) + //pitem->setEntity(pEntity); + //createTopoTerminalsByItem(pitem); //创建item对象的逻辑接线点 + } + } +} + +void FixedPortsModel::addTestData() +{ + QUuid breakerId = QUuid::createUuid(); + ElectricBaseModelSvgItem* pBreaker = new ElectricBaseModelSvgItem(QRect(-15, -15, 30, 30)); + pBreaker->setItemId(breakerId); + pBreaker->setItemType(GIT_baseBreaker); + pBreaker->setInnerType(3); + pBreaker->initialPortsByDatabase(); + QByteArray byte = DataBase::GetInstance()->ModelType()[3].icon; + pBreaker->loadSvg(byte); + PowerEntity* pEntityBreaker = TopologyManager::instance().createEntity(EntityType::Component,breakerId.toString(),"断路器1",ModelFunctionType::BaseModel); + if(pEntityBreaker) + pBreaker->setEntity(pEntityBreaker); + createTopoTerminalsByItem(pBreaker,ModelFunctionType::BaseModel); + BaseModelProperty* pBreakerData = addBaseNodeData(breakerId,3,"断路器1",DataBase::GetInstance()->ModelType()[3].modelType); + if(pBreakerData) + { + pBreaker->setProperty(pBreakerData); + pBreakerData->setDataChanged(true); //数据状态改变 + } + addBaseItem(breakerId,pBreaker); + _scene->addItem(pBreaker); + pBreaker->setPos(QPointF(0,50)); + + + QUuid busId = QUuid::createUuid(); + ElectricBaseModelSvgBus* pBus = new ElectricBaseModelSvgBus(QRect(-200, -3, 400, 6)); + pBus->setItemId(busId); + pBus->setItemType(GIT_baseBus); + pBus->setInnerType(1); + //pBreaker->initialPortsByDatabase(); + QByteArray byte1 = DataBase::GetInstance()->ModelType()[1].icon; + pBus->loadSvg(byte1); + //createTopoTerminalsByItem(pBreaker); + BaseModelProperty* pBusData = addBaseNodeData(busId,1,"母线1",DataBase::GetInstance()->ModelType()[1].modelType); + if(pBusData) + { + pBus->setProperty(pBusData); + pBusData->setDataChanged(true); //数据状态改变 + } + PowerEntity* pEntityBus = TopologyManager::instance().createEntity(EntityType::Component,breakerId.toString(),"母线1",ModelFunctionType::BaseModel); + if(pEntityBus) + pBus->setEntity(pEntityBus); + addBaseItem(busId,pBus); + _scene->addItem(pBus); + pBus->setPos(QPointF(0,150)); + + QUuid lineId = QUuid::createUuid(); + ElectricBaseModelLineItem* pLine = new ElectricBaseModelLineItem(); + pLine->setItemId(lineId); + pLine->setItemType(GIT_baseLine); + pLine->setInnerType(4); + BaseModelProperty* pLineData = addBaseNodeData(lineId,4,"电缆1",DataBase::GetInstance()->ModelType()[4].modelType); + if(pLineData) + { + pLine->setProperty(pLineData); + pLineData->setDataChanged(true); //数据状态改变 + } + addBaseItem(lineId,pLine); + establishConnection(pBreaker,pBus,pLine); + _scene->addItem(pLine); +} diff --git a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp index f78ee5b..036b450 100644 --- a/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp +++ b/diagramCavas/source/graphicsItem/graphicsBaseItem.cpp @@ -3,6 +3,7 @@ #include "graphicsItem/handleText.h" #include "graphicsItem/itemPort.h" #include "baseProperty.h" +#include "dataBase.h" #include #include #include @@ -152,6 +153,28 @@ void GraphicsBaseItem::onUpdateData() { updateByProperty(); } + +void GraphicsBaseItem::initialPortsByDatabase() +{ + QMap mapType = DataBase::GetInstance()->getAllComponentType(); + + if(mapType.contains(m_inerType)) + { + QJsonArray nodesJsonArray = mapType[m_inerType].config["port"].toArray(); + + for (QJsonValueRef nodeJson : nodesJsonArray) + { + QJsonObject node = nodeJson.toObject(); + double dX = node["xRatio"].toDouble(); + double dY = node["yRatio"].toDouble(); + int movable = node["movable"].toInt(); + int portType = node["portType"].toInt(); + int portLocate = node["portLocate"].toInt(); + + addPort(PortState(movable),QPointF(boundingRect().left() + boundingRect().width() * dX, boundingRect().top()+boundingRect().height() *dY),QUuid::createUuid().toString(),HandleType(portType),PortPos(portLocate)); + } + } +} /********************************基模****************************************/ GraphicsBaseModelItem::GraphicsBaseModelItem(QGraphicsItem *parent) :GraphicsBaseItem(parent) @@ -162,6 +185,16 @@ GraphicsBaseModelItem::~GraphicsBaseModelItem() { } + +QVariant GraphicsBaseModelItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant& value) +{ + if (change == QGraphicsItem::ItemSelectedHasChanged) + { + setHandleVisible(value.toBool()); + } + return QGraphicsItem::itemChange(change, value); +} + /********************************工程模**************************************/ GraphicsProjectModelItem::GraphicsProjectModelItem(QGraphicsItem *parent) diff --git a/diagramCavas/source/projectModelSetting.cpp b/diagramCavas/source/projectModelSetting.cpp new file mode 100644 index 0000000..e811464 --- /dev/null +++ b/diagramCavas/source/projectModelSetting.cpp @@ -0,0 +1,56 @@ +#include "projectModelSetting.h" +#include "ui_projectModelSetting.h" +#include + +ProjectModelSetting::ProjectModelSetting(QWidget *parent) + : QDialog(parent) + ,ui(new Ui::projectModelSetting) +{ + setWindowFlags(Qt::Widget); + this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); +} + +ProjectModelSetting::~ProjectModelSetting() +{ + +} + +void ProjectModelSetting::initial() +{ + connect(ui->btn_ok,&QPushButton::clicked,this,&ProjectModelSetting::onOkClicked); + connect(ui->btn_cancel,&QPushButton::clicked,this,&ProjectModelSetting::onCancelClicked); + connect(ui->btn_saveAs,&QPushButton::clicked,this,&ProjectModelSetting::onSaveAsClicked); + + connect(ui->btn_apply,&QPushButton::clicked,this,&ProjectModelSetting::onAddClicked); + connect(ui->btn_revoke,&QPushButton::clicked,this,&ProjectModelSetting::onDecreaseClicked); +} + +void ProjectModelSetting::showDlg(GraphicsBaseModelItem* srcNode) +{ + show(); +} + +void ProjectModelSetting::onOkClicked() +{ + +} + +void ProjectModelSetting::onCancelClicked() +{ + hide(); +} + +void ProjectModelSetting::onSaveAsClicked() +{ + +} + +void ProjectModelSetting::onAddClicked() +{ + +} + +void ProjectModelSetting::onDecreaseClicked() +{ + +} diff --git a/diagramCavas/source/util/baseSelector.cpp b/diagramCavas/source/util/baseSelector.cpp index 78a0ced..1cd85cd 100644 --- a/diagramCavas/source/util/baseSelector.cpp +++ b/diagramCavas/source/util/baseSelector.cpp @@ -30,398 +30,455 @@ BaseSelector::~BaseSelector() } -void BaseSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void BaseSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { - if (event->button() != Qt::LeftButton) - return; - - _model->activateModel(); //激活当前窗口 - ms_ptMouseDown = event->scenePos(); - ms_ptMouseLast = event->scenePos(); - - if(!m_bHoverOnHandel) - scene->callParentEvent(event); //此处是通过触发QGraphicsScene的事件函数来取消所有被选中item的选中状态 - - m_opMode = OM_none; - - QList items = scene->selectedItems(); - if (items.count() == 1) //只有一个选中 + if(sceneMode == DM_edit) { - GraphicsProjectModelItem* item = qgraphicsitem_cast(items.first()); - if(item) - { - GraphicsItemType tpe = item->getItemType(); - if(tpe == GIT_link) //对象是连接线 - { - m_opMode = OM_linkMove; - setCursor(scene, Qt::ArrowCursor); - emit setWorkingSelector(ST_linkMoving); - } - else - { - //需要增加当前是否点击在控制点的判断函数 - ms_nDragHandle = item->collidesWithHandle(event->scenePos()); - if(ms_nDragHandle != H_none && ms_nDragHandle <= H_left) //在缩放控制点上 - { - m_opMode = OM_scale; - emit setWorkingSelector(ST_scaling); - } - else if(ms_nDragHandle >= H_rotate_leftTop && ms_nDragHandle <= H_rotate_leftBottom) //在旋转控制点上 - { - m_opMode = OM_rotate; - //计算夹角 - QPointF originPoint = item->mapToScene(item->boundingRect().center()); - double dLengthY = ms_ptMouseLast.y() - originPoint.y(); - double dLengthX = ms_ptMouseLast.x() - originPoint.x(); - ms_dAngleMouseDownToItem = atan2(dLengthY, dLengthX) * 180 / M_PI; - // if(atan2(dLengthY, dLengthX) < 0) - // ms_dAngleMouseDownToItem += 360.0; - //创建副本 - item->createOperationCopy(); - emit setWorkingSelector(ST_rotation); - } - else if(ms_nDragHandle > H_rotate_leftBottom && ms_nDragHandle < H_textCaption) //编辑控制点上 - { - m_opMode = OM_edit; - setCursor(scene, Qt::ClosedHandCursor); - emit setWorkingSelector(ST_editing); - } - else if(ms_nDragHandle >= H_connect ) //连接控制点 - { - m_opMode = OM_connect; - //setCursor(scene, Qt::ClosedHandCursor); - setCursor(scene, Qt::ArrowCursor); - emit setWorkingSelector(ST_connecting); - } - else - { - m_opMode = OM_move; - setCursor(scene, Qt::ClosedHandCursor); - emit setWorkingSelector(ST_moving); - } - } - } - } - else if (items.count() > 1) //选中多个 - { - m_opMode = OM_move; - emit setWorkingSelector(ST_moving); - setCursor(scene, Qt::ClosedHandCursor); - } - else if(items.count() == 0) //单独移动子类 - { - QList items = scene->items(ms_ptMouseLast); - if (items.count() == 1) - { - ItemControlHandle* pHandle = qgraphicsitem_cast(items.first()); - if(pHandle) - { - //GraphicsProjectModelItem* item = pHandle->getParentPtr(); - ms_nDragHandle = pHandle->getTag(); - //ms_nDragHandle = item->collidesWithHandle(event->scenePos()); - if(ms_nDragHandle >= H_textCaption && ms_nDragHandle < H_connect) //移动文本 - { - m_opMode = OM_subMove; - setCursor(scene, Qt::ClosedHandCursor); - emit setWorkingSelector(ST_subMoving); - } - } - } - } - - if(m_opMode == OM_move) //可以多个选中同时移动 - { - for(int n = 0; n < items.size(); n++) - { - //创建副本 - GraphicsProjectModelItem* item = qgraphicsitem_cast(items.at(n)); - GraphicsItemType tpe = item->getItemType(); - if(tpe == GIT_link) - continue; - item->createOperationCopy(); - } - } - else if(m_opMode == OM_none) - { - QGraphicsView *view = scene->getView(); - if(view) - view->setDragMode(QGraphicsView::RubberBandDrag); - } - -} - -void BaseSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) -{ - ms_ptMouseLast = event->scenePos(); - - QList items = scene->selectedItems(); - - if (items.count() == 1) - { - AbstractShape* item = qgraphicsitem_cast(items.first()); - if(item) - { - if(ms_nDragHandle == H_none) - { - //设置光标样式 - int nHandle = item->collidesWithHandle(event->scenePos()); - if(nHandle == H_none) - { - setCursor(scene, Qt::ArrowCursor); - m_bHoverOnHandel = false; - } - else if(nHandle >= H_edit) - { - setCursor(scene, Qt::OpenHandCursor); - m_bHoverOnHandel = true; - } - else - { - //划分为四组区间范围,分别水平组、垂直组、一三象限倾斜组、二四象限倾斜组,每组由两个对称区间构成 - double dRotation = item->rotation(); - dRotation += item->getSyncRotationDataFromParent(); - //让角度保持在正负180的区间,也就是上下两个半圈,这样易于象限判断 - if (dRotation > 180) - dRotation -= 360; - if (dRotation < -180) - dRotation += 360; - //qDebug() << "selfRotation:" << item->rotation() << " syncRotation:" << item->getSyncRotationDataFromParent() << " fininalRotatio:" << dRotation; - double dTileAngle = 15.0; - - switch (nHandle) - { - case H_leftTop: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeBDiagCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeHorCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeVerCursor); - else //水平区间 - setCursor(scene, Qt::SizeFDiagCursor); - break; - } - case H_top: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeHorCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeFDiagCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeBDiagCursor); - else - setCursor(scene, Qt::SizeVerCursor); - break; - } - case H_rightTop: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeFDiagCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeVerCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeHorCursor); - else - setCursor(scene, Qt::SizeBDiagCursor); - break; - } - case H_right: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeVerCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeBDiagCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeFDiagCursor); - else - setCursor(scene, Qt::SizeHorCursor); - break; - } - case H_rightBottom: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeBDiagCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeHorCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeVerCursor); - else //水平区间 - setCursor(scene, Qt::SizeFDiagCursor); - break; - } - case H_bottom: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeHorCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeFDiagCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeBDiagCursor); - else - setCursor(scene, Qt::SizeVerCursor); - break; - } - case H_leftBottom: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeFDiagCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeVerCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeHorCursor); - else //水平区间 - setCursor(scene, Qt::SizeBDiagCursor); - break; - } - case H_left: - { - if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 - setCursor(scene, Qt::SizeVerCursor); - else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 - setCursor(scene, Qt::SizeBDiagCursor); - else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 - setCursor(scene, Qt::SizeFDiagCursor); - else - setCursor(scene, Qt::SizeHorCursor); - break; - } - case H_rotate_leftTop: - { - int nSize = 24; - QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); - setCursor(scene, rotateCursor); - break; - } - case H_rotate_rightTop: - { - int nSize = 24; - QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); - setCursor(scene, rotateCursor); - break; - } - case H_rotate_rightBottom: - { - int nSize = 24; - QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); - setCursor(scene, rotateCursor); - break; - } - case H_rotate_leftBottom: - { - int nSize = 24; - QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); - setCursor(scene, rotateCursor); - break; - } - default: - break; - } - - m_bHoverOnHandel = true; - } - } - } - } -} - -void BaseSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) -{ - setCursor(scene, Qt::ArrowCursor); - - if(m_opMode == OM_none) - { - QGraphicsView *view = scene->getView(); - if(view) - view->setDragMode(QGraphicsView::NoDrag); - } - - m_opMode = OM_none; - m_bHoverOnHandel = false; - ms_nDragHandle = H_none; - scene->callParentEvent(event); -} - -void BaseSelector::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) -{ - QList items = scene->selectedItems(); - if(items.count() == 0) - { - QList items = scene->items(ms_ptMouseLast); - if (items.count() == 1) - { - ItemControlHandle* pHandle = qgraphicsitem_cast(items.first()); - if(pHandle) - { - ms_nDragHandle = pHandle->getTag(); - //ms_nDragHandle = item->collidesWithHandle(event->scenePos()); - if(ms_nDragHandle >= H_textCaption && ms_nDragHandle < H_connect) //是文字节点 - { - HandleText* pText = qgraphicsitem_cast(pHandle); - if(pText) - { - //m_opMode = OM_subMove; - //emit setWorkingSelector(ST_subMoving); - pText->creatEditor(); - } - } - } - } - } - else if(items.count() == 1) //不是文字节点 - { - GraphicsProjectModelItem* item = qgraphicsitem_cast(items.first()); - if(item) - { - GraphicsItemType tpe = item->getItemType(); - if(tpe != GIT_link) - { - QString modelName = item->getModelName(); //todo:additem时填写模型类型 - QUuid uuid = item->itemId(); - _model->showModelDlg(modelName,uuid,item); - } - } - } -} - -void BaseSelector::dragEnterEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*) -{ - if (event->mimeData()->hasText()) { - event->acceptProposedAction(); - } -} - -void BaseSelector::dragMoveEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*) -{ - if (event->mimeData()->hasText()) { - event->acceptProposedAction(); - } -} - -void BaseSelector::dropEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*) -{ - if (event->mimeData()->hasText()) { - QString text = event->mimeData()->text(); - QString uuid = QString::fromLocal8Bit(event->mimeData()->data("application/id")); - // 根据拖拽的数据创建相应的图形项并添加到场景中 - QGraphicsTextItem *textItem = new QGraphicsTextItem(text); - textItem->setPos(event->scenePos()); - //addItem(textItem); - event->acceptProposedAction(); - - //根据data数据新增拖拽的item - QMap items = _model->allItems(); - if(items.contains(QUuid(uuid))){ - QMessageBox::information(NULL, QString::fromWCharArray(L"提示"), QString::fromWCharArray(L"此对象在当前页已存在")); + if (event->button() != Qt::LeftButton) return; + + _model->activateModel(); //激活当前窗口 + ms_ptMouseDown = event->scenePos(); + ms_ptMouseLast = event->scenePos(); + + if(!m_bHoverOnHandel) + scene->callParentEvent(event); //此处是通过触发QGraphicsScene的事件函数来取消所有被选中item的选中状态 + + m_opMode = OM_none; + + QList items = scene->selectedItems(); + if (items.count() == 1) //只有一个选中 + { + GraphicsProjectModelItem* item = qgraphicsitem_cast(items.first()); + if(item) + { + GraphicsItemType tpe = item->getItemType(); + if(tpe == GIT_link) //对象是连接线 + { + m_opMode = OM_linkMove; + setCursor(scene, Qt::ArrowCursor); + emit setWorkingSelector(ST_linkMoving); + } + else + { + //需要增加当前是否点击在控制点的判断函数 + ms_nDragHandle = item->collidesWithHandle(event->scenePos()); + if(ms_nDragHandle != H_none && ms_nDragHandle <= H_left) //在缩放控制点上 + { + m_opMode = OM_scale; + emit setWorkingSelector(ST_scaling); + } + else if(ms_nDragHandle >= H_rotate_leftTop && ms_nDragHandle <= H_rotate_leftBottom) //在旋转控制点上 + { + m_opMode = OM_rotate; + //计算夹角 + QPointF originPoint = item->mapToScene(item->boundingRect().center()); + double dLengthY = ms_ptMouseLast.y() - originPoint.y(); + double dLengthX = ms_ptMouseLast.x() - originPoint.x(); + ms_dAngleMouseDownToItem = atan2(dLengthY, dLengthX) * 180 / M_PI; + // if(atan2(dLengthY, dLengthX) < 0) + // ms_dAngleMouseDownToItem += 360.0; + //创建副本 + item->createOperationCopy(); + emit setWorkingSelector(ST_rotation); + } + else if(ms_nDragHandle > H_rotate_leftBottom && ms_nDragHandle < H_textCaption) //编辑控制点上 + { + m_opMode = OM_edit; + setCursor(scene, Qt::ClosedHandCursor); + emit setWorkingSelector(ST_editing); + } + else if(ms_nDragHandle >= H_connect ) //连接控制点 + { + m_opMode = OM_connect; + //setCursor(scene, Qt::ClosedHandCursor); + setCursor(scene, Qt::ArrowCursor); + emit setWorkingSelector(ST_connecting); + } + else + { + m_opMode = OM_move; + setCursor(scene, Qt::ClosedHandCursor); + emit setWorkingSelector(ST_moving); + } + } + } } - else{ - _model->addNodeItem(QUuid(uuid),event->scenePos()); + else if (items.count() > 1) //选中多个 + { + m_opMode = OM_move; + emit setWorkingSelector(ST_moving); + setCursor(scene, Qt::ClosedHandCursor); + } + else if(items.count() == 0) //单独移动子类 + { + QList items = scene->items(ms_ptMouseLast); + if (items.count() == 1) + { + ItemControlHandle* pHandle = qgraphicsitem_cast(items.first()); + if(pHandle) + { + //GraphicsProjectModelItem* item = pHandle->getParentPtr(); + ms_nDragHandle = pHandle->getTag(); + //ms_nDragHandle = item->collidesWithHandle(event->scenePos()); + if(ms_nDragHandle >= H_textCaption && ms_nDragHandle < H_connect) //移动文本 + { + m_opMode = OM_subMove; + setCursor(scene, Qt::ClosedHandCursor); + emit setWorkingSelector(ST_subMoving); + } + } + } + } + + if(m_opMode == OM_move) //可以多个选中同时移动 + { + for(int n = 0; n < items.size(); n++) + { + //创建副本 + GraphicsProjectModelItem* item = qgraphicsitem_cast(items.at(n)); + //GraphicsBaseModelItem* item = qgraphicsitem_cast(items.at(n)); + GraphicsItemType tpe = item->getItemType(); + if(tpe == GIT_link) + continue; + item->createOperationCopy(); + //item->update(); + } + } + else if(m_opMode == OM_none) + { + QGraphicsView *view = scene->getView(); + if(view) + view->setDragMode(QGraphicsView::RubberBandDrag); + } + } + else if(sceneMode == DM_baseModel) + { + _model->activateModel(); + scene->callParentEvent(event); + QList items = scene->selectedItems(); + if (items.count() == 1) + { + GraphicsBaseModelItem* item = qgraphicsitem_cast(items.first()); + if(item) + { + item->setSelected(true); + item->updateHandles(); + } } } } -void BaseSelector::contextMenuEvent(QGraphicsSceneContextMenuEvent *event,DesignerScene* scene) +void BaseSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) +{ + if(sceneMode == DM_edit) + { + ms_ptMouseLast = event->scenePos(); + + QList items = scene->selectedItems(); + + if (items.count() == 1) + { + AbstractShape* item = qgraphicsitem_cast(items.first()); + if(item) + { + if(ms_nDragHandle == H_none) + { + //设置光标样式 + int nHandle = item->collidesWithHandle(event->scenePos()); + if(nHandle == H_none) + { + setCursor(scene, Qt::ArrowCursor); + m_bHoverOnHandel = false; + } + else if(nHandle >= H_edit) + { + setCursor(scene, Qt::OpenHandCursor); + m_bHoverOnHandel = true; + } + else + { + //划分为四组区间范围,分别水平组、垂直组、一三象限倾斜组、二四象限倾斜组,每组由两个对称区间构成 + double dRotation = item->rotation(); + dRotation += item->getSyncRotationDataFromParent(); + //让角度保持在正负180的区间,也就是上下两个半圈,这样易于象限判断 + if (dRotation > 180) + dRotation -= 360; + if (dRotation < -180) + dRotation += 360; + //qDebug() << "selfRotation:" << item->rotation() << " syncRotation:" << item->getSyncRotationDataFromParent() << " fininalRotatio:" << dRotation; + double dTileAngle = 15.0; + + switch (nHandle) + { + case H_leftTop: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeBDiagCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeHorCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeVerCursor); + else //水平区间 + setCursor(scene, Qt::SizeFDiagCursor); + break; + } + case H_top: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeHorCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeFDiagCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeBDiagCursor); + else + setCursor(scene, Qt::SizeVerCursor); + break; + } + case H_rightTop: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeFDiagCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeVerCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeHorCursor); + else + setCursor(scene, Qt::SizeBDiagCursor); + break; + } + case H_right: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeVerCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeBDiagCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeFDiagCursor); + else + setCursor(scene, Qt::SizeHorCursor); + break; + } + case H_rightBottom: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeBDiagCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeHorCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeVerCursor); + else //水平区间 + setCursor(scene, Qt::SizeFDiagCursor); + break; + } + case H_bottom: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeHorCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeFDiagCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeBDiagCursor); + else + setCursor(scene, Qt::SizeVerCursor); + break; + } + case H_leftBottom: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeFDiagCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeVerCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeHorCursor); + else //水平区间 + setCursor(scene, Qt::SizeBDiagCursor); + break; + } + case H_left: + { + if((dRotation > -145+dTileAngle && dRotation < -45-dTileAngle) || (dRotation > 45+dTileAngle && dRotation < 145-dTileAngle)) //垂直区间 + setCursor(scene, Qt::SizeVerCursor); + else if((dRotation >= -45-dTileAngle && dRotation <= -45+dTileAngle) || (dRotation >= 145-dTileAngle && dRotation <= 145+dTileAngle)) //一三象限倾斜 + setCursor(scene, Qt::SizeBDiagCursor); + else if((dRotation >= -145-dTileAngle && dRotation <= -145+dTileAngle) || (dRotation >= 45-dTileAngle && dRotation <= 45+dTileAngle)) //二四象限倾斜 + setCursor(scene, Qt::SizeFDiagCursor); + else + setCursor(scene, Qt::SizeHorCursor); + break; + } + case H_rotate_leftTop: + { + int nSize = 24; + QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); + setCursor(scene, rotateCursor); + break; + } + case H_rotate_rightTop: + { + int nSize = 24; + QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); + setCursor(scene, rotateCursor); + break; + } + case H_rotate_rightBottom: + { + int nSize = 24; + QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); + setCursor(scene, rotateCursor); + break; + } + case H_rotate_leftBottom: + { + int nSize = 24; + QCursor rotateCursor = QCursor(QPixmap(":/images/icon_rotate.png")/*.scaled(nSize, nSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)*/); + setCursor(scene, rotateCursor); + break; + } + default: + break; + } + + m_bHoverOnHandel = true; + } + } + } + } + } + else if(sceneMode == DM_baseModel) + { + int a = 1; + } +} + +void BaseSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) +{ + if(sceneMode == DM_edit) + { + setCursor(scene, Qt::ArrowCursor); + + if(m_opMode == OM_none) + { + QGraphicsView *view = scene->getView(); + if(view) + view->setDragMode(QGraphicsView::NoDrag); + } + + m_opMode = OM_none; + m_bHoverOnHandel = false; + ms_nDragHandle = H_none; + scene->callParentEvent(event); + } + else if(sceneMode == DM_baseModel) + { + m_opMode = OM_none; + scene->callParentEvent(event); + } +} + +void BaseSelector::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) +{ + if(sceneMode == DM_edit) + { + QList items = scene->selectedItems(); + if(items.count() == 0) + { + QList items = scene->items(ms_ptMouseLast); + if (items.count() == 1) + { + ItemControlHandle* pHandle = qgraphicsitem_cast(items.first()); + if(pHandle) + { + ms_nDragHandle = pHandle->getTag(); + //ms_nDragHandle = item->collidesWithHandle(event->scenePos()); + if(ms_nDragHandle >= H_textCaption && ms_nDragHandle < H_connect) //是文字节点 + { + HandleText* pText = qgraphicsitem_cast(pHandle); + if(pText) + { + //m_opMode = OM_subMove; + //emit setWorkingSelector(ST_subMoving); + pText->creatEditor(); + } + } + } + } + } + else if(items.count() == 1) //不是文字节点 + { + GraphicsProjectModelItem* item = qgraphicsitem_cast(items.first()); + if(item) + { + GraphicsItemType tpe = item->getItemType(); + if(tpe != GIT_link) + { + QString modelName = item->getModelName(); //todo:additem时填写模型类型 + QUuid uuid = item->itemId(); + _model->showModelDlg(modelName,uuid,item); + } + } + } + } + else if(sceneMode == DM_baseModel) + { + QList items = scene->selectedItems(); + if(items.count() == 1) + { + GraphicsBaseModelItem* item = qgraphicsitem_cast(items.first()); + if(item) + { + _model->showProjectModelSettingDlg(item); + } + } + } +} + +void BaseSelector::dragEnterEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode sceneMode) +{ + if (event->mimeData()->hasText()) { + event->acceptProposedAction(); + } +} + +void BaseSelector::dragMoveEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode sceneMode) +{ + if (event->mimeData()->hasText()) { + event->acceptProposedAction(); + } +} + +void BaseSelector::dropEvent(QGraphicsSceneDragDropEvent *event, DesignerScene*,DiagramMode sceneMode) +{ + if(sceneMode == DM_edit) + { + if (event->mimeData()->hasText()) { + QString text = event->mimeData()->text(); + QString uuid = QString::fromLocal8Bit(event->mimeData()->data("application/id")); + // 根据拖拽的数据创建相应的图形项并添加到场景中 + QGraphicsTextItem *textItem = new QGraphicsTextItem(text); + textItem->setPos(event->scenePos()); + //addItem(textItem); + event->acceptProposedAction(); + + //根据data数据新增拖拽的item + QMap items = _model->allItems(); + if(items.contains(QUuid(uuid))){ + QMessageBox::information(NULL, QString::fromWCharArray(L"提示"), QString::fromWCharArray(L"此对象在当前页已存在")); + return; + } + else{ + _model->addNodeItem(QUuid(uuid),event->scenePos()); + } + } + } + else if(sceneMode == DM_baseModel) + { + int a = 1; + } + +} + +void BaseSelector::contextMenuEvent(QGraphicsSceneContextMenuEvent *event,DesignerScene* scene,DiagramMode sceneMode) { QList listItem = scene->selectedItems(); if(listItem.isEmpty()) diff --git a/diagramCavas/source/util/connectingSelector.cpp b/diagramCavas/source/util/connectingSelector.cpp index 94ed257..c4f041d 100644 --- a/diagramCavas/source/util/connectingSelector.cpp +++ b/diagramCavas/source/util/connectingSelector.cpp @@ -21,7 +21,7 @@ ConnectingSelector::~ConnectingSelector() } -void ConnectingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void ConnectingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); @@ -145,7 +145,7 @@ void ConnectingSelector::createConnectLline(GraphicsProjectModelItem* connecting } } -void ConnectingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void ConnectingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); if(m_pConnectingItem == nullptr) @@ -212,7 +212,7 @@ void ConnectingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, Designe } -void ConnectingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void ConnectingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { if(m_bReadyConnect) { diff --git a/diagramCavas/source/util/creatingSelector.cpp b/diagramCavas/source/util/creatingSelector.cpp index 688a283..131d716 100644 --- a/diagramCavas/source/util/creatingSelector.cpp +++ b/diagramCavas/source/util/creatingSelector.cpp @@ -23,7 +23,7 @@ CreatingSelector::~CreatingSelector() } -void CreatingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void CreatingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { if (event->button() != Qt::LeftButton) return; @@ -123,7 +123,7 @@ void CreatingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, Designer } } -void CreatingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void CreatingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { setCursor(scene, Qt::CrossCursor); ms_ptMouseLast = event->scenePos(); @@ -159,7 +159,7 @@ void CreatingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerS } } -void CreatingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void CreatingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { if (m_pCreatingItem && m_creatingMethod == CM_drag) { diff --git a/diagramCavas/source/util/editingSelector.cpp b/diagramCavas/source/util/editingSelector.cpp index 7d8a03d..a22fe87 100644 --- a/diagramCavas/source/util/editingSelector.cpp +++ b/diagramCavas/source/util/editingSelector.cpp @@ -13,12 +13,12 @@ EditingSelector::~EditingSelector() } -void EditingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void EditingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { } -void EditingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void EditingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); QList items = scene->selectedItems(); @@ -35,7 +35,7 @@ void EditingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerSc } } -void EditingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void EditingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { QList items = scene->selectedItems(); if (items.count() == 1) diff --git a/diagramCavas/source/util/linkMovingSelector.cpp b/diagramCavas/source/util/linkMovingSelector.cpp index f40bede..da1b249 100644 --- a/diagramCavas/source/util/linkMovingSelector.cpp +++ b/diagramCavas/source/util/linkMovingSelector.cpp @@ -14,14 +14,14 @@ LinkMovingSelector::~LinkMovingSelector() } -void LinkMovingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void LinkMovingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); //QList items = scene->selectedItems(); } -void LinkMovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void LinkMovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); @@ -46,7 +46,7 @@ void LinkMovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, Designe } -void LinkMovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void LinkMovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { if(m_pMovingLine) { diff --git a/diagramCavas/source/util/movingSelector.cpp b/diagramCavas/source/util/movingSelector.cpp index c416ef3..c449064 100644 --- a/diagramCavas/source/util/movingSelector.cpp +++ b/diagramCavas/source/util/movingSelector.cpp @@ -14,7 +14,7 @@ MovingSelector::~MovingSelector() } -void MovingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void MovingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); @@ -23,7 +23,7 @@ void MovingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerSc updateConnectLineByTopology(items); } -void MovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void MovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); @@ -36,7 +36,7 @@ void MovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerSce } } -void MovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void MovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { QList items = scene->selectedItems(); for(int n = 0; n < items.size(); n++) diff --git a/diagramCavas/source/util/rotationSelector.cpp b/diagramCavas/source/util/rotationSelector.cpp index cd51999..7ec02c9 100644 --- a/diagramCavas/source/util/rotationSelector.cpp +++ b/diagramCavas/source/util/rotationSelector.cpp @@ -14,12 +14,12 @@ RotationSelector::~RotationSelector() } -void RotationSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void RotationSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { } -void RotationSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void RotationSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); QList items = scene->selectedItems(); @@ -49,7 +49,7 @@ void RotationSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerS } } -void RotationSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void RotationSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { QList items = scene->selectedItems(); for(int n = 0; n < items.size(); n++) diff --git a/diagramCavas/source/util/scalingSelector.cpp b/diagramCavas/source/util/scalingSelector.cpp index 8ab0ae3..e17bd1a 100644 --- a/diagramCavas/source/util/scalingSelector.cpp +++ b/diagramCavas/source/util/scalingSelector.cpp @@ -14,12 +14,12 @@ ScalingSelector::~ScalingSelector() } -void ScalingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void ScalingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { - BaseSelector::mousePressEvent(event,scene); + BaseSelector::mousePressEvent(event,scene,sceneMode); } -void ScalingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void ScalingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); QList items = scene->selectedItems(); @@ -51,7 +51,7 @@ void ScalingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerSc } } -void ScalingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void ScalingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { QList items = scene->selectedItems(); if (items.count() == 1) diff --git a/diagramCavas/source/util/subMovingSelector.cpp b/diagramCavas/source/util/subMovingSelector.cpp index 4b5e9ea..b6a255c 100644 --- a/diagramCavas/source/util/subMovingSelector.cpp +++ b/diagramCavas/source/util/subMovingSelector.cpp @@ -15,14 +15,14 @@ SubMovingSelector::~SubMovingSelector() } -void SubMovingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void SubMovingSelector::mousePressEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); QList items = scene->selectedItems(); } -void SubMovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void SubMovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { ms_ptMouseLast = event->scenePos(); if(m_pParentItem == nullptr) @@ -62,7 +62,7 @@ void SubMovingSelector::mouseMoveEvent(QGraphicsSceneMouseEvent* event, Designer } -void SubMovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene) +void SubMovingSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, DesignerScene* scene,DiagramMode sceneMode) { m_pParentItem = nullptr; ms_nDragHandle = H_none; diff --git a/diagramCavas/ui/projectModelSetting.ui b/diagramCavas/ui/projectModelSetting.ui new file mode 100644 index 0000000..1106c8d --- /dev/null +++ b/diagramCavas/ui/projectModelSetting.ui @@ -0,0 +1,339 @@ + + + projectModelSetting + + + + 0 + 0 + 634 + 596 + + + + + 12 + + + + Dialog + + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 22 + + + + background-color: rgb(177, 177, 177); + + + + 0 + + + 6 + + + 0 + + + 0 + + + 0 + + + + + + 12 + + + + color: rgb(0, 0, 0); + + + 工程模配置 + + + + + + + + + + 0 + + + + 基础设置 + + + + + + 基本信息 + + + + + + 元件名称: + + + + + + + true + + + + + + + 基模类型: + + + + + + + true + + + + + + + 当前工程模: + + + + + + + + + + + + + 属性信息 + + + + 6 + + + + + font: 12pt "Microsoft YaHei UI"; +color: rgb(8, 8, 8); + + + 元模型属性 + + + + + + + font: 12pt "Microsoft YaHei UI"; +color: rgb(8, 8, 8); + + + 工程模型属性 + + + + + + + false + + + + + + + Qt::Orientation::Vertical + + + + 20 + 158 + + + + + + + + false + + + + + + + >> + + + + + + + << + + + + + + + Qt::Orientation::Vertical + + + + 20 + 158 + + + + + + + + + + + + 其他设置 + + + + + + 工程图标设置 + + + + + + QListView::ViewMode::IconMode + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 244 + + + + + + + + + + + + + 4 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + 工程模另存为 + + + + + + + true + + + + + + + Qt::Orientation::Horizontal + + + + 180 + 20 + + + + + + + + 确定 + + + + + + + 取消 + + + + + + + + + + + diff --git a/diagramUtils/include/dataBase.h b/diagramUtils/include/dataBase.h index fbeda7e..dc6b867 100644 --- a/diagramUtils/include/dataBase.h +++ b/diagramUtils/include/dataBase.h @@ -30,7 +30,7 @@ public: bool insertStation(int zoneId,QString name,QString description,bool isLocal,int op); bool insertGrid(QString name,QString description,int op); bool insertZone(int grid_id,QString name,QString description,int op); - bool insertTopologic(QUuid uuid_from,QUuid uuid_to,QUuid from_pin,QUuid to_pin,int flag,QString description,int op); + bool insertTopologic(QUuid uuid_from,QUuid uuid_to,QJsonObject context,int flag,QString description,int op); QString getGridNameById(int); QString getZoneNameById(int); @@ -54,6 +54,7 @@ public: bool componentExist(QString uuid); bool deleteComponent(QString uuid); + QMap getAllComponentType(); //获取所有支持的元件种类 /*********************************************************************************/ int getPageIdByName(QString name); bool updatePage(QString tag,QString name,QJsonObject context); @@ -119,6 +120,8 @@ private: QMap _modelAttribute; //模型-属性对照组 QMap _modelAttributePublic; //公共属性组 QMap _modelConnectivity; //连接性组 + + QMap _componentType; //存储系统支持的类型列表 private: void initial(); //bool createProjectDB(); diff --git a/diagramUtils/source/dataBase.cpp b/diagramUtils/source/dataBase.cpp index 72dc204..7cc2432 100644 --- a/diagramUtils/source/dataBase.cpp +++ b/diagramUtils/source/dataBase.cpp @@ -455,20 +455,22 @@ bool DataBase::insertZone(int grid_id,QString name,QString description,int op) return false; } -bool DataBase::insertTopologic(QUuid uuid_from,QUuid uuid_to,QUuid from_pin,QUuid to_pin,int flag,QString description,int op) +bool DataBase::insertTopologic(QUuid uuid_from,QUuid uuid_to,QJsonObject context,int flag,QString description,int op) { + QJsonDocument contextDoc(context); + QString strContext = contextDoc.toJson(QJsonDocument::Compact); + if(db.open()) { QSqlQuery qry(db); - qry.prepare("INSERT INTO topologic(uuid_from, uuid_to, from_pin, to_pin, flag, description, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"); + qry.prepare("INSERT INTO topologic(uuid_from, uuid_to, context, flag, description, op, ts) VALUES (?, ?, ?, ?, ?, ?, ?);"); qry.bindValue(0,uuid_from); qry.bindValue(1,uuid_to); - qry.bindValue(2,from_pin); - qry.bindValue(3,to_pin); - qry.bindValue(4,flag); - qry.bindValue(5,description); - qry.bindValue(6,op); - qry.bindValue(7,QDateTime::currentDateTime()); + qry.bindValue(2,strContext); + qry.bindValue(3,flag); + qry.bindValue(4,description); + qry.bindValue(5,op); + qry.bindValue(6,QDateTime::currentDateTime()); bool res = qry.exec(); QString str = qry.lastQuery(); if(!res) @@ -632,7 +634,7 @@ QList DataBase::getAllStation() QList DataBase::getAllTopologics() { QList lst; - QString strSQL = "SELECT id,uuid_from,uuid_to,from_pin,to_pin,flag FROM topologic"; + QString strSQL = "SELECT id,uuid_from,uuid_to,context,flag FROM topologic"; try { @@ -643,9 +645,9 @@ QList DataBase::getAllTopologics() info.id = query.value(0).toInt(); info.uuid_from = QUuid(query.value(1).toString()); info.uuid_to = QUuid(query.value(2).toString()); - info.from_pin = QUuid(query.value(3).toString()); - info.to_pin = QUuid(query.value(4).toString()); - info.flag = query.value(5).toInt(); + QString str = query.value(3).toString(); + info.context = QstringToJson(str); + info.flag = query.value(4).toInt(); lst.append(info); } @@ -685,7 +687,7 @@ int DataBase::topologicExist(QUuid fromPin,QUuid toPin) topologicInfo DataBase::getTopologicById(int id) { topologicInfo info; - QString strSQL = "SELECT id,uuid_from,uuid_to,from_pin,to_pin,flag FROM topologic WHERE id = ?"; + QString strSQL = "SELECT id,uuid_from,uuid_to,context,flag FROM topologic WHERE id = ?"; QVariantList params; params.append(id); @@ -697,9 +699,9 @@ topologicInfo DataBase::getTopologicById(int id) info.id = query.value(0).toInt(); info.uuid_from = QUuid(query.value(1).toString()); info.uuid_to = QUuid(query.value(2).toString()); - info.from_pin = QUuid(query.value(3).toString()); - info.to_pin = QUuid(query.value(4).toString()); - info.flag = query.value(5).toInt(); + QString str = query.value(3).toString(); + info.context = QstringToJson(str); + info.flag = query.value(4).toInt(); } query.clear(); return info; @@ -857,6 +859,43 @@ bool DataBase::deleteComponent(QString uuid) } return false; } + +QMap DataBase::getAllComponentType() +{ + if(_componentType.empty()) + { + QMap map; + if(db.open()) + { + QSqlQuery qry(db); + + qry.prepare("SELECT id, type, name, config FROM component_type"); + bool res = qry.exec(); + QString str = qry.lastQuery(); + if(!res) + { + qDebug()<menuBay->addAction(QString::fromWCharArray(L"编辑间隔")); connect(actEditBay,&QAction::triggered,this,&CMainWindow::onAction_editBay); + + QAction* testAct = ui->menuTest->addAction(QString::fromWCharArray(L"生成测试基模")); + connect(testAct,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onCreateTestBaseModelDiagram); } void CMainWindow::onAction_zoomIn() diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index fc48a1a..78e95c0 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -48,11 +48,17 @@ 间隔管理 + + + 测试 + + +