X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fdecodetrace.cpp;h=2902c936552757ee1c88160a32d0f2b8d24ca82a;hb=f6a93932056dab5e2f75207b65197b436d4141a5;hp=53998b2ea7a0dc30f0728fdc9d895dd557425127;hpb=88a2597864920ecdbe66cf0cd4b8172bdabb2263;p=pulseview.git diff --git a/pv/views/trace/decodetrace.cpp b/pv/views/trace/decodetrace.cpp index 53998b2e..2902c936 100644 --- a/pv/views/trace/decodetrace.cpp +++ b/pv/views/trace/decodetrace.cpp @@ -82,7 +82,6 @@ namespace pv { namespace views { namespace trace { -const QColor DecodeTrace::ErrorBgColor = QColor(0xEF, 0x29, 0x29); const QColor DecodeTrace::NoDecodeColor = QColor(0x88, 0x8A, 0x85); const QColor DecodeTrace::ExpandMarkerWarnColor = QColor(0xFF, 0xA5, 0x00); // QColorConstants::Svg::orange const QColor DecodeTrace::ExpandMarkerHiddenColor = QColor(0x69, 0x69, 0x69); // QColorConstants::Svg::dimgray @@ -161,7 +160,8 @@ DecodeTrace::DecodeTrace(pv::Session &session, // Determine shortest string we want to see displayed in full QFontMetrics m(QApplication::font()); - min_useful_label_width_ = m.width("XX"); // e.g. two hex characters + // e.g. two hex characters + min_useful_label_width_ = util::text_width(m, "XX"); default_row_height_ = (ViewItemPaintParams::text_height() * 6) / 4; annotation_height_ = (ViewItemPaintParams::text_height() * 5) / 4; @@ -336,9 +336,9 @@ void DecodeTrace::paint_mid(QPainter &p, ViewItemPaintParams &pp) owner_->row_item_appearance_changed(false, true); } - const QString err = decode_signal_->error_message(); + const QString err = base_->get_error_message(); if (!err.isEmpty()) - draw_error(p, err, pp); + paint_error(p, pp); #if DECODETRACE_SHOW_RENDER_TIME qDebug() << "Rendering" << base_->name() << "took" << render_time_.elapsed() << "ms"; @@ -612,9 +612,12 @@ void DecodeTrace::hover_point_changed(const QPoint &hp) r.expand_marker_highlighted = false; if (hover_row) { - int row_y = get_row_y(hover_row); + const pair extents = v_extents(); + const int trace_top = get_visual_y() + extents.first; + const int trace_btm = get_visual_y() + extents.second; + if ((hp.x() > 0) && (hp.x() < (int)(ArrowSize + 3 + hover_row->title_width)) && - (hp.y() > (int)(row_y - ArrowSize)) && (hp.y() < (int)(row_y + ArrowSize))) { + (hp.y() > trace_top) && (hp.y() < trace_btm)) { hover_row->expand_marker_highlighted = true; show_hidden_rows_ = true; @@ -697,7 +700,7 @@ void DecodeTrace::mouse_left_press_event(const QMouseEvent* event) void DecodeTrace::draw_annotations(deque& annotations, QPainter &p, const ViewItemPaintParams &pp, int y, const DecodeTraceRow& row) { - Annotation::Class block_class = 0; + uint32_t block_class = 0; bool block_class_uniform = true; qreal block_start = 0; int block_ann_count = 0; @@ -802,7 +805,7 @@ void DecodeTrace::draw_annotation(const Annotation* a, QPainter &p, } void DecodeTrace::draw_annotation_block(qreal start, qreal end, - Annotation::Class ann_class, bool use_ann_format, QPainter &p, int y, + uint32_t ann_class, bool use_ann_format, QPainter &p, int y, const DecodeTraceRow& row) const { const double top = y + .5 - annotation_height_ / 2; @@ -904,28 +907,6 @@ void DecodeTrace::draw_range(const Annotation* a, QPainter &p, best_annotation, Qt::ElideRight, rect.width())); } -void DecodeTrace::draw_error(QPainter &p, const QString &message, - const ViewItemPaintParams &pp) -{ - const int y = get_visual_y(); - - double samples_per_pixel, pixels_offset; - tie(pixels_offset, samples_per_pixel) = get_pixels_offset_samples_per_pixel(); - - p.setPen(ErrorBgColor.darker()); - p.setBrush(ErrorBgColor); - - const QRectF bounding_rect = QRectF(pp.left(), INT_MIN / 2 + y, pp.right(), INT_MAX); - - const QRectF text_rect = p.boundingRect(bounding_rect, Qt::AlignCenter, message); - const qreal r = text_rect.height() / 4; - - p.drawRoundedRect(text_rect.adjusted(-r, -r, r, r), r, r, Qt::AbsoluteSize); - - p.setPen(Qt::black); - p.drawText(text_rect, message); -} - void DecodeTrace::draw_unresolved_period(QPainter &p, int left, int right) const { double samples_per_pixel, pixels_offset; @@ -971,7 +952,7 @@ pair DecodeTrace::get_pixels_offset_samples_per_pixel() const const double pixels_offset = ((view->offset() - decode_signal_->start_time()) / scale).convert_to(); - double samplerate = decode_signal_->samplerate(); + double samplerate = decode_signal_->get_samplerate(); // Show sample rate as 1Hz when it is unknown if (samplerate == 0.0) @@ -1142,7 +1123,7 @@ QComboBox* DecodeTrace::create_channel_selector(QWidget *parent, const DecodeCha QComboBox *selector = new QComboBox(parent); - selector->addItem("-", qVariantFromValue((void*)nullptr)); + selector->addItem("-", QVariant::fromValue((void*)nullptr)); if (!ch->assigned_signal) selector->setCurrentIndex(0); @@ -1151,7 +1132,7 @@ QComboBox* DecodeTrace::create_channel_selector(QWidget *parent, const DecodeCha assert(b); if (b->logic_data() && b->enabled()) { selector->addItem(b->name(), - qVariantFromValue((void*)b.get())); + QVariant::fromValue((void*)b.get())); if (ch->assigned_signal == b.get()) selector->setCurrentIndex(selector->count() - 1); @@ -1166,9 +1147,9 @@ QComboBox* DecodeTrace::create_channel_selector_init_state(QWidget *parent, { QComboBox *selector = new QComboBox(parent); - selector->addItem("0", qVariantFromValue((int)SRD_INITIAL_PIN_LOW)); - selector->addItem("1", qVariantFromValue((int)SRD_INITIAL_PIN_HIGH)); - selector->addItem("X", qVariantFromValue((int)SRD_INITIAL_PIN_SAME_AS_SAMPLE0)); + selector->addItem("0", QVariant::fromValue((int)SRD_INITIAL_PIN_LOW)); + selector->addItem("1", QVariant::fromValue((int)SRD_INITIAL_PIN_HIGH)); + selector->addItem("X", QVariant::fromValue((int)SRD_INITIAL_PIN_SAME_AS_SAMPLE0)); selector->setCurrentIndex(ch->initial_pin_state); @@ -1340,7 +1321,7 @@ void DecodeTrace::initialize_row_widgets(DecodeTraceRow* r, unsigned int row_id) for (const AnnotationClass* ann_class : ann_classes) { cb = new QCheckBox(); cb->setText(tr(ann_class->description)); - cb->setChecked(ann_class->visible); + cb->setChecked(ann_class->visible()); int dim = ViewItemPaintParams::text_height() - 2; QPixmap pixmap(dim, dim); @@ -1621,7 +1602,7 @@ void DecodeTrace::on_show_hide_class(QWidget* sender) assert(ann_class_ptr); AnnotationClass* ann_class = (AnnotationClass*)ann_class_ptr; - ann_class->visible = !ann_class->visible; + ann_class->set_visible(!ann_class->visible()); void* row_ptr = sender->property("decode_trace_row_ptr").value(); assert(row_ptr);