#ifndef NMWXINCLUDEOTHERWELLS_H #define NMWXINCLUDEOTHERWELLS_H #include "nmSubWxs_global.h" #include "iDlgBase.h" #include "nmDataNumericalAnalysisCase.h" #include #include #include #include #include #include class nmDataAnalyzeManager; /** * @brief Include Other Wells 表格的一行候选井数据。 * @note 该结构只描述 Map 中其他有产量数值井,无产量观察井不会进入本表。 */ struct WellDataRow { QString m_sWellCode; ///< 项目唯一井编码,只用于关联,不直接显示。 QString m_sName; ///< 井显示名称,允许重名或后续修改。 bool m_bIsIncluded; ///< 是否被用户勾选为其他主动井。 bool m_bIsPrimary; ///< 主井防御标记;主井正常情况下不会进入本表。 bool m_bCanCalculate; ///< 当前井型和几何参数是否可进入 PEBI 模型。 NM_CASE_WELL_MODE m_eMode; ///< 本列表固定保存有产量主动井角色。 QString m_sOilProd; ///< 油产量列的摘要文本。 QString m_sGasProd; ///< 气产量列的摘要文本。 QString m_sWaterProd; ///< 水产量列的摘要文本。 QString m_sPressure; ///< 压力历史列的摘要文本。 /** @brief 初始化未勾选、不可计算的主动井候选行。 */ WellDataRow() : m_bIsIncluded(false), m_bIsPrimary(false), m_bCanCalculate(false), m_eMode(NM_CaseWell_RateControlled) { } /** @brief WellCode 有效且井型/几何可计算时允许用户勾选。 */ bool canCalculate() const { return m_bCanCalculate && !m_sWellCode.isEmpty(); } }; class NM_SUB_WXS_EXPORT nmWxIncludeOtherWells : public iDlgBase { Q_OBJECT public: /** @brief 创建绑定到指定分析窗口的其他有产量井选择对话框。 */ explicit nmWxIncludeOtherWells(nmDataAnalyzeManager* pDataManager, QWidget* pParent = nullptr); ~nmWxIncludeOtherWells(); /** @brief 返回表格中各候选井及最终勾选状态。 */ QVector getWellData() const; private: /** @brief 按固定顺序初始化表格、按钮、布局和信号槽。 */ void initUI(); /** @brief 从所属数据管理器收集候选主动井并建立表格。 */ void setupTable(); /** @brief 创建确定和取消按钮。 */ void setupButtons(); /** @brief 组装表格与底部按钮布局。 */ void setupLayouts(); /** @brief 连接按钮及表格交互信号。 */ void setupConnections(); /** @brief 将一条候选井数据写入指定表格行。 */ void addWellDataToTable(const WellDataRow& data, int row); // 更新复选框状态 //void updateCheckBoxState(int row); private slots: /** @brief 响应整行点击,并切换该行包含状态。 */ void onItemClicked(QTableWidgetItem* item); /** @brief 把复选框状态同步回对应的 WellDataRow。 */ void onCheckBoxStateChanged(int state); private: /** @brief 当前对话框所属的数据管理器,不拥有对象。 */ nmDataAnalyzeManager* m_pDataManager; QTableWidget* m_pTableWidget; ///< 其他有产量井及其数据摘要表格。 QPushButton* m_pOkButton; ///< 提交当前勾选状态的确定按钮。 QPushButton* m_pCancelButton; ///< 放弃本次编辑的取消按钮。 QHBoxLayout* m_pButtonLayout; ///< 底部操作按钮布局。 QVBoxLayout* m_pMainLayout; ///< 对话框主布局。 QVector m_wellData; ///< 与表格行一一对应的候选井数据。 }; #endif // NMWXINCLUDEOTHERWELLS_H