#pragma once #include #include #include #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 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_; bool busy_ = false; }; } // namespace geopro::controller