Hello community,

here is the log from the commit of package inspectrum for openSUSE:Factory 
checked in at 2020-06-09 00:04:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/inspectrum (Old)
 and      /work/SRC/openSUSE:Factory/.inspectrum.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "inspectrum"

Tue Jun  9 00:04:43 2020 rev:4 rq:812422 version:0.2.2+git.20200527

Changes:
--------
--- /work/SRC/openSUSE:Factory/inspectrum/inspectrum.changes    2018-06-29 
22:28:39.370381109 +0200
+++ /work/SRC/openSUSE:Factory/.inspectrum.new.3606/inspectrum.changes  
2020-06-09 00:06:06.865599363 +0200
@@ -1,0 +2,17 @@
+Sun Jun 07 19:39:15 UTC 2020 - [email protected]
+
+- Add patch:
+  * inspectrum-fix-with-qt-5.15.patch
+- Update to version 0.2.2+git.20200527:
+  * Add file extensions for real sample file types
+  * frequencydemod: set modulation index based on tuner width
+  * Tighten transition band when tuner bandwidth is narrow
+  * SpectrogramPlot: Ignore negative frequencies for real signals
+  * SpectrogramPlot: Fix uses of fftSize where it should've been height()
+  * Add SampleAdapters for real samples
+  * Use double for sample rate
+  * Remove all usage of old SIGNAL/SLOT macros
+  * allow file format override from command line
+  * Fix override warnings
+
+-------------------------------------------------------------------

Old:
----
  inspectrum-0.2.2+git.20180603.tar.xz

New:
----
  inspectrum-0.2.2+git.20200527.tar.xz
  inspectrum-fix-with-qt-5.15.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ inspectrum.spec ++++++
--- /var/tmp/diff_new_pack.ARmXWy/_old  2020-06-09 00:06:07.985603336 +0200
+++ /var/tmp/diff_new_pack.ARmXWy/_new  2020-06-09 00:06:07.989603350 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package inspectrum
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 # Copyright (c) 2017, Martin Hauke <[email protected]>
 #
 # All modifications and additions to the file contributed by third parties
@@ -13,18 +13,19 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 Name:           inspectrum
-Version:        0.2.2+git.20180603
+Version:        0.2.2+git.20200527
 Release:        0
 Summary:        A tool for analysing captured signals from SDRs
 License:        GPL-3.0-or-later
 Group:          Productivity/Hamradio/Other
 URL:            https://github.com/miek/inspectrum
 Source:         %{name}-%{version}.tar.xz
+Patch0:         inspectrum-fix-with-qt-5.15.patch
 BuildRequires:  boost-devel
 BuildRequires:  cmake
 BuildRequires:  gcc-c++
@@ -45,6 +46,7 @@
 
 %prep
 %setup -q
+%patch0 -p1
 
 %build
 %cmake
@@ -52,7 +54,6 @@
 
 %install
 %cmake_install
-install -d %{buildroot}/%{_datadir}/pixmaps/
 install -Dm 0644 screenshot.jpg %{buildroot}/%{_datadir}/pixmaps/inspectrum.jpg
 %suse_update_desktop_file -c inspectrum inspectrum "Offline Radio Signal 
Analyser" inspectrum inspectrum "Network;HamRadio"
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.ARmXWy/_old  2020-06-09 00:06:08.037603521 +0200
+++ /var/tmp/diff_new_pack.ARmXWy/_new  2020-06-09 00:06:08.037603521 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
             <param name="url">https://github.com/miek/inspectrum</param>
-          <param 
name="changesrevision">cfb153dc9661f2b14cbfa248827b5ce63de0ac9c</param></service></servicedata>
\ No newline at end of file
+          <param 
name="changesrevision">13843b4aeb0cff8b7787cdac466e7485437f851d</param></service></servicedata>
\ No newline at end of file

++++++ inspectrum-0.2.2+git.20180603.tar.xz -> 
inspectrum-0.2.2+git.20200527.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/.travis.yml 
new/inspectrum-0.2.2+git.20200527/.travis.yml
--- old/inspectrum-0.2.2+git.20180603/.travis.yml       2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/.travis.yml       2020-05-27 
19:08:54.000000000 +0200
@@ -3,7 +3,7 @@
 cache: apt
 
 sudo: required
-dist: trusty
+dist: bionic
 
 os:
   - linux
@@ -27,28 +27,17 @@
       - qtbase5-dev
       - qtdeclarative5-dev
       - libfftw3-dev
+      - libliquid-dev
 
 before_install:
   - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
-  # cmake and pkg-config are already installed, liquid-dsp is handled by 
before_script.
-  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew cask uninstall oclint; fi
-  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install qt5 fftw; fi
-
-before_script:
-  - pushd /tmp
-  - mkdir liquid-install
-  - git clone https://github.com/jgaeddert/liquid-dsp.git
-  - cd liquid-dsp
-  - ./bootstrap.sh
-  - ./configure --prefix=/tmp/liquid-install/
-  - make
-  - make install
-  - popd
+  # cmake and pkg-config are already installed.
+  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install qt5 fftw 
liquid-dsp; fi
 
 script:
   - mkdir build
   - cd build
   - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export CMAKE_PREFIX_PATH=$(brew 
--prefix qt5)/lib/cmake; fi
   - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then DYLIB_SUFFIX=dylib; else 
DYLIB_SUFFIX=so; fi
-  - CFLAGS="-g -Wall -Wextra -Werror -Wno-zero-length-array" cmake 
-DLIQUID_LIBRARIES=/tmp/liquid-install/lib/libliquid.$DYLIB_SUFFIX 
-DLIQUID_INCLUDES=/tmp/liquid-install/include/ ..
+  - CFLAGS="-g -Wall -Wextra -Werror -Wno-zero-length-array" cmake ..
   - make
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/README.md 
new/inspectrum-0.2.2+git.20200527/README.md
--- old/inspectrum-0.2.2+git.20180603/README.md 2018-06-03 12:12:59.000000000 
+0200
+++ new/inspectrum-0.2.2+git.20200527/README.md 2020-05-27 19:08:54.000000000 
+0200
@@ -6,7 +6,7 @@
 ## Try it
 ### Prerequisites
 
- * cmake
+ * cmake >= 2.8.11
  * fftw 3.x
  * [liquid-dsp](https://github.com/jgaeddert/liquid-dsp) >= v1.3.0
  * pkg-config
@@ -26,6 +26,10 @@
  * `*.cs16` - Complex 16-bit signed integer samples (BladeRF)
  * `*.cs8` - Complex 8-bit signed integer samples (HackRF)
  * `*.cu8` - Complex 8-bit unsigned integer samples (RTL-SDR)
+ * `*.f32` - Real 32-bit floating point samples
+ * `*.s16` - Real 16-bit signed integer samples
+ * `*.s8` - Real 8-bit signed integer samples
+ * `*.u8` - Real 8-bit unsigned integer samples
 
 If an unknown file extension is loaded, inspectrum will default to `*.cf32`.
 
@@ -35,6 +39,6 @@
  * Plots of amplitude, frequency, phase and IQ samples
  * Cursors for measuring period, symbol rate and extracting symbols
  * Export of selected time period, filtered samples and demodulated data
- 
+
 ## Contact
  * #inspectrum on freenode IRC
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/frequencydemod.cpp 
new/inspectrum-0.2.2+git.20200527/frequencydemod.cpp
--- old/inspectrum-0.2.2+git.20180603/frequencydemod.cpp        2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/frequencydemod.cpp        2020-05-27 
19:08:54.000000000 +0200
@@ -30,7 +30,7 @@
 {
     auto in = static_cast<std::complex<float>*>(input);
     auto out = static_cast<float*>(output);
-    freqdem fdem = freqdem_create(0.05f);
+    freqdem fdem = freqdem_create(relativeBandwidth() / 2.0);
     for (int i = 0; i < count; i++) {
         freqdem_demodulate(fdem, in[i], &out[i]);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/inputsource.cpp 
new/inspectrum-0.2.2+git.20200527/inputsource.cpp
--- old/inspectrum-0.2.2+git.20180603/inputsource.cpp   2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/inputsource.cpp   2020-05-27 
19:08:54.000000000 +0200
@@ -63,7 +63,7 @@
     size_t sampleSize() override {
         return sizeof(std::complex<int8_t>);
     }
-    
+
     void copyRange(const void* const src, size_t start, size_t length, 
std::complex<float>* const dest) override {
         auto s = reinterpret_cast<const std::complex<int8_t>*>(src);
         std::transform(&s[start], &s[start + length], dest,
@@ -80,7 +80,7 @@
     size_t sampleSize() override {
         return sizeof(std::complex<uint8_t>);
     }
-    
+
     void copyRange(const void* const src, size_t start, size_t length, 
std::complex<float>* const dest) override {
         auto s = reinterpret_cast<const std::complex<uint8_t>*>(src);
         std::transform(&s[start], &s[start + length], dest,
@@ -92,6 +92,73 @@
     }
 };
 
+class RealF32SampleAdapter : public SampleAdapter {
+public:
+    size_t sampleSize() override {
+        return sizeof(float);
+    }
+
+    void copyRange(const void* const src, size_t start, size_t length, 
std::complex<float>* const dest) override {
+        auto s = reinterpret_cast<const float*>(src);
+        std::transform(&s[start], &s[start + length], dest,
+            [](const float& v) -> std::complex<float> {
+                return {v, 0.0f};
+            }
+        );
+    }
+};
+
+class RealS16SampleAdapter : public SampleAdapter {
+public:
+    size_t sampleSize() override {
+        return sizeof(int16_t);
+    }
+
+    void copyRange(const void* const src, size_t start, size_t length, 
std::complex<float>* const dest) override {
+        auto s = reinterpret_cast<const int16_t*>(src);
+        std::transform(&s[start], &s[start + length], dest,
+            [](const int16_t& v) -> std::complex<float> {
+                const float k = 1.0f / 32768.0f;
+                return { v * k, 0.0f };
+            }
+        );
+    }
+};
+
+class RealS8SampleAdapter : public SampleAdapter {
+public:
+    size_t sampleSize() override {
+        return sizeof(int8_t);
+    }
+
+    void copyRange(const void* const src, size_t start, size_t length, 
std::complex<float>* const dest) override {
+        auto s = reinterpret_cast<const int8_t*>(src);
+        std::transform(&s[start], &s[start + length], dest,
+            [](const int8_t& v) -> std::complex<float> {
+                const float k = 1.0f / 128.0f;
+                return { v * k, 0.0f };
+            }
+        );
+    }
+};
+
+class RealU8SampleAdapter : public SampleAdapter {
+public:
+    size_t sampleSize() override {
+        return sizeof(uint8_t);
+    }
+
+    void copyRange(const void* const src, size_t start, size_t length, 
std::complex<float>* const dest) override {
+        auto s = reinterpret_cast<const uint8_t*>(src);
+        std::transform(&s[start], &s[start + length], dest,
+            [](const uint8_t& v) -> std::complex<float> {
+                const float k = 1.0f / 128.0f;
+                return { (v - 127.4f) * k, 0 };
+            }
+        );
+    }
+};
+
 InputSource::InputSource()
 {
 }
@@ -117,7 +184,8 @@
 void InputSource::openFile(const char *filename)
 {
     QFileInfo fileInfo(filename);
-    const auto suffix = fileInfo.suffix().toLower();
+    std::string suffix = 
std::string(fileInfo.suffix().toLower().toUtf8().constData());
+    if(_fmt!=""){ suffix = _fmt; } // allow fmt override
     if ((suffix == "cfile") || (suffix == "cf32")  || (suffix == "fc32")) {
         sampleAdapter = std::unique_ptr<SampleAdapter>(new 
ComplexF32SampleAdapter());
     }
@@ -130,6 +198,22 @@
     else if ((suffix == "cu8") || (suffix == "uc8")) {
         sampleAdapter = std::unique_ptr<SampleAdapter>(new 
ComplexU8SampleAdapter());
     }
+    else if (suffix == "f32") {
+        sampleAdapter = std::unique_ptr<SampleAdapter>(new 
RealF32SampleAdapter());
+        _realSignal = true;
+    }
+    else if (suffix == "s16") {
+        sampleAdapter = std::unique_ptr<SampleAdapter>(new 
RealS16SampleAdapter());
+        _realSignal = true;
+    }
+    else if (suffix == "s8") {
+        sampleAdapter = std::unique_ptr<SampleAdapter>(new 
RealS8SampleAdapter());
+        _realSignal = true;
+    }
+    else if (suffix == "u8") {
+        sampleAdapter = std::unique_ptr<SampleAdapter>(new 
RealU8SampleAdapter());
+        _realSignal = true;
+    }
     else {
         sampleAdapter = std::unique_ptr<SampleAdapter>(new 
ComplexF32SampleAdapter());
     }
@@ -154,13 +238,13 @@
     invalidate();
 }
 
-void InputSource::setSampleRate(size_t rate)
+void InputSource::setSampleRate(double rate)
 {
     sampleRate = rate;
     invalidate();
 }
 
-size_t InputSource::rate()
+double InputSource::rate()
 {
     return sampleRate;
 }
@@ -184,3 +268,7 @@
 
     return dest;
 }
+
+void InputSource::setFormat(std::string fmt){
+    _fmt = fmt;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/inputsource.h 
new/inspectrum-0.2.2+git.20200527/inputsource.h
--- old/inspectrum-0.2.2+git.20180603/inputsource.h     2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/inputsource.h     2020-05-27 
19:08:54.000000000 +0200
@@ -35,9 +35,11 @@
 private:
     QFile *inputFile = nullptr;
     size_t sampleCount = 0;
-    size_t sampleRate = 0;
+    double sampleRate = 0.0;
     uchar *mmapData = nullptr;
     std::unique_ptr<SampleAdapter> sampleAdapter;
+    std::string _fmt;
+    bool _realSignal = false;
 
 public:
     InputSource();
@@ -48,8 +50,12 @@
     size_t count() {
         return sampleCount;
     };
-    void setSampleRate(size_t rate);
-    size_t rate();
+    void setSampleRate(double rate);
+    void setFormat(std::string fmt);
+    double rate();
+    bool realSignal() {
+        return _realSignal;
+    };
     float relativeBandwidth() {
         return 1;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/main.cpp 
new/inspectrum-0.2.2+git.20200527/main.cpp
--- old/inspectrum-0.2.2+git.20180603/main.cpp  2018-06-03 12:12:59.000000000 
+0200
+++ new/inspectrum-0.2.2+git.20200527/main.cpp  2020-05-27 19:08:54.000000000 
+0200
@@ -40,9 +40,18 @@
                                   QCoreApplication::translate("main", "Set 
sample rate."),
                                   QCoreApplication::translate("main", "Hz"));
     parser.addOption(rateOption);
+    QCommandLineOption formatOption(QStringList() << "f" << "format",
+                                  QCoreApplication::translate("main", "Set 
file format."),
+                                  QCoreApplication::translate("main", "fmt"));
+    parser.addOption(formatOption);
 
     // Process the actual command line
     parser.process(a);
+ 
+    // Check for file format override   
+    if(parser.isSet(formatOption)){
+        mainWin.setFormat(parser.value(formatOption));
+    }
 
     const QStringList args = parser.positionalArguments();
     if (args.size()>=1)
@@ -50,8 +59,7 @@
 
     if (parser.isSet(rateOption)) {
         bool ok;
-        // Use toDouble just for scientific notation support
-        int rate = parser.value(rateOption).toDouble(&ok);
+        auto rate = parser.value(rateOption).toDouble(&ok);
         if(!ok) {
             fputs("ERROR: could not parse rate\n", stderr);
             return 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/mainwindow.cpp 
new/inspectrum-0.2.2+git.20200527/mainwindow.cpp
--- old/inspectrum-0.2.2+git.20180603/mainwindow.cpp    2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/mainwindow.cpp    2020-05-27 
19:08:54.000000000 +0200
@@ -42,19 +42,19 @@
     setCentralWidget(plots);
 
     // Connect dock inputs
-    connect(dock, SIGNAL(openFile(QString)), this, SLOT(openFile(QString)));
-    connect(dock->sampleRate, SIGNAL(textChanged(QString)), this, 
SLOT(setSampleRate(QString)));
-    connect(dock, SIGNAL(fftOrZoomChanged(int, int)), plots, 
SLOT(setFFTAndZoom(int, int)));
-    connect(dock->powerMaxSlider, SIGNAL(valueChanged(int)), plots, 
SLOT(setPowerMax(int)));
-    connect(dock->powerMinSlider, SIGNAL(valueChanged(int)), plots, 
SLOT(setPowerMin(int)));
+    connect(dock, &SpectrogramControls::openFile, this, &MainWindow::openFile);
+    connect(dock->sampleRate, static_cast<void (QLineEdit::*)(const 
QString&)>(&QLineEdit::textChanged), this, static_cast<void 
(MainWindow::*)(QString)>(&MainWindow::setSampleRate));
+    connect(dock, static_cast<void (SpectrogramControls::*)(int, 
int)>(&SpectrogramControls::fftOrZoomChanged), plots, &PlotView::setFFTAndZoom);
+    connect(dock->powerMaxSlider, &QSlider::valueChanged, plots, 
&PlotView::setPowerMax);
+    connect(dock->powerMinSlider, &QSlider::valueChanged, plots, 
&PlotView::setPowerMin);
     connect(dock->cursorsCheckBox, &QCheckBox::stateChanged, plots, 
&PlotView::enableCursors);
     connect(dock->scalesCheckBox, &QCheckBox::stateChanged, plots, 
&PlotView::enableScales);
     connect(dock->cursorSymbolsSpinBox, static_cast<void 
(QSpinBox::*)(int)>(&QSpinBox::valueChanged), plots, 
&PlotView::setCursorSegments);
 
     // Connect dock outputs
-    connect(plots, SIGNAL(timeSelectionChanged(float)), dock, 
SLOT(timeSelectionChanged(float)));
-    connect(plots, SIGNAL(zoomIn()), dock, SLOT(zoomIn()));
-    connect(plots, SIGNAL(zoomOut()), dock, SLOT(zoomOut()));
+    connect(plots, &PlotView::timeSelectionChanged, dock, 
&SpectrogramControls::timeSelectionChanged);
+    connect(plots, &PlotView::zoomIn, dock, &SpectrogramControls::zoomIn);
+    connect(plots, &PlotView::zoomOut, dock, &SpectrogramControls::zoomOut);
 
     // Set defaults after making connections so everything is in sync
     dock->setDefaults();
@@ -98,7 +98,7 @@
 
 void MainWindow::setSampleRate(QString rate)
 {
-    int sampleRate = rate.toInt();
+    auto sampleRate = rate.toDouble();
     input->setSampleRate(sampleRate);
     plots->setSampleRate(sampleRate);
 
@@ -107,7 +107,12 @@
     settings.setValue("SampleRate", sampleRate);
 }
 
-void MainWindow::setSampleRate(int rate)
+void MainWindow::setSampleRate(double rate)
 {
     dock->sampleRate->setText(QString::number(rate));
 }
+
+void MainWindow::setFormat(QString fmt)
+{
+    input->setFormat(fmt.toUtf8().constData());
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/mainwindow.h 
new/inspectrum-0.2.2+git.20200527/mainwindow.h
--- old/inspectrum-0.2.2+git.20180603/mainwindow.h      2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/mainwindow.h      2020-05-27 
19:08:54.000000000 +0200
@@ -30,12 +30,13 @@
 
 public:
     MainWindow();
-    void changeSampleRate(int rate);
+    void changeSampleRate(double rate);
 
 public slots:
     void openFile(QString fileName);
     void setSampleRate(QString rate);
-    void setSampleRate(int rate);
+    void setSampleRate(double rate);
+    void setFormat(QString fmt);
 
 private:
     SpectrogramControls *dock;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/plotview.cpp 
new/inspectrum-0.2.2+git.20200527/plotview.cpp
--- old/inspectrum-0.2.2+git.20180603/plotview.cpp      2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/plotview.cpp      2020-05-27 
19:08:54.000000000 +0200
@@ -41,7 +41,7 @@
     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
     setMouseTracking(true);
     enableCursors(false);
-    connect(&cursors, SIGNAL(cursorsMoved()), this, SLOT(cursorsMoved()));
+    connect(&cursors, &Cursors::cursorsMoved, this, &PlotView::cursorsMoved);
 
     spectrogramPlot = new 
SpectrogramPlot(std::shared_ptr<SampleSource<std::complex<float>>>(mainSampleSource));
     auto tunerOutput = 
std::dynamic_pointer_cast<SampleSource<std::complex<float>>>(spectrogramPlot->output());
@@ -563,7 +563,7 @@
     viewport()->update();
 }
 
-void PlotView::setSampleRate(size_t rate)
+void PlotView::setSampleRate(double rate)
 {
     sampleRate = rate;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/plotview.h 
new/inspectrum-0.2.2+git.20200527/plotview.h
--- old/inspectrum-0.2.2+git.20180603/plotview.h        2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/plotview.h        2020-05-27 
19:08:54.000000000 +0200
@@ -35,7 +35,7 @@
 
 public:
     PlotView(InputSource *input);
-    void setSampleRate(size_t rate);
+    void setSampleRate(double rate);
 
 signals:
     void timeSelectionChanged(float time);
@@ -46,7 +46,7 @@
     void cursorsMoved();
     void enableCursors(bool enabled);
     void enableScales(bool enabled);
-    void invalidateEvent();
+    void invalidateEvent() override;
     void repaint();
     void setCursorSegments(int segments);
     void setFFTAndZoom(int fftSize, int zoomLevel);
@@ -55,9 +55,9 @@
 
 protected:
     void contextMenuEvent(QContextMenuEvent * event) override;
-    void paintEvent(QPaintEvent *event);
-    void resizeEvent(QResizeEvent * event);
-    void scrollContentsBy(int dx, int dy);
+    void paintEvent(QPaintEvent *event) override;
+    void resizeEvent(QResizeEvent * event) override;
+    void scrollContentsBy(int dx, int dy) override;
     bool viewportEvent(QEvent *event) override;
 
 private:
@@ -75,7 +75,7 @@
     int powerMin;
     int powerMax;
     bool cursorsEnabled;
-    size_t sampleRate = 0;
+    double sampleRate = 0.0;
     bool timeScaleEnabled;
     int scrollZoomStepsAccumulated = 0;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/samplebuffer.h 
new/inspectrum-0.2.2+git.20200527/samplebuffer.h
--- old/inspectrum-0.2.2+git.20180603/samplebuffer.h    2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/samplebuffer.h    2020-05-27 
19:08:54.000000000 +0200
@@ -40,11 +40,11 @@
     virtual size_t count() {
         return src->count();
     };
-    size_t rate() {
+    double rate() {
         return src->rate();
     };
 
     float relativeBandwidth() {
-        return 1;
+        return src->relativeBandwidth();
     }
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/samplesource.h 
new/inspectrum-0.2.2+git.20200527/samplesource.h
--- old/inspectrum-0.2.2+git.20180603/samplesource.h    2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/samplesource.h    2020-05-27 
19:08:54.000000000 +0200
@@ -33,7 +33,8 @@
     virtual std::unique_ptr<T[]> getSamples(size_t start, size_t length) = 0;
     virtual void invalidateEvent() { };
     virtual size_t count() = 0;
-    virtual size_t rate() = 0;
+    virtual double rate() = 0;
     virtual float relativeBandwidth() = 0;
     std::type_index sampleType() override;
+    virtual bool realSignal() { return false; };
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/inspectrum-0.2.2+git.20180603/spectrogramcontrols.cpp 
new/inspectrum-0.2.2+git.20200527/spectrogramcontrols.cpp
--- old/inspectrum-0.2.2+git.20180603/spectrogramcontrols.cpp   2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/spectrogramcontrols.cpp   2020-05-27 
19:08:54.000000000 +0200
@@ -36,7 +36,9 @@
     layout->addRow(fileOpenButton);
 
     sampleRate = new QLineEdit();
-    sampleRate->setValidator(new QIntValidator(this));
+    auto double_validator = new QDoubleValidator(this);
+    double_validator->setBottom(0.0);
+    sampleRate->setValidator(double_validator);
     layout->addRow(new QLabel(tr("Sample rate:")), sampleRate);
 
     // Spectrogram settings
@@ -94,12 +96,12 @@
     widget->setLayout(layout);
     setWidget(widget);
 
-    connect(fftSizeSlider, SIGNAL(valueChanged(int)), this, 
SLOT(fftSizeChanged(int)));
-    connect(zoomLevelSlider, SIGNAL(valueChanged(int)), this, 
SLOT(zoomLevelChanged(int)));
-    connect(fileOpenButton, SIGNAL(clicked()), this, 
SLOT(fileOpenButtonClicked()));
-    connect(cursorsCheckBox, SIGNAL(stateChanged(int)), this, 
SLOT(cursorsStateChanged(int)));
-    connect(powerMinSlider, SIGNAL(valueChanged(int)), this, 
SLOT(powerMinChanged(int)));
-    connect(powerMaxSlider, SIGNAL(valueChanged(int)), this, 
SLOT(powerMaxChanged(int)));
+    connect(fftSizeSlider, &QSlider::valueChanged, this, 
&SpectrogramControls::fftSizeChanged);
+    connect(zoomLevelSlider, &QSlider::valueChanged, this, 
&SpectrogramControls::zoomLevelChanged);
+    connect(fileOpenButton, &QPushButton::clicked, this, 
&SpectrogramControls::fileOpenButtonClicked);
+    connect(cursorsCheckBox, &QCheckBox::stateChanged, this, 
&SpectrogramControls::cursorsStateChanged);
+    connect(powerMinSlider, &QSlider::valueChanged, this, 
&SpectrogramControls::powerMinChanged);
+    connect(powerMaxSlider, &QSlider::valueChanged, this, 
&SpectrogramControls::powerMaxChanged);
 }
 
 void SpectrogramControls::clearCursorLabels()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/spectrogramplot.cpp 
new/inspectrum-0.2.2+git.20200527/spectrogramplot.cpp
--- old/inspectrum-0.2.2+git.20180603/spectrogramplot.cpp       2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/spectrogramplot.cpp       2020-05-27 
19:08:54.000000000 +0200
@@ -51,6 +51,9 @@
 
 void SpectrogramPlot::invalidateEvent()
 {
+    // HACK: this makes sure we update the height for real signals (as 
InputSource is passed here before the file is opened)
+    setFFTSize(fftSize);
+
     pixmapCache.clear();
     fftCache.clear();
     emit repaint();
@@ -71,6 +74,8 @@
     int y = rect.y();
 
     int plotHeight = rect.height();
+    if (inputSource->realSignal())
+        plotHeight *= 2;
 
     double bwPerPixel = (double)sampleRate / plotHeight;
     int tickHeight = 50;
@@ -95,7 +100,8 @@
         int tickpy = plotHeight / 2 - tick / bwPerPixel + y;
         int tickny = plotHeight / 2 + tick / bwPerPixel + y;
 
-        painter.drawLine(0, tickny, 30, tickny);
+        if (!inputSource->realSignal())
+            painter.drawLine(0, tickny, 30, tickny);
         painter.drawLine(0, tickpy, 30, tickpy);
 
         if (tick != 0) {
@@ -109,7 +115,8 @@
                 snprintf(buf, sizeof(buf), "-%d Hz", tick);
             }
 
-            painter.drawText(5, tickny - 5, buf);
+            if (!inputSource->realSignal())
+                painter.drawText(5, tickny - 5, buf);
 
             buf[0] = ' ';
             painter.drawText(5, tickpy + 15, buf);
@@ -128,7 +135,8 @@
             int tickpy = plotHeight / 2 - tick / bwPerPixel + y;
             int tickny = plotHeight / 2 + tick / bwPerPixel + y;
 
-            painter.drawLine(0, tickny, 3, tickny);
+            if (!inputSource->realSignal())
+                painter.drawLine(0, tickny, 3, tickny);
             painter.drawLine(0, tickpy, 3, tickpy);
 
             tick += bwPerTick;
@@ -147,14 +155,14 @@
     int xoffset = sampleOffset / getStride();
 
     // Paint first (possibly partial) tile
-    painter.drawPixmap(QRect(rect.left(), rect.y(), linesPerTile() - xoffset, 
fftSize), *getPixmapTile(tileID), QRect(xoffset, 0, linesPerTile() - xoffset, 
fftSize));
+    painter.drawPixmap(QRect(rect.left(), rect.y(), linesPerTile() - xoffset, 
height()), *getPixmapTile(tileID), QRect(xoffset, 0, linesPerTile() - xoffset, 
height()));
     tileID += getStride() * linesPerTile();
 
     // Paint remaining tiles
     for (int x = linesPerTile() - xoffset; x < rect.right(); x += 
linesPerTile()) {
         // TODO: don't draw past rect.right()
         // TODO: handle partial final tile
-        painter.drawPixmap(QRect(x, rect.y(), linesPerTile(), fftSize), 
*getPixmapTile(tileID));
+        painter.drawPixmap(QRect(x, rect.y(), linesPerTile(), height()), 
*getPixmapTile(tileID), QRect(0, 0, linesPerTile(), height()));
         tileID += getStride() * linesPerTile();
     }
 }
@@ -249,7 +257,7 @@
     float cutoff = tuner.deviation() / (float)fftSize;
     float gain = pow(10.0f, powerMax / -10.0f);
     auto atten = 60.0f;
-    auto len = estimate_req_filter_len(0.05f, atten);
+    auto len = estimate_req_filter_len(std::min(cutoff, 0.05f), atten);
     auto taps = std::vector<float>(len);
     liquid_firdes_kaiser(len, cutoff, atten, 0.0f, taps.data());
     std::transform(taps.begin(), taps.end(), taps.begin(),
@@ -286,10 +294,14 @@
         window[i] = 0.5f * (1.0f - cos(Tau * i / (fftSize - 1)));
     }
 
-    setHeight(fftSize);
+    if (inputSource->realSignal()) {
+        setHeight(fftSize/2);
+    } else {
+        setHeight(fftSize);
+    }
     auto dev = tuner.deviation();
     auto centre = tuner.centre();
-    tuner.setHeight(fftSize);
+    tuner.setHeight(height());
     tuner.setDeviation( dev * sizeScale );
     tuner.setCentre( centre * sizeScale );
 }
@@ -331,7 +343,7 @@
 {
     tunerTransform->setFrequency(getTunerPhaseInc());
     tunerTransform->setTaps(getTunerTaps());
-    tunerTransform->setRelativeBandwith(tuner.deviation() * 2.0 / getStride());
+    tunerTransform->setRelativeBandwith(tuner.deviation() * 2.0 / height());
 
     // TODO: for invalidating traceplot cache, this shouldn't really go here
     QPixmapCache::clear();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inspectrum-0.2.2+git.20180603/tunertransform.h 
new/inspectrum-0.2.2+git.20200527/tunertransform.h
--- old/inspectrum-0.2.2+git.20180603/tunertransform.h  2018-06-03 
12:12:59.000000000 +0200
+++ new/inspectrum-0.2.2+git.20200527/tunertransform.h  2020-05-27 
19:08:54.000000000 +0200
@@ -35,5 +35,5 @@
     void setFrequency(float frequency);
     void setTaps(std::vector<float> taps);
     void setRelativeBandwith(float bandwidth);
-    float relativeBandwidth();
+    float relativeBandwidth() override;
 };

++++++ inspectrum-fix-with-qt-5.15.patch ++++++
diff --git a/traceplot.cpp b/traceplot.cpp
index 3704d24..04bdba8 100644
--- a/traceplot.cpp
+++ b/traceplot.cpp
@@ -20,6 +20,7 @@
 #include <QPixmapCache>
 #include <QTextStream>
 #include <QtConcurrent>
+#include <QPainterPath>
 #include "samplesource.h"
 #include "traceplot.h"
 

Reply via email to