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