]> sigrok.org Git - pulseview.git/blobdiff - pv/data/decode/annotation.cpp
Fix compile issues with some compiler versions
[pulseview.git] / pv / data / decode / annotation.cpp
index 96a594c3c6ce57a07f621ce9ddf9cd439fed1acd..7f2334788f70f93c2a734d680c90d6a8b957d293 100644 (file)
@@ -24,7 +24,9 @@ extern "C" {
 #include <cassert>
 #include <vector>
 
-#include "annotation.hpp"
+#include <pv/data/decode/annotation.hpp>
+#include <pv/data/decode/decoder.hpp>
+#include "pv/data/decode/rowdata.hpp"
 
 using std::vector;
 
@@ -32,22 +34,46 @@ namespace pv {
 namespace data {
 namespace decode {
 
-Annotation::Annotation(const srd_proto_data *const pdata) :
-       start_sample_(pdata->start_sample),
-       end_sample_(pdata->end_sample)
+Annotation::Annotation(uint64_t start_sample, uint64_t end_sample,
+       const vector<QString>* texts, uint32_t ann_class_id, const RowData *data) :
+       start_sample_(start_sample),
+       end_sample_(end_sample),
+       texts_(texts),
+       ann_class_id_(ann_class_id),
+       data_(data)
 {
-       assert(pdata);
-       const srd_proto_data_annotation *const pda =
-               (const srd_proto_data_annotation*)pdata->data;
-       assert(pda);
+}
 
-       ann_class_ = (Class)(pda->ann_class);
+Annotation::Annotation(Annotation&& a) :
+       start_sample_(a.start_sample_),
+       end_sample_(a.end_sample_),
+       texts_(a.texts_),
+       ann_class_id_(a.ann_class_id_),
+       data_(a.data_)
+{
+}
 
-       const char *const *annotations = (char**)pda->ann_text;
-       while (*annotations) {
-               annotations_.push_back(QString::fromUtf8(*annotations));
-               annotations++;
+Annotation& Annotation::operator=(Annotation&& a)
+{
+       if (&a != this) {
+               start_sample_ = a.start_sample_;
+               end_sample_ = a.end_sample_;
+               texts_ = a.texts_;
+               ann_class_id_ = a.ann_class_id_;
+               data_ = a.data_;
        }
+
+       return *this;
+}
+
+const RowData* Annotation::row_data() const
+{
+       return data_;
+}
+
+const Row* Annotation::row() const
+{
+       return data_->row();
 }
 
 uint64_t Annotation::start_sample() const
@@ -60,14 +86,68 @@ uint64_t Annotation::end_sample() const
        return end_sample_;
 }
 
-Annotation::Class Annotation::ann_class() const
+uint64_t Annotation::length() const
+{
+       return end_sample_ - start_sample_;
+}
+
+uint32_t Annotation::ann_class_id() const
+{
+       return ann_class_id_;
+}
+
+const QString Annotation::ann_class_name() const
+{
+       const AnnotationClass* ann_class =
+               data_->row()->decoder()->get_ann_class_by_id(ann_class_id_);
+
+       return QString(ann_class->name);
+}
+
+const QString Annotation::ann_class_description() const
+{
+       const AnnotationClass* ann_class =
+               data_->row()->decoder()->get_ann_class_by_id(ann_class_id_);
+
+       return QString(ann_class->description);
+}
+
+const vector<QString>* Annotation::annotations() const
+{
+       return texts_;
+}
+
+const QString Annotation::longest_annotation() const
+{
+       return texts_->front();
+}
+
+bool Annotation::visible() const
+{
+       const Row* row = data_->row();
+
+       return (row->visible() && row->class_is_visible(ann_class_id_)
+               && row->decoder()->visible());
+}
+
+const QColor Annotation::color() const
+{
+       return data_->row()->get_class_color(ann_class_id_);
+}
+
+const QColor Annotation::bright_color() const
+{
+       return data_->row()->get_bright_class_color(ann_class_id_);
+}
+
+const QColor Annotation::dark_color() const
 {
-       return ann_class_;
+       return data_->row()->get_dark_class_color(ann_class_id_);
 }
 
-const vector<QString>& Annotation::annotations() const
+bool Annotation::operator<(const Annotation &other) const
 {
-       return annotations_;
+       return (start_sample_ < other.start_sample_);
 }
 
 } // namespace decode