|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "iDlgBase.h"
|
|
|
|
|
|
#include "nmParameterField.h"
|
|
|
|
|
|
#include "nmPlotDialogContextProvider.h"
|
|
|
|
|
|
#include "nmSubWxs_global.h"
|
|
|
|
|
|
|
|
|
|
|
|
class nmDataWellBase;
|
|
|
|
|
|
class nmWellEditorController;
|
|
|
|
|
|
class nmWellEditorSession;
|
|
|
|
|
|
class nmWellParameterPanel;
|
|
|
|
|
|
class nmWellPressureFlowPage;
|
|
|
|
|
|
class nmWxWellboreTrajectoryDisplay;
|
|
|
|
|
|
class QButtonGroup;
|
|
|
|
|
|
class QCheckBox;
|
|
|
|
|
|
class QComboBox;
|
|
|
|
|
|
class QDialogButtonBox;
|
|
|
|
|
|
class QFrame;
|
|
|
|
|
|
class QHBoxLayout;
|
|
|
|
|
|
class QKeyEvent;
|
|
|
|
|
|
class QLabel;
|
|
|
|
|
|
class QLineEdit;
|
|
|
|
|
|
class QSplitter;
|
|
|
|
|
|
class QStackedWidget;
|
|
|
|
|
|
class QToolButton;
|
|
|
|
|
|
|
|
|
|
|
|
enum nmWellEditorPage
|
|
|
|
|
|
{
|
|
|
|
|
|
NM_WELL_EDITOR_PAGE_PARAMETERS = 0,
|
|
|
|
|
|
NM_WELL_EDITOR_PAGE_PRESSURE_FLOW,
|
|
|
|
|
|
NM_WELL_EDITOR_PAGE_COUNT
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @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 slotCategoryButtonClicked(int nPage);
|
|
|
|
|
|
|
|
|
|
|
|
/** @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* createCategoryBar();
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 创建一个带底部分组标题的ribbon区域。 */
|
|
|
|
|
|
QWidget* createRibbonGroup(const QString& sCaption,
|
|
|
|
|
|
QWidget* pParent,
|
|
|
|
|
|
QHBoxLayout*& pCommandLayout);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 创建顶部导航分组的竖向分隔线。 */
|
|
|
|
|
|
QFrame* createRibbonSeparator(QWidget* pParent);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 创建一个页面切换命令按钮。 */
|
|
|
|
|
|
QToolButton* createCategoryButton(int nPage,
|
|
|
|
|
|
const QString& sText,
|
|
|
|
|
|
const QString& sIconName,
|
|
|
|
|
|
QWidget* pParent);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 创建顶部帮助命令按钮。 */
|
|
|
|
|
|
QToolButton* createHelpButton(QWidget* pParent);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 创建固定显示的井号、井名、井型和时间变表皮信息区。 */
|
|
|
|
|
|
QWidget* createWellInformationWidget(QWidget* pParent);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 创建帮助入口、校验提示和确认按钮区。 */
|
|
|
|
|
|
QWidget* createFooter();
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 从当前工作副本回填时间变表皮控件。 */
|
|
|
|
|
|
void reloadTimeDependentSkinControls(nmDataWellBase* pWell);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 从当前会话工作副本刷新只读压力流量页。 */
|
|
|
|
|
|
void reloadPressureFlowPage();
|
|
|
|
|
|
|
|
|
|
|
|
/** @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; ///< 对话框独占编辑会话。
|
|
|
|
|
|
QButtonGroup* m_pCategoryButtonGroup; ///< 顶部页面命令与稳定页面ID映射。
|
|
|
|
|
|
QStackedWidget* m_pStackedWidget; ///< 井参数和压力流量页面堆栈。
|
|
|
|
|
|
nmWellPressureFlowPage* m_pPressureFlowPage; ///< 只读压力流量数据页。
|
|
|
|
|
|
nmWellParameterPanel* m_pParameterPanel; ///< 左侧单列参数分组。
|
|
|
|
|
|
nmWxWellboreTrajectoryDisplay* m_pTrajectoryDisplay; ///< 右侧轨迹视图。
|
|
|
|
|
|
nmWellEditorController* m_pWellEditorController; ///< 轨迹交互控制器。
|
|
|
|
|
|
QLineEdit* m_pWellCodeLineEdit; ///< 只读项目级井号。
|
|
|
|
|
|
QLineEdit* m_pWellNameLineEdit; ///< 井名输入框。
|
|
|
|
|
|
QLineEdit* m_pWellCategoryLineEdit; ///< 只读工程井井别。
|
|
|
|
|
|
QComboBox* m_pWellTypeComboBox; ///< 井型选择器。
|
|
|
|
|
|
QCheckBox* m_pTimeDependentCheckBox; ///< 时间变表皮开关。
|
|
|
|
|
|
QToolButton* m_pTimeDependentButton; ///< 时间变表皮详情入口。
|
|
|
|
|
|
QToolButton* m_pFooterHelpButton; ///< 底部帮助命令。
|
|
|
|
|
|
QDialogButtonBox* m_pButtonBox; ///< 确定和取消按钮区。
|
|
|
|
|
|
QLabel* m_pStatusLabel; ///< 当前校验错误。
|
|
|
|
|
|
QSplitter* m_pMainSplitter; ///< 参数与轨迹分割器。
|
|
|
|
|
|
int m_nCurrentPage; ///< 当前显示页面。
|
|
|
|
|
|
QString m_sPanelValidationMessage; ///< 参数面板错误。
|
|
|
|
|
|
bool m_bInitialized; ///< 编辑器是否初始化完成。
|
|
|
|
|
|
bool m_bChangingWellType; ///< 程序同步井型标记。
|
|
|
|
|
|
};
|