#pragma once #include "mAlgDefines.h" //#include "iLayerTableModel.h" #include "iWxDataBasic.h" #include "mGuiAnal_global.h" namespace Ui { class iWxDataBasicEx; } class ZxTableView; class ZxTableModel; class tLayerDesc; struct LayerData; // 分析:第一步 class M_GUI_ANAL_EXPORT iWxDataBasicEx : public iWxDataBasic { Q_OBJECT public: explicit iWxDataBasicEx(/*QString sFluid, */QWidget *parent = 0); ~iWxDataBasicEx(); virtual void initUI(); // 外部传入 名称 void setName(QString s); QString getName(); // 类型 // 测试类型 virtual QString getTestType(); virtual PvtTestType getTestTypeEx(); // 获取 相态选项 PvtFluidType getPhasePft(); QString getPhasePftDesc(); // 流体性质 virtual QString getBasicMainPft(); virtual bool isPhaseS(); int getLayerCount(); public: // 类似clone virtual void copyFrom(ZxUiBase* p); // 序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); // 新增接口(与一个数据对象体进行绑定式关联) virtual bool saveAsDataObj(ZxDataObject*& pDataObj); virtual bool loadFromDataObj(ZxDataObject*& pDataObj); // 返回名称标识 virtual QString getAwiName(); public: // 在导航模式下,点击下一步时,先判断本步是否正确 //virtual bool verifyCurInfos(QString& sLog); // 在导航模式下,点击下一步时,先判断本步是否正确 virtual bool checkCurWxInputs(); protected: virtual void paintEvent(QPaintEvent *); public slots: // 与sigPrevWxValueOf对应 virtual void slotValueToNextWx(QStringList& listParas, QMap& map); // 外部:返回分析名称 virtual void slotGetAnalTag(QString& s); // 测试类型发生改变 void slotTestTypeClicked(int nIndex); #ifdef _SCAN_OLD_CODES_ void slotRadioStandardClicked(bool bCheck); void slotRadioInterfereClicked(bool bCheck); void slotRadioMiniFracClicked(bool bCheck); //这个只有水 void slotRadioMultiLayersClicked(bool bCheck); //多层 void slotRadioWDTClicked(bool bCheck);//产能 // 常规、特殊、状态方程 的 相态(主)改变 void slotFluidMainOptionClicked(int nIndex); #endif // 单相多相改变 void slotPhaseSmClicked(int nIndex); // 粘贴表格,只是为了刷新 virtual void slotResDataPasted(QModelIndex indexTopLeft, QModelIndex indexBottomRight); void slotFuzzyPhasesChanged(const QString& text); private slots: // 各个相态(子项)Click void on_cbxOil_clicked(); void on_cbxGas_clicked(); void on_cbxWater_clicked(); void on_cbxCondense_clicked(); void on_cbxPF_clicked(); void on_cbxCO2_clicked(); void on_btnMultiLayer_clicked(); private: virtual void initUI_ResTable(); // 初始储层数据获取 VVecVariant getDefaultResData(int nMinRowCount = 1); void fillResTableData(VVecVariant& vvec); void makesureResDataOfML(); /// @brief 建立关联(储层Res表格数据与载体m_vecLayerDescs) /// @param bRes2Layer true:下侧储层Res表格数据改变,触发m_vecLayerDescs调整 /// false: m_vecLayerDescs改变,触发下侧储层Res表格数据刷新 void makesureLayerAbouts(bool bRes2Layer); void reCalLayerRatios(); /// @brief 根据左侧测试类型,决定当前的默认选项 /// @param bPhaseS 默认是单相还是多相 /// @param bPhaseSingleAllowed 是否支持单相相 /// @param bPhaseMultiAllowed 是否支持多相 /// @param vecCbxChecked 默认勾选 /// @param vecCbxAlloweds 可以勾选的 void checkDefaultOptions(bool& bPhaseS, bool& bPhaseSingleAllowed, \ bool& bPhaseMultiAllowed, \ QVector& vecCbxChecked, \ QVector& vecCbxAlloweds); public: virtual void runResDataChanged(); #ifdef _SCAN_OLD_CODES_ // 测试类型发生改变的具体响应处理 void onTestTypeChanged(bool bNotMiniFrac); #endif // 各个相态(子项)Click后的具体响应处理 void onFluidTypeChanged(PvtFluidClass opMain, PvtFluidType opSub, QCheckBox* pCbx); // 处理互斥部分,比如:油、气 与 凝析气 是互斥的 void _adjustExclusives(PvtFluidClass opMain, PvtFluidType opSub, QCheckBox* pCbx); // 当前选择了哪些子项(把枚举变为int返回) PvtFluidType _collectCheckedItems(); // 单相/多相切换后,更改PftOption void onSmTypeChanged(bool bPhaseS); void changeCbxState(QCheckBox* pCbx, bool bChecked, bool bEnabled); void changeRadioState(QRadioButton* pRadio, bool bChecked, bool bEnabled); // 释放 void releaseLayerDescs(); // 收集 void cacheLayerDescs(QList& listData, bool bClearOlds = true); signals: /// @brief 当相态(主或子项)发生改变触发 /// @param nMain 主,常规/非常规/状态方程 /// @param nSubTypes 子项,油/气/水/凝析/CO2/PF,以(int/枚举)传递,外部进行解析 //void sigOptionFluidChanged(int nMain, int nSubTypes); /// @brief 当勾选多层或者多层数据修改了,则触发 void sigMultiLayerOptionChanged(); public slots: /// @brief 返回 void slotGetMultiLayerOptions(bool& bMultiLayer, QVector* ptrVecDescs); #ifdef _SCAN_OLD_CODES_ // 层对话框传递内容,为保持AI相关代码的一致性,保留QList void slotLayerInfoOK(QList& listData); #endif public: // 与ExtCustom相关内容 void adjustUiByExtCustom(); void freshStateWithExtCustom(bool bPhaseS); private: Ui::iWxDataBasicEx *ui; bool m_bExtCustom; //内部变量不涉及序列化,只是为了处理方便 QVector m_vecLayerDescs; //多层信息 };