##// END OF EJS Templates
Ported Mock plugin to new IDataProvider interface compatible with...
jeandet -
r1350:09a8c8a01145
parent child
Show More
@@ -1,1 +1,1
1 Subproject commit de55e7be90966d1efbd34a10df9a3231c50e245b
1 Subproject commit c08d1b8ad2976824def52cf0fca26a72b1069356
@@ -245,7 +245,7 bool DragDropGuiController::checkMimeDataForVisualization(
245 245
246 246 if (mimeData->hasFormat(MIME_TYPE_VARIABLE_LIST)) {
247 247 auto variables = sqpApp->variableController().variables(
248 mimeData->data(MIME_TYPE_VARIABLE_LIST));
248 Variable::variablesIDs(mimeData->data(MIME_TYPE_VARIABLE_LIST)));
249 249
250 250 if (variables.size() == 1) {
251 251
@@ -19,7 +19,6 class SqpApplication::SqpApplicationPrivate {
19 19 public:
20 20 SqpApplicationPrivate()
21 21 : m_VariableController{std::make_shared<VariableController2>()},
22 m_VariableModel{m_VariableController},
23 22 m_PlotInterractionMode(SqpApplication::PlotsInteractionMode::None),
24 23 m_PlotCursorMode(SqpApplication::PlotsCursorMode::NoCursor)
25 24 {
@@ -29,11 +28,12 public:
29 28
30 29 // VariableController <-> DataSourceController
31 30 connect(&m_DataSourceController,
32 SIGNAL(variableCreationRequested(const QString &, const QVariantHash &,
33 std::shared_ptr<IDataProvider>)),
34 m_VariableController.get(),
35 SLOT(createVariable(const QString &, const QVariantHash &,
36 std::shared_ptr<IDataProvider>)));
31 &DataSourceController::createVariable,[](const QString &variableName,
32 const QVariantHash &variableMetadata,
33 std::shared_ptr<IDataProvider> variableProvider)
34 {
35 sqpApp->variableController().createVariable(variableName,variableMetadata,variableProvider,sqpApp->timeController().dateTime());
36 });
37 37
38 38 // connect(m_VariableController->variableModel(), &VariableModel::requestVariable,
39 39 // m_DataSourceController.get(), &DataSourceController::requestVariable);
@@ -79,7 +79,6 public:
79 79 NetworkController m_NetworkController;
80 80 VisualizationController m_VisualizationController;
81 81 CatalogueController m_CatalogueController;
82 VariableModel2 m_VariableModel;
83 82
84 83 QThread m_DataSourceControllerThread;
85 84 QThread m_NetworkControllerThread;
@@ -4,6 +4,7
4 4 #include <Variable/VariableInspectorWidget.h>
5 5 #include <Variable/VariableMenuHeaderWidget.h>
6 6 #include <Variable/VariableModel2.h>
7 #include <DataSource/DataSourceController.h>
7 8
8 9 #include <ui_VariableInspectorWidget.h>
9 10
@@ -125,13 +126,22 VariableInspectorWidget::VariableInspectorWidget(QWidget *parent)
125 126 // auto sortFilterModel = new QSortFilterProxyModel{this};
126 127 // sortFilterModel->setSourceModel(sqpApp->variableController().variableModel());
127 128
128 m_model = new VariableModel2(sqpApp->variableControllerOwner());
129 m_model = new VariableModel2();
129 130 ui->tableView->setModel(m_model);
131 connect(m_model, &VariableModel2::createVariable,
132 [](const QVariantHash &productData)
133 {
134 sqpApp->dataSourceController().requestVariable(productData);
135 });
136 auto vc = &(sqpApp->variableController());
137 connect(vc, &VariableController2::variableAdded, m_model, &VariableModel2::variableAdded);
138 connect(vc, &VariableController2::variableDeleted, m_model, &VariableModel2::variableDeleted);
139 connect(m_model, &VariableModel2::asyncChangeRange, vc, &VariableController2::asyncChangeRange);
130 140
131 141 // Adds extra signal/slot between view and model, so the view can be updated instantly when
132 142 // there is a change of data in the model
133 connect(m_model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this,
134 SLOT(refresh()));
143 //connect(m_model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this,
144 // SLOT(refresh()));
135 145
136 146 //ui->tableView->setSelectionModel(sqpApp->variableController().variableSelectionModel());
137 147 ui->tableView->setItemDelegateForColumn(0, m_ProgressBarItemDelegate);
@@ -231,7 +231,7 void VisualizationTabWidget::dropMimeData(int index, const QMimeData *mimeData)
231 231 }
232 232 else if (mimeData->hasFormat(MIME_TYPE_VARIABLE_LIST)) {
233 233 auto variables = sqpApp->variableController().variables(
234 mimeData->data(MIME_TYPE_VARIABLE_LIST));
234 Variable::variablesIDs(mimeData->data(MIME_TYPE_VARIABLE_LIST)));
235 235 impl->dropVariables(variables, index, this);
236 236 }
237 237 else if (mimeData->hasFormat(MIME_TYPE_PRODUCT_LIST)) {
@@ -119,7 +119,7 VisualizationZoneWidget::VisualizationZoneWidget(const QString &name, QWidget *p
119 119
120 120 if (mimeData->hasFormat(MIME_TYPE_VARIABLE_LIST)) {
121 121 auto variables = sqpApp->variableController().variables(
122 mimeData->data(MIME_TYPE_VARIABLE_LIST));
122 Variable::variablesIDs(mimeData->data(MIME_TYPE_VARIABLE_LIST)));
123 123
124 124 if (variables.size() != 1) {
125 125 return false;
@@ -460,7 +460,7 void VisualizationZoneWidget::dropMimeData(int index, const QMimeData *mimeData)
460 460 }
461 461 else if (mimeData->hasFormat(MIME_TYPE_VARIABLE_LIST)) {
462 462 auto variables = sqpApp->variableController().variables(
463 mimeData->data(MIME_TYPE_VARIABLE_LIST));
463 Variable::variablesIDs(mimeData->data(MIME_TYPE_VARIABLE_LIST)));
464 464 impl->dropVariables(variables, index, this);
465 465 }
466 466 else if (mimeData->hasFormat(MIME_TYPE_PRODUCT_LIST)) {
@@ -488,7 +488,7 void VisualizationZoneWidget::dropMimeDataOnGraph(VisualizationDragWidget *dragW
488 488
489 489 if (mimeData->hasFormat(MIME_TYPE_VARIABLE_LIST)) {
490 490 auto variables = sqpApp->variableController().variables(
491 mimeData->data(MIME_TYPE_VARIABLE_LIST));
491 Variable::variablesIDs(mimeData->data(MIME_TYPE_VARIABLE_LIST)));
492 492 for (const auto &var : variables) {
493 493 graphWidget->addVariable(var, graphWidget->graphRange());
494 494 }
@@ -22,6 +22,8 public:
22 22 void requestDataLoading(QUuid acqIdentifier, const DataProviderParameters &parameters) override;
23 23
24 24
25 virtual IDataSeries* getData(const DataProviderParameters &parameters) override;
26
25 27 /// @sa IDataProvider::requestDataAborting(). The current impl isn't thread safe.
26 28 void requestDataAborting(QUuid acqIdentifier) override;
27 29
@@ -35,6 +37,8 private:
35 37 std::shared_ptr<IDataSeries>
36 38 retrieveData(QUuid acqIdentifier, const DateTimeRange &dataRangeRequested, const QVariantHash &data);
37 39
40 IDataSeries* _generate(const DateTimeRange &range, const QVariantHash &metaData);
41
38 42 QHash<QUuid, bool> m_VariableToEnableProvider;
39 43 };
40 44
@@ -30,9 +30,9 const auto SPECTROGRAM_ZERO_BANDS = std::set<int>{2, 15, 19, 29};
30 30 struct ICosinusType {
31 31 virtual ~ICosinusType() = default;
32 32 /// @return the number of components generated for the type
33 virtual int componentCount() const = 0;
33 virtual std::size_t componentCount() const = 0;
34 34 /// @return the data series created for the type
35 virtual std::shared_ptr<IDataSeries> createDataSeries(std::vector<double> xAxisData,
35 virtual IDataSeries* createDataSeries(std::vector<double> xAxisData,
36 36 std::vector<double> valuesData) const = 0;
37 37 /// Generates values (one value per component)
38 38 /// @param x the x-axis data used to generate values
@@ -43,12 +43,12 struct ICosinusType {
43 43 };
44 44
45 45 struct ScalarCosinus : public ICosinusType {
46 int componentCount() const override { return 1; }
46 std::size_t componentCount() const override { return 1; }
47 47
48 std::shared_ptr<IDataSeries> createDataSeries(std::vector<double> xAxisData,
48 IDataSeries* createDataSeries(std::vector<double> xAxisData,
49 49 std::vector<double> valuesData) const override
50 50 {
51 return std::make_shared<ScalarSeries>(std::move(xAxisData), std::move(valuesData),
51 return new ScalarSeries(std::move(xAxisData), std::move(valuesData),
52 52 Unit{QStringLiteral("t"), true}, Unit{});
53 53 }
54 54
@@ -67,12 +67,12 struct SpectrogramCosinus : public ICosinusType {
67 67 {
68 68 }
69 69
70 int componentCount() const override { return m_YAxisData.size(); }
70 std::size_t componentCount() const override { return m_YAxisData.size(); }
71 71
72 std::shared_ptr<IDataSeries> createDataSeries(std::vector<double> xAxisData,
72 IDataSeries* createDataSeries(std::vector<double> xAxisData,
73 73 std::vector<double> valuesData) const override
74 74 {
75 return std::make_shared<SpectrogramSeries>(
75 return new SpectrogramSeries(
76 76 std::move(xAxisData), m_YAxisData, std::move(valuesData),
77 77 Unit{QStringLiteral("t"), true}, m_YAxisUnit, m_ValuesUnit);
78 78 }
@@ -107,12 +107,12 struct SpectrogramCosinus : public ICosinusType {
107 107 };
108 108
109 109 struct VectorCosinus : public ICosinusType {
110 int componentCount() const override { return 3; }
110 std::size_t componentCount() const override { return 3; }
111 111
112 std::shared_ptr<IDataSeries> createDataSeries(std::vector<double> xAxisData,
112 IDataSeries* createDataSeries(std::vector<double> xAxisData,
113 113 std::vector<double> valuesData) const override
114 114 {
115 return std::make_shared<VectorSeries>(std::move(xAxisData), std::move(valuesData),
115 return new VectorSeries(std::move(xAxisData), std::move(valuesData),
116 116 Unit{QStringLiteral("t"), true}, Unit{});
117 117 }
118 118
@@ -244,6 +244,41 std::shared_ptr<IDataSeries> CosinusProvider::retrieveData(QUuid acqIdentifier,
244 244 // We can close progression beacause all data has been retrieved
245 245 emit dataProvidedProgress(acqIdentifier, 100);
246 246 }
247 return std::shared_ptr<IDataSeries>(type->createDataSeries(std::move(xAxisData), std::move(valuesData)));
248 }
249
250 IDataSeries *CosinusProvider::_generate(const DateTimeRange &range, const QVariantHash &metaData)
251 {
252 auto dataIndex = 0;
253
254 // Retrieves cosinus type
255 auto typeVariant = metaData.value(COSINUS_TYPE_KEY, COSINUS_TYPE_DEFAULT_VALUE);
256 auto type = cosinusType(typeVariant.toString());
257 auto freqVariant = metaData.value(COSINUS_FREQUENCY_KEY, COSINUS_FREQUENCY_DEFAULT_VALUE);
258 double freq = freqVariant.toDouble();
259 double start = std::ceil(range.m_TStart * freq);
260 double end = std::floor(range.m_TEnd * freq);
261 if (end < start) {
262 std::swap(start, end);
263 }
264 std::size_t dataCount = static_cast<std::size_t>(end - start + 1);
265 std::size_t componentCount = type->componentCount();
266
267 auto xAxisData = std::vector<double>{};
268 xAxisData.resize(dataCount);
269
270 auto valuesData = std::vector<double>{};
271 valuesData.resize(dataCount * componentCount);
272
273 int progress = 0;
274 auto progressEnd = dataCount;
275 for (auto time = start; time <= end; ++time, ++dataIndex)
276 {
277 const auto x = time / freq;
278 xAxisData[dataIndex] = x;
279 // Generates values (depending on the type)
280 type->generateValues(x, valuesData, dataIndex);
281 }
247 282 return type->createDataSeries(std::move(xAxisData), std::move(valuesData));
248 283 }
249 284
@@ -265,6 +300,12 void CosinusProvider::requestDataLoading(QUuid acqIdentifier,
265 300 }
266 301 }
267 302
303 IDataSeries* CosinusProvider::getData(const DataProviderParameters &parameters)
304 {
305 return _generate(parameters.m_Times.front(),parameters.m_Data);
306 }
307
308
268 309 void CosinusProvider::requestDataAborting(QUuid acqIdentifier)
269 310 {
270 311 qCDebug(LOG_CosinusProvider()) << "CosinusProvider::requestDataAborting" << acqIdentifier
General Comments 0
You need to be logged in to leave comments. Login now