From d61775a3bc30fbc3e338b671a052c3b29412de76 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Thu, 11 Jun 2026 12:04:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(controller):=20DatasetDetailController=20?= =?UTF-8?q?=E7=BC=96=E6=8E=92=20+=20ErtInversionStrategy=20=E6=A0=87?= =?UTF-8?q?=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/panels/chart/ErtInversionStrategy.hpp | 7 ++++ src/controller/CMakeLists.txt | 3 +- src/controller/DatasetDetailController.cpp | 27 ++++++++++++++ src/controller/DatasetDetailController.hpp | 35 +++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/app/panels/chart/ErtInversionStrategy.hpp create mode 100644 src/controller/DatasetDetailController.cpp create mode 100644 src/controller/DatasetDetailController.hpp diff --git a/src/app/panels/chart/ErtInversionStrategy.hpp b/src/app/panels/chart/ErtInversionStrategy.hpp new file mode 100644 index 0000000..01d7f0d --- /dev/null +++ b/src/app/panels/chart/ErtInversionStrategy.hpp @@ -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 diff --git a/src/controller/CMakeLists.txt b/src/controller/CMakeLists.txt index 45f34d7..0bbe490 100644 --- a/src/controller/CMakeLists.txt +++ b/src/controller/CMakeLists.txt @@ -1,6 +1,7 @@ find_package(Qt6 COMPONENTS Core REQUIRED) add_library(geopro_controller STATIC - WorkbenchNavController.cpp) + WorkbenchNavController.cpp + DatasetDetailController.cpp) target_include_directories(geopro_controller PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(geopro_controller PUBLIC geopro_data Qt6::Core) target_compile_features(geopro_controller PUBLIC cxx_std_17) diff --git a/src/controller/DatasetDetailController.cpp b/src/controller/DatasetDetailController.cpp new file mode 100644 index 0000000..fb03556 --- /dev/null +++ b/src/controller/DatasetDetailController.cpp @@ -0,0 +1,27 @@ +#include "DatasetDetailController.hpp" +#include +#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 diff --git a/src/controller/DatasetDetailController.hpp b/src/controller/DatasetDetailController.hpp new file mode 100644 index 0000000..43e5993 --- /dev/null +++ b/src/controller/DatasetDetailController.hpp @@ -0,0 +1,35 @@ +#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_; +}; +} // namespace geopro::controller