#include "SchemeFlowWidget.h" #include "shemeFlow/FlowGraphNodeWidget.h" #include "ProjectManager.h" #include #include #include #include #include #include using QtNodes::GraphicsView; static std::shared_ptr registerDataModels() { auto ret = std::make_shared(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); ret->registerModel(); return ret; } static void setStyle_() { GraphicsViewStyle::setStyle( R"( { "GraphicsViewStyle": { "BackgroundColor": [255, 255, 255], "FineGridColor": [255, 255, 255], "CoarseGridColor": [255, 255, 255] } } )"); NodeStyle::setNodeStyle( R"( { "NodeStyle": { "NormalBoundaryColor": "darkgray", "SelectedBoundaryColor": "deepskyblue", "GradientColor0": "mintcream", "GradientColor1": "mintcream", "GradientColor2": "mintcream", "GradientColor3": "mintcream", "ShadowColor": [200, 200, 200], "FontColor": [10, 10, 10], "FontColorFaded": [100, 100, 100], "ConnectionPointColor": "white", "PenWidth": 2.0, "HoveredPenWidth": 2.5, "ConnectionPointDiameter": 10.0, "Opacity": 1.0 } } )"); ConnectionStyle::setConnectionStyle( R"( { "ConnectionStyle": { "ConstructionColor": "gray", "NormalColor": "black", "SelectedColor": "gray", "SelectedHaloColor": "deepskyblue", "HoveredColor": "deepskyblue", "LineWidth": 3.0, "ConstructionLineWidth": 2.0, "PointDiameter": 10.0, "UseDataDefinedColors": false } } )"); } SchemeFlowWidget::SchemeFlowWidget(ProjectInfo *proj, int indexType, QWidget *parent) : QWidget(parent), m_proj(proj) { setStyle_(); initWidget(); setType(indexType); } SchemeFlowWidget::~SchemeFlowWidget() { delete m_graphModel; } void SchemeFlowWidget::setType(int t) { m_indexType = t; refresh(); } QList SchemeFlowWidget::schemeTemplate(int projId, int indexType) { /// 方案流程模板 QList types; switch (indexType) { case ProjectManager::AbilityIndex: { types = { SchemePlanManager::IndexSystem, SchemePlanManager::ImportWeightData, SchemePlanManager::OptimizeIndex, SchemePlanManager::CalculateWeight, SchemePlanManager::ShowEvalResult, SchemePlanManager::GenerateReport }; // types = { SchemePlanManager::IndexSystem }; break; } case ProjectManager::TechIndex: { types = { SchemePlanManager::IndexSystem, SchemePlanManager::ImportEvalData, SchemePlanManager::RunEvaluate, SchemePlanManager::ShowEvalResult, SchemePlanManager::GenerateReport }; break; } case ProjectManager::OptimalIndex: { types = { SchemePlanManager::IndexSystem, SchemePlanManager::ImportWeightData, SchemePlanManager::OptimizeIndex, SchemePlanManager::CalculateWeight, SchemePlanManager::ImportEvalData, SchemePlanManager::RunEvaluate, SchemePlanManager::ShowEvalResult, SchemePlanManager::GenerateReport }; break; } case ProjectManager::EfficiencyIndex: { types = { SchemePlanManager::IndexSystem, SchemePlanManager::ImportWeightData, SchemePlanManager::OptimizeIndex, SchemePlanManager::CalculateWeight, SchemePlanManager::ImportEvalData, SchemePlanManager::RunEvaluate, SchemePlanManager::ShowEvalResult, SchemePlanManager::GenerateReport }; break; } } QList schemes; for (int i = 0; i < types.count(); i++) { SchemePlanManager::SchemeProcessInfo process; process.projectId = projId; process.indexType = indexType; process.type = types[i]; process.step = i; schemes.append(process); } return schemes; } void SchemeFlowWidget::initWidget() { m_graphModel = new DataFlowModel(registerDataModels()); m_graphModel->setNodesLocked(true); m_graphModel->setDetachPossible(false); auto scene = new DataFlowGraphicsScene(*m_graphModel); GraphicsView *view = new GraphicsView(scene); scene->setOrientation(Qt::Vertical); QHBoxLayout *l = new QHBoxLayout(this); l->addWidget(view); } void SchemeFlowWidget::clearAllNodes() { for (int id : m_graphModel->allNodeIds()) { m_graphModel->deleteNode(id); } } void SchemeFlowWidget::refresh() { clearAllNodes(); int y = 0; // 流程图节点位置 int space = 50; // 流程图节点间距 NodeId lastId = -1; QList scheme = schemeTemplate(m_proj->id, m_indexType); for (int i = 0; i < scheme.count(); i++) { NodeId id = m_graphModel->addNode(FlowCommonData().type().id); m_graphModel->setNodeData(id, NodeRole::Position, QPointF(0, y)); FlowGraphCommonNodeWidget *w = new FlowGraphCommonNodeWidget(); connect(w, &FlowGraphCommonNodeWidget::sigProcessChanged, this, &SchemeFlowWidget::slotSchemeProcessEdited); SchemePlanManager::SchemeProcessInfo process = scheme[i]; w->setProcess(process); if (w->isTitleHidden()) { m_graphModel->setNodeData(id, NodeRole::Caption, SchemePlanManager::processName(process)); } m_graphModel->setNodeData(id, NodeRole::Widget, QVariant::fromValue(w)); if (lastId >= 0) { m_graphModel->addConnection(ConnectionId { lastId, 0, id, 0 }); } QSize s = m_graphModel->nodeData(id, NodeRole::Size).toSize(); y += (s.height() + space); lastId = id; } } void SchemeFlowWidget::slotSchemeProcessEdited(const SchemePlanManager::SchemeProcessInfo &process) { qDebug() << __FUNCTION__ << __LINE__ << process.algorithm << endl; }