X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fanalogsignal.cpp;h=c346fd5bce4c8d2bc52f5ae3e0981905f6fa3d13;hb=06b6ce26694bdde31c7d5b703c4dda36f4a25938;hp=f94a70f80f92e6322996969324d149016a8bc06d;hpb=b82243f74a175f621af26aabbc0f32e2ecb125fa;p=pulseview.git diff --git a/pv/views/trace/analogsignal.cpp b/pv/views/trace/analogsignal.cpp index f94a70f..c346fd5 100644 --- a/pv/views/trace/analogsignal.cpp +++ b/pv/views/trace/analogsignal.cpp @@ -89,11 +89,9 @@ AnalogSignal::AnalogSignal( Signal(session, base), scale_index_(4), // 20 per div scale_index_drag_offset_(0), - div_height_(3 * QFontMetrics(QApplication::font()).height()), pos_vdivs_(1), neg_vdivs_(1), resolution_(0), - conversion_type_(data::SignalBase::NoConversion), display_type_(DisplayBoth), autoranging_(true) { @@ -103,6 +101,9 @@ AnalogSignal::AnalogSignal( connect(analog_data, SIGNAL(samples_added(QObject*, uint64_t, uint64_t)), this, SLOT(on_samples_added())); + GlobalSettings gs; + div_height_ = gs.value(GlobalSettings::Key_View_DefaultDivHeight).toInt(); + base_->set_colour(SignalColours[base_->index() % countof(SignalColours)]); update_scale(); } @@ -117,9 +118,9 @@ void AnalogSignal::save_settings(QSettings &settings) const settings.setValue("pos_vdivs", pos_vdivs_); settings.setValue("neg_vdivs", neg_vdivs_); settings.setValue("scale_index", scale_index_); - settings.setValue("conversion_type", conversion_type_); settings.setValue("display_type", display_type_); settings.setValue("autoranging", autoranging_); + settings.setValue("div_height", div_height_); } void AnalogSignal::restore_settings(QSettings &settings) @@ -135,16 +136,22 @@ void AnalogSignal::restore_settings(QSettings &settings) update_scale(); } - if (settings.contains("conversion_type")) { - conversion_type_ = (data::SignalBase::ConversionType)(settings.value("conversion_type").toInt()); - update_conversion_type(); - } - if (settings.contains("display_type")) display_type_ = (DisplayType)(settings.value("display_type").toInt()); if (settings.contains("autoranging")) autoranging_ = settings.value("autoranging").toBool(); + + if (settings.contains("div_height")) { + const int old_height = div_height_; + div_height_ = settings.value("div_height").toInt(); + + if ((div_height_ != old_height) && owner_) { + // Call order is important, otherwise the lazy event handler won't work + owner_->extents_changed(false, true); + owner_->row_item_appearance_changed(false, true); + } + } } pair AnalogSignal::v_extents() const @@ -229,8 +236,11 @@ void AnalogSignal::paint_mid(QPainter &p, ViewItemPaintParams &pp) } if ((display_type_ == DisplayConverted) || (display_type_ == DisplayBoth)) { - if (((conversion_type_ == data::SignalBase::A2LConversionByTreshold) || - (conversion_type_ == data::SignalBase::A2LConversionBySchmittTrigger))) { + const data::SignalBase::ConversionType conv_type = + base_->get_conversion_type(); + + if (((conv_type == data::SignalBase::A2LConversionByTreshold) || + (conv_type == data::SignalBase::A2LConversionBySchmittTrigger))) { paint_logic_mid(p, pp); } @@ -580,14 +590,6 @@ void AnalogSignal::update_scale() scale_ = div_height_ / resolution_; } -void AnalogSignal::update_conversion_type() -{ - base_->set_conversion_type(conversion_type_); - - if (owner_) - owner_->row_item_appearance_changed(false, true); -} - void AnalogSignal::perform_autoranging(bool keep_divs, bool force_update) { const deque< shared_ptr > &segments = @@ -665,7 +667,7 @@ void AnalogSignal::populate_popup_form(QWidget *parent, QFormLayout *form) QFormLayout *const layout = new QFormLayout; - // Add the number of vdivs + // Add div-related settings pvdiv_sb_ = new QSpinBox(parent); pvdiv_sb_->setRange(0, MaximumVDivs); pvdiv_sb_->setValue(pos_vdivs_); @@ -680,6 +682,15 @@ void AnalogSignal::populate_popup_form(QWidget *parent, QFormLayout *form) this, SLOT(on_neg_vdivs_changed(int))); layout->addRow(tr("Number of neg vertical divs"), nvdiv_sb_); + div_height_sb_ = new QSpinBox(parent); + div_height_sb_->setRange(20, 1000); + div_height_sb_->setSingleStep(5); + div_height_sb_->setSuffix(tr(" pixels")); + div_height_sb_->setValue(div_height_); + connect(div_height_sb_, SIGNAL(valueChanged(int)), + this, SLOT(on_div_height_changed(int))); + layout->addRow(tr("Div height"), div_height_sb_); + // Add the vertical resolution resolution_cb_ = new QComboBox(parent); @@ -717,7 +728,7 @@ void AnalogSignal::populate_popup_form(QWidget *parent, QFormLayout *form) conversion_cb_->addItem("to logic via threshold", data::SignalBase::A2LConversionByTreshold); conversion_cb_->addItem("to logic via schmitt-trigger", data::SignalBase::A2LConversionBySchmittTrigger); - cur_idx = conversion_cb_->findData(QVariant(conversion_type_)); + cur_idx = conversion_cb_->findData(QVariant(base_->get_conversion_type())); conversion_cb_->setCurrentIndex(cur_idx); layout->addRow(tr("Conversion"), conversion_cb_); @@ -810,6 +821,18 @@ void AnalogSignal::on_neg_vdivs_changed(int vdivs) } } +void AnalogSignal::on_div_height_changed(int height) +{ + div_height_ = height; + update_scale(); + + if (owner_) { + // Call order is important, otherwise the lazy event handler won't work + owner_->extents_changed(false, true); + owner_->row_item_appearance_changed(false, true); + } +} + void AnalogSignal::on_resolution_changed(int index) { scale_index_ = resolution_cb_->itemData(index).toInt(); @@ -835,13 +858,17 @@ void AnalogSignal::on_autoranging_changed(int state) void AnalogSignal::on_conversion_changed(int index) { - data::SignalBase::ConversionType old_conv_type = conversion_type_; + data::SignalBase::ConversionType old_conv_type = + base_->get_conversion_type(); + + data::SignalBase::ConversionType conv_type = + (data::SignalBase::ConversionType)(conversion_cb_->itemData(index).toInt()); - conversion_type_ = (data::SignalBase::ConversionType)(conversion_cb_->itemData(index).toInt()); + if (conv_type != old_conv_type) { + base_->set_conversion_type(conv_type); - if (conversion_type_ != old_conv_type) { - base_->set_conversion_type(conversion_type_); - update_conversion_type(); + if (owner_) + owner_->row_item_appearance_changed(false, true); } }