X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fdecodetrace.cpp;h=5b9b3f36c586568111684bfbfc73fd491b1a208e;hb=HEAD;hp=67c9b1c48409e4e2a2525f6592ee3d47d963afde;hpb=f14dee773586e9f6afbeac8b7f552fb378f36d9b;p=pulseview.git diff --git a/pv/views/trace/decodetrace.cpp b/pv/views/trace/decodetrace.cpp index 67c9b1c4..63384911 100644 --- a/pv/views/trace/decodetrace.cpp +++ b/pv/views/trace/decodetrace.cpp @@ -17,9 +17,7 @@ * along with this program; if not, see . */ -extern "C" { #include -} #include #include @@ -82,7 +80,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 +158,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; @@ -188,7 +186,16 @@ DecodeTrace::DecodeTrace(pv::Session &session, this, SLOT(on_decode_finished())); connect(decode_signal_.get(), SIGNAL(channels_updated()), this, SLOT(on_channels_updated())); - +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + connect(&delete_mapper_, SIGNAL(mappedInt(int)), + this, SLOT(on_delete_decoder(int))); + connect(&show_hide_mapper_, SIGNAL(mappedInt(int)), + this, SLOT(on_show_hide_decoder(int))); + connect(&row_show_hide_mapper_, SIGNAL(mappedInt(int)), + this, SLOT(on_show_hide_row(int))); + connect(&class_show_hide_mapper_, SIGNAL(mappedObject(QObject*)), + this, SLOT(on_show_hide_class(QObject*))); +#else connect(&delete_mapper_, SIGNAL(mapped(int)), this, SLOT(on_delete_decoder(int))); connect(&show_hide_mapper_, SIGNAL(mapped(int)), @@ -197,6 +204,7 @@ DecodeTrace::DecodeTrace(pv::Session &session, this, SLOT(on_show_hide_row(int))); connect(&class_show_hide_mapper_, SIGNAL(mapped(QWidget*)), this, SLOT(on_show_hide_class(QWidget*))); +#endif connect(&delayed_trace_updater_, SIGNAL(timeout()), this, SLOT(on_delayed_trace_update())); @@ -336,9 +344,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"; @@ -669,10 +677,19 @@ void DecodeTrace::mouse_left_press_event(const QMouseEvent* event) continue; unsigned int y = get_row_y(&r); - if ((event->x() > 0) && (event->x() <= (int)(ArrowSize + 3 + r.title_width)) && - (event->y() > (int)(y - (default_row_height_ / 2))) && - (event->y() <= (int)(y + (default_row_height_ / 2)))) { - + bool need_anim = true; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + need_anim &= event->position().x() > 0; + need_anim &= event->position().x() <= (int)(ArrowSize + 3 + r.title_width); + need_anim &= event->position().y() > (int)(y - (default_row_height_ / 2)); + need_anim &= event->position().y() <= (int)(y + (default_row_height_ / 2)); +#else + need_anim &= event->x() > 0; + need_anim &= event->x() <= (int)(ArrowSize + 3 + r.title_width); + need_anim &= event->y() > (int)(y - (default_row_height_ / 2)); + need_anim &= event->y() <= (int)(y + (default_row_height_ / 2)); +#endif + if (need_anim) { if (r.expanded) { r.collapsing = true; r.expanded = false; @@ -907,28 +924,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; @@ -1054,8 +1049,17 @@ const QString DecodeTrace::get_annotation_at_point(const QPoint &point) decode_signal_->get_annotation_subset(annotations, r->decode_row, current_segment_, sample_range.first, sample_range.second); - return (annotations.empty()) ? - QString() : annotations[0]->annotations()->front(); + const Annotation* a = annotations.empty() ? nullptr : annotations[0]; + + // Create a string of the format "CLASS: VALUE" + QString s; + if (a) { + if (!a->ann_class_description().isEmpty()) + s = a->ann_class_description() + ": "; + s += a->annotations()->front(); + } + + return s; } void DecodeTrace::create_decoder_form(int index, shared_ptr &dec, @@ -1153,10 +1157,9 @@ QComboBox* DecodeTrace::create_channel_selector(QWidget *parent, const DecodeCha for (const shared_ptr &b : sig_list) { assert(b); if (b->logic_data() && b->enabled()) { - selector->addItem(b->name(), - QVariant::fromValue((void*)b.get())); + selector->addItem(b->name(), QVariant::fromValue(b)); - if (ch->assigned_signal == b.get()) + if (ch->assigned_signal == b) selector->setCurrentIndex(selector->count() - 1); } } @@ -1265,6 +1268,19 @@ void DecodeTrace::initialize_row_widgets(DecodeTraceRow* r, unsigned int row_id) QPalette header_palette = owner_->view()->palette(); QPalette selector_palette = owner_->view()->palette(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) + if (GlobalSettings::current_theme_is_dark()) { + header_palette.setColor(QPalette::Window, + QColor(255, 255, 255, ExpansionAreaHeaderAlpha)); + selector_palette.setColor(QPalette::Window, + QColor(255, 255, 255, ExpansionAreaAlpha)); + } else { + header_palette.setColor(QPalette::Window, + QColor(0, 0, 0, ExpansionAreaHeaderAlpha)); + selector_palette.setColor(QPalette::Window, + QColor(0, 0, 0, ExpansionAreaAlpha)); + } +#else if (GlobalSettings::current_theme_is_dark()) { header_palette.setColor(QPalette::Background, QColor(255, 255, 255, ExpansionAreaHeaderAlpha)); @@ -1276,6 +1292,7 @@ void DecodeTrace::initialize_row_widgets(DecodeTraceRow* r, unsigned int row_id) selector_palette.setColor(QPalette::Background, QColor(0, 0, 0, ExpansionAreaAlpha)); } +#endif const int w = m.boundingRect(r->decode_row->title()).width() + RowTitleMargin; r->title_width = w; @@ -1545,8 +1562,8 @@ void DecodeTrace::on_channel_selected(int) QComboBox *cb = qobject_cast(QObject::sender()); // Determine signal that was selected - const data::SignalBase *signal = - (data::SignalBase*)cb->itemData(cb->currentIndex()).value(); + shared_ptr signal = + cb->itemData(cb->currentIndex()).value>(); // Determine decode channel ID this combo box is the channel selector for const uint16_t id = channel_id_map_.at(cb); @@ -1618,7 +1635,11 @@ void DecodeTrace::on_show_hide_row(int row_id) owner_->row_item_appearance_changed(false, true); } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +void DecodeTrace::on_show_hide_class(QObject* sender) +#else void DecodeTrace::on_show_hide_class(QWidget* sender) +#endif { void* ann_class_ptr = sender->property("ann_class_ptr").value(); assert(ann_class_ptr);