#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),true:Enabled false:disabled /// @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& 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& 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 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; };