projects
/
pulseview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
SigSession: Added signals_mutex(), and made signals() give a reference
[pulseview.git]
/
pv
/
view
/
decodetrace.cpp
diff --git
a/pv/view/decodetrace.cpp
b/pv/view/decodetrace.cpp
index 700b221b3b9d12c94bc1f9b64cc4877743cc69c4..138ba0a14263fc92e0ce09cb74232f227d0b0c22 100644
(file)
--- a/
pv/view/decodetrace.cpp
+++ b/
pv/view/decodetrace.cpp
@@
-22,6
+22,8
@@
extern "C" {
#include <libsigrokdecode/libsigrokdecode.h>
}
#include <libsigrokdecode/libsigrokdecode.h>
}
+#include <mutex>
+
#include <extdef.h>
#include <tuple>
#include <extdef.h>
#include <tuple>
@@
-53,10
+55,12
@@
extern "C" {
using std::dynamic_pointer_cast;
using std::list;
using std::dynamic_pointer_cast;
using std::list;
+using std::lock_guard;
using std::make_pair;
using std::max;
using std::map;
using std::min;
using std::make_pair;
using std::max;
using std::map;
using std::min;
+using std::mutex;
using std::pair;
using std::shared_ptr;
using std::tie;
using std::pair;
using std::shared_ptr;
using std::tie;
@@
-150,12
+154,6
@@
const std::shared_ptr<pv::data::DecoderStack>& DecodeTrace::decoder() const
return _decoder_stack;
}
return _decoder_stack;
}
-void DecodeTrace::set_view(pv::view::View *view)
-{
- assert(view);
- Trace::set_view(view);
-}
-
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);
@@
-181,7
+179,6
@@
void DecodeTrace::paint_mid(QPainter &p, int left, int right)
}
// Iterate through the rows
}
// Iterate through the rows
- assert(_view);
int y = get_y();
pair<uint64_t, uint64_t> sample_range = get_sample_range(left, right);
int y = get_y();
pair<uint64_t, uint64_t> sample_range = get_sample_range(left, right);
@@
-512,14
+509,17
@@
void DecodeTrace::draw_unresolved_period(QPainter &p, int h, int left,
pair<double, double> DecodeTrace::get_pixels_offset_samples_per_pixel() const
{
pair<double, double> DecodeTrace::get_pixels_offset_samples_per_pixel() const
{
- assert(_
view
);
+ assert(_
owner
);
assert(_decoder_stack);
assert(_decoder_stack);
- const double scale = _view->scale();
+ const View *view = _owner->view();
+ assert(view);
+
+ const double scale = view->scale();
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->get_start_time()) / scale;
double samplerate = _decoder_stack->samplerate();
double samplerate = _decoder_stack->samplerate();
@@
-587,10
+587,15
@@
void DecodeTrace::hide_hover_annotation()
void DecodeTrace::hover_point_changed()
{
void DecodeTrace::hover_point_changed()
{
- QPoint hp = _view->hover_point();
+ assert(_owner);
+
+ const View *const view = _owner->view();
+ assert(view);
+
+ QPoint hp = view->hover_point();
QString ann = get_annotation_at_point(hp);
QString ann = get_annotation_at_point(hp);
- assert(
_
view);
+ assert(view);
assert(_row_height);
if (ann.isEmpty()) {
assert(_row_height);
if (ann.isEmpty()) {
@@
-616,7
+621,7
@@
void DecodeTrace::hover_point_changed()
hp.setY(get_y() - (_row_height / 2) + (hover_row * _row_height)
- _row_height - text_size.height());
hp.setY(get_y() - (_row_height / 2) + (hover_row * _row_height)
- _row_height - text_size.height());
- QToolTip::showText(
_
view->viewport()->mapToGlobal(hp), ann);
+ QToolTip::showText(view->viewport()->mapToGlobal(hp), ann);
}
void DecodeTrace::create_decoder_form(int index,
}
void DecodeTrace::create_decoder_form(int index,
@@
-691,7
+696,8
@@
QComboBox* DecodeTrace::create_channel_selector(
{
assert(dec);
{
assert(dec);
- const vector< shared_ptr<Signal> > sigs = _session.get_signals();
+ lock_guard<mutex> lock(_session.signals_mutex());
+ const vector< shared_ptr<Signal> > &sigs(_session.signals());
assert(_decoder_stack);
const auto channel_iter = dec->channels().find(pdch);
assert(_decoder_stack);
const auto channel_iter = dec->channels().find(pdch);
@@
-709,7
+715,7
@@
QComboBox* DecodeTrace::create_channel_selector(
if (dynamic_pointer_cast<LogicSignal>(s) && s->enabled())
{
if (dynamic_pointer_cast<LogicSignal>(s) && s->enabled())
{
- selector->addItem(s->
get_
name(),
+ selector->addItem(s->name(),
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);
@@
-724,7
+730,9
@@
void DecodeTrace::commit_decoder_channels(shared_ptr<data::decode::Decoder> &dec
assert(dec);
map<const srd_channel*, shared_ptr<LogicSignal> > channel_map;
assert(dec);
map<const srd_channel*, shared_ptr<LogicSignal> > channel_map;
- const vector< shared_ptr<Signal> > sigs = _session.get_signals();
+
+ lock_guard<mutex> lock(_session.signals_mutex());
+ const vector< shared_ptr<Signal> > &sigs(_session.signals());
for (const ChannelSelector &s : _channel_selectors)
{
for (const ChannelSelector &s : _channel_selectors)
{
@@
-757,8
+765,8
@@
void DecodeTrace::commit_channels()
void DecodeTrace::on_new_decode_data()
{
void DecodeTrace::on_new_decode_data()
{
- if (_
view
)
- _
view
->update_viewport();
+ if (_
owner
)
+ _
owner
->update_viewport();
}
void DecodeTrace::delete_pressed()
}
void DecodeTrace::delete_pressed()
@@
-817,7
+825,7
@@
void DecodeTrace::on_show_hide_decoder(int index)
assert(index < (int)_decoder_forms.size());
_decoder_forms[index]->set_decoder_visible(show);
assert(index < (int)_decoder_forms.size());
_decoder_forms[index]->set_decoder_visible(show);
- _
view
->update_viewport();
+ _
owner
->update_viewport();
}
} // namespace view
}
} // namespace view