63 lines
3.5 KiB
C++
63 lines
3.5 KiB
C++
#include "panels/chart/DetailViewFactory.hpp"
|
||
|
||
#include <stdexcept>
|
||
#include <utility>
|
||
|
||
#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<IDetailView> makeDetailView(controller::ViewKind kind, QWidget* parent,
|
||
geopro::data::IColorTemplateRepository* colorTplRepo,
|
||
std::function<QString()> projectIdGetter,
|
||
geopro::data::IDatasetCommandRepository* cmdRepo,
|
||
std::function<QString()> dsIdGetter,
|
||
std::function<QString()> 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<IDetailView>(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<IDetailView>(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<IDetailView>(table);
|
||
}
|
||
case controller::ViewKind::Bar:
|
||
return std::unique_ptr<IDetailView>(new BarChartView(parent));
|
||
case controller::ViewKind::LineProfile:
|
||
return std::unique_ptr<IDetailView>(new LineChartView(parent));
|
||
case controller::ViewKind::WebMap:
|
||
// trajectory 地图:QWebEngineView + Leaflet + 天地图瓦片,电极经纬点画橙色空心圈并取景。
|
||
return std::unique_ptr<IDetailView>(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
|