X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fsignalbase.cpp;h=78633de977706ac5947969f1138fb340562a170a;hp=eb2996d04105d605dc5472a182ab42a496352c89;hb=e590fc9c4f01fe3a4147c63e85f7aeaffeec5498;hpb=641574bcc118be0b6dc3a65039ab3497f9d7241a diff --git a/pv/data/signalbase.cpp b/pv/data/signalbase.cpp index eb2996d..78633de 100644 --- a/pv/data/signalbase.cpp +++ b/pv/data/signalbase.cpp @@ -265,6 +265,26 @@ bool SignalBase::has_samples() const return result; } +double SignalBase::get_samplerate() const +{ + if (channel_type_ == AnalogChannel) + { + shared_ptr data = dynamic_pointer_cast(data_); + if (data) + return data->get_samplerate(); + } + + if (channel_type_ == LogicChannel) + { + shared_ptr data = dynamic_pointer_cast(data_); + if (data) + return data->get_samplerate(); + } + + // Default samplerate is 1 Hz + return 1.0; +} + SignalBase::ConversionType SignalBase::get_conversion_type() const { return conversion_type_; @@ -430,12 +450,12 @@ void SignalBase::save_settings(QSettings &settings) const { settings.setValue("name", name()); settings.setValue("enabled", enabled()); - settings.setValue("color", color()); + settings.setValue("color", color().rgba()); settings.setValue("conversion_type", (int)conversion_type_); settings.setValue("conv_options", (int)(conversion_options_.size())); int i = 0; - for (auto kvp : conversion_options_) { + for (auto& kvp : conversion_options_) { settings.setValue(QString("conv_option%1_key").arg(i), kvp.first); settings.setValue(QString("conv_option%1_value").arg(i), kvp.second); i++; @@ -444,18 +464,41 @@ void SignalBase::save_settings(QSettings &settings) const void SignalBase::restore_settings(QSettings &settings) { - set_name(settings.value("name").toString()); - set_enabled(settings.value("enabled").toBool()); - set_color(settings.value("color").value()); - set_conversion_type((ConversionType)settings.value("conversion_type").toInt()); + if (settings.contains("name")) + set_name(settings.value("name").toString()); + + if (settings.contains("enabled")) + set_enabled(settings.value("enabled").toBool()); + + if (settings.contains("color")) { + QVariant value = settings.value("color"); - int conv_options = settings.value("conv_options").toInt(); + // Workaround for Qt QColor serialization bug on OSX + if ((QMetaType::Type)(value.type()) == QMetaType::QColor) + set_color(value.value()); + else + set_color(QColor::fromRgba(value.value())); + + // A color with an alpha value of 0 makes the signal marker invisible + if (color() == QColor(0, 0, 0, 0)) + set_color(Qt::gray); + } + + if (settings.contains("conversion_type")) + set_conversion_type((ConversionType)settings.value("conversion_type").toInt()); + + int conv_options = 0; + if (settings.contains("conv_options")) + conv_options = settings.value("conv_options").toInt(); if (conv_options) for (int i = 0; i < conv_options; i++) { - QString key = settings.value(QString("conv_option%1_key").arg(i)).toString(); - QVariant value = settings.value(QString("conv_option%1_value").arg(i)); - conversion_options_[key] = value; + const QString key_id = QString("conv_option%1_key").arg(i); + const QString value_id = QString("conv_option%1_value").arg(i); + + if (settings.contains(key_id) && settings.contains(value_id)) + conversion_options_[settings.value(key_id).toString()] = + settings.value(value_id); } }