diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp index 8711379..dcdf9c4 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp @@ -1469,6 +1469,9 @@ bool Calibration::canCompute(Calibration::CalType type, double *startFreq, doubl if(!meas) { // missing measurement return false; + } else if (!meas->readyForCalculation()){ + // measurement not ready (either not calkit standard definded or no measurements + return false; } else { foundMeasurements.push_back(meas); } diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.cpp index 564dc67..5520f7b 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.cpp @@ -45,6 +45,9 @@ bool CalibrationMeasurement::Base::setStandard(CalStandard::Virtual *standard) if(supportedStandardTypes().count(standard->getType())) { // can use this standard this->standard = standard; + connect(standard, &CalStandard::Virtual::deleted, this, [=](){ + setStandard(nullptr); + }); emit standardChanged(standard); return true; } else { @@ -53,6 +56,9 @@ bool CalibrationMeasurement::Base::setStandard(CalStandard::Virtual *standard) } } else { // nullptr passed, remove currently used standard + if(this->standard) { + disconnect(this->standard, &CalStandard::Virtual::deleted, this, nullptr); + } this->standard = nullptr; emit standardChanged(nullptr); return true; @@ -117,6 +123,10 @@ QWidget *CalibrationMeasurement::Base::createStandardWidget() cbStandard->setCurrentText(s->getDescription()); } } + if(standard == 0 && cbStandard->count() > 0) { + // no standard was selected but no there is one available + setStandard((CalStandard::Virtual*) cbStandard->itemData(0, Qt::UserRole).value()); + } connect(cbStandard, qOverload(&QComboBox::currentIndexChanged), [=](){ auto s = (CalStandard::Virtual*) cbStandard->itemData(cbStandard->currentIndex(), Qt::UserRole).value(); diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.h b/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.h index 0458083..639012a 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.h +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calibrationmeasurement.h @@ -38,6 +38,7 @@ public: virtual double minFreq() = 0; virtual double maxFreq() = 0; virtual unsigned int numPoints() = 0; + virtual bool readyForCalculation() {return false;} static std::vector availableTypes(); static QString TypeToString(Type type); @@ -79,9 +80,10 @@ public: virtual double minFreq() override; virtual double maxFreq() override; virtual unsigned int numPoints() override {return points.size();} + virtual bool readyForCalculation() override {return standard && points.size() > 0;} - virtual void clearPoints(); - virtual void addPoint(const VirtualDevice::VNAMeasurement &m); + virtual void clearPoints() override; + virtual void addPoint(const VirtualDevice::VNAMeasurement &m) override; virtual QWidget* createSettingsWidget() override; @@ -179,9 +181,10 @@ public: virtual double minFreq() override; virtual double maxFreq() override; virtual unsigned int numPoints() override {return points.size();} + virtual bool readyForCalculation() override {return standard && points.size() > 0;} - virtual void clearPoints(); - virtual void addPoint(const VirtualDevice::VNAMeasurement &m); + virtual void clearPoints() override; + virtual void addPoint(const VirtualDevice::VNAMeasurement &m) override; virtual QWidget* createSettingsWidget() override; @@ -236,9 +239,10 @@ public: virtual double minFreq() override; virtual double maxFreq() override; virtual unsigned int numPoints() override; + virtual bool readyForCalculation() override {return points.size() > 0;} - virtual void clearPoints(); - virtual void addPoint(const VirtualDevice::VNAMeasurement &m); + virtual void clearPoints() override; + virtual void addPoint(const VirtualDevice::VNAMeasurement &m) override; virtual QWidget* createStandardWidget() override; virtual QWidget* createSettingsWidget() override; diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h index 3403ad2..460e763 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calstandard.h @@ -11,11 +11,12 @@ namespace CalStandard { -class Virtual : public Savable +class Virtual : public QObject, public Savable { + Q_OBJECT public: Virtual(QString name = ""); - virtual ~Virtual(){}; + virtual ~Virtual(){emit deleted();} enum class Type { Open, @@ -48,6 +49,9 @@ public: QString getName() const; void setName(const QString &value); +signals: + void deleted(); + protected: QString name; double minFreq;