1 /***************************************************************************
2                           mainwindowinputqso.cpp  -  description
3                              -------------------
4     begin                : may 2021
5     copyright            : (C) 2021 by Jaime Robles
6     email                : jaime@robles.es
7  ***************************************************************************/
8 
9 /*****************************************************************************
10  * This file is part of KLog.                                                *
11  *                                                                           *
12  *    KLog is free software: you can redistribute it and/or modify           *
13  *    it under the terms of the GNU General Public License as published by   *
14  *    the Free Software Foundation, either version 3 of the License, or      *
15  *    (at your option) any later version.                                    *
16  *                                                                           *
17  *    KLog is distributed in the hope that it will be useful,                *
18  *    but WITHOUT ANY WARRANTY; without even the implied warranty of         *
19  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
20  *    GNU General Public License for more details.                           *
21  *                                                                           *
22  *    You should have received a copy of the GNU General Public License      *
23  *    along with KLog.  If not, see <https://www.gnu.org/licenses/>.          *
24  *                                                                           *
25  *****************************************************************************/
26 //
27 // This class implement the tab of the mainwindow that supports the QSL options
28 //
29 
30 #include "mainwindowinputqso.h"
31 
MainWindowInputQSO(DataProxy_SQLite * dp,QWidget * parent)32 MainWindowInputQSO::MainWindowInputQSO(DataProxy_SQLite *dp, QWidget *parent) :
33     QWidget(parent)
34 {
35        //qDebug() << "MainWindowInputQSO::MainWindowInputQSO"   << QT_ENDL;
36     dataProxy = dp;
37     locator = new Locator();
38 
39     nameLineEdit = new QLineEdit;
40     qthLineEdit = new QLineEdit;
41     locatorLineEdit = new QLineEdit;
42     rstTXLineEdit = new QLineEdit;
43     rstRXLineEdit = new QLineEdit;
44     txFreqSpinBox = new QDoubleSpinBox;
45     rxFreqSpinBox = new QDoubleSpinBox;
46     splitCheckBox = new QCheckBox;
47     rxPowerSpinBox = new QDoubleSpinBox;
48 
49     dataProxy = dp;
50 
51     createUI();
52     setDefaultData();
53     //installEventFilter (this);
54     clear();
55        //qDebug() << "MainWindowInputQSO::MainWindowInputQSO - END"   << QT_ENDL;
56 
57 }
58 
~MainWindowInputQSO()59 MainWindowInputQSO::~MainWindowInputQSO(){}
60 
setModifying(const bool _m)61 void MainWindowInputQSO::setModifying(const bool _m)
62 {
63     modify = _m;
64 }
65 
createUI()66 void MainWindowInputQSO::createUI()
67 {
68     rstTXLineEdit->setToolTip(tr("TX RST."));
69     rstRXLineEdit->setToolTip(tr("RX RST."));
70     txFreqSpinBox->setToolTip(tr("TX Frequency in MHz."));
71     rxFreqSpinBox->setToolTip(tr("RX Frequency in MHz."));
72     rxPowerSpinBox->setToolTip(tr("Power used by the contacted station."));
73     nameLineEdit->setToolTip(tr("Name of the contacted operator."));
74     qthLineEdit->setToolTip(tr("QTH of the contacted station."));
75     locatorLineEdit->setToolTip(tr("Locator of the contacted station."));
76 
77     rxPowerSpinBox->setDecimals(2);
78     rxPowerSpinBox->setMaximum(9999);
79     rxPowerSpinBox->setSuffix(" " + tr("Watts"));
80 
81     txFreqSpinBox->setDecimals(3);
82     txFreqSpinBox->setMaximum(99999);
83     txFreqSpinBox->setSuffix(" " + tr("MHz"));
84 
85     rxFreqSpinBox->setDecimals(3);
86     rxFreqSpinBox->setMaximum(99999);
87     rxFreqSpinBox->setSuffix(" " + tr("MHz"));
88 
89     splitCheckBox->setText(tr("Split", "Translator: Split is a common hamradio term. Do not translate unless you are sure."));
90     splitCheckBox->setChecked(false);
91 
92     QLabel *nameLabel = new QLabel(this);
93     nameLabel->setText(tr("Name"));
94     nameLabel->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
95 
96     QLabel *qthLabel = new QLabel(this);
97     qthLabel->setText(tr("QTH"));
98     qthLabel->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
99 
100     QLabel *locLabel = new QLabel(this);
101     locLabel->setText(tr("DX Locator"));
102     locLabel->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
103 
104     QLabel *rxPowerSpinBoxLabelN = new QLabel(this);
105     rxPowerSpinBoxLabelN->setText(tr("Power(rx)"));
106     rxPowerSpinBoxLabelN->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
107 
108     QLabel *rstTxLabelN = new QLabel(this);
109     rstTxLabelN->setText(tr("RST(tx)"));
110     rstTxLabelN->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
111 
112     QLabel *rstRxLabelN = new QLabel(this);
113     rstRxLabelN->setText(tr("RST(rx)"));
114     rstRxLabelN->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
115 
116     QGridLayout *RSTLayout = new QGridLayout;
117     RSTLayout->addWidget(rstTxLabelN, 0, 0);
118     RSTLayout->addWidget(rstTXLineEdit, 1, 0);
119     RSTLayout->addWidget(rstRxLabelN, 0, 1);
120     RSTLayout->addWidget(rstRXLineEdit, 1, 1);
121 
122     QVBoxLayout *qthLayout = new QVBoxLayout;
123     qthLayout->addWidget(qthLabel);
124     qthLayout->addWidget(qthLineEdit);
125 
126     QVBoxLayout *rstQTHLayout = new QVBoxLayout;
127     rstQTHLayout->addLayout(RSTLayout);
128     rstQTHLayout->addLayout(qthLayout);
129 
130     QLabel *txfreqLabelN = new QLabel(this);
131     txfreqLabelN->setText(tr("Freq TX"));
132     txfreqLabelN->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
133     txfreqLabelN->setAlignment(Qt::AlignLeft);
134 
135     QLabel *rxfreqLabelN = new QLabel(this);
136     rxfreqLabelN->setText(tr("Freq RX"));
137     rxfreqLabelN->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
138     rxfreqLabelN->setAlignment(Qt::AlignRight);
139 
140     QHBoxLayout *freqTitleLayout = new QHBoxLayout;
141     freqTitleLayout->addWidget(txfreqLabelN);
142     freqTitleLayout->addWidget(splitCheckBox);
143     freqTitleLayout->addWidget(rxfreqLabelN);
144 
145     QHBoxLayout *freqDataLayout = new QHBoxLayout;
146     freqDataLayout->addWidget(txFreqSpinBox);
147     //freqDataLayout->addStretch(1);
148     freqDataLayout->addWidget(rxFreqSpinBox);
149 
150     QVBoxLayout *freqLayout = new QVBoxLayout;
151     freqLayout->addLayout(freqTitleLayout);
152     freqLayout->addLayout(freqDataLayout);
153 
154     QVBoxLayout *locVLayout = new QVBoxLayout;
155     locVLayout->addWidget(locLabel);
156     locVLayout->addWidget(locatorLineEdit);
157 
158     QVBoxLayout *freqLocLayout = new QVBoxLayout;
159     freqLocLayout->addLayout(freqLayout);
160     freqLocLayout->addLayout(locVLayout);
161 
162     QHBoxLayout *rstfreqLayout = new QHBoxLayout;
163     rstfreqLayout->addLayout(rstQTHLayout);
164     rstfreqLayout->addLayout(freqLocLayout);
165 
166     QVBoxLayout *rxPowerLayout = new QVBoxLayout;
167     rxPowerLayout->addWidget(rxPowerSpinBoxLabelN);
168     rxPowerLayout->addWidget(rxPowerSpinBox);
169 
170     QVBoxLayout *nameLayout = new QVBoxLayout;
171     nameLayout->addWidget(nameLabel);
172     nameLayout->addWidget(nameLineEdit);
173 
174     QVBoxLayout *rxPwrLayout = new QVBoxLayout;
175     rxPwrLayout->addWidget(rxPowerSpinBoxLabelN);
176     rxPwrLayout->addWidget(rxPowerSpinBox);
177 
178     QHBoxLayout *namePwrHLayout = new QHBoxLayout;
179     namePwrHLayout->addLayout(nameLayout);
180     namePwrHLayout->addLayout(rxPwrLayout);
181 
182     QVBoxLayout *namePwrLayout = new QVBoxLayout;
183     namePwrLayout->addStretch(1);
184     namePwrLayout->addLayout(namePwrHLayout);
185     namePwrLayout->addStretch(5);
186 
187     QVBoxLayout *qsoInputTabWidgetMainLayout = new QVBoxLayout;
188     qsoInputTabWidgetMainLayout->addLayout(rstfreqLayout);
189     qsoInputTabWidgetMainLayout->addLayout(namePwrLayout);
190     //qsoInputTabWidgetMainLayout->setSizeConstraint(QLayout::SetFixedSize);
191     setLayout(qsoInputTabWidgetMainLayout);
192 
193     connect(rstTXLineEdit, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed() ) );
194     connect(rstRXLineEdit, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed() ) );
195     connect(locatorLineEdit, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed() ) );
196     connect(qthLineEdit, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed() ) );
197     connect(nameLineEdit, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed() ) );
198     connect(locatorLineEdit, SIGNAL(textChanged(QString)), this, SLOT(slotLocatorTextChanged() ) );
199     connect(txFreqSpinBox, SIGNAL(valueChanged(double)), this, SLOT(slotFreqTXChanged(double)) ) ;
200     connect(rxFreqSpinBox, SIGNAL(valueChanged(double)), this, SLOT(slotFreqRXChanged(double)) ) ;
201     connect(splitCheckBox, SIGNAL(clicked()), this, SLOT(slotSplitClicked()) ) ;
202 
203     QWidget::setTabOrder (rstTXLineEdit, rstRXLineEdit);
204     QWidget::setTabOrder (rstRXLineEdit, nameLineEdit);
205     QWidget::setTabOrder (nameLineEdit, qthLineEdit);
206     QWidget::setTabOrder (qthLineEdit, locatorLineEdit);
207     QWidget::setTabOrder (locatorLineEdit, rxPowerSpinBox);
208 
209 }
210 
211 
setDefaultData()212 void MainWindowInputQSO::setDefaultData()
213 {
214     palRed.setColor(QPalette::Text, Qt::red);
215     palBlack.setColor(QPalette::Text, Qt::black);
216     palWhite.setColor(QPalette::Text, Qt::white);
217 
218     rxFreqBeingAutoChanged = false;
219     txFreqBeingAutoChanged = false;
220     isSATPropagation = false;
221     propMode = QString();
222     freqTX = 0.0;
223     freqRX = 0.0;
224     modify = false;
225 }
226 
clear()227 void MainWindowInputQSO::clear()
228 {
229     //qDebug() << Q_FUNC_INFO ;
230     qthLineEdit->clear();
231     nameLineEdit->clear();
232     locatorLineEdit->clear();
233     rxPowerSpinBox->setValue(0);
234     modify = false;
235 }
236 
cleanQRZCOM()237 void MainWindowInputQSO::cleanQRZCOM()
238 {
239     //qDebug() << Q_FUNC_INFO ;
240     qthLineEdit->clear();
241     nameLineEdit->clear();
242     locatorLineEdit->clear();
243 }
244 
clearName()245 void MainWindowInputQSO::clearName()
246 {
247     nameLineEdit->clear();
248 }
249 
clearQTH()250 void MainWindowInputQSO::clearQTH()
251 {
252     qthLineEdit->clear();
253 }
254 
clearDXLocator()255 void MainWindowInputQSO::clearDXLocator()
256 {
257     //qDebug() << Q_FUNC_INFO ;
258     locatorLineEdit->clear ();
259 }
260 
slotReturnPressed()261 void MainWindowInputQSO::slotReturnPressed()
262 {
263     emit returnPressed();
264 }
265 
slotLocatorTextChanged()266 void MainWindowInputQSO::slotLocatorTextChanged()
267 {//TO BE REMOVED ONCE InfoWidget is FINISHED - At least modified
268     //qDebug() << Q_FUNC_INFO << ": " << locatorLineEdit->text() << QT_ENDL;
269     int cursorP = locatorLineEdit->cursorPosition();
270 
271     locatorLineEdit->setText((util->getClearSQLi(locatorLineEdit->text())).toUpper());
272 
273     if ( locator->isValidLocator((locatorLineEdit->text()).toUpper()) || locatorLineEdit->text ().isEmpty ())
274     {
275         //qDebug() << Q_FUNC_INFO << ": VALID: " << locatorLineEdit->text() << QT_ENDL;
276         setPaletteRightDXLocator(true);
277         emit dxLocatorChanged (locatorLineEdit->text());
278 
279         //dxLocator = (locatorLineEdit->text());
280         //infoWidget->showDistanceAndBearing(myDataTabWidget->getMyLocator(), dxLocator);
281         //satTabWidget->setLocator(dxLocator);
282         locatorLineEdit->setToolTip(tr("DX QTH locator."));
283         //qDebug() << Q_FUNC_INFO << ": " << locator->getLat(locatorLineEdit->text()) << QT_ENDL;
284         //qDebug() << Q_FUNC_INFO << ": LON: " << locator->getLon(locatorLineEdit->text()) << QT_ENDL;
285     }
286     else
287     {
288         //qDebug() << Q_FUNC_INFO << ": NOT VALID: " << locatorLineEdit->text() << QT_ENDL;
289         setPaletteRightDXLocator(false);
290         locatorLineEdit->setToolTip(tr("DX QTH locator. Format should be Maidenhead like IN70AA up to 10 characters."));
291         locatorLineEdit->setCursorPosition(cursorP);
292         return;
293     }
294     locatorLineEdit->setCursorPosition(cursorP);
295 }
296 
getDXLocator()297 QString MainWindowInputQSO::getDXLocator()
298 {
299     //qDebug() << Q_FUNC_INFO << " - returning: " << locatorLineEdit->text ();
300     return locatorLineEdit->text();
301 }
302 
setDXLocator(const QString & _loc)303 void MainWindowInputQSO::setDXLocator(const QString &_loc)
304 {
305     //qDebug() << Q_FUNC_INFO << ": " << _loc;
306     if (locator->isValidLocator (_loc))
307     {
308         locatorLineEdit->setText (_loc.toUpper ());
309     }
310 }
311 
getName()312 QString MainWindowInputQSO::getName()
313 {
314     return nameLineEdit->text ();
315 }
316 
setName(const QString & _st)317 void MainWindowInputQSO::setName(const QString &_st)
318 {
319     nameLineEdit->setText (_st);
320 }
321 
getTXFreq()322 double MainWindowInputQSO::getTXFreq()
323 {
324     return txFreqSpinBox->value();
325 }
326 
setTXFreq(const double _ft)327 void MainWindowInputQSO::setTXFreq(const double _ft)
328 {
329     //qDebug() << Q_FUNC_INFO << ": " << QString::number(_ft) << QT_ENDL;
330 
331     if ( (_ft >= double(0)) && (_ft <= txFreqSpinBox->maximum()))
332     {
333         //qDebug() << Q_FUNC_INFO << ": defining FR: " << QString::number(_ft) << QT_ENDL;
334         txFreqSpinBox->setValue(_ft);
335     }
336     else
337     {
338         //qDebug() << Q_FUNC_INFO << ": defining FR: 0"  << QT_ENDL;
339         txFreqSpinBox->setValue(0);
340     }
341     //qDebug() << Q_FUNC_INFO << QT_ENDL;
342 }
343 
getRXFreq()344 double MainWindowInputQSO::getRXFreq()
345 {
346     return rxFreqSpinBox->value();
347 }
348 
setRXFreq(const double _ft)349 void MainWindowInputQSO::setRXFreq(const double _ft)
350 {
351     if ( (_ft >= double(0)) && (_ft <= rxFreqSpinBox->maximum()))
352     {
353         rxFreqSpinBox->setValue(_ft);
354     }
355     else
356     {
357         rxFreqSpinBox->setValue(0);
358     }
359 }
360 
getRXPwr()361 double MainWindowInputQSO::getRXPwr()
362 {
363     return rxPowerSpinBox->value();
364 }
365 
setRXPwr(const double _pw)366 void MainWindowInputQSO::setRXPwr(const double _pw)
367 {
368     if (_pw>=0)
369     {
370         rxPowerSpinBox->setValue(_pw);
371     }
372 }
373 
getQTH()374 QString MainWindowInputQSO::getQTH()
375 {
376     return qthLineEdit->text();
377 }
378 
setQTH(const QString & _st)379 void MainWindowInputQSO::setQTH(const QString &_st)
380 {
381     qthLineEdit->setText(_st);
382 }
383 
getRSTTX()384 QString MainWindowInputQSO::getRSTTX()
385 {
386     return rstTXLineEdit->text();
387 }
388 
setRSTTX(const QString & _st)389 void MainWindowInputQSO::setRSTTX(const QString &_st)
390 {
391     rstTXLineEdit->setText (_st);
392 }
393 
getRSTRX()394 QString MainWindowInputQSO::getRSTRX()
395 {
396     return rstRXLineEdit->text();
397 }
398 
setRSTRX(const QString & _st)399 void MainWindowInputQSO::setRSTRX(const QString &_st)
400 {
401     rstRXLineEdit->setText (_st);
402 }
403 
404 
setRSTToMode(const QString & _m,const bool _reading)405 void MainWindowInputQSO::setRSTToMode(const QString &_m, const bool _reading)
406 {
407     //qDebug() << Q_FUNC_INFO << ": " << _m ;
408 
409     if ((_m == "SSB") || (_m== "LSB") || (_m=="USB") || (_m == "FM") || (_m == "AM") )
410     {
411          //qDebug() << Q_FUNC_INFO << ": Detected SSB/LSB/USB"  << QT_ENDL;
412         rstTXLineEdit->setInputMask("#DD");
413         rstRXLineEdit->setInputMask("#DD");
414 
415         //rstTXLineEdit->setText("59");
416         //rstRXLineEdit->setText("59");
417         rstTXLineEdit->setMaxLength(2);
418         rstRXLineEdit->setMaxLength(2);
419     }
420     else if ((_m == "CW") || (_m == "RTTY"))
421     {
422         rstTXLineEdit->setInputMask("DDD");
423         rstRXLineEdit->setInputMask("DDD");
424         //rstTXLineEdit->setText("599");
425         //rstRXLineEdit->setText("599");
426         rstTXLineEdit->setMaxLength(3);
427         rstRXLineEdit->setMaxLength(3);
428     }
429     else if (_m == "PSK31")
430     {
431         rstTXLineEdit->setInputMask("#DD0");
432         rstRXLineEdit->setInputMask("#DD0");
433         //rstTXLineEdit->setText("599");
434         //rstRXLineEdit->setText("599");
435         rstTXLineEdit->setMaxLength(4);
436         rstRXLineEdit->setMaxLength(4);
437     }
438     else if ( (_m.contains("FT", Qt::CaseInsensitive)) || (_m.contains("JT", Qt::CaseInsensitive)) || (_m.contains("QRA64", Qt::CaseInsensitive)) || (_m.contains("JS", Qt::CaseInsensitive)))
439     {
440         rstTXLineEdit->setInputMask("#99");
441         rstRXLineEdit->setInputMask("#99");
442         //rstTXLineEdit->setText("0");
443         //rstRXLineEdit->setText("0");
444         rstTXLineEdit->setMaxLength(3);
445         rstRXLineEdit->setMaxLength(3);
446     }
447     else
448     { // By default SSB RST is configured but anything could be added
449         rstTXLineEdit->setInputMask("#xxx");
450         rstRXLineEdit->setInputMask("#xxx");
451         //rstTXLineEdit->setText("59");
452         //rstRXLineEdit->setText("59");
453         rstTXLineEdit->setMaxLength(4);
454         rstRXLineEdit->setMaxLength(4);
455     }
456     if (!_reading)
457     {
458          //qDebug() << Q_FUNC_INFO << ": reading the UI" << QT_ENDL;
459         rstTXLineEdit->setText(util->getDefaultRST(_m));
460         rstRXLineEdit->setText(util->getDefaultRST(_m));
461     }
462 }
463 
getDarkMode()464 bool MainWindowInputQSO::getDarkMode()
465 {
466     if (nameLineEdit->palette().color(QPalette::Base) == "#646464")
467     {
468         return true;
469     }
470     else
471     {
472         return false;
473     }
474 }
475 
setPaletteRightName(const bool _ok)476 void MainWindowInputQSO::setPaletteRightName(const bool _ok)
477 {
478     if (_ok)
479     {
480         if (getDarkMode())
481         {
482             nameLineEdit->setPalette (palWhite);
483         }
484         else
485         {
486             nameLineEdit->setPalette (palBlack);
487         }
488     }
489     else
490     {
491         nameLineEdit->setPalette (palRed);
492     }
493 }
494 
setPaletteRightQTH(const bool _ok)495 void MainWindowInputQSO::setPaletteRightQTH(const bool _ok)
496 {
497     if (_ok)
498     {
499         if (getDarkMode())
500         {
501             qthLineEdit->setPalette (palWhite);
502         }
503         else
504         {
505             qthLineEdit->setPalette (palBlack);
506         }
507     }
508     else
509     {
510         qthLineEdit->setPalette (palRed);
511     }
512 }
513 
setPaletteRightDXLocator(const bool _ok)514 void MainWindowInputQSO::setPaletteRightDXLocator(const bool _ok)
515 {
516     if (_ok)
517     {
518         if (getDarkMode())
519         {
520             locatorLineEdit->setPalette (palWhite);
521         }
522         else
523         {
524             locatorLineEdit->setPalette (palBlack);
525         }
526     }
527     else
528     {
529         locatorLineEdit->setPalette (palRed);
530     }
531 }
532 
setPropModeFromSat(const QString & _p)533 void MainWindowInputQSO::setPropModeFromSat(const QString &_p)
534 {
535     //qDebug() << Q_FUNC_INFO << ": " << _p << QT_ENDL;
536     propMode = _p;
537     if (propMode == "SAT")
538     {
539         splitCheckBox->setChecked (true);
540     }
541     else
542     {
543         splitCheckBox->setChecked (false);
544     }
545 }
546 
slotFreqTXChanged(double _f)547 void MainWindowInputQSO::slotFreqTXChanged (double _f)
548 {
549     //qDebug() << Q_FUNC_INFO << ": " << QString::number(_f) << QT_ENDL;
550     if (util->isSameFreq (_f, freqTX))
551     {
552         //qDebug() << Q_FUNC_INFO << ": Same Freq return"  << QT_ENDL;
553         return;
554     }
555     freqTX = _f;
556     int bandId = dataProxy->getBandIdFromFreq(_f);
557     if (bandId > 1)
558     { // If the freq belongs to one ham band
559         txFreqSpinBox->setToolTip(tr("TX Frequency in MHz."));
560         if (getDarkMode())
561         {
562             txFreqSpinBox->setPalette(palWhite);
563         }
564         else
565         {
566             txFreqSpinBox->setPalette(palBlack);
567         }
568         //qDebug() << Q_FUNC_INFO << ": emitting: " << QString::number(_f) << QT_ENDL;
569         emit txFreqChanged (_f);
570     }
571     else
572     {
573         txFreqSpinBox->setToolTip(tr("TX Frequency in MHz.\nFrequency is not in a hamradio band!"));
574         txFreqSpinBox->setPalette(palRed);
575          //qDebug() << Q_FUNC_INFO << ":RED - Not in band "  << QT_ENDL;
576     }
577     if ((!splitCheckBox->isChecked()) || modify )
578     {
579         rxFreqSpinBox->setValue (_f);
580         //qDebug() << Q_FUNC_INFO << ": copying to RX Freq "  << QT_ENDL;
581     }
582     //qDebug() << Q_FUNC_INFO << " - END"  << QT_ENDL;
583     setSplitCheckBox();
584 }
585 
slotSplitClicked()586 void MainWindowInputQSO::slotSplitClicked()
587 {
588     if ((!splitCheckBox->isChecked())  )
589     {
590         rxFreqSpinBox->setValue(txFreqSpinBox->value());
591     }
592 }
593 
slotFreqRXChanged(double _f)594 void MainWindowInputQSO::slotFreqRXChanged(double _f)
595 {
596     if (util->isSameFreq (_f, freqRX))
597     {
598         return;
599     }
600     freqRX = _f;
601     int bandId = dataProxy->getBandIdFromFreq(_f);
602     if (bandId > 1)
603     { // If the freq belongs to one ham band
604         if (getDarkMode())
605         {
606             rxFreqSpinBox->setPalette(palWhite);
607         }
608         else
609         {
610             rxFreqSpinBox->setPalette(palBlack);
611         }
612         rxFreqSpinBox->setToolTip(tr("RX Frequency in MHz."));
613         emit rxFreqChanged(rxFreqSpinBox->value());
614     }
615     else
616     {
617         rxFreqSpinBox->setToolTip(tr("RX Frequency in MHz.\nFrequency is not in a hamradio band!"));
618         rxFreqSpinBox->setPalette(palRed);
619          //qDebug() << "MainWindow::slotFreqRXChanged Freq is not in ANY ham band" << QT_ENDL;
620     }
621     if ((!splitCheckBox->isChecked()) && !modify)
622     {
623         txFreqSpinBox->setValue (_f);
624     }
625     /*
626     int bandId = dataProxy->getBandIdFromFreq(_f);
627     if (bandId > 1)
628     { // If the freq belongs to one ham band
629         rxFreqSpinBox->setPalette(palBlack);
630         rxFreqSpinBox->setToolTip(tr("RX Frequency in MHz."));
631         emit rxFreqChanged(rxFreqSpinBox->value());
632     }
633     else
634     {
635         rxFreqSpinBox->setToolTip(tr("RX Frequency in MHz.\nFrequency is not in a hamradio band!"));
636         rxFreqSpinBox->setPalette(palRed);
637                 //qDebug() << "MainWindow::slotFreqRXChanged Freq is not in ANY ham band" << QT_ENDL;
638     }
639     if (!rxFreqBeingAutoChanged)
640     {
641                 //qDebug() << "MainWindow::slotFreqTXChanged: Updating SAT Downlink" << QT_ENDL;
642         emit rxFreqChangedForSat(rxFreqSpinBox->value());
643     }
644     */
645     //qDebug() << "MainWindow::slotFreqRXChanged: END" << QT_ENDL;
646     setSplitCheckBox();
647 }
648 
setSplitCheckBox()649 void MainWindowInputQSO::setSplitCheckBox()
650 {
651    if (util->isSameFreq(txFreqSpinBox->value(), rxFreqSpinBox->value()))
652     {
653         splitCheckBox->setChecked(false);
654     }
655     else
656     {
657         splitCheckBox->setChecked(true);
658     }
659 }
660 
receiveFocus()661 void MainWindowInputQSO::receiveFocus()
662 {
663     //qDebug() << Q_FUNC_INFO;
664     rstTXLineEdit->setFocus ();
665 }
666 
eventFilter(QObject * object,QEvent * event)667 bool MainWindowInputQSO::eventFilter (QObject *object, QEvent *event)
668 {
669     if (!(event->type() == QEvent::Paint ))
670     {
671         //qDebug() << Q_FUNC_INFO << ": " << QString::number(event->type ());
672     }
673 
674     if ((event->type() == QEvent::KeyPress) || (event->type() == QEvent::ShortcutOverride)) {
675         //qDebug() << Q_FUNC_INFO << "KEY PRESSED";
676         QKeyEvent *ke = static_cast<QKeyEvent *>(event);
677         if (ke->key() == Qt::Key_Tab) {
678             //qDebug() << Q_FUNC_INFO << "KEY PRESSED TAB";
679             if (rxPowerSpinBox->hasFocus())
680             {
681                 //qDebug() << Q_FUNC_INFO << "emitting to hand over to mainQSO Input";
682                 emit handOverFocusSignal();
683             }
684 
685 
686             // special tab handling here
687             return true;
688         }
689     }
690 
691     return QWidget::event(event);
692 }
693