feat(controller): DatasetDetailController 编排 + ErtInversionStrategy 标识

This commit is contained in:
gaozheng 2026-06-11 12:04:12 +08:00
parent 46c75ed419
commit d61775a3bc
4 changed files with 71 additions and 1 deletions

View File

@ -0,0 +1,7 @@
#pragma once
#include "panels/chart/IDatasetChartStrategy.hpp"
namespace geopro::app {
struct ErtInversionStrategy : IDatasetChartStrategy {
std::string ddCode() const override { return "dd_inversion_data"; }
};
} // namespace geopro::app

View File

@ -1,6 +1,7 @@
find_package(Qt6 COMPONENTS Core REQUIRED) find_package(Qt6 COMPONENTS Core REQUIRED)
add_library(geopro_controller STATIC add_library(geopro_controller STATIC
WorkbenchNavController.cpp) WorkbenchNavController.cpp
DatasetDetailController.cpp)
target_include_directories(geopro_controller PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(geopro_controller PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(geopro_controller PUBLIC geopro_data Qt6::Core) target_link_libraries(geopro_controller PUBLIC geopro_data Qt6::Core)
target_compile_features(geopro_controller PUBLIC cxx_std_17) target_compile_features(geopro_controller PUBLIC cxx_std_17)

View File

@ -0,0 +1,27 @@
#include "DatasetDetailController.hpp"
#include <stdexcept>
#include "repo/IDatasetRepository.hpp"
namespace geopro::controller {
DatasetDetailController::DatasetDetailController(data::IDatasetRepository& repo, QObject* parent)
: QObject(parent), repo_(repo) {}
void DatasetDetailController::openDataset(const QString& dsId, const QString& ddCode) {
const std::string id = dsId.toStdString();
try {
ChartData d;
d.dsId = dsId;
d.ddCode = ddCode;
d.scatter = repo_.loadScatter(id);
d.scatterScale = repo_.loadScatterColorScale(id);
d.grid = repo_.loadGrid(id);
d.gridScale = repo_.loadColorScale(id);
d.anomalies = repo_.loadAnomalies(id);
emit chartReady(d);
} catch (const std::exception& e) {
emit loadFailed(dsId, QString::fromStdString(e.what()));
}
}
void DatasetDetailController::focusDataset(const QString& dsId) { emit focusRequested(dsId); }
} // namespace geopro::controller

View File

@ -0,0 +1,35 @@
#pragma once
#include <string>
#include <QObject>
#include <QString>
#include "model/Field.hpp"
#include "model/ColorScale.hpp"
#include "model/Anomaly.hpp"
namespace geopro::data { class IDatasetRepository; }
namespace geopro::controller {
// 数据详情编排:单击/双击数据集 → 拉 散点/网格/色阶/异常 → 发信号给详情面板。被动视图。
// 仅服务图表,不与 WorkbenchNavController项目/结构导航)耦合。
class DatasetDetailController : public QObject {
Q_OBJECT
public:
struct ChartData {
QString dsId, ddCode;
geopro::core::ScatterField scatter;
geopro::core::ColorScale scatterScale;
geopro::core::Grid grid{1, 1}; // Grid 无默认构造以占位值初始化openDataset 会覆盖
geopro::core::ColorScale gridScale;
std::vector<geopro::core::Anomaly> anomalies;
};
explicit DatasetDetailController(data::IDatasetRepository& repo, QObject* parent = nullptr);
public slots:
void openDataset(const QString& dsId, const QString& ddCode); // 双击=新建/聚焦页
void focusDataset(const QString& dsId); // 单击=聚焦已开页
signals:
void chartReady(const ChartData& data);
void focusRequested(const QString& dsId);
void loadFailed(const QString& dsId, const QString& message);
private:
data::IDatasetRepository& repo_;
};
} // namespace geopro::controller