From 2f89b79c8491a970c9208a616e1599ac4e2c10ba Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 12 Apr 2022 16:20:45 +0200 Subject: [PATCH] Massive UI revamping (v7): added channels --- .../beamsteeringcwmodgui.cpp | 20 +- .../beamsteeringcwmod/beamsteeringcwmodgui.h | 7 + .../beamsteeringcwmod/beamsteeringcwmodgui.ui | 36 +- .../interferometer/interferometergui.cpp | 20 +- .../interferometer/interferometergui.h | 7 + .../interferometer/interferometergui.ui | 52 ++- .../channelrx/chanalyzer/chanalyzergui.cpp | 34 +- plugins/channelrx/chanalyzer/chanalyzergui.h | 7 + plugins/channelrx/chanalyzer/chanalyzergui.ui | 82 ++-- .../chanalyzer/chanalyzersettings.cpp | 5 + .../channelrx/chanalyzer/chanalyzersettings.h | 2 + plugins/channelrx/demodadsb/adsbdemodgui.cpp | 44 +- plugins/channelrx/demodadsb/adsbdemodgui.h | 9 + plugins/channelrx/demodadsb/adsbdemodgui.ui | 26 +- .../channelrx/demodadsb/adsbdemodsettings.cpp | 5 + .../channelrx/demodadsb/adsbdemodsettings.h | 2 + plugins/channelrx/demodais/aisdemodgui.cpp | 32 +- plugins/channelrx/demodais/aisdemodgui.h | 7 + plugins/channelrx/demodais/aisdemodgui.ui | 20 +- .../channelrx/demodais/aisdemodsettings.cpp | 7 + plugins/channelrx/demodais/aisdemodsettings.h | 2 + plugins/channelrx/demodam/amdemodgui.cpp | 25 +- plugins/channelrx/demodam/amdemodgui.h | 7 + plugins/channelrx/demodam/amdemodgui.ui | 42 +- plugins/channelrx/demodam/amdemodsettings.cpp | 7 + plugins/channelrx/demodam/amdemodsettings.h | 2 + plugins/channelrx/demodapt/aptdemodgui.cpp | 44 +- plugins/channelrx/demodapt/aptdemodgui.h | 10 +- plugins/channelrx/demodapt/aptdemodgui.ui | 6 +- .../channelrx/demodapt/aptdemodsettings.cpp | 5 + plugins/channelrx/demodapt/aptdemodsettings.h | 2 + plugins/channelrx/demodatv/atvdemodgui.cpp | 38 +- plugins/channelrx/demodatv/atvdemodgui.h | 7 + plugins/channelrx/demodatv/atvdemodgui.ui | 6 +- .../channelrx/demodatv/atvdemodsettings.cpp | 32 ++ plugins/channelrx/demodatv/atvdemodsettings.h | 7 + plugins/channelrx/demodbfm/bfmdemodgui.cpp | 28 +- plugins/channelrx/demodbfm/bfmdemodgui.h | 7 + plugins/channelrx/demodbfm/bfmdemodgui.ui | 6 +- .../channelrx/demodbfm/bfmdemodsettings.cpp | 5 + plugins/channelrx/demodbfm/bfmdemodsettings.h | 2 + .../demodchirpchat/chirpchatdemodgui.cpp | 36 +- .../demodchirpchat/chirpchatdemodgui.h | 7 + .../demodchirpchat/chirpchatdemodgui.ui | 6 +- .../demodchirpchat/chirpchatdemodsettings.cpp | 7 + .../demodchirpchat/chirpchatdemodsettings.h | 2 + plugins/channelrx/demoddab/dabdemodgui.cpp | 32 +- plugins/channelrx/demoddab/dabdemodgui.h | 8 + plugins/channelrx/demoddab/dabdemodgui.ui | 6 +- .../channelrx/demoddab/dabdemodsettings.cpp | 7 + plugins/channelrx/demoddab/dabdemodsettings.h | 2 + plugins/channelrx/demoddatv/datvdemodgui.cpp | 47 +- plugins/channelrx/demoddatv/datvdemodgui.h | 11 +- plugins/channelrx/demoddatv/datvdemodgui.ui | 6 +- .../channelrx/demoddatv/datvdemodsettings.cpp | 7 + .../channelrx/demoddatv/datvdemodsettings.h | 3 + plugins/channelrx/demoddsd/dsddemodgui.cpp | 36 +- plugins/channelrx/demoddsd/dsddemodgui.h | 7 + plugins/channelrx/demoddsd/dsddemodgui.ui | 6 +- .../channelrx/demoddsd/dsddemodsettings.cpp | 7 + plugins/channelrx/demoddsd/dsddemodsettings.h | 2 + .../channelrx/demodfreedv/freedvdemodgui.cpp | 25 +- .../channelrx/demodfreedv/freedvdemodgui.h | 7 + .../channelrx/demodfreedv/freedvdemodgui.ui | 6 +- .../demodfreedv/freedvdemodsettings.cpp | 7 + .../demodfreedv/freedvdemodsettings.h | 2 + plugins/channelrx/demodnfm/nfmdemodgui.cpp | 33 +- plugins/channelrx/demodnfm/nfmdemodgui.h | 7 + plugins/channelrx/demodnfm/nfmdemodgui.ui | 28 +- .../channelrx/demodnfm/nfmdemodsettings.cpp | 7 + plugins/channelrx/demodnfm/nfmdemodsettings.h | 2 + .../channelrx/demodpacket/packetdemodgui.cpp | 32 +- .../channelrx/demodpacket/packetdemodgui.h | 7 + .../channelrx/demodpacket/packetdemodgui.ui | 6 +- .../demodpacket/packetdemodsettings.cpp | 7 + .../demodpacket/packetdemodsettings.h | 2 + .../channelrx/demodpager/pagerdemodgui.cpp | 32 +- plugins/channelrx/demodpager/pagerdemodgui.h | 7 + plugins/channelrx/demodpager/pagerdemodgui.ui | 6 +- .../demodpager/pagerdemodsettings.cpp | 7 + .../channelrx/demodpager/pagerdemodsettings.h | 2 + .../demodradiosonde/radiosondedemodgui.cpp | 31 +- .../demodradiosonde/radiosondedemodgui.h | 7 + .../demodradiosonde/radiosondedemodgui.ui | 6 +- .../radiosondedemodsettings.cpp | 7 + .../demodradiosonde/radiosondedemodsettings.h | 2 + plugins/channelrx/demodssb/ssbdemodgui.cpp | 33 +- plugins/channelrx/demodssb/ssbdemodgui.h | 7 + plugins/channelrx/demodssb/ssbdemodgui.ui | 48 +- .../channelrx/demodssb/ssbdemodsettings.cpp | 7 + plugins/channelrx/demodssb/ssbdemodsettings.h | 2 + plugins/channelrx/demodvor/vordemodgui.cpp | 26 +- plugins/channelrx/demodvor/vordemodgui.h | 8 + plugins/channelrx/demodvor/vordemodgui.ui | 6 +- .../channelrx/demodvor/vordemodsettings.cpp | 7 + plugins/channelrx/demodvor/vordemodsettings.h | 2 + .../channelrx/demodvorsc/vordemodscgui.cpp | 23 +- plugins/channelrx/demodvorsc/vordemodscgui.h | 7 + plugins/channelrx/demodvorsc/vordemodscgui.ui | 6 +- .../demodvorsc/vordemodscsettings.cpp | 7 + .../channelrx/demodvorsc/vordemodscsettings.h | 2 + plugins/channelrx/demodwfm/wfmdemodgui.cpp | 24 +- plugins/channelrx/demodwfm/wfmdemodgui.h | 7 + plugins/channelrx/demodwfm/wfmdemodgui.ui | 6 +- .../channelrx/demodwfm/wfmdemodsettings.cpp | 7 + plugins/channelrx/demodwfm/wfmdemodsettings.h | 2 + plugins/channelrx/filesink/filesinkgui.cpp | 28 +- plugins/channelrx/filesink/filesinkgui.h | 7 + plugins/channelrx/filesink/filesinkgui.ui | 6 +- .../channelrx/filesink/filesinksettings.cpp | 7 + plugins/channelrx/filesink/filesinksettings.h | 2 + .../channelrx/freqtracker/freqtrackergui.cpp | 27 +- .../channelrx/freqtracker/freqtrackergui.h | 7 + .../channelrx/freqtracker/freqtrackergui.ui | 6 +- .../freqtracker/freqtrackersettings.cpp | 7 + .../freqtracker/freqtrackersettings.h | 2 + plugins/channelrx/localsink/localsinkgui.cpp | 21 +- plugins/channelrx/localsink/localsinkgui.h | 7 + plugins/channelrx/localsink/localsinkgui.ui | 6 +- .../channelrx/localsink/localsinksettings.cpp | 7 + .../channelrx/localsink/localsinksettings.h | 2 + .../channelrx/noisefigure/noisefiguregui.cpp | 36 +- .../channelrx/noisefigure/noisefiguregui.h | 7 + .../channelrx/noisefigure/noisefiguregui.ui | 6 +- .../noisefigure/noisefiguresettings.cpp | 7 + .../noisefigure/noisefiguresettings.h | 2 + .../radioastronomy/radioastronomygui.cpp | 148 +++++- .../radioastronomy/radioastronomygui.h | 8 + .../radioastronomy/radioastronomygui.ui | 6 +- .../radioastronomy/radioastronomysettings.cpp | 5 + .../radioastronomy/radioastronomysettings.h | 2 + .../channelrx/radioclock/radioclockgui.cpp | 23 +- plugins/channelrx/radioclock/radioclockgui.h | 8 + plugins/channelrx/radioclock/radioclockgui.ui | 6 +- .../radioclock/radioclocksettings.cpp | 7 + .../channelrx/radioclock/radioclocksettings.h | 3 + .../channelrx/remotesink/remotesinkgui.cpp | 23 +- plugins/channelrx/remotesink/remotesinkgui.h | 7 + plugins/channelrx/remotesink/remotesinkgui.ui | 6 +- .../remotesink/remotesinksettings.cpp | 7 + .../channelrx/remotesink/remotesinksettings.h | 2 + .../sigmffilesink/sigmffilesinkgui.cpp | 28 +- .../sigmffilesink/sigmffilesinkgui.h | 7 + .../sigmffilesink/sigmffilesinkgui.ui | 6 +- .../sigmffilesink/sigmffilesinksettings.cpp | 7 + .../sigmffilesink/sigmffilesinksettings.h | 2 + plugins/channelrx/udpsink/udpsinkgui.cpp | 34 +- plugins/channelrx/udpsink/udpsinkgui.h | 7 + plugins/channelrx/udpsink/udpsinkgui.ui | 6 +- plugins/channelrx/udpsink/udpsinksettings.cpp | 7 + plugins/channelrx/udpsink/udpsinksettings.h | 2 + .../channeltx/filesource/filesourcegui.cpp | 23 +- plugins/channeltx/filesource/filesourcegui.h | 7 + plugins/channeltx/filesource/filesourcegui.ui | 6 +- .../filesource/filesourcesettings.cpp | 7 + .../channeltx/filesource/filesourcesettings.h | 2 + .../channeltx/localsource/localsourcegui.cpp | 21 +- .../channeltx/localsource/localsourcegui.h | 7 + .../channeltx/localsource/localsourcegui.ui | 6 +- .../localsource/localsourcesettings.cpp | 7 + .../localsource/localsourcesettings.h | 2 + .../mod802.15.4/ieee_802_15_4_modgui.cpp | 34 +- .../mod802.15.4/ieee_802_15_4_modgui.h | 11 +- .../mod802.15.4/ieee_802_15_4_modgui.ui | 6 +- .../mod802.15.4/ieee_802_15_4_modsettings.cpp | 7 + .../mod802.15.4/ieee_802_15_4_modsettings.h | 2 + plugins/channeltx/modais/aismodgui.cpp | 40 +- plugins/channeltx/modais/aismodgui.h | 7 + plugins/channeltx/modais/aismodgui.ui | 6 +- plugins/channeltx/modais/aismodsettings.cpp | 7 + plugins/channeltx/modais/aismodsettings.h | 2 + plugins/channeltx/modam/ammodgui.cpp | 31 +- plugins/channeltx/modam/ammodgui.h | 7 + plugins/channeltx/modam/ammodgui.ui | 6 +- plugins/channeltx/modam/ammodsettings.cpp | 7 + plugins/channeltx/modam/ammodsettings.h | 2 + plugins/channeltx/modatv/atvmodgui.cpp | 40 +- plugins/channeltx/modatv/atvmodgui.h | 7 + plugins/channeltx/modatv/atvmodgui.ui | 6 +- plugins/channeltx/modatv/atvmodsettings.cpp | 7 + plugins/channeltx/modatv/atvmodsettings.h | 2 + .../modchirpchat/chirpchatmodgui.cpp | 42 +- .../channeltx/modchirpchat/chirpchatmodgui.h | 7 + .../channeltx/modchirpchat/chirpchatmodgui.ui | 6 +- .../modchirpchat/chirpchatmodsettings.cpp | 7 + .../modchirpchat/chirpchatmodsettings.h | 2 + plugins/channeltx/moddatv/datvmodgui.cpp | 30 +- plugins/channeltx/moddatv/datvmodgui.h | 8 + plugins/channeltx/moddatv/datvmodgui.ui | 6 +- plugins/channeltx/moddatv/datvmodsettings.cpp | 7 + plugins/channeltx/moddatv/datvmodsettings.h | 2 + plugins/channeltx/modfreedv/freedvmodgui.cpp | 29 +- plugins/channeltx/modfreedv/freedvmodgui.h | 7 + plugins/channeltx/modfreedv/freedvmodgui.ui | 6 +- .../channeltx/modfreedv/freedvmodsettings.cpp | 7 + .../channeltx/modfreedv/freedvmodsettings.h | 2 + plugins/channeltx/modnfm/nfmmodgui.cpp | 38 +- plugins/channeltx/modnfm/nfmmodgui.h | 7 + plugins/channeltx/modnfm/nfmmodgui.ui | 6 +- plugins/channeltx/modnfm/nfmmodsettings.cpp | 7 + plugins/channeltx/modnfm/nfmmodsettings.h | 2 + plugins/channeltx/modpacket/packetmodgui.cpp | 35 +- plugins/channeltx/modpacket/packetmodgui.h | 7 + plugins/channeltx/modpacket/packetmodgui.ui | 6 +- .../channeltx/modpacket/packetmodsettings.cpp | 7 + .../channeltx/modpacket/packetmodsettings.h | 2 + plugins/channeltx/modssb/ssbmodgui.cpp | 38 +- plugins/channeltx/modssb/ssbmodgui.h | 7 + plugins/channeltx/modssb/ssbmodgui.ui | 6 +- plugins/channeltx/modssb/ssbmodsettings.cpp | 7 + plugins/channeltx/modssb/ssbmodsettings.h | 2 + plugins/channeltx/modwfm/wfmmodgui.cpp | 32 +- plugins/channeltx/modwfm/wfmmodgui.h | 7 + plugins/channeltx/modwfm/wfmmodgui.ui | 6 +- plugins/channeltx/modwfm/wfmmodsettings.cpp | 7 + plugins/channeltx/modwfm/wfmmodsettings.h | 2 + .../remotesource/remotesourcegui.cpp | 23 +- .../channeltx/remotesource/remotesourcegui.h | 7 + .../channeltx/remotesource/remotesourcegui.ui | 6 +- .../remotesource/remotesourcesettings.cpp | 7 + .../remotesource/remotesourcesettings.h | 2 + plugins/channeltx/udpsource/udpsourcegui.cpp | 36 +- plugins/channeltx/udpsource/udpsourcegui.h | 7 + plugins/channeltx/udpsource/udpsourcegui.ui | 6 +- .../channeltx/udpsource/udpsourcesettings.cpp | 7 + .../channeltx/udpsource/udpsourcesettings.h | 2 + plugins/feature/ais/aisgui.cpp | 1 - plugins/feature/ais/aissettings.cpp | 8 +- .../feature/demodanalyzer/demodanalyzergui.ui | 24 +- plugins/feature/map/map.cpp | 2 +- plugins/feature/pertester/pertestergui.ui | 2 +- plugins/samplemimo/testmi/testmigui.cpp | 2 + sdrbase/device/deviceapi.cpp | 6 + sdrbase/device/deviceapi.h | 1 + sdrbase/device/deviceset.h | 1 + sdrbase/dsp/dspengine.cpp | 100 ++-- sdrbase/dsp/dspengine.h | 30 +- sdrbase/maincore.cpp | 19 + sdrbase/maincore.h | 1 + sdrbase/settings/configuration.h | 1 + sdrgui/channel/channelgui.cpp | 302 ++++++++++++ sdrgui/channel/channelgui.h | 99 +++- sdrgui/device/devicegui.cpp | 19 + sdrgui/device/devicegui.h | 7 + sdrgui/device/deviceuiset.cpp | 142 +++++- sdrgui/device/deviceuiset.h | 8 +- sdrgui/feature/featuregui.cpp | 23 + sdrgui/feature/featuregui.h | 3 + sdrgui/feature/featureuiset.cpp | 10 + sdrgui/mainwindow.cpp | 435 ++++++++++++++---- sdrgui/mainwindow.h | 12 +- 251 files changed, 3455 insertions(+), 678 deletions(-) diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp index bcf3afc0b..9e73950b7 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp @@ -96,11 +96,12 @@ BeamSteeringCWModGUI::BeamSteeringCWModGUI(PluginAPI* pluginAPI, DeviceUISet *de m_centerFrequency(435000000), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); setAttribute(Qt::WA_DeleteOnClose, true); setStreamIndicator("M"); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_bsCWSource = (BeamSteeringCWMod*) mimoChannel; @@ -127,6 +128,7 @@ BeamSteeringCWModGUI::BeamSteeringCWModGUI(PluginAPI* pluginAPI, DeviceUISet *de connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); displaySettings(); + makeUIConnections(); displayRateAndShift(); applySettings(true); } @@ -164,12 +166,13 @@ void BeamSteeringCWModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); ui->interpolationFactor->setCurrentIndex(m_settings.m_log2Interp); applyInterpolation(); ui->steeringDegreesText->setText(tr("%1").arg(m_settings.m_steerDegrees)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -212,7 +215,7 @@ void BeamSteeringCWModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -239,6 +242,7 @@ void BeamSteeringCWModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -303,3 +307,11 @@ void BeamSteeringCWModGUI::tick() m_tickCount = 0; } } + +void BeamSteeringCWModGUI::makeUIConnections() +{ + QObject::connect(ui->channelOutput, QOverload::of(&QComboBox::currentIndexChanged), this, &BeamSteeringCWModGUI::on_channelOutput_currentIndexChanged); + QObject::connect(ui->interpolationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &BeamSteeringCWModGUI::on_interpolationFactor_currentIndexChanged); + QObject::connect(ui->position, &QSlider::valueChanged, this, &BeamSteeringCWModGUI::on_position_valueChanged); + QObject::connect(ui->steeringDegrees, &QSlider::valueChanged, this, &BeamSteeringCWModGUI::on_steeringDegrees_valueChanged); +} diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h index 8e5eaef05..5b55b94fc 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; private: Ui::BeamSteeringCWModGUI* ui; @@ -74,6 +80,7 @@ private: void displaySettings(); void displayRateAndShift(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.ui b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.ui index ec970d077..4872d6abb 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.ui +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.ui @@ -1,13 +1,13 @@ BeamSteeringCWModGUI - + 0 0 - 320 - 102 + 360 + 100 @@ -18,16 +18,10 @@ - 320 + 360 100 - - - 320 - 16777215 - - Liberation Sans @@ -40,12 +34,24 @@ - 10 - 10 - 301 + 0 + 0 + 358 91 + + + 0 + 0 + + + + + 358 + 0 + + Settings @@ -326,9 +332,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelmimo/interferometer/interferometergui.cpp b/plugins/channelmimo/interferometer/interferometergui.cpp index 4930a24e9..19e01348d 100644 --- a/plugins/channelmimo/interferometer/interferometergui.cpp +++ b/plugins/channelmimo/interferometer/interferometergui.cpp @@ -106,11 +106,12 @@ InterferometerGUI::InterferometerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI m_centerFrequency(435000000), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); setAttribute(Qt::WA_DeleteOnClose, true); setStreamIndicator("M"); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_interferometer = (Interferometer*) channelMIMO; @@ -157,6 +158,7 @@ InterferometerGUI::InterferometerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); displaySettings(); + makeUIConnections(); displayRateAndShift(); applySettings(true); } @@ -196,13 +198,14 @@ void InterferometerGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); ui->decimationFactor->setCurrentIndex(m_settings.m_log2Decim); applyDecimation(); ui->phaseCorrection->setValue(m_settings.m_phase); ui->phaseCorrectionText->setText(tr("%1").arg(m_settings.m_phase)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -247,7 +250,7 @@ void InterferometerGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -274,6 +277,7 @@ void InterferometerGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -338,3 +342,11 @@ void InterferometerGUI::tick() m_tickCount = 0; } } + +void InterferometerGUI::makeUIConnections() +{ + QObject::connect(ui->decimationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &InterferometerGUI::on_decimationFactor_currentIndexChanged); + QObject::connect(ui->position, &QSlider::valueChanged, this, &InterferometerGUI::on_position_valueChanged); + QObject::connect(ui->phaseCorrection, &QSlider::valueChanged, this, &InterferometerGUI::on_phaseCorrection_valueChanged); + QObject::connect(ui->correlationType, QOverload::of(&QComboBox::currentIndexChanged), this, &InterferometerGUI::on_correlationType_currentIndexChanged); +} diff --git a/plugins/channelmimo/interferometer/interferometergui.h b/plugins/channelmimo/interferometer/interferometergui.h index 97a4a2b3f..d3dd6a03d 100644 --- a/plugins/channelmimo/interferometer/interferometergui.h +++ b/plugins/channelmimo/interferometer/interferometergui.h @@ -47,6 +47,12 @@ public: virtual QByteArray serialize() const; virtual bool deserialize(const QByteArray& data); virtual MessageQueue* getInputMessageQueue(); + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; private: Ui::InterferometerGUI* ui; @@ -76,6 +82,7 @@ private: void displaySettings(); void displayRateAndShift(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelmimo/interferometer/interferometergui.ui b/plugins/channelmimo/interferometer/interferometergui.ui index 51d12c1cb..dc806c9c7 100644 --- a/plugins/channelmimo/interferometer/interferometergui.ui +++ b/plugins/channelmimo/interferometer/interferometergui.ui @@ -1,15 +1,21 @@ InterferometerGUI - + 0 0 - 739 - 778 + 720 + 770 + + + 0 + 0 + + 720 @@ -30,10 +36,16 @@ 0 10 - 631 + 718 81 + + + 718 + 0 + + Settings @@ -352,9 +364,15 @@ 284
+ + + 0 + 0 + + - 716 + 718 0 @@ -379,6 +397,12 @@ + + + 0 + 0 + + 200 @@ -407,9 +431,15 @@ 334 + + + 0 + 0 + + - 716 + 718 0 @@ -434,6 +464,12 @@ + + + 0 + 0 + + 200 @@ -456,9 +492,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.cpp b/plugins/channelrx/chanalyzer/chanalyzergui.cpp index f3d8fc032..5ddf44f33 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzergui.cpp @@ -76,6 +76,7 @@ void ChannelAnalyzerGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -97,7 +98,7 @@ void ChannelAnalyzerGUI::displaySettings() QString rolloffStr = QString::number(m_settings.m_rrcRolloff/100.0, 'f', 2); ui->rrcRolloffText->setText(rolloffStr); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -181,7 +182,7 @@ void ChannelAnalyzerGUI::setPLLVisibility() else ui->pllPskOrder->setCurrentIndex(i); ui->pllPskOrder->blockSignals(false); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void ChannelAnalyzerGUI::setSpectrumDisplay() @@ -279,7 +280,7 @@ void ChannelAnalyzerGUI::channelMarkerChangedByCursor() void ChannelAnalyzerGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void ChannelAnalyzerGUI::tick() @@ -450,7 +451,7 @@ void ChannelAnalyzerGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -477,6 +478,7 @@ void ChannelAnalyzerGUI::onMenuDialogCalled(const QPoint& p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -494,11 +496,12 @@ ChannelAnalyzerGUI::ChannelAnalyzerGUI(PluginAPI* pluginAPI, DeviceUISet *device m_doApplySettings(true), m_basebandSampleRate(48000) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/chanalyzer/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_channelAnalyzer = (ChannelAnalyzer*) rxChannel; @@ -555,6 +558,7 @@ ChannelAnalyzerGUI::ChannelAnalyzerGUI(PluginAPI* pluginAPI, DeviceUISet *device connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -681,3 +685,21 @@ void ChannelAnalyzerGUI::enterEvent(QEvent*) m_channelMarker.setHighlighted(true); } +void ChannelAnalyzerGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &ChannelAnalyzerGUI::on_deltaFrequency_changed); + QObject::connect(ui->rationalDownSamplerRate, &ValueDial::changed, this, &ChannelAnalyzerGUI::on_rationalDownSamplerRate_changed); + QObject::connect(ui->pll, &QToolButton::toggled, this, &ChannelAnalyzerGUI::on_pll_toggled); + QObject::connect(ui->pllType, QOverload::of(&QComboBox::currentIndexChanged), this, &ChannelAnalyzerGUI::on_pllType_currentIndexChanged); + QObject::connect(ui->pllPskOrder, QOverload::of(&QComboBox::currentIndexChanged), this, &ChannelAnalyzerGUI::on_pllPskOrder_currentIndexChanged); + QObject::connect(ui->pllBandwidth, &QDial::valueChanged, this, &ChannelAnalyzerGUI::on_pllBandwidth_valueChanged); + QObject::connect(ui->pllDampingFactor, &QDial::valueChanged, this, &ChannelAnalyzerGUI::on_pllDampingFactor_valueChanged); + QObject::connect(ui->pllLoopGain, &QDial::valueChanged, this, &ChannelAnalyzerGUI::on_pllLoopGain_valueChanged); + QObject::connect(ui->useRationalDownsampler, &ButtonSwitch::toggled, this, &ChannelAnalyzerGUI::on_useRationalDownsampler_toggled); + QObject::connect(ui->signalSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &ChannelAnalyzerGUI::on_signalSelect_currentIndexChanged); + QObject::connect(ui->rrcFilter, &ButtonSwitch::toggled, this, &ChannelAnalyzerGUI::on_rrcFilter_toggled); + QObject::connect(ui->rrcRolloff, &QDial::valueChanged, this, &ChannelAnalyzerGUI::on_rrcRolloff_valueChanged); + QObject::connect(ui->BW, &QSlider::valueChanged, this, &ChannelAnalyzerGUI::on_BW_valueChanged); + QObject::connect(ui->lowCut, &QSlider::valueChanged, this, &ChannelAnalyzerGUI::on_lowCut_valueChanged); + QObject::connect(ui->ssb, &QCheckBox::toggled, this, &ChannelAnalyzerGUI::on_ssb_toggled); +} diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.h b/plugins/channelrx/chanalyzer/chanalyzergui.h index 1e847a84c..69bee761e 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.h +++ b/plugins/channelrx/chanalyzer/chanalyzergui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -84,6 +90,7 @@ private: void setPLLVisibility(); void setSpectrumDisplay(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.ui b/plugins/channelrx/chanalyzer/chanalyzergui.ui index a8c641eb8..13fe10ab3 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.ui +++ b/plugins/channelrx/chanalyzer/chanalyzergui.ui @@ -1,12 +1,12 @@ ChannelAnalyzerGUI - + 0 0 - 739 + 720 778 @@ -36,10 +36,16 @@ 0 0 - 524 + 718 101 + + + 718 + 0 + + Settings @@ -861,9 +867,15 @@ 284 + + + 0 + 0 + + - 716 + 718 0 @@ -888,6 +900,12 @@ + + + 0 + 0 + + 200 @@ -916,9 +934,15 @@ 334 + + + 0 + 0 + + - 716 + 718 0 @@ -943,6 +967,12 @@ + + + 0 + 0 + + 200 @@ -965,9 +995,20 @@ - RollupWidget + ValueDial QWidget -
gui/rollupwidget.h
+
gui/valuedial.h
+ 1 +
+ + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
+ + RollupContents + QWidget +
gui/rollupcontents.h
1
@@ -976,23 +1017,6 @@
gui/valuedialz.h
1
- - GLScope - QWidget -
gui/glscope.h
- 1 -
- - GLScopeGUI - QWidget -
gui/glscopegui.h
- 1 -
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
GLSpectrum QWidget @@ -1006,9 +1030,15 @@ 1 - ValueDial + GLScope QWidget -
gui/valuedial.h
+
gui/glscope.h
+ 1 +
+ + GLScopeGUI + QWidget +
gui/glscopegui.h
1
diff --git a/plugins/channelrx/chanalyzer/chanalyzersettings.cpp b/plugins/channelrx/chanalyzer/chanalyzersettings.cpp index d357c936a..3f3a21774 100644 --- a/plugins/channelrx/chanalyzer/chanalyzersettings.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzersettings.cpp @@ -59,6 +59,7 @@ void ChannelAnalyzerSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray ChannelAnalyzerSettings::serialize() const @@ -105,6 +106,8 @@ QByteArray ChannelAnalyzerSettings::serialize() const s.writeU32(26, m_reverseAPIDeviceIndex); s.writeU32(27, m_reverseAPIChannelIndex); s.writeS32(28, m_streamIndex); + s.writeS32(29, m_workspaceIndex); + s.writeString(30, m_geometryBytes); return s.final(); } @@ -179,6 +182,8 @@ bool ChannelAnalyzerSettings::deserialize(const QByteArray& data) d.readU32(27, &utmp, 0); m_reverseAPIChannelIndex = utmp > 99 ? 99 : utmp; d.readS32(28, &m_streamIndex, 0); + d.readS32(29, &m_workspaceIndex, 0); + d.readBlob(30, &m_geometryBytes); return true; } diff --git a/plugins/channelrx/chanalyzer/chanalyzersettings.h b/plugins/channelrx/chanalyzer/chanalyzersettings.h index f0878e489..2469007ca 100644 --- a/plugins/channelrx/chanalyzer/chanalyzersettings.h +++ b/plugins/channelrx/chanalyzer/chanalyzersettings.h @@ -60,6 +60,8 @@ struct ChannelAnalyzerSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; ChannelAnalyzerSettings(); void resetToDefaults(); diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.cpp b/plugins/channelrx/demodadsb/adsbdemodgui.cpp index 37e8084de..303019598 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodgui.cpp @@ -2143,7 +2143,7 @@ if (DSPSignalNotification::match(message)) } else { ui->warning->setText(""); } - arrangeRollups(); + getRollupContents()->arrangeRollups(); return true; } else if (ADSBDemodReport::MsgReportADSB::match(message)) @@ -2204,7 +2204,7 @@ void ADSBDemodGUI::channelMarkerChangedByCursor() void ADSBDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void ADSBDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -2759,7 +2759,7 @@ void ADSBDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -2786,6 +2786,7 @@ void ADSBDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -3684,7 +3685,8 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_highlightAircraft(nullptr), m_progressDialog(nullptr) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodadsb/readme.md"; m_osmPort = 0; // Pick a free port @@ -3698,7 +3700,7 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(&m_dlm, &HttpDownloadManager::downloadComplete, this, &ADSBDemodGUI::downloadFinished); @@ -3829,6 +3831,7 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb updateDeviceSetList(); displaySettings(); + makeUIConnections(); applySettings(true); connect(&m_importTimer, &QTimer::timeout, this, &ADSBDemodGUI::import); @@ -3903,6 +3906,7 @@ void ADSBDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -3989,7 +3993,7 @@ void ADSBDemodGUI::displaySettings() applyMapSettings(); applyImportSettings(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -4659,3 +4663,31 @@ void ADSBDemodGUI::preferenceChanged(int elementType) } } } + +void ADSBDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &ADSBDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &ADSBDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->threshold, &QDial::valueChanged, this, &ADSBDemodGUI::on_threshold_valueChanged); + QObject::connect(ui->phaseSteps, &QDial::valueChanged, this, &ADSBDemodGUI::on_phaseSteps_valueChanged); + QObject::connect(ui->tapsPerPhase, &QDial::valueChanged, this, &ADSBDemodGUI::on_tapsPerPhase_valueChanged); + QObject::connect(ui->adsbData, &QTableWidget::cellClicked, this, &ADSBDemodGUI::on_adsbData_cellClicked); + QObject::connect(ui->adsbData, &QTableWidget::cellDoubleClicked, this, &ADSBDemodGUI::on_adsbData_cellDoubleClicked); + QObject::connect(ui->spb, QOverload::of(&QComboBox::currentIndexChanged), this, &ADSBDemodGUI::on_spb_currentIndexChanged); + QObject::connect(ui->correlateFullPreamble, &ButtonSwitch::clicked, this, &ADSBDemodGUI::on_correlateFullPreamble_clicked); + QObject::connect(ui->demodModeS, &ButtonSwitch::clicked, this, &ADSBDemodGUI::on_demodModeS_clicked); + QObject::connect(ui->feed, &ButtonSwitch::clicked, this, &ADSBDemodGUI::on_feed_clicked); + QObject::connect(ui->notifications, &QToolButton::clicked, this, &ADSBDemodGUI::on_notifications_clicked); + QObject::connect(ui->flightInfo, &QToolButton::clicked, this, &ADSBDemodGUI::on_flightInfo_clicked); + QObject::connect(ui->findOnMapFeature, &QToolButton::clicked, this, &ADSBDemodGUI::on_findOnMapFeature_clicked); + QObject::connect(ui->getOSNDB, &QToolButton::clicked, this, &ADSBDemodGUI::on_getOSNDB_clicked); + QObject::connect(ui->getAirportDB, &QToolButton::clicked, this, &ADSBDemodGUI::on_getAirportDB_clicked); + QObject::connect(ui->getAirspacesDB, &QToolButton::clicked, this, &ADSBDemodGUI::on_getAirspacesDB_clicked); + QObject::connect(ui->flightPaths, &ButtonSwitch::clicked, this, &ADSBDemodGUI::on_flightPaths_clicked); + QObject::connect(ui->allFlightPaths, &ButtonSwitch::clicked, this, &ADSBDemodGUI::on_allFlightPaths_clicked); + QObject::connect(ui->device, QOverload::of(&QComboBox::currentIndexChanged), this, &ADSBDemodGUI::on_device_currentIndexChanged); + QObject::connect(ui->displaySettings, &QToolButton::clicked, this, &ADSBDemodGUI::on_displaySettings_clicked); + QObject::connect(ui->logEnable, &ButtonSwitch::clicked, this, &ADSBDemodGUI::on_logEnable_clicked); + QObject::connect(ui->logFilename, &QToolButton::clicked, this, &ADSBDemodGUI::on_logFilename_clicked); + QObject::connect(ui->logOpen, &QToolButton::clicked, this, &ADSBDemodGUI::on_logOpen_clicked); +} diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.h b/plugins/channelrx/demodadsb/adsbdemodgui.h index 8f0aa60f5..22157eecd 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.h +++ b/plugins/channelrx/demodadsb/adsbdemodgui.h @@ -752,6 +752,13 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; + void highlightAircraft(Aircraft *aircraft); void targetAircraft(Aircraft *aircraft); void target(const QString& name, float az, float el, float range); @@ -838,6 +845,8 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); + void updatePosition(Aircraft *aircraft); bool updateLocalPosition(Aircraft *aircraft, double latitude, double longitude, bool surfacePosition); void sendToMap(Aircraft *aircraft, QList *animations); diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.ui b/plugins/channelrx/demodadsb/adsbdemodgui.ui index 3239b18df..a0ea5dc91 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.ui +++ b/plugins/channelrx/demodadsb/adsbdemodgui.ui @@ -1,12 +1,12 @@ ADSBDemodGUI - + 0 0 - 604 + 600 1046 @@ -18,7 +18,7 @@ - 350 + 600 0 @@ -35,13 +35,13 @@ 0 0 - 600 + 598 141 - 600 + 598 0 @@ -758,7 +758,7 @@ 0 140 - 600 + 598 600 @@ -770,7 +770,7 @@ - 600 + 598 0 @@ -1269,17 +1269,17 @@ QWidget
QtQuickWidgets/QQuickWidget
- - RollupWidget - QWidget -
gui/rollupwidget.h
- 1 -
ButtonSwitch QToolButton
gui/buttonswitch.h
+ + RollupContents + QWidget +
gui/rollupcontents.h
+ 1 +
ValueDialZ QWidget diff --git a/plugins/channelrx/demodadsb/adsbdemodsettings.cpp b/plugins/channelrx/demodadsb/adsbdemodsettings.cpp index 5790fa66e..dcb35d644 100644 --- a/plugins/channelrx/demodadsb/adsbdemodsettings.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodsettings.cpp @@ -96,6 +96,7 @@ void ADSBDemodSettings::resetToDefaults() m_displayPhotos = true; m_verboseModelMatching = false; m_airfieldElevation = 0; + m_workspaceIndex = 0; } QByteArray ADSBDemodSettings::serialize() const @@ -172,6 +173,8 @@ QByteArray ADSBDemodSettings::serialize() const s.writeString(56, m_importMaxLatitude); s.writeString(57, m_importMinLongitude); s.writeString(58, m_importMaxLongitude); + s.writeS32(59, m_workspaceIndex); + s.writeBlob(60, m_geometryBytes); for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) { s.writeS32(100 + i, m_columnIndexes[i]); @@ -298,6 +301,8 @@ bool ADSBDemodSettings::deserialize(const QByteArray& data) d.readString(56, &m_importMaxLatitude, ""); d.readString(57, &m_importMinLongitude, ""); d.readString(58, &m_importMaxLongitude, ""); + d.readS32(59, &m_workspaceIndex, 0); + d.readBlob(60, &m_geometryBytes); for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) { d.readS32(100 + i, &m_columnIndexes[i], i); diff --git a/plugins/channelrx/demodadsb/adsbdemodsettings.h b/plugins/channelrx/demodadsb/adsbdemodsettings.h index 88ae38cc4..5e14da134 100644 --- a/plugins/channelrx/demodadsb/adsbdemodsettings.h +++ b/plugins/channelrx/demodadsb/adsbdemodsettings.h @@ -116,6 +116,8 @@ struct ADSBDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_columnIndexes[ADSBDEMOD_COLUMNS];//!< How the columns are ordered in the table int m_columnSizes[ADSBDEMOD_COLUMNS]; //!< Size of the coumns in the table diff --git a/plugins/channelrx/demodais/aisdemodgui.cpp b/plugins/channelrx/demodais/aisdemodgui.cpp index 0f167d629..ab01d438a 100644 --- a/plugins/channelrx/demodais/aisdemodgui.cpp +++ b/plugins/channelrx/demodais/aisdemodgui.cpp @@ -243,7 +243,7 @@ void AISDemodGUI::channelMarkerChangedByCursor() void AISDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void AISDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -371,7 +371,7 @@ void AISDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) } } - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -397,6 +397,7 @@ void AISDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -428,11 +429,12 @@ AISDemodGUI::AISDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_doApplySettings(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodais/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_aisDemod = reinterpret_cast(rxChannel); @@ -518,6 +520,7 @@ AISDemodGUI::AISDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban ui->scopeContainer->setVisible(false); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -569,6 +572,7 @@ void AISDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -612,7 +616,7 @@ void AISDemodGUI::displaySettings() filter(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -756,3 +760,21 @@ void AISDemodGUI::on_logOpen_clicked() } } } + +void AISDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &AISDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &AISDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &AISDemodGUI::on_fmDev_valueChanged); + QObject::connect(ui->threshold, &QDial::valueChanged, this, &AISDemodGUI::on_threshold_valueChanged); + QObject::connect(ui->filterMMSI, &QLineEdit::editingFinished, this, &AISDemodGUI::on_filterMMSI_editingFinished); + QObject::connect(ui->clearTable, &QPushButton::clicked, this, &AISDemodGUI::on_clearTable_clicked); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &AISDemodGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &AISDemodGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &AISDemodGUI::on_udpPort_editingFinished); + QObject::connect(ui->udpFormat, QOverload::of(&QComboBox::currentIndexChanged), this, &AISDemodGUI::on_udpFormat_currentIndexChanged); + QObject::connect(ui->messages, &QTableWidget::cellDoubleClicked, this, &AISDemodGUI::on_messages_cellDoubleClicked); + QObject::connect(ui->logEnable, &ButtonSwitch::clicked, this, &AISDemodGUI::on_logEnable_clicked); + QObject::connect(ui->logFilename, &QToolButton::clicked, this, &AISDemodGUI::on_logFilename_clicked); + QObject::connect(ui->logOpen, &QToolButton::clicked, this, &AISDemodGUI::on_logOpen_clicked); +} diff --git a/plugins/channelrx/demodais/aisdemodgui.h b/plugins/channelrx/demodais/aisdemodgui.h index ac6a329ee..1cdf5d3ba 100644 --- a/plugins/channelrx/demodais/aisdemodgui.h +++ b/plugins/channelrx/demodais/aisdemodgui.h @@ -58,6 +58,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -89,6 +95,7 @@ private: void displayStreamIndex(); void messageReceived(const QByteArray& message, const QDateTime& dateTime); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodais/aisdemodgui.ui b/plugins/channelrx/demodais/aisdemodgui.ui index 8645357fe..85ea93b7b 100644 --- a/plugins/channelrx/demodais/aisdemodgui.ui +++ b/plugins/channelrx/demodais/aisdemodgui.ui @@ -1,13 +1,13 @@ AISDemodGUI - + 0 0 - 404 - 764 + 388 + 446 @@ -912,9 +912,14 @@ - RollupWidget + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
+ + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
@@ -929,11 +934,6 @@
gui/levelmeter.h
1
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
GLScope QWidget diff --git a/plugins/channelrx/demodais/aisdemodsettings.cpp b/plugins/channelrx/demodais/aisdemodsettings.cpp index 9adad474a..5597c447f 100644 --- a/plugins/channelrx/demodais/aisdemodsettings.cpp +++ b/plugins/channelrx/demodais/aisdemodsettings.cpp @@ -55,6 +55,7 @@ void AISDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++) { @@ -100,6 +101,9 @@ QByteArray AISDemodSettings::serialize() const s.writeBlob(25, m_rollupState->serialize()); } + s.writeS32(26, m_workspaceIndex); + s.writeBlob(27, m_geometryBytes); + for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++) s.writeS32(100 + i, m_messageColumnIndexes[i]); for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++) @@ -183,6 +187,9 @@ bool AISDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(26, &m_workspaceIndex, 0); + d.readBlob(27, &m_geometryBytes); + for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++) { d.readS32(100 + i, &m_messageColumnIndexes[i], i); } diff --git a/plugins/channelrx/demodais/aisdemodsettings.h b/plugins/channelrx/demodais/aisdemodsettings.h index 02fd0396b..bd06a99e5 100644 --- a/plugins/channelrx/demodais/aisdemodsettings.h +++ b/plugins/channelrx/demodais/aisdemodsettings.h @@ -61,6 +61,8 @@ struct AISDemodSettings uint16_t m_reverseAPIChannelIndex; Serializable *m_scopeGUI; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_messageColumnIndexes[AISDEMOD_MESSAGE_COLUMNS];//!< How the columns are ordered in the table int m_messageColumnSizes[AISDEMOD_MESSAGE_COLUMNS]; //!< Size of the columns in the table diff --git a/plugins/channelrx/demodam/amdemodgui.cpp b/plugins/channelrx/demodam/amdemodgui.cpp index c37dfb739..0b7f8c723 100644 --- a/plugins/channelrx/demodam/amdemodgui.cpp +++ b/plugins/channelrx/demodam/amdemodgui.cpp @@ -111,7 +111,7 @@ void AMDemodGUI::channelMarkerChangedByCursor() void AMDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void AMDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -182,7 +182,7 @@ void AMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) m_nfmDemod->setSpectrum(m_threadedSampleSink->getMessageQueue(), rollDown); */ - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -209,6 +209,7 @@ void AMDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -243,10 +244,11 @@ AMDemodGUI::AMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS m_samUSB(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodam/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_amDemod = reinterpret_cast(rxChannel); @@ -290,6 +292,7 @@ AMDemodGUI::AMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS m_iconDSBLSB.addPixmap(QPixmap("://lsb.png"), QIcon::Normal, QIcon::On); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -323,6 +326,7 @@ void AMDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -373,7 +377,7 @@ void AMDemodGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -478,3 +482,14 @@ void AMDemodGUI::tick() m_tickCount++; } +void AMDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &AMDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->pll, &QToolButton::toggled, this, &AMDemodGUI::on_pll_toggled); + QObject::connect(ui->ssb, &QToolButton::toggled, this, &AMDemodGUI::on_ssb_toggled); + QObject::connect(ui->bandpassEnable, &ButtonSwitch::toggled, this, &AMDemodGUI::on_bandpassEnable_toggled); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &AMDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->volume, &QSlider::valueChanged, this, &AMDemodGUI::on_volume_valueChanged); + QObject::connect(ui->squelch, &QSlider::valueChanged, this, &AMDemodGUI::on_squelch_valueChanged); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &AMDemodGUI::on_audioMute_toggled); +} diff --git a/plugins/channelrx/demodam/amdemodgui.h b/plugins/channelrx/demodam/amdemodgui.h index 7320227bd..adfc37404 100644 --- a/plugins/channelrx/demodam/amdemodgui.h +++ b/plugins/channelrx/demodam/amdemodgui.h @@ -31,6 +31,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -63,6 +69,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodam/amdemodgui.ui b/plugins/channelrx/demodam/amdemodgui.ui index 2bf40f6b2..d4f9a2cf7 100644 --- a/plugins/channelrx/demodam/amdemodgui.ui +++ b/plugins/channelrx/demodam/amdemodgui.ui @@ -1,24 +1,24 @@ AMDemodGUI - + 0 0 - 396 - 170 + 360 + 153 - + 0 0 - 352 + 360 0 @@ -39,13 +39,13 @@ 0 0 - 390 - 131 + 358 + 151 - 350 + 358 0 @@ -428,9 +428,20 @@ - RollupWidget + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
+ + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
+ 1 +
+ + ValueDialZ + QWidget +
gui/valuedialz.h
1
@@ -439,17 +450,6 @@
gui/levelmeter.h
1
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
- - ValueDialZ - QWidget -
gui/valuedialz.h
- 1 -
diff --git a/plugins/channelrx/demodam/amdemodsettings.cpp b/plugins/channelrx/demodam/amdemodsettings.cpp index db6a1950e..cf5fcd8f3 100644 --- a/plugins/channelrx/demodam/amdemodsettings.cpp +++ b/plugins/channelrx/demodam/amdemodsettings.cpp @@ -49,6 +49,7 @@ void AMDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray AMDemodSettings::serialize() const @@ -80,6 +81,9 @@ QByteArray AMDemodSettings::serialize() const s.writeBlob(19, m_rollupState->serialize()); } + s.writeS32(20, m_workspaceIndex); + s.writeBlob(21, m_geometryBytes); + return s.final(); } @@ -143,6 +147,9 @@ bool AMDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(20, &m_workspaceIndex, 0); + d.readBlob(21, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodam/amdemodsettings.h b/plugins/channelrx/demodam/amdemodsettings.h index d200eeb06..810d03b30 100644 --- a/plugins/channelrx/demodam/amdemodsettings.h +++ b/plugins/channelrx/demodam/amdemodsettings.h @@ -50,6 +50,8 @@ struct AMDemodSettings uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; AMDemodSettings(); void resetToDefaults(); diff --git a/plugins/channelrx/demodapt/aptdemodgui.cpp b/plugins/channelrx/demodapt/aptdemodgui.cpp index 7a23c088a..1aa2d942f 100644 --- a/plugins/channelrx/demodapt/aptdemodgui.cpp +++ b/plugins/channelrx/demodapt/aptdemodgui.cpp @@ -303,7 +303,7 @@ void APTDemodGUI::channelMarkerChangedByCursor() void APTDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void APTDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -527,7 +527,7 @@ void APTDemodGUI::on_zoomAll_clicked(bool checked) } } -void APTDemodGUI::on_image_zoomed() +void APTDemodGUI::onImageZoomed() { ui->zoomAll->setChecked(false); } @@ -537,7 +537,7 @@ void APTDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -563,6 +563,7 @@ void APTDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -596,11 +597,12 @@ APTDemodGUI::APTDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_scene(nullptr), m_pixmapItem(nullptr) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodapt/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_aptDemod = reinterpret_cast(rxChannel); @@ -633,7 +635,7 @@ APTDemodGUI::APTDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); m_zoom = new GraphicsViewZoom(ui->image); // Deleted automatically when view is deleted - connect(m_zoom, SIGNAL(zoomed()), this, SLOT(on_image_zoomed())); + connect(m_zoom, SIGNAL(zoomed()), this, SLOT(onImageZoomed())); // Create slightly transparent white background so labels can be seen m_tempScale = new TempScale(); @@ -658,6 +660,7 @@ APTDemodGUI::APTDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_scene->installEventFilter(this); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -740,6 +743,7 @@ void APTDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -774,7 +778,7 @@ void APTDemodGUI::displaySettings() displayLabels(); displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -882,3 +886,29 @@ void APTDemodGUI::deleteImageFromMap(const QString &name) messageQueue->push(msg); } } + +void APTDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &APTDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &APTDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &APTDemodGUI::on_fmDev_valueChanged); + QObject::connect(ui->channels, QOverload::of(&QComboBox::currentIndexChanged), this, &APTDemodGUI::on_channels_currentIndexChanged); + QObject::connect(ui->transparencyThreshold, &QDial::valueChanged, this, &APTDemodGUI::on_transparencyThreshold_valueChanged); + QObject::connect(ui->transparencyThreshold, &QDial::sliderReleased, this, &APTDemodGUI::on_transparencyThreshold_sliderReleased); + QObject::connect(ui->opacityThreshold, &QDial::valueChanged, this, &APTDemodGUI::on_opacityThreshold_valueChanged); + QObject::connect(ui->opacityThreshold, &QDial::sliderReleased, this, &APTDemodGUI::on_opacityThreshold_sliderReleased); + QObject::connect(ui->deleteImageFromMap, &QToolButton::clicked, this, &APTDemodGUI::on_deleteImageFromMap_clicked); + QObject::connect(ui->cropNoise, &ButtonSwitch::clicked, this, &APTDemodGUI::on_cropNoise_clicked); + QObject::connect(ui->denoise, &ButtonSwitch::clicked, this, &APTDemodGUI::on_denoise_clicked); + QObject::connect(ui->linear, &ButtonSwitch::clicked, this, &APTDemodGUI::on_linear_clicked); + QObject::connect(ui->histogram, &ButtonSwitch::clicked, this, &APTDemodGUI::on_histogram_clicked); + QObject::connect(ui->precipitation, &ButtonSwitch::clicked, this, &APTDemodGUI::on_precipitation_clicked); + QObject::connect(ui->flip, &ButtonSwitch::clicked, this, &APTDemodGUI::on_flip_clicked); + QObject::connect(ui->startStop, &ButtonSwitch::clicked, this, &APTDemodGUI::on_startStop_clicked); + QObject::connect(ui->showSettings, &QToolButton::clicked, this, &APTDemodGUI::on_showSettings_clicked); + QObject::connect(ui->resetDecoder, &QToolButton::clicked, this, &APTDemodGUI::on_resetDecoder_clicked); + QObject::connect(ui->saveImage, &QToolButton::clicked, this, &APTDemodGUI::on_saveImage_clicked); + QObject::connect(ui->zoomIn, &QToolButton::clicked, this, &APTDemodGUI::on_zoomIn_clicked); + QObject::connect(ui->zoomOut, &QToolButton::clicked, this, &APTDemodGUI::on_zoomOut_clicked); + QObject::connect(ui->zoomAll, &ButtonSwitch::clicked, this, &APTDemodGUI::on_zoomAll_clicked); +} diff --git a/plugins/channelrx/demodapt/aptdemodgui.h b/plugins/channelrx/demodapt/aptdemodgui.h index 368fe4b26..9b28c1641 100644 --- a/plugins/channelrx/demodapt/aptdemodgui.h +++ b/plugins/channelrx/demodapt/aptdemodgui.h @@ -75,6 +75,12 @@ public: bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } virtual bool eventFilter(QObject *watched, QEvent *event) override; + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -115,6 +121,8 @@ private: void displayLabels(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); + void deleteImageFromMap(const QString &name); void resetDecoder(); @@ -144,7 +152,7 @@ private slots: void on_zoomIn_clicked(); void on_zoomOut_clicked(); void on_zoomAll_clicked(bool checked=false); - void on_image_zoomed(); + void onImageZoomed(); void onWidgetRolled(QWidget* widget, bool rollDown); void onMenuDialogCalled(const QPoint& p); void handleInputMessages(); diff --git a/plugins/channelrx/demodapt/aptdemodgui.ui b/plugins/channelrx/demodapt/aptdemodgui.ui index e9147bba6..da837aa0a 100644 --- a/plugins/channelrx/demodapt/aptdemodgui.ui +++ b/plugins/channelrx/demodapt/aptdemodgui.ui @@ -1,7 +1,7 @@ APTDemodGUI - + 0 @@ -803,9 +803,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodapt/aptdemodsettings.cpp b/plugins/channelrx/demodapt/aptdemodsettings.cpp index 36beb2c3b..115905f9b 100644 --- a/plugins/channelrx/demodapt/aptdemodsettings.cpp +++ b/plugins/channelrx/demodapt/aptdemodsettings.cpp @@ -69,6 +69,7 @@ void APTDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray APTDemodSettings::serialize() const @@ -120,6 +121,8 @@ QByteArray APTDemodSettings::serialize() const s.writeS32(36, m_verticalPixelsPerDegree); s.writeFloat(37, m_satTimeOffset); s.writeFloat(38, m_satYaw); + s.writeS32(39, m_workspaceIndex); + s.writeBlob(40, m_geometryBytes); return s.final(); } @@ -201,6 +204,8 @@ bool APTDemodSettings::deserialize(const QByteArray& data) d.readS32(36, &m_verticalPixelsPerDegree, 20); d.readFloat(37, &m_satTimeOffset, 0.0f); d.readFloat(38, &m_satYaw, 0.0f); + d.readS32(39, &m_workspaceIndex, 0); + d.readBlob(40, &m_geometryBytes); return true; } diff --git a/plugins/channelrx/demodapt/aptdemodsettings.h b/plugins/channelrx/demodapt/aptdemodsettings.h index 7ed001928..08a53c1af 100644 --- a/plugins/channelrx/demodapt/aptdemodsettings.h +++ b/plugins/channelrx/demodapt/aptdemodsettings.h @@ -66,6 +66,8 @@ struct APTDemodSettings uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; // The following are really working state, rather than settings QString m_tle; // Satelite two-line elements, from satellite tracker diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index f804b197d..8c7b72861 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -86,6 +86,7 @@ void ATVDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); m_doApplySettings = false; @@ -119,7 +120,7 @@ void ATVDemodGUI::displaySettings() ui->amScaleOffsetText->setText(QString("%1").arg(m_settings.m_amOffsetFactor)); applySampleRate(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); m_doApplySettings = true; } @@ -187,7 +188,7 @@ void ATVDemodGUI::channelMarkerChangedByCursor() void ATVDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void ATVDemodGUI::handleSourceMessages() @@ -208,7 +209,7 @@ void ATVDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -222,10 +223,11 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base m_intTickCount(0), m_basebandSampleRate(48000) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodatv/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_atvDemod = (ATVDemod*) rxChannel; m_atvDemod->setMessageQueueToGUI(getInputMessageQueue()); @@ -278,6 +280,8 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base QChar delta = QChar(0x94, 0x03); ui->fmDeviationLabel->setText(delta); + + makeUIConnections(); } ATVDemodGUI::~ATVDemodGUI() @@ -564,3 +568,27 @@ void ATVDemodGUI::topTimeUpdate() else ui->topTimeText->setText(tr("%1 s").arg(nominalTopTime * 1.0, 0, 'f', 2)); } + +void ATVDemodGUI::makeUIConnections() +{ + QObject::connect(ui->synchLevel, &QSlider::valueChanged, this, &ATVDemodGUI::on_synchLevel_valueChanged); + QObject::connect(ui->blackLevel, &QSlider::valueChanged, this, &ATVDemodGUI::on_blackLevel_valueChanged); + QObject::connect(ui->hSync, &QCheckBox::clicked, this, &ATVDemodGUI::on_hSync_clicked); + QObject::connect(ui->vSync, &QCheckBox::clicked, this, &ATVDemodGUI::on_vSync_clicked); + QObject::connect(ui->invertVideo, &QCheckBox::clicked, this, &ATVDemodGUI::on_invertVideo_clicked); + QObject::connect(ui->halfImage, &QCheckBox::clicked, this, &ATVDemodGUI::on_halfImage_clicked); + QObject::connect(ui->modulation, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVDemodGUI::on_modulation_currentIndexChanged); + QObject::connect(ui->nbLines, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVDemodGUI::on_nbLines_currentIndexChanged); + QObject::connect(ui->fps, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVDemodGUI::on_fps_currentIndexChanged); + QObject::connect(ui->standard, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVDemodGUI::on_standard_currentIndexChanged); + QObject::connect(ui->reset, &QPushButton::clicked, this, &ATVDemodGUI::on_reset_clicked); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &ATVDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->rfOppBW, &QSlider::valueChanged, this, &ATVDemodGUI::on_rfOppBW_valueChanged); + QObject::connect(ui->rfFiltering, &ButtonSwitch::toggled, this, &ATVDemodGUI::on_rfFiltering_toggled); + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &ATVDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->bfo, &QDial::valueChanged, this, &ATVDemodGUI::on_bfo_valueChanged); + QObject::connect(ui->fmDeviation, &QDial::valueChanged, this, &ATVDemodGUI::on_fmDeviation_valueChanged); + QObject::connect(ui->amScaleFactor, &QDial::valueChanged, this, &ATVDemodGUI::on_amScaleFactor_valueChanged); + QObject::connect(ui->amScaleOffset, &QDial::valueChanged, this, &ATVDemodGUI::on_amScaleOffset_valueChanged); + QObject::connect(ui->screenTabWidget, &QTabWidget::currentChanged, this, &ATVDemodGUI::on_screenTabWidget_currentChanged); +} diff --git a/plugins/channelrx/demodatv/atvdemodgui.h b/plugins/channelrx/demodatv/atvdemodgui.h index cadfa42a0..c4ce6a57c 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.h +++ b/plugins/channelrx/demodatv/atvdemodgui.h @@ -50,6 +50,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& arrData); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -88,6 +94,7 @@ private: void lineTimeUpdate(); void topTimeUpdate(); bool handleMessage(const Message& objMessage); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodatv/atvdemodgui.ui b/plugins/channelrx/demodatv/atvdemodgui.ui index 8590ee373..d0678c3dd 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.ui +++ b/plugins/channelrx/demodatv/atvdemodgui.ui @@ -1,7 +1,7 @@ ATVDemodGUI - + 0 @@ -1155,9 +1155,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodatv/atvdemodsettings.cpp b/plugins/channelrx/demodatv/atvdemodsettings.cpp index 82b689946..be423fb78 100644 --- a/plugins/channelrx/demodatv/atvdemodsettings.cpp +++ b/plugins/channelrx/demodatv/atvdemodsettings.cpp @@ -54,6 +54,12 @@ void ATVDemodSettings::resetToDefaults() m_udpAddress = "127.0.0.1"; m_udpPort = 9999; m_streamIndex = 0; + m_useReverseAPI = false; + m_reverseAPIAddress = "127.0.0.1"; + m_reverseAPIPort = 8888; + m_reverseAPIDeviceIndex = 0; + m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray ATVDemodSettings::serialize() const @@ -91,6 +97,14 @@ QByteArray ATVDemodSettings::serialize() const s.writeBlob(25, m_rollupState->serialize()); } + s.writeBool(26, m_useReverseAPI); + s.writeString(27, m_reverseAPIAddress); + s.writeU32(28, m_reverseAPIPort); + s.writeU32(29, m_reverseAPIDeviceIndex); + s.writeU32(30, m_reverseAPIChannelIndex); + s.writeS32(31, m_workspaceIndex); + s.writeBlob(32, m_geometryBytes); + return s.final(); } @@ -108,6 +122,7 @@ bool ATVDemodSettings::deserialize(const QByteArray& arrData) { QByteArray bytetmp; int tmp; + uint32_t utmp; d.readS64(1, &m_inputFrequencyOffset, 0); // TODO: rgb color @@ -152,6 +167,23 @@ bool ATVDemodSettings::deserialize(const QByteArray& arrData) m_rollupState->deserialize(bytetmp); } + d.readBool(26, &m_useReverseAPI, false); + d.readString(27, &m_reverseAPIAddress, "127.0.0.1"); + d.readU32(28, &utmp, 0); + + if ((utmp > 1023) && (utmp < 65535)) { + m_reverseAPIPort = utmp; + } else { + m_reverseAPIPort = 8888; + } + + d.readU32(29, &utmp, 0); + m_reverseAPIDeviceIndex = utmp > 99 ? 99 : utmp; + d.readU32(30, &utmp, 0); + m_reverseAPIChannelIndex = utmp > 99 ? 99 : utmp; + d.readS32(31, &m_workspaceIndex, 0); + d.readBlob(32, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodatv/atvdemodsettings.h b/plugins/channelrx/demodatv/atvdemodsettings.h index 64f8f5275..5a8eba3f3 100644 --- a/plugins/channelrx/demodatv/atvdemodsettings.h +++ b/plugins/channelrx/demodatv/atvdemodsettings.h @@ -74,7 +74,14 @@ struct ATVDemodSettings uint16_t m_udpPort; Serializable *m_channelMarker; int m_streamIndex; + bool m_useReverseAPI; + QString m_reverseAPIAddress; + uint16_t m_reverseAPIPort; + uint16_t m_reverseAPIDeviceIndex; + uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; ATVDemodSettings(); void resetToDefaults(); diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.cpp b/plugins/channelrx/demodbfm/bfmdemodgui.cpp index 3405b11f2..936ed0146 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodgui.cpp @@ -138,7 +138,7 @@ void BFMDemodGUI::channelMarkerChangedByCursor() void BFMDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void BFMDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -304,7 +304,7 @@ void BFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -332,6 +332,7 @@ void BFMDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -364,7 +365,8 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_radiotext_AB_flag(false), m_rate(625000) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodbfm/readme.md"; ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03))); ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); @@ -375,7 +377,7 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(audioMuteRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(audioSelect())); setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); @@ -421,6 +423,7 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban rdsUpdateFixedFields(); rdsUpdate(true); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -454,6 +457,7 @@ void BFMDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -478,7 +482,7 @@ void BFMDemodGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -829,3 +833,17 @@ void BFMDemodGUI::changeFrequency(qint64 f) qint64 df = m_channelMarker.getCenterFrequency(); qDebug() << "BFMDemodGUI::changeFrequency: " << f - df; } + +void BFMDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &BFMDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &BFMDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->afBW, &QSlider::valueChanged, this, &BFMDemodGUI::on_afBW_valueChanged); + QObject::connect(ui->volume, &QSlider::valueChanged, this, &BFMDemodGUI::on_volume_valueChanged); + QObject::connect(ui->squelch, &QSlider::valueChanged, this, &BFMDemodGUI::on_squelch_valueChanged); + QObject::connect(ui->audioStereo, &QToolButton::toggled, this, &BFMDemodGUI::on_audioStereo_toggled); + QObject::connect(ui->lsbStereo, &ButtonSwitch::toggled, this, &BFMDemodGUI::on_lsbStereo_toggled); + QObject::connect(ui->showPilot, &ButtonSwitch::clicked, this, &BFMDemodGUI::on_showPilot_clicked); + QObject::connect(ui->rds, &ButtonSwitch::clicked, this, &BFMDemodGUI::on_rds_clicked); + QObject::connect(ui->clearData, &QPushButton::clicked, this, &BFMDemodGUI::on_clearData_clicked); +} diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.h b/plugins/channelrx/demodbfm/bfmdemodgui.h index b5b561726..b3d8f77c5 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.h +++ b/plugins/channelrx/demodbfm/bfmdemodgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -81,6 +87,7 @@ private: void rdsUpdate(bool force); void rdsUpdateFixedFields(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.ui b/plugins/channelrx/demodbfm/bfmdemodgui.ui index aff87e627..c4ade4633 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.ui +++ b/plugins/channelrx/demodbfm/bfmdemodgui.ui @@ -1,7 +1,7 @@ BFMDemodGUI - + 0 @@ -1884,9 +1884,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodbfm/bfmdemodsettings.cpp b/plugins/channelrx/demodbfm/bfmdemodsettings.cpp index ee2446627..c09fcabfa 100644 --- a/plugins/channelrx/demodbfm/bfmdemodsettings.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodsettings.cpp @@ -56,6 +56,7 @@ void BFMDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray BFMDemodSettings::serialize() const @@ -93,6 +94,8 @@ QByteArray BFMDemodSettings::serialize() const } s.writeBool(21, m_rdsActive); + s.writeS32(22, m_workspaceIndex); + s.writeBlob(23, m_geometryBytes); return s.final(); } @@ -167,6 +170,8 @@ bool BFMDemodSettings::deserialize(const QByteArray& data) } d.readBool(21, &m_rdsActive, false); + d.readS32(22, &m_workspaceIndex, 0); + d.readBlob(23, &m_geometryBytes); return true; } diff --git a/plugins/channelrx/demodbfm/bfmdemodsettings.h b/plugins/channelrx/demodbfm/bfmdemodsettings.h index b2cdf7003..866f1589e 100644 --- a/plugins/channelrx/demodbfm/bfmdemodsettings.h +++ b/plugins/channelrx/demodbfm/bfmdemodsettings.h @@ -42,6 +42,8 @@ struct BFMDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp index 6d937002a..211c1c2f4 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp +++ b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp @@ -156,7 +156,7 @@ void ChirpChatDemodGUI::on_deltaFrequency_changed(qint64 value) void ChirpChatDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void ChirpChatDemodGUI::on_BW_valueChanged(int value) @@ -323,7 +323,7 @@ void ChirpChatDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -350,6 +350,7 @@ void ChirpChatDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -382,10 +383,11 @@ ChirpChatDemodGUI::ChirpChatDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI m_doApplySettings(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodchirpchat/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_chirpChatDemod = (ChirpChatDemod*) rxChannel; @@ -424,6 +426,7 @@ ChirpChatDemodGUI::ChirpChatDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI setBandwidths(); displaySettings(); + makeUIConnections(); resetLoRaStatus(); applySettings(true); } @@ -459,6 +462,7 @@ void ChirpChatDemodGUI::displaySettings() m_channelMarker.blockSignals(false); m_channelMarker.setColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor); + setTitle(m_channelMarker.getTitle()); ui->glSpectrum->setSampleRate(thisBW); ui->glSpectrum->setCenterFrequency(thisBW/2); @@ -499,7 +503,7 @@ void ChirpChatDemodGUI::displaySettings() displaySquelch(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -767,3 +771,25 @@ void ChirpChatDemodGUI::tick() } } +void ChirpChatDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &ChirpChatDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->BW, &QSlider::valueChanged, this, &ChirpChatDemodGUI::on_BW_valueChanged); + QObject::connect(ui->Spread, &QSlider::valueChanged, this, &ChirpChatDemodGUI::on_Spread_valueChanged); + QObject::connect(ui->deBits, &QSlider::valueChanged, this, &ChirpChatDemodGUI::on_deBits_valueChanged); + QObject::connect(ui->fftWindow, QOverload::of(&QComboBox::currentIndexChanged), this, &ChirpChatDemodGUI::on_fftWindow_currentIndexChanged); + QObject::connect(ui->preambleChirps, &QSlider::valueChanged, this, &ChirpChatDemodGUI::on_preambleChirps_valueChanged); + QObject::connect(ui->scheme, QOverload::of(&QComboBox::currentIndexChanged), this, &ChirpChatDemodGUI::on_scheme_currentIndexChanged); + QObject::connect(ui->mute, &QToolButton::toggled, this, &ChirpChatDemodGUI::on_mute_toggled); + QObject::connect(ui->clear, &QPushButton::clicked, this, &ChirpChatDemodGUI::on_clear_clicked); + QObject::connect(ui->eomSquelch, &QDial::valueChanged, this, &ChirpChatDemodGUI::on_eomSquelch_valueChanged); + QObject::connect(ui->messageLength, &QDial::valueChanged, this, &ChirpChatDemodGUI::on_messageLength_valueChanged); + QObject::connect(ui->messageLengthAuto, &QCheckBox::stateChanged, this, &ChirpChatDemodGUI::on_messageLengthAuto_stateChanged); + QObject::connect(ui->header, &QCheckBox::stateChanged, this, &ChirpChatDemodGUI::on_header_stateChanged); + QObject::connect(ui->fecParity, &QDial::valueChanged, this, &ChirpChatDemodGUI::on_fecParity_valueChanged); + QObject::connect(ui->crc, &QCheckBox::stateChanged, this, &ChirpChatDemodGUI::on_crc_stateChanged); + QObject::connect(ui->packetLength, &QDial::valueChanged, this, &ChirpChatDemodGUI::on_packetLength_valueChanged); + QObject::connect(ui->udpSend, &QCheckBox::stateChanged, this, &ChirpChatDemodGUI::on_udpSend_stateChanged); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &ChirpChatDemodGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &ChirpChatDemodGUI::on_udpPort_editingFinished); +} diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h index 0dc73f3ba..fd1ebf4b6 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h +++ b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.h @@ -46,6 +46,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; private slots: void channelMarkerChangedByCursor(); @@ -115,6 +121,7 @@ private: QString getParityStr(int parityStatus); void resetLoRaStatus(); bool handleMessage(const Message& message); + void makeUIConnections(); }; #endif // INCLUDE_CHIRPCHATDEMODGUI_H diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.ui b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.ui index 0506899de..4415af525 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.ui +++ b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.ui @@ -1,7 +1,7 @@ ChirpChatDemodGUI - + 0 @@ -1223,9 +1223,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.cpp b/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.cpp index 4a51c67da..4ae9d9411 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.cpp +++ b/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.cpp @@ -89,6 +89,7 @@ void ChirpChatDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray ChirpChatDemodSettings::serialize() const @@ -132,6 +133,9 @@ QByteArray ChirpChatDemodSettings::serialize() const s.writeBlob(29, m_rollupState->serialize()); } + s.writeS32(30, m_workspaceIndex); + s.writeBlob(31, m_geometryBytes); + return s.final(); } @@ -212,6 +216,9 @@ bool ChirpChatDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(30, &m_workspaceIndex, 0); + d.readBlob(31, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.h b/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.h index 93d9ba6b6..f2bb10613 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.h +++ b/plugins/channelrx/demodchirpchat/chirpchatdemodsettings.h @@ -63,6 +63,8 @@ struct ChirpChatDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/channelrx/demoddab/dabdemodgui.cpp b/plugins/channelrx/demoddab/dabdemodgui.cpp index 406410d5b..ebc036720 100644 --- a/plugins/channelrx/demoddab/dabdemodgui.cpp +++ b/plugins/channelrx/demoddab/dabdemodgui.cpp @@ -208,7 +208,7 @@ bool DABDemodGUI::handleMessage(const Message& message) } else { ui->warning->setText(""); } - arrangeRollups(); + getRollupContents()->arrangeRollups(); return true; } else if (DABDemod::MsgDABEnsembleName::match(message)) @@ -281,7 +281,7 @@ bool DABDemodGUI::handleMessage(const Message& message) ui->motImage->resize(ui->motImage->width(), pixmap.height()); ui->motImage->setVisible(true); ui->motImage->setPixmap(pixmap, pixmap.size()); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } return true; } @@ -311,7 +311,7 @@ void DABDemodGUI::channelMarkerChangedByCursor() void DABDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void DABDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -384,7 +384,7 @@ void DABDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -410,6 +410,7 @@ void DABDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -442,11 +443,12 @@ DABDemodGUI::DABDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_tickCount(0), m_channelFreq(0.0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demoddab/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_dabDemod = reinterpret_cast(rxChannel); @@ -506,6 +508,7 @@ DABDemodGUI::DABDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(ui->programs->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(programs_sectionResized(int, int, int))); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -539,6 +542,7 @@ void DABDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -569,7 +573,7 @@ void DABDemodGUI::displaySettings() filter(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -605,7 +609,7 @@ void DABDemodGUI::clearProgram() ui->data->setText(""); ui->motImage->setPixmap(QPixmap()); ui->motImage->setVisible(false); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void DABDemodGUI::resetService() @@ -692,3 +696,15 @@ void DABDemodGUI::tick() m_tickCount++; } + +void DABDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &DABDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &DABDemodGUI::on_audioMute_toggled); + QObject::connect(ui->volume, &QSlider::valueChanged, this, &DABDemodGUI::on_volume_valueChanged); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &DABDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->filter, &QLineEdit::editingFinished, this, &DABDemodGUI::on_filter_editingFinished); + QObject::connect(ui->clearTable, &QPushButton::clicked, this, &DABDemodGUI::on_clearTable_clicked); + QObject::connect(ui->programs, &QTableWidget::cellDoubleClicked, this, &DABDemodGUI::on_programs_cellDoubleClicked); + QObject::connect(ui->channel, QOverload::of(&QComboBox::currentIndexChanged), this, &DABDemodGUI::on_channel_currentIndexChanged); +} diff --git a/plugins/channelrx/demoddab/dabdemodgui.h b/plugins/channelrx/demoddab/dabdemodgui.h index c8ba0270a..f8b59f534 100644 --- a/plugins/channelrx/demoddab/dabdemodgui.h +++ b/plugins/channelrx/demoddab/dabdemodgui.h @@ -53,6 +53,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -84,6 +90,8 @@ private: void displayStreamIndex(); void addProgramName(const DABDemod::MsgDABProgramName& program); bool handleMessage(const Message& message); + void makeUIConnections(); + void leaveEvent(QEvent*); void enterEvent(QEvent*); void resetService(); diff --git a/plugins/channelrx/demoddab/dabdemodgui.ui b/plugins/channelrx/demoddab/dabdemodgui.ui index c166e5c5a..5367f6909 100644 --- a/plugins/channelrx/demoddab/dabdemodgui.ui +++ b/plugins/channelrx/demoddab/dabdemodgui.ui @@ -1,7 +1,7 @@ DABDemodGUI - + 0 @@ -1009,9 +1009,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demoddab/dabdemodsettings.cpp b/plugins/channelrx/demoddab/dabdemodsettings.cpp index 029729006..db575b573 100644 --- a/plugins/channelrx/demoddab/dabdemodsettings.cpp +++ b/plugins/channelrx/demoddab/dabdemodsettings.cpp @@ -47,6 +47,7 @@ void DABDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; for (int i = 0; i < DABDEMOD_COLUMNS; i++) { @@ -82,6 +83,9 @@ QByteArray DABDemodSettings::serialize() const s.writeBlob(16, m_rollupState->serialize()); } + s.writeS32(17, m_workspaceIndex); + s.writeBlob(18, m_geometryBytes); + for (int i = 0; i < DABDEMOD_COLUMNS; i++) { s.writeS32(100 + i, m_columnIndexes[i]); } @@ -146,6 +150,9 @@ bool DABDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(17, &m_workspaceIndex, 0); + d.readBlob(18, &m_geometryBytes); + for (int i = 0; i < DABDEMOD_COLUMNS; i++) { d.readS32(100 + i, &m_columnIndexes[i], i); } diff --git a/plugins/channelrx/demoddab/dabdemodsettings.h b/plugins/channelrx/demoddab/dabdemodsettings.h index 80234e935..596ba2eaf 100644 --- a/plugins/channelrx/demoddab/dabdemodsettings.h +++ b/plugins/channelrx/demoddab/dabdemodsettings.h @@ -46,6 +46,8 @@ struct DABDemodSettings uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_columnIndexes[DABDEMOD_COLUMNS];//!< How the columns are ordered in the table int m_columnSizes[DABDEMOD_COLUMNS]; //!< Size of the columns in the table diff --git a/plugins/channelrx/demoddatv/datvdemodgui.cpp b/plugins/channelrx/demoddatv/datvdemodgui.cpp index b0863b099..5af728860 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.cpp +++ b/plugins/channelrx/demoddatv/datvdemodgui.cpp @@ -128,7 +128,7 @@ void DATVDemodGUI::channelMarkerChangedByCursor() void DATVDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_objChannelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_objChannelMarker.getHighlighted()); } @@ -137,7 +137,7 @@ void DATVDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -164,6 +164,7 @@ void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_objChannelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -198,12 +199,13 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba m_modcodCodeRateIndex(-1), m_cstlnSetByModcod(false) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demoddatv/readme.md"; ui->screenTV->setColor(true); ui->screenTV->resizeTVScreen(256,256); setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); @@ -283,6 +285,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba ui->playerIndicator->setStyleSheet("QLabel { background-color: gray; border-radius: 8px; }"); ui->udpIndicator->setStyleSheet("QLabel { background-color: gray; border-radius: 8px; }"); resetToDefaults(); // does applySettings() + makeUIConnections(); } DATVDemodGUI::~DATVDemodGUI() @@ -308,6 +311,7 @@ void DATVDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_objChannelMarker.getTitle()); + setTitle(m_objChannelMarker.getTitle()); ui->deltaFrequency->setValue(m_settings.m_centerFrequency); ui->chkAllowDrift->setChecked(m_settings.m_allowDrift); @@ -395,7 +399,7 @@ void DATVDemodGUI::displaySettings() connect(m_datvDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); } - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -656,7 +660,7 @@ void DATVDemodGUI::on_cmbStandard_currentIndexChanged(int index) applySettings(); } -void DATVDemodGUI::on_cmbModulation_currentIndexChanged(const QString &arg1) +void DATVDemodGUI::on_cmbModulation_currentIndexChanged(int arg1) { (void) arg1; QString strModulation = ui->cmbModulation->currentText(); @@ -674,7 +678,7 @@ void DATVDemodGUI::on_cmbModulation_currentIndexChanged(const QString &arg1) applySettings(); } -void DATVDemodGUI::on_cmbFEC_currentIndexChanged(const QString &arg1) +void DATVDemodGUI::on_cmbFEC_currentIndexChanged(int arg1) { (void) arg1; QString strFEC = ui->cmbFEC->currentText(); @@ -919,3 +923,32 @@ void DATVDemodGUI::on_udpTSPort_editingFinished() ui->udpTSPort->setText(tr("%1").arg(udpPort)); applySettings(); } + +void DATVDemodGUI::makeUIConnections() +{ + QObject::connect(ui->cmbStandard, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVDemodGUI::on_cmbStandard_currentIndexChanged); + QObject::connect(ui->cmbModulation, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVDemodGUI::on_cmbModulation_currentIndexChanged); + QObject::connect(ui->cmbFEC, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVDemodGUI::on_cmbFEC_currentIndexChanged); + QObject::connect(ui->softLDPC, &QCheckBox::clicked, this, &DATVDemodGUI::on_softLDPC_clicked); + QObject::connect(ui->maxBitflips, QOverload::of(&QSpinBox::valueChanged), this, &DATVDemodGUI::on_maxBitflips_valueChanged); + QObject::connect(ui->chkViterbi, &QCheckBox::clicked, this, &DATVDemodGUI::on_chkViterbi_clicked); + QObject::connect(ui->chkHardMetric, &QCheckBox::clicked, this, &DATVDemodGUI::on_chkHardMetric_clicked); + QObject::connect(ui->resetDefaults, &QPushButton::clicked, this, &DATVDemodGUI::on_resetDefaults_clicked); + QObject::connect(ui->spiSymbolRate, QOverload::of(&QSpinBox::valueChanged), this, &DATVDemodGUI::on_spiSymbolRate_valueChanged); + QObject::connect(ui->spiNotchFilters, QOverload::of(&QSpinBox::valueChanged), this, &DATVDemodGUI::on_spiNotchFilters_valueChanged); + QObject::connect(ui->chkAllowDrift, &QCheckBox::clicked, this, &DATVDemodGUI::on_chkAllowDrift_clicked); + QObject::connect(ui->fullScreen, &QPushButton::clicked, this, &DATVDemodGUI::on_fullScreen_clicked); + QObject::connect(ui->chkFastlock, &QCheckBox::clicked, this, &DATVDemodGUI::on_chkFastlock_clicked); + QObject::connect(ui->cmbFilter, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVDemodGUI::on_cmbFilter_currentIndexChanged); + QObject::connect(ui->spiRollOff, QOverload::of(&QSpinBox::valueChanged), this, &DATVDemodGUI::on_spiRollOff_valueChanged); + QObject::connect(ui->spiExcursion, QOverload::of(&QSpinBox::valueChanged), this, &DATVDemodGUI::on_spiExcursion_valueChanged); + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &DATVDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBandwidth, &ValueDialZ::changed, this, &DATVDemodGUI::on_rfBandwidth_changed); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &DATVDemodGUI::on_audioMute_toggled); + QObject::connect(ui->audioVolume, &QSlider::valueChanged, this, &DATVDemodGUI::on_audioVolume_valueChanged); + QObject::connect(ui->videoMute, &QToolButton::toggled, this, &DATVDemodGUI::on_videoMute_toggled); + QObject::connect(ui->udpTS, &ButtonSwitch::clicked, this, &DATVDemodGUI::on_udpTS_clicked); + QObject::connect(ui->udpTSAddress, &QLineEdit::editingFinished, this, &DATVDemodGUI::on_udpTSAddress_editingFinished); + QObject::connect(ui->udpTSPort, &QLineEdit::editingFinished, this, &DATVDemodGUI::on_udpTSPort_editingFinished); + QObject::connect(ui->playerEnable, &QCheckBox::clicked, this, &DATVDemodGUI::on_playerEnable_clicked); +} diff --git a/plugins/channelrx/demoddatv/datvdemodgui.h b/plugins/channelrx/demoddatv/datvdemodgui.h index efd4f6283..3812290a7 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.h +++ b/plugins/channelrx/demoddatv/datvdemodgui.h @@ -50,6 +50,12 @@ public: void resetToDefaults(); QByteArray serialize() const; bool deserialize(const QByteArray& arrData); + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } @@ -68,8 +74,8 @@ private slots: void tickMeter(); void on_cmbStandard_currentIndexChanged(int index); - void on_cmbModulation_currentIndexChanged(const QString &arg1); - void on_cmbFEC_currentIndexChanged(const QString &arg1); + void on_cmbModulation_currentIndexChanged(int arg1); + void on_cmbFEC_currentIndexChanged(int arg1); void on_softLDPC_clicked(); void on_maxBitflips_valueChanged(int value); void on_chkViterbi_clicked(); @@ -137,6 +143,7 @@ private: void leaveEvent(QEvent*); void enterEvent(QEvent*); bool handleMessage(const Message& objMessage); + void makeUIConnections(); }; #endif // INCLUDE_DATVDEMODGUI_H diff --git a/plugins/channelrx/demoddatv/datvdemodgui.ui b/plugins/channelrx/demoddatv/datvdemodgui.ui index 976851a62..d4ec6ce0b 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.ui +++ b/plugins/channelrx/demoddatv/datvdemodgui.ui @@ -1,7 +1,7 @@ DATVDemodGUI - + 0 @@ -1394,9 +1394,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.cpp b/plugins/channelrx/demoddatv/datvdemodsettings.cpp index ceb3b4bc5..eba558f95 100644 --- a/plugins/channelrx/demoddatv/datvdemodsettings.cpp +++ b/plugins/channelrx/demoddatv/datvdemodsettings.cpp @@ -70,6 +70,7 @@ void DATVDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray DATVDemodSettings::serialize() const @@ -119,6 +120,9 @@ QByteArray DATVDemodSettings::serialize() const s.writeBlob(37, m_rollupState->serialize()); } + s.writeS32(38, m_workspaceIndex); + s.writeBlob(39, m_geometryBytes); + return s.final(); } @@ -213,6 +217,9 @@ bool DATVDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(38, &m_workspaceIndex, 0); + d.readBlob(39, &m_geometryBytes); + validateSystemConfiguration(); return true; diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.h b/plugins/channelrx/demoddatv/datvdemodsettings.h index 4d5712d7e..8da3bbc9a 100644 --- a/plugins/channelrx/demoddatv/datvdemodsettings.h +++ b/plugins/channelrx/demoddatv/datvdemodsettings.h @@ -108,6 +108,9 @@ struct DATVDemodSettings uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; + static const int m_softLDPCMaxMaxTrials = 50; DATVDemodSettings(); diff --git a/plugins/channelrx/demoddsd/dsddemodgui.cpp b/plugins/channelrx/demoddsd/dsddemodgui.cpp index b6f79dea8..ae2e33071 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.cpp +++ b/plugins/channelrx/demoddsd/dsddemodgui.cpp @@ -248,7 +248,7 @@ void DSDDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -276,6 +276,7 @@ void DSDDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -321,13 +322,14 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_tickCount(0), m_dsdStatusTextDialog(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demoddsd/readme.md"; ui->screenTV->setColor(true); ui->screenTV->resizeTVScreen(200,200); setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); @@ -382,6 +384,7 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban updateMyPosition(); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -415,6 +418,7 @@ void DSDDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -463,7 +467,7 @@ void DSDDemodGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -511,7 +515,7 @@ void DSDDemodGUI::channelMarkerChangedByCursor() void DSDDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void DSDDemodGUI::audioSelect() @@ -614,3 +618,25 @@ void DSDDemodGUI::tick() m_tickCount++; } + +void DSDDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &DSDDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &DSDDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->demodGain, &QSlider::valueChanged, this, &DSDDemodGUI::on_demodGain_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &DSDDemodGUI::on_volume_valueChanged); + QObject::connect(ui->baudRate, QOverload::of(&QComboBox::currentIndexChanged), this, &DSDDemodGUI::on_baudRate_currentIndexChanged); + QObject::connect(ui->enableCosineFiltering, &ButtonSwitch::toggled, this, &DSDDemodGUI::on_enableCosineFiltering_toggled); + QObject::connect(ui->syncOrConstellation, &QToolButton::toggled, this, &DSDDemodGUI::on_syncOrConstellation_toggled); + QObject::connect(ui->traceLength, &QDial::valueChanged, this, &DSDDemodGUI::on_traceLength_valueChanged); + QObject::connect(ui->traceStroke, &QDial::valueChanged, this, &DSDDemodGUI::on_traceStroke_valueChanged); + QObject::connect(ui->traceDecay, &QDial::valueChanged, this, &DSDDemodGUI::on_traceDecay_valueChanged); + QObject::connect(ui->tdmaStereoSplit, &QToolButton::toggled, this, &DSDDemodGUI::on_tdmaStereoSplit_toggled); + QObject::connect(ui->fmDeviation, &QSlider::valueChanged, this, &DSDDemodGUI::on_fmDeviation_valueChanged); + QObject::connect(ui->squelchGate, &QDial::valueChanged, this, &DSDDemodGUI::on_squelchGate_valueChanged); + QObject::connect(ui->squelch, &QDial::valueChanged, this, &DSDDemodGUI::on_squelch_valueChanged); + QObject::connect(ui->highPassFilter, &ButtonSwitch::toggled, this, &DSDDemodGUI::on_highPassFilter_toggled); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &DSDDemodGUI::on_audioMute_toggled); + QObject::connect(ui->symbolPLLLock, &QToolButton::toggled, this, &DSDDemodGUI::on_symbolPLLLock_toggled); + QObject::connect(ui->viewStatusLog, &QPushButton::clicked, this, &DSDDemodGUI::on_viewStatusLog_clicked); +} diff --git a/plugins/channelrx/demoddsd/dsddemodgui.h b/plugins/channelrx/demoddsd/dsddemodgui.h index d72985ae5..1d4e4aacd 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.h +++ b/plugins/channelrx/demoddsd/dsddemodgui.h @@ -52,6 +52,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -104,6 +110,7 @@ private: void displayStreamIndex(); void updateMyPosition(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demoddsd/dsddemodgui.ui b/plugins/channelrx/demoddsd/dsddemodgui.ui index 68565f0c5..295059813 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.ui +++ b/plugins/channelrx/demoddsd/dsddemodgui.ui @@ -1,7 +1,7 @@ DSDDemodGUI - + 0 @@ -1232,9 +1232,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.cpp b/plugins/channelrx/demoddsd/dsddemodsettings.cpp index 02dd24b33..3c025b48e 100644 --- a/plugins/channelrx/demoddsd/dsddemodsettings.cpp +++ b/plugins/channelrx/demoddsd/dsddemodsettings.cpp @@ -59,6 +59,7 @@ void DSDDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray DSDDemodSettings::serialize() const @@ -102,6 +103,9 @@ QByteArray DSDDemodSettings::serialize() const s.writeBlob(31, m_rollupState->serialize()); } + s.writeS32(32, m_workspaceIndex); + s.writeBlob(33, m_geometryBytes); + return s.final(); } @@ -181,6 +185,9 @@ bool DSDDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(32, &m_workspaceIndex, 0); + d.readBlob(33, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.h b/plugins/channelrx/demoddsd/dsddemodsettings.h index e16dd5d7d..3c875edea 100644 --- a/plugins/channelrx/demoddsd/dsddemodsettings.h +++ b/plugins/channelrx/demoddsd/dsddemodsettings.h @@ -52,6 +52,8 @@ struct DSDDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.cpp b/plugins/channelrx/demodfreedv/freedvdemodgui.cpp index 51138defa..00455c0b1 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.cpp @@ -123,7 +123,7 @@ void FreeDVDemodGUI::channelMarkerChangedByCursor() void FreeDVDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void FreeDVDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -209,6 +209,7 @@ void FreeDVDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -236,7 +237,7 @@ void FreeDVDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -254,10 +255,11 @@ FreeDVDemodGUI::FreeDVDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B m_squelchOpen(false), m_audioSampleRate(-1) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodfreedv/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_freeDVDemod = (FreeDVDemod*) rxChannel; @@ -308,6 +310,7 @@ FreeDVDemodGUI::FreeDVDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B m_iconDSBLSB.addPixmap(QPixmap("://lsb.png"), QIcon::Normal, QIcon::Off); displaySettings(); + makeUIConnections(); applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true) } @@ -371,6 +374,7 @@ void FreeDVDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -393,7 +397,7 @@ void FreeDVDemodGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -487,3 +491,14 @@ void FreeDVDemodGUI::tick() m_tickCount++; } + +void FreeDVDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &FreeDVDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->reSync, &QPushButton::clicked, this, &FreeDVDemodGUI::on_reSync_clicked); + QObject::connect(ui->freeDVMode, QOverload::of(&QComboBox::currentIndexChanged), this, &FreeDVDemodGUI::on_freeDVMode_currentIndexChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &FreeDVDemodGUI::on_volume_valueChanged); + QObject::connect(ui->volumeIn, &QDial::valueChanged, this, &FreeDVDemodGUI::on_volumeIn_valueChanged); + QObject::connect(ui->agc, &ButtonSwitch::toggled, this, &FreeDVDemodGUI::on_agc_toggled); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &FreeDVDemodGUI::on_audioMute_toggled); +} diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.h b/plugins/channelrx/demodfreedv/freedvdemodgui.h index d36c30436..655e2115f 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.h +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.h @@ -50,6 +50,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -88,6 +94,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.ui b/plugins/channelrx/demodfreedv/freedvdemodgui.ui index f30eada83..4c1ab1c80 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.ui +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.ui @@ -1,7 +1,7 @@ FreeDVDemodGUI - + 0 @@ -710,9 +710,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp b/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp index f5fea767f..ff0b51613 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp @@ -56,6 +56,7 @@ void FreeDVDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray FreeDVDemodSettings::serialize() const @@ -86,6 +87,9 @@ QByteArray FreeDVDemodSettings::serialize() const s.writeBlob(25, m_rollupState->serialize()); } + s.writeS32(26, m_workspaceIndex); + s.writeBlob(27, m_geometryBytes); + return s.final(); } @@ -154,6 +158,9 @@ bool FreeDVDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(26, &m_workspaceIndex, 0); + d.readBlob(27, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodfreedv/freedvdemodsettings.h b/plugins/channelrx/demodfreedv/freedvdemodsettings.h index ef3ce36eb..84b4fca3a 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodsettings.h +++ b/plugins/channelrx/demodfreedv/freedvdemodsettings.h @@ -51,6 +51,8 @@ struct FreeDVDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index 831ac89ad..b7cd4dd0b 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -106,7 +106,7 @@ void NFMDemodGUI::channelMarkerChangedByCursor() void NFMDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void NFMDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -280,7 +280,7 @@ void NFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) m_nfmDemod->setSpectrum(m_threadedSampleSink->getMessageQueue(), rollDown); */ - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -307,6 +307,7 @@ void NFMDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -343,11 +344,12 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_dcsShowPositive(false), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodnfm/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_nfmDemod = reinterpret_cast(rxChannel); @@ -420,6 +422,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -450,6 +453,7 @@ void NFMDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -509,7 +513,7 @@ void NFMDemodGUI::displaySettings() setDcsCode(m_reportedDcsCode); displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -611,3 +615,22 @@ void NFMDemodGUI::tick() m_tickCount++; } + +void NFMDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &NFMDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->channelSpacingApply, &QPushButton::clicked, this, &NFMDemodGUI::on_channelSpacingApply_clicked); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &NFMDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->afBW, &QSlider::valueChanged, this, &NFMDemodGUI::on_afBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &NFMDemodGUI::on_fmDev_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &NFMDemodGUI::on_volume_valueChanged); + QObject::connect(ui->squelchGate, &QDial::valueChanged, this, &NFMDemodGUI::on_squelchGate_valueChanged); + QObject::connect(ui->deltaSquelch, &ButtonSwitch::toggled, this, &NFMDemodGUI::on_deltaSquelch_toggled); + QObject::connect(ui->squelch, &QDial::valueChanged, this, &NFMDemodGUI::on_squelch_valueChanged); + QObject::connect(ui->ctcss, QOverload::of(&QComboBox::currentIndexChanged), this, &NFMDemodGUI::on_ctcss_currentIndexChanged); + QObject::connect(ui->ctcssOn, &QCheckBox::toggled, this, &NFMDemodGUI::on_ctcssOn_toggled); + QObject::connect(ui->dcsOn, &QCheckBox::toggled, this, &NFMDemodGUI::on_dcsOn_toggled); + QObject::connect(ui->dcsCode, QOverload::of(&QComboBox::currentIndexChanged), this, &NFMDemodGUI::on_dcsCode_currentIndexChanged); + QObject::connect(ui->highPassFilter, &ButtonSwitch::toggled, this, &NFMDemodGUI::on_highPassFilter_toggled); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &NFMDemodGUI::on_audioMute_toggled); +} diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.h b/plugins/channelrx/demodnfm/nfmdemodgui.h index da1ce7d94..1e82aed46 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.h +++ b/plugins/channelrx/demodnfm/nfmdemodgui.h @@ -30,6 +30,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -63,6 +69,7 @@ private: void setCtcssFreq(Real ctcssFreq); void setDcsCode(unsigned int dcsCode); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.ui b/plugins/channelrx/demodnfm/nfmdemodgui.ui index 9dcac0f01..6ff83f5c7 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.ui +++ b/plugins/channelrx/demodnfm/nfmdemodgui.ui @@ -1,25 +1,25 @@ NFMDemodGUI - + 0 0 - 364 - 200 + 360 + 197 - + 0 0 - 364 - 200 + 360 + 0 @@ -36,13 +36,13 @@ 0 0 - 362 + 358 191 - 362 + 358 0 @@ -778,17 +778,17 @@ - - RollupWidget - QWidget -
gui/rollupwidget.h
- 1 -
ButtonSwitch QToolButton
gui/buttonswitch.h
+ + RollupContents + QWidget +
gui/rollupcontents.h
+ 1 +
ValueDialZ QWidget diff --git a/plugins/channelrx/demodnfm/nfmdemodsettings.cpp b/plugins/channelrx/demodnfm/nfmdemodsettings.cpp index 3be041951..07160b45c 100644 --- a/plugins/channelrx/demodnfm/nfmdemodsettings.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodsettings.cpp @@ -74,6 +74,7 @@ void NFMDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray NFMDemodSettings::serialize() const @@ -113,6 +114,9 @@ QByteArray NFMDemodSettings::serialize() const s.writeBlob(26, m_rollupState->serialize()); } + s.writeS32(27, m_workspaceIndex); + s.writeBlob(28, m_geometryBytes); + return s.final(); } @@ -182,6 +186,9 @@ bool NFMDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(27, &m_workspaceIndex, 0); + d.readBlob(28, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodnfm/nfmdemodsettings.h b/plugins/channelrx/demodnfm/nfmdemodsettings.h index 3db632a36..fd7da3321 100644 --- a/plugins/channelrx/demodnfm/nfmdemodsettings.h +++ b/plugins/channelrx/demodnfm/nfmdemodsettings.h @@ -54,6 +54,8 @@ struct NFMDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channelrx/demodpacket/packetdemodgui.cpp b/plugins/channelrx/demodpacket/packetdemodgui.cpp index 8b2969a03..ce32d954b 100644 --- a/plugins/channelrx/demodpacket/packetdemodgui.cpp +++ b/plugins/channelrx/demodpacket/packetdemodgui.cpp @@ -253,7 +253,7 @@ void PacketDemodGUI::channelMarkerChangedByCursor() void PacketDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void PacketDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -369,7 +369,7 @@ void PacketDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -395,6 +395,7 @@ void PacketDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -426,11 +427,12 @@ PacketDemodGUI::PacketDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B m_doApplySettings(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodpacket/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_packetDemod = reinterpret_cast(rxChannel); @@ -482,6 +484,7 @@ PacketDemodGUI::PacketDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B connect(ui->packets->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(packets_sectionResized(int, int, int))); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -515,6 +518,7 @@ void PacketDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -553,7 +557,7 @@ void PacketDemodGUI::displaySettings() filter(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -682,3 +686,21 @@ void PacketDemodGUI::on_logOpen_clicked() } } } + +void PacketDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &PacketDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->mode, QOverload::of(&QComboBox::currentIndexChanged), this, &PacketDemodGUI::on_mode_currentIndexChanged); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &PacketDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &PacketDemodGUI::on_fmDev_valueChanged); + QObject::connect(ui->filterFrom, &QLineEdit::editingFinished, this, &PacketDemodGUI::on_filterFrom_editingFinished); + QObject::connect(ui->filterTo, &QLineEdit::editingFinished, this, &PacketDemodGUI::on_filterTo_editingFinished); + QObject::connect(ui->filterPID, &QCheckBox::stateChanged, this, &PacketDemodGUI::on_filterPID_stateChanged); + QObject::connect(ui->clearTable, &QPushButton::clicked, this, &PacketDemodGUI::on_clearTable_clicked); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &PacketDemodGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &PacketDemodGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &PacketDemodGUI::on_udpPort_editingFinished); + QObject::connect(ui->logEnable, &ButtonSwitch::clicked, this, &PacketDemodGUI::on_logEnable_clicked); + QObject::connect(ui->logFilename, &QToolButton::clicked, this, &PacketDemodGUI::on_logFilename_clicked); + QObject::connect(ui->logOpen, &QToolButton::clicked, this, &PacketDemodGUI::on_logOpen_clicked); +} diff --git a/plugins/channelrx/demodpacket/packetdemodgui.h b/plugins/channelrx/demodpacket/packetdemodgui.h index 0e4bf46ca..6004a4cad 100644 --- a/plugins/channelrx/demodpacket/packetdemodgui.h +++ b/plugins/channelrx/demodpacket/packetdemodgui.h @@ -58,6 +58,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -88,6 +94,7 @@ private: void displayStreamIndex(); void packetReceived(QByteArray packet); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodpacket/packetdemodgui.ui b/plugins/channelrx/demodpacket/packetdemodgui.ui index e38e0856f..2fbce3533 100644 --- a/plugins/channelrx/demodpacket/packetdemodgui.ui +++ b/plugins/channelrx/demodpacket/packetdemodgui.ui @@ -1,7 +1,7 @@ PacketDemodGUI - + 0 @@ -713,9 +713,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodpacket/packetdemodsettings.cpp b/plugins/channelrx/demodpacket/packetdemodsettings.cpp index a44381513..0aa16157b 100644 --- a/plugins/channelrx/demodpacket/packetdemodsettings.cpp +++ b/plugins/channelrx/demodpacket/packetdemodsettings.cpp @@ -53,6 +53,7 @@ void PacketDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; for (int i = 0; i < PACKETDEMOD_COLUMNS; i++) { @@ -95,6 +96,9 @@ QByteArray PacketDemodSettings::serialize() const s.writeBlob(27, m_rollupState->serialize()); } + s.writeS32(28, m_workspaceIndex); + s.writeBlob(29, m_geometryBytes); + for (int i = 0; i < PACKETDEMOD_COLUMNS; i++) { s.writeS32(100 + i, m_columnIndexes[i]); } @@ -173,6 +177,9 @@ bool PacketDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(28, &m_workspaceIndex, 0); + d.readBlob(29, &m_geometryBytes); + for (int i = 0; i < PACKETDEMOD_COLUMNS; i++) { d.readS32(100 + i, &m_columnIndexes[i], i); } diff --git a/plugins/channelrx/demodpacket/packetdemodsettings.h b/plugins/channelrx/demodpacket/packetdemodsettings.h index 76e6efa87..77be10352 100644 --- a/plugins/channelrx/demodpacket/packetdemodsettings.h +++ b/plugins/channelrx/demodpacket/packetdemodsettings.h @@ -57,6 +57,8 @@ struct PacketDemodSettings QString m_logFilename; bool m_logEnabled; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_columnIndexes[PACKETDEMOD_COLUMNS];//!< How the columns are ordered in the table int m_columnSizes[PACKETDEMOD_COLUMNS]; //!< Size of the columns in the table diff --git a/plugins/channelrx/demodpager/pagerdemodgui.cpp b/plugins/channelrx/demodpager/pagerdemodgui.cpp index a71ff7c93..6ef17a027 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.cpp +++ b/plugins/channelrx/demodpager/pagerdemodgui.cpp @@ -303,7 +303,7 @@ void PagerDemodGUI::channelMarkerChangedByCursor() void PagerDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void PagerDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -420,7 +420,7 @@ void PagerDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) } } - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -446,6 +446,7 @@ void PagerDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -477,11 +478,12 @@ PagerDemodGUI::PagerDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas m_doApplySettings(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodpager/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_pagerDemod = reinterpret_cast(rxChannel); @@ -545,6 +547,7 @@ PagerDemodGUI::PagerDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas ui->scopeContainer->setVisible(false); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -596,6 +599,7 @@ void PagerDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -645,7 +649,7 @@ void PagerDemodGUI::displaySettings() filter(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -797,3 +801,21 @@ void PagerDemodGUI::on_logOpen_clicked() } } } + +void PagerDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &PagerDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &PagerDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &PagerDemodGUI::on_fmDev_valueChanged); + QObject::connect(ui->baud, QOverload::of(&QComboBox::currentIndexChanged), this, &PagerDemodGUI::on_baud_currentIndexChanged); + QObject::connect(ui->decode, QOverload::of(&QComboBox::currentIndexChanged), this, &PagerDemodGUI::on_decode_currentIndexChanged); + QObject::connect(ui->charset, &QToolButton::clicked, this, &PagerDemodGUI::on_charset_clicked); + QObject::connect(ui->filterAddress, &QLineEdit::editingFinished, this, &PagerDemodGUI::on_filterAddress_editingFinished); + QObject::connect(ui->clearTable, &QToolButton::clicked, this, &PagerDemodGUI::on_clearTable_clicked); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &PagerDemodGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &PagerDemodGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &PagerDemodGUI::on_udpPort_editingFinished); + QObject::connect(ui->logEnable, &ButtonSwitch::clicked, this, &PagerDemodGUI::on_logEnable_clicked); + QObject::connect(ui->logFilename, &QToolButton::clicked, this, &PagerDemodGUI::on_logFilename_clicked); + QObject::connect(ui->logOpen, &QToolButton::clicked, this, &PagerDemodGUI::on_logOpen_clicked); +} diff --git a/plugins/channelrx/demodpager/pagerdemodgui.h b/plugins/channelrx/demodpager/pagerdemodgui.h index 1ad9ed1d3..d17093c8a 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.h +++ b/plugins/channelrx/demodpager/pagerdemodgui.h @@ -52,6 +52,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -84,6 +90,7 @@ private: const QString &numericMessage, const QString &alphaMessage, int evenParityErrors, int bchParityErrors); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodpager/pagerdemodgui.ui b/plugins/channelrx/demodpager/pagerdemodgui.ui index d5c370095..be681d34a 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.ui +++ b/plugins/channelrx/demodpager/pagerdemodgui.ui @@ -1,7 +1,7 @@ PagerDemodGUI - + 0 @@ -1013,9 +1013,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodpager/pagerdemodsettings.cpp b/plugins/channelrx/demodpager/pagerdemodsettings.cpp index 6556548f8..c2fdbb889 100644 --- a/plugins/channelrx/demodpager/pagerdemodsettings.cpp +++ b/plugins/channelrx/demodpager/pagerdemodsettings.cpp @@ -56,6 +56,7 @@ void PagerDemodSettings::resetToDefaults() m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; m_reverse = false; + m_workspaceIndex = 0; for (int i = 0; i < PAGERDEMOD_MESSAGE_COLUMNS; i++) { @@ -103,6 +104,9 @@ QByteArray PagerDemodSettings::serialize() const s.writeBlob(27, m_rollupState->serialize()); } + s.writeS32(28, m_workspaceIndex); + s.writeBlob(29, m_geometryBytes); + for (int i = 0; i < PAGERDEMOD_MESSAGE_COLUMNS; i++) { s.writeS32(100 + i, m_messageColumnIndexes[i]); } @@ -194,6 +198,9 @@ bool PagerDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(28, &m_workspaceIndex, 0); + d.readBlob(29, &m_geometryBytes); + for (int i = 0; i < PAGERDEMOD_MESSAGE_COLUMNS; i++) { d.readS32(100 + i, &m_messageColumnIndexes[i], i); } diff --git a/plugins/channelrx/demodpager/pagerdemodsettings.h b/plugins/channelrx/demodpager/pagerdemodsettings.h index 819f0092f..a56dcd916 100644 --- a/plugins/channelrx/demodpager/pagerdemodsettings.h +++ b/plugins/channelrx/demodpager/pagerdemodsettings.h @@ -67,6 +67,8 @@ struct PagerDemodSettings QString m_logFilename; bool m_logEnabled; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_messageColumnIndexes[PAGERDEMOD_MESSAGE_COLUMNS];//!< How the columns are ordered in the table int m_messageColumnSizes[PAGERDEMOD_MESSAGE_COLUMNS]; //!< Size of the columns in the table diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp b/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp index 4481ad3ed..87074c6e3 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp @@ -350,7 +350,7 @@ void RadiosondeDemodGUI::channelMarkerChangedByCursor() void RadiosondeDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void RadiosondeDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -477,7 +477,7 @@ void RadiosondeDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) } } - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -503,6 +503,7 @@ void RadiosondeDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -534,11 +535,12 @@ RadiosondeDemodGUI::RadiosondeDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device m_doApplySettings(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodradiosonde/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_radiosondeDemod = reinterpret_cast(rxChannel); @@ -634,6 +636,7 @@ RadiosondeDemodGUI::RadiosondeDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device ui->scopeContainer->setVisible(false); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -707,6 +710,7 @@ void RadiosondeDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -749,7 +753,7 @@ void RadiosondeDemodGUI::displaySettings() filter(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -893,3 +897,20 @@ void RadiosondeDemodGUI::on_logOpen_clicked() } } } + +void RadiosondeDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &RadiosondeDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &RadiosondeDemodGUI::on_rfBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &RadiosondeDemodGUI::on_fmDev_valueChanged); + QObject::connect(ui->threshold, &QDial::valueChanged, this, &RadiosondeDemodGUI::on_threshold_valueChanged); + QObject::connect(ui->filterSerial, &QLineEdit::editingFinished, this, &RadiosondeDemodGUI::on_filterSerial_editingFinished); + QObject::connect(ui->clearTable, &QPushButton::clicked, this, &RadiosondeDemodGUI::on_clearTable_clicked); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &RadiosondeDemodGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &RadiosondeDemodGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &RadiosondeDemodGUI::on_udpPort_editingFinished); + QObject::connect(ui->frames, &QTableWidget::cellDoubleClicked, this, &RadiosondeDemodGUI::on_frames_cellDoubleClicked); + QObject::connect(ui->logEnable, &ButtonSwitch::clicked, this, &RadiosondeDemodGUI::on_logEnable_clicked); + QObject::connect(ui->logFilename, &QToolButton::clicked, this, &RadiosondeDemodGUI::on_logFilename_clicked); + QObject::connect(ui->logOpen, &QToolButton::clicked, this, &RadiosondeDemodGUI::on_logOpen_clicked); +} diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodgui.h b/plugins/channelrx/demodradiosonde/radiosondedemodgui.h index 053802350..4db42e013 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodgui.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemodgui.h @@ -54,6 +54,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -87,6 +93,7 @@ private: void displayStreamIndex(); void frameReceived(const QByteArray& frame, const QDateTime& dateTime, int errorsCorrected, int threshold); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodgui.ui b/plugins/channelrx/demodradiosonde/radiosondedemodgui.ui index f8624865b..3edf4d26c 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodgui.ui +++ b/plugins/channelrx/demodradiosonde/radiosondedemodgui.ui @@ -1,7 +1,7 @@ RadiosondeDemodGUI - + 0 @@ -1055,9 +1055,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp index 03d22fb0d..64f9d163a 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp @@ -54,6 +54,7 @@ void RadiosondeDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; for (int i = 0; i < RADIOSONDEDEMOD_FRAME_COLUMNS; i++) { @@ -98,6 +99,9 @@ QByteArray RadiosondeDemodSettings::serialize() const s.writeBlob(25, m_rollupState->serialize()); } + s.writeS32(26, m_workspaceIndex); + s.writeBlob(27, m_geometryBytes); + for (int i = 0; i < RADIOSONDEDEMOD_FRAME_COLUMNS; i++) s.writeS32(100 + i, m_frameColumnIndexes[i]); for (int i = 0; i < RADIOSONDEDEMOD_FRAME_COLUMNS; i++) @@ -180,6 +184,9 @@ bool RadiosondeDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(26, &m_workspaceIndex, 0); + d.readBlob(27, &m_geometryBytes); + for (int i = 0; i < RADIOSONDEDEMOD_FRAME_COLUMNS; i++) { d.readS32(100 + i, &m_frameColumnIndexes[i], i); } diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h index 76a4fe839..416dbf7f7 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h @@ -57,6 +57,8 @@ struct RadiosondeDemodSettings uint16_t m_reverseAPIChannelIndex; Serializable *m_scopeGUI; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_frameColumnIndexes[RADIOSONDEDEMOD_FRAME_COLUMNS];//!< How the columns are ordered in the table int m_frameColumnSizes[RADIOSONDEDEMOD_FRAME_COLUMNS]; //!< Size of the columns in the table diff --git a/plugins/channelrx/demodssb/ssbdemodgui.cpp b/plugins/channelrx/demodssb/ssbdemodgui.cpp index 177a3a6d8..511ca5358 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.cpp +++ b/plugins/channelrx/demodssb/ssbdemodgui.cpp @@ -112,7 +112,7 @@ void SSBDemodGUI::channelMarkerChangedByCursor() void SSBDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void SSBDemodGUI::on_audioBinaural_toggled(bool binaural) @@ -249,6 +249,7 @@ void SSBDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -276,7 +277,7 @@ void SSBDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -294,10 +295,11 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_squelchOpen(false), m_audioSampleRate(-1) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodssb/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_ssbDemod = (SSBDemod*) rxChannel; @@ -352,6 +354,8 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban ui->BW->setMaximum(480); ui->lowCut->setMaximum(480); displaySettings(); + makeUIConnections(); + applyBandwidths(m_settings.m_spanLog2, true); // does applySettings(true) } @@ -520,6 +524,7 @@ void SSBDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -575,7 +580,7 @@ void SSBDemodGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -673,3 +678,21 @@ void SSBDemodGUI::tick() m_tickCount++; } + +void SSBDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &SSBDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->audioBinaural, &QToolButton::toggled, this, &SSBDemodGUI::on_audioBinaural_toggled); + QObject::connect(ui->audioFlipChannels, &QToolButton::toggled, this, &SSBDemodGUI::on_audioFlipChannels_toggled); + QObject::connect(ui->dsb, &QToolButton::toggled, this, &SSBDemodGUI::on_dsb_toggled); + QObject::connect(ui->BW, &TickedSlider::valueChanged, this, &SSBDemodGUI::on_BW_valueChanged); + QObject::connect(ui->lowCut, &TickedSlider::valueChanged, this, &SSBDemodGUI::on_lowCut_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &SSBDemodGUI::on_volume_valueChanged); + QObject::connect(ui->agc, &ButtonSwitch::toggled, this, &SSBDemodGUI::on_agc_toggled); + QObject::connect(ui->agcClamping, &ButtonSwitch::toggled, this, &SSBDemodGUI::on_agcClamping_toggled); + QObject::connect(ui->agcPowerThreshold, &QDial::valueChanged, this, &SSBDemodGUI::on_agcPowerThreshold_valueChanged); + QObject::connect(ui->agcThresholdGate, &QDial::valueChanged, this, &SSBDemodGUI::on_agcThresholdGate_valueChanged); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &SSBDemodGUI::on_audioMute_toggled); + QObject::connect(ui->spanLog2, &QSlider::valueChanged, this, &SSBDemodGUI::on_spanLog2_valueChanged); + QObject::connect(ui->flipSidebands, &QPushButton::clicked, this, &SSBDemodGUI::on_flipSidebands_clicked); +} diff --git a/plugins/channelrx/demodssb/ssbdemodgui.h b/plugins/channelrx/demodssb/ssbdemodgui.h index 2867f51c9..b7fca1d20 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.h +++ b/plugins/channelrx/demodssb/ssbdemodgui.h @@ -33,6 +33,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -73,6 +79,7 @@ private: void displayAGCPowerThreshold(int value); void displayAGCThresholdGate(int value); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodssb/ssbdemodgui.ui b/plugins/channelrx/demodssb/ssbdemodgui.ui index 9eaad6728..1bc6325e8 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.ui +++ b/plugins/channelrx/demodssb/ssbdemodgui.ui @@ -1,7 +1,7 @@ SSBDemodGUI - + 0 @@ -11,7 +11,7 @@ - + 0 0 @@ -530,6 +530,7 @@ + Liberation Sans 8 @@ -551,6 +552,7 @@ + Liberation Sans 8 @@ -563,6 +565,7 @@ + Liberation Sans 8 @@ -584,6 +587,7 @@ + Liberation Sans 8 @@ -599,6 +603,7 @@ + Liberation Sans 8 @@ -620,6 +625,7 @@ + Liberation Sans 8 @@ -915,6 +921,12 @@ 284 + + + 0 + 0 + + Channel Spectrum @@ -936,6 +948,12 @@ + + + 0 + 0 + + 200 @@ -958,9 +976,20 @@ - RollupWidget + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
+ + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
+ 1 +
+ + ValueDialZ + QWidget +
gui/valuedialz.h
1
@@ -981,17 +1010,6 @@
gui/glspectrumgui.h
1
- - ValueDialZ - QWidget -
gui/valuedialz.h
- 1 -
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
TickedSlider QSlider diff --git a/plugins/channelrx/demodssb/ssbdemodsettings.cpp b/plugins/channelrx/demodssb/ssbdemodsettings.cpp index e980a5df3..476f88930 100644 --- a/plugins/channelrx/demodssb/ssbdemodsettings.cpp +++ b/plugins/channelrx/demodssb/ssbdemodsettings.cpp @@ -63,6 +63,7 @@ void SSBDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray SSBDemodSettings::serialize() const @@ -100,6 +101,9 @@ QByteArray SSBDemodSettings::serialize() const s.writeBlob(24, m_rollupState->serialize()); } + s.writeS32(25, m_workspaceIndex); + s.writeBlob(26, m_geometryBytes); + return s.final(); } @@ -168,6 +172,9 @@ bool SSBDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(25, &m_workspaceIndex, 0); + d.readBlob(26, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodssb/ssbdemodsettings.h b/plugins/channelrx/demodssb/ssbdemodsettings.h index 9e9de931a..9ecd1a637 100644 --- a/plugins/channelrx/demodssb/ssbdemodsettings.h +++ b/plugins/channelrx/demodssb/ssbdemodsettings.h @@ -47,6 +47,8 @@ struct SSBDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/channelrx/demodvor/vordemodgui.cpp b/plugins/channelrx/demodvor/vordemodgui.cpp index 6cf3bec8a..5ae5d0720 100644 --- a/plugins/channelrx/demodvor/vordemodgui.cpp +++ b/plugins/channelrx/demodvor/vordemodgui.cpp @@ -887,7 +887,7 @@ void VORDemodGUI::channelMarkerChangedByCursor() void VORDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void VORDemodGUI::on_thresh_valueChanged(int value) @@ -1105,7 +1105,7 @@ void VORDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -1131,6 +1131,7 @@ void VORDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -1166,7 +1167,8 @@ VORDemodGUI::VORDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_vorModel(this), m_vors(nullptr) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodvor/readme.md"; ui->map->rootContext()->setContextProperty("vorModel", &m_vorModel); @@ -1176,7 +1178,7 @@ VORDemodGUI::VORDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_muteIcon.addPixmap(QPixmap("://sound_on.png"), QIcon::Normal, QIcon::Off); setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(&m_dlm, &HttpDownloadManager::downloadComplete, this, &VORDemodGUI::downloadFinished); @@ -1272,6 +1274,7 @@ VORDemodGUI::VORDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(ui->vorData->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(vorData_sectionResized(int, int, int))); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -1305,6 +1308,7 @@ void VORDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -1333,7 +1337,7 @@ void VORDemodGUI::displaySettings() header->moveSection(header->visualIndex(i), m_settings.m_columnIndexes[i]); } - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -1425,3 +1429,15 @@ void VORDemodGUI::tick() m_tickCount++; } + +void VORDemodGUI::makeUIConnections() +{ + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &VORDemodGUI::on_audioMute_toggled); + QObject::connect(ui->thresh, &QDial::valueChanged, this, &VORDemodGUI::on_thresh_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &VORDemodGUI::on_volume_valueChanged); + QObject::connect(ui->squelch, &QDial::valueChanged, this, &VORDemodGUI::on_squelch_valueChanged); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &VORDemodGUI::on_audioMute_toggled); + QObject::connect(ui->getOurAirportsVORDB, &QPushButton::clicked, this, &VORDemodGUI::on_getOurAirportsVORDB_clicked); + QObject::connect(ui->getOpenAIPVORDB, &QPushButton::clicked, this, &VORDemodGUI::on_getOpenAIPVORDB_clicked); + QObject::connect(ui->magDecAdjust, &QPushButton::clicked, this, &VORDemodGUI::on_magDecAdjust_clicked); +} diff --git a/plugins/channelrx/demodvor/vordemodgui.h b/plugins/channelrx/demodvor/vordemodgui.h index 4d3238204..950d040d6 100644 --- a/plugins/channelrx/demodvor/vordemodgui.h +++ b/plugins/channelrx/demodvor/vordemodgui.h @@ -211,6 +211,13 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; + void selectVOR(VORGUI *vorGUI, bool selected); public slots: @@ -253,6 +260,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodvor/vordemodgui.ui b/plugins/channelrx/demodvor/vordemodgui.ui index d93557091..ba95565bd 100644 --- a/plugins/channelrx/demodvor/vordemodgui.ui +++ b/plugins/channelrx/demodvor/vordemodgui.ui @@ -1,7 +1,7 @@ VORDemodGUI - + 0 @@ -593,9 +593,9 @@
QtQuickWidgets/QQuickWidget
- RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodvor/vordemodsettings.cpp b/plugins/channelrx/demodvor/vordemodsettings.cpp index 0c181bdc5..68d7c8c8d 100644 --- a/plugins/channelrx/demodvor/vordemodsettings.cpp +++ b/plugins/channelrx/demodvor/vordemodsettings.cpp @@ -44,6 +44,7 @@ void VORDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; m_identThreshold = 2.0; m_refThresholdDB = -45.0; @@ -85,6 +86,9 @@ QByteArray VORDemodSettings::serialize() const s.writeBlob(24, m_rollupState->serialize()); } + s.writeS32(25, m_workspaceIndex); + s.writeBlob(26, m_geometryBytes); + for (int i = 0; i < VORDEMOD_COLUMNS; i++) { s.writeS32(100 + i, m_columnIndexes[i]); } @@ -153,6 +157,9 @@ bool VORDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(25, &m_workspaceIndex, 0); + d.readBlob(26, &m_geometryBytes); + for (int i = 0; i < VORDEMOD_COLUMNS; i++) { d.readS32(100 + i, &m_columnIndexes[i], i); } diff --git a/plugins/channelrx/demodvor/vordemodsettings.h b/plugins/channelrx/demodvor/vordemodsettings.h index 0855dde72..4f121a2ec 100644 --- a/plugins/channelrx/demodvor/vordemodsettings.h +++ b/plugins/channelrx/demodvor/vordemodsettings.h @@ -54,6 +54,8 @@ struct VORDemodSettings Real m_varThresholdDB; //!< Threshold in dB for valid VOR variable signal bool m_magDecAdjust; //!< Adjust for magnetic declination when drawing radials on the map Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_columnIndexes[VORDEMOD_COLUMNS];//!< How the columns are ordered in the table int m_columnSizes[VORDEMOD_COLUMNS]; //!< Size of the coumns in the table diff --git a/plugins/channelrx/demodvorsc/vordemodscgui.cpp b/plugins/channelrx/demodvorsc/vordemodscgui.cpp index ffaf706a4..361152963 100644 --- a/plugins/channelrx/demodvorsc/vordemodscgui.cpp +++ b/plugins/channelrx/demodvorsc/vordemodscgui.cpp @@ -181,7 +181,7 @@ void VORDemodSCGUI::channelMarkerChangedByCursor() void VORDemodSCGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void VORDemodSCGUI::on_deltaFrequency_changed(qint64 value) @@ -223,7 +223,7 @@ void VORDemodSCGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -249,6 +249,7 @@ void VORDemodSCGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -281,11 +282,12 @@ VORDemodSCGUI::VORDemodSCGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas m_squelchOpen(false), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodvorsc/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_vorDemod = reinterpret_cast(rxChannel); @@ -321,6 +323,7 @@ VORDemodSCGUI::VORDemodSCGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -354,6 +357,7 @@ void VORDemodSCGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -372,7 +376,7 @@ void VORDemodSCGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -443,3 +447,12 @@ void VORDemodSCGUI::tick() m_tickCount++; } + +void VORDemodSCGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &VORDemodSCGUI::on_deltaFrequency_changed); + QObject::connect(ui->thresh, &QDial::valueChanged, this, &VORDemodSCGUI::on_thresh_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &VORDemodSCGUI::on_volume_valueChanged); + QObject::connect(ui->squelch, &QDial::valueChanged, this, &VORDemodSCGUI::on_squelch_valueChanged); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &VORDemodSCGUI::on_audioMute_toggled); +} diff --git a/plugins/channelrx/demodvorsc/vordemodscgui.h b/plugins/channelrx/demodvorsc/vordemodscgui.h index 97ac65a13..460cddd2d 100644 --- a/plugins/channelrx/demodvorsc/vordemodscgui.h +++ b/plugins/channelrx/demodvorsc/vordemodscgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -76,6 +82,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodvorsc/vordemodscgui.ui b/plugins/channelrx/demodvorsc/vordemodscgui.ui index 979ba148e..e406cd4c2 100644 --- a/plugins/channelrx/demodvorsc/vordemodscgui.ui +++ b/plugins/channelrx/demodvorsc/vordemodscgui.ui @@ -1,7 +1,7 @@ VORDemodSCGUI - + 0 @@ -614,9 +614,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodvorsc/vordemodscsettings.cpp b/plugins/channelrx/demodvorsc/vordemodscsettings.cpp index 3d4dab2b6..5f1cd2eb5 100644 --- a/plugins/channelrx/demodvorsc/vordemodscsettings.cpp +++ b/plugins/channelrx/demodvorsc/vordemodscsettings.cpp @@ -46,6 +46,7 @@ void VORDemodSCSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; m_identThreshold = 2.0; m_refThresholdDB = -45.0; @@ -80,6 +81,9 @@ QByteArray VORDemodSCSettings::serialize() const s.writeBlob(23, m_rollupState->serialize()); } + s.writeS32(24, m_workspaceIndex); + s.writeBlob(25, m_geometryBytes); + return s.final(); } @@ -140,6 +144,9 @@ bool VORDemodSCSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(24, &m_workspaceIndex, 0); + d.readBlob(25, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodvorsc/vordemodscsettings.h b/plugins/channelrx/demodvorsc/vordemodscsettings.h index 5a9a6f898..a5e1ac962 100644 --- a/plugins/channelrx/demodvorsc/vordemodscsettings.h +++ b/plugins/channelrx/demodvorsc/vordemodscsettings.h @@ -46,6 +46,8 @@ struct VORDemodSCSettings Real m_refThresholdDB; //!< Threshold in dB for valid VOR reference signal Real m_varThresholdDB; //!< Threshold in dB for valid VOR variable signal Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; // Highest frequency is the FM subcarrier at up to ~11kHz // However, old VORs can have 0.005% frequency offset, which is 6kHz diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.cpp b/plugins/channelrx/demodwfm/wfmdemodgui.cpp index 0781bbbd0..723c4b43f 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodgui.cpp @@ -95,7 +95,7 @@ void WFMDemodGUI::channelMarkerChangedByCursor() void WFMDemodGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void WFMDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -144,7 +144,7 @@ void WFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -172,6 +172,7 @@ void WFMDemodGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -204,10 +205,11 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_squelchOpen(false), m_audioSampleRate(-1) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/demodwfm/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); @@ -246,6 +248,7 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(&m_channelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -279,6 +282,7 @@ void WFMDemodGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -294,7 +298,7 @@ void WFMDemodGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -361,3 +365,13 @@ void WFMDemodGUI::tick() m_squelchOpen = squelchOpen; } } + +void WFMDemodGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &WFMDemodGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &ValueDial::changed, this, &WFMDemodGUI::on_rfBW_changed); + QObject::connect(ui->afBW, &QSlider::valueChanged, this, &WFMDemodGUI::on_afBW_valueChanged); + QObject::connect(ui->volume, &QSlider::valueChanged, this, &WFMDemodGUI::on_volume_valueChanged); + QObject::connect(ui->squelch, &QSlider::valueChanged, this, &WFMDemodGUI::on_squelch_valueChanged); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &WFMDemodGUI::on_audioMute_toggled); +} diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.h b/plugins/channelrx/demodwfm/wfmdemodgui.h index e8205df57..dfd2c3502 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.h +++ b/plugins/channelrx/demodwfm/wfmdemodgui.h @@ -28,6 +28,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -57,6 +63,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.ui b/plugins/channelrx/demodwfm/wfmdemodgui.ui index 05e404bed..d6ef37d7e 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.ui +++ b/plugins/channelrx/demodwfm/wfmdemodgui.ui @@ -1,7 +1,7 @@ WFMDemodGUI - + 0 @@ -436,9 +436,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/demodwfm/wfmdemodsettings.cpp b/plugins/channelrx/demodwfm/wfmdemodsettings.cpp index 077f4fe5a..779096e82 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsettings.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodsettings.cpp @@ -52,6 +52,7 @@ void WFMDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray WFMDemodSettings::serialize() const @@ -81,6 +82,9 @@ QByteArray WFMDemodSettings::serialize() const s.writeBlob(18, m_rollupState->serialize()); } + s.writeS32(19, m_workspaceIndex); + s.writeBlob(20, m_geometryBytes); + return s.final(); } @@ -143,6 +147,9 @@ bool WFMDemodSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(19, &m_workspaceIndex, 0); + d.readBlob(20, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/demodwfm/wfmdemodsettings.h b/plugins/channelrx/demodwfm/wfmdemodsettings.h index 3c7651f66..4c98cbb4e 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsettings.h +++ b/plugins/channelrx/demodwfm/wfmdemodsettings.h @@ -40,6 +40,8 @@ struct WFMDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channelrx/filesink/filesinkgui.cpp b/plugins/channelrx/filesink/filesinkgui.cpp index ab6122984..0c4b6890b 100644 --- a/plugins/channelrx/filesink/filesinkgui.cpp +++ b/plugins/channelrx/filesink/filesinkgui.cpp @@ -184,10 +184,11 @@ FileSinkGUI::FileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_fixedPosition(false), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/filesink/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_fileSink = (FileSink*) channelrx; @@ -222,6 +223,7 @@ FileSinkGUI::FileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(&(m_deviceUISet->m_deviceAPI->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -257,6 +259,7 @@ void FileSinkGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -280,7 +283,7 @@ void FileSinkGUI::displaySettings() displayStreamIndex(); setPosFromFrequency(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -330,7 +333,7 @@ void FileSinkGUI::channelMarkerChangedByCursor() void FileSinkGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void FileSinkGUI::handleSourceMessages() @@ -351,7 +354,7 @@ void FileSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -378,6 +381,7 @@ void FileSinkGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -591,3 +595,17 @@ QString FileSinkGUI::displayScaled(uint64_t value, int precision) } } +void FileSinkGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &FileSinkGUI::on_deltaFrequency_changed); + QObject::connect(ui->decimationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &FileSinkGUI::on_decimationFactor_currentIndexChanged); + QObject::connect(ui->fixedPosition, &QCheckBox::toggled, this, &FileSinkGUI::on_fixedPosition_toggled); + QObject::connect(ui->position, &QSlider::valueChanged, this, &FileSinkGUI::on_position_valueChanged); + QObject::connect(ui->spectrumSquelch, &ButtonSwitch::toggled, this, &FileSinkGUI::on_spectrumSquelch_toggled); + QObject::connect(ui->squelchLevel, &QDial::valueChanged, this, &FileSinkGUI::on_squelchLevel_valueChanged); + QObject::connect(ui->preRecordTime, &QDial::valueChanged, this, &FileSinkGUI::on_preRecordTime_valueChanged); + QObject::connect(ui->postSquelchTime, &QDial::valueChanged, this, &FileSinkGUI::on_postSquelchTime_valueChanged); + QObject::connect(ui->squelchedRecording, &ButtonSwitch::toggled, this, &FileSinkGUI::on_squelchedRecording_toggled); + QObject::connect(ui->record, &ButtonSwitch::toggled, this, &FileSinkGUI::on_record_toggled); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &FileSinkGUI::on_showFileDialog_clicked); +} diff --git a/plugins/channelrx/filesink/filesinkgui.h b/plugins/channelrx/filesink/filesinkgui.h index 2c86a0c50..bddedd7bb 100644 --- a/plugins/channelrx/filesink/filesinkgui.h +++ b/plugins/channelrx/filesink/filesinkgui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -88,6 +94,7 @@ private: void setPosFromFrequency(); QString displayScaled(uint64_t value, int precision); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/filesink/filesinkgui.ui b/plugins/channelrx/filesink/filesinkgui.ui index 67388a521..b109a54f9 100644 --- a/plugins/channelrx/filesink/filesinkgui.ui +++ b/plugins/channelrx/filesink/filesinkgui.ui @@ -1,7 +1,7 @@ FileSinkGUI - + 0 @@ -548,9 +548,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/filesink/filesinksettings.cpp b/plugins/channelrx/filesink/filesinksettings.cpp index 74eb15bdf..4730701b4 100644 --- a/plugins/channelrx/filesink/filesinksettings.cpp +++ b/plugins/channelrx/filesink/filesinksettings.cpp @@ -49,6 +49,7 @@ void FileSinkSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray FileSinkSettings::serialize() const @@ -85,6 +86,9 @@ QByteArray FileSinkSettings::serialize() const s.writeBlob(19, m_rollupState->serialize()); } + s.writeS32(20, m_workspaceIndex); + s.writeBlob(21, m_geometryBytes); + return s.final(); } @@ -153,6 +157,9 @@ bool FileSinkSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(20, &m_workspaceIndex, 0); + d.readBlob(21, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/filesink/filesinksettings.h b/plugins/channelrx/filesink/filesinksettings.h index aa76798f2..08bc92062 100644 --- a/plugins/channelrx/filesink/filesinksettings.h +++ b/plugins/channelrx/filesink/filesinksettings.h @@ -41,6 +41,8 @@ struct FileSinkSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_spectrumGUI; Serializable *m_channelMarker; diff --git a/plugins/channelrx/freqtracker/freqtrackergui.cpp b/plugins/channelrx/freqtracker/freqtrackergui.cpp index 8afe85d48..1b91b8388 100644 --- a/plugins/channelrx/freqtracker/freqtrackergui.cpp +++ b/plugins/channelrx/freqtracker/freqtrackergui.cpp @@ -140,7 +140,7 @@ void FreqTrackerGUI::channelMarkerChangedByCursor() void FreqTrackerGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void FreqTrackerGUI::on_deltaFrequency_changed(qint64 value) @@ -251,7 +251,7 @@ void FreqTrackerGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -278,6 +278,7 @@ void FreqTrackerGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -312,10 +313,11 @@ FreqTrackerGUI::FreqTrackerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B m_squelchOpen(false), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/freqtracker/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_freqTracker = reinterpret_cast(rxChannel); @@ -363,6 +365,7 @@ FreqTrackerGUI::FreqTrackerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -403,6 +406,7 @@ void FreqTrackerGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -433,7 +437,7 @@ void FreqTrackerGUI::displaySettings() displaySpectrumBandwidth(m_settings.m_spanLog2); displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -518,3 +522,16 @@ void FreqTrackerGUI::tick() m_tickCount++; } +void FreqTrackerGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &FreqTrackerGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &FreqTrackerGUI::on_rfBW_valueChanged); + QObject::connect(ui->tracking, &QToolButton::toggled, this, &FreqTrackerGUI::on_tracking_toggled); + QObject::connect(ui->alphaEMA, &QDial::valueChanged, this, &FreqTrackerGUI::on_alphaEMA_valueChanged); + QObject::connect(ui->trackerType, QOverload::of(&QComboBox::currentIndexChanged), this, &FreqTrackerGUI::on_trackerType_currentIndexChanged); + QObject::connect(ui->pllPskOrder, QOverload::of(&QComboBox::currentIndexChanged), this, &FreqTrackerGUI::on_pllPskOrder_currentIndexChanged); + QObject::connect(ui->rrc, &ButtonSwitch::toggled, this, &FreqTrackerGUI::on_rrc_toggled); + QObject::connect(ui->rrcRolloff, &QDial::valueChanged, this, &FreqTrackerGUI::on_rrcRolloff_valueChanged); + QObject::connect(ui->squelch, &QSlider::valueChanged, this, &FreqTrackerGUI::on_squelch_valueChanged); + QObject::connect(ui->squelchGate, &QDial::valueChanged, this, &FreqTrackerGUI::on_squelchGate_valueChanged); +} diff --git a/plugins/channelrx/freqtracker/freqtrackergui.h b/plugins/channelrx/freqtracker/freqtrackergui.h index 5af7178ee..310ddb19f 100644 --- a/plugins/channelrx/freqtracker/freqtrackergui.h +++ b/plugins/channelrx/freqtracker/freqtrackergui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -81,6 +87,7 @@ private: void displaySpectrumBandwidth(int spanLog2); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/freqtracker/freqtrackergui.ui b/plugins/channelrx/freqtracker/freqtrackergui.ui index 93b964f15..72ba59785 100644 --- a/plugins/channelrx/freqtracker/freqtrackergui.ui +++ b/plugins/channelrx/freqtracker/freqtrackergui.ui @@ -1,7 +1,7 @@ FreqTrackerGUI - + 0 @@ -791,9 +791,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/freqtracker/freqtrackersettings.cpp b/plugins/channelrx/freqtracker/freqtrackersettings.cpp index 58c0338b8..9ac8e1e05 100644 --- a/plugins/channelrx/freqtracker/freqtrackersettings.cpp +++ b/plugins/channelrx/freqtracker/freqtrackersettings.cpp @@ -52,6 +52,7 @@ void FreqTrackerSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray FreqTrackerSettings::serialize() const @@ -91,6 +92,9 @@ QByteArray FreqTrackerSettings::serialize() const s.writeBlob(23, m_rollupState->serialize()); } + s.writeS32(24, m_workspaceIndex); + s.writeBlob(25, m_geometryBytes); + return s.final(); } @@ -170,6 +174,9 @@ bool FreqTrackerSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(24, &m_workspaceIndex, 0); + d.readBlob(25, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/freqtracker/freqtrackersettings.h b/plugins/channelrx/freqtracker/freqtrackersettings.h index b2d4e6f95..0e5734f66 100644 --- a/plugins/channelrx/freqtracker/freqtrackersettings.h +++ b/plugins/channelrx/freqtracker/freqtrackersettings.h @@ -57,6 +57,8 @@ struct FreqTrackerSettings uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; FreqTrackerSettings(); void resetToDefaults(); diff --git a/plugins/channelrx/localsink/localsinkgui.cpp b/plugins/channelrx/localsink/localsinkgui.cpp index 7af286f66..905dbab15 100644 --- a/plugins/channelrx/localsink/localsinkgui.cpp +++ b/plugins/channelrx/localsink/localsinkgui.cpp @@ -101,10 +101,11 @@ LocalSinkGUI::LocalSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_basebandSampleRate(0), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/localsink/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_localSink = (LocalSink*) channelrx; @@ -127,6 +128,7 @@ LocalSinkGUI::LocalSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb updateLocalDevices(); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -163,6 +165,7 @@ void LocalSinkGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); int index = getLocalDeviceIndexInCombo(m_settings.m_localDeviceIndex); @@ -176,7 +179,7 @@ void LocalSinkGUI::displaySettings() applyDecimation(); displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -254,7 +257,7 @@ void LocalSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -281,6 +284,7 @@ void LocalSinkGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -369,3 +373,12 @@ void LocalSinkGUI::tick() m_tickCount = 0; } } + +void LocalSinkGUI::makeUIConnections() +{ + QObject::connect(ui->decimationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &LocalSinkGUI::on_decimationFactor_currentIndexChanged); + QObject::connect(ui->position, &QSlider::valueChanged, this, &LocalSinkGUI::on_position_valueChanged); + QObject::connect(ui->localDevice, QOverload::of(&QComboBox::currentIndexChanged), this, &LocalSinkGUI::on_localDevice_currentIndexChanged); + QObject::connect(ui->localDevicesRefresh, &QPushButton::clicked, this, &LocalSinkGUI::on_localDevicesRefresh_clicked); + QObject::connect(ui->localDevicePlay, &ButtonSwitch::toggled, this, &LocalSinkGUI::on_localDevicePlay_toggled); +} diff --git a/plugins/channelrx/localsink/localsinkgui.h b/plugins/channelrx/localsink/localsinkgui.h index 07f6c8c09..285894aca 100644 --- a/plugins/channelrx/localsink/localsinkgui.h +++ b/plugins/channelrx/localsink/localsinkgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; private: Ui::LocalSinkGUI* ui; @@ -76,6 +82,7 @@ private: void updateLocalDevices(); int getLocalDeviceIndexInCombo(int localDeviceIndex); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/localsink/localsinkgui.ui b/plugins/channelrx/localsink/localsinkgui.ui index 25ed63a74..dc64076d2 100644 --- a/plugins/channelrx/localsink/localsinkgui.ui +++ b/plugins/channelrx/localsink/localsinkgui.ui @@ -1,7 +1,7 @@ LocalSinkGUI - + 0 @@ -330,9 +330,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/localsink/localsinksettings.cpp b/plugins/channelrx/localsink/localsinksettings.cpp index dfa674910..d04577cfb 100644 --- a/plugins/channelrx/localsink/localsinksettings.cpp +++ b/plugins/channelrx/localsink/localsinksettings.cpp @@ -44,6 +44,7 @@ void LocalSinkSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray LocalSinkSettings::serialize() const @@ -70,6 +71,9 @@ QByteArray LocalSinkSettings::serialize() const s.writeBlob(15, m_rollupState->serialize()); } + s.writeS32(16, m_workspaceIndex); + s.writeBlob(17, m_geometryBytes); + return s.final(); } @@ -124,6 +128,9 @@ bool LocalSinkSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(16, &m_workspaceIndex, 0); + d.readBlob(17, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/localsink/localsinksettings.h b/plugins/channelrx/localsink/localsinksettings.h index 02b9cf680..0dee85451 100644 --- a/plugins/channelrx/localsink/localsinksettings.h +++ b/plugins/channelrx/localsink/localsinksettings.h @@ -37,6 +37,8 @@ struct LocalSinkSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channelrx/noisefigure/noisefiguregui.cpp b/plugins/channelrx/noisefigure/noisefiguregui.cpp index 81235801a..f70b07ceb 100644 --- a/plugins/channelrx/noisefigure/noisefiguregui.cpp +++ b/plugins/channelrx/noisefigure/noisefiguregui.cpp @@ -316,7 +316,7 @@ void NoiseFigureGUI::channelMarkerChangedByCursor() void NoiseFigureGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void NoiseFigureGUI::on_deltaFrequency_changed(qint64 value) @@ -532,7 +532,7 @@ void NoiseFigureGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -558,6 +558,7 @@ void NoiseFigureGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -592,11 +593,12 @@ NoiseFigureGUI::NoiseFigureGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B m_runningTest(false), m_chart(nullptr) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/noisefigure/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_noiseFigure = reinterpret_cast(rxChannel); @@ -656,6 +658,7 @@ NoiseFigureGUI::NoiseFigureGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B ui->results->setItemDelegateForColumn(RESULTS_COL_FLOOR, new DecimalDelegate(1)); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -706,6 +709,7 @@ void NoiseFigureGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -742,7 +746,7 @@ void NoiseFigureGUI::displaySettings() header->moveSection(header->visualIndex(i), m_settings.m_resultsColumnIndexes[i]); } - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -784,3 +788,25 @@ void NoiseFigureGUI::tick() m_tickCount++; } + +void NoiseFigureGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &NoiseFigureGUI::on_deltaFrequency_changed); + QObject::connect(ui->fftCount, &QSlider::valueChanged, this, &NoiseFigureGUI::on_fftCount_valueChanged); + QObject::connect(ui->setting, &QComboBox::currentTextChanged, this, &NoiseFigureGUI::on_setting_currentTextChanged); + QObject::connect(ui->frequencySpec, QOverload::of(&QComboBox::currentIndexChanged), this, &NoiseFigureGUI::on_frequencySpec_currentIndexChanged); + QObject::connect(ui->start, QOverload::of(&QDoubleSpinBox::valueChanged), this, &NoiseFigureGUI::on_start_valueChanged); + QObject::connect(ui->stop, QOverload::of(&QDoubleSpinBox::valueChanged), this, &NoiseFigureGUI::on_stop_valueChanged); + QObject::connect(ui->steps, QOverload::of(&QSpinBox::valueChanged), this, &NoiseFigureGUI::on_steps_valueChanged); + QObject::connect(ui->step, QOverload::of(&QDoubleSpinBox::valueChanged), this, &NoiseFigureGUI::on_step_valueChanged); + QObject::connect(ui->list, &QLineEdit::editingFinished, this, &NoiseFigureGUI::on_list_editingFinished); + QObject::connect(ui->fftSize, QOverload::of(&QComboBox::currentIndexChanged), this, &NoiseFigureGUI::on_fftSize_currentIndexChanged); + QObject::connect(ui->startStop, &ButtonSwitch::clicked, this, &NoiseFigureGUI::on_startStop_clicked); + QObject::connect(ui->saveResults, &QToolButton::clicked, this, &NoiseFigureGUI::on_saveResults_clicked); + QObject::connect(ui->clearResults, &QToolButton::clicked, this, &NoiseFigureGUI::on_clearResults_clicked); + QObject::connect(ui->enr, &QToolButton::clicked, this, &NoiseFigureGUI::on_enr_clicked); + QObject::connect(ui->control, &QToolButton::clicked, this, &NoiseFigureGUI::on_control_clicked); + QObject::connect(ui->chartSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &NoiseFigureGUI::on_chartSelect_currentIndexChanged); + QObject::connect(ui->openReference, &QToolButton::clicked, this, &NoiseFigureGUI::on_openReference_clicked); + QObject::connect(ui->clearReference, &QToolButton::clicked, this, &NoiseFigureGUI::on_clearReference_clicked); +} diff --git a/plugins/channelrx/noisefigure/noisefiguregui.h b/plugins/channelrx/noisefigure/noisefiguregui.h index 9d2e9ad8c..29b7ba556 100644 --- a/plugins/channelrx/noisefigure/noisefiguregui.h +++ b/plugins/channelrx/noisefigure/noisefiguregui.h @@ -55,6 +55,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -92,6 +98,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/noisefigure/noisefiguregui.ui b/plugins/channelrx/noisefigure/noisefiguregui.ui index 7125e60f0..eee1aab46 100644 --- a/plugins/channelrx/noisefigure/noisefiguregui.ui +++ b/plugins/channelrx/noisefigure/noisefiguregui.ui @@ -1,7 +1,7 @@ NoiseFigureGUI - + 0 @@ -890,9 +890,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/noisefigure/noisefiguresettings.cpp b/plugins/channelrx/noisefigure/noisefiguresettings.cpp index 53f2b36a1..fe12e037b 100644 --- a/plugins/channelrx/noisefigure/noisefiguresettings.cpp +++ b/plugins/channelrx/noisefigure/noisefiguresettings.cpp @@ -65,6 +65,7 @@ void NoiseFigureSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; for (int i = 0; i < NOISEFIGURE_COLUMNS; i++) { @@ -117,6 +118,9 @@ QByteArray NoiseFigureSettings::serialize() const s.writeBlob(28, m_rollupState->serialize()); } + s.writeS32(29, m_workspaceIndex); + s.writeBlob(30, m_geometryBytes); + for (int i = 0; i < NOISEFIGURE_COLUMNS; i++) { s.writeS32(100 + i, m_resultsColumnIndexes[i]); } @@ -197,6 +201,9 @@ bool NoiseFigureSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(29, &m_workspaceIndex, 0); + d.readBlob(30, &m_geometryBytes); + for (int i = 0; i < NOISEFIGURE_COLUMNS; i++) { d.readS32(100 + i, &m_resultsColumnIndexes[i], i); } diff --git a/plugins/channelrx/noisefigure/noisefiguresettings.h b/plugins/channelrx/noisefigure/noisefiguresettings.h index 8ad3dbdd4..f5f121227 100644 --- a/plugins/channelrx/noisefigure/noisefiguresettings.h +++ b/plugins/channelrx/noisefigure/noisefiguresettings.h @@ -86,6 +86,8 @@ struct NoiseFigureSettings uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_resultsColumnIndexes[NOISEFIGURE_COLUMNS];//!< How the columns are ordered in the table int m_resultsColumnSizes[NOISEFIGURE_COLUMNS]; //!< Size of the columns in the table diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.cpp b/plugins/channelrx/radioastronomy/radioastronomygui.cpp index 13de963f1..1fd786728 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomygui.cpp @@ -1105,7 +1105,7 @@ void RadioAstronomyGUI::channelMarkerChangedByCursor() void RadioAstronomyGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } // Calculate Tsys0 - i.e. receiver noise temperature when there's no source signal, just unwanted noise @@ -1942,7 +1942,7 @@ void RadioAstronomyGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -1968,6 +1968,7 @@ void RadioAstronomyGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -2052,10 +2053,11 @@ RadioAstronomyGUI::RadioAstronomyGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI m_downloadingLAB(false) { qDebug("RadioAstronomyGUI::RadioAstronomyGUI"); - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_radioAstronomy = reinterpret_cast(rxChannel); @@ -2217,6 +2219,7 @@ RadioAstronomyGUI::RadioAstronomyGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI ui->startStop->setStyleSheet("QToolButton { background-color : blue; }"); displaySettings(); + makeUIConnections(); applySettings(true); create2DImage(); @@ -2354,6 +2357,7 @@ void RadioAstronomyGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); @@ -2550,9 +2554,9 @@ void RadioAstronomyGUI::displaySettings() header->moveSection(header->visualIndex(i), m_settings.m_powerTableColumnIndexes[i]); } - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::displayStreamIndex() @@ -2796,7 +2800,7 @@ void RadioAstronomyGUI::updatePowerChartWidgetsVisibility() ui->powerMarkerTableWidgets->setVisible(powerChart && (m_settings.m_powerPeaks || m_settings.m_powerMarkers)); ui->power2DScaleWidgets->setVisible(!powerChart); ui->power2DColourScaleWidgets->setVisible(!powerChart); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } int RadioAstronomyGUI::powerYUnitsToIndex(RadioAstronomySettings::PowerYUnits units) @@ -2915,7 +2919,7 @@ void RadioAstronomyGUI::updateSpectrumChartWidgetsVisibility() ui->spectrumPeak->setVisible(fft); ui->saveSpectrumChartImages->setVisible(fft); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } // Calulate mean, RMS and standard deviation @@ -5130,7 +5134,7 @@ void RadioAstronomyGUI::on_powerShowPeak_toggled(bool checked) m_powerChart->legend()->markers(m_powerPeakSeries)[0]->setVisible(false); } } - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::on_spectrumPeak_toggled(bool checked) @@ -5148,7 +5152,7 @@ void RadioAstronomyGUI::on_spectrumPeak_toggled(bool checked) clearLoSMarker("Max"); } } - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::on_powerShowMarker_toggled(bool checked) @@ -5164,7 +5168,7 @@ void RadioAstronomyGUI::on_powerShowMarker_toggled(bool checked) } } updatePowerSelect(); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::on_powerShowAvg_toggled(bool checked) @@ -5172,7 +5176,7 @@ void RadioAstronomyGUI::on_powerShowAvg_toggled(bool checked) m_settings.m_powerAvg = checked; applySettings(); ui->powerChartAvgWidgets->setVisible(checked); - arrangeRollups(); + getRollupContents()->arrangeRollups(); if (checked) { calcAverages(); } @@ -5291,7 +5295,7 @@ void RadioAstronomyGUI::on_spectrumMarker_toggled(bool checked) clearLoSMarker("M2"); } updateSpectrumSelect(); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::on_spectrumTemp_toggled(bool checked) @@ -5301,7 +5305,7 @@ void RadioAstronomyGUI::on_spectrumTemp_toggled(bool checked) ui->spectrumGaussianWidgets->setVisible(checked); m_fftGaussianSeries->setVisible(checked); updateSpectrumSelect(); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::on_spectrumShowLegend_toggled(bool checked) @@ -5326,7 +5330,7 @@ void RadioAstronomyGUI::on_spectrumShowRefLine_toggled(bool checked) m_fftDopplerAxis->setVisible(m_settings.m_spectrumRefLine); } updateDistanceColumns(); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::on_spectrumShowLAB_toggled(bool checked) @@ -5650,7 +5654,7 @@ void RadioAstronomyGUI::on_powerShowGaussian_clicked(bool checked) ui->powerGaussianWidgets->setVisible(checked); m_powerGaussianSeries->setVisible(checked); updatePowerSelect(); - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::plotPowerGaussian() @@ -5896,7 +5900,7 @@ void RadioAstronomyGUI::displayRunModeSettings() ui->sweepStatus->setVisible(sweep); ui->runLayout->activate(); // Needed otherwise height of rollup doesn't seem to be reduced ui->statusLayout->activate(); // going from sweep to single/continuous - arrangeRollups(); + getRollupContents()->arrangeRollups(); } void RadioAstronomyGUI::on_runMode_currentIndexChanged(int index) @@ -5973,7 +5977,7 @@ void RadioAstronomyGUI::on_sweepStartAtTime_currentIndexChanged(int index) { m_settings.m_sweepStartAtTime = ui->sweepStartAtTime->currentIndex() == 1; ui->sweepStartDateTime->setVisible(index == 1); - arrangeRollups(); + getRollupContents()->arrangeRollups(); applySettings(); } @@ -6033,3 +6037,111 @@ void RadioAstronomyGUI::resizeEvent(QResizeEvent* size) calcSpectrumChartTickCount(m_calXAxis, width); ChannelGUI::resizeEvent(size); } + +void RadioAstronomyGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &RadioAstronomyGUI::on_deltaFrequency_changed); + QObject::connect(ui->sampleRate, &ValueDialZ::changed, this, &RadioAstronomyGUI::on_sampleRate_changed); + QObject::connect(ui->rfBW, &ValueDialZ::changed, this, &RadioAstronomyGUI::on_rfBW_changed); + QObject::connect(ui->integration, &ValueDialZ::changed, this, &RadioAstronomyGUI::on_integration_changed); + QObject::connect(ui->fftSize, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_fftSize_currentIndexChanged); + QObject::connect(ui->fftWindow, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_fftWindow_currentIndexChanged); + QObject::connect(ui->filterFreqs, &QLineEdit::editingFinished, this, &RadioAstronomyGUI::on_filterFreqs_editingFinished); + QObject::connect(ui->starTracker, &QComboBox::currentTextChanged, this, &RadioAstronomyGUI::on_starTracker_currentTextChanged); + QObject::connect(ui->rotator, &QComboBox::currentTextChanged, this, &RadioAstronomyGUI::on_rotator_currentTextChanged); + QObject::connect(ui->showSensors, &QToolButton::clicked, this, &RadioAstronomyGUI::on_showSensors_clicked); + QObject::connect(ui->tempRXSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_tempRXSelect_currentIndexChanged); + QObject::connect(ui->tempRX, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tempRX_valueChanged); + QObject::connect(ui->tempCMB, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tempCMB_valueChanged); + QObject::connect(ui->tempGal, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tempGal_valueChanged); + QObject::connect(ui->tempSP, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tempSP_valueChanged); + QObject::connect(ui->tempAtm, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tempAtm_valueChanged); + QObject::connect(ui->tempAir, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tempAir_valueChanged); + QObject::connect(ui->zenithOpacity, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_zenithOpacity_valueChanged); + QObject::connect(ui->elevation, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_elevation_valueChanged); + QObject::connect(ui->tempAtmLink, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_tempAtmLink_toggled); + QObject::connect(ui->tempAirLink, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_tempAirLink_toggled); + QObject::connect(ui->tempGalLink, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_tempGalLink_toggled); + QObject::connect(ui->elevationLink, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_elevationLink_toggled); + QObject::connect(ui->gainVariation, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_gainVariation_valueChanged); + QObject::connect(ui->omegaAUnits, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_omegaAUnits_currentIndexChanged); + QObject::connect(ui->sourceType, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_sourceType_currentIndexChanged); + QObject::connect(ui->omegaS, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_omegaS_valueChanged); + QObject::connect(ui->omegaSUnits, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_omegaSUnits_currentIndexChanged); + QObject::connect(ui->spectrumChartSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_spectrumChartSelect_currentIndexChanged); + QObject::connect(ui->showCalSettings, &QToolButton::clicked, this, &RadioAstronomyGUI::on_showCalSettings_clicked); + QObject::connect(ui->startCalHot, &QToolButton::clicked, this, &RadioAstronomyGUI::on_startCalHot_clicked); + QObject::connect(ui->startCalCold, &QToolButton::clicked, this, &RadioAstronomyGUI::on_startCalCold_clicked); + QObject::connect(ui->recalibrate, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_recalibrate_toggled); + QObject::connect(ui->spectrumShowLegend, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumShowLegend_toggled); + QObject::connect(ui->spectrumShowRefLine, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumShowRefLine_toggled); + QObject::connect(ui->spectrumTemp, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumTemp_toggled); + QObject::connect(ui->spectrumMarker, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumMarker_toggled); + QObject::connect(ui->spectrumPeak, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumPeak_toggled); + QObject::connect(ui->spectrumReverseXAxis, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumReverseXAxis_toggled); + QObject::connect(ui->savePowerData, &QToolButton::clicked, this, &RadioAstronomyGUI::on_savePowerData_clicked); + QObject::connect(ui->savePowerChartImage, &QToolButton::clicked, this, &RadioAstronomyGUI::on_savePowerChartImage_clicked); + QObject::connect(ui->saveSpectrumData, &QToolButton::clicked, this, &RadioAstronomyGUI::on_saveSpectrumData_clicked); + QObject::connect(ui->loadSpectrumData, &QToolButton::clicked, this, &RadioAstronomyGUI::on_loadSpectrumData_clicked); + QObject::connect(ui->saveSpectrumChartImage, &QToolButton::clicked, this, &RadioAstronomyGUI::on_saveSpectrumChartImage_clicked); + QObject::connect(ui->saveSpectrumChartImages, &QToolButton::clicked, this, &RadioAstronomyGUI::on_saveSpectrumChartImages_clicked); + QObject::connect(ui->clearData, &QToolButton::clicked, this, &RadioAstronomyGUI::on_clearData_clicked); + QObject::connect(ui->clearCal, &QToolButton::clicked, this, &RadioAstronomyGUI::on_clearCal_clicked); + QObject::connect(ui->spectrumAutoscale, &QToolButton::toggled, this, &RadioAstronomyGUI::on_spectrumAutoscale_toggled); + QObject::connect(ui->spectrumAutoscaleX, &QToolButton::clicked, this, &RadioAstronomyGUI::on_spectrumAutoscaleX_clicked); + QObject::connect(ui->spectrumAutoscaleY, &QToolButton::clicked, this, &RadioAstronomyGUI::on_spectrumAutoscaleY_clicked); + QObject::connect(ui->spectrumReference, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumReference_valueChanged); + QObject::connect(ui->spectrumRange, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumRange_valueChanged); + QObject::connect(ui->spectrumCenterFreq, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumCenterFreq_valueChanged); + QObject::connect(ui->spectrumSpan, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumSpan_valueChanged); + QObject::connect(ui->spectrumYUnits, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_spectrumYUnits_currentIndexChanged); + QObject::connect(ui->spectrumBaseline, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_spectrumBaseline_currentIndexChanged); + QObject::connect(ui->spectrumIndex, &QSlider::valueChanged, this, &RadioAstronomyGUI::on_spectrumIndex_valueChanged); + QObject::connect(ui->spectrumLine, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_spectrumLine_currentIndexChanged); + QObject::connect(ui->spectrumLineFrequency, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumLineFrequency_valueChanged); + QObject::connect(ui->refFrame, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_refFrame_currentIndexChanged); + QObject::connect(ui->sunDistanceToGC, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_sunDistanceToGC_valueChanged); + QObject::connect(ui->sunOrbitalVelocity, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_sunOrbitalVelocity_valueChanged); + QObject::connect(ui->spectrumGaussianFreq, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumGaussianFreq_valueChanged); + QObject::connect(ui->spectrumGaussianAmp, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumGaussianAmp_valueChanged); + QObject::connect(ui->spectrumGaussianFloor, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumGaussianFloor_valueChanged); + QObject::connect(ui->spectrumGaussianFWHM, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumGaussianFWHM_valueChanged); + QObject::connect(ui->spectrumGaussianTurb, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumGaussianTurb_valueChanged); + QObject::connect(ui->spectrumTemperature, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_spectrumTemperature_valueChanged); + QObject::connect(ui->spectrumShowLAB, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumShowLAB_toggled); + QObject::connect(ui->spectrumShowDistance, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_spectrumShowDistance_toggled); + QObject::connect(ui->tCalHotSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_tCalHotSelect_currentIndexChanged); + QObject::connect(ui->tCalHot, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tCalHot_valueChanged); + QObject::connect(ui->tCalColdSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_tCalColdSelect_currentIndexChanged); + QObject::connect(ui->tCalCold, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_tCalCold_valueChanged); + QObject::connect(ui->powerChartSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_powerChartSelect_currentIndexChanged); + QObject::connect(ui->powerYUnits, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_powerYUnits_currentIndexChanged); + QObject::connect(ui->powerShowMarker, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_powerShowMarker_toggled); + QObject::connect(ui->powerShowAirTemp, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_powerShowAirTemp_toggled); + QObject::connect(ui->powerShowPeak, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_powerShowPeak_toggled); + QObject::connect(ui->powerShowAvg, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_powerShowAvg_toggled); + QObject::connect(ui->powerShowLegend, &ButtonSwitch::toggled, this, &RadioAstronomyGUI::on_powerShowLegend_toggled); + QObject::connect(ui->powerAutoscale, &QToolButton::toggled, this, &RadioAstronomyGUI::on_powerAutoscale_toggled); + QObject::connect(ui->powerAutoscaleY, &QToolButton::clicked, this, &RadioAstronomyGUI::on_powerAutoscaleY_clicked); + QObject::connect(ui->powerAutoscaleX, &QToolButton::clicked, this, &RadioAstronomyGUI::on_powerAutoscaleX_clicked); + QObject::connect(ui->powerReference, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerReference_valueChanged); + QObject::connect(ui->powerRange, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerRange_valueChanged); + QObject::connect(ui->powerStartTime, &WrappingDateTimeEdit::dateTimeChanged, this, &RadioAstronomyGUI::on_powerStartTime_dateTimeChanged); + QObject::connect(ui->powerEndTime, &WrappingDateTimeEdit::dateTimeChanged, this, &RadioAstronomyGUI::on_powerEndTime_dateTimeChanged); + QObject::connect(ui->powerShowGaussian, &ButtonSwitch::clicked, this, &RadioAstronomyGUI::on_powerShowGaussian_clicked); + QObject::connect(ui->powerGaussianCenter, &WrappingDateTimeEdit::dateTimeChanged, this, &RadioAstronomyGUI::on_powerGaussianCenter_dateTimeChanged); + QObject::connect(ui->powerGaussianAmp, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerGaussianAmp_valueChanged); + QObject::connect(ui->powerGaussianFloor, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerGaussianFloor_valueChanged); + QObject::connect(ui->powerGaussianFWHM, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerGaussianFWHM_valueChanged); + QObject::connect(ui->powerGaussianHPBW, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerGaussianHPBW_valueChanged); + QObject::connect(ui->runMode, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_runMode_currentIndexChanged); + QObject::connect(ui->sweepType, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_sweepType_currentIndexChanged); + QObject::connect(ui->startStop, &ButtonSwitch::clicked, this, &RadioAstronomyGUI::on_startStop_clicked); + QObject::connect(ui->sweepStartAtTime, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_sweepStartAtTime_currentIndexChanged); + QObject::connect(ui->sweepStartDateTime, &QDateTimeEdit::dateTimeChanged, this, &RadioAstronomyGUI::on_sweepStartDateTime_dateTimeChanged); + QObject::connect(ui->powerColourAutoscale, &QToolButton::toggled, this, &RadioAstronomyGUI::on_powerColourAutoscale_toggled); + QObject::connect(ui->powerColourScaleMin, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerColourScaleMin_valueChanged); + QObject::connect(ui->powerColourScaleMax, QOverload::of(&QDoubleSpinBox::valueChanged), this, &RadioAstronomyGUI::on_powerColourScaleMax_valueChanged); + QObject::connect(ui->powerColourPalette, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioAstronomyGUI::on_powerColourPalette_currentIndexChanged); + QObject::connect(ui->powerTable, &QTableWidget::cellDoubleClicked, this, &RadioAstronomyGUI::on_powerTable_cellDoubleClicked); +} diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.h b/plugins/channelrx/radioastronomy/radioastronomygui.h index 8007378b2..0c7e664d3 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.h +++ b/plugins/channelrx/radioastronomy/radioastronomygui.h @@ -198,6 +198,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -324,6 +330,8 @@ private: void updateAvailableFeatures(); void updateRotatorList(const QList& rotators); bool handleMessage(const Message& message); + void makeUIConnections(); + double degreesToSteradian(double deg) const; double hpbwToSteradians(double hpbw) const; double calcOmegaA() const; diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.ui b/plugins/channelrx/radioastronomy/radioastronomygui.ui index ff821830a..d95f34841 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.ui +++ b/plugins/channelrx/radioastronomy/radioastronomygui.ui @@ -1,7 +1,7 @@ RadioAstronomyGUI - + 0 @@ -5010,9 +5010,9 @@ This should be close to the expected difference in power between hot and cold ca - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/radioastronomy/radioastronomysettings.cpp b/plugins/channelrx/radioastronomy/radioastronomysettings.cpp index 19c2802d2..db2dfd132 100644 --- a/plugins/channelrx/radioastronomy/radioastronomysettings.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomysettings.cpp @@ -163,6 +163,7 @@ void RadioAstronomySettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; for (int i = 0; i < RADIOASTRONOMY_POWERTABLE_COLUMNS; i++) { @@ -305,6 +306,8 @@ QByteArray RadioAstronomySettings::serialize() const s.writeU32(186, m_reverseAPIPort); s.writeU32(187, m_reverseAPIDeviceIndex); s.writeU32(188, m_reverseAPIChannelIndex); + s.writeS32(189, m_workspaceIndex); + s.writeBlob(190, m_geometryBytes); for (int i = 0; i < RADIOASTRONOMY_POWERTABLE_COLUMNS; i++) { s.writeS32(400 + i, m_powerTableColumnIndexes[i]); @@ -472,6 +475,8 @@ bool RadioAstronomySettings::deserialize(const QByteArray& data) m_reverseAPIDeviceIndex = utmp > 99 ? 99 : utmp; d.readU32(188, &utmp, 0); m_reverseAPIChannelIndex = utmp > 99 ? 99 : utmp; + d.readS32(189, &m_workspaceIndex, 0); + d.readBlob(190, &m_geometryBytes); for (int i = 0; i < RADIOASTRONOMY_POWERTABLE_COLUMNS; i++) { d.readS32(400 + i, &m_powerTableColumnIndexes[i], i); diff --git a/plugins/channelrx/radioastronomy/radioastronomysettings.h b/plugins/channelrx/radioastronomy/radioastronomysettings.h index 82b3b193e..cf222b5eb 100644 --- a/plugins/channelrx/radioastronomy/radioastronomysettings.h +++ b/plugins/channelrx/radioastronomy/radioastronomysettings.h @@ -223,6 +223,8 @@ struct RadioAstronomySettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; int m_powerTableColumnIndexes[RADIOASTRONOMY_POWERTABLE_COLUMNS];//!< How the columns are ordered in the table int m_powerTableColumnSizes[RADIOASTRONOMY_POWERTABLE_COLUMNS]; //!< Size of the columns in the table diff --git a/plugins/channelrx/radioclock/radioclockgui.cpp b/plugins/channelrx/radioclock/radioclockgui.cpp index 5e544cff7..19000cd14 100644 --- a/plugins/channelrx/radioclock/radioclockgui.cpp +++ b/plugins/channelrx/radioclock/radioclockgui.cpp @@ -158,7 +158,7 @@ void RadioClockGUI::channelMarkerChangedByCursor() void RadioClockGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void RadioClockGUI::on_deltaFrequency_changed(qint64 value) @@ -211,7 +211,7 @@ void RadioClockGUI::onWidgetRolled(QWidget* widget, bool rollDown) } } - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -237,6 +237,7 @@ void RadioClockGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -268,11 +269,12 @@ RadioClockGUI::RadioClockGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas m_doApplySettings(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/radioclock/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); m_radioClock = reinterpret_cast(rxChannel); m_radioClock->setMessageQueueToGUI(getInputMessageQueue()); @@ -318,6 +320,7 @@ RadioClockGUI::RadioClockGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas ui->scopeContainer->setVisible(false); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -351,6 +354,7 @@ void RadioClockGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -367,7 +371,7 @@ void RadioClockGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -409,3 +413,12 @@ void RadioClockGUI::tick() m_tickCount++; } + +void RadioClockGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &RadioClockGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &RadioClockGUI::on_rfBW_valueChanged); + QObject::connect(ui->threshold, &QDial::valueChanged, this, &RadioClockGUI::on_threshold_valueChanged); + QObject::connect(ui->modulation, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioClockGUI::on_modulation_currentIndexChanged); + QObject::connect(ui->timezone, QOverload::of(&QComboBox::currentIndexChanged), this, &RadioClockGUI::on_timezone_currentIndexChanged); +} diff --git a/plugins/channelrx/radioclock/radioclockgui.h b/plugins/channelrx/radioclock/radioclockgui.h index 827a6340c..8d1956559 100644 --- a/plugins/channelrx/radioclock/radioclockgui.h +++ b/plugins/channelrx/radioclock/radioclockgui.h @@ -51,6 +51,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -80,6 +86,8 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); + void displayDateTime(); void leaveEvent(QEvent*); diff --git a/plugins/channelrx/radioclock/radioclockgui.ui b/plugins/channelrx/radioclock/radioclockgui.ui index 82c5952ef..4f3d6cd2d 100644 --- a/plugins/channelrx/radioclock/radioclockgui.ui +++ b/plugins/channelrx/radioclock/radioclockgui.ui @@ -1,7 +1,7 @@ RadioClockGUI - + 0 @@ -638,9 +638,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/radioclock/radioclocksettings.cpp b/plugins/channelrx/radioclock/radioclocksettings.cpp index 1cca135e8..5af35acf0 100644 --- a/plugins/channelrx/radioclock/radioclocksettings.cpp +++ b/plugins/channelrx/radioclock/radioclocksettings.cpp @@ -46,6 +46,7 @@ void RadioClockSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray RadioClockSettings::serialize() const @@ -79,6 +80,9 @@ QByteArray RadioClockSettings::serialize() const s.writeBlob(22, m_rollupState->serialize()); } + s.writeS32(23, m_workspaceIndex); + s.writeBlob(24, m_geometryBytes); + return s.final(); } @@ -140,6 +144,9 @@ bool RadioClockSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(23, &m_workspaceIndex, 0); + d.readBlob(24, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/radioclock/radioclocksettings.h b/plugins/channelrx/radioclock/radioclocksettings.h index 317be4503..80f01ada1 100644 --- a/plugins/channelrx/radioclock/radioclocksettings.h +++ b/plugins/channelrx/radioclock/radioclocksettings.h @@ -54,6 +54,9 @@ struct RadioClockSettings uint16_t m_reverseAPIChannelIndex; Serializable *m_scopeGUI; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; + static const int RADIOCLOCK_CHANNEL_SAMPLE_RATE = 1000; static const int m_scopeStreams = 8; diff --git a/plugins/channelrx/remotesink/remotesinkgui.cpp b/plugins/channelrx/remotesink/remotesinkgui.cpp index 01e5f4600..fee089eb3 100644 --- a/plugins/channelrx/remotesink/remotesinkgui.cpp +++ b/plugins/channelrx/remotesink/remotesinkgui.cpp @@ -99,10 +99,11 @@ RemoteSinkGUI::RemoteSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas m_basebandSampleRate(0), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/remotesink/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_remoteSink = (RemoteSink*) channelrx; @@ -125,6 +126,7 @@ RemoteSinkGUI::RemoteSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -161,6 +163,7 @@ void RemoteSinkGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); ui->decimationFactor->setCurrentIndex(m_settings.m_log2Decim); @@ -172,7 +175,7 @@ void RemoteSinkGUI::displaySettings() ui->nbTxBytes->setCurrentIndex(log2(m_settings.m_nbTxBytes)); applyDecimation(); displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -224,7 +227,7 @@ void RemoteSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -251,6 +254,7 @@ void RemoteSinkGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -372,3 +376,14 @@ void RemoteSinkGUI::tick() m_tickCount = 0; } } + +void RemoteSinkGUI::makeUIConnections() +{ + QObject::connect(ui->decimationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &RemoteSinkGUI::on_decimationFactor_currentIndexChanged); + QObject::connect(ui->position, &QSlider::valueChanged, this, &RemoteSinkGUI::on_position_valueChanged); + QObject::connect(ui->dataAddress, &QLineEdit::returnPressed, this, &RemoteSinkGUI::on_dataAddress_returnPressed); + QObject::connect(ui->dataPort, &QLineEdit::returnPressed, this, &RemoteSinkGUI::on_dataPort_returnPressed); + QObject::connect(ui->dataApplyButton, &QPushButton::clicked, this, &RemoteSinkGUI::on_dataApplyButton_clicked); + QObject::connect(ui->nbFECBlocks, &QDial::valueChanged, this, &RemoteSinkGUI::on_nbFECBlocks_valueChanged); + QObject::connect(ui->nbTxBytes, QOverload::of(&QComboBox::currentIndexChanged), this, &RemoteSinkGUI::on_nbTxBytes_currentIndexChanged); +} diff --git a/plugins/channelrx/remotesink/remotesinkgui.h b/plugins/channelrx/remotesink/remotesinkgui.h index b0361fa82..5c5104a48 100644 --- a/plugins/channelrx/remotesink/remotesinkgui.h +++ b/plugins/channelrx/remotesink/remotesinkgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; } + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; } + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; } + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; } + virtual QString getTitle() const { return m_settings.m_title; } + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; } private: Ui::RemoteSinkGUI* ui; @@ -75,6 +81,7 @@ private: void displayStreamIndex(); void displayRateAndShift(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/remotesink/remotesinkgui.ui b/plugins/channelrx/remotesink/remotesinkgui.ui index ec163ad0b..9f9d3526f 100644 --- a/plugins/channelrx/remotesink/remotesinkgui.ui +++ b/plugins/channelrx/remotesink/remotesinkgui.ui @@ -1,7 +1,7 @@ RemoteSinkGUI - + 0 @@ -450,9 +450,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/remotesink/remotesinksettings.cpp b/plugins/channelrx/remotesink/remotesinksettings.cpp index 1181a41ce..5cacc97b0 100644 --- a/plugins/channelrx/remotesink/remotesinksettings.cpp +++ b/plugins/channelrx/remotesink/remotesinksettings.cpp @@ -53,6 +53,7 @@ void RemoteSinkSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray RemoteSinkSettings::serialize() const @@ -83,6 +84,9 @@ QByteArray RemoteSinkSettings::serialize() const s.writeBlob(17, m_channelMarker->serialize()); } + s.writeS32(18, m_workspaceIndex); + s.writeBlob(19, m_geometryBytes); + return s.final(); } @@ -155,6 +159,9 @@ bool RemoteSinkSettings::deserialize(const QByteArray& data) m_channelMarker->deserialize(bytetmp); } + d.readS32(18, &m_workspaceIndex, 0); + d.readBlob(19, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/remotesink/remotesinksettings.h b/plugins/channelrx/remotesink/remotesinksettings.h index 2828ba48d..0804097c1 100644 --- a/plugins/channelrx/remotesink/remotesinksettings.h +++ b/plugins/channelrx/remotesink/remotesinksettings.h @@ -46,6 +46,8 @@ struct RemoteSinkSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp index 0a279d12f..f7fda943b 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp @@ -171,10 +171,11 @@ SigMFFileSinkGUI::SigMFFileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISe m_fixedPosition(false), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/sigmffilesink/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_sigMFFileSink = (SigMFFileSink*) channelrx; @@ -209,6 +210,7 @@ SigMFFileSinkGUI::SigMFFileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISe connect(&(m_deviceUISet->m_deviceAPI->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -244,6 +246,7 @@ void SigMFFileSinkGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -273,7 +276,7 @@ void SigMFFileSinkGUI::displaySettings() displayStreamIndex(); setPosFromFrequency(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -323,7 +326,7 @@ void SigMFFileSinkGUI::channelMarkerChangedByCursor() void SigMFFileSinkGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void SigMFFileSinkGUI::handleSourceMessages() @@ -344,7 +347,7 @@ void SigMFFileSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -371,6 +374,7 @@ void SigMFFileSinkGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -586,3 +590,17 @@ QString SigMFFileSinkGUI::displayScaled(uint64_t value, int precision) } } +void SigMFFileSinkGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &SigMFFileSinkGUI::on_deltaFrequency_changed); + QObject::connect(ui->decimationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &SigMFFileSinkGUI::on_decimationFactor_currentIndexChanged); + QObject::connect(ui->fixedPosition, &QCheckBox::toggled, this, &SigMFFileSinkGUI::on_fixedPosition_toggled); + QObject::connect(ui->position, &QSlider::valueChanged, this, &SigMFFileSinkGUI::on_position_valueChanged); + QObject::connect(ui->spectrumSquelch, &ButtonSwitch::toggled, this, &SigMFFileSinkGUI::on_spectrumSquelch_toggled); + QObject::connect(ui->squelchLevel, &QDial::valueChanged, this, &SigMFFileSinkGUI::on_squelchLevel_valueChanged); + QObject::connect(ui->preRecordTime, &QDial::valueChanged, this, &SigMFFileSinkGUI::on_preRecordTime_valueChanged); + QObject::connect(ui->postSquelchTime, &QDial::valueChanged, this, &SigMFFileSinkGUI::on_postSquelchTime_valueChanged); + QObject::connect(ui->squelchedRecording, &ButtonSwitch::toggled, this, &SigMFFileSinkGUI::on_squelchedRecording_toggled); + QObject::connect(ui->record, &ButtonSwitch::toggled, this, &SigMFFileSinkGUI::on_record_toggled); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &SigMFFileSinkGUI::on_showFileDialog_clicked); +} diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h index 654b53124..8aadef404 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -88,6 +94,7 @@ private: void setPosFromFrequency(); QString displayScaled(uint64_t value, int precision); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.ui b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.ui index dcba5229a..b2e55f758 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.ui +++ b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.ui @@ -1,7 +1,7 @@ SigMFFileSinkGUI - + 0 @@ -545,9 +545,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp index aa785a33b..0ea2a2b39 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp @@ -49,6 +49,7 @@ void SigMFFileSinkSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray SigMFFileSinkSettings::serialize() const @@ -85,6 +86,9 @@ QByteArray SigMFFileSinkSettings::serialize() const s.writeBlob(20, m_channelMarker->serialize()); } + s.writeS32(21, m_workspaceIndex); + s.writeBlob(22, m_geometryBytes); + return s.final(); } @@ -153,6 +157,9 @@ bool SigMFFileSinkSettings::deserialize(const QByteArray& data) m_channelMarker->deserialize(bytetmp); } + d.readS32(21, &m_workspaceIndex, 0); + d.readBlob(22, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h index dea649745..470f00b15 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h @@ -42,6 +42,8 @@ struct SigMFFileSinkSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_spectrumGUI; Serializable *m_channelMarker; diff --git a/plugins/channelrx/udpsink/udpsinkgui.cpp b/plugins/channelrx/udpsink/udpsinkgui.cpp index f64f517c3..8010b2d41 100644 --- a/plugins/channelrx/udpsink/udpsinkgui.cpp +++ b/plugins/channelrx/udpsink/udpsinkgui.cpp @@ -109,7 +109,7 @@ void UDPSinkGUI::channelMarkerChangedByCursor() void UDPSinkGUI::channelMarkerHighlightedByCursor() { - setHighlighted(m_channelMarker.getHighlighted()); + getRollupContents()->setHighlighted(m_channelMarker.getHighlighted()); } void UDPSinkGUI::tick() @@ -147,9 +147,10 @@ UDPSinkGUI::UDPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS m_doApplySettings(true), m_rfBandwidthChanged(false) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channelrx/udpsink/readme.md"; - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); setAttribute(Qt::WA_DeleteOnClose, true); @@ -196,6 +197,7 @@ UDPSinkGUI::UDPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS ui->spectrumGUI->setBuddies(m_spectrumVis, ui->glSpectrum); displaySettings(); + makeUIConnections(); applySettingsImmediate(true); applySettings(true); } @@ -221,6 +223,7 @@ void UDPSinkGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -258,7 +261,7 @@ void UDPSinkGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate); @@ -590,7 +593,7 @@ void UDPSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) m_udpSink->enableSpectrum(rollDown); } - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -618,6 +621,7 @@ void UDPSinkGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettingsImmediate(); @@ -650,4 +654,22 @@ void UDPSinkGUI::enterEvent(QEvent*) m_channelMarker.setHighlighted(true); } - +void UDPSinkGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &UDPSinkGUI::on_deltaFrequency_changed); + QObject::connect(ui->sampleFormat, QOverload::of(&QComboBox::currentIndexChanged), this, &UDPSinkGUI::on_sampleFormat_currentIndexChanged); + QObject::connect(ui->outputUDPAddress, &QLineEdit::editingFinished, this, &UDPSinkGUI::on_outputUDPAddress_editingFinished); + QObject::connect(ui->outputUDPPort, &QLineEdit::editingFinished, this, &UDPSinkGUI::on_outputUDPPort_editingFinished); + QObject::connect(ui->inputUDPAudioPort, &QLineEdit::editingFinished, this, &UDPSinkGUI::on_inputUDPAudioPort_editingFinished); + QObject::connect(ui->sampleRate, &QLineEdit::textEdited, this, &UDPSinkGUI::on_sampleRate_textEdited); + QObject::connect(ui->rfBandwidth, &QLineEdit::textEdited, this, &UDPSinkGUI::on_rfBandwidth_textEdited); + QObject::connect(ui->fmDeviation, &QLineEdit::textEdited, this, &UDPSinkGUI::on_fmDeviation_textEdited); + QObject::connect(ui->audioActive, &QToolButton::toggled, this, &UDPSinkGUI::on_audioActive_toggled); + QObject::connect(ui->audioStereo, &QToolButton::toggled, this, &UDPSinkGUI::on_audioStereo_toggled); + QObject::connect(ui->applyBtn, &QPushButton::clicked, this, &UDPSinkGUI::on_applyBtn_clicked); + QObject::connect(ui->gain, &QSlider::valueChanged, this, &UDPSinkGUI::on_gain_valueChanged); + QObject::connect(ui->volume, &QSlider::valueChanged, this, &UDPSinkGUI::on_volume_valueChanged); + QObject::connect(ui->squelch, &QSlider::valueChanged, this, &UDPSinkGUI::on_squelch_valueChanged); + QObject::connect(ui->squelchGate, &QDial::valueChanged, this, &UDPSinkGUI::on_squelchGate_valueChanged); + QObject::connect(ui->agc, &ButtonSwitch::toggled, this, &UDPSinkGUI::on_agc_toggled); +} diff --git a/plugins/channelrx/udpsink/udpsinkgui.h b/plugins/channelrx/udpsink/udpsinkgui.h index dd2fd6828..c06e0f99b 100644 --- a/plugins/channelrx/udpsink/udpsinkgui.h +++ b/plugins/channelrx/udpsink/udpsinkgui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -85,6 +91,7 @@ private: void setSampleFormat(int index); void setSampleFormatIndex(const UDPSinkSettings::SampleFormat& sampleFormat); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/udpsink/udpsinkgui.ui b/plugins/channelrx/udpsink/udpsinkgui.ui index 1bd129907..ea438e23c 100644 --- a/plugins/channelrx/udpsink/udpsinkgui.ui +++ b/plugins/channelrx/udpsink/udpsinkgui.ui @@ -1,7 +1,7 @@ UDPSinkGUI - + 0 @@ -862,9 +862,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channelrx/udpsink/udpsinksettings.cpp b/plugins/channelrx/udpsink/udpsinksettings.cpp index 169fc129f..385db5077 100644 --- a/plugins/channelrx/udpsink/udpsinksettings.cpp +++ b/plugins/channelrx/udpsink/udpsinksettings.cpp @@ -57,6 +57,7 @@ void UDPSinkSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray UDPSinkSettings::serialize() const @@ -99,6 +100,9 @@ QByteArray UDPSinkSettings::serialize() const s.writeBlob(29, m_rollupState->serialize()); } + s.writeS32(30, m_workspaceIndex); + s.writeBlob(31, m_geometryBytes); + return s.final(); } @@ -197,6 +201,9 @@ bool UDPSinkSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(29, &m_workspaceIndex, 0); + d.readBlob(30, &m_geometryBytes); + return true; } else diff --git a/plugins/channelrx/udpsink/udpsinksettings.h b/plugins/channelrx/udpsink/udpsinksettings.h index b24e23385..72196f7ba 100644 --- a/plugins/channelrx/udpsink/udpsinksettings.h +++ b/plugins/channelrx/udpsink/udpsinksettings.h @@ -69,6 +69,8 @@ struct UDPSinkSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/channeltx/filesource/filesourcegui.cpp b/plugins/channeltx/filesource/filesourcegui.cpp index fd2cf66f6..06e0217d1 100644 --- a/plugins/channeltx/filesource/filesourcegui.cpp +++ b/plugins/channeltx/filesource/filesourcegui.cpp @@ -179,12 +179,13 @@ FileSourceGUI::FileSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas { (void) channelTx; - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/filesource/readme.md"; ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue); setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_fileSource = (FileSource*) channelTx; @@ -211,6 +212,7 @@ FileSourceGUI::FileSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -302,6 +304,8 @@ void FileSourceGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); + displayStreamIndex(); blockApplySettings(true); @@ -310,7 +314,7 @@ void FileSourceGUI::displaySettings() ui->gainText->setText(tr("%1 dB").arg(m_settings.m_gainDB)); ui->interpolationFactor->setCurrentIndex(m_settings.m_log2Interp); applyInterpolation(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -362,7 +366,7 @@ void FileSourceGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -525,3 +529,14 @@ void FileSourceGUI::tick() void FileSourceGUI::channelMarkerChangedByCursor() { } + +void FileSourceGUI::makeUIConnections() +{ + QObject::connect(ui->interpolationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &FileSourceGUI::on_interpolationFactor_currentIndexChanged); + QObject::connect(ui->position, &QSlider::valueChanged, this, &FileSourceGUI::on_position_valueChanged); + QObject::connect(ui->gain, &QSlider::valueChanged, this, &FileSourceGUI::on_gain_valueChanged); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &FileSourceGUI::on_showFileDialog_clicked); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &FileSourceGUI::on_playLoop_toggled); + QObject::connect(ui->play, &ButtonSwitch::toggled, this, &FileSourceGUI::on_play_toggled); + QObject::connect(ui->navTime, &QSlider::valueChanged, this, &FileSourceGUI::on_navTime_valueChanged); +} diff --git a/plugins/channeltx/filesource/filesourcegui.h b/plugins/channeltx/filesource/filesourcegui.h index 2e03655ca..c748afd31 100644 --- a/plugins/channeltx/filesource/filesourcegui.h +++ b/plugins/channeltx/filesource/filesourcegui.h @@ -45,6 +45,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -85,6 +91,7 @@ private: void displayRateAndShift(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/filesource/filesourcegui.ui b/plugins/channeltx/filesource/filesourcegui.ui index eaaeee84a..8ae7b0701 100644 --- a/plugins/channeltx/filesource/filesourcegui.ui +++ b/plugins/channeltx/filesource/filesourcegui.ui @@ -1,7 +1,7 @@ FileSourceGUI - + 0 @@ -696,9 +696,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/filesource/filesourcesettings.cpp b/plugins/channeltx/filesource/filesourcesettings.cpp index 019e4bd1e..b249ae363 100644 --- a/plugins/channeltx/filesource/filesourcesettings.cpp +++ b/plugins/channeltx/filesource/filesourcesettings.cpp @@ -45,6 +45,7 @@ void FileSourceSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray FileSourceSettings::serialize() const @@ -72,6 +73,9 @@ QByteArray FileSourceSettings::serialize() const s.writeBlob(15, m_channelMarker->serialize()); } + s.writeS32(16, m_workspaceIndex); + s.writeBlob(17, m_geometryBytes); + return s.final(); } @@ -129,6 +133,9 @@ bool FileSourceSettings::deserialize(const QByteArray& data) m_channelMarker->deserialize(bytetmp); } + d.readS32(16, &m_workspaceIndex, 0); + d.readBlob(17, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/filesource/filesourcesettings.h b/plugins/channeltx/filesource/filesourcesettings.h index 8225ce4c9..f20a0377f 100644 --- a/plugins/channeltx/filesource/filesourcesettings.h +++ b/plugins/channeltx/filesource/filesourcesettings.h @@ -38,6 +38,8 @@ struct FileSourceSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channeltx/localsource/localsourcegui.cpp b/plugins/channeltx/localsource/localsourcegui.cpp index f6a7a7fd1..00866ccea 100644 --- a/plugins/channeltx/localsource/localsourcegui.cpp +++ b/plugins/channeltx/localsource/localsourcegui.cpp @@ -95,10 +95,11 @@ LocalSourceGUI::LocalSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B m_basebandSampleRate(0), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/localsource/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_localSource = (LocalSource*) channeltx; @@ -122,6 +123,7 @@ LocalSourceGUI::LocalSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B updateLocalDevices(); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -158,13 +160,14 @@ void LocalSourceGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); ui->interpolationFactor->setCurrentIndex(m_settings.m_log2Interp); ui->localDevicePlay->setChecked(m_settings.m_play); applyInterpolation(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -228,7 +231,7 @@ void LocalSourceGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -255,6 +258,7 @@ void LocalSourceGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -338,3 +342,12 @@ void LocalSourceGUI::tick() m_tickCount = 0; } } + +void LocalSourceGUI::makeUIConnections() +{ + QObject::connect(ui->interpolationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &LocalSourceGUI::on_interpolationFactor_currentIndexChanged); + QObject::connect(ui->position, &QSlider::valueChanged, this, &LocalSourceGUI::on_position_valueChanged); + QObject::connect(ui->localDevice, QOverload::of(&QComboBox::currentIndexChanged), this, &LocalSourceGUI::on_localDevice_currentIndexChanged); + QObject::connect(ui->localDevicesRefresh, &QPushButton::clicked, this, &LocalSourceGUI::on_localDevicesRefresh_clicked); + QObject::connect(ui->localDevicePlay, &ButtonSwitch::toggled, this, &LocalSourceGUI::on_localDevicePlay_toggled); +} diff --git a/plugins/channeltx/localsource/localsourcegui.h b/plugins/channeltx/localsource/localsourcegui.h index c106998ac..69584295e 100644 --- a/plugins/channeltx/localsource/localsourcegui.h +++ b/plugins/channeltx/localsource/localsourcegui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; private: Ui::LocalSourceGUI* ui; @@ -76,6 +82,7 @@ private: void displayStreamIndex(); void updateLocalDevices(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/localsource/localsourcegui.ui b/plugins/channeltx/localsource/localsourcegui.ui index b62c51e3b..a4e0aa877 100644 --- a/plugins/channeltx/localsource/localsourcegui.ui +++ b/plugins/channeltx/localsource/localsourcegui.ui @@ -1,7 +1,7 @@ LocalSourceGUI - + 0 @@ -330,9 +330,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/localsource/localsourcesettings.cpp b/plugins/channeltx/localsource/localsourcesettings.cpp index a5d7dea51..5e33c589d 100644 --- a/plugins/channeltx/localsource/localsourcesettings.cpp +++ b/plugins/channeltx/localsource/localsourcesettings.cpp @@ -44,6 +44,7 @@ void LocalSourceSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray LocalSourceSettings::serialize() const @@ -69,6 +70,9 @@ QByteArray LocalSourceSettings::serialize() const s.writeBlob(16, m_channelMarker->serialize()); } + s.writeS32(17, m_workspaceIndex); + s.writeBlob(18, m_geometryBytes); + return s.final(); } @@ -122,6 +126,9 @@ bool LocalSourceSettings::deserialize(const QByteArray& data) m_channelMarker->deserialize(bytetmp); } + d.readS32(27, &m_workspaceIndex, 0); + d.readBlob(28, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/localsource/localsourcesettings.h b/plugins/channeltx/localsource/localsourcesettings.h index 81740e0bd..b0b044d6b 100644 --- a/plugins/channeltx/localsource/localsourcesettings.h +++ b/plugins/channeltx/localsource/localsourcesettings.h @@ -37,6 +37,8 @@ struct LocalSourceSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp index 773a8fcf1..b97f63e6f 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp @@ -310,18 +310,12 @@ void IEEE_802_15_4_ModGUI::on_udpPort_editingFinished() applySettings(); } -void IEEE_802_15_4_ModGUI::on_udpBytesFormat_clicked(bool checked) -{ - m_settings.m_udpBytesFormat = checked; - applySettings(); -} - void IEEE_802_15_4_ModGUI::onWidgetRolled(QWidget* widget, bool rollDown) { (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -348,6 +342,7 @@ void IEEE_802_15_4_ModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -379,11 +374,12 @@ IEEE_802_15_4_ModGUI::IEEE_802_15_4_ModGUI(PluginAPI* pluginAPI, DeviceUISet *de m_doApplySettings(true), m_basebandSampleRate(12000000) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/mod802.15.4/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_IEEE_802_15_4_Mod = (IEEE_802_15_4_Mod*) channelTx; @@ -466,6 +462,7 @@ IEEE_802_15_4_ModGUI::IEEE_802_15_4_ModGUI(PluginAPI* pluginAPI, DeviceUISet *de ui->spectrumGUI->setBuddies(m_spectrumVis, ui->glSpectrum); displaySettings(); + makeUIConnections(); applySettings(); } @@ -507,6 +504,7 @@ void IEEE_802_15_4_ModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -567,7 +565,7 @@ void IEEE_802_15_4_ModGUI::displaySettings() ui->udpAddress->setText(m_settings.m_udpAddress); ui->udpPort->setText(QString::number(m_settings.m_udpPort)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -625,3 +623,19 @@ void IEEE_802_15_4_ModGUI::tick() m_channelPowerDbAvg(powDb); ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1)); } + +void IEEE_802_15_4_ModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &IEEE_802_15_4_ModGUI::on_deltaFrequency_changed); + QObject::connect(ui->phy, QOverload::of(&QComboBox::currentIndexChanged), this, &IEEE_802_15_4_ModGUI::on_phy_currentIndexChanged); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &IEEE_802_15_4_ModGUI::on_rfBW_valueChanged); + QObject::connect(ui->gain, &QDial::valueChanged, this, &IEEE_802_15_4_ModGUI::on_gain_valueChanged); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &IEEE_802_15_4_ModGUI::on_channelMute_toggled); + QObject::connect(ui->txButton, &QToolButton::clicked, this, &IEEE_802_15_4_ModGUI::on_txButton_clicked); + QObject::connect(ui->frame, &QLineEdit::editingFinished, this, &IEEE_802_15_4_ModGUI::on_frame_editingFinished); + QObject::connect(ui->frame, &QLineEdit::returnPressed, this, &IEEE_802_15_4_ModGUI::on_frame_returnPressed); + QObject::connect(ui->repeat, &ButtonSwitch::toggled, this, &IEEE_802_15_4_ModGUI::on_repeat_toggled); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &IEEE_802_15_4_ModGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &IEEE_802_15_4_ModGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &IEEE_802_15_4_ModGUI::on_udpPort_editingFinished); +} diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h index 041928bc4..1f96f2920 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h @@ -55,7 +55,13 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } - virtual bool handleMessage(const Message& message); + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; + public slots: void channelMarkerChangedByCursor(); @@ -89,6 +95,8 @@ private: void displayRFBandwidth(int bandwidth); void displayChipRate(const IEEE_802_15_4_ModSettings& settings); QString getDisplayValueWithMultiplier(int value); + bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); @@ -110,7 +118,6 @@ private slots: void on_udpEnabled_clicked(bool checked); void on_udpAddress_editingFinished(); void on_udpPort_editingFinished(); - void on_udpBytesFormat_clicked(bool checked); void onWidgetRolled(QWidget* widget, bool rollDown); void onMenuDialogCalled(const QPoint& p); diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui index 2cb001a38..6e565edc6 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui @@ -1,7 +1,7 @@ IEEE_802_15_4_ModGUI - + 0 @@ -738,9 +738,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp index 3540274ab..9d71d6c9a 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp @@ -75,6 +75,7 @@ void IEEE_802_15_4_ModSettings::resetToDefaults() m_udpBytesFormat = false; m_udpAddress = "127.0.0.1"; m_udpPort = 9998; + m_workspaceIndex = 0; } bool IEEE_802_15_4_ModSettings::setPHY(QString phy) @@ -202,6 +203,9 @@ QByteArray IEEE_802_15_4_ModSettings::serialize() const s.writeBlob(38, m_rollupState->serialize()); } + s.writeS32(39, m_workspaceIndex); + s.writeBlob(40, m_geometryBytes); + return s.final(); } @@ -288,6 +292,9 @@ bool IEEE_802_15_4_ModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(39, &m_workspaceIndex, 0); + d.readBlob(40, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h index 367570869..b50b69d6c 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h @@ -78,6 +78,8 @@ struct IEEE_802_15_4_ModSettings uint16_t m_udpPort; Serializable *m_rollupState; static const int m_udpBufferSize = 100000; + int m_workspaceIndex; + QByteArray m_geometryBytes; IEEE_802_15_4_ModSettings(); void resetToDefaults(); diff --git a/plugins/channeltx/modais/aismodgui.cpp b/plugins/channeltx/modais/aismodgui.cpp index bc616e74e..3c21a40fa 100644 --- a/plugins/channeltx/modais/aismodgui.cpp +++ b/plugins/channeltx/modais/aismodgui.cpp @@ -331,7 +331,7 @@ void AISModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -358,6 +358,7 @@ void AISModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -388,11 +389,12 @@ AISModGUI::AISModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_channelMarker(this), m_doApplySettings(true) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modais/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_aisMod = (AISMod*) channelTx; @@ -478,6 +480,7 @@ AISModGUI::AISModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam ui->spectrumContainer->setVisible(false); displaySettings(); + makeUIConnections(); applySettings(); } @@ -518,6 +521,7 @@ void AISModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -552,7 +556,7 @@ void AISModGUI::displaySettings() ui->heading->setValue(m_settings.m_heading); ui->message->setText(m_settings.m_data); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -581,3 +585,31 @@ void AISModGUI::tick() m_channelPowerDbAvg(powDb); ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1)); } + +void AISModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &AISModGUI::on_deltaFrequency_changed); + QObject::connect(ui->mode, QOverload::of(&QComboBox::currentIndexChanged), this, &AISModGUI::on_mode_currentIndexChanged); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &AISModGUI::on_rfBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &AISModGUI::on_fmDev_valueChanged); + QObject::connect(ui->bt, &QSlider::valueChanged, this, &AISModGUI::on_bt_valueChanged); + QObject::connect(ui->gain, &QDial::valueChanged, this, &AISModGUI::on_gain_valueChanged); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &AISModGUI::on_channelMute_toggled); + QObject::connect(ui->txButton, &QPushButton::clicked, this, &AISModGUI::on_txButton_clicked); + QObject::connect(ui->encode, &QToolButton::clicked, this, &AISModGUI::on_encode_clicked); + QObject::connect(ui->msgId, QOverload::of(&QComboBox::currentIndexChanged), this, &AISModGUI::on_msgId_currentIndexChanged); + QObject::connect(ui->mmsi, &QLineEdit::editingFinished, this, &AISModGUI::on_mmsi_editingFinished); + QObject::connect(ui->status, QOverload::of(&QComboBox::currentIndexChanged), this, &AISModGUI::on_status_currentIndexChanged); + QObject::connect(ui->latitude, QOverload::of(&QDoubleSpinBox::valueChanged), this, &AISModGUI::on_latitude_valueChanged); + QObject::connect(ui->longitude, QOverload::of(&QDoubleSpinBox::valueChanged), this, &AISModGUI::on_longitude_valueChanged); + QObject::connect(ui->insertPosition, &QToolButton::clicked, this, &AISModGUI::on_insertPosition_clicked); + QObject::connect(ui->course, QOverload::of(&QDoubleSpinBox::valueChanged), this, &AISModGUI::on_course_valueChanged); + QObject::connect(ui->speed, QOverload::of(&QDoubleSpinBox::valueChanged), this, &AISModGUI::on_speed_valueChanged); + QObject::connect(ui->heading, QOverload::of(&QSpinBox::valueChanged), this, &AISModGUI::on_heading_valueChanged); + QObject::connect(ui->message, &QLineEdit::editingFinished, this, &AISModGUI::on_message_editingFinished); + QObject::connect(ui->message, &QLineEdit::returnPressed, this, &AISModGUI::on_message_returnPressed); + QObject::connect(ui->repeat, &ButtonSwitch::toggled, this, &AISModGUI::on_repeat_toggled); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &AISModGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &AISModGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &AISModGUI::on_udpPort_editingFinished); +} diff --git a/plugins/channeltx/modais/aismodgui.h b/plugins/channeltx/modais/aismodgui.h index 86081b287..4deff0459 100644 --- a/plugins/channeltx/modais/aismodgui.h +++ b/plugins/channeltx/modais/aismodgui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -78,6 +84,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modais/aismodgui.ui b/plugins/channeltx/modais/aismodgui.ui index 16b260bf4..342e69e97 100644 --- a/plugins/channeltx/modais/aismodgui.ui +++ b/plugins/channeltx/modais/aismodgui.ui @@ -1,7 +1,7 @@ AISModGUI - + 0 @@ -1148,9 +1148,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modais/aismodsettings.cpp b/plugins/channeltx/modais/aismodsettings.cpp index 91d71ca44..f489b715c 100644 --- a/plugins/channeltx/modais/aismodsettings.cpp +++ b/plugins/channeltx/modais/aismodsettings.cpp @@ -69,6 +69,7 @@ void AISModSettings::resetToDefaults() m_udpEnabled = false; m_udpAddress = "127.0.0.1"; m_udpPort = 9998; + m_workspaceIndex = 0; } bool AISModSettings::setMode(QString mode) @@ -180,6 +181,9 @@ QByteArray AISModSettings::serialize() const s.writeBlob(40, m_rollupState->serialize()); } + s.writeS32(41, m_workspaceIndex); + s.writeBlob(42, m_geometryBytes); + return s.final(); } @@ -267,6 +271,9 @@ bool AISModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(41, &m_workspaceIndex, 0); + d.readBlob(42, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modais/aismodsettings.h b/plugins/channeltx/modais/aismodsettings.h index 2be80462e..91e03293d 100644 --- a/plugins/channeltx/modais/aismodsettings.h +++ b/plugins/channeltx/modais/aismodsettings.h @@ -87,6 +87,8 @@ struct AISModSettings QString m_udpAddress; uint16_t m_udpPort; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; // Sample rate is multiple of 9600 baud rate (use even multiple so Gausian filter has odd number of taps) // Is there any benefit to having this higher? diff --git a/plugins/channeltx/modam/ammodgui.cpp b/plugins/channeltx/modam/ammodgui.cpp index 7f0bc8c8f..f80e21bfb 100644 --- a/plugins/channeltx/modam/ammodgui.cpp +++ b/plugins/channeltx/modam/ammodgui.cpp @@ -271,7 +271,7 @@ void AMModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -298,6 +298,7 @@ void AMModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -335,10 +336,11 @@ AMModGUI::AMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampl m_tickCount(0), m_enableNavTime(false) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modam/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_amMod = (AMMod*) channelTx; @@ -386,6 +388,7 @@ AMModGUI::AMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampl m_amMod->setLevelMeter(ui->volumeMeter); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -420,6 +423,7 @@ void AMModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); blockApplySettings(true); @@ -457,7 +461,7 @@ void AMModGUI::displaySettings() displayStreamIndex(); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -578,3 +582,22 @@ void AMModGUI::updateWithStreamTime() ui->navTimeSlider->setValue((int) (posRatio * 100.0)); } } + +void AMModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &AMModGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &AMModGUI::on_rfBW_valueChanged); + QObject::connect(ui->modPercent, &QSlider::valueChanged, this, &AMModGUI::on_modPercent_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &AMModGUI::on_volume_valueChanged); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &AMModGUI::on_channelMute_toggled); + QObject::connect(ui->tone, &ButtonSwitch::toggled, this, &AMModGUI::on_tone_toggled); + QObject::connect(ui->toneFrequency, &QDial::valueChanged, this, &AMModGUI::on_toneFrequency_valueChanged); + QObject::connect(ui->mic, &ButtonSwitch::toggled, this, &AMModGUI::on_mic_toggled); + QObject::connect(ui->play, &ButtonSwitch::toggled, this, &AMModGUI::on_play_toggled); + QObject::connect(ui->morseKeyer, &ButtonSwitch::toggled, this, &AMModGUI::on_morseKeyer_toggled); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &AMModGUI::on_playLoop_toggled); + QObject::connect(ui->navTimeSlider, &QSlider::valueChanged, this, &AMModGUI::on_navTimeSlider_valueChanged); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &AMModGUI::on_showFileDialog_clicked); + QObject::connect(ui->feedbackEnable, &QToolButton::toggled, this, &AMModGUI::on_feedbackEnable_toggled); + QObject::connect(ui->feedbackVolume, &QDial::valueChanged, this, &AMModGUI::on_feedbackVolume_valueChanged); +} diff --git a/plugins/channeltx/modam/ammodgui.h b/plugins/channeltx/modam/ammodgui.h index ba7ff7d77..36d79ccbd 100644 --- a/plugins/channeltx/modam/ammodgui.h +++ b/plugins/channeltx/modam/ammodgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -84,6 +90,7 @@ private: void updateWithStreamData(); void updateWithStreamTime(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modam/ammodgui.ui b/plugins/channeltx/modam/ammodgui.ui index fd0974534..0e57ea350 100644 --- a/plugins/channeltx/modam/ammodgui.ui +++ b/plugins/channeltx/modam/ammodgui.ui @@ -1,7 +1,7 @@ AMModGUI - + 0 @@ -725,9 +725,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modam/ammodsettings.cpp b/plugins/channeltx/modam/ammodsettings.cpp index 909dc75d6..981690912 100644 --- a/plugins/channeltx/modam/ammodsettings.cpp +++ b/plugins/channeltx/modam/ammodsettings.cpp @@ -52,6 +52,7 @@ void AMModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray AMModSettings::serialize() const @@ -92,6 +93,9 @@ QByteArray AMModSettings::serialize() const s.writeBlob(21, m_rollupState->serialize()); } + s.writeS32(22, m_workspaceIndex); + s.writeBlob(23, m_geometryBytes); + return s.final(); } @@ -166,6 +170,9 @@ bool AMModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(22, &m_workspaceIndex, 0); + d.readBlob(23, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modam/ammodsettings.h b/plugins/channeltx/modam/ammodsettings.h index 2bc8bfe47..4eb1120f5 100644 --- a/plugins/channeltx/modam/ammodsettings.h +++ b/plugins/channeltx/modam/ammodsettings.h @@ -55,6 +55,8 @@ struct AMModSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_cwKeyerGUI; diff --git a/plugins/channeltx/modatv/atvmodgui.cpp b/plugins/channeltx/modatv/atvmodgui.cpp index 49caab00a..460d68cad 100644 --- a/plugins/channeltx/modatv/atvmodgui.cpp +++ b/plugins/channeltx/modatv/atvmodgui.cpp @@ -63,10 +63,11 @@ ATVModGUI::ATVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_camBusyFPSMessageBox(0), m_rfSliderDivisor(100000) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modatv/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_atvMod = (ATVMod*) channelTx; @@ -112,6 +113,7 @@ ATVModGUI::ATVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam ui->fmExcursionLabel->setText(delta); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -671,7 +673,7 @@ void ATVModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -699,6 +701,7 @@ void ATVModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -750,6 +753,7 @@ void ATVModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -796,7 +800,7 @@ void ATVModGUI::displaySettings() ui->playVideo->setChecked(m_settings.m_videoPlay); ui->playLoop->setChecked(m_settings.m_videoPlayLoop); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -867,3 +871,31 @@ void ATVModGUI::updateWithStreamTime() } } +void ATVModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &ATVModGUI::on_deltaFrequency_changed); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &ATVModGUI::on_channelMute_toggled); + QObject::connect(ui->forceDecimator, &ButtonSwitch::toggled, this, &ATVModGUI::on_forceDecimator_toggled); + QObject::connect(ui->modulation, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVModGUI::on_modulation_currentIndexChanged); + QObject::connect(ui->rfScaling, &QDial::valueChanged, this, &ATVModGUI::on_rfScaling_valueChanged); + QObject::connect(ui->fmExcursion, &QDial::valueChanged, this, &ATVModGUI::on_fmExcursion_valueChanged); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &ATVModGUI::on_rfBW_valueChanged); + QObject::connect(ui->rfOppBW, &QSlider::valueChanged, this, &ATVModGUI::on_rfOppBW_valueChanged); + QObject::connect(ui->nbLines, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVModGUI::on_nbLines_currentIndexChanged); + QObject::connect(ui->fps, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVModGUI::on_fps_currentIndexChanged); + QObject::connect(ui->standard, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVModGUI::on_standard_currentIndexChanged); + QObject::connect(ui->invertVideo, &QCheckBox::clicked, this, &ATVModGUI::on_invertVideo_clicked); + QObject::connect(ui->uniformLevel, &QDial::valueChanged, this, &ATVModGUI::on_uniformLevel_valueChanged); + QObject::connect(ui->inputSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVModGUI::on_inputSelect_currentIndexChanged); + QObject::connect(ui->imageFileDialog, &QPushButton::clicked, this, &ATVModGUI::on_imageFileDialog_clicked); + QObject::connect(ui->videoFileDialog, &QPushButton::clicked, this, &ATVModGUI::on_videoFileDialog_clicked); + QObject::connect(ui->playVideo, &ButtonSwitch::toggled, this, &ATVModGUI::on_playVideo_toggled); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &ATVModGUI::on_playLoop_toggled); + QObject::connect(ui->navTimeSlider, &QSlider::valueChanged, this, &ATVModGUI::on_navTimeSlider_valueChanged); + QObject::connect(ui->playCamera, &ButtonSwitch::toggled, this, &ATVModGUI::on_playCamera_toggled); + QObject::connect(ui->camSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &ATVModGUI::on_camSelect_currentIndexChanged); + QObject::connect(ui->cameraManualFPSEnable, &ButtonSwitch::toggled, this, &ATVModGUI::on_cameraManualFPSEnable_toggled); + QObject::connect(ui->cameraManualFPS, &QDial::valueChanged, this, &ATVModGUI::on_cameraManualFPS_valueChanged); + QObject::connect(ui->overlayTextShow, &ButtonSwitch::toggled, this, &ATVModGUI::on_overlayTextShow_toggled); + QObject::connect(ui->overlayText, &QLineEdit::textEdited, this, &ATVModGUI::on_overlayText_textEdited); +} diff --git a/plugins/channeltx/modatv/atvmodgui.h b/plugins/channeltx/modatv/atvmodgui.h index cf22f35d6..2a81c73d1 100644 --- a/plugins/channeltx/modatv/atvmodgui.h +++ b/plugins/channeltx/modatv/atvmodgui.h @@ -47,6 +47,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -90,6 +96,7 @@ private: int getNbLinesIndex(int nbLines); int getFPSIndex(int fps); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modatv/atvmodgui.ui b/plugins/channeltx/modatv/atvmodgui.ui index 86af812c5..7155fd5cb 100644 --- a/plugins/channeltx/modatv/atvmodgui.ui +++ b/plugins/channeltx/modatv/atvmodgui.ui @@ -1,7 +1,7 @@ ATVModGUI - + 0 @@ -1304,9 +1304,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modatv/atvmodsettings.cpp b/plugins/channeltx/modatv/atvmodsettings.cpp index 060f4237e..3f5bc0393 100644 --- a/plugins/channeltx/modatv/atvmodsettings.cpp +++ b/plugins/channeltx/modatv/atvmodsettings.cpp @@ -58,6 +58,7 @@ void ATVModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray ATVModSettings::serialize() const @@ -97,6 +98,9 @@ QByteArray ATVModSettings::serialize() const s.writeBlob(25, m_rollupState->serialize()); } + s.writeS32(26, m_workspaceIndex); + s.writeBlob(27, m_geometryBytes); + return s.final(); } @@ -169,6 +173,9 @@ bool ATVModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(26, &m_workspaceIndex, 0); + d.readBlob(27, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modatv/atvmodsettings.h b/plugins/channeltx/modatv/atvmodsettings.h index 8c4d66bf5..95173938c 100644 --- a/plugins/channeltx/modatv/atvmodsettings.h +++ b/plugins/channeltx/modatv/atvmodsettings.h @@ -89,6 +89,8 @@ struct ATVModSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp b/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp index d7987b6d7..6390a39ec 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp +++ b/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp @@ -357,7 +357,7 @@ void ChirpChatModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -384,6 +384,7 @@ void ChirpChatModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -416,11 +417,12 @@ ChirpChatModGUI::ChirpChatModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, m_doApplySettings(true), m_tickCount(0) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modchirpchat/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_chirpChatMod = (ChirpChatMod*) channelTx; @@ -453,6 +455,7 @@ ChirpChatModGUI::ChirpChatModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, setBandwidths(); displaySettings(); + makeUIConnections(); applySettings(); } @@ -488,6 +491,7 @@ void ChirpChatModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); displayCurrentPayloadMessage(); displayBinaryMessage(); @@ -525,7 +529,7 @@ void ChirpChatModGUI::displaySettings() ui->udpEnabled->setChecked(m_settings.m_udpEnabled); ui->udpAddress->setText(m_settings.m_udpAddress); ui->udpPort->setText(QString::number(m_settings.m_udpPort)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -619,3 +623,33 @@ void ChirpChatModGUI::tick() } } } + +void ChirpChatModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &ChirpChatModGUI::on_deltaFrequency_changed); + QObject::connect(ui->bw, &QSlider::valueChanged, this, &ChirpChatModGUI::on_bw_valueChanged); + QObject::connect(ui->spread, &QSlider::valueChanged, this, &ChirpChatModGUI::on_spread_valueChanged); + QObject::connect(ui->deBits, &QSlider::valueChanged, this, &ChirpChatModGUI::on_deBits_valueChanged); + QObject::connect(ui->preambleChirps, &QSlider::valueChanged, this, &ChirpChatModGUI::on_preambleChirps_valueChanged); + QObject::connect(ui->idleTime, &QSlider::valueChanged, this, &ChirpChatModGUI::on_idleTime_valueChanged); + QObject::connect(ui->syncWord, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_syncWord_editingFinished); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &ChirpChatModGUI::on_channelMute_toggled); + QObject::connect(ui->scheme, QOverload::of(&QComboBox::currentIndexChanged), this, &ChirpChatModGUI::on_scheme_currentIndexChanged); + QObject::connect(ui->fecParity, &QDial::valueChanged, this, &ChirpChatModGUI::on_fecParity_valueChanged); + QObject::connect(ui->crc, &QCheckBox::stateChanged, this, &ChirpChatModGUI::on_crc_stateChanged); + QObject::connect(ui->header, &QCheckBox::stateChanged, this, &ChirpChatModGUI::on_header_stateChanged); + QObject::connect(ui->myCall, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_myCall_editingFinished); + QObject::connect(ui->urCall, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_urCall_editingFinished); + QObject::connect(ui->myLocator, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_myLocator_editingFinished); + QObject::connect(ui->report, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_report_editingFinished); + QObject::connect(ui->msgType, QOverload::of(&QComboBox::currentIndexChanged), this, &ChirpChatModGUI::on_msgType_currentIndexChanged); + QObject::connect(ui->resetMessages, &QPushButton::clicked, this, &ChirpChatModGUI::on_resetMessages_clicked); + QObject::connect(ui->playMessage, &QPushButton::clicked, this, &ChirpChatModGUI::on_playMessage_clicked); + QObject::connect(ui->repeatMessage, &QDial::valueChanged, this, &ChirpChatModGUI::on_repeatMessage_valueChanged); + QObject::connect(ui->generateMessages, &QPushButton::clicked, this, &ChirpChatModGUI::on_generateMessages_clicked); + QObject::connect(ui->messageText, &CustomTextEdit::editingFinished, this, &ChirpChatModGUI::on_messageText_editingFinished); + QObject::connect(ui->hexText, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_hexText_editingFinished); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &ChirpChatModGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &ChirpChatModGUI::on_udpPort_editingFinished); +} diff --git a/plugins/channeltx/modchirpchat/chirpchatmodgui.h b/plugins/channeltx/modchirpchat/chirpchatmodgui.h index 38d776cf5..5a7ae7fa2 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmodgui.h +++ b/plugins/channeltx/modchirpchat/chirpchatmodgui.h @@ -46,6 +46,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -77,6 +83,7 @@ private: void displayBinaryMessage(); void setBandwidths(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modchirpchat/chirpchatmodgui.ui b/plugins/channeltx/modchirpchat/chirpchatmodgui.ui index 96eee61b2..f6b917abf 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmodgui.ui +++ b/plugins/channeltx/modchirpchat/chirpchatmodgui.ui @@ -1,7 +1,7 @@ ChirpChatModGUI - + 0 @@ -1198,9 +1198,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modchirpchat/chirpchatmodsettings.cpp b/plugins/channeltx/modchirpchat/chirpchatmodsettings.cpp index ad5669490..6d3c28ee6 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmodsettings.cpp +++ b/plugins/channeltx/modchirpchat/chirpchatmodsettings.cpp @@ -93,6 +93,7 @@ void ChirpChatModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; setDefaultTemplates(); } @@ -201,6 +202,9 @@ QByteArray ChirpChatModSettings::serialize() const s.writeBlob(59, m_rollupState->serialize()); } + s.writeS32(60, m_workspaceIndex); + s.writeBlob(61, m_geometryBytes); + return s.final(); } @@ -305,6 +309,9 @@ bool ChirpChatModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(60, &m_workspaceIndex, 0); + d.readBlob(61, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modchirpchat/chirpchatmodsettings.h b/plugins/channeltx/modchirpchat/chirpchatmodsettings.h index aee95ce76..710055d42 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmodsettings.h +++ b/plugins/channeltx/modchirpchat/chirpchatmodsettings.h @@ -88,6 +88,8 @@ struct ChirpChatModSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channeltx/moddatv/datvmodgui.cpp b/plugins/channeltx/moddatv/datvmodgui.cpp index 52cdb9753..3d83a96b6 100644 --- a/plugins/channeltx/moddatv/datvmodgui.cpp +++ b/plugins/channeltx/moddatv/datvmodgui.cpp @@ -63,10 +63,11 @@ DATVModGUI::DATVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS m_tickCount(0), m_enableNavTime(false) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/moddatv/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_datvMod = (DATVMod*) channelTx; @@ -107,6 +108,7 @@ DATVModGUI::DATVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS #endif displaySettings(); + makeUIConnections(); applySettings(true); if (!m_settings.m_tsFileName.isEmpty()) configureTsFileName(); @@ -473,7 +475,7 @@ void DATVModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -501,6 +503,7 @@ void DATVModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -552,6 +555,7 @@ void DATVModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -581,7 +585,7 @@ void DATVModGUI::displaySettings() ui->udpAddress->setText(m_settings.m_udpAddress); ui->udpPort->setValue(m_settings.m_udpPort); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -662,3 +666,21 @@ void DATVModGUI::updateWithStreamTime() } } +void DATVModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &DATVModGUI::on_deltaFrequency_changed); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &DATVModGUI::on_channelMute_toggled); + QObject::connect(ui->dvbStandard, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVModGUI::on_dvbStandard_currentIndexChanged); + QObject::connect(ui->symbolRate, QOverload::of(&QSpinBox::valueChanged), this, &DATVModGUI::on_symbolRate_valueChanged); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &DATVModGUI::on_rfBW_valueChanged); + QObject::connect(ui->fec, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVModGUI::on_fec_currentIndexChanged); + QObject::connect(ui->modulation, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVModGUI::on_modulation_currentIndexChanged); + QObject::connect(ui->rollOff, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVModGUI::on_rollOff_currentIndexChanged); + QObject::connect(ui->inputSelect, QOverload::of(&QComboBox::currentIndexChanged), this, &DATVModGUI::on_inputSelect_currentIndexChanged); + QObject::connect(ui->tsFileDialog, &QPushButton::clicked, this, &DATVModGUI::on_tsFileDialog_clicked); + QObject::connect(ui->playFile, &ButtonSwitch::toggled, this, &DATVModGUI::on_playFile_toggled); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &DATVModGUI::on_playLoop_toggled); + QObject::connect(ui->navTimeSlider, &QSlider::valueChanged, this, &DATVModGUI::on_navTimeSlider_valueChanged); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &DATVModGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, QOverload::of(&QSpinBox::valueChanged), this, &DATVModGUI::on_udpPort_valueChanged); +} diff --git a/plugins/channeltx/moddatv/datvmodgui.h b/plugins/channeltx/moddatv/datvmodgui.h index 5ddc6f102..0259aafa8 100644 --- a/plugins/channeltx/moddatv/datvmodgui.h +++ b/plugins/channeltx/moddatv/datvmodgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -86,6 +92,8 @@ private: void updateWithStreamTime(); void setChannelMarkerBandwidth(); bool handleMessage(const Message& message); + void makeUIConnections(); + void updateFEC(); void leaveEvent(QEvent*); diff --git a/plugins/channeltx/moddatv/datvmodgui.ui b/plugins/channeltx/moddatv/datvmodgui.ui index f2d92648c..1d69e20b9 100644 --- a/plugins/channeltx/moddatv/datvmodgui.ui +++ b/plugins/channeltx/moddatv/datvmodgui.ui @@ -1,7 +1,7 @@ DATVModGUI - + 0 @@ -794,9 +794,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/moddatv/datvmodsettings.cpp b/plugins/channeltx/moddatv/datvmodsettings.cpp index ee5fda37c..9428bbbd5 100644 --- a/plugins/channeltx/moddatv/datvmodsettings.cpp +++ b/plugins/channeltx/moddatv/datvmodsettings.cpp @@ -57,6 +57,7 @@ void DATVModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray DATVModSettings::serialize() const @@ -93,6 +94,9 @@ QByteArray DATVModSettings::serialize() const s.writeBlob(29, m_rollupState->serialize()); } + s.writeS32(30, m_workspaceIndex); + s.writeBlob(31, m_geometryBytes); + return s.final(); } @@ -163,6 +167,9 @@ bool DATVModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(30, &m_workspaceIndex, 0); + d.readBlob(31, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/moddatv/datvmodsettings.h b/plugins/channeltx/moddatv/datvmodsettings.h index 9fe609747..985558e48 100644 --- a/plugins/channeltx/moddatv/datvmodsettings.h +++ b/plugins/channeltx/moddatv/datvmodsettings.h @@ -97,6 +97,8 @@ struct DATVModSettings uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; DATVModSettings(); void resetToDefaults(); diff --git a/plugins/channeltx/modfreedv/freedvmodgui.cpp b/plugins/channeltx/modfreedv/freedvmodgui.cpp index e0de4cd92..be987aa4b 100644 --- a/plugins/channeltx/modfreedv/freedvmodgui.cpp +++ b/plugins/channeltx/modfreedv/freedvmodgui.cpp @@ -284,7 +284,7 @@ void FreeDVModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -312,6 +312,7 @@ void FreeDVModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -349,10 +350,11 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_tickCount(0), m_enableNavTime(false) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modfreedv/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_freeDVMod = (FreeDVMod*) channelTx; @@ -397,6 +399,7 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_freeDVMod->setLevelMeter(ui->volumeMeter); displaySettings(); + makeUIConnections(); applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true) } @@ -460,6 +463,7 @@ void FreeDVModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -501,7 +505,7 @@ void FreeDVModGUI::displaySettings() ui->play->setChecked(m_settings.m_modAFInput == FreeDVModSettings::FreeDVModInputAF::FreeDVModInputFile); ui->morseKeyer->setChecked(m_settings.m_modAFInput == FreeDVModSettings::FreeDVModInputAF::FreeDVModInputCWTone); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -596,3 +600,20 @@ void FreeDVModGUI::updateWithStreamTime() ui->navTimeSlider->setValue((int) (posRatio * 100.0)); } } + +void FreeDVModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &FreeDVModGUI::on_deltaFrequency_changed); + QObject::connect(ui->gaugeInput, &QCheckBox::toggled, this, &FreeDVModGUI::on_gaugeInput_toggled); + QObject::connect(ui->volume, &QDial::valueChanged, this, &FreeDVModGUI::on_volume_valueChanged); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &FreeDVModGUI::on_audioMute_toggled); + QObject::connect(ui->freeDVMode, QOverload::of(&QComboBox::currentIndexChanged), this, &FreeDVModGUI::on_freeDVMode_currentIndexChanged); + QObject::connect(ui->tone, &ButtonSwitch::toggled, this, &FreeDVModGUI::on_tone_toggled); + QObject::connect(ui->toneFrequency, &QDial::valueChanged, this, &FreeDVModGUI::on_toneFrequency_valueChanged); + QObject::connect(ui->mic, &ButtonSwitch::toggled, this, &FreeDVModGUI::on_mic_toggled); + QObject::connect(ui->play, &ButtonSwitch::toggled, this, &FreeDVModGUI::on_play_toggled); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &FreeDVModGUI::on_playLoop_toggled); + QObject::connect(ui->morseKeyer, &ButtonSwitch::toggled, this, &FreeDVModGUI::on_morseKeyer_toggled); + QObject::connect(ui->navTimeSlider, &QSlider::valueChanged, this, &FreeDVModGUI::on_navTimeSlider_valueChanged); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &FreeDVModGUI::on_showFileDialog_clicked); +} diff --git a/plugins/channeltx/modfreedv/freedvmodgui.h b/plugins/channeltx/modfreedv/freedvmodgui.h index 09fbe3dc9..ed7277ed9 100644 --- a/plugins/channeltx/modfreedv/freedvmodgui.h +++ b/plugins/channeltx/modfreedv/freedvmodgui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -89,6 +95,7 @@ private: void updateWithStreamTime(); void channelMarkerUpdate(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modfreedv/freedvmodgui.ui b/plugins/channeltx/modfreedv/freedvmodgui.ui index bd4dc6062..cd10b32e3 100644 --- a/plugins/channeltx/modfreedv/freedvmodgui.ui +++ b/plugins/channeltx/modfreedv/freedvmodgui.ui @@ -1,7 +1,7 @@ FreeDVModGUI - + 0 @@ -718,9 +718,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modfreedv/freedvmodsettings.cpp b/plugins/channeltx/modfreedv/freedvmodsettings.cpp index 051a52309..1514fd198 100644 --- a/plugins/channeltx/modfreedv/freedvmodsettings.cpp +++ b/plugins/channeltx/modfreedv/freedvmodsettings.cpp @@ -51,6 +51,7 @@ void FreeDVModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray FreeDVModSettings::serialize() const @@ -94,6 +95,9 @@ QByteArray FreeDVModSettings::serialize() const s.writeBlob(28, m_rollupState->serialize()); } + s.writeS32(29, m_workspaceIndex); + s.writeBlob(30, m_geometryBytes); + return s.final(); } @@ -181,6 +185,9 @@ bool FreeDVModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(29, &m_workspaceIndex, 0); + d.readBlob(30, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modfreedv/freedvmodsettings.h b/plugins/channeltx/modfreedv/freedvmodsettings.h index a58635433..1195c894f 100644 --- a/plugins/channeltx/modfreedv/freedvmodsettings.h +++ b/plugins/channeltx/modfreedv/freedvmodsettings.h @@ -66,6 +66,8 @@ struct FreeDVModSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/channeltx/modnfm/nfmmodgui.cpp b/plugins/channeltx/modnfm/nfmmodgui.cpp index 267f0882a..9aacf2b30 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.cpp +++ b/plugins/channeltx/modnfm/nfmmodgui.cpp @@ -343,7 +343,7 @@ void NFMModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -370,6 +370,7 @@ void NFMModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -408,7 +409,8 @@ NFMModGUI::NFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_enableNavTime(false), m_dcsCodeValidator(QRegExp("[0-7]{1,3}")) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modnfm/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); @@ -422,7 +424,7 @@ NFMModGUI::NFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam ui->channelSpacing->setCurrentIndex(NFMModSettings::getChannelSpacingIndex(25000)); ui->channelSpacing->blockSignals(false); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_nfmMod = (NFMMod*) channelTx; @@ -474,6 +476,7 @@ NFMModGUI::NFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_settings.setRollupState(&m_rollupState); displaySettings(); + makeUIConnections(); applySettings(); } @@ -506,6 +509,7 @@ void NFMModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -556,7 +560,7 @@ void NFMModGUI::displaySettings() ui->feedbackVolume->setValue(roundf(m_settings.m_feedbackVolumeFactor * 100.0)); ui->feedbackVolumeText->setText(QString("%1").arg(m_settings.m_feedbackVolumeFactor, 0, 'f', 2)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -677,3 +681,29 @@ void NFMModGUI::updateWithStreamTime() ui->navTimeSlider->setValue((int) (posRatio * 100.0)); } } + +void NFMModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &NFMModGUI::on_deltaFrequency_changed); + QObject::connect(ui->channelSpacingApply, &QPushButton::clicked, this, &NFMModGUI::on_channelSpacingApply_clicked); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &NFMModGUI::on_rfBW_valueChanged); + QObject::connect(ui->afBW, &QSlider::valueChanged, this, &NFMModGUI::on_afBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &NFMModGUI::on_fmDev_valueChanged); + QObject::connect(ui->toneFrequency, &QDial::valueChanged, this, &NFMModGUI::on_toneFrequency_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &NFMModGUI::on_volume_valueChanged); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &NFMModGUI::on_channelMute_toggled); + QObject::connect(ui->tone, &ButtonSwitch::toggled, this, &NFMModGUI::on_tone_toggled); + QObject::connect(ui->morseKeyer, &ButtonSwitch::toggled, this, &NFMModGUI::on_morseKeyer_toggled); + QObject::connect(ui->mic, &ButtonSwitch::toggled, this, &NFMModGUI::on_mic_toggled); + QObject::connect(ui->play, &ButtonSwitch::toggled, this, &NFMModGUI::on_play_toggled); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &NFMModGUI::on_playLoop_toggled); + QObject::connect(ui->navTimeSlider, &QSlider::valueChanged, this, &NFMModGUI::on_navTimeSlider_valueChanged); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &NFMModGUI::on_showFileDialog_clicked); + QObject::connect(ui->ctcss, QOverload::of(&QComboBox::currentIndexChanged), this, &NFMModGUI::on_ctcss_currentIndexChanged); + QObject::connect(ui->ctcssOn, &QCheckBox::toggled, this, &NFMModGUI::on_ctcssOn_toggled); + QObject::connect(ui->dcsOn, &QCheckBox::toggled, this, &NFMModGUI::on_dcsOn_toggled); + QObject::connect(ui->dcsCode, &QLineEdit::editingFinished, this, &NFMModGUI::on_dcsCode_editingFinished); + QObject::connect(ui->dcsPositive, &QCheckBox::toggled, this, &NFMModGUI::on_dcsPositive_toggled); + QObject::connect(ui->feedbackEnable, &QToolButton::toggled, this, &NFMModGUI::on_feedbackEnable_toggled); + QObject::connect(ui->feedbackVolume, &QDial::valueChanged, this, &NFMModGUI::on_feedbackVolume_valueChanged); +} diff --git a/plugins/channeltx/modnfm/nfmmodgui.h b/plugins/channeltx/modnfm/nfmmodgui.h index d0c3f1a26..5d386b285 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.h +++ b/plugins/channeltx/modnfm/nfmmodgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -86,6 +92,7 @@ private: void updateWithStreamData(); void updateWithStreamTime(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modnfm/nfmmodgui.ui b/plugins/channeltx/modnfm/nfmmodgui.ui index 732e4b8f7..925309b4d 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.ui +++ b/plugins/channeltx/modnfm/nfmmodgui.ui @@ -1,7 +1,7 @@ NFMModGUI - + 0 @@ -928,9 +928,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modnfm/nfmmodsettings.cpp b/plugins/channeltx/modnfm/nfmmodsettings.cpp index a60ddc885..8344c59bf 100644 --- a/plugins/channeltx/modnfm/nfmmodsettings.cpp +++ b/plugins/channeltx/modnfm/nfmmodsettings.cpp @@ -79,6 +79,7 @@ void NFMModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray NFMModSettings::serialize() const @@ -125,6 +126,9 @@ QByteArray NFMModSettings::serialize() const s.writeBlob(27, m_rollupState->serialize()); } + s.writeS32(28, m_workspaceIndex); + s.writeBlob(29, m_geometryBytes); + return s.final(); } @@ -208,6 +212,9 @@ bool NFMModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(28, &m_workspaceIndex, 0); + d.readBlob(29, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modnfm/nfmmodsettings.h b/plugins/channeltx/modnfm/nfmmodsettings.h index 82c60ece5..bc74e4c99 100644 --- a/plugins/channeltx/modnfm/nfmmodsettings.h +++ b/plugins/channeltx/modnfm/nfmmodsettings.h @@ -67,6 +67,8 @@ struct NFMModSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_cwKeyerGUI; diff --git a/plugins/channeltx/modpacket/packetmodgui.cpp b/plugins/channeltx/modpacket/packetmodgui.cpp index 368782df5..2c309a80f 100644 --- a/plugins/channeltx/modpacket/packetmodgui.cpp +++ b/plugins/channeltx/modpacket/packetmodgui.cpp @@ -368,7 +368,7 @@ void PacketModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -395,6 +395,7 @@ void PacketModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -425,11 +426,12 @@ PacketModGUI::PacketModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_channelMarker(this), m_doApplySettings(true) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modpacket/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_packetMod = (PacketMod*) channelTx; @@ -491,6 +493,7 @@ PacketModGUI::PacketModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb ui->spectrumContainer->setVisible(false); displaySettings(); + makeUIConnections(); applySettings(); } @@ -533,6 +536,7 @@ void PacketModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -572,7 +576,7 @@ void PacketModGUI::displaySettings() ui->via->lineEdit()->setText(m_settings.m_via); ui->packet->setText(m_settings.m_data); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -601,3 +605,26 @@ void PacketModGUI::tick() m_channelPowerDbAvg(powDb); ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1)); } + +void PacketModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &PacketModGUI::on_deltaFrequency_changed); + QObject::connect(ui->mode, QOverload::of(&QComboBox::currentIndexChanged), this, &PacketModGUI::on_mode_currentIndexChanged); + QObject::connect(ui->rfBW, &QSlider::valueChanged, this, &PacketModGUI::on_rfBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &PacketModGUI::on_fmDev_valueChanged); + QObject::connect(ui->gain, &QDial::valueChanged, this, &PacketModGUI::on_gain_valueChanged); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &PacketModGUI::on_channelMute_toggled); + QObject::connect(ui->txButton, &QToolButton::clicked, this, &PacketModGUI::on_txButton_clicked); + QObject::connect(ui->callsign, &QLineEdit::editingFinished, this, &PacketModGUI::on_callsign_editingFinished); + QObject::connect(ui->to, &QComboBox::currentTextChanged, this, &PacketModGUI::on_to_currentTextChanged); + QObject::connect(ui->via, &QComboBox::currentTextChanged, this, &PacketModGUI::on_via_currentTextChanged); + QObject::connect(ui->packet, &QLineEdit::editingFinished, this, &PacketModGUI::on_packet_editingFinished); + QObject::connect(ui->insertPosition, &QToolButton::clicked, this, &PacketModGUI::on_insertPosition_clicked); + QObject::connect(ui->packet, &QLineEdit::returnPressed, this, &PacketModGUI::on_packet_returnPressed); + QObject::connect(ui->repeat, &ButtonSwitch::toggled, this, &PacketModGUI::on_repeat_toggled); + QObject::connect(ui->preEmphasis, &ButtonSwitch::toggled, this, &PacketModGUI::on_preEmphasis_toggled); + QObject::connect(ui->bpf, &ButtonSwitch::toggled, this, &PacketModGUI::on_bpf_toggled); + QObject::connect(ui->udpEnabled, &QCheckBox::clicked, this, &PacketModGUI::on_udpEnabled_clicked); + QObject::connect(ui->udpAddress, &QLineEdit::editingFinished, this, &PacketModGUI::on_udpAddress_editingFinished); + QObject::connect(ui->udpPort, &QLineEdit::editingFinished, this, &PacketModGUI::on_udpPort_editingFinished); +} diff --git a/plugins/channeltx/modpacket/packetmodgui.h b/plugins/channeltx/modpacket/packetmodgui.h index 336039d8d..a875801e7 100644 --- a/plugins/channeltx/modpacket/packetmodgui.h +++ b/plugins/channeltx/modpacket/packetmodgui.h @@ -48,6 +48,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -76,6 +82,7 @@ private: void displaySettings(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modpacket/packetmodgui.ui b/plugins/channeltx/modpacket/packetmodgui.ui index 34fea6897..b6d77bc32 100644 --- a/plugins/channeltx/modpacket/packetmodgui.ui +++ b/plugins/channeltx/modpacket/packetmodgui.ui @@ -1,7 +1,7 @@ PacketModGUI - + 0 @@ -871,9 +871,9 @@ APRS examples: - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modpacket/packetmodsettings.cpp b/plugins/channeltx/modpacket/packetmodsettings.cpp index 3c4bc8d8b..4ddb2a678 100644 --- a/plugins/channeltx/modpacket/packetmodsettings.cpp +++ b/plugins/channeltx/modpacket/packetmodsettings.cpp @@ -85,6 +85,7 @@ void PacketModSettings::resetToDefaults() m_udpEnabled = false; m_udpAddress = "127.0.0.1"; m_udpPort = 9998; + m_workspaceIndex = 0; } bool PacketModSettings::setMode(QString mode) @@ -231,6 +232,9 @@ QByteArray PacketModSettings::serialize() const s.writeBlob(54, m_rollupState->serialize()); } + s.writeS32(55, m_workspaceIndex); + s.writeBlob(56, m_geometryBytes); + return s.final(); } @@ -332,6 +336,9 @@ bool PacketModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(55, &m_workspaceIndex, 0); + d.readBlob(56, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modpacket/packetmodsettings.h b/plugins/channeltx/modpacket/packetmodsettings.h index 805ae22f7..c4dad2789 100644 --- a/plugins/channeltx/modpacket/packetmodsettings.h +++ b/plugins/channeltx/modpacket/packetmodsettings.h @@ -83,6 +83,8 @@ struct PacketModSettings QString m_udpAddress; uint16_t m_udpPort; Serializable *m_rollupState; + int m_workspaceIndex; + QByteArray m_geometryBytes; PacketModSettings(); void resetToDefaults(); diff --git a/plugins/channeltx/modssb/ssbmodgui.cpp b/plugins/channeltx/modssb/ssbmodgui.cpp index 4c183a16f..eb1dc3cb7 100644 --- a/plugins/channeltx/modssb/ssbmodgui.cpp +++ b/plugins/channeltx/modssb/ssbmodgui.cpp @@ -348,7 +348,7 @@ void SSBModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -376,6 +376,7 @@ void SSBModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -414,10 +415,11 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_tickCount(0), m_enableNavTime(false) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modssb/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_ssbMod = (SSBMod*) channelTx; @@ -479,6 +481,7 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_iconDSBLSB.addPixmap(QPixmap("://lsb.png"), QIcon::Normal, QIcon::Off); displaySettings(); + makeUIConnections(); applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true) } @@ -648,6 +651,7 @@ void SSBModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -715,7 +719,7 @@ void SSBModGUI::displaySettings() ui->feedbackVolume->setValue(roundf(m_settings.m_feedbackVolumeFactor * 100.0)); ui->feedbackVolumeText->setText(QString("%1").arg(m_settings.m_feedbackVolumeFactor, 0, 'f', 2)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -836,3 +840,29 @@ void SSBModGUI::updateWithStreamTime() ui->navTimeSlider->setValue((int) (posRatio * 100.0)); } } + +void SSBModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &SSBModGUI::on_deltaFrequency_changed); + QObject::connect(ui->flipSidebands, &QPushButton::clicked, this, &SSBModGUI::on_flipSidebands_clicked); + QObject::connect(ui->dsb, &QToolButton::toggled, this, &SSBModGUI::on_dsb_toggled); + QObject::connect(ui->audioBinaural, &QToolButton::toggled, this, &SSBModGUI::on_audioBinaural_toggled); + QObject::connect(ui->audioFlipChannels, &QToolButton::toggled, this, &SSBModGUI::on_audioFlipChannels_toggled); + QObject::connect(ui->BW, &TickedSlider::valueChanged, this, &SSBModGUI::on_BW_valueChanged); + QObject::connect(ui->lowCut, &TickedSlider::valueChanged, this, &SSBModGUI::on_lowCut_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &SSBModGUI::on_volume_valueChanged); + QObject::connect(ui->audioMute, &QToolButton::toggled, this, &SSBModGUI::on_audioMute_toggled); + QObject::connect(ui->tone, &ButtonSwitch::toggled, this, &SSBModGUI::on_tone_toggled); + QObject::connect(ui->toneFrequency, &QDial::valueChanged, this, &SSBModGUI::on_toneFrequency_valueChanged); + QObject::connect(ui->mic, &ButtonSwitch::toggled, this, &SSBModGUI::on_mic_toggled); + QObject::connect(ui->agc, &ButtonSwitch::toggled, this, &SSBModGUI::on_agc_toggled); + QObject::connect(ui->cmpPreGain, &QDial::valueChanged, this, &SSBModGUI::on_cmpPreGain_valueChanged); + QObject::connect(ui->cmpThreshold, &QDial::valueChanged, this, &SSBModGUI::on_cmpThreshold_valueChanged); + QObject::connect(ui->play, &ButtonSwitch::toggled, this, &SSBModGUI::on_play_toggled); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &SSBModGUI::on_playLoop_toggled); + QObject::connect(ui->morseKeyer, &ButtonSwitch::toggled, this, &SSBModGUI::on_morseKeyer_toggled); + QObject::connect(ui->navTimeSlider, &QSlider::valueChanged, this, &SSBModGUI::on_navTimeSlider_valueChanged); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &SSBModGUI::on_showFileDialog_clicked); + QObject::connect(ui->feedbackEnable, &QToolButton::toggled, this, &SSBModGUI::on_feedbackEnable_toggled); + QObject::connect(ui->feedbackVolume, &QDial::valueChanged, this, &SSBModGUI::on_feedbackVolume_valueChanged); +} diff --git a/plugins/channeltx/modssb/ssbmodgui.h b/plugins/channeltx/modssb/ssbmodgui.h index f5159ba7f..3f4e21b8a 100644 --- a/plugins/channeltx/modssb/ssbmodgui.h +++ b/plugins/channeltx/modssb/ssbmodgui.h @@ -49,6 +49,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -92,6 +98,7 @@ private: void updateWithStreamTime(); void channelMarkerUpdate(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modssb/ssbmodgui.ui b/plugins/channeltx/modssb/ssbmodgui.ui index 035a6dbf7..0465fac0a 100644 --- a/plugins/channeltx/modssb/ssbmodgui.ui +++ b/plugins/channeltx/modssb/ssbmodgui.ui @@ -1,7 +1,7 @@ SSBModGUI - + 0 @@ -1245,9 +1245,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modssb/ssbmodsettings.cpp b/plugins/channeltx/modssb/ssbmodsettings.cpp index 7ddfa67ba..14961ea31 100644 --- a/plugins/channeltx/modssb/ssbmodsettings.cpp +++ b/plugins/channeltx/modssb/ssbmodsettings.cpp @@ -75,6 +75,7 @@ void SSBModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray SSBModSettings::serialize() const @@ -127,6 +128,9 @@ QByteArray SSBModSettings::serialize() const s.writeBlob(31, m_rollupState->serialize()); } + s.writeS32(32, m_workspaceIndex); + s.writeBlob(33, m_geometryBytes); + return s.final(); } @@ -219,6 +223,9 @@ bool SSBModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(32, &m_workspaceIndex, 0); + d.readBlob(33, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modssb/ssbmodsettings.h b/plugins/channeltx/modssb/ssbmodsettings.h index dbe67f68a..d1e40115b 100644 --- a/plugins/channeltx/modssb/ssbmodsettings.h +++ b/plugins/channeltx/modssb/ssbmodsettings.h @@ -70,6 +70,8 @@ struct SSBModSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/channeltx/modwfm/wfmmodgui.cpp b/plugins/channeltx/modwfm/wfmmodgui.cpp index 2039b56d6..0ecca32d1 100644 --- a/plugins/channeltx/modwfm/wfmmodgui.cpp +++ b/plugins/channeltx/modwfm/wfmmodgui.cpp @@ -277,7 +277,7 @@ void WFMModGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -305,6 +305,7 @@ void WFMModGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -342,7 +343,8 @@ WFMModGUI::WFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_tickCount(0), m_enableNavTime(false) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/modwfm/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); @@ -356,7 +358,7 @@ WFMModGUI::WFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam blockApplySettings(false); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_wfmMod = (WFMMod*) channelTx; @@ -403,6 +405,7 @@ WFMModGUI::WFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam m_wfmMod->setLevelMeter(ui->volumeMeter); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -438,6 +441,7 @@ void WFMModGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -475,7 +479,7 @@ void WFMModGUI::displaySettings() ui->feedbackVolume->setValue(roundf(m_settings.m_feedbackVolumeFactor * 100.0)); ui->feedbackVolumeText->setText(QString("%1").arg(m_settings.m_feedbackVolumeFactor, 0, 'f', 2)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -596,3 +600,23 @@ void WFMModGUI::updateWithStreamTime() ui->navTimeSlider->setValue((int) (posRatio * 100.0)); } } + +void WFMModGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &WFMModGUI::on_deltaFrequency_changed); + QObject::connect(ui->rfBW, QOverload::of(&QComboBox::currentIndexChanged), this, &WFMModGUI::on_rfBW_currentIndexChanged); + QObject::connect(ui->afBW, &QSlider::valueChanged, this, &WFMModGUI::on_afBW_valueChanged); + QObject::connect(ui->fmDev, &QSlider::valueChanged, this, &WFMModGUI::on_fmDev_valueChanged); + QObject::connect(ui->toneFrequency, &QDial::valueChanged, this, &WFMModGUI::on_toneFrequency_valueChanged); + QObject::connect(ui->volume, &QDial::valueChanged, this, &WFMModGUI::on_volume_valueChanged); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &WFMModGUI::on_channelMute_toggled); + QObject::connect(ui->tone, &ButtonSwitch::toggled, this, &WFMModGUI::on_tone_toggled); + QObject::connect(ui->morseKeyer, &ButtonSwitch::toggled, this, &WFMModGUI::on_morseKeyer_toggled); + QObject::connect(ui->mic, &ButtonSwitch::toggled, this, &WFMModGUI::on_mic_toggled); + QObject::connect(ui->play, &ButtonSwitch::toggled, this, &WFMModGUI::on_play_toggled); + QObject::connect(ui->playLoop, &ButtonSwitch::toggled, this, &WFMModGUI::on_playLoop_toggled); + QObject::connect(ui->navTimeSlider, &QSlider::valueChanged, this, &WFMModGUI::on_navTimeSlider_valueChanged); + QObject::connect(ui->showFileDialog, &QPushButton::clicked, this, &WFMModGUI::on_showFileDialog_clicked); + QObject::connect(ui->feedbackEnable, &QToolButton::toggled, this, &WFMModGUI::on_feedbackEnable_toggled); + QObject::connect(ui->feedbackVolume, &QDial::valueChanged, this, &WFMModGUI::on_feedbackVolume_valueChanged); +} diff --git a/plugins/channeltx/modwfm/wfmmodgui.h b/plugins/channeltx/modwfm/wfmmodgui.h index f85465ab5..8188452dc 100644 --- a/plugins/channeltx/modwfm/wfmmodgui.h +++ b/plugins/channeltx/modwfm/wfmmodgui.h @@ -46,6 +46,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -82,6 +88,7 @@ private: void updateWithStreamData(); void updateWithStreamTime(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/modwfm/wfmmodgui.ui b/plugins/channeltx/modwfm/wfmmodgui.ui index 919a97c37..9183b2492 100644 --- a/plugins/channeltx/modwfm/wfmmodgui.ui +++ b/plugins/channeltx/modwfm/wfmmodgui.ui @@ -1,7 +1,7 @@ WFMModGUI - + 0 @@ -765,9 +765,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/modwfm/wfmmodsettings.cpp b/plugins/channeltx/modwfm/wfmmodsettings.cpp index 3bebd733b..bff6853a9 100644 --- a/plugins/channeltx/modwfm/wfmmodsettings.cpp +++ b/plugins/channeltx/modwfm/wfmmodsettings.cpp @@ -60,6 +60,7 @@ void WFMModSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray WFMModSettings::serialize() const @@ -101,6 +102,9 @@ QByteArray WFMModSettings::serialize() const s.writeBlob(22, m_rollupState->serialize()); } + s.writeS32(23, m_workspaceIndex); + s.writeBlob(24, m_geometryBytes); + return s.final(); } @@ -177,6 +181,9 @@ bool WFMModSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(23, &m_workspaceIndex, 0); + d.readBlob(24, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/modwfm/wfmmodsettings.h b/plugins/channeltx/modwfm/wfmmodsettings.h index 6d6dbb457..c17fff830 100644 --- a/plugins/channeltx/modwfm/wfmmodsettings.h +++ b/plugins/channeltx/modwfm/wfmmodsettings.h @@ -59,6 +59,8 @@ struct WFMModSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_cwKeyerGUI; diff --git a/plugins/channeltx/remotesource/remotesourcegui.cpp b/plugins/channeltx/remotesource/remotesourcegui.cpp index 998d2110f..a8e5a0461 100644 --- a/plugins/channeltx/remotesource/remotesourcegui.cpp +++ b/plugins/channeltx/remotesource/remotesourcegui.cpp @@ -168,11 +168,11 @@ RemoteSourceGUI::RemoteSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, m_resetCounts(true), m_tickCount(0) { - (void) channelTx; - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/remotesource/readme.md"; setAttribute(Qt::WA_DeleteOnClose, true); - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); m_remoteSrc = (RemoteSource*) channelTx; @@ -200,6 +200,7 @@ RemoteSourceGUI::RemoteSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, m_time.start(); displaySettings(); + makeUIConnections(); displayPosition(); displayRateAndShift(); applySettings(true); @@ -237,12 +238,13 @@ void RemoteSourceGUI::displaySettings() setTitleColor(m_settings.m_rgbColor); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); ui->dataAddress->setText(m_settings.m_dataAddress); ui->dataPort->setText(tr("%1").arg(m_settings.m_dataPort)); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -302,7 +304,7 @@ void RemoteSourceGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -329,6 +331,7 @@ void RemoteSourceGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_settings.m_title); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -483,3 +486,13 @@ void RemoteSourceGUI::tick() void RemoteSourceGUI::channelMarkerChangedByCursor() { } + +void RemoteSourceGUI::makeUIConnections() +{ + QObject::connect(ui->interpolationFactor, QOverload::of(&QComboBox::currentIndexChanged), this, &RemoteSourceGUI::on_interpolationFactor_currentIndexChanged); + QObject::connect(ui->position, &QSlider::valueChanged, this, &RemoteSourceGUI::on_position_valueChanged); + QObject::connect(ui->dataAddress, &QLineEdit::returnPressed, this, &RemoteSourceGUI::on_dataAddress_returnPressed); + QObject::connect(ui->dataPort, &QLineEdit::returnPressed, this, &RemoteSourceGUI::on_dataPort_returnPressed); + QObject::connect(ui->dataApplyButton, &QPushButton::clicked, this, &RemoteSourceGUI::on_dataApplyButton_clicked); + QObject::connect(ui->eventCountsReset, &QPushButton::clicked, this, &RemoteSourceGUI::on_eventCountsReset_clicked); +} diff --git a/plugins/channeltx/remotesource/remotesourcegui.h b/plugins/channeltx/remotesource/remotesourcegui.h index daca3cd25..340d7ad86 100644 --- a/plugins/channeltx/remotesource/remotesourcegui.h +++ b/plugins/channeltx/remotesource/remotesourcegui.h @@ -47,6 +47,12 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -86,6 +92,7 @@ private: void displayPosition(); void displayStreamIndex(); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/remotesource/remotesourcegui.ui b/plugins/channeltx/remotesource/remotesourcegui.ui index 81d1463f1..7409712b6 100644 --- a/plugins/channeltx/remotesource/remotesourcegui.ui +++ b/plugins/channeltx/remotesource/remotesourcegui.ui @@ -1,7 +1,7 @@ RemoteSourceGUI - + 0 @@ -589,9 +589,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/remotesource/remotesourcesettings.cpp b/plugins/channeltx/remotesource/remotesourcesettings.cpp index d0fcbfe21..d8a5d7b96 100644 --- a/plugins/channeltx/remotesource/remotesourcesettings.cpp +++ b/plugins/channeltx/remotesource/remotesourcesettings.cpp @@ -44,6 +44,7 @@ void RemoteSourceSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray RemoteSourceSettings::serialize() const @@ -71,6 +72,9 @@ QByteArray RemoteSourceSettings::serialize() const s.writeBlob(14, m_channelMarker->serialize()); } + s.writeS32(15, m_workspaceIndex); + s.writeBlob(16, m_geometryBytes); + return s.final(); } @@ -132,6 +136,9 @@ bool RemoteSourceSettings::deserialize(const QByteArray& data) m_channelMarker->deserialize(bytetmp); } + d.readS32(15, &m_workspaceIndex, 0); + d.readBlob(16, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/remotesource/remotesourcesettings.h b/plugins/channeltx/remotesource/remotesourcesettings.h index aff6a0426..1bb40ffdd 100644 --- a/plugins/channeltx/remotesource/remotesourcesettings.h +++ b/plugins/channeltx/remotesource/remotesourcesettings.h @@ -37,6 +37,8 @@ struct RemoteSourceSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_rollupState; diff --git a/plugins/channeltx/udpsource/udpsourcegui.cpp b/plugins/channeltx/udpsource/udpsourcegui.cpp index 905a8cd4c..500c51e50 100644 --- a/plugins/channeltx/udpsource/udpsourcegui.cpp +++ b/plugins/channeltx/udpsource/udpsourcegui.cpp @@ -107,9 +107,10 @@ UDPSourceGUI::UDPSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_rfBandwidthChanged(false), m_doApplySettings(true) { - ui->setupUi(this); + ui->setupUi(getRollupContents()); + getRollupContents()->arrangeRollups(); m_helpURL = "plugins/channeltx/udpsource/readme.md"; - connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(getRollupContents(), SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &))); setAttribute(Qt::WA_DeleteOnClose, true); @@ -154,6 +155,7 @@ UDPSourceGUI::UDPSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_settings.setRollupState(&m_rollupState); displaySettings(); + makeUIConnections(); applySettings(true); } @@ -193,7 +195,8 @@ void UDPSourceGUI::displaySettings() m_channelMarker.setColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor); - this->setWindowTitle(m_channelMarker.getTitle()); + setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); displayStreamIndex(); blockApplySettings(true); @@ -236,7 +239,7 @@ void UDPSourceGUI::displaySettings() ui->applyBtn->setEnabled(false); ui->applyBtn->setStyleSheet("QPushButton { background:rgb(79,79,79); }"); - restoreState(m_rollupState); + getRollupContents()->restoreState(m_rollupState); blockApplySettings(false); } @@ -472,7 +475,7 @@ void UDPSourceGUI::onWidgetRolled(QWidget* widget, bool rollDown) m_udpSource->setSpectrum(rollDown); } - saveState(m_rollupState); + getRollupContents()->saveState(m_rollupState); applySettings(); } @@ -499,6 +502,7 @@ void UDPSourceGUI::onMenuDialogCalled(const QPoint &p) m_settings.m_reverseAPIChannelIndex = dialog.getReverseAPIChannelIndex(); setWindowTitle(m_channelMarker.getTitle()); + setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); applySettings(); @@ -637,3 +641,25 @@ void UDPSourceGUI::setSampleFormat(int index) } } +void UDPSourceGUI::makeUIConnections() +{ + QObject::connect(ui->deltaFrequency, &ValueDialZ::changed, this, &UDPSourceGUI::on_deltaFrequency_changed); + QObject::connect(ui->sampleFormat, QOverload::of(&QComboBox::currentIndexChanged), this, &UDPSourceGUI::on_sampleFormat_currentIndexChanged); + QObject::connect(ui->localUDPAddress, &QLineEdit::editingFinished, this, &UDPSourceGUI::on_localUDPAddress_editingFinished); + QObject::connect(ui->localUDPPort, &QLineEdit::editingFinished, this, &UDPSourceGUI::on_localUDPPort_editingFinished); + QObject::connect(ui->multicastAddress, &QLineEdit::editingFinished, this, &UDPSourceGUI::on_multicastAddress_editingFinished); + QObject::connect(ui->multicastJoin, &ButtonSwitch::toggled, this, &UDPSourceGUI::on_multicastJoin_toggled); + QObject::connect(ui->sampleRate, &QLineEdit::textEdited, this, &UDPSourceGUI::on_sampleRate_textEdited); + QObject::connect(ui->rfBandwidth, &QLineEdit::textEdited, this, &UDPSourceGUI::on_rfBandwidth_textEdited); + QObject::connect(ui->fmDeviation, &QLineEdit::textEdited, this, &UDPSourceGUI::on_fmDeviation_textEdited); + QObject::connect(ui->amModPercent, &QLineEdit::textEdited, this, &UDPSourceGUI::on_amModPercent_textEdited); + QObject::connect(ui->applyBtn, &QPushButton::clicked, this, &UDPSourceGUI::on_applyBtn_clicked); + QObject::connect(ui->gainIn, &QDial::valueChanged, this, &UDPSourceGUI::on_gainIn_valueChanged); + QObject::connect(ui->gainOut, &QDial::valueChanged, this, &UDPSourceGUI::on_gainOut_valueChanged); + QObject::connect(ui->squelch, &QSlider::valueChanged, this, &UDPSourceGUI::on_squelch_valueChanged); + QObject::connect(ui->squelchGate, &QDial::valueChanged, this, &UDPSourceGUI::on_squelchGate_valueChanged); + QObject::connect(ui->channelMute, &QToolButton::toggled, this, &UDPSourceGUI::on_channelMute_toggled); + QObject::connect(ui->resetUDPReadIndex, &QPushButton::clicked, this, &UDPSourceGUI::on_resetUDPReadIndex_clicked); + QObject::connect(ui->autoRWBalance, &ButtonSwitch::toggled, this, &UDPSourceGUI::on_autoRWBalance_toggled); + QObject::connect(ui->stereoInput, &QToolButton::toggled, this, &UDPSourceGUI::on_stereoInput_toggled); +} diff --git a/plugins/channeltx/udpsource/udpsourcegui.h b/plugins/channeltx/udpsource/udpsourcegui.h index d20614aa5..372fd6b99 100644 --- a/plugins/channeltx/udpsource/udpsourcegui.h +++ b/plugins/channeltx/udpsource/udpsourcegui.h @@ -49,6 +49,12 @@ public: virtual QByteArray serialize() const; virtual bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + virtual void setWorkspaceIndex(int index) { m_settings.m_workspaceIndex = index; }; + virtual int getWorkspaceIndex() const { return m_settings.m_workspaceIndex; }; + virtual void setGeometryBytes(const QByteArray& blob) { m_settings.m_geometryBytes = blob; }; + virtual QByteArray getGeometryBytes() const { return m_settings.m_geometryBytes; }; + virtual QString getTitle() const { return m_settings.m_title; }; + virtual QColor getTitleColor() const { return m_settings.m_rgbColor; }; public slots: void channelMarkerChangedByCursor(); @@ -81,6 +87,7 @@ private: void setSampleFormat(int index); void setSampleFormatIndex(const UDPSourceSettings::SampleFormat& sampleFormat); bool handleMessage(const Message& message); + void makeUIConnections(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/udpsource/udpsourcegui.ui b/plugins/channeltx/udpsource/udpsourcegui.ui index 95764c265..ee3d3a970 100644 --- a/plugins/channeltx/udpsource/udpsourcegui.ui +++ b/plugins/channeltx/udpsource/udpsourcegui.ui @@ -1,7 +1,7 @@ UDPSourceGUI - + 0 @@ -1040,9 +1040,9 @@ - RollupWidget + RollupContents QWidget -
gui/rollupwidget.h
+
gui/rollupcontents.h
1
diff --git a/plugins/channeltx/udpsource/udpsourcesettings.cpp b/plugins/channeltx/udpsource/udpsourcesettings.cpp index 5254a3e0d..b270d7707 100644 --- a/plugins/channeltx/udpsource/udpsourcesettings.cpp +++ b/plugins/channeltx/udpsource/udpsourcesettings.cpp @@ -60,6 +60,7 @@ void UDPSourceSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_workspaceIndex = 0; } QByteArray UDPSourceSettings::serialize() const @@ -102,6 +103,9 @@ QByteArray UDPSourceSettings::serialize() const s.writeBlob(27, m_rollupState->serialize()); } + s.writeS32(28, m_workspaceIndex); + s.writeBlob(29, m_geometryBytes); + return s.final(); } @@ -195,6 +199,9 @@ bool UDPSourceSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } + d.readS32(28, &m_workspaceIndex, 0); + d.readBlob(29, &m_geometryBytes); + return true; } else diff --git a/plugins/channeltx/udpsource/udpsourcesettings.h b/plugins/channeltx/udpsource/udpsourcesettings.h index e971db7ad..1b02f8fcf 100644 --- a/plugins/channeltx/udpsource/udpsourcesettings.h +++ b/plugins/channeltx/udpsource/udpsourcesettings.h @@ -67,6 +67,8 @@ struct UDPSourceSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_workspaceIndex; + QByteArray m_geometryBytes; Serializable *m_channelMarker; Serializable *m_spectrumGUI; diff --git a/plugins/feature/ais/aisgui.cpp b/plugins/feature/ais/aisgui.cpp index e480f9223..455d52f9b 100644 --- a/plugins/feature/ais/aisgui.cpp +++ b/plugins/feature/ais/aisgui.cpp @@ -166,7 +166,6 @@ void AISGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) widget; (void) rollDown; - shrinkWindow(); getRollupContents()->saveState(m_rollupState); applySettings(); } diff --git a/plugins/feature/ais/aissettings.cpp b/plugins/feature/ais/aissettings.cpp index bdc7145f9..552543bcb 100644 --- a/plugins/feature/ais/aissettings.cpp +++ b/plugins/feature/ais/aissettings.cpp @@ -72,8 +72,8 @@ QByteArray AISSettings::serialize() const s.writeBlob(27, m_rollupState->serialize()); } - s.writeS32(27, m_workspaceIndex); - s.writeBlob(28, m_geometryBytes); + s.writeS32(28, m_workspaceIndex); + s.writeBlob(29, m_geometryBytes); for (int i = 0; i < AIS_VESSEL_COLUMNS; i++) { s.writeS32(300 + i, m_vesselColumnIndexes[i]); @@ -126,8 +126,8 @@ bool AISSettings::deserialize(const QByteArray& data) m_rollupState->deserialize(bytetmp); } - d.readS32(27, &m_workspaceIndex, 0); - d.readBlob(28, &m_geometryBytes); + d.readS32(28, &m_workspaceIndex, 0); + d.readBlob(29, &m_geometryBytes); for (int i = 0; i < AIS_VESSEL_COLUMNS; i++) { d.readS32(300 + i, &m_vesselColumnIndexes[i], i); diff --git a/plugins/feature/demodanalyzer/demodanalyzergui.ui b/plugins/feature/demodanalyzer/demodanalyzergui.ui index 6b4316257..a4ca773de 100644 --- a/plugins/feature/demodanalyzer/demodanalyzergui.ui +++ b/plugins/feature/demodanalyzer/demodanalyzergui.ui @@ -36,10 +36,16 @@ 0 10 - 631 + 718 41 + + + 718 + 0 + + Settings @@ -262,7 +268,7 @@ - 716 + 718 0 @@ -287,6 +293,12 @@ + + + 0 + 0 + + 200 @@ -323,7 +335,7 @@ - 716 + 718 0 @@ -348,6 +360,12 @@ + + + 0 + 0 + + 200 diff --git a/plugins/feature/map/map.cpp b/plugins/feature/map/map.cpp index 259ca4dfd..b7f2a66c1 100644 --- a/plugins/feature/map/map.cpp +++ b/plugins/feature/map/map.cpp @@ -110,7 +110,7 @@ bool Map::handleMessage(const Message& cmd) } else if (MainCore::MsgMapItem::match(cmd)) { - qDebug() << "Map::handleMessage: MsgMapItem"; + // qDebug() << "Map::handleMessage: MsgMapItem"; MainCore::MsgMapItem& msgMapItem = (MainCore::MsgMapItem&) cmd; MainCore::MsgMapItem *copy = new MainCore::MsgMapItem(msgMapItem); getMessageQueueToGUI()->push(copy); diff --git a/plugins/feature/pertester/pertestergui.ui b/plugins/feature/pertester/pertestergui.ui index 648ee13db..adc0d8da9 100644 --- a/plugins/feature/pertester/pertestergui.ui +++ b/plugins/feature/pertester/pertestergui.ui @@ -35,7 +35,7 @@
- GS-232 Rotator Controller + Packet Error Rate Tester diff --git a/plugins/samplemimo/testmi/testmigui.cpp b/plugins/samplemimo/testmi/testmigui.cpp index 41fc673c1..173e71eb5 100644 --- a/plugins/samplemimo/testmi/testmigui.cpp +++ b/plugins/samplemimo/testmi/testmigui.cpp @@ -45,6 +45,8 @@ TestMIGui::TestMIGui(DeviceUISet *deviceUISet, QWidget* parent) : ui(new Ui::TestMIGui), m_deviceUISet(deviceUISet), m_settings(), + m_streamIndex(0), + m_spectrumStreamIndex(0), m_doApplySettings(true), m_forceSettings(true), m_sampleMIMO(nullptr), diff --git a/sdrbase/device/deviceapi.cpp b/sdrbase/device/deviceapi.cpp index c8a1448f0..813d243d3 100644 --- a/sdrbase/device/deviceapi.cpp +++ b/sdrbase/device/deviceapi.cpp @@ -819,3 +819,9 @@ void DeviceAPI::renumerateChannels() } } } + +void DeviceAPI::setDeviceSetIndex(int deviceSetIndex) +{ + m_deviceTabIndex = deviceSetIndex; + renumerateChannels(); +} diff --git a/sdrbase/device/deviceapi.h b/sdrbase/device/deviceapi.h index b11766a0d..630ee0ee0 100644 --- a/sdrbase/device/deviceapi.h +++ b/sdrbase/device/deviceapi.h @@ -123,6 +123,7 @@ public: uint32_t getDeviceItemIndex() const { return m_deviceItemIndex; } int getDeviceSetIndex() const { return m_deviceTabIndex; } + void setDeviceSetIndex(int deviceSetIndex); PluginInterface *getPluginInterface() { return m_pluginInterface; } void getDeviceEngineStateStr(QString& state, int subsystemIndex = 0); diff --git a/sdrbase/device/deviceset.h b/sdrbase/device/deviceset.h index c4c981d03..d697f1b85 100644 --- a/sdrbase/device/deviceset.h +++ b/sdrbase/device/deviceset.h @@ -51,6 +51,7 @@ public: int getNumberOfChannels() const { return m_channelInstanceRegistrations.size(); } int getIndex() const { return m_deviceTabIndex; } + void setIndex(int index) { m_deviceTabIndex = index; } void freeChannels(); const ChannelAPI *getChannelAt(int channelIndex) const; ChannelAPI *getChannelAt(int channelIndex); diff --git a/sdrbase/dsp/dspengine.cpp b/sdrbase/dsp/dspengine.cpp index 4685a4707..8db297d79 100644 --- a/sdrbase/dsp/dspengine.cpp +++ b/sdrbase/dsp/dspengine.cpp @@ -40,7 +40,7 @@ DSPEngine::DSPEngine() : DSPEngine::~DSPEngine() { - std::vector::iterator it = m_deviceSourceEngines.begin(); + QList::iterator it = m_deviceSourceEngines.begin(); while (it != m_deviceSourceEngines.end()) { @@ -63,6 +63,7 @@ DSPDeviceSourceEngine *DSPEngine::addDeviceSourceEngine() { m_deviceSourceEngines.push_back(new DSPDeviceSourceEngine(m_deviceSourceEnginesUIDSequence)); m_deviceSourceEnginesUIDSequence++; + m_deviceEngineReferences.push_back(DeviceEngineReference{0, m_deviceSourceEngines.size() - 1}); return m_deviceSourceEngines.back(); } @@ -71,9 +72,18 @@ void DSPEngine::removeLastDeviceSourceEngine() if (m_deviceSourceEngines.size() > 0) { DSPDeviceSourceEngine *lastDeviceEngine = m_deviceSourceEngines.back(); + int lastSourceDeviceEngineIndex = m_deviceSourceEngines.size() - 1; delete lastDeviceEngine; m_deviceSourceEngines.pop_back(); - m_deviceSourceEnginesUIDSequence--; + + for (int i = 0; i < m_deviceEngineReferences.size(); i++) + { + if (m_deviceEngineReferences[i].deviceEngineIndex == lastSourceDeviceEngineIndex) + { + m_deviceEngineReferences.removeAt(i); + break; + } + } } } @@ -81,6 +91,7 @@ DSPDeviceSinkEngine *DSPEngine::addDeviceSinkEngine() { m_deviceSinkEngines.push_back(new DSPDeviceSinkEngine(m_deviceSinkEnginesUIDSequence)); m_deviceSinkEnginesUIDSequence++; + m_deviceEngineReferences.push_back(DeviceEngineReference{1, m_deviceSinkEngines.size() - 1}); return m_deviceSinkEngines.back(); } @@ -89,9 +100,18 @@ void DSPEngine::removeLastDeviceSinkEngine() if (m_deviceSinkEngines.size() > 0) { DSPDeviceSinkEngine *lastDeviceEngine = m_deviceSinkEngines.back(); + int lastSinkDeviceEngineIndex = m_deviceSinkEngines.size() - 1; delete lastDeviceEngine; m_deviceSinkEngines.pop_back(); - m_deviceSinkEnginesUIDSequence--; + + for (int i = 0; i < m_deviceEngineReferences.size(); i++) + { + if (m_deviceEngineReferences[i].deviceEngineIndex == lastSinkDeviceEngineIndex) + { + m_deviceEngineReferences.removeAt(i); + break; + } + } } } @@ -99,6 +119,7 @@ DSPDeviceMIMOEngine *DSPEngine::addDeviceMIMOEngine() { m_deviceMIMOEngines.push_back(new DSPDeviceMIMOEngine(m_deviceMIMOEnginesUIDSequence)); m_deviceMIMOEnginesUIDSequence++; + m_deviceEngineReferences.push_back(DeviceEngineReference{2, m_deviceMIMOEngines.size() - 1}); return m_deviceMIMOEngines.back(); } @@ -107,58 +128,47 @@ void DSPEngine::removeLastDeviceMIMOEngine() if (m_deviceMIMOEngines.size() > 0) { DSPDeviceMIMOEngine *lastDeviceEngine = m_deviceMIMOEngines.back(); + int lastMIMODeviceEngineIndex = m_deviceMIMOEngines.size() - 1; delete lastDeviceEngine; m_deviceMIMOEngines.pop_back(); - m_deviceMIMOEnginesUIDSequence--; + + for (int i = 0; i < m_deviceEngineReferences.size(); i++) + { + if (m_deviceEngineReferences[i].deviceEngineIndex == lastMIMODeviceEngineIndex) + { + m_deviceEngineReferences.removeAt(i); + break; + } + } } } -DSPDeviceSourceEngine *DSPEngine::getDeviceSourceEngineByUID(uint uid) +void DSPEngine::removeDeviceEngineAt(int deviceIndex) { - std::vector::iterator it = m_deviceSourceEngines.begin(); - - while (it != m_deviceSourceEngines.end()) - { - if ((*it)->getUID() == uid) { - return *it; - } - - ++it; + if (deviceIndex >= m_deviceEngineReferences.size()) { + return; } - return nullptr; -} - -DSPDeviceSinkEngine *DSPEngine::getDeviceSinkEngineByUID(uint uid) -{ - std::vector::iterator it = m_deviceSinkEngines.begin(); - - while (it != m_deviceSinkEngines.end()) + if (m_deviceEngineReferences[deviceIndex].deviceEngineTYpe == 0) // source { - if ((*it)->getUID() == uid) { - return *it; - } - - ++it; + DSPDeviceSourceEngine *deviceEngine = m_deviceSourceEngines[m_deviceEngineReferences[deviceIndex].deviceEngineIndex]; + delete deviceEngine; + m_deviceSourceEngines.removeAt(m_deviceEngineReferences[deviceIndex].deviceEngineIndex); + } + else if (m_deviceEngineReferences[deviceIndex].deviceEngineTYpe == 1) // sink + { + DSPDeviceSinkEngine *deviceEngine = m_deviceSinkEngines[m_deviceEngineReferences[deviceIndex].deviceEngineIndex]; + delete deviceEngine; + m_deviceSinkEngines.removeAt(m_deviceEngineReferences[deviceIndex].deviceEngineIndex); + } + else if (m_deviceEngineReferences[deviceIndex].deviceEngineTYpe == 2) // MIMO + { + DSPDeviceMIMOEngine *deviceEngine = m_deviceMIMOEngines[m_deviceEngineReferences[deviceIndex].deviceEngineIndex]; + delete deviceEngine; + m_deviceMIMOEngines.removeAt(m_deviceEngineReferences[deviceIndex].deviceEngineIndex); } - return nullptr; -} - -DSPDeviceMIMOEngine *DSPEngine::getDeviceMIMOEngineByUID(uint uid) -{ - std::vector::iterator it = m_deviceMIMOEngines.begin(); - - while (it != m_deviceMIMOEngines.end()) - { - if ((*it)->getUID() == uid) { - return *it; - } - - ++it; - } - - return nullptr; + m_deviceEngineReferences.removeAt(deviceIndex); } bool DSPEngine::hasDVSerialSupport() @@ -200,4 +210,4 @@ void DSPEngine::createFFTFactory(const QString& fftWisdomFileName) void DSPEngine::preAllocateFFTs() { m_fftFactory->preallocate(7, 10, 1, 0); // pre-acllocate forward FFT only 1 per size from 128 to 1024 -} \ No newline at end of file +} diff --git a/sdrbase/dsp/dspengine.h b/sdrbase/dsp/dspengine.h index 832b68da2..ab8fd1fe7 100644 --- a/sdrbase/dsp/dspengine.h +++ b/sdrbase/dsp/dspengine.h @@ -52,20 +52,19 @@ public: DSPDeviceMIMOEngine *addDeviceMIMOEngine(); void removeLastDeviceMIMOEngine(); + void removeDeviceEngineAt(int deviceIndex); + AudioDeviceManager *getAudioDeviceManager() { return &m_audioDeviceManager; } AMBEEngine *getAMBEEngine() { return &m_ambeEngine; } uint32_t getDeviceSourceEnginesNumber() const { return m_deviceSourceEngines.size(); } - DSPDeviceSourceEngine *getDeviceSourceEngineByIndex(uint deviceIndex) { return m_deviceSourceEngines[deviceIndex]; } - DSPDeviceSourceEngine *getDeviceSourceEngineByUID(uint uid); + DSPDeviceSourceEngine *getDeviceSourceEngineByIndex(unsigned int deviceIndex) { return m_deviceSourceEngines[deviceIndex]; } uint32_t getDeviceSinkEnginesNumber() const { return m_deviceSinkEngines.size(); } - DSPDeviceSinkEngine *getDeviceSinkEngineByIndex(uint deviceIndex) { return m_deviceSinkEngines[deviceIndex]; } - DSPDeviceSinkEngine *getDeviceSinkEngineByUID(uint uid); + DSPDeviceSinkEngine *getDeviceSinkEngineByIndex(unsigned int deviceIndex) { return m_deviceSinkEngines[deviceIndex]; } uint32_t getDeviceMIMOEnginesNumber() const { return m_deviceMIMOEngines.size(); } - DSPDeviceMIMOEngine *getDeviceMIMOEngineByIndex(uint deviceIndex) { return m_deviceMIMOEngines[deviceIndex]; } - DSPDeviceMIMOEngine *getDeviceMIMOEngineByUID(uint uid); + DSPDeviceMIMOEngine *getDeviceMIMOEngineByIndex(unsigned int deviceIndex) { return m_deviceMIMOEngines[deviceIndex]; } // Serial DV methods: @@ -89,12 +88,19 @@ public: FFTFactory *getFFTFactory() { return m_fftFactory; } private: - std::vector m_deviceSourceEngines; - uint m_deviceSourceEnginesUIDSequence; - std::vector m_deviceSinkEngines; - uint m_deviceSinkEnginesUIDSequence; - std::vector m_deviceMIMOEngines; - uint m_deviceMIMOEnginesUIDSequence; + struct DeviceEngineReference + { + int deviceEngineTYpe; //!< 0: Rx, 1: Tx, 2: MIMO + int deviceEngineIndex; + }; + + QList m_deviceSourceEngines; + unsigned int m_deviceSourceEnginesUIDSequence; + QList m_deviceSinkEngines; + unsigned int m_deviceSinkEnginesUIDSequence; + QList m_deviceMIMOEngines; + unsigned int m_deviceMIMOEnginesUIDSequence; + QList m_deviceEngineReferences; AudioDeviceManager m_audioDeviceManager; int m_audioInputDeviceIndex; int m_audioOutputDeviceIndex; diff --git a/sdrbase/maincore.cpp b/sdrbase/maincore.cpp index f1a7f99a5..f504fdbba 100644 --- a/sdrbase/maincore.cpp +++ b/sdrbase/maincore.cpp @@ -24,6 +24,7 @@ #include "feature/featureset.h" #include "feature/feature.h" #include "device/deviceset.h" +#include "device/deviceapi.h" #include "channel/channelapi.h" #include "maincore.h" @@ -197,6 +198,24 @@ void MainCore::removeLastDeviceSet() } } +void MainCore::removeDeviceSet(int deviceSetIndex) +{ + if (deviceSetIndex < (int) m_deviceSets.size()) + { + DeviceSet *deviceSet = m_deviceSets[deviceSetIndex]; + m_deviceSetsMap.remove(deviceSet); + m_deviceSets.erase(m_deviceSets.begin() + deviceSetIndex); + delete deviceSet; + } + + // Renumerate + for (int i = 0; i < (int) m_deviceSets.size(); i++) + { + m_deviceSets[i]->m_deviceAPI->setDeviceSetIndex(i); + m_deviceSets[i]->setIndex(i); + } +} + void MainCore::addChannelInstance(DeviceSet *deviceSet, ChannelAPI *channelAPI) { m_channelsMap.insert(channelAPI, deviceSet); diff --git a/sdrbase/maincore.h b/sdrbase/maincore.h index 1ed670e70..0c1222dd0 100644 --- a/sdrbase/maincore.h +++ b/sdrbase/maincore.h @@ -725,6 +725,7 @@ public: void removeLastFeatureSet(); void appendDeviceSet(int deviceType); void removeLastDeviceSet(); + void removeDeviceSet(int deviceSetIndex); // slave mode - channels void addChannelInstance(DeviceSet *deviceSet, ChannelAPI *channelAPI); void removeChannelInstanceAt(DeviceSet *deviceSet, int channelIndex); diff --git a/sdrbase/settings/configuration.h b/sdrbase/settings/configuration.h index d08d51371..f99e6ed44 100644 --- a/sdrbase/settings/configuration.h +++ b/sdrbase/settings/configuration.h @@ -54,6 +54,7 @@ public: const FeatureSetPreset& getFeatureSetPreset() const { return m_featureSetPreset; } QList& getDeviceSetPresets() { return m_deviceSetPresets; } const QList& getDeviceSetPresets() const { return m_deviceSetPresets; } + int getNumberOfDeviceSetPresets() const { return m_deviceSetPresets.size(); } void clearData(); static bool configCompare(const Configuration *p1, Configuration *p2) diff --git a/sdrgui/channel/channelgui.cpp b/sdrgui/channel/channelgui.cpp index 96088e361..78673e2b1 100644 --- a/sdrgui/channel/channelgui.cpp +++ b/sdrgui/channel/channelgui.cpp @@ -16,12 +16,314 @@ /////////////////////////////////////////////////////////////////////////////////// #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mainwindow.h" +#include "gui/workspaceselectiondialog.h" #include "channelgui.h" +ChannelGUI::ChannelGUI(QWidget *parent) : + QMdiSubWindow(parent), + m_deviceType(DeviceRx), + m_deviceSetIndex(0), + m_channelIndex(0), + m_contextMenuType(ContextMenuNone), + m_drag(false) +{ + qDebug("ChannelGUI::ChannelGUI"); + setWindowFlags(windowFlags() | Qt::FramelessWindowHint); + + m_indexLabel = new QLabel(); + m_indexLabel->setFixedSize(50, 16); + m_indexLabel->setStyleSheet("QLabel { background-color: rgb(128, 128, 128); qproperty-alignment: AlignCenter; }"); + m_indexLabel->setText(tr("X%1:%2").arg(m_deviceSetIndex).arg(m_channelIndex)); + m_indexLabel->setToolTip("Channel index"); + + m_settingsButton = new QPushButton(); + QIcon settingsIcon(":/gear.png"); + m_settingsButton->setIcon(settingsIcon); + m_settingsButton->setToolTip("Common settings"); + + m_titleLabel = new QLabel(); + m_titleLabel->setText("Channel"); + m_titleLabel->setToolTip("Channel name"); + m_titleLabel->setFixedHeight(20); + m_titleLabel->setMinimumWidth(20); + m_titleLabel->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); + + m_helpButton = new QPushButton(); + m_helpButton->setFixedSize(20, 20); + QIcon helpIcon(":/help.png"); + m_helpButton->setIcon(helpIcon); + m_helpButton->setToolTip("Show channel documentation in browser"); + + m_moveButton = new QPushButton(); + m_moveButton->setFixedSize(20, 20); + QIcon moveIcon(":/exit.png"); + m_moveButton->setIcon(moveIcon); + m_moveButton->setToolTip("Move to workspace"); + + m_shrinkButton = new QPushButton(); + m_shrinkButton->setFixedSize(20, 20); + QIcon shrinkIcon(":/shrink.png"); + m_shrinkButton->setIcon(shrinkIcon); + m_shrinkButton->setToolTip("Adjust window to minimum size"); + + m_hideButton = new QPushButton(); + m_hideButton->setFixedSize(20, 20); + QIcon hideIcon(":/hide.png"); + m_hideButton->setIcon(hideIcon); + m_hideButton->setToolTip("Hide channel"); + + m_closeButton = new QPushButton(); + m_closeButton->setFixedSize(20, 20); + QIcon closeIcon(":/cross.png"); + m_closeButton->setIcon(closeIcon); + m_closeButton->setToolTip("Close channel"); + + m_statusLabel = new QLabel(); + // m_statusLabel->setText("OK"); // for future use + m_statusLabel->setFixedHeight(20); + m_statusLabel->setMinimumWidth(20); + m_statusLabel->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); + m_statusLabel->setToolTip("Channel status"); + + m_layouts = new QVBoxLayout(); + m_layouts->setContentsMargins(0, 4, 0, 4); + m_layouts->setSpacing(2); + + m_topLayout = new QHBoxLayout(); + m_topLayout->setContentsMargins(0, 0, 0, 0); + m_topLayout->addWidget(m_indexLabel); + m_topLayout->addWidget(m_settingsButton); + m_topLayout->addWidget(m_titleLabel); + // m_topLayout->addStretch(1); + m_topLayout->addWidget(m_helpButton); + m_topLayout->addWidget(m_moveButton); + m_topLayout->addWidget(m_shrinkButton); + m_topLayout->addWidget(m_hideButton); + m_topLayout->addWidget(m_closeButton); + m_sizeGripTopRight = new QSizeGrip(this); + m_sizeGripTopRight->setStyleSheet("QSizeGrip { background-color: rgb(128, 128, 128); width: 10px; height: 10px; }"); + m_sizeGripTopRight->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_topLayout->addWidget(m_sizeGripTopRight, 0, Qt::AlignTop | Qt::AlignRight); + + m_centerLayout = new QHBoxLayout(); + m_centerLayout->addWidget(&m_rollupContents); + + m_bottomLayout = new QHBoxLayout(); + m_bottomLayout->setContentsMargins(0, 0, 0, 0); + m_bottomLayout->addWidget(m_statusLabel); + m_sizeGripBottomRight = new QSizeGrip(this); + m_sizeGripBottomRight->setStyleSheet("QSizeGrip { background-color: rgb(128, 128, 128); width: 10px; height: 10px; }"); + m_sizeGripBottomRight->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + // m_bottomLayout->addStretch(1); + m_bottomLayout->addWidget(m_sizeGripBottomRight, 0, Qt::AlignBottom | Qt::AlignRight); + + m_layouts->addLayout(m_topLayout); + m_layouts->addLayout(m_centerLayout); + m_layouts->addLayout(m_bottomLayout); + + QObjectCleanupHandler().add(layout()); + setLayout(m_layouts); + + connect(m_settingsButton, SIGNAL(clicked()), this, SLOT(activateSettingsDialog())); + connect(m_helpButton, SIGNAL(clicked()), this, SLOT(showHelp())); + connect(m_moveButton, SIGNAL(clicked()), this, SLOT(openMoveToWorkspaceDialog())); + connect(m_shrinkButton, SIGNAL(clicked()), this, SLOT(shrinkWindow())); + connect(this, SIGNAL(forceShrink()), this, SLOT(shrinkWindow())); + connect(m_hideButton, SIGNAL(clicked()), this, SLOT(hide())); + connect(m_closeButton, SIGNAL(clicked()), this, SLOT(close())); + + connect( + &m_rollupContents, + &RollupContents::widgetRolled, + this, + &ChannelGUI::onWidgetRolled + ); +} + +ChannelGUI::~ChannelGUI() +{ + qDebug("ChannelGUI::~ChannelGUI"); + delete m_sizeGripBottomRight; + delete m_bottomLayout; + delete m_centerLayout; + delete m_sizeGripTopRight; + delete m_topLayout; + delete m_layouts; + delete m_statusLabel; + delete m_closeButton; + delete m_hideButton; + delete m_shrinkButton; + delete m_moveButton; + delete m_helpButton; + delete m_titleLabel; + delete m_settingsButton; + delete m_indexLabel; + qDebug("ChannelGUI::~ChannelGUI: end"); +} + void ChannelGUI::closeEvent(QCloseEvent *event) { qDebug("ChannelGUI::closeEvent"); emit closing(); event->accept(); } + +void ChannelGUI::mousePressEvent(QMouseEvent* event) +{ + if ((event->button() == Qt::LeftButton) && isOnMovingPad()) + { + m_drag = true; + m_DragPosition = event->globalPos() - pos(); + event->accept(); + } +} + +void ChannelGUI::mouseMoveEvent(QMouseEvent* event) +{ + if ((event->buttons() & Qt::LeftButton) && isOnMovingPad()) + { + move(event->globalPos() - m_DragPosition); + event->accept(); + } +} + +void ChannelGUI::setStreamIndicator(const QString& indicator) +{ + (void) indicator; // TODO +} + +void ChannelGUI::activateSettingsDialog() +{ + QPoint p = mapFromGlobal(QCursor::pos()); + m_contextMenuType = ContextMenuChannelSettings; + emit customContextMenuRequested(p); +} + +void ChannelGUI::showHelp() +{ + if (m_helpURL.isEmpty()) { + return; + } + + QString url; + + if (m_helpURL.startsWith("http")) { + url = m_helpURL; + } else { + url = QString("https://github.com/f4exb/sdrangel/blob/master/%1").arg(m_helpURL); // Something like "plugins/channelrx/chanalyzer/readme.md" + } + + QDesktopServices::openUrl(QUrl(url)); +} + +void ChannelGUI::openMoveToWorkspaceDialog() +{ + int numberOfWorkspaces = MainWindow::getInstance()->getNumberOfWorkspaces(); + WorkspaceSelectionDialog dialog(numberOfWorkspaces, this); + dialog.exec(); + + if (dialog.hasChanged()) { + emit moveToWorkspace(dialog.getSelectedIndex()); + } +} + +void ChannelGUI::onWidgetRolled(QWidget *widget, bool show) +{ + if (show) + { + // qDebug("ChannelGUI::onWidgetRolled: show: %d %d", m_rollupContents.height(), widget->height()); + int dh = m_heightsMap.contains(widget) ? m_heightsMap[widget] - widget->height() : widget->minimumHeight(); + resize(width(), 52 + m_rollupContents.height() + dh); + } + else + { + // qDebug("ChannelGUI::onWidgetRolled: hide: %d %d", m_rollupContents.height(), widget->height()); + m_heightsMap[widget] = widget->height(); + resize(width(), 52 + m_rollupContents.height()); + } +} + +void ChannelGUI::shrinkWindow() +{ + qDebug("ChannelGUI::shrinkWindow"); + adjustSize(); +} + +void ChannelGUI::setTitle(const QString& title) +{ + m_titleLabel->setText(title); +} + +void ChannelGUI::setTitleColor(const QColor& c) +{ + m_indexLabel->setStyleSheet(tr("QLabel { background-color: %1; color: %2; }") + .arg(c.name()) + .arg(getTitleColor(c).name()) + ); +} + +void ChannelGUI::setDeviceType(DeviceType type) +{ + m_deviceType = type; + updateIndexLabel(); +} + +void ChannelGUI::setToolTip(const QString& tooltip) +{ + m_indexLabel->setToolTip(tooltip); +} + +void ChannelGUI::setIndex(int index) +{ + m_channelIndex = index; + updateIndexLabel(); +} + +void ChannelGUI::setDeviceSetIndex(int index) +{ + m_deviceSetIndex = index; + updateIndexLabel(); +} + +void ChannelGUI::updateIndexLabel() +{ + m_indexLabel->setText(tr("%1%2:%3").arg(getDeviceTypeTag()).arg(m_deviceSetIndex).arg(m_channelIndex)); +} + +bool ChannelGUI::isOnMovingPad() +{ + return m_indexLabel->underMouse() || m_titleLabel->underMouse() || m_statusLabel->underMouse(); +} + +QString ChannelGUI::getDeviceTypeTag() +{ + switch (m_deviceType) + { + case DeviceRx: + return "R"; + case DeviceTx: + return "T"; + case DeviceMIMO: + return "M"; + default: + return "X"; + } +} + +QColor ChannelGUI::getTitleColor(const QColor& backgroundColor) +{ + float l = 0.2126*backgroundColor.redF() + 0.7152*backgroundColor.greenF() + 0.0722*backgroundColor.blueF(); + return l < 0.5f ? Qt::white : Qt::black; +} diff --git a/sdrgui/channel/channelgui.h b/sdrgui/channel/channelgui.h index 4bb420002..4b8424314 100644 --- a/sdrgui/channel/channelgui.h +++ b/sdrgui/channel/channelgui.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2020 Edouard Griffiths, F4EXB // +// Copyright (C) 2020-2022 Edouard Griffiths, F4EXB // // // // This program is free software; you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // @@ -18,33 +18,118 @@ #ifndef SDRGUI_CHANNEL_CHANNELGUI_H_ #define SDRGUI_CHANNEL_CHANNELGUI_H_ -#include "gui/rollupwidget.h" +#include +#include + +#include "gui/rollupcontents.h" #include "export.h" class QCloseEvent; class MessageQueue; +class QLabel; +class QPushButton; +class QVBoxLayout; +class QHBoxLayout; +class QSizeGrip; -class SDRGUI_API ChannelGUI : public RollupWidget +class SDRGUI_API ChannelGUI : public QMdiSubWindow { Q_OBJECT public: - ChannelGUI(QWidget *parent = nullptr) : - RollupWidget(parent) - { } - virtual ~ChannelGUI() { } + enum DeviceType + { + DeviceRx, + DeviceTx, + DeviceMIMO + }; + + enum ContextMenuType + { + ContextMenuNone, + ContextMenuChannelSettings, + ContextMenuStreamSettings + }; + + ChannelGUI(QWidget *parent = nullptr); + virtual ~ChannelGUI(); virtual void destroy() = 0; virtual void resetToDefaults() = 0; virtual QByteArray serialize() const = 0; virtual bool deserialize(const QByteArray& data) = 0; + // Data saved in the derived settings + virtual void setWorkspaceIndex(int index)= 0; + virtual int getWorkspaceIndex() const = 0; + virtual void setGeometryBytes(const QByteArray& blob) = 0; + virtual QByteArray getGeometryBytes() const = 0; + virtual QString getTitle() const = 0; + virtual QColor getTitleColor() const = 0; virtual MessageQueue* getInputMessageQueue() = 0; + RollupContents *getRollupContents() { return &m_rollupContents; } + void setTitle(const QString& title); + void setTitleColor(const QColor& c); + void setDeviceType(DeviceType type); + DeviceType getDeviceType() const { return m_deviceType; } + void setToolTip(const QString& tooltip); + void setIndex(int index); + int getIndex() const { return m_channelIndex; } + void setDeviceSetIndex(int index); + int getDeviceSetIndex() const { return m_channelIndex; } + protected: void closeEvent(QCloseEvent *event); + void mousePressEvent(QMouseEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void resetContextMenuType() { m_contextMenuType = ContextMenuNone; } + void setStreamIndicator(const QString& indicator); // TODO + + DeviceType m_deviceType; + int m_deviceSetIndex; + int m_channelIndex; + QString m_helpURL; + RollupContents m_rollupContents; + ContextMenuType m_contextMenuType; + +protected slots: + void shrinkWindow(); + +private: + void updateIndexLabel(); + bool isOnMovingPad(); + QString getDeviceTypeTag(); + static QColor getTitleColor(const QColor& backgroundColor); + + QLabel *m_indexLabel; + QPushButton *m_settingsButton; + QLabel *m_titleLabel; + QPushButton *m_helpButton; + QPushButton *m_moveButton; + QPushButton *m_shrinkButton; + QPushButton *m_hideButton; + QPushButton *m_closeButton; + QLabel *m_statusLabel; + QVBoxLayout *m_layouts; + QHBoxLayout *m_topLayout; + QHBoxLayout *m_centerLayout; + QHBoxLayout *m_bottomLayout; + QSizeGrip *m_sizeGripTopRight; + QSizeGrip *m_sizeGripBottomRight; + bool m_drag; + QPoint m_DragPosition; + QMap m_heightsMap; + +private slots: + void activateSettingsDialog(); + void showHelp(); + void openMoveToWorkspaceDialog(); + void onWidgetRolled(QWidget *widget, bool show); signals: void closing(); + void moveToWorkspace(int workspaceIndex); + void forceShrink(); }; #endif // SDRGUI_CHANNEL_CHANNELGUI_H_ diff --git a/sdrgui/device/devicegui.cpp b/sdrgui/device/devicegui.cpp index bd76017cf..6778c168c 100644 --- a/sdrgui/device/devicegui.cpp +++ b/sdrgui/device/devicegui.cpp @@ -168,6 +168,7 @@ DeviceGUI::DeviceGUI(QWidget *parent) : connect(m_changeDeviceButton, SIGNAL(clicked()), this, SLOT(openChangeDeviceDialog())); connect(m_reloadDeviceButton, SIGNAL(clicked()), this, SLOT(deviceReload())); + connect(m_addChannelsButton, SIGNAL(clicked()), this, SLOT(openAddChannelsDialog())); connect(m_helpButton, SIGNAL(clicked()), this, SLOT(showHelp())); connect(m_moveButton, SIGNAL(clicked()), this, SLOT(openMoveToWorkspaceDialog())); connect(m_shrinkButton, SIGNAL(clicked()), this, SLOT(shrinkWindow())); @@ -175,6 +176,14 @@ DeviceGUI::DeviceGUI(QWidget *parent) : connect(m_closeButton, SIGNAL(clicked()), this, SLOT(close())); connect(this, SIGNAL(forceClose()), this, SLOT(close())); connect(m_showSpectrumButton, SIGNAL(clicked()), this, SLOT(showSpectrumHandler())); + connect(m_showAllChannelsButton, SIGNAL(clicked()), this, SLOT(showAllChannelsHandler())); + + QObject::connect( + &m_channelAddDialog, + &ChannelAddDialog::addChannel, + this, + &DeviceGUI::addChannelEmitted + ); } DeviceGUI::~DeviceGUI() @@ -275,11 +284,21 @@ void DeviceGUI::openMoveToWorkspaceDialog() } } +void DeviceGUI::openAddChannelsDialog() +{ + m_channelAddDialog.exec(); +} + void DeviceGUI::showSpectrumHandler() { emit showSpectrum(m_deviceSetIndex); } +void DeviceGUI::showAllChannelsHandler() +{ + emit showAllChannels(m_deviceSetIndex); +} + void DeviceGUI::shrinkWindow() { qDebug("DeviceGUI::shrinkWindow"); diff --git a/sdrgui/device/devicegui.h b/sdrgui/device/devicegui.h index 5ba14ccad..61c36f8d9 100644 --- a/sdrgui/device/devicegui.h +++ b/sdrgui/device/devicegui.h @@ -25,6 +25,7 @@ #include #include +#include "gui/channeladddialog.h" #include "export.h" class QCloseEvent; @@ -76,6 +77,7 @@ public: void setIndex(int index); int getIndex() const { return m_deviceSetIndex; } void setCurrentDeviceIndex(int index) { m_currentDeviceIndex = index; } //!< index in plugins list + void setChannelNames(const QStringList& channelNames) { m_channelAddDialog.addChannelNames(channelNames); } protected: void closeEvent(QCloseEvent *event); @@ -119,13 +121,16 @@ private: bool m_drag; QPoint m_DragPosition; int m_currentDeviceIndex; //!< Index in device plugins registrations + ChannelAddDialog m_channelAddDialog; private slots: void openChangeDeviceDialog(); + void openAddChannelsDialog(); void deviceReload(); void showHelp(); void openMoveToWorkspaceDialog(); void showSpectrumHandler(); + void showAllChannelsHandler(); signals: void forceClose(); @@ -135,6 +140,8 @@ signals: void deviceAdd(int deviceType, int deviceIndex); void deviceChange(int newDeviceIndex); void showSpectrum(int deviceSetIndex); + void showAllChannels(int deviceSetIndex); + void addChannelEmitted(int channelIndex); }; #endif // INCLUDE_DEVICEGUI_H diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index 2a8bff4f9..74f813e4a 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -36,6 +36,7 @@ #include "channel/channelgui.h" #include "mainspectrum/mainspectrumgui.h" #include "settings/preset.h" +#include "mainwindow.h" #include "deviceuiset.h" @@ -74,6 +75,18 @@ DeviceUISet::~DeviceUISet() // delete m_spectrum; } +void DeviceUISet::setIndex(int deviceSetIndex) +{ + m_deviceGUI->setIndex(deviceSetIndex); + m_mainSpectrumGUI->setIndex(deviceSetIndex); + + for (auto& channelRegistation : m_channelInstanceRegistrations) { + channelRegistation.m_gui->setDeviceSetIndex(deviceSetIndex); + } + + m_deviceSetIndex = deviceSetIndex; +} + void DeviceUISet::setSpectrumScalingFactor(float scalef) { m_spectrumVis->setScalef(scalef); @@ -161,6 +174,11 @@ ChannelAPI *DeviceUISet::getChannelAt(int channelIndex) return m_deviceSet->getChannelAt(channelIndex); } +ChannelGUI *DeviceUISet::getChannelGUIAt(int channelIndex) +{ + return m_channelInstanceRegistrations[channelIndex].m_gui; +} + void DeviceUISet::loadDeviceSetSettings( const Preset* preset, PluginAPI *pluginAPI, @@ -168,9 +186,6 @@ void DeviceUISet::loadDeviceSetSettings( Workspace *currentWorkspace ) { - (void) workspaces; // TODO: use for channels - (void) currentWorkspace; // TODO: use for channels - m_spectrumGUI->deserialize(preset->getSpectrumConfig()); m_deviceAPI->loadSamplingDeviceSettings(preset); @@ -179,11 +194,11 @@ void DeviceUISet::loadDeviceSetSettings( } if (m_deviceSourceEngine) { // source device - loadRxChannelSettings(preset, pluginAPI); + loadRxChannelSettings(preset, pluginAPI, workspaces, currentWorkspace); } else if (m_deviceSinkEngine) { // sink device - loadTxChannelSettings(preset, pluginAPI); + loadTxChannelSettings(preset, pluginAPI, workspaces, currentWorkspace); } else if (m_deviceMIMOEngine) { // MIMO device - loadMIMOChannelSettings(preset, pluginAPI); + loadMIMOChannelSettings(preset, pluginAPI, workspaces, currentWorkspace); } } @@ -220,7 +235,7 @@ void DeviceUISet::saveDeviceSetSettings(Preset* preset) const m_deviceAPI->saveSamplingDeviceSettings(preset); } -void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI) +void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI, QList *workspaces, Workspace *currentWorkspace) { if (preset->isSourcePreset()) { @@ -248,6 +263,7 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA { const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i); ChannelGUI *rxChannelGUI = nullptr; + ChannelAPI *channelAPI = nullptr; // create channel instance @@ -259,7 +275,6 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA qDebug("DeviceUISet::loadRxChannelSettings: creating new channel [%s] from config [%s]", qPrintable((*channelRegistrations)[i].m_channelIdURI), qPrintable(channelConfig.m_channelIdURI)); - ChannelAPI *channelAPI; BasebandSampleSink *rxChannel; (*channelRegistrations)[i].m_plugin->createRxChannel(m_deviceAPI, &rxChannel, &channelAPI); rxChannelGUI = (*channelRegistrations)[i].m_plugin->createRxChannelGUI(this, rxChannel); @@ -275,10 +290,34 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA } } - if (rxChannelGUI) + if (rxChannelGUI && channelAPI) { qDebug("DeviceUISet::loadRxChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI)); rxChannelGUI->deserialize(channelConfig.m_config); + int originalWorkspaceIndex = rxChannelGUI->getWorkspaceIndex(); + + if (workspaces && (workspaces->size() > 0) && (originalWorkspaceIndex < workspaces->size())) // restore in original workspace + { + (*workspaces)[originalWorkspaceIndex]->addToMdiArea((QMdiSubWindow*) rxChannelGUI); + } + else if (currentWorkspace) // restore in current workspace + { + rxChannelGUI->setWorkspaceIndex(currentWorkspace->getIndex()); + currentWorkspace->addToMdiArea((QMdiSubWindow*) rxChannelGUI); + } + + rxChannelGUI->restoreGeometry(rxChannelGUI->getGeometryBytes()); + rxChannelGUI->setDeviceType(ChannelGUI::DeviceRx); + rxChannelGUI->setDeviceSetIndex(m_deviceSetIndex); + rxChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); + rxChannelGUI->setToolTip(m_deviceAPI->getSamplingDeviceDisplayName()); + + QObject::connect( + rxChannelGUI, + &ChannelGUI::moveToWorkspace, + this, + [=](int wsIndexDest){ MainWindow::getInstance()->channelMove(rxChannelGUI, wsIndexDest); } + ); } } } @@ -292,10 +331,12 @@ void DeviceUISet::saveRxChannelSettings(Preset *preset) const { if (preset->isSourcePreset()) { - for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) + for (int i = 0; i < m_channelInstanceRegistrations.count(); i++) { + ChannelGUI *channelGUI = m_channelInstanceRegistrations[i].m_gui; qDebug("DeviceUISet::saveRxChannelSettings: saving channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); - preset->addChannel(m_channelInstanceRegistrations[i].m_channelAPI->getURI(), m_channelInstanceRegistrations[i].m_gui->serialize()); + channelGUI->setGeometryBytes(channelGUI->saveGeometry()); + preset->addChannel(m_channelInstanceRegistrations[i].m_channelAPI->getURI(), channelGUI->serialize()); } } else @@ -304,7 +345,7 @@ void DeviceUISet::saveRxChannelSettings(Preset *preset) const } } -void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI) +void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI, QList *workspaces, Workspace *currentWorkspace) { if (preset->isSinkPreset()) { @@ -332,6 +373,7 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA { const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i); ChannelGUI *txChannelGUI = nullptr; + ChannelAPI *channelAPI = nullptr; // create channel instance @@ -342,7 +384,6 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA qDebug("DeviceUISet::loadTxChannelSettings: creating new channel [%s] from config [%s]", qPrintable((*channelRegistrations)[i].m_channelIdURI), qPrintable(channelConfig.m_channelIdURI)); - ChannelAPI *channelAPI; BasebandSampleSource *txChannel; (*channelRegistrations)[i].m_plugin->createTxChannel(m_deviceAPI, &txChannel, &channelAPI); txChannelGUI = (*channelRegistrations)[i].m_plugin->createTxChannelGUI(this, txChannel); @@ -358,10 +399,34 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA } } - if(txChannelGUI) + if (txChannelGUI && channelAPI) { qDebug("DeviceUISet::loadTxChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI)); txChannelGUI->deserialize(channelConfig.m_config); + int originalWorkspaceIndex = txChannelGUI->getWorkspaceIndex(); + + if (workspaces && (workspaces->size() > 0) && (originalWorkspaceIndex < workspaces->size())) // restore in original workspace + { + (*workspaces)[originalWorkspaceIndex]->addToMdiArea((QMdiSubWindow*) txChannelGUI); + } + else if (currentWorkspace) // restore in current workspace + { + txChannelGUI->setWorkspaceIndex(currentWorkspace->getIndex()); + currentWorkspace->addToMdiArea((QMdiSubWindow*) txChannelGUI); + } + + txChannelGUI->restoreGeometry(txChannelGUI->getGeometryBytes()); + txChannelGUI->setDeviceType(ChannelGUI::DeviceRx); + txChannelGUI->setDeviceSetIndex(m_deviceSetIndex); + txChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); + txChannelGUI->setToolTip(m_deviceAPI->getSamplingDeviceDisplayName()); + + QObject::connect( + txChannelGUI, + &ChannelGUI::moveToWorkspace, + this, + [=](int wsIndexDest){ MainWindow::getInstance()->channelMove(txChannelGUI, wsIndexDest); } + ); } } } @@ -376,10 +441,12 @@ void DeviceUISet::saveTxChannelSettings(Preset *preset) const { if (preset->isSinkPreset()) { - for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) + for (int i = 0; i < m_channelInstanceRegistrations.count(); i++) { + ChannelGUI *channelGUI = m_channelInstanceRegistrations[i].m_gui; qDebug("DeviceUISet::saveTxChannelSettings: saving channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); - preset->addChannel(m_channelInstanceRegistrations[i].m_channelAPI->getURI(), m_channelInstanceRegistrations[i].m_gui->serialize()); + channelGUI->setGeometryBytes(channelGUI->saveGeometry()); + preset->addChannel(m_channelInstanceRegistrations[i].m_channelAPI->getURI(), channelGUI->serialize()); } } else @@ -388,7 +455,7 @@ void DeviceUISet::saveTxChannelSettings(Preset *preset) const } } -void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *pluginAPI) +void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *pluginAPI, QList *workspaces, Workspace *currentWorkspace) { if (preset->isMIMOPreset()) { @@ -415,6 +482,7 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi { const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i); ChannelGUI *mimoChannelGUI = nullptr; + ChannelAPI *channelAPI = nullptr; // create channel instance @@ -426,7 +494,6 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi qDebug("DeviceUISet::loadMIMOChannelSettings: creating new channel [%s] from config [%s]", qPrintable((*channelRegistrations)[i].m_channelIdURI), qPrintable(channelConfig.m_channelIdURI)); - ChannelAPI *channelAPI; MIMOChannel *mimoChannel; (*channelRegistrations)[i].m_plugin->createMIMOChannel(m_deviceAPI, &mimoChannel, &channelAPI); mimoChannelGUI = (*channelRegistrations)[i].m_plugin->createMIMOChannelGUI(this, mimoChannel); @@ -443,10 +510,34 @@ void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *plugi } } - if (mimoChannelGUI) + if (mimoChannelGUI && channelAPI) { qDebug("DeviceUISet::loadMIMOChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI)); mimoChannelGUI->deserialize(channelConfig.m_config); + int originalWorkspaceIndex = mimoChannelGUI->getWorkspaceIndex(); + + if (workspaces && (workspaces->size() > 0) && (originalWorkspaceIndex < workspaces->size())) // restore in original workspace + { + (*workspaces)[originalWorkspaceIndex]->addToMdiArea((QMdiSubWindow*) mimoChannelGUI); + } + else if (currentWorkspace) // restore in current workspace + { + mimoChannelGUI->setWorkspaceIndex(currentWorkspace->getIndex()); + currentWorkspace->addToMdiArea((QMdiSubWindow*) mimoChannelGUI); + } + + mimoChannelGUI->restoreGeometry(mimoChannelGUI->getGeometryBytes()); + mimoChannelGUI->setDeviceType(ChannelGUI::DeviceRx); + mimoChannelGUI->setDeviceSetIndex(m_deviceSetIndex); + mimoChannelGUI->setIndex(channelAPI->getIndexInDeviceSet()); + mimoChannelGUI->setToolTip(m_deviceAPI->getSamplingDeviceDisplayName()); + + QObject::connect( + mimoChannelGUI, + &ChannelGUI::moveToWorkspace, + this, + [=](int wsIndexDest){ MainWindow::getInstance()->channelMove(mimoChannelGUI, wsIndexDest); } + ); } } } @@ -460,10 +551,12 @@ void DeviceUISet::saveMIMOChannelSettings(Preset *preset) const { if (preset->isMIMOPreset()) { - for(int i = 0; i < m_channelInstanceRegistrations.count(); i++) + for (int i = 0; i < m_channelInstanceRegistrations.count(); i++) { + ChannelGUI *channelGUI = m_channelInstanceRegistrations[i].m_gui; qDebug("DeviceUISet::saveMIMOChannelSettings: saving channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelAPI->getURI())); - preset->addChannel(m_channelInstanceRegistrations[i].m_channelAPI->getURI(), m_channelInstanceRegistrations[i].m_gui->serialize()); + channelGUI->setGeometryBytes(channelGUI->saveGeometry()); + preset->addChannel(m_channelInstanceRegistrations[i].m_channelAPI->getURI(), channelGUI->serialize()); } } else @@ -494,6 +587,8 @@ bool DeviceUISet::ChannelInstanceRegistration::operator<(const ChannelInstanceRe void DeviceUISet::handleChannelGUIClosing(ChannelGUI* channelGUI) { + qDebug("DeviceUISet::handleChannelGUIClosing: %s: %d", qPrintable(channelGUI->getTitle()), channelGUI->getIndex()); + for (ChannelInstanceRegistrations::iterator it = m_channelInstanceRegistrations.begin(); it != m_channelInstanceRegistrations.end(); ++it) { if (it->m_gui == channelGUI) @@ -504,6 +599,11 @@ void DeviceUISet::handleChannelGUIClosing(ChannelGUI* channelGUI) break; } } + + // Renumerate + for (int i = 0; i < m_channelInstanceRegistrations.count(); i++) { + m_channelInstanceRegistrations.at(i).m_gui->setIndex(i); + } } int DeviceUISet::webapiSpectrumSettingsGet(SWGSDRangel::SWGGLSpectrum& response, QString& errorMessage) const diff --git a/sdrgui/device/deviceuiset.h b/sdrgui/device/deviceuiset.h index 5d133d4b7..3daf59524 100644 --- a/sdrgui/device/deviceuiset.h +++ b/sdrgui/device/deviceuiset.h @@ -71,6 +71,7 @@ public: DeviceUISet(int deviceSetIndex, DeviceSet *deviceSet); ~DeviceUISet(); + void setIndex(int deviceSetIndex); GLSpectrum *getSpectrum() { return m_spectrum; } //!< Direct spectrum getter void setSpectrumScalingFactor(float scalef); void addChannelMarker(ChannelMarker* channelMarker); //!< Add channel marker to spectrum @@ -80,6 +81,7 @@ public: void freeChannels(); void deleteChannel(int channelIndex); ChannelAPI *getChannelAt(int channelIndex); + ChannelGUI *getChannelGUIAt(int channelIndex); void loadDeviceSetSettings( const Preset* preset, @@ -145,9 +147,9 @@ private: int m_nbAvailableTxChannels; //!< Number of Tx channels available for selection int m_nbAvailableMIMOChannels; //!< Number of MIMO channels available for selection - void loadRxChannelSettings(const Preset* preset, PluginAPI *pluginAPI); - void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI); - void loadMIMOChannelSettings(const Preset* preset, PluginAPI *pluginAPI); + void loadRxChannelSettings(const Preset* preset, PluginAPI *pluginAPI, QList *workspaces, Workspace *currentWorkspace); + void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI, QList *workspaces, Workspace *currentWorkspace); + void loadMIMOChannelSettings(const Preset* preset, PluginAPI *pluginAPI, QList *workspaces, Workspace *currentWorkspace); void saveRxChannelSettings(Preset* preset) const; void saveTxChannelSettings(Preset* preset) const; void saveMIMOChannelSettings(Preset* preset) const; diff --git a/sdrgui/feature/featuregui.cpp b/sdrgui/feature/featuregui.cpp index 248be215b..b9ff810e7 100644 --- a/sdrgui/feature/featuregui.cpp +++ b/sdrgui/feature/featuregui.cpp @@ -132,6 +132,13 @@ FeatureGUI::FeatureGUI(QWidget *parent) : connect(m_shrinkButton, SIGNAL(clicked()), this, SLOT(shrinkWindow())); connect(this, SIGNAL(forceShrink()), this, SLOT(shrinkWindow())); connect(m_closeButton, SIGNAL(clicked()), this, SLOT(close())); + + connect( + &m_rollupContents, + &RollupContents::widgetRolled, + this, + &FeatureGUI::onWidgetRolled + ); } FeatureGUI::~FeatureGUI() @@ -215,6 +222,22 @@ void FeatureGUI::openMoveToWorkspaceDialog() } } +void FeatureGUI::onWidgetRolled(QWidget *widget, bool show) +{ + if (show) + { + // qDebug("FeatureGUI::onWidgetRolled: show: %d %d", m_rollupContents.height(), widget->height()); + int dh = m_heightsMap.contains(widget) ? m_heightsMap[widget] - widget->height() : widget->minimumHeight(); + resize(width(), 52 + m_rollupContents.height() + dh); + } + else + { + // qDebug("FeatureGUI::onWidgetRolled: hide: %d %d", m_rollupContents.height(), widget->height()); + m_heightsMap[widget] = widget->height(); + resize(width(), 52 + m_rollupContents.height()); + } +} + void FeatureGUI::shrinkWindow() { qDebug("FeatureGUI::shrinkWindow"); diff --git a/sdrgui/feature/featuregui.h b/sdrgui/feature/featuregui.h index ce185df40..ca92b4209 100644 --- a/sdrgui/feature/featuregui.h +++ b/sdrgui/feature/featuregui.h @@ -19,6 +19,7 @@ #define SDRGUI_FEATURE_FEATUREGUI_H_ #include +#include #include "gui/rollupcontents.h" #include "export.h" @@ -96,11 +97,13 @@ private: QSizeGrip *m_sizeGripBottomRight; bool m_drag; QPoint m_DragPosition; + QMap m_heightsMap; private slots: void activateSettingsDialog(); void showHelp(); void openMoveToWorkspaceDialog(); + void onWidgetRolled(QWidget *widget, bool show); signals: void closing(); diff --git a/sdrgui/feature/featureuiset.cpp b/sdrgui/feature/featureuiset.cpp index 3bf8c7453..37ab5279c 100644 --- a/sdrgui/feature/featureuiset.cpp +++ b/sdrgui/feature/featureuiset.cpp @@ -92,6 +92,11 @@ void FeatureUISet::deleteFeature(int featureIndex) m_featureInstanceRegistrations.removeAt(featureIndex); m_featureSet->removeFeatureInstanceAt(featureIndex); } + + // Renumerate + for (int i = 0; i < m_featureInstanceRegistrations.count(); i++) { + m_featureInstanceRegistrations.at(i).m_gui->setIndex(i); + } } const Feature *FeatureUISet::getFeatureAt(int featureIndex) const @@ -237,4 +242,9 @@ void FeatureUISet::handleClosingFeatureGUI(FeatureGUI *featureGUI) break; } } + + // Renumerate + for (int i = 0; i < m_featureInstanceRegistrations.count(); i++) { + m_featureInstanceRegistrations.at(i).m_gui->setIndex(i); + } } diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 7c9a4b462..5570df766 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -96,6 +96,7 @@ #include #include #include +#include #if defined(HAS_LIMERFEUSB) #include "limerfegui/limerfeusbdialog.h" @@ -401,6 +402,13 @@ void MainWindow::sampleSourceAdd(Workspace *workspace, int deviceIndex) [=](int wsIndexDest){ this->mainSpectrumMove(m_deviceUIs.back()->m_mainSpectrumGUI, wsIndexDest); } ); + QObject::connect( + m_deviceUIs.back()->m_deviceGUI, + &DeviceGUI::addChannelEmitted, + this, + [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + ); + workspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); workspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); emit m_mainCore->deviceSetAdded(deviceSetIndex, deviceAPI); @@ -522,6 +530,19 @@ void MainWindow::sampleSourceCreate( this, [=](int deviceSetIndex){ this->mainSpectrumShow(this->m_deviceUIs[deviceSetIndex]->m_mainSpectrumGUI); } ); + QObject::connect( + deviceGUI, + &DeviceGUI::showAllChannels, + this, + &MainWindow::showAllChannels + ); + QObject::connect( + deviceGUI, + &DeviceGUI::closing, + this, + [=](){ this->removeDeviceSet(deviceGUI->getIndex()); } + ); + deviceAPI->getSampleSource()->setMessageQueueToGUI(deviceGUI->getInputMessageQueue()); deviceUISet->m_deviceGUI = deviceGUI; const PluginInterface::SamplingDevice *selectedDevice = DeviceEnumerator::instance()->getRxSamplingDevice(selectedDeviceIndex); @@ -536,6 +557,9 @@ void MainWindow::sampleSourceCreate( deviceGUI->setToolTip(samplingDevice->displayedName); deviceGUI->setTitle(samplingDevice->displayedName.split(" ")[0]); deviceGUI->setCurrentDeviceIndex(selectedDeviceIndex); + QStringList channelNames; + m_pluginManager->listRxChannels(channelNames); + deviceGUI->setChannelNames(channelNames); MainSpectrumGUI *mainSpectrumGUI = deviceUISet->m_mainSpectrumGUI; mainSpectrumGUI->setDeviceType(MainSpectrumGUI::DeviceRx); mainSpectrumGUI->setIndex(deviceSetIndex); @@ -589,6 +613,13 @@ void MainWindow::sampleSinkAdd(Workspace *workspace, int deviceIndex) [=](int wsIndexDest){ this->mainSpectrumMove(m_deviceUIs.back()->m_mainSpectrumGUI, wsIndexDest); } ); + QObject::connect( + m_deviceUIs.back()->m_deviceGUI, + &DeviceGUI::addChannelEmitted, + this, + [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + ); + workspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); workspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); emit m_mainCore->deviceSetAdded(deviceSetIndex, deviceAPI); @@ -704,6 +735,24 @@ void MainWindow::sampleSinkCreate( this, [=](int newDeviceIndex){ this->sampleDeviceChangeHandler(deviceGUI, newDeviceIndex); } ); + QObject::connect( + deviceGUI, + &DeviceGUI::showSpectrum, + this, + [=](int deviceSetIndex){ this->mainSpectrumShow(this->m_deviceUIs[deviceSetIndex]->m_mainSpectrumGUI); } + ); + QObject::connect( + deviceGUI, + &DeviceGUI::showAllChannels, + this, + &MainWindow::showAllChannels + ); + QObject::connect( + deviceGUI, + &DeviceGUI::closing, + this, + [=](){ this->removeDeviceSet(deviceGUI->getIndex()); } + ); deviceAPI->getSampleSink()->setMessageQueueToGUI(deviceGUI->getInputMessageQueue()); deviceUISet->m_deviceGUI = deviceGUI; const PluginInterface::SamplingDevice *selectedDevice = DeviceEnumerator::instance()->getRxSamplingDevice(selectedDeviceIndex); @@ -718,6 +767,9 @@ void MainWindow::sampleSinkCreate( deviceGUI->setToolTip(samplingDevice->displayedName); deviceGUI->setTitle(samplingDevice->displayedName.split(" ")[0]); deviceGUI->setCurrentDeviceIndex(selectedDeviceIndex); + QStringList channelNames; + m_pluginManager->listTxChannels(channelNames); + deviceGUI->setChannelNames(channelNames); MainSpectrumGUI *spectrumGUI = deviceUISet->m_mainSpectrumGUI; spectrumGUI->setDeviceType(MainSpectrumGUI::DeviceTx); spectrumGUI->setIndex(deviceSetIndex); @@ -779,6 +831,13 @@ void MainWindow::sampleMIMOAdd(Workspace *workspace, int deviceIndex) [=](int wsIndexDest){ this->mainSpectrumMove(m_deviceUIs.back()->m_mainSpectrumGUI, wsIndexDest); } ); + QObject::connect( + m_deviceUIs.back()->m_deviceGUI, + &DeviceGUI::addChannelEmitted, + this, + [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + ); + workspace->addToMdiArea(m_deviceUIs.back()->m_deviceGUI); workspace->addToMdiArea(m_deviceUIs.back()->m_mainSpectrumGUI); emit m_mainCore->deviceSetAdded(deviceSetIndex, deviceAPI); @@ -860,6 +919,24 @@ void MainWindow::sampleMIMOCreate( this, [=](int newDeviceIndex){ this->sampleDeviceChangeHandler(deviceGUI, newDeviceIndex); } ); + QObject::connect( + deviceGUI, + &DeviceGUI::showSpectrum, + this, + [=](int deviceSetIndex){ this->mainSpectrumShow(this->m_deviceUIs[deviceSetIndex]->m_mainSpectrumGUI); } + ); + QObject::connect( + deviceGUI, + &DeviceGUI::showAllChannels, + this, + &MainWindow::showAllChannels + ); + QObject::connect( + deviceGUI, + &DeviceGUI::closing, + this, + [=](){ this->removeDeviceSet(deviceGUI->getIndex()); } + ); deviceAPI->getSampleMIMO()->setMessageQueueToGUI(deviceGUI->getInputMessageQueue()); deviceUISet->m_deviceGUI = deviceGUI; const PluginInterface::SamplingDevice *selectedDevice = DeviceEnumerator::instance()->getRxSamplingDevice(selectedDeviceIndex); @@ -874,6 +951,9 @@ void MainWindow::sampleMIMOCreate( deviceGUI->setToolTip(samplingDevice->displayedName); deviceGUI->setTitle(samplingDevice->displayedName.split(" ")[0]); deviceGUI->setCurrentDeviceIndex(selectedDeviceIndex); + QStringList channelNames; + m_pluginManager->listMIMOChannels(channelNames); + deviceGUI->setChannelNames(channelNames); MainSpectrumGUI *spectrumGUI = deviceUISet->m_mainSpectrumGUI; spectrumGUI->setDeviceType(MainSpectrumGUI::DeviceMIMO); spectrumGUI->setIndex(deviceSetIndex); @@ -881,6 +961,97 @@ void MainWindow::sampleMIMOCreate( spectrumGUI->setTitle(samplingDevice->displayedName.split(" ")[0]); } +void MainWindow::removeDeviceSet(int deviceSetIndex) +{ + if (deviceSetIndex >= (int) m_deviceUIs.size()) { + return; + } + + DeviceUISet *deviceUISet = m_deviceUIs[deviceSetIndex]; + + if (deviceUISet->m_deviceSourceEngine) // source device + { + DSPDeviceSourceEngine *deviceEngine = deviceUISet->m_deviceSourceEngine; + deviceEngine->stopAcquistion(); + deviceEngine->removeSink(deviceUISet->m_spectrumVis); + + // deletes old UI and core object + deviceUISet->freeChannels(); // destroys the channel instances + deviceUISet->m_deviceAPI->getSampleSource()->setMessageQueueToGUI(nullptr); // have source stop sending messages to the GUI + deviceUISet->m_deviceGUI->destroy(); + deviceUISet->m_deviceAPI->resetSamplingDeviceId(); + deviceUISet->m_deviceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceInput( + deviceUISet->m_deviceAPI->getSampleSource()); + deviceUISet->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists + + DeviceAPI *sourceAPI = deviceUISet->m_deviceAPI; + delete deviceUISet; + + deviceEngine->stop(); + m_dspEngine->removeDeviceEngineAt(deviceSetIndex); + + delete sourceAPI; + } + else if (deviceUISet->m_deviceSinkEngine) // sink device + { + DSPDeviceSinkEngine *deviceEngine = deviceUISet->m_deviceSinkEngine; + deviceEngine->stopGeneration(); + deviceEngine->removeSpectrumSink(deviceUISet->m_spectrumVis); + + // deletes old UI and output object + deviceUISet->freeChannels(); + deviceUISet->m_deviceAPI->getSampleSink()->setMessageQueueToGUI(nullptr); // have sink stop sending messages to the GUI + deviceUISet->m_deviceGUI->destroy(); + deviceUISet->m_deviceAPI->resetSamplingDeviceId(); + deviceUISet->m_deviceAPI->getPluginInterface()->deleteSampleSinkPluginInstanceOutput( + deviceUISet->m_deviceAPI->getSampleSink()); + deviceUISet->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists + + DeviceAPI *sinkAPI = deviceUISet->m_deviceAPI; + delete deviceUISet; + + deviceEngine->stop(); + m_dspEngine->removeDeviceEngineAt(deviceSetIndex); + + delete sinkAPI; + } + else if (deviceUISet->m_deviceMIMOEngine) // MIMO device + { + DSPDeviceMIMOEngine *deviceEngine = deviceUISet->m_deviceMIMOEngine; + deviceEngine->stopProcess(1); // Tx side + deviceEngine->stopProcess(0); // Rx side + deviceEngine->removeSpectrumSink(deviceUISet->m_spectrumVis); + + // deletes old UI and output object + deviceUISet->freeChannels(); + deviceUISet->m_deviceAPI->getSampleMIMO()->setMessageQueueToGUI(nullptr); // have sink stop sending messages to the GUI + deviceUISet->m_deviceGUI->destroy(); + deviceUISet->m_deviceAPI->resetSamplingDeviceId(); + deviceUISet->m_deviceAPI->getPluginInterface()->deleteSampleMIMOPluginInstanceMIMO( + deviceUISet->m_deviceAPI->getSampleMIMO()); + + DeviceAPI *mimoAPI = deviceUISet->m_deviceAPI; + delete deviceUISet; + + deviceEngine->stop(); + m_dspEngine->removeDeviceEngineAt(deviceSetIndex); + + delete mimoAPI; + } + + m_deviceUIs.erase(m_deviceUIs.begin() + deviceSetIndex); + m_mainCore->removeDeviceSet(deviceSetIndex); + + // Renumerate + for (int i = 0; i < (int) m_deviceUIs.size(); i++) + { + DeviceUISet *deviceUISet = m_deviceUIs[i]; + deviceUISet->setIndex(i); + } + + emit m_mainCore->deviceSetRemoved(deviceSetIndex); +} + void MainWindow::removeLastDevice() { int removedDeviceSetIndex = m_deviceUIs.size() - 1; @@ -891,10 +1062,6 @@ void MainWindow::removeLastDevice() lastDeviceEngine->stopAcquistion(); lastDeviceEngine->removeSink(m_deviceUIs.back()->m_spectrumVis); - // ui->tabSpectraGUI->removeTab(ui->tabSpectraGUI->count() - 1); - // ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1); - // ui->inputViewDock->removeLastDevice(); - // deletes old UI and input object m_deviceUIs.back()->freeChannels(); // destroys the channel instances m_deviceUIs.back()->m_deviceAPI->getSampleSource()->setMessageQueueToGUI(nullptr); // have source stop sending messages to the GUI @@ -904,11 +1071,6 @@ void MainWindow::removeLastDevice() m_deviceUIs.back()->m_deviceAPI->getSampleSource()); m_deviceUIs.back()->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists - // ui->tabChannels->removeTab(ui->tabChannels->count() - 1); - - // m_deviceWidgetTabs.removeLast(); - // restoreDeviceTabs(); - DeviceAPI *sourceAPI = m_deviceUIs.back()->m_deviceAPI; delete m_deviceUIs.back(); @@ -923,10 +1085,6 @@ void MainWindow::removeLastDevice() lastDeviceEngine->stopGeneration(); lastDeviceEngine->removeSpectrumSink(m_deviceUIs.back()->m_spectrumVis); - // ui->tabSpectraGUI->removeTab(ui->tabSpectraGUI->count() - 1); - // ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1); - // ui->inputViewDock->removeLastDevice(); - // deletes old UI and output object m_deviceUIs.back()->freeChannels(); m_deviceUIs.back()->m_deviceAPI->getSampleSink()->setMessageQueueToGUI(nullptr); // have sink stop sending messages to the GUI @@ -936,11 +1094,6 @@ void MainWindow::removeLastDevice() m_deviceUIs.back()->m_deviceAPI->getSampleSink()); m_deviceUIs.back()->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists - // ui->tabChannels->removeTab(ui->tabChannels->count() - 1); - - // m_deviceWidgetTabs.removeLast(); - // restoreDeviceTabs(); - DeviceAPI *sinkAPI = m_deviceUIs.back()->m_deviceAPI; delete m_deviceUIs.back(); @@ -956,10 +1109,6 @@ void MainWindow::removeLastDevice() lastDeviceEngine->stopProcess(0); // Rx side lastDeviceEngine->removeSpectrumSink(m_deviceUIs.back()->m_spectrumVis); - // ui->tabSpectraGUI->removeTab(ui->tabSpectraGUI->count() - 1); - // ui->tabSpectra->removeTab(ui->tabSpectra->count() - 1); - // ui->inputViewDock->removeLastDevice(); - // deletes old UI and output object m_deviceUIs.back()->freeChannels(); m_deviceUIs.back()->m_deviceAPI->getSampleMIMO()->setMessageQueueToGUI(nullptr); // have sink stop sending messages to the GUI @@ -968,11 +1117,6 @@ void MainWindow::removeLastDevice() m_deviceUIs.back()->m_deviceAPI->getPluginInterface()->deleteSampleMIMOPluginInstanceMIMO( m_deviceUIs.back()->m_deviceAPI->getSampleMIMO()); - // ui->tabChannels->removeTab(ui->tabChannels->count() - 1); - - // m_deviceWidgetTabs.removeLast(); - // restoreDeviceTabs(); - DeviceAPI *mimoAPI = m_deviceUIs.back()->m_deviceAPI; delete m_deviceUIs.back(); @@ -1119,7 +1263,7 @@ void MainWindow::saveFeatureSetPresetSettings(FeatureSetPreset* preset, int feat featureUI->saveFeatureSetSettings(preset); } -void MainWindow::loadConfiguration(const Configuration *configuration) +void MainWindow::loadConfiguration(const Configuration *configuration, bool fromDialog) { qDebug("MainWindow::loadConfiguration: configuration [%s | %s] %d workspace(s) - %d device set(s) - %d feature(s)", qPrintable(configuration->getGroup()), @@ -1129,6 +1273,21 @@ void MainWindow::loadConfiguration(const Configuration *configuration) configuration->getFeatureSetPreset().getFeatureCount() ); + QMessageBox *waitBox = nullptr; + + if (fromDialog) + { + waitBox = new QMessageBox(this); + waitBox->setStandardButtons(QMessageBox::NoButton); + waitBox->setWindowModality(Qt::NonModal); + waitBox->setIcon(QMessageBox::Information); + waitBox->setText("Loading configuration "); + waitBox->setInformativeText("Deleting existing..."); + waitBox->setWindowTitle("Please wait"); + waitBox->show(); + waitBox->raise(); + } + // Wipe out everything first // Device sets @@ -1155,6 +1314,10 @@ void MainWindow::loadConfiguration(const Configuration *configuration) } // Device sets + if (waitBox) { + waitBox->setInformativeText("Loading device sets..."); + } + const QList& deviceSetPresets = configuration->getDeviceSetPresets(); for (const auto& deviceSetPreset : deviceSetPresets) @@ -1201,7 +1364,12 @@ void MainWindow::loadConfiguration(const Configuration *configuration) m_deviceUIs.back()->m_mainSpectrumGUI->restoreGeometry(deviceSetPreset.getSpectrumGeometry()); m_deviceUIs.back()->loadDeviceSetSettings(&deviceSetPreset, m_pluginManager->getPluginAPI(), &m_workspaces, nullptr); } + // Features + if (waitBox) { + waitBox->setInformativeText("Loading device sets..."); + } + m_featureUIs[0]->loadFeatureSetSettings( &configuration->getFeatureSetPreset(), m_pluginManager->getPluginAPI(), @@ -1222,9 +1390,19 @@ void MainWindow::loadConfiguration(const Configuration *configuration) } // Lastly restore workspaces geometry + if (waitBox) { + waitBox->setInformativeText("Finalizing..."); + } + for (int i = 0; i < configuration->getNumberOfWorkspaces(); i++) { m_workspaces[i]->restoreGeometry(configuration->getWorkspaceGeometries()[i]); } + + if (waitBox) + { + waitBox->close(); + delete waitBox; + } } void MainWindow::saveConfiguration(Configuration *configuration) @@ -2166,7 +2344,7 @@ void MainWindow::on_action_Configurations_triggered() &dialog, &ConfigurationsDialog::loadConfiguration, this, - &MainWindow::loadConfiguration + [=](const Configuration* configuration) { this->loadConfiguration(configuration, true); } ); dialog.exec(); } @@ -2323,6 +2501,13 @@ void MainWindow::sampleSourceChange(int deviceSetIndex, int newDeviceIndex, Work sampleSourceCreate(deviceSetIndex, newDeviceIndex, deviceUISet->m_deviceAPI, deviceUISet); deviceUISet->m_deviceGUI->setWorkspaceIndex(workspace->getIndex()); workspace->addToMdiArea(deviceUISet->m_deviceGUI); + + QObject::connect( + deviceUISet->m_deviceGUI, + &DeviceGUI::addChannelEmitted, + this, + [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + ); } } @@ -2345,6 +2530,13 @@ void MainWindow::sampleSinkChange(int deviceSetIndex, int newDeviceIndex, Worksp sampleSourceCreate(deviceSetIndex, newDeviceIndex, deviceUISet->m_deviceAPI, deviceUISet); deviceUISet->m_deviceGUI->setWorkspaceIndex(workspace->getIndex()); workspace->addToMdiArea(deviceUISet->m_deviceGUI); + + QObject::connect( + deviceUISet->m_deviceGUI, + &DeviceGUI::addChannelEmitted, + this, + [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + ); } } @@ -2366,78 +2558,111 @@ void MainWindow::sampleMIMOChange(int deviceSetIndex, int newDeviceIndex, Worksp sampleSourceCreate(deviceSetIndex, newDeviceIndex, deviceUISet->m_deviceAPI, deviceUISet); deviceUISet->m_deviceGUI->setWorkspaceIndex(workspace->getIndex()); workspace->addToMdiArea(deviceUISet->m_deviceGUI); + + QObject::connect( + deviceUISet->m_deviceGUI, + &DeviceGUI::addChannelEmitted, + this, + [=](int channelIndex){ this->channelAddClicked(workspace, deviceSetIndex, channelIndex); } + ); } } -void MainWindow::channelAddClicked(int channelIndex) +void MainWindow::channelAddClicked(Workspace *workspace, int deviceSetIndex, int channelIndex) { - // Do it in the currently selected source tab - // int currentChannelTabIndex = ui->tabChannels->currentIndex(); + if (deviceSetIndex >= 0) + { + DeviceUISet *deviceUI = m_deviceUIs[deviceSetIndex]; + ChannelGUI *gui = nullptr; + DeviceAPI *deviceAPI = deviceUI->m_deviceAPI; - // if (currentChannelTabIndex >= 0) - // { - // DeviceUISet *deviceUI = m_deviceUIs[currentChannelTabIndex]; + if (deviceUI->m_deviceSourceEngine) // source device => Rx channels + { + PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins + PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin; + ChannelAPI *channelAPI; + BasebandSampleSink *rxChannel; + pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI); + gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel); + deviceUI->registerRxChannelInstance(channelAPI, gui); + gui->setDeviceType(ChannelGUI::DeviceRx); + gui->setIndex(channelAPI->getIndexInDeviceSet()); + } + else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels + { + PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins + PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin; + ChannelAPI *channelAPI; + BasebandSampleSource *txChannel; + pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI); + gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel); + deviceUI->registerTxChannelInstance(channelAPI, gui); + gui->setDeviceType(ChannelGUI::DeviceTx); + gui->setIndex(channelAPI->getIndexInDeviceSet()); + } + else if (deviceUI->m_deviceMIMOEngine) // MIMO device => all possible channels. Depends on index range + { + int nbMIMOChannels = deviceUI->getNumberOfAvailableMIMOChannels(); + int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels(); + int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels(); + qDebug("MainWindow::channelAddClicked: MIMO: dev %d : nbMIMO: %d nbRx: %d nbTx: %d selected: %d", + deviceSetIndex, nbMIMOChannels, nbRxChannels, nbTxChannels, channelIndex); - // if (deviceUI->m_deviceSourceEngine) // source device => Rx channels - // { - // PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins - // PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin; - // ChannelAPI *channelAPI; - // BasebandSampleSink *rxChannel; - // pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI); - // ChannelGUI *gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel); - // deviceUI->registerRxChannelInstance(channelAPI, gui); - // } - // else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels - // { - // PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins - // PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin; - // ChannelAPI *channelAPI; - // BasebandSampleSource *txChannel; - // pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI); - // ChannelGUI *gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel); - // deviceUI->registerTxChannelInstance(channelAPI, gui); - // } - // else if (deviceUI->m_deviceMIMOEngine) // MIMO device => all possible channels. Depends on index range - // { - // int nbMIMOChannels = deviceUI->getNumberOfAvailableMIMOChannels(); - // int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels(); - // int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels(); - // qDebug("MainWindow::channelAddClicked: MIMO: tab %d : nbMIMO: %d nbRx: %d nbTx: %d selected: %d", - // currentChannelTabIndex, nbMIMOChannels, nbRxChannels, nbTxChannels, channelIndex); + if (channelIndex < nbMIMOChannels) + { + PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getMIMOChannelRegistrations(); // Available channel plugins + PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin; + ChannelAPI *channelAPI; + MIMOChannel *mimoChannel; + pluginInterface->createMIMOChannel(deviceUI->m_deviceAPI, &mimoChannel, &channelAPI); + gui = pluginInterface->createMIMOChannelGUI(deviceUI, mimoChannel); + deviceUI->registerChannelInstance(channelAPI, gui); + gui->setIndex(channelAPI->getIndexInDeviceSet()); + } + else if (channelIndex < nbMIMOChannels + nbRxChannels) // Rx + { + PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins + PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex - nbMIMOChannels].m_plugin; + ChannelAPI *channelAPI; + BasebandSampleSink *rxChannel; + pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI); + gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel); + deviceUI->registerRxChannelInstance(channelAPI, gui); + gui->setIndex(channelAPI->getIndexInDeviceSet()); + } + else if (channelIndex < nbMIMOChannels + nbRxChannels + nbTxChannels) + { + PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins + PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex - nbMIMOChannels - nbRxChannels].m_plugin; + ChannelAPI *channelAPI; + BasebandSampleSource *txChannel; + pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI); + gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel); + deviceUI->registerTxChannelInstance(channelAPI, gui); + gui->setIndex(channelAPI->getIndexInDeviceSet()); + } - // if (channelIndex < nbMIMOChannels) - // { - // PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getMIMOChannelRegistrations(); // Available channel plugins - // PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex].m_plugin; - // ChannelAPI *channelAPI; - // MIMOChannel *mimoChannel; - // pluginInterface->createMIMOChannel(deviceUI->m_deviceAPI, &mimoChannel, &channelAPI); - // ChannelGUI *gui = pluginInterface->createMIMOChannelGUI(deviceUI, mimoChannel); - // deviceUI->registerChannelInstance(channelAPI, gui); - // } - // else if (channelIndex < nbMIMOChannels + nbRxChannels) // Rx - // { - // PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getRxChannelRegistrations(); // Available channel plugins - // PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex - nbMIMOChannels].m_plugin; - // ChannelAPI *channelAPI; - // BasebandSampleSink *rxChannel; - // pluginInterface->createRxChannel(deviceUI->m_deviceAPI, &rxChannel, &channelAPI); - // ChannelGUI *gui = pluginInterface->createRxChannelGUI(deviceUI, rxChannel); - // deviceUI->registerRxChannelInstance(channelAPI, gui); - // } - // else if (channelIndex < nbMIMOChannels + nbRxChannels + nbTxChannels) - // { - // PluginAPI::ChannelRegistrations *channelRegistrations = m_pluginManager->getTxChannelRegistrations(); // Available channel plugins - // PluginInterface *pluginInterface = (*channelRegistrations)[channelIndex - nbMIMOChannels - nbRxChannels].m_plugin; - // ChannelAPI *channelAPI; - // BasebandSampleSource *txChannel; - // pluginInterface->createTxChannel(deviceUI->m_deviceAPI, &txChannel, &channelAPI); - // ChannelGUI *gui = pluginInterface->createTxChannelGUI(deviceUI, txChannel); - // deviceUI->registerTxChannelInstance(channelAPI, gui); - // } - // } - // } + gui->setDeviceType(ChannelGUI::DeviceMIMO); + } + + if (gui) + { + QObject::connect( + gui, + &ChannelGUI::moveToWorkspace, + this, + [=](int wsIndexDest){ this->channelMove(gui, wsIndexDest); } + ); + + gui->setDeviceSetIndex(deviceSetIndex); + gui->setToolTip(deviceAPI->getSamplingDeviceDisplayName()); + gui->setWorkspaceIndex(workspace->getIndex()); + qDebug("MainWindow::channelAddClicked: adding %s to workspace #%d", + qPrintable(gui->getTitle()), workspace->getIndex()); + workspace->addToMdiArea((QMdiSubWindow*) gui); + //gui->restoreGeometry(gui->getGeometryBytes()); + } + } } void MainWindow::featureAddClicked(Workspace *workspace, int featureIndex) @@ -2494,6 +2719,19 @@ void MainWindow::deviceMove(DeviceGUI *gui, int wsIndexDestnation) m_workspaces[wsIndexDestnation]->addToMdiArea(gui); } +void MainWindow::channelMove(ChannelGUI *gui, int wsIndexDestnation) +{ + int wsIndexOrigin = gui->getWorkspaceIndex(); + + if (wsIndexOrigin == wsIndexDestnation) { + return; + } + + m_workspaces[wsIndexOrigin]->removeFromMdiArea(gui); + gui->setWorkspaceIndex(wsIndexDestnation); + m_workspaces[wsIndexDestnation]->addToMdiArea(gui); +} + void MainWindow::mainSpectrumMove(MainSpectrumGUI *gui, int wsIndexDestnation) { int wsIndexOrigin = gui->getWorkspaceIndex(); @@ -2512,6 +2750,15 @@ void MainWindow::mainSpectrumShow(MainSpectrumGUI *gui) gui->show(); } +void MainWindow::showAllChannels(int deviceSetIndex) +{ + DeviceUISet *deviceUISet = m_deviceUIs[deviceSetIndex]; + + for (int i = 0; i < deviceUISet->getNumberOfChannels(); i++) { + deviceUISet->getChannelGUIAt(i)->show(); + } +} + void MainWindow::openFeaturePresetsDialog(QPoint p, Workspace *workspace) { FeaturePresetsDialog dialog; diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index 2b799cf3d..174d5f366 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -57,6 +57,7 @@ class Preset; class Command; class FeatureSetPreset; class CommandKeyReceiver; +class ConfigurationsDialog; class QMenuBar; class Workspace; @@ -79,6 +80,9 @@ public: void commandKeysDisconnect(QObject *object, const char *slot); int getNumberOfWorkspaces() const { return m_workspaces.size(); } +public slots: + void channelMove(ChannelGUI *gui, int wsIndexDestnation); + private: enum { PGroup, @@ -137,9 +141,10 @@ private: QTreeWidgetItem* addPresetToTree(const Preset* preset); void applySettings(); + void removeDeviceSet(int deviceSetIndex); void removeLastDevice(); void addFeatureSet(); - void removeFeatureSet(unsigned int tabIndex); + void removeFeatureSet(unsigned int featureSetIndex); void removeAllFeatureSets(); void deleteChannel(int deviceSetIndex, int channelIndex); void sampleDeviceChange(int deviceType, int deviceSetIndex, int newDeviceIndex, Workspace *workspace); @@ -175,7 +180,7 @@ private slots: void addWorkspace(); void viewAllWorkspaces(); void removeEmptyWorkspaces(); - void loadConfiguration(const Configuration *configuration); + void loadConfiguration(const Configuration *configuration, bool fromDialog = false); void saveConfiguration(Configuration *configuration); void sampleSourceAdd(Workspace *workspace, int deviceIndex); void sampleSinkAdd(Workspace *workspace, int deviceIndex); @@ -202,13 +207,14 @@ private slots: void on_action_My_Position_triggered(); void on_action_DeviceUserArguments_triggered(); void on_action_commands_triggered(); - void channelAddClicked(int channelIndex); + void channelAddClicked(Workspace *workspace, int deviceSetIndex, int channelIndex); void featureAddClicked(Workspace *workspace, int featureIndex); void featureMove(FeatureGUI *gui, int wsIndexDestnation); void openFeaturePresetsDialog(QPoint p, Workspace *workspace); void deviceMove(DeviceGUI *gui, int wsIndexDestnation); void mainSpectrumMove(MainSpectrumGUI *gui, int wsIndexDestnation); void mainSpectrumShow(MainSpectrumGUI *gui); + void showAllChannels(int deviceSetIndex); void on_action_Quick_Start_triggered(); void on_action_Main_Window_triggered(); void on_action_Loaded_Plugins_triggered();