diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 7c15864..6551396 100644 Binary files a/Bin/Config/Lang/cn/nmNum_cn.qm and b/Bin/Config/Lang/cn/nmNum_cn.qm differ diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index 3516394..0c7177c 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -5066,8 +5066,12 @@ Please check your input coordinates. 当前井: - Current model - 当前模型 + Current model: + 当前模型: + + + Model selection + 模型选择 Oil single-phase constant pvt diff --git a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h index 37898e9..b63c9b7 100644 --- a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h +++ b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h @@ -71,6 +71,8 @@ signals: void onOutputResultFieldsToggled(bool checked); // 查看井结果下拉框切换槽 void onResultWellChanged(int index); + // 当前模型下拉框切换槽 + void onCurrentModelChanged(int index); // 处理时间参考系单选按钮切换 //void onTimeReferenceSystemToggled(bool checked); @@ -123,9 +125,10 @@ private: QComboBox* m_pResultWellCombo; bool m_bFillingResultWellCombo; - // 当前模型显示 + // 当前模型切换控件 QGroupBox* m_pCurrentModelGroup; - QLabel* m_pCurrentModelValueLabel; + QComboBox* m_pCurrentModelCombo; + bool m_bFillingCurrentModelCombo; // 输出组组件 (新) QGroupBox* m_pOutputGroup; // 输出分组框 diff --git a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp index aa693e3..008dfbb 100644 --- a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp +++ b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp @@ -70,8 +70,9 @@ nmWxNumericalDesign::nmWxNumericalDesign(QWidget *parent) m_pResultWellGroup = nullptr; m_pResultWellCombo = nullptr; m_pCurrentModelGroup = nullptr; - m_pCurrentModelValueLabel = nullptr; + m_pCurrentModelCombo = nullptr; m_bFillingResultWellCombo = false; + m_bFillingCurrentModelCombo = false; // 初始化图标路径 m_sIconDir = QCoreApplication::applicationDirPath(); @@ -189,38 +190,74 @@ void nmWxNumericalDesign::initResultWellGroup() m_pResultWellGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); } -// 显示当前模型名 +// 初始化当前模型切换控件 void nmWxNumericalDesign::initCurrentModelGroup() { - m_pCurrentModelGroup = new QGroupBox(tr("Current model"), this); + m_pCurrentModelGroup = new QGroupBox(tr("Model selection"), this); QGridLayout* pGridLayout = new QGridLayout(m_pCurrentModelGroup); - m_pCurrentModelValueLabel = new QLabel(this); - m_pCurrentModelValueLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); - m_pCurrentModelValueLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + QLabel* pCurrentModelLabel = new QLabel(tr("Current model:"), this); + m_pCurrentModelCombo = new QComboBox(this); + updateCurrentModelDisplay(); - pGridLayout->addWidget(m_pCurrentModelValueLabel, 0, 0); - pGridLayout->setColumnStretch(0, 1); + pGridLayout->addWidget(pCurrentModelLabel, 0, 0, Qt::AlignLeft); + pGridLayout->addWidget(m_pCurrentModelCombo, 0, 1); + pGridLayout->setColumnStretch(0, 0); + pGridLayout->setColumnStretch(1, 1); m_pCurrentModelGroup->setLayout(pGridLayout); m_pCurrentModelGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); } -// 按当前成果对应的数据管理器刷新模型名 +// 按当前成果对应的数据管理器刷新模型下拉框选中项 void nmWxNumericalDesign::updateCurrentModelDisplay() { - if(m_pCurrentModelValueLabel == nullptr) { + if(m_pCurrentModelCombo == nullptr) { return; } + m_bFillingCurrentModelCombo = true; + m_pCurrentModelCombo->clear(); + nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getCurrentInstance(); if(pManager == nullptr) { - m_pCurrentModelValueLabel->clear(); + m_pCurrentModelCombo->setEnabled(false); + m_bFillingCurrentModelCombo = false; return; } - m_pCurrentModelValueLabel->setText(solverModelDisplayName(pManager->getSolverModelType())); + // 根据储层相态过滤可选模型类型 + nmDataReservoir* pReservoir = pManager->getReservoirData(); + NM_PHASE_TYPE ePhase = (pReservoir != nullptr) ? pReservoir->getPhaseType() : PHASE_UNKNOWN; + NM_SOLVER_MODEL_TYPE eCurrentType = pManager->getSolverModelType(); + + switch(ePhase) { + case PHASE_Oil: + m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Oil_ConstPvt), SMT_Oil_ConstPvt); + m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Oil_VariablePvt), SMT_Oil_VariablePvt); + break; + case PHASE_Water: + m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Water_ConstPvt), SMT_Water_ConstPvt); + m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Water_VariablePvt), SMT_Water_VariablePvt); + break; + case PHASE_Gas: + m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Gas_VariablePvt), SMT_Gas_VariablePvt); + break; + case PHASE_Oil_Water: + m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Oil_Water_TwoPhase), SMT_Oil_Water_TwoPhase); + break; + default: + break; + } + + int nIndex = m_pCurrentModelCombo->findData(eCurrentType); + if(nIndex >= 0) { + m_pCurrentModelCombo->setCurrentIndex(nIndex); + } + + m_pCurrentModelCombo->setEnabled(true); + m_bFillingCurrentModelCombo = false; } // 按参与计算井刷新下拉框 @@ -684,6 +721,7 @@ void nmWxNumericalDesign::setupConnections() // 连接生成按钮的点击信号到槽函数 connect(m_pGenerateButton, SIGNAL(clicked()), this, SLOT(onGenerateClicked())); connect(m_pResultWellCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onResultWellChanged(int))); + connect(m_pCurrentModelCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentModelChanged(int))); // 主选项组连接 // 连接齿轮图标按钮的槽函数 @@ -787,6 +825,25 @@ void nmWxNumericalDesign::onResultWellChanged(int index) emit sigResultWellChanged(sWellName); } +// 当前模型下拉框切换槽,将用户选择的模型类型同步到数据管理器 +void nmWxNumericalDesign::onCurrentModelChanged(int index) +{ + if(m_bFillingCurrentModelCombo || index < 0 || m_pCurrentModelCombo == nullptr) { + return; + } + + NM_SOLVER_MODEL_TYPE eType = static_cast( + m_pCurrentModelCombo->itemData(index).toInt()); + if(eType <= 0) { + return; + } + + nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getCurrentInstance(); + if(pManager != nullptr) { + pManager->setSolverModelType(eType); + } +} + void nmWxNumericalDesign::onGenerateClicked() { updateDataFromUi();