|
|
|
|
|
#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_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<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_wellData; ///< 与表格行一一对应的候选井数据。
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // NMWXINCLUDEOTHERWELLS_H
|