projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ViewWidget: Moved in drag_items
[pulseview.git]
/
pv
/
view
/
decodetrace.cpp
diff --git
a/pv/view/decodetrace.cpp
b/pv/view/decodetrace.cpp
index 6947491a285ead6b3317e166e4ca645354d627c6..be2dadf11a0023a5cc1bce1204b71ad1a7a43d8f 100644
(file)
--- a/
pv/view/decodetrace.cpp
+++ b/
pv/view/decodetrace.cpp
@@
-41,11
+41,11
@@
extern "C" {
#include "decodetrace.hpp"
#include "decodetrace.hpp"
-#include <pv/s
igs
ession.hpp>
+#include <pv/session.hpp>
#include <pv/data/decoderstack.hpp>
#include <pv/data/decode/decoder.hpp>
#include <pv/data/logic.hpp>
#include <pv/data/decoderstack.hpp>
#include <pv/data/decode/decoder.hpp>
#include <pv/data/logic.hpp>
-#include <pv/data/logics
napsho
t.hpp>
+#include <pv/data/logics
egmen
t.hpp>
#include <pv/data/decode/annotation.hpp>
#include <pv/view/logicsignal.hpp>
#include <pv/view/view.hpp>
#include <pv/data/decode/annotation.hpp>
#include <pv/view/logicsignal.hpp>
#include <pv/view/view.hpp>
@@
-123,13
+123,12
@@
const QColor DecodeTrace::OutlineColours[16] = {
QColor(0x6B, 0x23, 0x37)
};
QColor(0x6B, 0x23, 0x37)
};
-DecodeTrace::DecodeTrace(pv::S
igS
ession &session,
+DecodeTrace::DecodeTrace(pv::Session &session,
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),
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)
row_height_(0),
delete_mapper_(this),
show_hide_mapper_(this)
@@
-160,39
+159,38
@@
pair<int, int> DecodeTrace::v_extents() const
{
/// @todo Replace this with an implementation that knows the true
/// height of the trace
{
/// @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;
+ const int row_height = (ViewItemPaintParams::text_height() * 6) / 4;
return make_pair(-row_height / 2, row_height * 7 / 2);
}
return make_pair(-row_height / 2, row_height * 7 / 2);
}
-void DecodeTrace::paint_back(QPainter &p,
int left, int right
)
+void DecodeTrace::paint_back(QPainter &p,
const ViewItemPaintParams &pp
)
{
{
- Trace::paint_back(p,
left, right
);
- paint_axis(p,
get_visual_y(), left, right
);
+ Trace::paint_back(p,
pp
);
+ paint_axis(p,
pp, get_visual_y()
);
}
}
-void DecodeTrace::paint_mid(QPainter &p,
int left, int right
)
+void DecodeTrace::paint_mid(QPainter &p,
const ViewItemPaintParams &pp
)
{
using namespace pv::data::decode;
{
using namespace pv::data::decode;
- QFontMetrics m(QApplication::font());
- text_height_ = m.boundingRect(QRect(), 0, "Tg").height();
- row_height_ = (text_height_ * 6) / 4;
- const int annotation_height = (text_height_ * 5) / 4;
+ const int text_height = ViewItemPaintParams::text_height();
+ row_height_ = (text_height * 6) / 4;
+ const int annotation_height = (text_height * 5) / 4;
assert(decoder_stack_);
const QString err = decoder_stack_->error_message();
if (!err.isEmpty())
{
assert(decoder_stack_);
const QString err = decoder_stack_->error_message();
if (!err.isEmpty())
{
- draw_unresolved_period(p, annotation_height, left, right);
- draw_error(p, err, left, right);
+ draw_unresolved_period(
+ p, annotation_height, pp.left(), pp.right());
+ draw_error(p, err, pp);
return;
}
// Iterate through the rows
int y = get_visual_y();
return;
}
// Iterate through the rows
int y = get_visual_y();
- pair<uint64_t, uint64_t> sample_range = get_sample_range(left, right);
+ pair<uint64_t, uint64_t> sample_range = get_sample_range(
+ pp.left(), pp.right());
assert(decoder_stack_);
const vector<Row> rows(decoder_stack_->get_visible_rows());
assert(decoder_stack_);
const vector<Row> rows(decoder_stack_->get_visible_rows());
@@
-213,9
+211,8
@@
void DecodeTrace::paint_mid(QPainter &p, int left, int right)
sample_range.first, sample_range.second);
if (!annotations.empty()) {
for (const Annotation &a : annotations)
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);
+ draw_annotation(a, p, annotation_height,
+ pp, y, base_colour);
y += row_height_;
visible_rows_.push_back(rows[i]);
y += row_height_;
visible_rows_.push_back(rows[i]);
@@
-223,15
+220,13
@@
void DecodeTrace::paint_mid(QPainter &p, int left, int right)
}
// Draw the hatching
}
// Draw the hatching
- draw_unresolved_period(p, annotation_height,
left, right
);
+ draw_unresolved_period(p, annotation_height,
pp.left(), pp.right()
);
}
}
-void DecodeTrace::paint_fore(QPainter &p,
int left, int right
)
+void DecodeTrace::paint_fore(QPainter &p,
const ViewItemPaintParams &pp
)
{
using namespace pv::data::decode;
{
using namespace pv::data::decode;
- (void)right;
-
assert(row_height_);
for (size_t i = 0; i < visible_rows_.size(); i++)
assert(row_height_);
for (size_t i = 0; i < visible_rows_.size(); i++)
@@
-244,15
+239,15
@@
void DecodeTrace::paint_fore(QPainter &p, int left, int right)
if (i != 0)
{
const QPointF points[] = {
if (i != 0)
{
const QPointF points[] = {
- QPointF(
left
, y - ArrowSize),
- QPointF(
left
+ ArrowSize, y),
- QPointF(
left
, y + ArrowSize)
+ QPointF(
pp.left()
, y - ArrowSize),
+ QPointF(
pp.left()
+ ArrowSize, y),
+ QPointF(
pp.left()
, y + ArrowSize)
};
p.drawPolygon(points, countof(points));
}
};
p.drawPolygon(points, countof(points));
}
- const QRect r(
left
+ ArrowSize * 2, y - row_height_ / 2,
-
right - left
, row_height_);
+ const QRect r(
pp.left()
+ ArrowSize * 2, y - row_height_ / 2,
+
pp.right() - pp.left()
, row_height_);
const QString h(visible_rows_[i].title());
const int f = Qt::AlignLeft | Qt::AlignVCenter |
Qt::TextDontClip;
const QString h(visible_rows_[i].title());
const int f = Qt::AlignLeft | Qt::AlignVCenter |
Qt::TextDontClip;
@@
-337,7
+332,7
@@
QMenu* DecodeTrace::create_context_menu(QWidget *parent)
}
void DecodeTrace::draw_annotation(const pv::data::decode::Annotation &a,
}
void DecodeTrace::draw_annotation(const pv::data::decode::Annotation &a,
- QPainter &p,
QColor text_color, int h, int left, int right
, int y,
+ QPainter &p,
int h, const ViewItemPaintParams &pp
, int y,
size_t base_colour) const
{
double samples_per_pixel, pixels_offset;
size_t base_colour) const
{
double samples_per_pixel, pixels_offset;
@@
-353,19
+348,17
@@
void DecodeTrace::draw_annotation(const pv::data::decode::Annotation &a,
const QColor &fill = Colours[colour];
const QColor &outline = OutlineColours[colour];
const QColor &fill = Colours[colour];
const QColor &outline = OutlineColours[colour];
- if (start >
right + DrawPadding || end < left
- DrawPadding)
+ if (start >
pp.right() + DrawPadding || end < pp.left()
- DrawPadding)
return;
if (a.start_sample() == a.end_sample())
return;
if (a.start_sample() == a.end_sample())
- draw_instant(a, p, fill, outline, text_color, h,
- start, y);
+ draw_instant(a, p, fill, outline, h, start, y);
else
else
- draw_range(a, p, fill, outline, text_color, h,
- start, end, y);
+ draw_range(a, p, fill, outline, h, start, end, y);
}
void DecodeTrace::draw_instant(const pv::data::decode::Annotation &a, QPainter &p,
}
void DecodeTrace::draw_instant(const pv::data::decode::Annotation &a, QPainter &p,
- QColor fill, QColor outline,
QColor text_color,
int h, double x, int y) const
+ QColor fill, QColor outline, int h, double x, int y) const
{
const QString text = a.annotations().empty() ?
QString() : a.annotations().back();
{
const QString text = a.annotations().empty() ?
QString() : a.annotations().back();
@@
-377,12
+370,12
@@
void DecodeTrace::draw_instant(const pv::data::decode::Annotation &a, QPainter &
p.setBrush(fill);
p.drawRoundedRect(rect, h / 2, h / 2);
p.setBrush(fill);
p.drawRoundedRect(rect, h / 2, h / 2);
- p.setPen(
text_color
);
+ p.setPen(
Qt::black
);
p.drawText(rect, Qt::AlignCenter | Qt::AlignVCenter, text);
}
void DecodeTrace::draw_range(const pv::data::decode::Annotation &a, QPainter &p,
p.drawText(rect, Qt::AlignCenter | Qt::AlignVCenter, text);
}
void DecodeTrace::draw_range(const pv::data::decode::Annotation &a, QPainter &p,
- QColor fill, QColor outline,
QColor text_color,
int h, double start,
+ QColor fill, QColor outline, int h, double start,
double end, int y) const
{
const double top = y + .5 - h / 2;
double end, int y) const
{
const double top = y + .5 - h / 2;
@@
-420,7
+413,7
@@
void DecodeTrace::draw_range(const pv::data::decode::Annotation &a, QPainter &p,
if (rect.width() <= 4)
return;
if (rect.width() <= 4)
return;
- p.setPen(
text_color
);
+ p.setPen(
Qt::black
);
// Try to find an annotation that will fit
QString best_annotation;
// Try to find an annotation that will fit
QString best_annotation;
@@
-441,7
+434,7
@@
void DecodeTrace::draw_range(const pv::data::decode::Annotation &a, QPainter &p,
}
void DecodeTrace::draw_error(QPainter &p, const QString &message,
}
void DecodeTrace::draw_error(QPainter &p, const QString &message,
-
int left, int right
)
+
const ViewItemPaintParams &pp
)
{
const int y = get_visual_y();
{
const int y = get_visual_y();
@@
-449,7
+442,7
@@
void DecodeTrace::draw_error(QPainter &p, const QString &message,
p.setBrush(ErrorBgColour);
const QRectF bounding_rect =
p.setBrush(ErrorBgColour);
const QRectF bounding_rect =
- QRectF(
left, INT_MIN / 2 + y, right - left
, INT_MAX);
+ QRectF(
pp.width(), INT_MIN / 2 + y, pp.width()
, INT_MAX);
const QRectF text_rect = p.boundingRect(bounding_rect,
Qt::AlignCenter, message);
const float r = text_rect.height() / 4;
const QRectF text_rect = p.boundingRect(bounding_rect,
Qt::AlignCenter, message);
const float r = text_rect.height() / 4;
@@
-457,7
+450,7
@@
void DecodeTrace::draw_error(QPainter &p, const QString &message,
p.drawRoundedRect(text_rect.adjusted(-r, -r, r, r), r, r,
Qt::AbsoluteSize);
p.drawRoundedRect(text_rect.adjusted(-r, -r, r, r), r, r,
Qt::AbsoluteSize);
- p.setPen(
get_text_colour()
);
+ p.setPen(
Qt::black
);
p.drawText(text_rect, message);
}
p.drawText(text_rect, message);
}
@@
-478,20
+471,20
@@
void DecodeTrace::draw_unresolved_period(QPainter &p, int h, int left,
// 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
- // LogicSignals have the same data/s
napsho
t
+ // LogicSignals have the same data/s
egmen
t
for (const shared_ptr<Decoder> &dec : stack)
if (dec && !dec->channels().empty() &&
((logic_signal = (*dec->channels().begin()).second)) &&
((data = logic_signal->logic_data())))
break;
for (const shared_ptr<Decoder> &dec : stack)
if (dec && !dec->channels().empty() &&
((logic_signal = (*dec->channels().begin()).second)) &&
((data = logic_signal->logic_data())))
break;
- if (!data || data->
get_snapsho
ts().empty())
+ if (!data || data->
logic_segmen
ts().empty())
return;
return;
- const shared_ptr<LogicS
napshot> snapsho
t =
- data->
get_snapsho
ts().front();
- assert(s
napsho
t);
- const int64_t sample_count = (int64_t)s
napsho
t->get_sample_count();
+ const shared_ptr<LogicS
egment> segmen
t =
+ data->
logic_segmen
ts().front();
+ assert(s
egmen
t);
+ const int64_t sample_count = (int64_t)s
egmen
t->get_sample_count();
if (sample_count == 0)
return;
if (sample_count == 0)
return;
@@
-531,7
+524,7
@@
pair<double, double> DecodeTrace::get_pixels_offset_samples_per_pixel() const
assert(scale > 0);
const double pixels_offset =
assert(scale > 0);
const double pixels_offset =
- (view->offset() - decoder_stack_->
get_
start_time()) / scale;
+ (view->offset() - decoder_stack_->start_time()) / scale;
double samplerate = decoder_stack_->samplerate();
double samplerate = decoder_stack_->samplerate();
@@
-562,9
+555,15
@@
int DecodeTrace::get_row_at_point(const QPoint &point)
if (!row_height_)
return -1;
if (!row_height_)
return -1;
- const int row = (point.y() - get_visual_y() + row_height_ / 2) /
- row_height_;
- if (row < 0 || row >= (int)visible_rows_.size())
+ const int y = (point.y() - get_visual_y() + row_height_ / 2);
+
+ /* Integer divison of (x-1)/x would yield 0, so we check for this. */
+ if (y < 0)
+ return -1;
+
+ const int row = y / row_height_;
+
+ if (row >= (int)visible_rows_.size())
return -1;
return row;
return -1;
return row;
@@
-593,11
+592,6
@@
const QString DecodeTrace::get_annotation_at_point(const QPoint &point)
QString() : annotations[0].annotations().front();
}
QString() : annotations[0].annotations().front();
}
-void DecodeTrace::hide_hover_annotation()
-{
- QToolTip::hideText();
-}
-
void DecodeTrace::hover_point_changed()
{
assert(owner_);
void DecodeTrace::hover_point_changed()
{
assert(owner_);
@@
-611,7
+605,7
@@
void DecodeTrace::hover_point_changed()
assert(view);
if (!row_height_ || ann.isEmpty()) {
assert(view);
if (!row_height_ || ann.isEmpty()) {
-
hide_hover_annotation
();
+
QToolTip::hideText
();
return;
}
return;
}
@@
-632,7
+626,7
@@
void DecodeTrace::hover_point_changed()
hp.setY(get_visual_y() - (row_height_ / 2) +
(hover_row * row_height_) -
hp.setY(get_visual_y() - (row_height_ / 2) +
(hover_row * row_height_) -
- row_height_ - text_size.height());
+ row_height_ - text_size.height()
- padding
);
QToolTip::showText(view->viewport()->mapToGlobal(hp), ann);
}
QToolTip::showText(view->viewport()->mapToGlobal(hp), ann);
}
@@
-779,7
+773,7
@@
void DecodeTrace::commit_channels()
void DecodeTrace::on_new_decode_data()
{
if (owner_)
void DecodeTrace::on_new_decode_data()
{
if (owner_)
- owner_->appearance_changed(false, true);
+ owner_->
row_item_
appearance_changed(false, true);
}
void DecodeTrace::delete_pressed()
}
void DecodeTrace::delete_pressed()
@@
-839,7
+833,7
@@
void DecodeTrace::on_show_hide_decoder(int index)
decoder_forms_[index]->set_decoder_visible(show);
if (owner_)
decoder_forms_[index]->set_decoder_visible(show);
if (owner_)
- owner_->appearance_changed(false, true);
+ owner_->
row_item_
appearance_changed(false, true);
}
} // namespace view
}
} // namespace view