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/nmNum/nmSubWxs/nmWxIncludeOtherWells.h

98 lines
3.6 KiB
C

#ifndef NMWXINCLUDEOTHERWELLS_H
#define NMWXINCLUDEOTHERWELLS_H
#include "nmSubWxs_global.h"
#include "iDlgBase.h"
#include "nmDataNumericalAnalysisCase.h"
#include <QTableWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QHeaderView>
#include <QVector>
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_WELL_CATEGORY m_eWellCategory; ///< 工程井井别,决定哪一列显示流量。
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_eWellCategory(NM_WellCategory_Unknown),
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<WellDataRow> 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<WellDataRow> m_vecWellData; ///< 与表格行一一对应的候选井数据。
};
#endif // NMWXINCLUDEOTHERWELLS_H