Variable.h
113 lines
| 3.3 KiB
| text/x-c
|
CLexer
r0 | #ifndef SCIQLOP_VARIABLE_H | |||
#define SCIQLOP_VARIABLE_H | ||||
r23 | #include <optional> | |||
r16 | #include <QLoggingCategory> | |||
#include <QObject> | ||||
#include <QUuid> | ||||
#include <QReadWriteLock> | ||||
r27 | #include <QDataStream> | |||
r0 | ||||
r16 | #include "CoreGlobal.h" | |||
r0 | #include <Data/DataSeriesIterator.h> | |||
#include <Data/DataSeriesType.h> | ||||
#include <Data/DateTimeRange.h> | ||||
r2 | #include <Common/deprecate.h> | |||
r0 | #include <Common/MetaTypes.h> | |||
#include <Common/spimpl.h> | ||||
Q_DECLARE_LOGGING_CATEGORY(LOG_Variable) | ||||
class IDataSeries; | ||||
class QString; | ||||
/** | ||||
* @brief The Variable class represents a variable in SciQlop. | ||||
*/ | ||||
class SCIQLOP_CORE_EXPORT Variable : public QObject { | ||||
Q_OBJECT | ||||
public: | ||||
explicit Variable(const QString &name, const QVariantHash &metadata = {}); | ||||
/// Copy ctor | ||||
explicit Variable(const Variable &other); | ||||
std::shared_ptr<Variable> clone() const; | ||||
QString name() const noexcept; | ||||
void setName(const QString &name) noexcept; | ||||
DateTimeRange range() const noexcept; | ||||
r9 | void setRange(const DateTimeRange &range, bool notify=false) noexcept; | |||
r0 | DateTimeRange cacheRange() const noexcept; | |||
void setCacheRange(const DateTimeRange &cacheRange) noexcept; | ||||
/// @return the number of points hold by the variable. The number of points is updated each time | ||||
/// the data series changes | ||||
r3 | unsigned int nbPoints() const noexcept; | |||
r0 | ||||
/// Returns the real range of the variable, i.e. the min and max x-axis values of the data | ||||
/// series between the range of the variable. The real range is updated each time the variable | ||||
/// range or the data series changed | ||||
/// @return the real range, invalid range if the data series is null or empty | ||||
/// @sa setDataSeries() | ||||
/// @sa setRange() | ||||
r15 | std::optional<DateTimeRange> realRange() const noexcept; | |||
r0 | ||||
/// @return the data of the variable, nullptr if there is no data | ||||
std::shared_ptr<IDataSeries> dataSeries() const noexcept; | ||||
/// @return the type of data that the variable holds | ||||
DataSeriesType type() const noexcept; | ||||
QVariantHash metadata() const noexcept; | ||||
r17 | ||||
void updateData(const std::vector<IDataSeries*>& dataSeries, | ||||
const DateTimeRange& newRange, const DateTimeRange& newCacheRange, | ||||
bool notify=true); | ||||
r27 | static QByteArray mimeData(const std::vector<std::shared_ptr<Variable> > &variables) | |||
{ | ||||
auto encodedData = QByteArray{}; | ||||
QDataStream stream{&encodedData, QIODevice::WriteOnly}; | ||||
for (auto &var : variables) { | ||||
stream << var->ID().toByteArray(); | ||||
} | ||||
return encodedData; | ||||
} | ||||
static std::vector<QUuid> variablesIDs(QByteArray mimeData) | ||||
{ | ||||
std::vector<QUuid> variables; | ||||
QDataStream stream{mimeData}; | ||||
QVariantList ids; | ||||
stream >> ids; | ||||
for (const auto& id : ids) { | ||||
variables.emplace_back (id.toByteArray()); | ||||
} | ||||
return variables; | ||||
} | ||||
r17 | operator QUuid() {return _uuid;} | |||
r2 | QUuid ID(){return _uuid;} | |||
r0 | signals: | |||
r32 | void updated(QUuid ID); | |||
private: | ||||
class VariablePrivate; | ||||
r0 | spimpl::unique_impl_ptr<VariablePrivate> impl; | |||
r2 | QUuid _uuid; | |||
r16 | QReadWriteLock m_lock; | |||
r0 | }; | |||
// Required for using shared_ptr in signals/slots | ||||
SCIQLOP_REGISTER_META_TYPE(VARIABLE_PTR_REGISTRY, std::shared_ptr<Variable>) | ||||
SCIQLOP_REGISTER_META_TYPE(VARIABLE_PTR_VECTOR_REGISTRY, QVector<std::shared_ptr<Variable> >) | ||||
#endif // SCIQLOP_VARIABLE_H | ||||