#include "panels/chart/DetailViewFactory.hpp" #include #include #include "panels/chart/BarChartView.hpp" #include "panels/chart/DataTableView.hpp" #include "panels/chart/GridDataChartView.hpp" #include "panels/chart/LineChartView.hpp" #include "panels/chart/RawDataChartView.hpp" #include "panels/chart/TrajectoryMapView.hpp" namespace geopro::app { std::unique_ptr makeDetailView(controller::ViewKind kind, QWidget* parent, geopro::data::IColorTemplateRepository* colorTplRepo, std::function projectIdGetter, geopro::data::IDatasetCommandRepository* cmdRepo, std::function dsIdGetter, std::function tmObjectIdGetter) { switch (kind) { case controller::ViewKind::Scatter: { auto* raw = new RawDataChartView(parent); // 注入反演命令仓储 + dsId/projectId 取值回调(measurement 反演运算/生成视电阻率)。 raw->setCommandRepo(cmdRepo, dsIdGetter, projectIdGetter); // 注入色阶模板仓储(散点「色阶配置」编辑器另存为/打开/覆盖用;projectId 复用上面的 getter)。 raw->setColorTemplateRepo(colorTplRepo); return std::unique_ptr(raw); } case controller::ViewKind::FilledContour: { auto* grid = new GridDataChartView(parent); // 注入色阶模板仓储 + projectId 取值回调(网格剖面「色阶配置」编辑器用)。 grid->setColorTemplateRepo(colorTplRepo, projectIdGetter); // 注入反演命令仓储 + dsId/projectId 取值回调(网格化/白化/滤波/另存为按钮)。 grid->setCommandRepo(cmdRepo, std::move(dsIdGetter), std::move(projectIdGetter)); // 注入 tmObjectId 取值回调(白化对话框模板列表用,= 数据集 structParentId)。 grid->setTmObjectIdGetter(std::move(tmObjectIdGetter)); return std::unique_ptr(grid); } case controller::ViewKind::Table: { auto* table = new DataTableView(parent); // 注入反演命令仓储 + dsId/projectId 取值回调(dd_grid「反演」功能按钮用)。 // 其余 Table 复用场景(measurement 列表/trajectory/gr)载荷无 functionButtons, // 工具条隐藏,注入的仓储不会被触达 → 无副作用。 table->setCommandRepo(cmdRepo, std::move(dsIdGetter), std::move(projectIdGetter)); return std::unique_ptr(table); } case controller::ViewKind::Bar: return std::unique_ptr(new BarChartView(parent)); case controller::ViewKind::LineProfile: return std::unique_ptr(new LineChartView(parent)); case controller::ViewKind::WebMap: // trajectory 地图:QWebEngineView + Leaflet + 天地图瓦片,电极经纬点画橙色空心圈并取景。 return std::unique_ptr(new TrajectoryMapView(parent)); case controller::ViewKind::PolylineMap: // 后续阶段补:PolylineMap。 throw std::runtime_error("makeDetailView: ViewKind not yet implemented"); } throw std::runtime_error("makeDetailView: unknown ViewKind"); } } // namespace geopro::app