feat(controller): DatasetDetailController 编排 + ErtInversionStrategy 标识
This commit is contained in:
parent
46c75ed419
commit
d61775a3bc
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
Loading…
Reference in New Issue