feat/dataset-detail-chart #5
|
|
@ -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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -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