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/Include/mGui/mSubWndAna/iSubWndAnalDn.h

187 lines
5.3 KiB
C

#pragma once
#include "iSubWndAnal.h"
#include "mSubWndAna_global.h"
class iWxModelOption;
class iWxModelParameter;
class iAlgModelBase;
class iParaManager;
class iWxWmDataPF;
class ZxTableModel;
class iWxTime;
class iWxSaveDnPF;
class iAlgFitBase;
class M_SUB_WND_ANA_EXPORT iSubWndAnalDn : public iSubWndAnal
{
Q_OBJECT
public:
explicit iSubWndAnalDn(QWidget *parent = 0, QString sExt = "");
~iSubWndAnalDn();
// 配置窗体
virtual void configWnd(QString sPrevInfo);
virtual void loadData(QString sWell = ""); //加载数据
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
// 保存加载
virtual bool loadRsts();
virtual bool saveRsts();
// 由子窗体创建RunOption
virtual iWxRunOptionStd* buildWxRunOption();
// 模型和参数窗口
virtual void showOrHideModels();
virtual void showOrHideParameters();
// 执行命令通常来自Ribbon
virtual bool runCmdBy(QString sName, QString sID);
/// @brief 命令是否Enabled的状态判断通常来自Ribbon
/// @param b (out)trueEnabled falsedisabled
/// @param sName (in),Cmd Name
/// @param nID (in),Cmd ID
/// @param bLicensed (in),当前是否有授权
/// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令)
virtual bool checkCmdEnable(bool &b, \
QString sName, int nID, \
bool bLicensed);
// 在弹出对话框后判断是否试井设计,并进行相应处理
virtual void adjustByPossibleDn(iSubWndBaseFit* pWndFitting);
// TODO 该函数有待进一步优化
virtual bool buildAlgModel(iModelOption* pModelOption, \
bool bReset = true, \
bool bSetParas = true);
// 具体的创建算法载体
virtual void createAlgModel(ModelSeriesType o, AlgModelSrc ams, \
iModelOption* pModelOption);
/// @brief 收集多层相关的一些乱七八糟的信息,包括模型选项、边界类型、每条边的定压还是封闭等等。
/// @param map 收集的结果
/// @param bClearOlds 是否清空
/// @note 对于通用的,直接用标识,对于层内的添加层标识
bool collectFuzzyMLs(QMap<QString, QVariant>& map, \
bool bClearOlds = false);
// 对于流动段,在此处考虑模拟选中最后一个流动段
// 有判断条件的情况下TODO 20240819
virtual void simuHitLastSeg(); //模拟点击最后一个流动段
virtual void setAnalRun(iAnalRun* pAnalRun, bool bFuzzyPit = false);
signals:
protected:
// 初始化UI
virtual QWidget* initUiMainWx();
virtual void initUiDockWxs();
// 执行命令:通常来自图形右侧/左侧的工具栏
virtual bool runActionOf(QString sAction);
// 重新调整工具栏
virtual void reAdjustToolbar(QToolBar*);
// 刷新
void updatePlots();
// 切换方向后,刷新
void freshByRadioQP(bool bP2Q,
bool bByTableChange,
VVecDouble& vvec);
bool getCurveDescByName(QString s, iCurveDesc& o);
// 开始调用算法计算
bool runCalQP(bool bP2Q);
bool checkDataInputs(VecDouble &vecInputT,
VecDouble &vecInputV); //计算前的系列监测
bool checkOption();
bool checkAlgo();
bool checkParas();
bool checkTime();
bool dealwithResults(VecDouble &vecT,
VecDouble &vecV,
bool bP2Q); //结果处理
// 为西安等准备PVT相关需要添加则添加不需要则清除
bool fuzzyCmParaAbouts(QMap<QString, double>& mapParas/*, bool bAppend*/);
//设置时间步长
bool getTimeSteps(double &dMin,double &dMax);
// 算法类关联信号
virtual void buildAlgSignals();
// 是否正确支持的模型
virtual bool isModelSupported(iModelOption* p);
//设置刷新图
void freshCharts();
public slots:
// 调整主体布局
virtual void slotAdjustPlotPFUis(QSplitter* p);
// 调整左侧表格工具栏
virtual void slotAdjustLeftTableToolBar(QToolBar*&);
// 左侧表格数据改变(输入)
void slotWxTableDataPfChanged(VVecDouble& vvec);
//
void slotClickedQP();
void slotRunQP();
void slotTime();
void slotResultSave();
virtual void slotThreadFinished();
public:
virtual zxAlgThread* getSubThread(zxAlgThread* p);
protected:
QRadioButton* m_pRadioQ2P;
QRadioButton* m_pRadioP2Q;
QPushButton* m_pPbRunQP;
// 新加
iDockBaseWx* m_pWxDockModelOption; //模型选择
iDockBaseWx* m_pWxDockModelParameter; //模型参数
iWxModelOption* m_pWxModelOption; //
iWxModelParameter* m_pWxModelParameter;
iModelOption* m_pModelOption;
// 数据
QVector<iCurveDesc> m_vecCurveDesc;
iWxWmDataPF* m_pWxDataInput; //左侧表格
iWxWmDataPF* m_pWxDataOutputF;//结果表
iWxWmDataPF* m_pWxDataOutputP;
iDockBaseWx* m_pWxDockOutputF;
iDockBaseWx* m_pWxDockOutputP;
QString m_sInputGaugeCode; //输入部分数据Code如果有的话
iWxSaveDnPF* m_pWxSaveDnPF; //结果保存的选项
iWxTime* m_pWxTimeScales;
iAlgFitBase* m_pFit;
};