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

146 lines
5.7 KiB
C

#pragma once
#include "iDlgBase.h"
#include "nmParameterField.h"
#include "nmPlotDialogContextProvider.h"
#include "nmSubWxs_global.h"
class nmDataWellBase;
class nmWellEditorController;
class nmWellEditorSession;
class nmWellParameterPanel;
class nmWxWellboreTrajectoryDisplay;
class QCheckBox;
class QComboBox;
class QDialogButtonBox;
class QKeyEvent;
class QLabel;
class QLineEdit;
class QSplitter;
class QToolButton;
/**
* @brief
* @note
*/
class NM_SUB_WXS_EXPORT nmWxWellEditor :
public iDlgBase,
public nmIParameterUnitService
{
Q_OBJECT
public:
/** @brief 使用只读上下文创建编辑器,原始井不会被窗口直接修改。 */
explicit nmWxWellEditor(const nmWellEditContext& oContext,
QWidget* pParent = nullptr);
/** @brief 按引用依赖顺序释放控制器、界面和编辑会话。 */
virtual ~nmWxWellEditor();
/** @brief 初始化工作会话、参数面板和轨迹控制器。 */
bool initialize(QString& sError);
/** @brief 转移确认后的井副本所有权。 */
nmDataWellBase* takeModifiedWell();
/** @brief 将通用参数字段接入iDlgBase已有单位绑定器。 */
virtual bool bindUnitField(QLineEdit* pLineEdit,
QComboBox* pUnitComboBox,
const QString& sBaseParameterId);
/** @brief 通过窗口单位绑定器显示基准单位值。 */
virtual void setUnitBaseValue(QLineEdit* pLineEdit,
double dBaseValue);
/** @brief 通过窗口单位绑定器读取基准单位值。 */
virtual double unitBaseValue(QLineEdit* pLineEdit) const;
/** @brief 使用XML参数范围校验当前单位输入。 */
virtual bool isUnitInputValid(QLineEdit* pLineEdit);
/** @brief 返回字段当前显示单位。 */
virtual QString currentUnit(QLineEdit* pLineEdit) const;
/** @brief 返回字段绑定的单位组,不转移所有权。 */
virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const;
public slots:
/** @brief 校验完整工作副本并关闭窗口。 */
virtual void accept();
/** @brief 丢弃工作会话并关闭窗口。 */
virtual void reject();
protected:
/** @brief 屏蔽回车直接提交,避免参数编辑时误关闭窗口。 */
virtual void keyPressEvent(QKeyEvent* pEvent);
private slots:
/** @brief 保存当前井型输入并切换到独立井型缓存。 */
void slotWellTypeChanged(int nIndex);
/** @brief 将井名实时同步到所有井型工作副本。 */
void slotWellNameEdited(const QString& sWellName);
/** @brief 同步时间变表皮开关并更新详情入口状态。 */
void slotTimeDependentToggled(bool bChecked);
/** @brief 以当前工作副本打开旧时间变表皮编辑窗口。 */
void slotEditTimeDependentSkin();
/** @brief 打开系统帮助文档。 */
void slotHelp();
/** @brief 根据参数面板有效状态刷新确定按钮。 */
void slotPanelValidityChanged(bool bValid);
/** @brief 保存参数面板错误并刷新底部状态提示。 */
void slotPanelValidationMessageChanged(const QString& sMessage);
private:
/** @brief 创建左侧参数区、右侧轨迹区和底部命令区。 */
void createUi();
/** @brief 创建固定显示的井号、井名、井型和时间变表皮信息区。 */
QWidget* createWellInformationWidget(QWidget* pParent);
/** @brief 创建帮助入口、校验提示和确认按钮区。 */
QWidget* createFooter();
/** @brief 从当前工作副本回填时间变表皮控件。 */
void reloadTimeDependentSkinControls(nmDataWellBase* pWell);
/** @brief 为当前井型工作副本重新创建轨迹交互控制器。 */
void createController();
/** @brief 连接轨迹视图请求与控制器业务槽。 */
void setupControllerConnections();
/** @brief 规范化并校验井名,返回去除首尾空格后的名称。 */
bool validateWellName(QString& sTrimmedName,
QString& sError) const;
/** @brief 按Windows文件名规则校验井名。 */
bool isLegalFileName(const QString& sWellName) const;
/** @brief 汇总井名和参数校验结果,刷新确定按钮及错误提示。 */
void updateAcceptState();
nmWellEditorSession* m_pSession; ///< 对话框独占编辑会话。
nmWellParameterPanel* m_pParameterPanel; ///< 左侧单列参数分组。
nmWxWellboreTrajectoryDisplay* m_pTrajectoryDisplay; ///< 右侧轨迹视图。
nmWellEditorController* m_pWellEditorController; ///< 轨迹交互控制器。
QLineEdit* m_pWellCodeLineEdit; ///< 只读项目级井号。
QLineEdit* m_pWellNameLineEdit; ///< 井名输入框。
QComboBox* m_pWellTypeComboBox; ///< 井型选择器。
QCheckBox* m_pTimeDependentCheckBox; ///< 时间变表皮开关。
QToolButton* m_pTimeDependentButton; ///< 时间变表皮详情入口。
QToolButton* m_pFooterHelpButton; ///< 底部帮助命令。
QDialogButtonBox* m_pButtonBox; ///< 确定和取消按钮区。
QLabel* m_pStatusLabel; ///< 当前校验错误。
QSplitter* m_pMainSplitter; ///< 参数与轨迹分割器。
QString m_sPanelValidationMessage; ///< 参数面板错误。
bool m_bInitialized; ///< 编辑器是否初始化完成。
bool m_bChangingWellType; ///< 程序同步井型标记。
};