From 5a50815a763fb421298a06a6d0380b8f5364e7cd 2018-08-16 13:00:17 From: Alexis Jeandet Date: 2018-08-16 13:00:17 Subject: [PATCH] Quick variable model copied from existing one Signed-off-by: Alexis Jeandet --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 573f29d..5398b04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,7 @@ FILE (GLOB_RECURSE core_SRCS ./include/Visualization/VisualizationController.h ./include/PluginManager/PluginManager.h ./include/Variable/VariableModel.h + ./include/Variable/VariableModel2.h ./include/Variable/VariableAcquisitionWorker.h ./include/Variable/VariableCacheStrategy.h ./include/Variable/VariableSynchronizationGroup.h @@ -118,6 +119,7 @@ FILE (GLOB_RECURSE core_SRCS ./src/Variable/VariableController.cpp ./src/Variable/VariableController2.cpp ./src/Variable/VariableModel.cpp + ./src/Variable/VariableModel2.cpp ./src/Variable/VariableCacheController.cpp ./src/Variable/VariableSynchronizationGroup.cpp ./src/Variable/VariableSynchronizationGroup2.cpp diff --git a/include/Variable/VariableController2.h b/include/Variable/VariableController2.h index eae31e9..1d4409b 100644 --- a/include/Variable/VariableController2.h +++ b/include/Variable/VariableController2.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -30,12 +31,13 @@ public: void deleteVariable(const std::shared_ptr& variable); void changeRange(const std::shared_ptr& variable, const DateTimeRange& r); void asyncChangeRange(const std::shared_ptr& variable, const DateTimeRange& r); - const std::set> variables(); + const std::vector> variables(); bool isReady(const std::shared_ptr& variable); void synchronize(const std::shared_ptr& var, const std::shared_ptr& with); + QByteArray mimeData(const std::vector> &variables) const; signals: void variableAdded(const std::shared_ptr&); diff --git a/include/Variable/VariableModel2.h b/include/Variable/VariableModel2.h new file mode 100644 index 0000000..8ff9ccd --- /dev/null +++ b/include/Variable/VariableModel2.h @@ -0,0 +1,62 @@ +#ifndef SCIQLOP_VARIABLEMODEL2_H +#define SCIQLOP_VARIABLEMODEL2_H + +#include "CoreGlobal.h" + +#include + +#include +#include + +#include +#include + + + +class IDataSeries; +class Variable; +class VariableController2; + +/** + * @brief The VariableModel class aims to hold the variables that have been created in SciQlop + */ +class SCIQLOP_CORE_EXPORT VariableModel2 : public QAbstractTableModel { + enum VariableRoles { ProgressRole = Qt::UserRole }; + Q_OBJECT + std::shared_ptr _variableController; +public: + explicit VariableModel2(const std::shared_ptr& variableController, QObject *parent = nullptr); + + // /////////////////////////// // + // QAbstractTableModel methods // + // /////////////////////////// // + + virtual int columnCount(const QModelIndex &parent = QModelIndex{}) const override; + virtual int rowCount(const QModelIndex &parent = QModelIndex{}) const override; + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + virtual QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const override; + virtual Qt::ItemFlags flags(const QModelIndex &index) const override; + + // ///////////////// // + // Drag&Drop methods // + // ///////////////// // + + virtual Qt::DropActions supportedDropActions() const override; + virtual Qt::DropActions supportedDragActions() const override; + virtual QStringList mimeTypes() const override; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const override; + virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, + const QModelIndex &parent) const override; + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, + const QModelIndex &parent) override; + + +signals: + +private slots: + /// Slot called when data of a variable has been updated + void variableUpdated() noexcept; +}; + +#endif // SCIQLOP_VARIABLEMODEL2_H diff --git a/src/Variable/VariableController2.cpp b/src/Variable/VariableController2.cpp index 5817304..cf95e4c 100644 --- a/src/Variable/VariableController2.cpp +++ b/src/Variable/VariableController2.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "Variable/VariableController2.h" #include "Variable/VariableSynchronizationGroup2.h" @@ -60,13 +61,13 @@ class VariableController2::VariableController2Private return _variables[variable]; } - inline const std::set> variables() + inline const std::vector> variables() { - std::set> vars; + std::vector> vars; QReadLocker lock{&_lock}; for(const auto &var:_variables) { - vars.insert(var); + vars.push_back(var); } return vars; } @@ -288,7 +289,7 @@ public: _maps.synchronize(var, with); } - inline const std::set> variables() + inline const std::vector> variables() { return _maps.variables(); } @@ -331,7 +332,7 @@ void VariableController2::asyncChangeRange(const std::shared_ptr &vari impl->asyncChangeRange(variable, r); } -const std::set > VariableController2::variables() +const std::vector > VariableController2::variables() { return impl->variables(); } @@ -345,3 +346,13 @@ void VariableController2::synchronize(const std::shared_ptr &var, cons { impl->synchronize(var, with); } + +QByteArray VariableController2::mimeData(const std::vector > &variables) const +{ + auto encodedData = QByteArray{}; + QDataStream stream{&encodedData, QIODevice::WriteOnly}; + for (auto &var : variables) { + stream << var->ID().toByteArray(); + } + return encodedData; +} diff --git a/src/Variable/VariableModel2.cpp b/src/Variable/VariableModel2.cpp new file mode 100644 index 0000000..3e56000 --- /dev/null +++ b/src/Variable/VariableModel2.cpp @@ -0,0 +1,250 @@ +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include