std::shared_ptr<pv::data::DecoderStack> decoder_stack, int index) :
Trace(QString::fromUtf8(
decoder_stack->stack().front()->decoder()->name)),
std::shared_ptr<pv::data::DecoderStack> decoder_stack, int index) :
Trace(QString::fromUtf8(
decoder_stack->stack().front()->decoder()->name)),
- _session(session),
- _decoder_stack(decoder_stack),
- _text_height(0),
- _row_height(0),
- _delete_mapper(this),
- _show_hide_mapper(this)
+ session_(session),
+ decoder_stack_(decoder_stack),
+ text_height_(0),
+ row_height_(0),
+ delete_mapper_(this),
+ show_hide_mapper_(this)
- assert(view);
- Trace::set_view(view);
+ /// @todo Replace this with an implementation that knows the true
+ /// height of the trace
+ QFontMetrics m(QApplication::font());
+ const int text_height = m.boundingRect(QRect(), 0, "Tg").height();
+ const int row_height = (text_height * 6) / 4;
+ return make_pair(-row_height / 2, row_height * 7 / 2);
}
void DecodeTrace::paint_back(QPainter &p, int left, int right)
{
Trace::paint_back(p, left, right);
}
void DecodeTrace::paint_back(QPainter &p, int left, int right)
{
Trace::paint_back(p, left, right);
- paint_axis(p, get_y(), left, right);
+ paint_axis(p, get_visual_y(), left, right);
- _text_height = m.boundingRect(QRect(), 0, "Tg").height();
- _row_height = (_text_height * 6) / 4;
- const int annotation_height = (_text_height * 5) / 4;
+ text_height_ = m.boundingRect(QRect(), 0, "Tg").height();
+ row_height_ = (text_height_ * 6) / 4;
+ const int annotation_height = (text_height_ * 5) / 4;
if (!err.isEmpty())
{
draw_unresolved_period(p, annotation_height, left, right);
if (!err.isEmpty())
{
draw_unresolved_period(p, annotation_height, left, right);
sample_range.first, sample_range.second);
if (!annotations.empty()) {
for (const Annotation &a : annotations)
draw_annotation(a, p, get_text_colour(),
annotation_height, left, right, y,
base_colour);
sample_range.first, sample_range.second);
if (!annotations.empty()) {
for (const Annotation &a : annotations)
draw_annotation(a, p, get_text_colour(),
annotation_height, left, right, y,
base_colour);
- const QRect r(left + ArrowSize * 2, y - _row_height / 2,
- right - left, _row_height);
- const QString h(_visible_rows[i].title());
+ const QRect r(left + ArrowSize * 2, y - row_height_ / 2,
+ right - left, row_height_);
+ const QString h(visible_rows_[i].title());
// Add the standard options
Trace::populate_popup_form(parent, form);
// Add the decoder options
// Add the standard options
Trace::populate_popup_form(parent, form);
// Add the decoder options
QPainter &p, QColor text_color, int h, int left, int right, int y,
size_t base_colour) const
{
QPainter &p, QColor text_color, int h, int left, int right, int y,
size_t base_colour) const
{
- const double samples_per_pixel = get_samples_per_pixel();
- const double pixels_offset = get_pixels_offset();
+ double samples_per_pixel, pixels_offset;
+ tie(pixels_offset, samples_per_pixel) =
+ get_pixels_offset_samples_per_pixel();
// We get the logic data of the first channel in the list.
// This works because we are currently assuming all
// We get the logic data of the first channel in the list.
// This works because we are currently assuming all
- const double samples_per_pixel = get_samples_per_pixel();
- const double pixels_offset = get_pixels_offset();
+ tie(pixels_offset, samples_per_pixel) =
+ get_pixels_offset_samples_per_pixel();
const double start = max(samples_decoded /
samples_per_pixel - pixels_offset, left - 1.0);
const double start = max(samples_decoded /
samples_per_pixel - pixels_offset, left - 1.0);
}
pair<uint64_t, uint64_t> DecodeTrace::get_sample_range(
int x_start, int x_end) const
{
}
pair<uint64_t, uint64_t> DecodeTrace::get_sample_range(
int x_start, int x_end) const
{
- const double samples_per_pixel = get_samples_per_pixel();
- const double pixels_offset = get_pixels_offset();
+ double samples_per_pixel, pixels_offset;
+ tie(pixels_offset, samples_per_pixel) =
+ get_pixels_offset_samples_per_pixel();
const uint64_t start = (uint64_t)max(
(x_start + pixels_offset) * samples_per_pixel, 0.0);
const uint64_t start = (uint64_t)max(
(x_start + pixels_offset) * samples_per_pixel, 0.0);
- const int row = (point.y() - get_y() + _row_height / 2) / _row_height;
- if (row < 0 || row >= (int)_visible_rows.size())
+ const int row = (point.y() - get_visual_y() + row_height_ / 2) /
+ row_height_;
+ if (row < 0 || row >= (int)visible_rows_.size())
- assert(_decoder_stack);
- _decoder_stack->get_annotation_subset(annotations, _visible_rows[row],
+ assert(decoder_stack_);
+ decoder_stack_->get_annotation_subset(annotations, visible_rows_[row],
sample_range.first, sample_range.second);
return (annotations.empty()) ?
sample_range.first, sample_range.second);
return (annotations.empty()) ?
// decode trace, not below.
hp.setX(hp.x() - (text_size.width() / 2) - padding);
// decode trace, not below.
hp.setX(hp.x() - (text_size.width() / 2) - padding);
- hp.setY(get_y() - (_row_height / 2) + (hover_row * _row_height)
- - _row_height - text_size.height());
+ hp.setY(get_visual_y() - (row_height_ / 2) +
+ (hover_row * row_height_) -
+ row_height_ - text_size.height());
- _delete_mapper.setMapping(group, index);
- connect(group, SIGNAL(delete_decoder()), &_delete_mapper, SLOT(map()));
+ delete_mapper_.setMapping(group, index);
+ connect(group, SIGNAL(delete_decoder()), &delete_mapper_, SLOT(map()));
.arg(QString::fromUtf8(pdch->desc)), combo);
const ChannelSelector s = {combo, dec, pdch};
.arg(QString::fromUtf8(pdch->desc)), combo);
const ChannelSelector s = {combo, dec, pdch};
.arg(QString::fromUtf8(pdch->desc)), combo);
const ChannelSelector s = {combo, dec, pdch};
.arg(QString::fromUtf8(pdch->desc)), combo);
const ChannelSelector s = {combo, dec, pdch};
qVariantFromValue((void*)s.get()));
if ((*channel_iter).second == s)
selector->setCurrentIndex(i + 1);
qVariantFromValue((void*)s.get()));
if ((*channel_iter).second == s)
selector->setCurrentIndex(i + 1);
- for (const ChannelSelector &s : _channel_selectors)
+ shared_lock<shared_mutex> lock(session_.signals_mutex());
+ const vector< shared_ptr<Signal> > &sigs(session_.signals());
+
+ for (const ChannelSelector &s : channel_selectors_)