X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecode%2Fannotation.cpp;h=7f2334788f70f93c2a734d680c90d6a8b957d293;hp=6a30921e71deec541a7e8e929bcdf13e8ead1fa4;hb=1e948182f3f9353bd74875a37cacc833312a8c8e;hpb=06e810f29b6e9e3fe8ba8aba5d3823375da9bbb2 diff --git a/pv/data/decode/annotation.cpp b/pv/data/decode/annotation.cpp index 6a30921e..7f233478 100644 --- a/pv/data/decode/annotation.cpp +++ b/pv/data/decode/annotation.cpp @@ -14,58 +14,140 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, see . */ extern "C" { #include } -#include "annotation.h" +#include +#include -using namespace std; +#include +#include +#include "pv/data/decode/rowdata.hpp" + +using std::vector; 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* 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); +} - _format = pda->ann_format; +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(*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 { - return _start_sample; + return start_sample_; } uint64_t Annotation::end_sample() const { - return _end_sample; + return end_sample_; +} + +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* 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_); } -int Annotation::format() const +const QColor Annotation::dark_color() const { - return _format; + return data_->row()->get_dark_class_color(ann_class_id_); } -const std::vector& Annotation::annotations() const +bool Annotation::operator<(const Annotation &other) const { - return _annotations; + return (start_sample_ < other.start_sample_); } } // namespace decode