You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Src/nmNum/nmSubWnd/nmPebiResultPageInstaller.cpp

93 lines
3.4 KiB
C++

#include "nmPebiResultPageInstaller.h"
#include "iSubWndFitting.h"
#include "nmDataAnalyzeManager.h"
#include "nmWxParaPropertyPebi.h"
#include "nmWxPebiResultViewWidget.h"
#include <QLayout>
#include <QLayoutItem>
#include <QString>
#include <QVBoxLayout>
#include <QWidget>
bool nmPebiResultPageInstaller::installOrSynchronize(
iSubWndFitting* pFitting,
nmDataAnalyzeManager* pManager)
{
// Manager 必须属于目标分析窗口,防止把另一分析的快照装入当前结果页。
if(pFitting == nullptr || pManager == nullptr ||
pManager->getGridType() != NM_Grid_PEBI ||
nmDataAnalyzeManager::findManagerByFitting(pFitting) != pManager) {
return false;
}
QString sErrorMessage;
QWidget* p3DPage = pFitting->getFitSubRstWxOf(
FSRT_Nm3D, true, &sErrorMessage);
QWidget* pResultPage = pFitting->getFitSubRstWxOf(
FSRT_NmRst, true, &sErrorMessage);
if(p3DPage == nullptr || pResultPage == nullptr) {
return false;
}
nmWxPebiResultViewWidget* pResultView =
p3DPage->findChild<nmWxPebiResultViewWidget*>();
if(pResultView == nullptr) {
// 首次安装时复用载体已有布局,只移除旧业务控件和布局项。
QLayout* p3DLayout = p3DPage->layout();
if(p3DLayout == nullptr) {
QVBoxLayout* pNewLayout = new QVBoxLayout(p3DPage);
pNewLayout->setContentsMargins(0, 0, 0, 0);
pNewLayout->setSpacing(0);
p3DLayout = pNewLayout;
} else {
QLayoutItem* pItem = nullptr;
while((pItem = p3DLayout->takeAt(0)) != nullptr) {
if(pItem->widget() != nullptr) {
delete pItem->widget();
}
delete pItem;
}
}
pResultView = new nmWxPebiResultViewWidget(
pManager, p3DPage);
p3DLayout->addWidget(pResultView);
} else {
// 相同 Manager 只同步;不同 Manager 由组合窗口完整清场后重新绑定。
pResultView->setDataManager(pManager);
}
nmWxParaPropertyPebi* pResultParameters =
pResultPage->findChild<nmWxParaPropertyPebi*>();
if(pResultParameters == nullptr) {
QLayout* pResultLayout = pResultPage->layout();
if(pResultLayout == nullptr) {
QVBoxLayout* pNewLayout = new QVBoxLayout(pResultPage);
pNewLayout->setContentsMargins(0, 0, 0, 0);
pNewLayout->setSpacing(0);
pResultLayout = pNewLayout;
} else {
QLayoutItem* pItem = nullptr;
while((pItem = pResultLayout->takeAt(0)) != nullptr) {
if(pItem->widget() != nullptr) {
delete pItem->widget();
}
delete pItem;
}
}
// 保持既有稳定顺序:先在可见布局外构建只读参数,再挂入页面。
pResultParameters = new nmWxParaPropertyPebi();
pResultParameters->initUI();
pResultParameters->setDataManager(pManager);
pResultParameters->rebuildResultParas();
pResultLayout->addWidget(pResultParameters);
return true;
}
// 参数页未监听快照状态信号,每次生产入口同步均需显式重建。
pResultParameters->setDataManager(pManager);
pResultParameters->rebuildResultParas();
return true;
}