* 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 <http://www.gnu.org/licenses/>.
*/
-extern "C" {
#include <libsigrokdecode/libsigrokdecode.h>
-}
+#include <cassert>
#include <vector>
-#include "annotation.h"
+#include <pv/data/decode/annotation.hpp>
+#include <pv/data/decode/decoder.hpp>
+#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<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);
+}
- _format = pda->ann_format;
- _row = 0;
+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
{
- 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<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());
}
-int Annotation::format() const
+const QColor Annotation::color() const
{
- return _format;
+ return data_->row()->get_class_color(ann_class_id_);
}
-int Annotation::row() const
+const QColor Annotation::bright_color() const
{
- return _row;
+ return data_->row()->get_bright_class_color(ann_class_id_);
}
-const std::vector<QString>& Annotation::annotations() const
+const QColor Annotation::dark_color() const
{
- return _annotations;
+ return data_->row()->get_dark_class_color(ann_class_id_);
}
-void Annotation::set_row(int row)
+bool Annotation::operator<(const Annotation &other) const
{
- _row = row;
+ return (start_sample_ < other.start_sample_);
}
} // namespace decode