Explorar o código

方案流程图编辑与交互

chengxr hai 1 ano
pai
achega
e375bcfef9

+ 1 - 1
QFD/common/SchemePlanManager.h

@@ -97,7 +97,7 @@ public:
         Algorithm algorithm = NoAlg;
 
         /// 效能分级, 选择灰色聚类算法计算效能评估时用到
-        int efficiencyGrades = 0;
+        int efficiencyGrades = 4;
 
         bool isOptional;         // 是否可以选择执行, 这个字段要删掉
         bool isChecked = false;  // 是否选择了执行

+ 43 - 3
QFD/shemeFlow/FlowGraphNodeWidget.cpp

@@ -1,6 +1,7 @@
 #include "FlowGraphNodeWidget.h"
 
 #include "SchemePlanManager.h"
+#include "ProjectManager.h"
 
 #include <QBoxLayout>
 #include <QLabel>
@@ -95,6 +96,7 @@ FlowGraphSpinNodeWidget::FlowGraphSpinNodeWidget(QWidget *parent) : FlowGraphNod
 FlowGraphCommonNodeWidget::FlowGraphCommonNodeWidget(QWidget *parent) : QWidget(parent)
 {
     initWidget();
+    connectSignalsAndSlots();
 }
 
 SchemePlanManager::SchemeProcessInfo FlowGraphCommonNodeWidget::process() const
@@ -102,7 +104,7 @@ SchemePlanManager::SchemeProcessInfo FlowGraphCommonNodeWidget::process() const
     return m_process;
 }
 
-void FlowGraphCommonNodeWidget::setProcess(const SchemePlanManager::SchemeProcessInfo &i)
+void FlowGraphCommonNodeWidget::setProcess(SchemePlanManager::SchemeProcessInfo &i)
 {
     m_process = i;
     loadInfo();
@@ -140,6 +142,15 @@ void FlowGraphCommonNodeWidget::initWidget()
     m_layout->addWidget(m_checkBox);
 }
 
+void FlowGraphCommonNodeWidget::connectSignalsAndSlots()
+{
+    connect(m_algCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(slotAlgComboChanged(int)));
+    connect(m_dataCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(slotDataComboChanged(int)));
+    connect(m_spinBox, SIGNAL(valueChanged(int)), this, SLOT(slotSpinBoxChanged(int)));
+    connect(m_spinBox, SIGNAL(valueChanged(int)), this, SLOT(slotSpinBoxChanged(int)));
+    connect(m_checkBox, &QCheckBox::stateChanged, this, &FlowGraphCommonNodeWidget::slotCheckBoxChanged);
+}
+
 void FlowGraphCommonNodeWidget::loadInfo()
 {
     QList<SchemePlanManager::Algorithm> algs        = optionalAlgs();
@@ -180,7 +191,10 @@ void FlowGraphCommonNodeWidget::loadInfo()
     m_checkBox->setChecked(m_process.isChecked);
 
     /// 效能分级组件
-    m_spinBox->setHidden(m_process.algorithm != SchemePlanManager::GCE);
+
+    m_spinBox->setHidden(m_process.indexType != ProjectManager::EfficiencyIndex
+                         || m_process.type != SchemePlanManager::RunEvaluate);
+    m_spinBox->setEnabled(m_process.algorithm == SchemePlanManager::GCE);
     m_spinBox->setValue(m_process.efficiencyGrades);
 }
 
@@ -203,5 +217,31 @@ QList<SchemePlanManager::SchemeDataSource> FlowGraphCommonNodeWidget::optionaldS
 bool FlowGraphCommonNodeWidget::isOptional() const
 {
     return SchemePlanManager::processIsOptional(m_process);
-    ;
+}
+
+void FlowGraphCommonNodeWidget::slotAlgComboChanged(int index)
+{
+    QList<SchemePlanManager::Algorithm> list = optionalAlgs();
+    m_process.algorithm                      = list.at(index);
+    m_spinBox->setEnabled(m_process.algorithm == SchemePlanManager::GCE);
+    emit sigProcessChanged(m_process);
+}
+
+void FlowGraphCommonNodeWidget::slotDataComboChanged(int index)
+{
+    QList<SchemePlanManager::SchemeDataSource> list = optionaldSource();
+    m_process.dSource                               = list.at(index);
+    emit sigProcessChanged(m_process);
+}
+
+void FlowGraphCommonNodeWidget::slotSpinBoxChanged(int value)
+{
+    m_process.efficiencyGrades = value;
+    emit sigProcessChanged(m_process);
+}
+
+void FlowGraphCommonNodeWidget::slotCheckBoxChanged()
+{
+    m_process.isChecked = m_checkBox->isChecked();
+    emit sigProcessChanged(m_process);
 }

+ 12 - 1
QFD/shemeFlow/FlowGraphNodeWidget.h

@@ -91,13 +91,18 @@ public:
 
     SchemePlanManager::SchemeProcessInfo process() const;
 
-    void setProcess(const SchemePlanManager::SchemeProcessInfo &i);
+    void setProcess(SchemePlanManager::SchemeProcessInfo &i);
 
     bool isTitleHidden() const;
 
+signals:
+    void sigProcessChanged(SchemePlanManager::SchemeProcessInfo process);
+
 protected:
     void initWidget();
 
+    void connectSignalsAndSlots();
+
     void loadInfo();
 
     QString title() const;
@@ -105,6 +110,12 @@ protected:
     QList<SchemePlanManager::SchemeDataSource> optionaldSource() const;
     bool isOptional() const;
 
+protected slots:
+    void slotAlgComboChanged(int index);
+    void slotDataComboChanged(int index);
+    void slotSpinBoxChanged(int value);
+    void slotCheckBoxChanged();
+
 private:
     SchemePlanManager::SchemeProcessInfo m_process;
 

+ 41 - 32
QFD/widgets/SchemeFlowWidget.cpp

@@ -109,44 +109,17 @@ void SchemeFlowWidget::setType(int t)
     refresh();
 }
 
-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()
+QList<SchemePlanManager::SchemeProcessType> SchemeFlowWidget::schemeTemplate(int indexType)
 {
-    for (int id : m_graphModel->allNodeIds()) {
-        m_graphModel->deleteNode(id);
-    }
-}
-
-void SchemeFlowWidget::refresh()
-{
-    clearAllNodes();
-
-    int y         = 0;
-    int space     = 50;
-    NodeId lastId = -1;
+    /// 方案流程模板
     QList<SchemePlanManager::SchemeProcessType> scheme;
-
-    switch (m_indexType) {
+    switch (indexType) {
     case ProjectManager::AbilityIndex: {
         scheme = { SchemePlanManager::IndexSystem,    SchemePlanManager::ImportWeightData,
                    SchemePlanManager::OptimizeIndex,  SchemePlanManager::CalculateWeight,
                    SchemePlanManager::ShowEvalResult, SchemePlanManager::GenerateReport };
         break;
     }
-
     case ProjectManager::TechIndex: {
         scheme = { SchemePlanManager::IndexSystem, SchemePlanManager::ImportEvalData, SchemePlanManager::RunEvaluate,
                    SchemePlanManager::ShowEvalResult, SchemePlanManager::GenerateReport };
@@ -168,10 +141,44 @@ void SchemeFlowWidget::refresh()
     }
     }
 
+    return scheme;
+}
+
+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<SchemePlanManager::SchemeProcessType> scheme = schemeTemplate(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;
         process.projectId = m_proj->id;
         process.indexType = m_indexType;
@@ -191,7 +198,9 @@ void SchemeFlowWidget::refresh()
 
         lastId = id;
     }
+}
 
-    //    std::unordered_set<NodeId> set = m_graphModel->allNodeIds();
-    //    for (auto iter = set.begin(); iter != set.end(); ++iter) { }
+void SchemeFlowWidget::slotSchemeProcessEdited(SchemePlanManager::SchemeProcessInfo process)
+{
+    qDebug() << __FUNCTION__ << __LINE__ << process.algorithm << endl;
 }

+ 7 - 0
QFD/widgets/SchemeFlowWidget.h

@@ -3,6 +3,8 @@
 
 #include <QWidget>
 
+#include "SchemePlanManager.h"
+
 #include <shemeFlow/DataFlowModel.h>
 #include <shemeFlow/FlowGraphModel.h>
 #include <shemeFlow/DataFlowModel.h>
@@ -44,6 +46,8 @@ public:
 
     void setType(int t);
 
+    static QList<SchemePlanManager::SchemeProcessType> schemeTemplate(int indexType);
+
 signals:
 
 private:
@@ -53,6 +57,9 @@ private:
 
     void refresh();
 
+private slots:
+    void slotSchemeProcessEdited(SchemePlanManager::SchemeProcessInfo process);
+
 private:
     ProjectInfo *m_proj = nullptr;
     int m_indexType     = 0;