From c8af6e755e27ae2ba78395baeaee089ce96d70b0 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 09:54:03 +0000 Subject: [PATCH 01/11] Add icons for arranging windows --- sdrgui/resources/res.qrc | 3 +++ sdrgui/resources/stackcolumns.png | Bin 0 -> 520 bytes sdrgui/resources/stackvertical.png | Bin 0 -> 311 bytes sdrgui/resources/tab.png | Bin 0 -> 342 bytes 4 files changed, 3 insertions(+) create mode 100644 sdrgui/resources/stackcolumns.png create mode 100644 sdrgui/resources/stackvertical.png create mode 100644 sdrgui/resources/tab.png diff --git a/sdrgui/resources/res.qrc b/sdrgui/resources/res.qrc index 6ae5f1a6b..da1f48008 100644 --- a/sdrgui/resources/res.qrc +++ b/sdrgui/resources/res.qrc @@ -150,6 +150,9 @@ channels_add.png exit_round.png 3dspectrogram.png + stackvertical.png + stackcolumns.png + tab.png LiberationMono-Regular.ttf LiberationSans-Regular.ttf diff --git a/sdrgui/resources/stackcolumns.png b/sdrgui/resources/stackcolumns.png new file mode 100644 index 0000000000000000000000000000000000000000..53dd74fd025ce64643cb01f15abb9918a549e469 GIT binary patch literal 520 zcmV+j0{8uiP)eBX1P zbI$WrBEnjtn!gKZU^>rV;W&2VJn9AdpU^@x+c<@9+3s6ht7H!zVGlZ4aRxhZ7+3M4 zfM7db;sEa8AfBLxy|^JFL_{Yd=JHrXJdcP&5pgLZ7JJtJmSYjIoX72mIN7t;j);2` z`A;@re-1?*Tk#!VFrgT=91{42%{}Wi{Ol^<#R=Tc0?#lxf?yrGS@INTr7(A}6A!wF zJdbUe6;`l{T|EXyVLnSAsy*Wm1C%Ob5Dd(s>QEJa|D*9P!4}+>LOX{aqX@>qCg}{W zvQ&j#B8T`YBLY>?>zeD zTps_bq+e;<+5f7Y-?U2XtwH6t>tEw<#b5vb>bifuK`mqTf=RxMLavDeJgTe~ HDWM4fG01-Z literal 0 HcmV?d00001 diff --git a/sdrgui/resources/tab.png b/sdrgui/resources/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..4390f0fa7f2df34badc01e2d1d9da81b9d528dbc GIT binary patch literal 342 zcmV-c0jd6pP)K*1bvtQ4q!P-v$vsL6Imzz)G>S)JAKuwn=GiXW>)W zS&JyxL<9vNz{*F^UKKMc$cCnYl1m{=@$N=uKg*zN!Ds(mU4yHSJlX#Et3#_#!7{?9v z+ooH^HICc78O-D42X8wvzgKjNCDc&D3zo5n1&rW1^e7IZXT4!G0$6JYWUGv`SXTuf zn&)#FE0~R*^ Date: Tue, 20 Dec 2022 09:55:22 +0000 Subject: [PATCH 02/11] Allow Android virtual keyboard to change sign in ValueDialZ widget --- sdrgui/gui/valuedialz.cpp | 11 +++++++++++ sdrgui/gui/valuedialz.h | 1 + 2 files changed, 12 insertions(+) diff --git a/sdrgui/gui/valuedialz.cpp b/sdrgui/gui/valuedialz.cpp index 948bfe611..af29cd99a 100644 --- a/sdrgui/gui/valuedialz.cpp +++ b/sdrgui/gui/valuedialz.cpp @@ -474,6 +474,17 @@ void ValueDialZ::leaveEvent(QEvent*) } } +void ValueDialZ::inputMethodEvent(QInputMethodEvent* event) +{ + // Android numeric virtual keyboard sends inputMethodEvents rather than keyPressEvent for . and -. + // No + on keyboard, so use either to flip sign + if ((event->commitString() == ".") || (event->commitString() == "-")) + { + setValue(-m_value); + update(); + } +} + void ValueDialZ::keyPressEvent(QKeyEvent* value) { if(m_cursor >= 0) diff --git a/sdrgui/gui/valuedialz.h b/sdrgui/gui/valuedialz.h index ad3ca6135..aa76fcb8b 100644 --- a/sdrgui/gui/valuedialz.h +++ b/sdrgui/gui/valuedialz.h @@ -83,6 +83,7 @@ private: void wheelEvent(QWheelEvent*); void leaveEvent(QEvent*); void keyPressEvent(QKeyEvent*); + void inputMethodEvent(QInputMethodEvent*); void focusInEvent(QFocusEvent*); void focusOutEvent(QFocusEvent*); From e3f9d1032dde761f5880ffc4f8f877f90089cc5a Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 09:56:30 +0000 Subject: [PATCH 03/11] Scale splash screen to size of screen --- sdrgui/gui/sdrangelsplash.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sdrgui/gui/sdrangelsplash.cpp b/sdrgui/gui/sdrangelsplash.cpp index f0fc4f5c4..e56b2d1a3 100644 --- a/sdrgui/gui/sdrangelsplash.cpp +++ b/sdrgui/gui/sdrangelsplash.cpp @@ -17,11 +17,20 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// +#include + #include "sdrangelsplash.h" SDRangelSplash::SDRangelSplash(const QPixmap& pixmap) { - QSplashScreen::setPixmap(pixmap); + int screenWidth = screen()->availableGeometry().width(); + QPixmap pm; + if (pixmap.width() > screenWidth) { + pm = pixmap.scaledToWidth(screenWidth, Qt::SmoothTransformation); + } else { + pm = pixmap; + } + QSplashScreen::setPixmap(pm); }; SDRangelSplash::~SDRangelSplash() From 60a933771da666c50181b68bd973865c241808cd Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 10:01:16 +0000 Subject: [PATCH 04/11] Support touchscreen tap and hold to be used instead of right mouse click. --- sdrgui/gui/crightclickenabler.cpp | 98 ++++++++++++++++++++++++++++--- sdrgui/gui/crightclickenabler.h | 26 ++------ 2 files changed, 95 insertions(+), 29 deletions(-) diff --git a/sdrgui/gui/crightclickenabler.cpp b/sdrgui/gui/crightclickenabler.cpp index f464fad88..082760818 100644 --- a/sdrgui/gui/crightclickenabler.cpp +++ b/sdrgui/gui/crightclickenabler.cpp @@ -1,13 +1,93 @@ -/* - * crightclickenabler.cpp - * - * Created on: Mar 26, 2018 - * Author: f4exb - */ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2018 F4EXB // +// written by Edouard Griffiths // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include #include "crightclickenabler.h" -CRightClickEnabler::CRightClickEnabler(QAbstractButton *button): QObject(button), _button(button) { - button->installEventFilter(this); -}; +CRightClickEnabler::CRightClickEnabler(QWidget *widget) : + QObject(widget), + m_widget(widget), + m_mousePressed(false) +{ + m_widget->installEventFilter(this); + m_widget->grabGesture(Qt::TapAndHoldGesture); +} +bool CRightClickEnabler::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::MouseButtonPress) + { + auto mouseEvent = (QMouseEvent*) event; + + if (mouseEvent->button() == Qt::RightButton) + { + emit rightClick(mouseEvent->globalPos()); + mouseEvent->setAccepted(true); + return true; + } + + if (mouseEvent->button() == Qt::LeftButton) + { + if (mouseEvent->source() == Qt::MouseEventNotSynthesized) { + m_mousePressed = true; + } else { + m_mousePressed = false; // Mouse event generated from touch event + } + } + } + else if (event->type() == QEvent::MouseButtonRelease) + { + auto mouseEvent = (QMouseEvent*) event; + + if (mouseEvent->button() == Qt::RightButton) + { + mouseEvent->setAccepted(true); + return true; + } + + if (mouseEvent->button() == Qt::LeftButton) { + m_mousePressed = false; + } + } + else if (event->type() == QEvent::Gesture) + { + // Use tap and hold as right click on touch screens + if (!m_mousePressed) + { + QGestureEvent *gestureEvent = static_cast(event); + if (QTapAndHoldGesture *tapAndHold = static_cast(gestureEvent->gesture(Qt::TapAndHoldGesture))) + { + if (tapAndHold->state() == Qt::GestureFinished) { + emit rightClick(tapAndHold->position().toPoint()); + } + return true; + } + } + } + else if (event->type() == QEvent::ContextMenu) + { + // Filter ContextMenu events, so we don't get popup menus as well + return true; + } + + return QObject::eventFilter(obj, event); +} diff --git a/sdrgui/gui/crightclickenabler.h b/sdrgui/gui/crightclickenabler.h index 34dcd987e..af1bb7329 100644 --- a/sdrgui/gui/crightclickenabler.h +++ b/sdrgui/gui/crightclickenabler.h @@ -19,38 +19,24 @@ #ifndef SDRGUI_GUI_CRIGHTCLICKENABLER_H_ #define SDRGUI_GUI_CRIGHTCLICKENABLER_H_ -#include -#include +#include #include "export.h" class SDRGUI_API CRightClickEnabler : public QObject { Q_OBJECT public: - CRightClickEnabler(QAbstractButton *button); + CRightClickEnabler(QWidget *widget); signals: - void rightClick(const QPoint&); + void rightClick(const QPoint&); // Emitted for right mouse click and touch tap and hold protected: - inline bool eventFilter(QObject *watched, QEvent *event) override - { - (void) watched; - - if (event->type() == QEvent::MouseButtonPress) - { - auto mouseEvent = (QMouseEvent*) event; - - if (mouseEvent->button() == Qt::RightButton) { - emit rightClick(mouseEvent->globalPos()); - } - } - - return false; - } + bool eventFilter(QObject *watched, QEvent *event) override; private: - QAbstractButton* _button; + QWidget* m_widget; + bool m_mousePressed; }; #endif /* SDRGUI_GUI_CRIGHTCLICKENABLER_H_ */ From 0dd466a90056456e10ee793cedc244c38bbfb8ab Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 10:31:15 +0000 Subject: [PATCH 05/11] Add DialogPositioner to ensure dialogs are fully on screen and remain on screen when screen orientation changes. Add DialPopup to allow dials to adjusted with a slider, which is easier on touchscreens. Add TableTapAndHold to support table context menus on touchscreens. --- .../beamsteeringcwmodgui.cpp | 2 + plugins/channelmimo/doa2/doa2gui.cpp | 4 + .../interferometer/interferometergui.cpp | 2 + .../channelrx/chanalyzer/chanalyzergui.cpp | 4 + plugins/channelrx/demodadsb/adsbdemodgui.cpp | 14 +- plugins/channelrx/demodadsb/adsbdemodgui.h | 4 +- plugins/channelrx/demodais/aisdemodgui.cpp | 7 + plugins/channelrx/demodam/amdemodgui.cpp | 2 + plugins/channelrx/demodapt/aptdemodgui.cpp | 5 + plugins/channelrx/demodatv/atvdemodgui.cpp | 4 + plugins/channelrx/demodbfm/bfmdemodgui.cpp | 7 + .../demodchirpchat/chirpchatdemodgui.cpp | 4 + plugins/channelrx/demoddab/dabdemodgui.cpp | 2 + plugins/channelrx/demoddatv/datvdemodgui.cpp | 4 + plugins/channelrx/demoddsd/dsddemodgui.cpp | 2 + .../channelrx/demodfreedv/freedvdemodgui.cpp | 4 + plugins/channelrx/demodm17/m17demodgui.cpp | 4 + plugins/channelrx/demodnfm/nfmdemodgui.cpp | 4 + .../channelrx/demodpacket/packetdemodgui.cpp | 2 + .../channelrx/demodpager/pagerdemodgui.cpp | 2 + .../demodradiosonde/radiosondedemodgui.cpp | 7 + plugins/channelrx/demodssb/ssbdemodgui.cpp | 4 + plugins/channelrx/demodvor/vordemodgui.cpp | 4 + .../channelrx/demodvormc/vordemodmcgui.cpp | 4 + plugins/channelrx/demodwfm/wfmdemodgui.cpp | 2 + plugins/channelrx/filesink/filesinkgui.cpp | 6 +- .../channelrx/freqtracker/freqtrackergui.cpp | 4 + plugins/channelrx/localsink/localsinkgui.cpp | 2 + .../channelrx/noisefigure/noisefiguregui.cpp | 2 + .../radioastronomy/radioastronomygui.cpp | 2 + .../channelrx/radioclock/radioclockgui.cpp | 4 + .../channelrx/remotesink/remotesinkgui.cpp | 4 + .../remotetcpsink/remotetcpsinkgui.cpp | 4 + .../sigmffilesink/sigmffilesinkgui.cpp | 4 + plugins/channelrx/udpsink/udpsinkgui.cpp | 4 + .../channeltx/filesource/filesourcegui.cpp | 2 + .../channeltx/localsource/localsourcegui.cpp | 2 + .../mod802.15.4/ieee_802_15_4_modgui.cpp | 4 + plugins/channeltx/modais/aismodgui.cpp | 4 + plugins/channeltx/modam/ammodgui.cpp | 4 + plugins/channeltx/modatv/atvmodgui.cpp | 4 + .../modchirpchat/chirpchatmodgui.cpp | 4 + plugins/channeltx/moddatv/datvmodgui.cpp | 2 + plugins/channeltx/modfreedv/freedvmodgui.cpp | 4 + plugins/channeltx/modm17/m17modgui.cpp | 4 + plugins/channeltx/modnfm/nfmmodgui.cpp | 4 + plugins/channeltx/modpacket/packetmodgui.cpp | 4 + plugins/channeltx/modssb/ssbmodgui.cpp | 4 + plugins/channeltx/modwfm/wfmmodgui.cpp | 4 + .../remotesource/remotesourcegui.cpp | 2 + plugins/channeltx/udpsource/udpsourcegui.cpp | 4 + plugins/feature/afc/afcgui.cpp | 4 + plugins/feature/ais/aisgui.cpp | 5 + plugins/feature/ambe/ambegui.cpp | 2 + .../feature/antennatools/antennatoolsgui.cpp | 2 + plugins/feature/aprs/aprsgui.cpp | 2 + .../demodanalyzer/demodanalyzergui.cpp | 4 + .../gs232controller/gs232controllergui.cpp | 2 + .../jogdialcontrollergui.cpp | 2 + plugins/feature/limerfe/limerfegui.cpp | 2 + plugins/feature/pertester/pertestergui.cpp | 2 + plugins/feature/radiosonde/radiosondegui.cpp | 5 + .../remotecontrol/remotecontrolgui.cpp | 2 + .../feature/rigctlserver/rigctlservergui.cpp | 2 + .../satellitetracker/satellitetrackergui.cpp | 8 +- plugins/feature/simpleptt/simplepttgui.cpp | 4 + .../feature/startracker/startrackergui.cpp | 4 + .../feature/vorlocalizer/vorlocalizergui.cpp | 9 +- .../bladerf2mimo/bladerf2mimogui.cpp | 2 + .../samplemimo/limesdrmimo/limesdrmimogui.cpp | 4 + plugins/samplemimo/metismiso/metismisogui.cpp | 4 + .../plutosdrmimo/plutosdrmimogui.cpp | 4 + plugins/samplemimo/testmi/testmigui.cpp | 4 + .../samplemimo/testmosync/testmosyncgui.cpp | 2 + plugins/samplemimo/xtrxmimo/xtrxmimogui.cpp | 4 + .../samplesink/audiooutput/audiooutputgui.cpp | 4 + .../bladerf1output/bladerf1outputgui.cpp | 2 + .../bladerf2output/bladerf2outputgui.cpp | 2 + .../samplesink/fileoutput/fileoutputgui.cpp | 2 + .../hackrfoutput/hackrfoutputgui.cpp | 2 + .../limesdroutput/limesdroutputgui.cpp | 2 + .../samplesink/localoutput/localoutputgui.cpp | 2 + .../plutosdroutput/plutosdroutputgui.cpp | 4 + .../remoteoutput/remoteoutputgui.cpp | 4 + .../soapysdroutput/soapysdroutputgui.cpp | 2 + plugins/samplesink/testsink/testsinkgui.cpp | 2 + .../samplesink/usrpoutput/usrpoutputgui.cpp | 2 + .../samplesink/xtrxoutput/xtrxoutputgui.cpp | 2 + plugins/samplesource/airspy/airspygui.cpp | 2 + plugins/samplesource/airspyhf/airspyhfgui.cpp | 2 + .../samplesource/audioinput/audioinputgui.cpp | 4 + .../bladerf1input/bladerf1inputgui.cpp | 2 + .../bladerf2input/bladerf2inputgui.cpp | 2 + plugins/samplesource/fcdpro/fcdprogui.cpp | 2 + .../samplesource/fcdproplus/fcdproplusgui.cpp | 2 + .../hackrfinput/hackrfinputgui.cpp | 2 + plugins/samplesource/kiwisdr/kiwisdrgui.cpp | 2 + .../limesdrinput/limesdrinputgui.cpp | 4 + .../samplesource/localinput/localinputgui.cpp | 2 + plugins/samplesource/perseus/perseusgui.cpp | 2 + .../plutosdrinput/plutosdrinputgui.cpp | 4 + .../remoteinput/remoteinputgui.cpp | 2 + .../remotetcpinput/remotetcpinputgui.cpp | 4 + plugins/samplesource/rtlsdr/rtlsdrgui.cpp | 2 + plugins/samplesource/sdrplay/sdrplaygui.cpp | 4 + .../samplesource/sdrplayv3/sdrplayv3gui.cpp | 4 + .../sigmffileinput/sigmffileinputgui.cpp | 2 + .../soapysdrinput/soapysdrinputgui.cpp | 2 + .../samplesource/testsource/testsourcegui.cpp | 4 + .../samplesource/usrpinput/usrpinputgui.cpp | 2 + .../samplesource/xtrxinput/xtrxinputgui.cpp | 4 + sdrgui/gui/audiodialog.cpp | 2 + sdrgui/gui/dialogpositioner.cpp | 131 ++++++++++++++++++ sdrgui/gui/dialogpositioner.h | 53 +++++++ sdrgui/gui/dialpopup.cpp | 114 +++++++++++++++ sdrgui/gui/dialpopup.h | 62 +++++++++ .../gui/spectrumcalibrationpointsdialog.cpp | 2 + sdrgui/gui/spectrummarkersdialog.cpp | 2 + sdrgui/gui/tabletapandhold.cpp | 56 ++++++++ sdrgui/gui/tabletapandhold.h | 43 ++++++ 120 files changed, 830 insertions(+), 10 deletions(-) create mode 100644 sdrgui/gui/dialogpositioner.cpp create mode 100644 sdrgui/gui/dialogpositioner.h create mode 100644 sdrgui/gui/dialpopup.cpp create mode 100644 sdrgui/gui/dialpopup.h create mode 100644 sdrgui/gui/tabletapandhold.cpp create mode 100644 sdrgui/gui/tabletapandhold.h diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp index e2c409655..c4d53c658 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp @@ -19,6 +19,7 @@ #include "device/deviceuiset.h" #include "gui/basicchannelsettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "maincore.h" @@ -234,6 +235,7 @@ void BeamSteeringCWModGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelmimo/doa2/doa2gui.cpp b/plugins/channelmimo/doa2/doa2gui.cpp index 2067aa29f..59862ce74 100644 --- a/plugins/channelmimo/doa2/doa2gui.cpp +++ b/plugins/channelmimo/doa2/doa2gui.cpp @@ -19,6 +19,8 @@ #include "device/deviceuiset.h" #include "gui/basicchannelsettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/scopevis.h" #include "dsp/spectrumvis.h" @@ -158,6 +160,7 @@ DOA2GUI::DOA2GUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, MIMOChannel *ch ui->halfWLLabel->setText(QString("%1/2").arg(QChar(0xBB, 0x03))); ui->azUnits->setText(QString("%1").arg(QChar(0260))); + DialPopup::addPopupsToChildDials(this); } DOA2GUI::~DOA2GUI() @@ -300,6 +303,7 @@ void DOA2GUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelmimo/interferometer/interferometergui.cpp b/plugins/channelmimo/interferometer/interferometergui.cpp index 6f135d448..0be02a717 100644 --- a/plugins/channelmimo/interferometer/interferometergui.cpp +++ b/plugins/channelmimo/interferometer/interferometergui.cpp @@ -19,6 +19,7 @@ #include "device/deviceuiset.h" #include "gui/basicchannelsettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/scopevis.h" #include "dsp/spectrumvis.h" @@ -269,6 +270,7 @@ void InterferometerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.cpp b/plugins/channelrx/chanalyzer/chanalyzergui.cpp index 2169fe1b6..a379b40a2 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzergui.cpp @@ -25,6 +25,8 @@ #include "gui/glspectrum.h" #include "gui/glscope.h" #include "gui/basicchannelsettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "plugin/pluginapi.h" #include "util/simpleserializer.h" #include "util/db.h" @@ -481,6 +483,7 @@ void ChannelAnalyzerGUI::onMenuDialogCalled(const QPoint& p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -582,6 +585,7 @@ ChannelAnalyzerGUI::ChannelAnalyzerGUI(PluginAPI* pluginAPI, DeviceUISet *device displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } ChannelAnalyzerGUI::~ChannelAnalyzerGUI() diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.cpp b/plugins/channelrx/demodadsb/adsbdemodgui.cpp index 385878a98..0ac33c607 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodgui.cpp @@ -51,6 +51,9 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/clickablelabel.h" +#include "gui/tabletapandhold.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -3371,7 +3374,7 @@ void ADSBDemodGUI::findOnChannelMap(Aircraft *aircraft) void ADSBDemodGUI::adsbData_customContextMenuRequested(QPoint pos) { - QTableWidgetItem *item = ui->adsbData->itemAt(pos); + QTableWidgetItem *item = ui->adsbData->itemAt(pos); if (item) { int row = item->row(); @@ -3806,6 +3809,7 @@ void ADSBDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -4752,6 +4756,8 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_osmPort = 0; // Pick a free port m_templateServer = new ADSBOSMTemplateServer("q2RVNAe3eFKCH4XsrE3r", m_osmPort); + ui->map->setAttribute(Qt::WA_AcceptTouchEvents, true); + ui->map->rootContext()->setContextProperty("aircraftModel", &m_aircraftModel); ui->map->rootContext()->setContextProperty("airportModel", &m_airportModel); ui->map->rootContext()->setContextProperty("airspaceModel", &m_airspaceModel); @@ -4819,6 +4825,8 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb // Context menu ui->adsbData->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->adsbData, SIGNAL(customContextMenuRequested(QPoint)), SLOT(adsbData_customContextMenuRequested(QPoint))); + TableTapAndHold *tableTapAndHold = new TableTapAndHold(ui->adsbData); + connect(tableTapAndHold, &TableTapAndHold::tapAndHold, this, &ADSBDemodGUI::adsbData_customContextMenuRequested); ui->photoHeader->setVisible(false); ui->photoFlag->setVisible(false); @@ -4903,6 +4911,7 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb connect(&m_redrawMapTimer, &QTimer::timeout, this, &ADSBDemodGUI::redrawMap); m_redrawMapTimer.setSingleShot(true); ui->map->installEventFilter(this); + DialPopup::addPopupsToChildDials(this); } ADSBDemodGUI::~ADSBDemodGUI() @@ -5552,6 +5561,7 @@ void ADSBDemodGUI::showEvent(QShowEvent *event) // MapQuickItems can be in wrong position when window is first displayed m_redrawMapTimer.start(500); } + ChannelGUI::showEvent(event); } bool ADSBDemodGUI::eventFilter(QObject *obj, QEvent *event) @@ -5570,7 +5580,7 @@ bool ADSBDemodGUI::eventFilter(QObject *obj, QEvent *event) } } } - return false; + return ChannelGUI::eventFilter(obj, event); } void ADSBDemodGUI::applyImportSettings() diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.h b/plugins/channelrx/demodadsb/adsbdemodgui.h index 6c79cf271..4822bc052 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.h +++ b/plugins/channelrx/demodadsb/adsbdemodgui.h @@ -1060,8 +1060,8 @@ private slots: void downloadAirspaceFinished(); void downloadNavAidsFinished(); void photoClicked(); - virtual void showEvent(QShowEvent *event); - virtual bool eventFilter(QObject *obj, QEvent *event); + virtual void showEvent(QShowEvent *event) override; + virtual bool eventFilter(QObject *obj, QEvent *event) override; void import(); void handleImportReply(QNetworkReply* reply); void preferenceChanged(int elementType); diff --git a/plugins/channelrx/demodais/aisdemodgui.cpp b/plugins/channelrx/demodais/aisdemodgui.cpp index b365a9bb7..1614b19dc 100644 --- a/plugins/channelrx/demodais/aisdemodgui.cpp +++ b/plugins/channelrx/demodais/aisdemodgui.cpp @@ -42,9 +42,12 @@ #include "util/db.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/glscopesettings.h" #include "gui/crightclickenabler.h" +#include "gui/tabletapandhold.h" #include "channel/channelwebapiutils.h" #include "maincore.h" #include "feature/featurewebapiutils.h" @@ -395,6 +398,7 @@ void AISDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, true); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -521,12 +525,15 @@ AISDemodGUI::AISDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban connect(ui->messages->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(messages_sectionResized(int, int, int))); ui->messages->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->messages, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customContextMenuRequested(QPoint))); + TableTapAndHold *tableTapAndHold = new TableTapAndHold(ui->messages); + connect(tableTapAndHold, &TableTapAndHold::tapAndHold, this, &AISDemodGUI::customContextMenuRequested); ui->scopeContainer->setVisible(false); displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } void AISDemodGUI::customContextMenuRequested(QPoint pos) diff --git a/plugins/channelrx/demodam/amdemodgui.cpp b/plugins/channelrx/demodam/amdemodgui.cpp index fcc729bbc..0033062a0 100644 --- a/plugins/channelrx/demodam/amdemodgui.cpp +++ b/plugins/channelrx/demodam/amdemodgui.cpp @@ -32,6 +32,7 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_amdemodgui.h" @@ -217,6 +218,7 @@ void AMDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/demodapt/aptdemodgui.cpp b/plugins/channelrx/demodapt/aptdemodgui.cpp index 277d3851e..4b198d958 100644 --- a/plugins/channelrx/demodapt/aptdemodgui.cpp +++ b/plugins/channelrx/demodapt/aptdemodgui.cpp @@ -43,6 +43,8 @@ #include "util/units.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "gui/crightclickenabler.h" #include "gui/graphicsviewzoom.h" @@ -570,6 +572,7 @@ void APTDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -669,12 +672,14 @@ APTDemodGUI::APTDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban m_scene->addItem(m_tempText); ui->image->setScene(m_scene); ui->image->show(); + ui->image->setDragMode(QGraphicsView::ScrollHandDrag); m_scene->installEventFilter(this); displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } APTDemodGUI::~APTDemodGUI() diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index 11f363966..aaef12a9f 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -25,6 +25,8 @@ #include "dsp/scopevis.h" #include "dsp/glscopesettings.h" #include "gui/basicchannelsettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "ui_atvdemodgui.h" #include "plugin/pluginapi.h" #include "util/simpleserializer.h" @@ -220,6 +222,7 @@ void ATVDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -329,6 +332,7 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base ui->fmDeviationLabel->setText(delta); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } ATVDemodGUI::~ATVDemodGUI() diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.cpp b/plugins/channelrx/demodbfm/bfmdemodgui.cpp index daacf41dc..8bf302c8e 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodgui.cpp @@ -38,6 +38,7 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "bfmdemodreport.h" @@ -339,6 +340,7 @@ void BFMDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -436,6 +438,11 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban ui->g14MappedFrequencies->setEnabled(false); ui->g14AltFrequencies->setEnabled(false); +#ifdef ANDROID + // Currently a bit too wide for most Android screens + ui->rdsContainer->setVisible(false); +#endif + rdsUpdateFixedFields(); rdsUpdate(true); displaySettings(); diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp index 8111ac825..5251ac42e 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp +++ b/plugins/channelrx/demodchirpchat/chirpchatdemodgui.cpp @@ -28,6 +28,8 @@ #include "gui/glspectrumgui.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "plugin/pluginapi.h" #include "util/simpleserializer.h" #include "util/db.h" @@ -352,6 +354,7 @@ void ChirpChatDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -438,6 +441,7 @@ ChirpChatDemodGUI::ChirpChatDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI makeUIConnections(); resetLoRaStatus(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } ChirpChatDemodGUI::~ChirpChatDemodGUI() diff --git a/plugins/channelrx/demoddab/dabdemodgui.cpp b/plugins/channelrx/demoddab/dabdemodgui.cpp index 4aa91d933..f3b39b312 100644 --- a/plugins/channelrx/demoddab/dabdemodgui.cpp +++ b/plugins/channelrx/demoddab/dabdemodgui.cpp @@ -36,6 +36,7 @@ #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" +#include "gui/dialogpositioner.h" #include "channel/channelwebapiutils.h" #include "maincore.h" @@ -415,6 +416,7 @@ void DABDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/demoddatv/datvdemodgui.cpp b/plugins/channelrx/demoddatv/datvdemodgui.cpp index aeb54c4a3..5dc5e23de 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.cpp +++ b/plugins/channelrx/demoddatv/datvdemodgui.cpp @@ -31,6 +31,8 @@ #include "gui/audioselectdialog.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "ui_datvdemodgui.h" @@ -183,6 +185,7 @@ void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -310,6 +313,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba ui->udpIndicator->setStyleSheet("QLabel { background-color: gray; border-radius: 8px; }"); resetToDefaults(); // does applySettings() makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } DATVDemodGUI::~DATVDemodGUI() diff --git a/plugins/channelrx/demoddsd/dsddemodgui.cpp b/plugins/channelrx/demoddsd/dsddemodgui.cpp index 5316023e8..e82c22aeb 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.cpp +++ b/plugins/channelrx/demoddsd/dsddemodgui.cpp @@ -30,6 +30,7 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "maincore.h" @@ -307,6 +308,7 @@ void DSDDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.cpp b/plugins/channelrx/demodfreedv/freedvdemodgui.cpp index 55d2faae7..55b272f6a 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.cpp @@ -27,6 +27,8 @@ #include "gui/glspectrum.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "plugin/pluginapi.h" #include "util/simpleserializer.h" #include "util/db.h" @@ -215,6 +217,7 @@ void FreeDVDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -326,6 +329,7 @@ FreeDVDemodGUI::FreeDVDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B displaySettings(); makeUIConnections(); applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true) + DialPopup::addPopupsToChildDials(this); } FreeDVDemodGUI::~FreeDVDemodGUI() diff --git a/plugins/channelrx/demodm17/m17demodgui.cpp b/plugins/channelrx/demodm17/m17demodgui.cpp index 50aae0dd2..4dbe74726 100644 --- a/plugins/channelrx/demodm17/m17demodgui.cpp +++ b/plugins/channelrx/demodm17/m17demodgui.cpp @@ -37,6 +37,8 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "maincore.h" @@ -363,6 +365,7 @@ void M17DemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -510,6 +513,7 @@ M17DemodGUI::M17DemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); applySettings(QList(), true); + DialPopup::addPopupsToChildDials(this); } M17DemodGUI::~M17DemodGUI() diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index 69f176ea8..c1bd35749 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -11,6 +11,8 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dcscodes.h" #include "dsp/dspcommands.h" @@ -315,6 +317,7 @@ void NFMDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -439,6 +442,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } NFMDemodGUI::~NFMDemodGUI() diff --git a/plugins/channelrx/demodpacket/packetdemodgui.cpp b/plugins/channelrx/demodpacket/packetdemodgui.cpp index 5faa2384e..23b162d52 100644 --- a/plugins/channelrx/demodpacket/packetdemodgui.cpp +++ b/plugins/channelrx/demodpacket/packetdemodgui.cpp @@ -44,6 +44,7 @@ #include "gui/devicestreamselectiondialog.h" #include "dsp/dspengine.h" #include "gui/crightclickenabler.h" +#include "gui/dialogpositioner.h" #include "channel/channelwebapiutils.h" #include "maincore.h" @@ -397,6 +398,7 @@ void PacketDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/demodpager/pagerdemodgui.cpp b/plugins/channelrx/demodpager/pagerdemodgui.cpp index 0e56bd151..296c275f7 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.cpp +++ b/plugins/channelrx/demodpager/pagerdemodgui.cpp @@ -42,6 +42,7 @@ #include "dsp/dspengine.h" #include "dsp/glscopesettings.h" #include "gui/crightclickenabler.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "pagerdemod.h" @@ -444,6 +445,7 @@ void PagerDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp b/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp index 3ad505ba6..4a3034b22 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp @@ -41,9 +41,12 @@ #include "gui/datetimedelegate.h" #include "gui/decimaldelegate.h" #include "gui/timedelegate.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/glscopesettings.h" #include "gui/crightclickenabler.h" +#include "gui/tabletapandhold.h" #include "channel/channelwebapiutils.h" #include "maincore.h" #include "feature/featurewebapiutils.h" @@ -501,6 +504,7 @@ void RadiosondeDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -627,6 +631,8 @@ RadiosondeDemodGUI::RadiosondeDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device connect(ui->frames->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(frames_sectionResized(int, int, int))); ui->frames->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->frames, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customContextMenuRequested(QPoint))); + TableTapAndHold *tableTapAndHold = new TableTapAndHold(ui->frames); + connect(tableTapAndHold, &TableTapAndHold::tapAndHold, this, &RadiosondeDemodGUI::customContextMenuRequested); ui->frames->setItemDelegateForColumn(FRAME_COL_DATE, new DateTimeDelegate("yyyy/MM/dd")); ui->frames->setItemDelegateForColumn(FRAME_COL_TIME, new TimeDelegate()); @@ -643,6 +649,7 @@ RadiosondeDemodGUI::RadiosondeDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } void RadiosondeDemodGUI::customContextMenuRequested(QPoint pos) diff --git a/plugins/channelrx/demodssb/ssbdemodgui.cpp b/plugins/channelrx/demodssb/ssbdemodgui.cpp index 02cfe584a..ebb01253e 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.cpp +++ b/plugins/channelrx/demodssb/ssbdemodgui.cpp @@ -16,6 +16,8 @@ #include "util/db.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ssbdemod.h" @@ -281,6 +283,7 @@ void SSBDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -398,6 +401,7 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban makeUIConnections(); applyBandwidths(m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2, true); // does applySettings(true) + DialPopup::addPopupsToChildDials(this); } SSBDemodGUI::~SSBDemodGUI() diff --git a/plugins/channelrx/demodvor/vordemodgui.cpp b/plugins/channelrx/demodvor/vordemodgui.cpp index cacb5c12b..cdbfa25e0 100644 --- a/plugins/channelrx/demodvor/vordemodgui.cpp +++ b/plugins/channelrx/demodvor/vordemodgui.cpp @@ -33,6 +33,8 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "channel/channelwebapiutils.h" #include "maincore.h" @@ -251,6 +253,7 @@ void VORDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -333,6 +336,7 @@ VORDemodGUI::VORDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } VORDemodGUI::~VORDemodGUI() diff --git a/plugins/channelrx/demodvormc/vordemodmcgui.cpp b/plugins/channelrx/demodvormc/vordemodmcgui.cpp index 871ffa896..05827e2a1 100644 --- a/plugins/channelrx/demodvormc/vordemodmcgui.cpp +++ b/plugins/channelrx/demodvormc/vordemodmcgui.cpp @@ -43,6 +43,8 @@ #include "dsp/dspengine.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "channel/channelwebapiutils.h" #include "maincore.h" @@ -1130,6 +1132,7 @@ void VORDemodMCGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -1282,6 +1285,7 @@ VORDemodMCGUI::VORDemodMCGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } VORDemodMCGUI::~VORDemodMCGUI() diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.cpp b/plugins/channelrx/demodwfm/wfmdemodgui.cpp index 28b7f0583..65bcd2059 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodgui.cpp @@ -15,6 +15,7 @@ #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" +#include "gui/dialogpositioner.h" #include "gui/audioselectdialog.h" #include "maincore.h" @@ -178,6 +179,7 @@ void WFMDemodGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/filesink/filesinkgui.cpp b/plugins/channelrx/filesink/filesinkgui.cpp index 5bb96aaca..10282b006 100644 --- a/plugins/channelrx/filesink/filesinkgui.cpp +++ b/plugins/channelrx/filesink/filesinkgui.cpp @@ -24,6 +24,8 @@ #include "device/deviceapi.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -231,6 +233,7 @@ FileSinkGUI::FileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } FileSinkGUI::~FileSinkGUI() @@ -378,6 +381,7 @@ void FileSinkGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -519,8 +523,8 @@ void FileSinkGUI::on_showFileDialog_clicked(bool checked) tr("SDR I/Q Files (*.sdriq *.wav)") ); - fileDialog.setOptions(QFileDialog::DontUseNativeDialog); fileDialog.setFileMode(QFileDialog::AnyFile); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); QStringList fileNames; if (fileDialog.exec()) diff --git a/plugins/channelrx/freqtracker/freqtrackergui.cpp b/plugins/channelrx/freqtracker/freqtrackergui.cpp index d76cc758d..bbef439b6 100644 --- a/plugins/channelrx/freqtracker/freqtrackergui.cpp +++ b/plugins/channelrx/freqtracker/freqtrackergui.cpp @@ -33,6 +33,8 @@ #include "dsp/dspengine.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "freqtracker.h" @@ -279,6 +281,7 @@ void FreqTrackerGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -373,6 +376,7 @@ FreqTrackerGUI::FreqTrackerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } FreqTrackerGUI::~FreqTrackerGUI() diff --git a/plugins/channelrx/localsink/localsinkgui.cpp b/plugins/channelrx/localsink/localsinkgui.cpp index ff4fa5bec..ba92f80db 100644 --- a/plugins/channelrx/localsink/localsinkgui.cpp +++ b/plugins/channelrx/localsink/localsinkgui.cpp @@ -20,6 +20,7 @@ #include "device/deviceuiset.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/dspcommands.h" @@ -348,6 +349,7 @@ void LocalSinkGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/noisefigure/noisefiguregui.cpp b/plugins/channelrx/noisefigure/noisefiguregui.cpp index 96274d3fb..62161c1a4 100644 --- a/plugins/channelrx/noisefigure/noisefiguregui.cpp +++ b/plugins/channelrx/noisefigure/noisefiguregui.cpp @@ -34,6 +34,7 @@ #include "gui/devicestreamselectiondialog.h" #include "gui/crightclickenabler.h" #include "gui/decimaldelegate.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "noisefigure.h" @@ -560,6 +561,7 @@ void NoiseFigureGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.cpp b/plugins/channelrx/radioastronomy/radioastronomygui.cpp index 708821929..5fc26a296 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomygui.cpp @@ -51,6 +51,7 @@ #include "gui/crightclickenabler.h" #include "gui/timedelegate.h" #include "gui/decimaldelegate.h" +#include "gui/dialogpositioner.h" #include "channel/channelwebapiutils.h" #include "maincore.h" #include "feature/featurewebapiutils.h" @@ -1929,6 +1930,7 @@ void RadioAstronomyGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/radioclock/radioclockgui.cpp b/plugins/channelrx/radioclock/radioclockgui.cpp index 3c5304022..b6f14c252 100644 --- a/plugins/channelrx/radioclock/radioclockgui.cpp +++ b/plugins/channelrx/radioclock/radioclockgui.cpp @@ -32,6 +32,8 @@ #include "util/db.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/glscopesettings.h" #include "gui/crightclickenabler.h" @@ -235,6 +237,7 @@ void RadioClockGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -328,6 +331,7 @@ RadioClockGUI::RadioClockGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } RadioClockGUI::~RadioClockGUI() diff --git a/plugins/channelrx/remotesink/remotesinkgui.cpp b/plugins/channelrx/remotesink/remotesinkgui.cpp index c506cf976..ebf39f766 100644 --- a/plugins/channelrx/remotesink/remotesinkgui.cpp +++ b/plugins/channelrx/remotesink/remotesinkgui.cpp @@ -20,6 +20,8 @@ #include "device/deviceuiset.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -131,6 +133,7 @@ RemoteSinkGUI::RemoteSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } RemoteSinkGUI::~RemoteSinkGUI() @@ -247,6 +250,7 @@ void RemoteSinkGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/remotetcpsink/remotetcpsinkgui.cpp b/plugins/channelrx/remotetcpsink/remotetcpsinkgui.cpp index a752105af..5e2657716 100644 --- a/plugins/channelrx/remotetcpsink/remotetcpsinkgui.cpp +++ b/plugins/channelrx/remotetcpsink/remotetcpsinkgui.cpp @@ -21,6 +21,8 @@ #include "device/deviceuiset.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -199,6 +201,7 @@ RemoteTCPSinkGUI::RemoteTCPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISe displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } RemoteTCPSinkGUI::~RemoteTCPSinkGUI() @@ -307,6 +310,7 @@ void RemoteTCPSinkGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp index 727105d4b..71b080a82 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.cpp @@ -23,6 +23,8 @@ #include "device/deviceapi.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -217,6 +219,7 @@ SigMFFileSinkGUI::SigMFFileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISe displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } SigMFFileSinkGUI::~SigMFFileSinkGUI() @@ -370,6 +373,7 @@ void SigMFFileSinkGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channelrx/udpsink/udpsinkgui.cpp b/plugins/channelrx/udpsink/udpsinkgui.cpp index 5bdb1b2e1..c84969bbf 100644 --- a/plugins/channelrx/udpsink/udpsinkgui.cpp +++ b/plugins/channelrx/udpsink/udpsinkgui.cpp @@ -25,6 +25,8 @@ #include "util/db.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "ui_udpsinkgui.h" #include "maincore.h" @@ -214,6 +216,7 @@ UDPSinkGUI::UDPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS makeUIConnections(); applySettingsImmediate(true); applySettings(true); + DialPopup::addPopupsToChildDials(this); } UDPSinkGUI::~UDPSinkGUI() @@ -623,6 +626,7 @@ void UDPSinkGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channeltx/filesource/filesourcegui.cpp b/plugins/channeltx/filesource/filesourcegui.cpp index 1b6123a8e..05113a9c9 100644 --- a/plugins/channeltx/filesource/filesourcegui.cpp +++ b/plugins/channeltx/filesource/filesourcegui.cpp @@ -25,6 +25,7 @@ #include "dsp/dspcommands.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialogpositioner.h" #include "util/db.h" #include "mainwindow.h" @@ -386,6 +387,7 @@ void FileSourceGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channeltx/localsource/localsourcegui.cpp b/plugins/channeltx/localsource/localsourcegui.cpp index 247fb3685..5a37d9d68 100644 --- a/plugins/channeltx/localsource/localsourcegui.cpp +++ b/plugins/channeltx/localsource/localsourcegui.cpp @@ -20,6 +20,7 @@ #include "device/deviceuiset.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialogpositioner.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -253,6 +254,7 @@ void LocalSourceGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); 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 7ed6abc60..821c72d5b 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 @@ -36,6 +36,8 @@ #include "gui/crightclickenabler.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_ieee_802_15_4_modgui.h" @@ -343,6 +345,7 @@ void IEEE_802_15_4_ModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -471,6 +474,7 @@ IEEE_802_15_4_ModGUI::IEEE_802_15_4_ModGUI(PluginAPI* pluginAPI, DeviceUISet *de displaySettings(); makeUIConnections(); applySettings(); + DialPopup::addPopupsToChildDials(this); } IEEE_802_15_4_ModGUI::~IEEE_802_15_4_ModGUI() diff --git a/plugins/channeltx/modais/aismodgui.cpp b/plugins/channeltx/modais/aismodgui.cpp index 371b8e5db..acc78af59 100644 --- a/plugins/channeltx/modais/aismodgui.cpp +++ b/plugins/channeltx/modais/aismodgui.cpp @@ -35,6 +35,8 @@ #include "gui/crightclickenabler.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_aismodgui.h" @@ -366,6 +368,7 @@ void AISModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -497,6 +500,7 @@ AISModGUI::AISModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam displaySettings(); makeUIConnections(); applySettings(); + DialPopup::addPopupsToChildDials(this); } AISModGUI::~AISModGUI() diff --git a/plugins/channeltx/modam/ammodgui.cpp b/plugins/channeltx/modam/ammodgui.cpp index 7b387a71e..8fbe760fb 100644 --- a/plugins/channeltx/modam/ammodgui.cpp +++ b/plugins/channeltx/modam/ammodgui.cpp @@ -33,6 +33,8 @@ #include "gui/audioselectdialog.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_ammodgui.h" @@ -306,6 +308,7 @@ void AMModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -406,6 +409,7 @@ AMModGUI::AMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampl displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } AMModGUI::~AMModGUI() diff --git a/plugins/channeltx/modatv/atvmodgui.cpp b/plugins/channeltx/modatv/atvmodgui.cpp index a5113c1d5..e2d96388f 100644 --- a/plugins/channeltx/modatv/atvmodgui.cpp +++ b/plugins/channeltx/modatv/atvmodgui.cpp @@ -32,6 +32,8 @@ #include "util/db.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_atvmodgui.h" @@ -119,6 +121,7 @@ ATVModGUI::ATVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } ATVModGUI::~ATVModGUI() @@ -711,6 +714,7 @@ void ATVModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp b/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp index 3d70d6235..b746a8d51 100644 --- a/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp +++ b/plugins/channeltx/modchirpchat/chirpchatmodgui.cpp @@ -30,6 +30,8 @@ #include "gui/crightclickenabler.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_chirpchatmodgui.h" @@ -386,6 +388,7 @@ void ChirpChatModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -465,6 +468,7 @@ ChirpChatModGUI::ChirpChatModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, displaySettings(); makeUIConnections(); applySettings(); + DialPopup::addPopupsToChildDials(this); } ChirpChatModGUI::~ChirpChatModGUI() diff --git a/plugins/channeltx/moddatv/datvmodgui.cpp b/plugins/channeltx/moddatv/datvmodgui.cpp index 8a84c88de..21e3ed87d 100644 --- a/plugins/channeltx/moddatv/datvmodgui.cpp +++ b/plugins/channeltx/moddatv/datvmodgui.cpp @@ -33,6 +33,7 @@ #include "util/db.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_datvmodgui.h" @@ -514,6 +515,7 @@ void DATVModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channeltx/modfreedv/freedvmodgui.cpp b/plugins/channeltx/modfreedv/freedvmodgui.cpp index d1fcca227..c28a17d4f 100644 --- a/plugins/channeltx/modfreedv/freedvmodgui.cpp +++ b/plugins/channeltx/modfreedv/freedvmodgui.cpp @@ -35,6 +35,8 @@ #include "gui/audioselectdialog.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_freedvmodgui.h" @@ -318,6 +320,7 @@ void FreeDVModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -415,6 +418,7 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb displaySettings(); makeUIConnections(); applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true) + DialPopup::addPopupsToChildDials(this); } FreeDVModGUI::~FreeDVModGUI() diff --git a/plugins/channeltx/modm17/m17modgui.cpp b/plugins/channeltx/modm17/m17modgui.cpp index fa04175f3..2724eaca7 100644 --- a/plugins/channeltx/modm17/m17modgui.cpp +++ b/plugins/channeltx/modm17/m17modgui.cpp @@ -33,6 +33,8 @@ #include "gui/audioselectdialog.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_m17modgui.h" @@ -415,6 +417,7 @@ void M17ModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -524,6 +527,7 @@ M17ModGUI::M17ModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam displaySettings(); makeUIConnections(); applySettings(QList{"channelMarker", "rollupState"}); + DialPopup::addPopupsToChildDials(this); } M17ModGUI::~M17ModGUI() diff --git a/plugins/channeltx/modnfm/nfmmodgui.cpp b/plugins/channeltx/modnfm/nfmmodgui.cpp index 6d526aebd..87d6017f9 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.cpp +++ b/plugins/channeltx/modnfm/nfmmodgui.cpp @@ -33,6 +33,8 @@ #include "gui/audioselectdialog.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_nfmmodgui.h" @@ -396,6 +398,7 @@ void NFMModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -512,6 +515,7 @@ NFMModGUI::NFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam displaySettings(); makeUIConnections(); applySettings(); + DialPopup::addPopupsToChildDials(this); } NFMModGUI::~NFMModGUI() diff --git a/plugins/channeltx/modpacket/packetmodgui.cpp b/plugins/channeltx/modpacket/packetmodgui.cpp index bf13a8b7a..34ccd8d93 100644 --- a/plugins/channeltx/modpacket/packetmodgui.cpp +++ b/plugins/channeltx/modpacket/packetmodgui.cpp @@ -34,6 +34,8 @@ #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" #include "gui/fmpreemphasisdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_packetmodgui.h" @@ -403,6 +405,7 @@ void PacketModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -510,6 +513,7 @@ PacketModGUI::PacketModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb displaySettings(); makeUIConnections(); applySettings(); + DialPopup::addPopupsToChildDials(this); } PacketModGUI::~PacketModGUI() diff --git a/plugins/channeltx/modssb/ssbmodgui.cpp b/plugins/channeltx/modssb/ssbmodgui.cpp index 2be75db9c..f1db7b1c3 100644 --- a/plugins/channeltx/modssb/ssbmodgui.cpp +++ b/plugins/channeltx/modssb/ssbmodgui.cpp @@ -36,6 +36,8 @@ #include "gui/audioselectdialog.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" SSBModGUI* SSBModGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx) @@ -382,6 +384,7 @@ void SSBModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -497,6 +500,7 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam displaySettings(); makeUIConnections(); applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true) + DialPopup::addPopupsToChildDials(this); } SSBModGUI::~SSBModGUI() diff --git a/plugins/channeltx/modwfm/wfmmodgui.cpp b/plugins/channeltx/modwfm/wfmmodgui.cpp index f007b14a8..2541f8c22 100644 --- a/plugins/channeltx/modwfm/wfmmodgui.cpp +++ b/plugins/channeltx/modwfm/wfmmodgui.cpp @@ -33,6 +33,8 @@ #include "gui/audioselectdialog.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_wfmmodgui.h" @@ -312,6 +314,7 @@ void WFMModGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); @@ -422,6 +425,7 @@ WFMModGUI::WFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } WFMModGUI::~WFMModGUI() diff --git a/plugins/channeltx/remotesource/remotesourcegui.cpp b/plugins/channeltx/remotesource/remotesourcegui.cpp index 334e2a201..27a2f8922 100644 --- a/plugins/channeltx/remotesource/remotesourcegui.cpp +++ b/plugins/channeltx/remotesource/remotesourcegui.cpp @@ -23,6 +23,7 @@ #include "dsp/dspcommands.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "remotesource.h" @@ -326,6 +327,7 @@ void RemoteSourceGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/channeltx/udpsource/udpsourcegui.cpp b/plugins/channeltx/udpsource/udpsourcegui.cpp index 7e06158f8..6cd94f137 100644 --- a/plugins/channeltx/udpsource/udpsourcegui.cpp +++ b/plugins/channeltx/udpsource/udpsourcegui.cpp @@ -25,6 +25,8 @@ #include "util/db.h" #include "gui/basicchannelsettingsdialog.h" #include "gui/devicestreamselectiondialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "plugin/pluginapi.h" #include "maincore.h" @@ -171,6 +173,7 @@ UDPSourceGUI::UDPSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb displaySettings(); makeUIConnections(); applySettings(true); + DialPopup::addPopupsToChildDials(this); } UDPSourceGUI::~UDPSourceGUI() @@ -505,6 +508,7 @@ void UDPSourceGUI::onMenuDialogCalled(const QPoint &p) } dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); diff --git a/plugins/feature/afc/afcgui.cpp b/plugins/feature/afc/afcgui.cpp index 8fa3bd289..c3c078d7d 100644 --- a/plugins/feature/afc/afcgui.cpp +++ b/plugins/feature/afc/afcgui.cpp @@ -21,6 +21,8 @@ #include "device/deviceset.h" #include "channel/channelapi.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "ui_afcgui.h" @@ -171,6 +173,7 @@ AFCGUI::AFCGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *featur displaySettings(); applySettings(true); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } AFCGUI::~AFCGUI() @@ -287,6 +290,7 @@ void AFCGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/ais/aisgui.cpp b/plugins/feature/ais/aisgui.cpp index ceacad050..e9c0dab47 100644 --- a/plugins/feature/ais/aisgui.cpp +++ b/plugins/feature/ais/aisgui.cpp @@ -27,6 +27,8 @@ #include "feature/featureuiset.h" #include "feature/featurewebapiutils.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/tabletapandhold.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "device/deviceuiset.h" @@ -226,6 +228,8 @@ AISGUI::AISGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *featur // Context menu ui->vessels->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->vessels, SIGNAL(customContextMenuRequested(QPoint)), SLOT(vessels_customContextMenuRequested(QPoint))); + TableTapAndHold *tableTapAndHold = new TableTapAndHold(ui->vessels); + connect(tableTapAndHold, &TableTapAndHold::tapAndHold, this, &AISGUI::vessels_customContextMenuRequested); m_settings.setRollupState(&m_rollupState); @@ -291,6 +295,7 @@ void AISGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/ambe/ambegui.cpp b/plugins/feature/ambe/ambegui.cpp index 91eede6ce..70e6bb911 100644 --- a/plugins/feature/ambe/ambegui.cpp +++ b/plugins/feature/ambe/ambegui.cpp @@ -18,6 +18,7 @@ #include "feature/featureuiset.h" #include "gui/basicfeaturesettingsdialog.h" #include "gui/crightclickenabler.h" +#include "gui/dialogpositioner.h" #include "ui_ambegui.h" #include "ambegui.h" @@ -125,6 +126,7 @@ void AMBEGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/antennatools/antennatoolsgui.cpp b/plugins/feature/antennatools/antennatoolsgui.cpp index 743830f60..124ee06da 100644 --- a/plugins/feature/antennatools/antennatoolsgui.cpp +++ b/plugins/feature/antennatools/antennatoolsgui.cpp @@ -22,6 +22,7 @@ #include "feature/featureuiset.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "channel/channelwebapiutils.h" #include "mainwindow.h" #include "maincore.h" @@ -223,6 +224,7 @@ void AntennaToolsGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/aprs/aprsgui.cpp b/plugins/feature/aprs/aprsgui.cpp index 5d54a02a8..2073404be 100644 --- a/plugins/feature/aprs/aprsgui.cpp +++ b/plugins/feature/aprs/aprsgui.cpp @@ -33,6 +33,7 @@ #include "feature/featureuiset.h" #include "feature/featurewebapiutils.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "maincore.h" #include "device/deviceuiset.h" @@ -698,6 +699,7 @@ void APRSGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/demodanalyzer/demodanalyzergui.cpp b/plugins/feature/demodanalyzer/demodanalyzergui.cpp index bc0605615..e5f4008ee 100644 --- a/plugins/feature/demodanalyzer/demodanalyzergui.cpp +++ b/plugins/feature/demodanalyzer/demodanalyzergui.cpp @@ -23,6 +23,8 @@ #include "gui/basicfeaturesettingsdialog.h" #include "gui/glspectrum.h" #include "gui/glscope.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "device/deviceset.h" #include "util/db.h" #include "maincore.h" @@ -188,6 +190,7 @@ DemodAnalyzerGUI::DemodAnalyzerGUI(PluginAPI* pluginAPI, FeatureUISet *featureUI displaySettings(); applySettings(true); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } DemodAnalyzerGUI::~DemodAnalyzerGUI() @@ -276,6 +279,7 @@ void DemodAnalyzerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/gs232controller/gs232controllergui.cpp b/plugins/feature/gs232controller/gs232controllergui.cpp index 3b6e5d418..86ffe3268 100644 --- a/plugins/feature/gs232controller/gs232controllergui.cpp +++ b/plugins/feature/gs232controller/gs232controllergui.cpp @@ -24,6 +24,7 @@ #include "feature/featureuiset.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "device/deviceuiset.h" @@ -322,6 +323,7 @@ void GS232ControllerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/jogdialcontroller/jogdialcontrollergui.cpp b/plugins/feature/jogdialcontroller/jogdialcontrollergui.cpp index e94d200ec..e46658a43 100644 --- a/plugins/feature/jogdialcontroller/jogdialcontrollergui.cpp +++ b/plugins/feature/jogdialcontroller/jogdialcontrollergui.cpp @@ -20,6 +20,7 @@ #include "feature/featureuiset.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "device/deviceset.h" #include "util/db.h" #include "maincore.h" @@ -258,6 +259,7 @@ void JogdialControllerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/limerfe/limerfegui.cpp b/plugins/feature/limerfe/limerfegui.cpp index dd3f6b6cb..19c24e5ff 100644 --- a/plugins/feature/limerfe/limerfegui.cpp +++ b/plugins/feature/limerfe/limerfegui.cpp @@ -18,6 +18,7 @@ #include "feature/featureuiset.h" #include "gui/basicfeaturesettingsdialog.h" #include "gui/crightclickenabler.h" +#include "gui/dialogpositioner.h" #include "util/db.h" #include "dsp/dspengine.h" #include "dsp/dspdevicesourceengine.h" @@ -98,6 +99,7 @@ void LimeRFEGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/pertester/pertestergui.cpp b/plugins/feature/pertester/pertestergui.cpp index 4c7e6a0b9..027e46854 100644 --- a/plugins/feature/pertester/pertestergui.cpp +++ b/plugins/feature/pertester/pertestergui.cpp @@ -22,6 +22,7 @@ #include "feature/featureuiset.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "device/deviceuiset.h" @@ -212,6 +213,7 @@ void PERTesterGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/radiosonde/radiosondegui.cpp b/plugins/feature/radiosonde/radiosondegui.cpp index 0ca45bcc2..e13ff4e9c 100644 --- a/plugins/feature/radiosonde/radiosondegui.cpp +++ b/plugins/feature/radiosonde/radiosondegui.cpp @@ -27,6 +27,8 @@ #include "gui/basicfeaturesettingsdialog.h" #include "gui/datetimedelegate.h" #include "gui/decimaldelegate.h" +#include "gui/tabletapandhold.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "device/deviceuiset.h" @@ -175,6 +177,8 @@ RadiosondeGUI::RadiosondeGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, F // Context menu ui->radiosondes->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->radiosondes, SIGNAL(customContextMenuRequested(QPoint)), SLOT(radiosondes_customContextMenuRequested(QPoint))); + TableTapAndHold *tableTapAndHold = new TableTapAndHold(ui->radiosondes); + connect(tableTapAndHold, &TableTapAndHold::tapAndHold, this, &RadiosondeGUI::customContextMenuRequested); ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LATITUDE, new DecimalDelegate(5)); ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LONGITUDE, new DecimalDelegate(5)); @@ -254,6 +258,7 @@ void RadiosondeGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/remotecontrol/remotecontrolgui.cpp b/plugins/feature/remotecontrol/remotecontrolgui.cpp index 5abd45d59..2593a3890 100644 --- a/plugins/feature/remotecontrol/remotecontrolgui.cpp +++ b/plugins/feature/remotecontrol/remotecontrolgui.cpp @@ -20,6 +20,7 @@ #include "gui/basicfeaturesettingsdialog.h" #include "gui/flowlayout.h" #include "gui/scidoublespinbox.h" +#include "gui/dialogpositioner.h" #include "ui_remotecontrolgui.h" #include "remotecontrol.h" @@ -202,6 +203,7 @@ void RemoteControlGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/rigctlserver/rigctlservergui.cpp b/plugins/feature/rigctlserver/rigctlservergui.cpp index bd448b7d3..e8a4a31ab 100644 --- a/plugins/feature/rigctlserver/rigctlservergui.cpp +++ b/plugins/feature/rigctlserver/rigctlservergui.cpp @@ -20,6 +20,7 @@ #include "feature/featureuiset.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "device/deviceset.h" #include "maincore.h" @@ -298,6 +299,7 @@ void RigCtlServerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/satellitetracker/satellitetrackergui.cpp b/plugins/feature/satellitetracker/satellitetrackergui.cpp index 2e9b33a38..ab2446d04 100644 --- a/plugins/feature/satellitetracker/satellitetrackergui.cpp +++ b/plugins/feature/satellitetracker/satellitetrackergui.cpp @@ -32,6 +32,7 @@ #include "feature/featureuiset.h" #include "feature/featurewebapiutils.h" #include "gui/basicfeaturesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "device/deviceuiset.h" #include "util/units.h" @@ -397,6 +398,7 @@ void SatelliteTrackerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); @@ -512,7 +514,7 @@ void SatelliteTrackerGUI::on_useMyPosition_clicked(bool checked) void SatelliteTrackerGUI::on_displaySettings_clicked() { SatelliteTrackerSettingsDialog dialog(&m_settings); - + new DialogPositioner(&dialog, true); if (dialog.exec() == QDialog::Accepted) { m_settingsKeys.append("deviceSettings"); @@ -575,7 +577,7 @@ void SatelliteTrackerGUI::on_updateSatData_clicked() void SatelliteTrackerGUI::on_selectSats_clicked() { SatelliteSelectionDialog dialog(&m_settings, m_satellites); - + new DialogPositioner(&dialog, true); if (dialog.exec() == QDialog::Accepted) { updateSelectedSats(); @@ -587,7 +589,7 @@ void SatelliteTrackerGUI::on_selectSats_clicked() void SatelliteTrackerGUI::on_radioControl_clicked() { SatelliteRadioControlDialog dialog(&m_settings, m_satellites); - + new DialogPositioner(&dialog, true); if (dialog.exec() == QDialog::Accepted) { m_settingsKeys.append("deviceSettings"); diff --git a/plugins/feature/simpleptt/simplepttgui.cpp b/plugins/feature/simpleptt/simplepttgui.cpp index 3de0d8cca..725e7764e 100644 --- a/plugins/feature/simpleptt/simplepttgui.cpp +++ b/plugins/feature/simpleptt/simplepttgui.cpp @@ -21,6 +21,8 @@ #include "gui/basicfeaturesettingsdialog.h" #include "gui/crightclickenabler.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "device/deviceset.h" #include "util/db.h" @@ -190,6 +192,7 @@ SimplePTTGUI::SimplePTTGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Fea displaySettings(); applySettings(true); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } SimplePTTGUI::~SimplePTTGUI() @@ -321,6 +324,7 @@ void SimplePTTGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); diff --git a/plugins/feature/startracker/startrackergui.cpp b/plugins/feature/startracker/startrackergui.cpp index ec24e6920..0663a0865 100644 --- a/plugins/feature/startracker/startrackergui.cpp +++ b/plugins/feature/startracker/startrackergui.cpp @@ -38,6 +38,7 @@ #include "gui/basicfeaturesettingsdialog.h" #include "gui/dmsspinbox.h" #include "gui/graphicsviewzoom.h" +#include "gui/dialogpositioner.h" #include "mainwindow.h" #include "device/deviceuiset.h" #include "util/units.h" @@ -491,6 +492,7 @@ void StarTrackerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); @@ -1122,6 +1124,8 @@ void StarTrackerGUI::createGalacticLineOfSightScene() ui->image->setScene(scene); ui->image->show(); + + ui->image->setDragMode(QGraphicsView::ScrollHandDrag); } void StarTrackerGUI::plotGalacticLineOfSight() diff --git a/plugins/feature/vorlocalizer/vorlocalizergui.cpp b/plugins/feature/vorlocalizer/vorlocalizergui.cpp index f83ec408f..604e7e7e3 100644 --- a/plugins/feature/vorlocalizer/vorlocalizergui.cpp +++ b/plugins/feature/vorlocalizer/vorlocalizergui.cpp @@ -41,6 +41,8 @@ #include "util/units.h" #include "gui/basicfeaturesettingsdialog.h" #include "gui/crightclickenabler.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "maincore.h" #include "vorlocalizer.h" @@ -833,6 +835,7 @@ void VORLocalizerGUI::onMenuDialogCalled(const QPoint &p) dialog.setDefaultTitle(m_displayedName); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_title = dialog.getTitle(); @@ -970,6 +973,8 @@ VORLocalizerGUI::VORLocalizerGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISe rollupContents->arrangeRollups(); connect(rollupContents, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + ui->map->setAttribute(Qt::WA_AcceptTouchEvents, true); + ui->map->rootContext()->setContextProperty("vorModel", &m_vorModel); ui->map->setSource(QUrl(QStringLiteral("qrc:/demodvor/map/map.qml"))); @@ -1042,6 +1047,7 @@ VORLocalizerGUI::VORLocalizerGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISe connect(MainCore::instance(), &MainCore::deviceChanged, this, &VORLocalizerGUI::channelsRefresh); // List already opened channels channelsRefresh(); + DialPopup::addPopupsToChildDials(this); } VORLocalizerGUI::~VORLocalizerGUI() @@ -1269,8 +1275,7 @@ bool VORLocalizerGUI::eventFilter(QObject *obj, QEvent *event) } } } - - return false; + return FeatureGUI::eventFilter(obj, event); } void VORLocalizerGUI::makeUIConnections() diff --git a/plugins/samplemimo/bladerf2mimo/bladerf2mimogui.cpp b/plugins/samplemimo/bladerf2mimo/bladerf2mimogui.cpp index 83310101f..1847c303f 100644 --- a/plugins/samplemimo/bladerf2mimo/bladerf2mimogui.cpp +++ b/plugins/samplemimo/bladerf2mimo/bladerf2mimogui.cpp @@ -30,6 +30,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspdevicemimoengine.h" #include "dsp/dspcommands.h" @@ -878,6 +879,7 @@ void BladeRF2MIMOGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplemimo/limesdrmimo/limesdrmimogui.cpp b/plugins/samplemimo/limesdrmimo/limesdrmimogui.cpp index fa1756887..b6b32806f 100644 --- a/plugins/samplemimo/limesdrmimo/limesdrmimogui.cpp +++ b/plugins/samplemimo/limesdrmimo/limesdrmimogui.cpp @@ -29,6 +29,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspdevicemimoengine.h" #include "dsp/dspcommands.h" @@ -103,6 +105,7 @@ LimeSDRMIMOGUI::LimeSDRMIMOGUI(DeviceUISet *deviceUISet, QWidget* parent) : sendSettings(); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } LimeSDRMIMOGUI::~LimeSDRMIMOGUI() @@ -1244,6 +1247,7 @@ void LimeSDRMIMOGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplemimo/metismiso/metismisogui.cpp b/plugins/samplemimo/metismiso/metismisogui.cpp index 66faee965..b3603245d 100644 --- a/plugins/samplemimo/metismiso/metismisogui.cpp +++ b/plugins/samplemimo/metismiso/metismisogui.cpp @@ -28,6 +28,8 @@ #include "device/deviceuiset.h" #include "gui/colormapper.h" #include "gui/glspectrum.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "gui/basicdevicesettingsdialog.h" #include "dsp/dspengine.h" #include "dsp/dspdevicemimoengine.h" @@ -75,6 +77,7 @@ MetisMISOGui::MetisMISOGui(DeviceUISet *deviceUISet, QWidget* parent) : connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(openDeviceSettingsDialog(const QPoint &))); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } MetisMISOGui::~MetisMISOGui() @@ -611,6 +614,7 @@ void MetisMISOGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplemimo/plutosdrmimo/plutosdrmimogui.cpp b/plugins/samplemimo/plutosdrmimo/plutosdrmimogui.cpp index 8d3f28c70..6ea13e612 100644 --- a/plugins/samplemimo/plutosdrmimo/plutosdrmimogui.cpp +++ b/plugins/samplemimo/plutosdrmimo/plutosdrmimogui.cpp @@ -28,6 +28,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspdevicemimoengine.h" #include "dsp/dspcommands.h" @@ -106,6 +108,7 @@ PlutoSDRMIMOGUI::PlutoSDRMIMOGUI(DeviceUISet *deviceUISet, QWidget* parent) : m_sampleMIMO->setMessageQueueToGUI(&m_inputMessageQueue); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } PlutoSDRMIMOGUI::~PlutoSDRMIMOGUI() @@ -988,6 +991,7 @@ void PlutoSDRMIMOGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplemimo/testmi/testmigui.cpp b/plugins/samplemimo/testmi/testmigui.cpp index 9a566b3e7..7d87010a3 100644 --- a/plugins/samplemimo/testmi/testmigui.cpp +++ b/plugins/samplemimo/testmi/testmigui.cpp @@ -29,6 +29,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspdevicemimoengine.h" #include "dsp/dspcommands.h" @@ -88,6 +90,7 @@ TestMIGui::TestMIGui(DeviceUISet *deviceUISet, QWidget* parent) : connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(openDeviceSettingsDialog(const QPoint &))); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } TestMIGui::~TestMIGui() @@ -559,6 +562,7 @@ void TestMIGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplemimo/testmosync/testmosyncgui.cpp b/plugins/samplemimo/testmosync/testmosyncgui.cpp index 1f32e8496..f7514ec2d 100644 --- a/plugins/samplemimo/testmosync/testmosyncgui.cpp +++ b/plugins/samplemimo/testmosync/testmosyncgui.cpp @@ -25,6 +25,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "dsp/spectrumvis.h" @@ -315,6 +316,7 @@ void TestMOSyncGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplemimo/xtrxmimo/xtrxmimogui.cpp b/plugins/samplemimo/xtrxmimo/xtrxmimogui.cpp index e6816037c..d04a80b2a 100644 --- a/plugins/samplemimo/xtrxmimo/xtrxmimogui.cpp +++ b/plugins/samplemimo/xtrxmimo/xtrxmimogui.cpp @@ -27,6 +27,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspdevicemimoengine.h" #include "dsp/dspcommands.h" @@ -100,6 +102,7 @@ XTRXMIMOGUI::XTRXMIMOGUI(DeviceUISet *deviceUISet, QWidget* parent) : sendSettings(); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } XTRXMIMOGUI::~XTRXMIMOGUI() @@ -1083,6 +1086,7 @@ void XTRXMIMOGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/audiooutput/audiooutputgui.cpp b/plugins/samplesink/audiooutput/audiooutputgui.cpp index 63614ed77..c4a7c3c3f 100644 --- a/plugins/samplesink/audiooutput/audiooutputgui.cpp +++ b/plugins/samplesink/audiooutput/audiooutputgui.cpp @@ -23,6 +23,8 @@ #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" #include "gui/audioselectdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "audiooutputgui.h" @@ -60,6 +62,7 @@ AudioOutputGui::AudioOutputGui(DeviceUISet *deviceUISet, QWidget* parent) : m_audioOutput->setMessageQueueToGUI(&m_inputMessageQueue); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } AudioOutputGui::~AudioOutputGui() @@ -246,6 +249,7 @@ void AudioOutputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp b/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp index 0549c766a..127930ed6 100644 --- a/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp +++ b/plugins/samplesink/bladerf1output/bladerf1outputgui.cpp @@ -24,6 +24,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -478,6 +479,7 @@ void Bladerf1OutputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp b/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp index 78fe63cdf..001de36e5 100644 --- a/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp +++ b/plugins/samplesink/bladerf2output/bladerf2outputgui.cpp @@ -24,6 +24,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -462,6 +463,7 @@ void BladeRF2OutputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/fileoutput/fileoutputgui.cpp b/plugins/samplesink/fileoutput/fileoutputgui.cpp index fc2cd7825..32f62471e 100644 --- a/plugins/samplesink/fileoutput/fileoutputgui.cpp +++ b/plugins/samplesink/fileoutput/fileoutputgui.cpp @@ -28,6 +28,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -351,6 +352,7 @@ void FileOutputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp index dac003a81..198fed161 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputgui.cpp @@ -23,6 +23,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -481,6 +482,7 @@ void HackRFOutputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/limesdroutput/limesdroutputgui.cpp b/plugins/samplesink/limesdroutput/limesdroutputgui.cpp index 60e9c98a2..36c0c7732 100644 --- a/plugins/samplesink/limesdroutput/limesdroutputgui.cpp +++ b/plugins/samplesink/limesdroutput/limesdroutputgui.cpp @@ -22,6 +22,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -697,6 +698,7 @@ void LimeSDROutputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/localoutput/localoutputgui.cpp b/plugins/samplesink/localoutput/localoutputgui.cpp index 489d5b6a7..e2148b1bf 100644 --- a/plugins/samplesink/localoutput/localoutputgui.cpp +++ b/plugins/samplesink/localoutput/localoutputgui.cpp @@ -33,6 +33,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -298,6 +299,7 @@ void LocalOutputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp b/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp index c8bdb0998..6ceb08adb 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp @@ -23,6 +23,8 @@ #include "dsp/dspcommands.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "device/deviceapi.h" #include "device/deviceuiset.h" #include "plutosdr/deviceplutosdr.h" @@ -81,6 +83,7 @@ PlutoSDROutputGUI::PlutoSDROutputGUI(DeviceUISet *deviceUISet, QWidget* parent) m_statusTimer.start(500); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); + DialPopup::addPopupsToChildDials(this); } PlutoSDROutputGUI::~PlutoSDROutputGUI() @@ -525,6 +528,7 @@ void PlutoSDROutputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/remoteoutput/remoteoutputgui.cpp b/plugins/samplesink/remoteoutput/remoteoutputgui.cpp index 30b7342e1..42709dc72 100644 --- a/plugins/samplesink/remoteoutput/remoteoutputgui.cpp +++ b/plugins/samplesink/remoteoutput/remoteoutputgui.cpp @@ -29,6 +29,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -91,6 +93,7 @@ RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* pare displaySettings(); sendSettings(); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } RemoteOutputSinkGui::~RemoteOutputSinkGui() @@ -559,6 +562,7 @@ void RemoteOutputSinkGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/soapysdroutput/soapysdroutputgui.cpp b/plugins/samplesink/soapysdroutput/soapysdroutputgui.cpp index 1c9d08547..f5dbde3a3 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutputgui.cpp +++ b/plugins/samplesink/soapysdroutput/soapysdroutputgui.cpp @@ -27,6 +27,7 @@ #include "ui_soapysdroutputgui.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "soapygui/discreterangegui.h" #include "soapygui/intervalrangegui.h" #include "soapygui/stringrangegui.h" @@ -894,6 +895,7 @@ void SoapySDROutputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/testsink/testsinkgui.cpp b/plugins/samplesink/testsink/testsinkgui.cpp index d86ddbd45..3d9175106 100644 --- a/plugins/samplesink/testsink/testsinkgui.cpp +++ b/plugins/samplesink/testsink/testsinkgui.cpp @@ -26,6 +26,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/spectrumvis.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -291,6 +292,7 @@ void TestSinkGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/usrpoutput/usrpoutputgui.cpp b/plugins/samplesink/usrpoutput/usrpoutputgui.cpp index 266ae7bcb..9602f176a 100644 --- a/plugins/samplesink/usrpoutput/usrpoutputgui.cpp +++ b/plugins/samplesink/usrpoutput/usrpoutputgui.cpp @@ -23,6 +23,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -590,6 +591,7 @@ void USRPOutputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp b/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp index dcb5ef372..505552b74 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp +++ b/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp @@ -24,6 +24,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -586,6 +587,7 @@ void XTRXOutputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/airspy/airspygui.cpp b/plugins/samplesource/airspy/airspygui.cpp index 67c76b8d2..06e208fd5 100644 --- a/plugins/samplesource/airspy/airspygui.cpp +++ b/plugins/samplesource/airspy/airspygui.cpp @@ -30,6 +30,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -479,6 +480,7 @@ void AirspyGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/airspyhf/airspyhfgui.cpp b/plugins/samplesource/airspyhf/airspyhfgui.cpp index 6720e543a..b182fafde 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.cpp +++ b/plugins/samplesource/airspyhf/airspyhfgui.cpp @@ -28,6 +28,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "airspyhfgui.h" @@ -503,6 +504,7 @@ void AirspyHFGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/audioinput/audioinputgui.cpp b/plugins/samplesource/audioinput/audioinputgui.cpp index 97787d728..d2a47ebad 100644 --- a/plugins/samplesource/audioinput/audioinputgui.cpp +++ b/plugins/samplesource/audioinput/audioinputgui.cpp @@ -23,6 +23,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "audioinputgui.h" @@ -55,6 +57,7 @@ AudioInputGui::AudioInputGui(DeviceUISet *deviceUISet, QWidget* parent) : connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); + DialPopup::addPopupsToChildDials(this); } AudioInputGui::~AudioInputGui() @@ -320,6 +323,7 @@ void AudioInputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp b/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp index 3939c544b..80b39aa27 100644 --- a/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp +++ b/plugins/samplesource/bladerf1input/bladerf1inputgui.cpp @@ -25,6 +25,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -560,6 +561,7 @@ void Bladerf1InputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp b/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp index a12ebeb97..d7eb74bf5 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp @@ -25,6 +25,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -556,6 +557,7 @@ void BladeRF2InputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/fcdpro/fcdprogui.cpp b/plugins/samplesource/fcdpro/fcdprogui.cpp index b8528f5f1..e7c28791c 100644 --- a/plugins/samplesource/fcdpro/fcdprogui.cpp +++ b/plugins/samplesource/fcdpro/fcdprogui.cpp @@ -22,6 +22,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "fcdprogui.h" @@ -601,6 +602,7 @@ void FCDProGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp index 4c2583510..c876f0a2d 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp @@ -23,6 +23,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "fcdproplusgui.h" @@ -403,6 +404,7 @@ void FCDProPlusGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp index 1f2d15c20..4cc192c55 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp @@ -26,6 +26,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -543,6 +544,7 @@ void HackRFInputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/kiwisdr/kiwisdrgui.cpp b/plugins/samplesource/kiwisdr/kiwisdrgui.cpp index 4c8ba4e57..4154e80cb 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrgui.cpp +++ b/plugins/samplesource/kiwisdr/kiwisdrgui.cpp @@ -29,6 +29,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "util/db.h" @@ -330,6 +331,7 @@ void KiwiSDRGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp index c08137c58..53126197a 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp @@ -27,6 +27,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -102,6 +104,7 @@ LimeSDRInputGUI::LimeSDRInputGUI(DeviceUISet *deviceUISet, QWidget* parent) : m_limeSDRInput->setMessageQueueToGUI(&m_inputMessageQueue); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(openDeviceSettingsDialog(const QPoint &))); + DialPopup::addPopupsToChildDials(this); } LimeSDRInputGUI::~LimeSDRInputGUI() @@ -806,6 +809,7 @@ void LimeSDRInputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/localinput/localinputgui.cpp b/plugins/samplesource/localinput/localinputgui.cpp index 955d4620e..eb9092be6 100644 --- a/plugins/samplesource/localinput/localinputgui.cpp +++ b/plugins/samplesource/localinput/localinputgui.cpp @@ -34,6 +34,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "mainwindow.h" @@ -328,6 +329,7 @@ void LocalInputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/perseus/perseusgui.cpp b/plugins/samplesource/perseus/perseusgui.cpp index fffb5e238..87dd79225 100644 --- a/plugins/samplesource/perseus/perseusgui.cpp +++ b/plugins/samplesource/perseus/perseusgui.cpp @@ -26,6 +26,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "perseusgui.h" @@ -418,6 +419,7 @@ void PerseusGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp index 01bb6456c..5d170593d 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp @@ -24,6 +24,8 @@ #include "dsp/dspcommands.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "device/deviceapi.h" #include "device/deviceuiset.h" #include "plutosdr/deviceplutosdr.h" @@ -83,6 +85,7 @@ PlutoSDRInputGui::PlutoSDRInputGui(DeviceUISet *deviceUISet, QWidget* parent) : connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); + DialPopup::addPopupsToChildDials(this); } PlutoSDRInputGui::~PlutoSDRInputGui() @@ -604,6 +607,7 @@ void PlutoSDRInputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/remoteinput/remoteinputgui.cpp b/plugins/samplesource/remoteinput/remoteinputgui.cpp index 71ba66c35..c9d809682 100644 --- a/plugins/samplesource/remoteinput/remoteinputgui.cpp +++ b/plugins/samplesource/remoteinput/remoteinputgui.cpp @@ -30,6 +30,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "dsp/hbfilterchainconverter.h" @@ -699,6 +700,7 @@ void RemoteInputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/remotetcpinput/remotetcpinputgui.cpp b/plugins/samplesource/remotetcpinput/remotetcpinputgui.cpp index 396efadc5..8d28d6762 100644 --- a/plugins/samplesource/remotetcpinput/remotetcpinputgui.cpp +++ b/plugins/samplesource/remotetcpinput/remotetcpinputgui.cpp @@ -25,6 +25,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "dsp/hbfilterchainconverter.h" @@ -87,6 +89,7 @@ RemoteTCPInputGui::RemoteTCPInputGui(DeviceUISet *deviceUISet, QWidget* parent) m_forceSettings = true; sendSettings(); makeUIConnections(); + DialPopup::addPopupsToChildDials(this); } RemoteTCPInputGui::~RemoteTCPInputGui() @@ -778,6 +781,7 @@ void RemoteTCPInputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index 8cceb9800..7141df793 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -28,6 +28,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -557,6 +558,7 @@ void RTLSDRGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/sdrplay/sdrplaygui.cpp b/plugins/samplesource/sdrplay/sdrplaygui.cpp index 9759e2e74..1c7e31b43 100644 --- a/plugins/samplesource/sdrplay/sdrplaygui.cpp +++ b/plugins/samplesource/sdrplay/sdrplaygui.cpp @@ -28,6 +28,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -84,6 +86,7 @@ SDRPlayGui::SDRPlayGui(DeviceUISet *deviceUISet, QWidget* parent) : connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); + DialPopup::addPopupsToChildDials(this); } SDRPlayGui::~SDRPlayGui() @@ -480,6 +483,7 @@ void SDRPlayGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp b/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp index 23ad2d11c..f4f4beb56 100644 --- a/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp +++ b/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp @@ -29,6 +29,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -120,6 +122,7 @@ SDRPlayV3Gui::SDRPlayV3Gui(DeviceUISet *deviceUISet, QWidget* parent) : connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); m_sdrPlayV3Input->setMessageQueueToGUI(&m_inputMessageQueue); + DialPopup::addPopupsToChildDials(this); } SDRPlayV3Gui::~SDRPlayV3Gui() @@ -562,6 +565,7 @@ void SDRPlayV3Gui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/sigmffileinput/sigmffileinputgui.cpp b/plugins/samplesource/sigmffileinput/sigmffileinputgui.cpp index 1a446452d..a7d58a399 100644 --- a/plugins/samplesource/sigmffileinput/sigmffileinputgui.cpp +++ b/plugins/samplesource/sigmffileinput/sigmffileinputgui.cpp @@ -28,6 +28,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "dsp/filerecordinterface.h" @@ -694,6 +695,7 @@ void SigMFFileInputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp b/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp index 5ccb2beb0..596897b2f 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp +++ b/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp @@ -27,6 +27,7 @@ #include "util/simpleserializer.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "soapygui/discreterangegui.h" #include "soapygui/intervalrangegui.h" #include "soapygui/stringrangegui.h" @@ -936,6 +937,7 @@ void SoapySDRInputGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/testsource/testsourcegui.cpp b/plugins/samplesource/testsource/testsourcegui.cpp index 408e60715..5bce1010d 100644 --- a/plugins/samplesource/testsource/testsourcegui.cpp +++ b/plugins/samplesource/testsource/testsourcegui.cpp @@ -28,6 +28,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "util/db.h" @@ -76,6 +78,7 @@ TestSourceGui::TestSourceGui(DeviceUISet *deviceUISet, QWidget* parent) : m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(openDeviceSettingsDialog(const QPoint &))); + DialPopup::addPopupsToChildDials(this); } TestSourceGui::~TestSourceGui() @@ -531,6 +534,7 @@ void TestSourceGui::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/usrpinput/usrpinputgui.cpp b/plugins/samplesource/usrpinput/usrpinputgui.cpp index 089228fdc..5fce0fb91 100644 --- a/plugins/samplesource/usrpinput/usrpinputgui.cpp +++ b/plugins/samplesource/usrpinput/usrpinputgui.cpp @@ -28,6 +28,7 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -650,6 +651,7 @@ void USRPInputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/plugins/samplesource/xtrxinput/xtrxinputgui.cpp b/plugins/samplesource/xtrxinput/xtrxinputgui.cpp index f5fe67520..a517f608b 100644 --- a/plugins/samplesource/xtrxinput/xtrxinputgui.cpp +++ b/plugins/samplesource/xtrxinput/xtrxinputgui.cpp @@ -28,6 +28,8 @@ #include "gui/colormapper.h" #include "gui/glspectrum.h" #include "gui/basicdevicesettingsdialog.h" +#include "gui/dialpopup.h" +#include "gui/dialogpositioner.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" #include "device/deviceapi.h" @@ -82,6 +84,7 @@ XTRXInputGUI::XTRXInputGUI(DeviceUISet *deviceUISet, QWidget* parent) : makeUIConnections(); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); + DialPopup::addPopupsToChildDials(this); } XTRXInputGUI::~XTRXInputGUI() @@ -673,6 +676,7 @@ void XTRXInputGUI::openDeviceSettingsDialog(const QPoint& p) dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex); dialog.move(p); + new DialogPositioner(&dialog, false); dialog.exec(); m_settings.m_useReverseAPI = dialog.useReverseAPI(); diff --git a/sdrgui/gui/audiodialog.cpp b/sdrgui/gui/audiodialog.cpp index b379aead3..e94b5312f 100644 --- a/sdrgui/gui/audiodialog.cpp +++ b/sdrgui/gui/audiodialog.cpp @@ -24,6 +24,7 @@ #include "audio/audiodevicemanager.h" #include "audiodialog.h" +#include "gui/dialpopup.h" #include "ui_audiodialog.h" AudioDialogX::AudioDialogX(AudioDeviceManager* audioDeviceManager, QWidget* parent) : @@ -95,6 +96,7 @@ AudioDialogX::AudioDialogX(AudioDeviceManager* audioDeviceManager, QWidget* pare m_inIndex = -1; ui->tabWidget->setCurrentIndex(0); + DialPopup::addPopupsToChildDials(this); } AudioDialogX::~AudioDialogX() diff --git a/sdrgui/gui/dialogpositioner.cpp b/sdrgui/gui/dialogpositioner.cpp new file mode 100644 index 000000000..143cc41f8 --- /dev/null +++ b/sdrgui/gui/dialogpositioner.cpp @@ -0,0 +1,131 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +#include "dialogpositioner.h" + +DialogPositioner::DialogPositioner(QWidget *dialog, bool center) : + QObject(dialog), + m_dialog(dialog), + m_center(center) +{ + connect(dialog->screen(), &QScreen::orientationChanged, this, &DialogPositioner::orientationChanged); + dialog->screen()->setOrientationUpdateMask(Qt::PortraitOrientation + | Qt::LandscapeOrientation + | Qt::InvertedPortraitOrientation + | Qt::InvertedLandscapeOrientation); + if (m_center) { + DialogPositioner::centerDialog(m_dialog); + } else { + DialogPositioner::positionDialog(m_dialog); + } + dialog->installEventFilter(this); +} + +void DialogPositioner::orientationChanged(Qt::ScreenOrientation orientation) +{ + (void) orientation; + + // Need a delay before geometry() reflects new orientation + // https://bugreports.qt.io/browse/QTBUG-109127 + QTimer::singleShot(200, [this]() { + if (m_center) { + DialogPositioner::centerDialog(m_dialog); + } else { + DialogPositioner::positionDialog(m_dialog); + } + }); +} + +void DialogPositioner::centerDialog(QWidget *dialog) +{ + // Restrict size of dialog to size of desktop + DialogPositioner::sizeToDesktop(dialog); + + // Position in center of screen + QRect desktop = dialog->screen()->availableGeometry(); + QSize size = dialog->size(); + QPoint pos; + pos.setX((desktop.width() - size.width()) / 2); + pos.setY((desktop.height() - size.height()) / 2); + dialog->move(pos); +} + +void DialogPositioner::positionDialog(QWidget *dialog) +{ + // Restrict size of dialog to size of desktop + DialogPositioner::sizeToDesktop(dialog); + + // Position so fully on screen + QRect desktop = dialog->screen()->availableGeometry(); + QSize size = dialog->size(); + QPoint pos = dialog->pos(); + + bool move = false; + if (pos.x() + size.width() > desktop.width()) + { + pos.setX(desktop.width() - size.width()); + move = true; + } + if (pos.y() + size.height() > desktop.height()) + { + pos.setY(desktop.height() - size.height()); + move = true; + } + if (move) { + dialog->move(pos); + } +} + +void DialogPositioner::sizeToDesktop(QWidget *widget) +{ + QRect desktop = widget->screen()->availableGeometry(); + QSize size = widget->size(); + + bool resize = false; + if (size.width() > desktop.width()) + { + size.setWidth(desktop.width()); + resize = true; + } + if (size.height() > desktop.height()) + { + size.setHeight(desktop.height()); + resize = true; + } + if (resize) { + widget->resize(size); + } +} + +bool DialogPositioner::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::Show) + { + if (m_center) { + DialogPositioner::centerDialog(m_dialog); + } else { + DialogPositioner::positionDialog(m_dialog); + } + } + return QObject::eventFilter(obj, event); +} diff --git a/sdrgui/gui/dialogpositioner.h b/sdrgui/gui/dialogpositioner.h new file mode 100644 index 000000000..a5a0d3170 --- /dev/null +++ b/sdrgui/gui/dialogpositioner.h @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef SDRGUI_GUI_DIALOGPOSITIONER_H +#define SDRGUI_GUI_DIALOGPOSITIONER_H + +#include +#include "export.h" + +// DialogPositioner monitors screen orientation and repositions dialog +class SDRGUI_API DialogPositioner : public QObject { + + Q_OBJECT + +public: + DialogPositioner(QWidget *dialog, bool center=false); + + // Center dialog on screen + static void centerDialog(QWidget *dialog); + + // Make sure dialog is on screen + static void positionDialog(QWidget *dialog); + + // Restrict size of widget to size of desktop (but not smaller than minimumSize) + static void sizeToDesktop(QWidget *widget); + +private slots: + void orientationChanged(Qt::ScreenOrientation orientation); + +protected: + bool eventFilter(QObject *watched, QEvent *event) override; + +private: + QWidget *m_dialog; + bool m_center; + +}; + +#endif diff --git a/sdrgui/gui/dialpopup.cpp b/sdrgui/gui/dialpopup.cpp new file mode 100644 index 000000000..82436ab37 --- /dev/null +++ b/sdrgui/gui/dialpopup.cpp @@ -0,0 +1,114 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + +#include "gui/crightclickenabler.h" +#include "gui/dialogpositioner.h" +#include "dialpopup.h" + +DialPopup::DialPopup(QDial *parent) : + QDialog(parent), + m_dial(parent), + m_originalValue(m_dial->value()) +{ + m_value = new QSlider(Qt::Horizontal); + m_valueText = new QLabel(QString::number(m_dial->value())); + m_label = new QLabel(m_dial->toolTip()); + QVBoxLayout *v = new QVBoxLayout(this); + QHBoxLayout *h = new QHBoxLayout(); + h->addWidget(m_label); + h->addWidget(m_value); + h->addWidget(m_valueText); + v->addLayout(h); + h = new QHBoxLayout(); + m_cancelButton = new QPushButton("Cancel"); + m_okButton = new QPushButton("OK"); + h->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding)); + h->addWidget(m_cancelButton); + h->addWidget(m_okButton); + v->addLayout(h); + + connect(m_value, &QSlider::valueChanged, this, &DialPopup::on_value_valueChanged); + + connect(m_cancelButton, &QPushButton::clicked, this, &QDialog::reject); + connect(m_okButton, &QPushButton::clicked, this, &QDialog::accept); + + // Add right click / tap and hold on parent to open dialog + CRightClickEnabler *rclick = new CRightClickEnabler(m_dial); + connect(rclick, &CRightClickEnabler::rightClick, this, &DialPopup::display); + + m_positioner = new DialogPositioner(this); +} + +void DialPopup::reject() +{ + m_dial->setValue(m_originalValue); + QDialog::reject(); +} + +void DialPopup::accept() +{ + m_dial->setValue(m_value->value()); + QDialog::accept(); +} + +void DialPopup::display(const QPoint& p) +{ + if (m_dial->isEnabled()) + { + m_value->setMaximum(m_dial->maximum()); + m_value->setMinimum(m_dial->minimum()); + m_value->setPageStep(m_dial->pageStep()); + m_value->setSingleStep(m_dial->singleStep()); + m_value->setValue(m_dial->value()); + m_originalValue = m_dial->value(); + move(p); + show(); + } +} + +void DialPopup::on_value_valueChanged(int value) +{ + m_valueText->setText(QString::number(value)); + m_dial->setValue(value); +} + +void DialPopup::addPopupsToChildDials(QWidget *parent) +{ + // Get list of child dials that already have a popup + QList popups = parent->findChildren(); + QList dialsWithPopups; + for (auto popup : popups) { + dialsWithPopups.append(popup->dial()); + } + + // Add dial popups to all child dials without one + QList dials = parent->findChildren(); + for (auto dial : dials) + { + if (!dialsWithPopups.contains(dial)) { + new DialPopup(dial); + } + } +} diff --git a/sdrgui/gui/dialpopup.h b/sdrgui/gui/dialpopup.h new file mode 100644 index 000000000..d52443a0b --- /dev/null +++ b/sdrgui/gui/dialpopup.h @@ -0,0 +1,62 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_GUI_DIALPOPUP_H +#define INCLUDE_GUI_DIALPOPUP_H + +#include + +#include "export.h" + +class QDial; +class QSlider; +class QLabel; +class QPushButton; +class DialogPositioner; + +// A popup dialog for QDials that uses a slider instead, which is easier to use +// on a touch screen. Actived with tap and hold or right mouse click +class SDRGUI_API DialPopup : public QDialog { + Q_OBJECT + +public: + explicit DialPopup(QDial *parent = nullptr); + QDial *dial() const { return m_dial; } + + // Add popups to all child QDials in a widget + static void addPopupsToChildDials(QWidget *parent); + +public slots: + virtual void accept() override; + virtual void reject() override; + void on_value_valueChanged(int value); + void display(const QPoint& p); + +private: + + QDial *m_dial; + QSlider *m_value; + QLabel *m_valueText; + QLabel *m_label; + QPushButton *m_okButton; + QPushButton *m_cancelButton; + int m_originalValue; + DialogPositioner *m_positioner; + +}; + +#endif // INCLUDE_GUI_DIALPOPUP_H diff --git a/sdrgui/gui/spectrumcalibrationpointsdialog.cpp b/sdrgui/gui/spectrumcalibrationpointsdialog.cpp index 17f20fda4..84b6a0464 100644 --- a/sdrgui/gui/spectrumcalibrationpointsdialog.cpp +++ b/sdrgui/gui/spectrumcalibrationpointsdialog.cpp @@ -23,6 +23,7 @@ #include "util/db.h" #include "util/csv.h" #include "dsp/spectrummarkers.h" +#include "gui/dialpopup.h" #include "spectrumcalibrationpointsdialog.h" @@ -60,6 +61,7 @@ SpectrumCalibrationPointsDialog::SpectrumCalibrationPointsDialog( ui->calibrationGlobalCorr->setValue(m_globalCorrection * 100.0); ui->corrOrSet->setText("Cor"); displayCalibrationPoint(); + DialPopup::addPopupsToChildDials(this); } SpectrumCalibrationPointsDialog::~SpectrumCalibrationPointsDialog() diff --git a/sdrgui/gui/spectrummarkersdialog.cpp b/sdrgui/gui/spectrummarkersdialog.cpp index dd0f2c324..25a765fcd 100644 --- a/sdrgui/gui/spectrummarkersdialog.cpp +++ b/sdrgui/gui/spectrummarkersdialog.cpp @@ -20,6 +20,7 @@ #include #include +#include "gui/dialpopup.h" #include "util/db.h" #include "util/csv.h" #include "spectrummarkersdialog.h" @@ -69,6 +70,7 @@ SpectrumMarkersDialog::SpectrumMarkersDialog( displayHistogramMarker(); displayWaterfallMarker(); displayAnnotationMarker(); + DialPopup::addPopupsToChildDials(this); } SpectrumMarkersDialog::~SpectrumMarkersDialog() diff --git a/sdrgui/gui/tabletapandhold.cpp b/sdrgui/gui/tabletapandhold.cpp new file mode 100644 index 000000000..9527126cc --- /dev/null +++ b/sdrgui/gui/tabletapandhold.cpp @@ -0,0 +1,56 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +#include "tabletapandhold.h" + +TableTapAndHold::TableTapAndHold(QTableWidget *table) : + QObject(table), + m_table(table) +{ + m_table->installEventFilter(this); + m_table->grabGesture(Qt::TapAndHoldGesture); +}; + +bool TableTapAndHold::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::Gesture) + { + QGestureEvent *gestureEvent = static_cast(event); + if (QTapAndHoldGesture *tapAndHoldGesture = static_cast(gestureEvent->gesture(Qt::TapAndHoldGesture))) + { + // Map from global position to item position + QPoint point = m_table->mapFromGlobal(tapAndHoldGesture->position().toPoint()); + QHeaderView *hHeader = m_table->horizontalHeader(); + QHeaderView *vHeader = m_table->verticalHeader(); + if (hHeader) { + point.setY(point.y() - hHeader->height()); + } + if (vHeader) { + point.setX(point.x() - vHeader->width()); + } + emit tapAndHold(point); + return true; + } + } + return QObject::eventFilter(obj, event); +} diff --git a/sdrgui/gui/tabletapandhold.h b/sdrgui/gui/tabletapandhold.h new file mode 100644 index 000000000..392d1ad9a --- /dev/null +++ b/sdrgui/gui/tabletapandhold.h @@ -0,0 +1,43 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef SDRGUI_GUI_TABLETAPANDHOLD_H +#define SDRGUI_GUI_TABLETAPANDHOLD_H + +#include "export.h" + +class QTableWidget; + +// Emits a signal when tap and hold gesture occurs on a table +// Position passed with tapAndHold signal is adjusted by table header size, +// so can be used to call QTableWidget::itemAt(itemPos) +class SDRGUI_API TableTapAndHold : public QObject { + Q_OBJECT +public: + TableTapAndHold(QTableWidget *table); + +signals: + void tapAndHold(const QPoint& itemPos); + +protected: + bool eventFilter(QObject *obj, QEvent *event) override; + +private: + QTableWidget* m_table; +}; + +#endif /* SDRGUI_GUI_TABLETAPANDHOLD_H */ From 653a4ea4f76f14439f3398029bcbcfd2f9df7390 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 10:32:09 +0000 Subject: [PATCH 06/11] Add welcome dialog for Android --- sdrgui/gui/welcomedialog.cpp | 31 ++++++++ sdrgui/gui/welcomedialog.h | 40 ++++++++++ sdrgui/gui/welcomedialog.ui | 143 +++++++++++++++++++++++++++++++++++ 3 files changed, 214 insertions(+) create mode 100644 sdrgui/gui/welcomedialog.cpp create mode 100644 sdrgui/gui/welcomedialog.h create mode 100644 sdrgui/gui/welcomedialog.ui diff --git a/sdrgui/gui/welcomedialog.cpp b/sdrgui/gui/welcomedialog.cpp new file mode 100644 index 000000000..af74e65d2 --- /dev/null +++ b/sdrgui/gui/welcomedialog.cpp @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "gui/welcomedialog.h" +#include "ui_welcomedialog.h" + +WelcomeDialog::WelcomeDialog(QWidget* parent) : + QDialog(parent), + ui(new Ui::WelcomeDialog) +{ + ui->setupUi(this); +} + +WelcomeDialog::~WelcomeDialog() +{ + delete ui; +} diff --git a/sdrgui/gui/welcomedialog.h b/sdrgui/gui/welcomedialog.h new file mode 100644 index 000000000..a93e98ae8 --- /dev/null +++ b/sdrgui/gui/welcomedialog.h @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2022 Jon Beniston, M7RCE // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_GUI_WELCOMEDIALOG_H +#define INCLUDE_GUI_WELCOMEDIALOG_H + +#include + +#include "export.h" + +namespace Ui { + class WelcomeDialog; +} + +class SDRGUI_API WelcomeDialog : public QDialog { + Q_OBJECT + +public: + explicit WelcomeDialog(QWidget* parent = 0); + ~WelcomeDialog(); + +private: + Ui::WelcomeDialog* ui; +}; + +#endif // INCLUDE_GUI_WELCOMEDIALOG_H diff --git a/sdrgui/gui/welcomedialog.ui b/sdrgui/gui/welcomedialog.ui new file mode 100644 index 000000000..bbb9ce697 --- /dev/null +++ b/sdrgui/gui/welcomedialog.ui @@ -0,0 +1,143 @@ + + + WelcomeDialog + + + + 0 + 0 + 360 + 390 + + + + + Liberation Sans + 9 + + + + Welcome to SDRangel + + + + QLayout::SetFixedSize + + + + + + 48 + 48 + + + + + + + :/sdrangel_icon.png + + + true + + + + + + + <html><head/><body><p>SDRangel is the software frontend of a SDR (Software Defined Radio). When combined with any of the following SDR hardware via USB OTG, it can be used to visualise and demodulate received radio signals as well as transmit (depending on the SDR hardware).</p><p>- RTL SDR<br/>- Airspy<br/>- Airspy HF<br/>- LimeSDR (not the mini)<br/>- SDRplay (via <a href="https://play.google.com/store/apps/details?id=com.sdrplay.driver"><span style=" text-decoration: underline; color:#0000ff;">SDRplay Driver</span></a>)<br/>- HackRF (via <a href="https://play.google.com/store/apps/details?id=marto.rtl_tcp_andro"><span style=" text-decoration: underline; color:#0000ff;">SDR Driver</span></a>)</p><p>SDRangel can also receive and transmit IQ data from/to a remote PC via TCP or UDP.</p><p>SDRangel was designed as a desktop application, and so will work best on tablets with large screens and a mouse or stylus. Touch gestures can be used in the spectrum window: Use two fingers swiping right or left to change frequency up or down and pinch to zoom. Tap and hold dials to use a popup slider.</p></body></html> + + + Qt::RichText + + + true + + + true + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + buttonBox + accepted() + WelcomeDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + WelcomeDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + From 102fcab014e97db20d3c8fc692d359c71d989dcf Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 10:40:50 +0000 Subject: [PATCH 07/11] Add new sdrgui files to CMakeLists.txt --- sdrgui/CMakeLists.txt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sdrgui/CMakeLists.txt b/sdrgui/CMakeLists.txt index f72f87701..3cf13c2f6 100644 --- a/sdrgui/CMakeLists.txt +++ b/sdrgui/CMakeLists.txt @@ -30,6 +30,8 @@ set(sdrgui_SOURCES gui/devicesetpresetsdialog.cpp gui/devicestreamselectiondialog.cpp gui/deviceuserargsdialog.cpp + gui/dialogpositioner.cpp + gui/dialpopup.cpp gui/dmsspinbox.cpp gui/editcommanddialog.cpp gui/externalclockbutton.cpp @@ -72,6 +74,7 @@ set(sdrgui_SOURCES gui/spectrummarkersdialog.cpp gui/spectrummeasurementsdialog.cpp gui/spectrummeasurements.cpp + gui/tabletapandhold.cpp gui/tickedslider.cpp gui/timedelegate.cpp gui/transverterbutton.cpp @@ -80,6 +83,7 @@ set(sdrgui_SOURCES gui/tvscreenanalog.cpp gui/valuedial.cpp gui/valuedialz.cpp + gui/welcomedialog.cpp gui/workspace.cpp gui/workspaceselectiondialog.cpp gui/wsspectrumsettingsdialog.cpp @@ -135,6 +139,8 @@ set(sdrgui_HEADERS gui/devicesetpresetsdialog.h gui/devicestreamselectiondialog.h gui/deviceuserargsdialog.h + gui/dialogpositioner.h + gui/dialpopup.h gui/dmsspinbox.h gui/doublevalidator.h gui/editcommanddialog.h @@ -180,6 +186,7 @@ set(sdrgui_HEADERS gui/spectrummarkersdialog.h gui/spectrummeasurementsdialog.h gui/spectrummeasurements.h + gui/tabletapandhold.h gui/tickedslider.h gui/timedelegate.h gui/transverterbutton.h @@ -188,6 +195,7 @@ set(sdrgui_HEADERS gui/tvscreenanalog.h gui/valuedial.h gui/valuedialz.h + gui/welcomedialog.h gui/workspace.h gui/workspaceselectiondialog.h gui/wsspectrumsettingsdialog.h @@ -251,6 +259,7 @@ set(sdrgui_FORMS gui/myposdialog.ui gui/transverterdialog.ui gui/loggingdialog.ui + gui/welcomedialog.ui gui/workspaceselectiondialog.ui gui/wsspectrumsettingsdialog.ui soapygui/discreterangegui.ui @@ -268,9 +277,11 @@ include_directories( ${CMAKE_SOURCE_DIR}/logging ${CMAKE_SOURCE_DIR}/httpserver ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client - ${OPENGL_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ) +if(NOT ANDROID) + include_directories(${OPENGL_INCLUDE_DIR}) +endif() add_library(sdrgui SHARED ${sdrgui_SOURCES} @@ -282,6 +293,7 @@ target_link_libraries(sdrgui Qt::Widgets Qt::OpenGL Qt::Multimedia + Qt::Positioning ${OPENGL_LIBRARIES} ${sdrgui_LIMERFE_LIB} sdrbase @@ -293,6 +305,10 @@ if (Qt6_FOUND) ) endif() +if(ANDROID) + target_link_libraries(sdrgui GLESv3) +endif() + install(TARGETS sdrgui DESTINATION ${INSTALL_LIB_DIR}) if(WIN32 AND Qt6_FOUND) From 1a7c995e430b1a9ec3c1f884f1a5723dc06ba393 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 11:13:25 +0000 Subject: [PATCH 08/11] Add RSP and Android remote TCP protocol commands --- .../remotetcpsink/remotetcpprotocol.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/channelrx/remotetcpsink/remotetcpprotocol.h b/plugins/channelrx/remotetcpsink/remotetcpprotocol.h index 1d8ea57c8..47fd32786 100644 --- a/plugins/channelrx/remotetcpsink/remotetcpprotocol.h +++ b/plugins/channelrx/remotetcpsink/remotetcpprotocol.h @@ -67,6 +67,7 @@ public: enum Command { // These are compatbile with osmocom rtl_tcp: https://github.com/osmocom/rtl-sdr/blob/master/src/rtl_tcp.c + // and Android https://github.com/signalwareltd/rtl_tcp_andro-/blob/master/rtlsdr/src/main/cpp/src/tcp_commands.h setCenterFrequency = 0x1, // rtlsdr_set_center_freq setSampleRate = 0x2, // rtlsdr_set_sample_rate setTunerGainMode = 0x3, // rtlsdr_set_tuner_gain_mode @@ -80,9 +81,22 @@ public: setXtalFrequency = 0xb, // Not supported by SDRangel setXtalFrequency2 = 0xc, // Not supported by SDRangel setGainByIndex = 0xd, // Not supported by SDRangel - setBiasTee = 0xe, // rtlsdr_set_bias_tee - // These extensions are from librtlsdr rtl_tcp: https://github.com/librtlsdr/librtlsdr/blob/development/include/rtl_tcp.h + setBiasTee = 0xe, // rtlsdr_set_bias_tee (Not supported on Android) + // These extensions are from rsp_tcp: https://github.com/SDRplay/RSPTCPServer/blob/master/rsp_tcp_api.h + rspSetAntenna = 0x1f, + rspSetLNAState = 0x20, + rspSetIfGainR = 0x21, + rspSetAGC = 0x22, + rspSetAGCSetPoint = 0x23, + rspSetNotch = 0x24, + rspSetBiasT = 0x25, + rspSetRefOut = 0x26, + // These extensions are from librtlsdr rtl_tcp: https://github.com/librtlsdr/librtlsdr/blob/development/include/rtl_tcp.h setTunerBandwidth = 0x40, + // Android extensions https://github.com/signalwareltd/rtl_tcp_andro-/blob/master/rtlsdr/src/main/cpp/src/tcp_commands.h + androidExit = 0x7e, + androidGainByPercentage = 0x7f, + androidEnable16BitSigned = 0x80, // SDRplay, not RTL SDR // These are SDRangel extensions setDCOffsetRemoval = 0xc0, setIQCorrection = 0xc1, @@ -96,6 +110,7 @@ public: }; static const int m_rtl0MetaDataSize = 12; + static const int m_rsp0MetaDataSize = 45; static const int m_sdraMetaDataSize = 64; static void encodeInt16(quint8 *p, qint16 data) From e023611bf208b7fc6aa3f5deff9ec822b80625a4 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 11:14:32 +0000 Subject: [PATCH 09/11] Add gesture support to maps --- plugins/channelrx/demodadsb/map/map.qml | 2 ++ plugins/feature/map/map/map.qml | 2 ++ plugins/feature/vorlocalizer/map/map.qml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/plugins/channelrx/demodadsb/map/map.qml b/plugins/channelrx/demodadsb/map/map.qml index 32b01947d..7c3b2e0ab 100644 --- a/plugins/channelrx/demodadsb/map/map.qml +++ b/plugins/channelrx/demodadsb/map/map.qml @@ -52,6 +52,8 @@ Item { anchors.fill: parent center: QtPositioning.coordinate(51.5, 0.125) // London zoomLevel: 10 + gesture.enabled: true + gesture.acceptedGestures: MapGestureArea.PinchGesture | MapGestureArea.PanGesture // Needs to come first, otherwise MouseAreas in the MapItemViews don't get clicked event first // Setting z doesn't seem to work diff --git a/plugins/feature/map/map/map.qml b/plugins/feature/map/map/map.qml index d6d4da49b..b1ab8c4ec 100644 --- a/plugins/feature/map/map/map.qml +++ b/plugins/feature/map/map/map.qml @@ -64,6 +64,8 @@ Item { anchors.fill: parent center: QtPositioning.coordinate(51.5, 0.125) // London zoomLevel: 10 + gesture.enabled: true + gesture.acceptedGestures: MapGestureArea.PinchGesture | MapGestureArea.PanGesture // Tracks first, so drawn under other items MapItemView { diff --git a/plugins/feature/vorlocalizer/map/map.qml b/plugins/feature/vorlocalizer/map/map.qml index ba4448629..d791e696c 100644 --- a/plugins/feature/vorlocalizer/map/map.qml +++ b/plugins/feature/vorlocalizer/map/map.qml @@ -49,6 +49,8 @@ Item { plugin: mapPlugin center: QtPositioning.coordinate(51.5, 0.125) // London zoomLevel: 10 + gesture.enabled: true + gesture.acceptedGestures: MapGestureArea.PinchGesture | MapGestureArea.PanGesture MapItemView { model: vorModel From 92e348afa231567b8e41df6d27f527e45f162e52 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 11:15:36 +0000 Subject: [PATCH 10/11] Set plugins path for Android --- sdrbase/plugin/pluginmanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index 0f0a48fc9..7cabdf4d6 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -88,6 +88,8 @@ void PluginManager::loadPluginsPart(const QString& pluginsSubDir) // By default it searches in `$applicationDir/../lib/SoapySDR/`, which on Windows // is incorrect as both `bin` and `lib` dir are set to root application dir. qputenv("SOAPY_SDR_ROOT", applicationDirPath.toLocal8Bit()); +#elif defined(ANDROID) + PluginsPath = QStringList({applicationDirPath}); #endif // NOTE: exit on the first folder found From 7e7a9fdb841e640d9c3ff5c841c0938a03a6c055 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 20 Dec 2022 11:21:54 +0000 Subject: [PATCH 11/11] Add popups for dials --- sdrgui/gui/cwkeyergui.cpp | 2 ++ sdrgui/gui/glscopegui.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sdrgui/gui/cwkeyergui.cpp b/sdrgui/gui/cwkeyergui.cpp index 2d5f9d920..00c0dd8f7 100644 --- a/sdrgui/gui/cwkeyergui.cpp +++ b/sdrgui/gui/cwkeyergui.cpp @@ -20,6 +20,7 @@ #include #include "gui/cwkeyergui.h" +#include "gui/dialpopup.h" #include "ui_cwkeyergui.h" #include "dsp/cwkeyer.h" #include "util/simpleserializer.h" @@ -38,6 +39,7 @@ CWKeyerGUI::CWKeyerGUI(QWidget* parent) : m_commandKeyReceiver = new CommandKeyReceiver(); m_commandKeyReceiver->setRelease(true); this->installEventFilter(m_commandKeyReceiver); + DialPopup::addPopupsToChildDials(this); } CWKeyerGUI::~CWKeyerGUI() diff --git a/sdrgui/gui/glscopegui.cpp b/sdrgui/gui/glscopegui.cpp index f38fe4ef1..b59b31963 100644 --- a/sdrgui/gui/glscopegui.cpp +++ b/sdrgui/gui/glscopegui.cpp @@ -23,6 +23,7 @@ #include "glscopegui.h" #include "glscope.h" #include "ui_glscopegui.h" +#include "gui/dialpopup.h" #include "util/simpleserializer.h" #include "util/db.h" @@ -48,6 +49,7 @@ GLScopeGUI::GLScopeGUI(QWidget* parent) : m_focusedTriggerColor.setRgb(0,255,0); ui->traceText->setText("X"); ui->mem->setMaximum(GLScopeSettings::m_nbTraceMemories - 1); + DialPopup::addPopupsToChildDials(this); } GLScopeGUI::~GLScopeGUI()