using std::make_pair;
using std::min;
using std::none_of;
+using std::out_of_range;
using std::pair;
using std::shared_ptr;
using std::vector;
const float high_offset = y - signal_height_ + 0.5f;
const float low_offset = y + 0.5f;
- const deque< shared_ptr<pv::data::LogicSegment> > &segments =
- base_->logic_data()->logic_segments();
- if (segments.empty())
+ shared_ptr<pv::data::LogicSegment> segment = get_logic_segment_to_paint();
+ if (!segment)
return;
- const shared_ptr<pv::data::LogicSegment> &segment = segments.front();
-
double samplerate = segment->samplerate();
// Show sample rate as 1Hz when it is unknown
p.drawLines(lines, line - lines);
}
+shared_ptr<pv::data::LogicSegment> LogicSignal::get_logic_segment_to_paint() const
+{
+ shared_ptr<pv::data::LogicSegment> segment;
+
+ const deque< shared_ptr<pv::data::LogicSegment> > &segments =
+ base_->logic_data()->logic_segments();
+
+ if (!segments.empty()) {
+ if (segment_display_mode_ == ShowLastSegmentOnly) {
+ segment = segments.back();
+ }
+
+ if ((segment_display_mode_ == ShowSingleSegmentOnly) ||
+ (segment_display_mode_ == ShowLastCompleteSegmentOnly)) {
+ try {
+ segment = segments.at(current_segment_);
+ } catch (out_of_range) {
+ qDebug() << "Current logic segment out of range for signal" << base_->name() << ":" << current_segment_;
+ }
+ }
+ }
+
+ return segment;
+}
+
void LogicSignal::init_trigger_actions(QWidget *parent)
{
trigger_none_ = new QAction(*get_icon(":/icons/trigger-none.svg"),