|
|
|
@ -380,6 +380,48 @@ void nmSubWndUtils::connectWellListSignals(nmDataAnalyzeManager* pDataManager,
|
|
|
|
static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection));
|
|
|
|
static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void nmSubWndUtils::setupNumericalDockWidgets(nmDataAnalyzeManager* pDataManager,
|
|
|
|
|
|
|
|
nmSubWndMain* pSubWndMain,
|
|
|
|
|
|
|
|
iDockBaseWx* pWxDockNm1,
|
|
|
|
|
|
|
|
iDockBaseWx* pWxDockNm2)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Q_ASSERT(pDataManager != nullptr);
|
|
|
|
|
|
|
|
Q_ASSERT(pSubWndMain != nullptr);
|
|
|
|
|
|
|
|
Q_ASSERT(pWxDockNm1 != nullptr);
|
|
|
|
|
|
|
|
Q_ASSERT(pWxDockNm2 != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pWxDockNm1->setWindowTitle(tr("Generate numerical model"));
|
|
|
|
|
|
|
|
pWxDockNm2->setWindowTitle(tr("Parameters"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 参数面板绑定数据管理器后再重建,确保首次显示使用当前分析数据。
|
|
|
|
|
|
|
|
nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign();
|
|
|
|
|
|
|
|
nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi();
|
|
|
|
|
|
|
|
pParaWx->initUI();
|
|
|
|
|
|
|
|
pParaWx->setDataManager(pDataManager);
|
|
|
|
|
|
|
|
pParaWx->rebuildAllParas();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 保持界面编辑与底层属性变化双向同步。
|
|
|
|
|
|
|
|
nmAttrRegistry* pReg = pDataManager->getAttrRegistry();
|
|
|
|
|
|
|
|
if (pReg != nullptr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)),
|
|
|
|
|
|
|
|
pReg, SLOT(setValue(QString, QVariant)));
|
|
|
|
|
|
|
|
connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)),
|
|
|
|
|
|
|
|
pParaWx, SLOT(slotSetParaValue(QString, QVariant)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 数值设计面板只发出操作请求,具体处理仍由主窗口完成。
|
|
|
|
|
|
|
|
connect(pAnalWx, SIGNAL(sigGenerateClicked()),
|
|
|
|
|
|
|
|
pSubWndMain, SLOT(onGenerateButtonClicked()));
|
|
|
|
|
|
|
|
connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)),
|
|
|
|
|
|
|
|
pSubWndMain, SLOT(onWellSelected(QString)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connectWellListSignals(pDataManager, pParaWx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pWxDockNm1->setWidget(pAnalWx);
|
|
|
|
|
|
|
|
pWxDockNm2->setWidget(pParaWx);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
|
|
|
|
bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
iSubWndFitting* pSubWndF = dynamic_cast<iSubWndFitting*>(pSubWnd);
|
|
|
|
iSubWndFitting* pSubWndF = dynamic_cast<iSubWndFitting*>(pSubWnd);
|
|
|
|
@ -600,56 +642,8 @@ bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
|
|
|
|
ZxMainWindow* pMainWnd = pSubWndF->getMainWindow();
|
|
|
|
ZxMainWindow* pMainWnd = pSubWndF->getMainWindow();
|
|
|
|
// 设置当前窗口到Map
|
|
|
|
// 设置当前窗口到Map
|
|
|
|
pSubWndMain->setMainWindow(pMainWnd);
|
|
|
|
pSubWndMain->setMainWindow(pMainWnd);
|
|
|
|
|
|
|
|
setupNumericalDockWidgets(pDataManager, pSubWndMain,
|
|
|
|
pWxDockNm1->setWindowTitle(tr("Generate numerical model")); //改变Title
|
|
|
|
pWxDockNm1, pWxDockNm2);
|
|
|
|
pWxDockNm2->setWindowTitle(tr("Parameters"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//QTextEdit* pWx1 = new QTextEdit("This is demo for upper");
|
|
|
|
|
|
|
|
//QTextEdit* pWx2 = new QTextEdit("This is demo for lower");
|
|
|
|
|
|
|
|
nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign();
|
|
|
|
|
|
|
|
nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi();
|
|
|
|
|
|
|
|
pParaWx->initUI();
|
|
|
|
|
|
|
|
pParaWx->setDataManager(pDataManager);
|
|
|
|
|
|
|
|
pParaWx->rebuildAllParas();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 通过 nmAttrRegistry 批量读取储层参数初始化UI(替代逐个 getter 调用)
|
|
|
|
|
|
|
|
nmAttrRegistry* pReg = pDataManager->getAttrRegistry();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 双向同步连接:UI→Data
|
|
|
|
|
|
|
|
if (pReg != nullptr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)),
|
|
|
|
|
|
|
|
pReg, SLOT(setValue(QString, QVariant)));
|
|
|
|
|
|
|
|
// Data→UI
|
|
|
|
|
|
|
|
connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)),
|
|
|
|
|
|
|
|
pParaWx, SLOT(slotSetParaValue(QString, QVariant)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 建立求解调用连接
|
|
|
|
|
|
|
|
connect(pAnalWx, SIGNAL(sigGenerateClicked()),
|
|
|
|
|
|
|
|
pSubWndMain, SLOT(onGenerateButtonClicked()));
|
|
|
|
|
|
|
|
// 切换查看井结果时刷新曲线窗口
|
|
|
|
|
|
|
|
connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)),
|
|
|
|
|
|
|
|
pSubWndMain, SLOT(onWellSelected(QString)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 建立更新参数栏连接
|
|
|
|
|
|
|
|
//connect(pAnalWx, SIGNAL(sigIncludeWells()),
|
|
|
|
|
|
|
|
// pParaWx, SLOT(onUpdate()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 井图元更新连接
|
|
|
|
|
|
|
|
// connect(pAnalWx, SIGNAL(sigUpdateWellPlot(nmDataAnalyzeManager*)),
|
|
|
|
|
|
|
|
// pSubWndMain, SLOT(slotUpdateWellPlotByDataManager(nmDataAnalyzeManager*)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// QTextEdit* pWx1 = new CustomParaWx("This is demo for upper");
|
|
|
|
|
|
|
|
// pWx1->...
|
|
|
|
|
|
|
|
// 建立井列表变化与参数面板的刷新连接
|
|
|
|
|
|
|
|
connectWellListSignals(pDataManager, pParaWx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Q_ASSERT(nullptr != pAnalWx);
|
|
|
|
|
|
|
|
Q_ASSERT(nullptr != pParaWx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pWxDockNm1->setWidget(pAnalWx);
|
|
|
|
|
|
|
|
pWxDockNm2->setWidget(pParaWx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true; //your own codes
|
|
|
|
return true; //your own codes
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -881,45 +875,8 @@ bool nmSubWndUtils::loadRsts(iSubWnd* pSubWnd, \
|
|
|
|
nmSubWndMain* pSubWndMain = new nmSubWndMain(NULL, "");
|
|
|
|
nmSubWndMain* pSubWndMain = new nmSubWndMain(NULL, "");
|
|
|
|
ZxMainWindow* pMainWnd1 = const_cast<ZxMainWindow*>(pMainWnd);
|
|
|
|
ZxMainWindow* pMainWnd1 = const_cast<ZxMainWindow*>(pMainWnd);
|
|
|
|
pSubWndMain->setMainWindow(pMainWnd1);
|
|
|
|
pSubWndMain->setMainWindow(pMainWnd1);
|
|
|
|
|
|
|
|
setupNumericalDockWidgets(pDataManager, pSubWndMain,
|
|
|
|
//pWxDockNm1->setWindowTitle(tr("Dock1's Title"));
|
|
|
|
pWxDockNm1, pWxDockNm2);
|
|
|
|
//pWxDockNm2->setWindowTitle(tr("Dock2's Title"));
|
|
|
|
|
|
|
|
pWxDockNm1->setWindowTitle(tr("Generate numerical model")); //改变Title
|
|
|
|
|
|
|
|
pWxDockNm2->setWindowTitle(tr("Parameters"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign();
|
|
|
|
|
|
|
|
nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi();
|
|
|
|
|
|
|
|
pParaWx->initUI();
|
|
|
|
|
|
|
|
pParaWx->setDataManager(pDataManager);
|
|
|
|
|
|
|
|
pParaWx->rebuildAllParas();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nmAttrRegistry* pReg = pDataManager->getAttrRegistry();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 建立求解调用连接
|
|
|
|
|
|
|
|
connect(pAnalWx, SIGNAL(sigGenerateClicked()),
|
|
|
|
|
|
|
|
pSubWndMain, SLOT(onGenerateButtonClicked()));
|
|
|
|
|
|
|
|
// 切换查看井结果时刷新曲线窗口
|
|
|
|
|
|
|
|
connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)),
|
|
|
|
|
|
|
|
pSubWndMain, SLOT(onWellSelected(QString)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 双向同步连接
|
|
|
|
|
|
|
|
if (pReg != nullptr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)),
|
|
|
|
|
|
|
|
pReg, SLOT(setValue(QString, QVariant)));
|
|
|
|
|
|
|
|
connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)),
|
|
|
|
|
|
|
|
pParaWx, SLOT(slotSetParaValue(QString, QVariant)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 井图元更新连接
|
|
|
|
|
|
|
|
// connect(pAnalWx, SIGNAL(sigUpdateWellPlot(nmDataAnalyzeManager*)),
|
|
|
|
|
|
|
|
// pSubWndMain, SLOT(slotUpdateWellPlotByDataManager(nmDataAnalyzeManager*)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 建立井列表变化与参数面板的刷新连接
|
|
|
|
|
|
|
|
connectWellListSignals(pDataManager, pParaWx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pWxDockNm1->setWidget(pAnalWx);
|
|
|
|
|
|
|
|
pWxDockNm2->setWidget(pParaWx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 判断是否保存了时间步数据
|
|
|
|
// 判断是否保存了时间步数据
|
|
|
|
if(!pDataManager->isTimeStepDataEmpty()) {
|
|
|
|
if(!pDataManager->isTimeStepDataEmpty()) {
|
|
|
|
|