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/nmWxEditWellPlot.h

133 lines
4.3 KiB
C

#ifndef NMWXEDITWELLPLOT_H
#define NMWXEDITWELLPLOT_H
#include "iDlgBase.h"
#include "nmSubWxs_global.h"
#include <QList>
// 前向声明需要的Qt布局和控件类
class QHBoxLayout;
class QVBoxLayout;
class QSplitter;
class QGridLayout;
class QLineEdit;
class QComboBox;
class QKeyEvent;
class QCheckBox;
class QPushButton;
class QString;
// 自定义容器
class iWxWellNew;
class nmWxWellboreTrajectoryDisplay;
// 数据源
class ZxDataWell;
class nmDataAttribute;
class nmDataWellBase;
class nmDataVerticalWell;
class nmDataVerticalFracturedWell;
class nmDataHorizontalFracturedWell;
class nmDataPerforation;
// 自定义GUI组件类
class nmGUIComponentBase;
class nmGUIComponentLineEdit;
class nmGUIComponentComboBox;
// 编辑井控制器
class nmWellEditorController;
class NM_SUB_WXS_EXPORT nmWxEditWellPlot : public iDlgBase
{
Q_OBJECT
public:
explicit nmWxEditWellPlot(QWidget *parent = nullptr, ZxDataWell* pZxDataWell = nullptr, nmDataWellBase* pNmDataWell = nullptr);
~nmWxEditWellPlot();
// 初始化界面
void initUI();
// 初始化界面主布局
void initMainLayout();
// 创建左侧面板容器包含m_pWellNewWidget和m_pBottomLeftPanel
QWidget* createLeftPanel();
// 创建右侧面板容器,即井筒轨迹显示
QWidget* createRightPanel();
// 创建最底部面板容器
QWidget* createBottomPanel();
// 连接视图与控制器之间的信号槽
void setupControllerConnections();
// 新增一个辅助函数来动态更新底部左侧面板的UI
void updateBottomLeftPanelUI();
// 辅助函数,用于向网格布局中添加 nmGUIComponentBase 组件
// 注意:传入 nmDataAttribute 的引用,并且 const_cast 转换是安全的,因为组件需要修改其值
void addLineEditComponentToGrid(nmDataAttribute& attribute, int& row);
void addComboBoxComponentToGrid(nmDataAttribute& attribute, int& row);
// 根据井类型添加特定参数的私有辅助函数
void addVerticalWellParameters(nmDataVerticalWell* well, int& row);
void addVerticalFracturedWellParameters(nmDataVerticalFracturedWell* well, int& row);
void addHorizontalFracturedWellParameters(nmDataHorizontalFracturedWell* well, int& row);
// 返回修改后的井数据
nmDataWellBase* getModifiedDataWell();
//public slots:
// void onTimeDependentIconClicked();
// // 新添加的槽函数
// void onTimeDependentCheckToggled(bool checked);
protected:
void keyPressEvent(QKeyEvent *event) override;
private slots:
// 确认和取消按钮的槽函数
void onOkClicked();
void onCancelClicked();
// 连接模型数据变化的槽函数,用于刷新左侧参数列表
void onWellDataChanged();
// 切换井类型的槽函数
void onWellTypeChanged(int index);
// 井名称修改
void onWellNameEditingFinished();
void onTimeDependentIconClicked();
void onTimeDependentCheckToggled(bool checked);
private:
QSplitter* m_pMainSplitter; // 主分割器
QVBoxLayout* m_pTopVLayout; // 顶层垂直布局
QVBoxLayout* m_pLeftVLayout; // 左侧垂直布局
QGridLayout* m_pBottomLeftGridLayout; // 参数面板的网格布局
QLineEdit* m_pWellNameLineEdit; // 井名编辑框
QComboBox* m_pWellTypeComboBox; // 井类型选择下拉框
iWxWellNew* m_pWellNewWidget; // 嵌入的 iWxWellNew 实例
QWidget* m_pBottomLeftPanel; // 底部左侧自定义参数面板
nmWxWellboreTrajectoryDisplay* m_pRightPanel; // 右侧井筒轨迹视图面板
QWidget* m_pOverallBottomPanel; // 整个界面最底部的容器
ZxDataWell* m_pZxDataWell; // 存储传入的井数据
nmDataWellBase* m_pNmDataWell; // 数值井数据
QList<nmGUIComponentBase*> m_listParameterComponents; // 参数面板下自定义的参数组件
nmWellEditorController* m_pWellEditorController; // 编辑井控制器
// 时间相关控件
QCheckBox* m_pTimeDependentCheck;
QPushButton* m_pTimeDependentIconButton;
QString m_sIconDir; // 图标目录路径,如果还没有定义的话
bool m_bOriginalTimeDependentSkin;
};
#endif // NMWXEDITWELLPLOT_H