#pragma once #include #include #include #include #include "model/Anomaly.hpp" #include "model/ColorScale.hpp" #include "model/Field.hpp" #include "model/detail/DetailPayloads.hpp" #include "panels/chart/IDetailView.hpp" #include "ContourLineDialog.hpp" // ContourLineConfig(线形/标注状态) class QSlider; class QLabel; class QCheckBox; class QTimer; class QwtPlot; class QwtPlotRescaler; namespace geopro::data { class IColorTemplateRepository; class IDatasetCommandRepository; } namespace geopro::app { class AnomalyTablePanel; class DescriptionPanel; class ColorBarWidget; class ColorMapService; class ContourPlotItem; class ContourHoverTip; // 网格数据图表视图:工具条 + QwtPlot(白底 + 真实比尺 + 实时平移/滚轮缩放,x 轴在底部) // + 独立色阶条 + 底部双页签(异常列表/描述)。 // 填充走 ContourPlotItem 栅格热力图 + 矢量等值线 + 标注 + 异常叠加。 class GridDataChartView : public QWidget, public IDetailView { Q_OBJECT public: explicit GridDataChartView(QWidget* parent = nullptr); ~GridDataChartView() override; // 网格数据到达(懒加载结果):建色彩服务 + ContourPlotItem,挂到 QwtPlot,更新色阶条/异常表。 void setGridData(const geopro::core::Grid& grid, const geopro::core::ColorScale& gridScale, const std::vector& anoms); // IDetailView:解包 ContourPayload(grid + 色阶 + 异常)→ setGridData。坏/空 variant 保持空态。 QWidget* widget() override { return this; } void setPayload(const QVariant& payload) override; // 注入色阶模板仓储 + 当前 projectId 取值回调(打开编辑器时取一次,随项目切换生效)。 // 可传空仓储 → 编辑器内「另存为/打开」「新建色阶」禁用。 void setColorTemplateRepo(geopro::data::IColorTemplateRepository* repo, std::function projectIdGetter); // 注入反演命令仓储 + dsId/projectId 取值回调(网格化/白化/滤波/另存为按钮)。 // 可传空仓储 → 这些按钮退化为「暂未实现」占位提示。 void setCommandRepo(geopro::data::IDatasetCommandRepository* repo, std::function dsIdGetter, std::function projectIdGetter); private: void rebuildContour(); // 按当前显隐开关重建并重绘 ContourPlotItem void openColorScaleEditor(); // 「色阶配置」→ 共享色阶编辑器(色阶 + 层级⚙ + 线形⚙) void openGridWizard(); // I1「网格」→ 网格化向导 void openWhitening(); // I3「白化」→ 白化弹窗 void openFilter(); // I4「滤波处理」→ 滤波弹窗 void openSaveAs(); // I15「另存为」→ 复用 SaveAsDialog(Inversion) void reloadGrid(); // 处理类成功后:loadInversionGrid → setGridData 重绘 void applySimplify(); // I8:把当前滑块容差透传给 ContourPlotItem 并重绘 void showNotImplemented(QWidget* anchor); // 占位提示(无仓储/无 dsId) void openExceptionDialog(); // I9 异常创建 void openAutoAnnotation(); // I13 自动标注 void deleteAnomaly(int index); // I10 异常删除 void showAnomalyDetail(int index); // I11 异常详情/编辑 void locateAnomaly(int index); // I12 异常定位(高亮 + 缩放) void loadDescription(); // I14 进入时回填描述 void saveDescription(const QString& text); // I14 保存描述 QwtPlot* plot_ = nullptr; QwtPlotRescaler* rescaler_ = nullptr; ColorBarWidget* colorBar_ = nullptr; AnomalyTablePanel* anomalyTable_ = nullptr; DescriptionPanel* descriptionPanel_ = nullptr; QSlider* simplifySlider_ = nullptr; QLabel* simplifyValueLabel_ = nullptr; QCheckBox* chkShowLabels_ = nullptr; // 工具条「显示等值线标注」(线形⚙ 改标注显隐后同步) QTimer* simplifyDebounce_ = nullptr; // I8 简化容差防抖(~300ms) ContourHoverTip* contourTip_ = nullptr; // I7 等值线提示(hover) // 渲染状态 ColorMapService* colorSvc_ = nullptr; // heap,setGridData 重建 ContourPlotItem* contourItem_ = nullptr; geopro::core::Grid grid_{1, 1}; geopro::core::ColorScale gridScale_; std::vector anoms_; bool hasGrid_ = false; // 工具条显隐开关 bool showAnomalies_ = true; bool showLabels_ = true; ContourLineConfig lineCfg_; // 线形/标注配置(色阶编辑器 线形⚙ 下发) // 色阶模板仓储 + projectId 取值回调(注入;空则编辑器后端按钮禁用)。 geopro::data::IColorTemplateRepository* tplRepo_ = nullptr; std::function projectIdGetter_; // 反演命令仓储 + dsId 取值回调(注入;空则处理类按钮占位提示)。 geopro::data::IDatasetCommandRepository* cmdRepo_ = nullptr; std::function dsIdGetter_; }; } // namespace geopro::app