1 /***************************************************************************
2                           setuppagesats.cpp  -  description
3                              -------------------
4     begin                : dec 2018
5     copyright            : (C) 2018 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 //#include <QDebug>
28 
29 #include "setuppages/setuppagesats.h"
30 
SetupPageSats(DataProxy_SQLite * dp,QWidget * parent)31 SetupPageSats::SetupPageSats(DataProxy_SQLite *dp, QWidget *parent) : QWidget(parent){
32        //qDebug() << "SetupPageSats::SetupPageSats" << QT_ENDL;
33     dataProxy = dp;
34     arrild = QString();
35     satname = QString();
36     uplink = QString();
37     downlink = QString();
38     modes = QString();
39     newSat = new SetupPageSatsNew(dataProxy, this);
40 
41     util = new Utilities;
42 
43     selectedSat = -1;
44     //defaultStationCallSign.clear();
45 
46     //setupD = new SetupDialog();
47 
48     currentSats = new QComboBox();
49     satsAvailable.clear();
50 
51     //newSat = new SetupPageSatsNew(dataProxy);
52     satsModel = new QSqlRelationalTableModel(this);
53     satsView = new QTableView;
54     satsView->setContextMenuPolicy(Qt::CustomContextMenu);
55     satsView->setSortingEnabled(true);
56 
57     createSatsModel();
58     createSatsPanel();
59 
60     satsView->setCurrentIndex(satsModel->index(0, 0));
61 
62     lastSat = 0;
63 
64     newSatPushButton = new QPushButton(tr("&New"), this);
65     editPushButton = new QPushButton(tr("&Edit"), this);
66     removePushButton = new QPushButton(tr("&Remove"), this);
67     importPushButton = new QPushButton(tr("&Import"), this);
68     exportPushButton = new QPushButton(tr("E&xport"), this);
69 
70     newSatPushButton->setToolTip(tr("Add a new satellite."));
71     editPushButton->setToolTip(tr("Edit the selected satellite."));
72     removePushButton->setToolTip(tr("Remove the selected satellite."));
73     importPushButton->setToolTip(tr("Import a satellites file. It will replace the satellites you have in the current list."));
74     exportPushButton->setToolTip(tr("Export your current satellites to a file."));
75 
76     currentSats->setToolTip(tr("Select the sat you want to open."));
77 
78     QHBoxLayout *buttonsLayout = new QHBoxLayout;
79     buttonsLayout->addWidget(importPushButton);
80     buttonsLayout->addWidget(exportPushButton);
81     buttonsLayout->addWidget(newSatPushButton);
82     buttonsLayout->addWidget(editPushButton);
83     buttonsLayout->addWidget(removePushButton);
84 
85     QVBoxLayout *widgetLayout = new QVBoxLayout;
86     widgetLayout->addWidget(satsView);
87     widgetLayout->addWidget(currentSats);
88     widgetLayout->addLayout(buttonsLayout);
89     //widgetLayout->addLayout(SatDataLayout);
90 
91 
92     setLayout(widgetLayout);
93 
94 
95 
96     //connect(newSatPushButton, SIGNAL(clicked ( )), this, SLOT(slotNewButtonClicked() ) );
97     //QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(slotDownloadFinished(QNetworkReply*)));
98     //connect(setupD, SIGNAL(newSatRequested(true)), this, slotNewButtonClicked() )
99 
100 
101     createActions();
102     updateSelectedSats();
103 
104 
105        //qDebug() << "SetupPageSats::SetupPageSats - END" << QT_ENDL;
106 }
107 
~SetupPageSats()108 SetupPageSats::~SetupPageSats(){
109        //qDebug() << "SetupPageSats::~SetupPageSats" << QT_ENDL;
110 }
111 
112 
createNewSat()113 void SetupPageSats::createNewSat()
114 {
115       //qDebug() << "SetupPageSats::createNewSat" << QT_ENDL;
116     selectedSat = -1;
117     //newSat->clear();
118     newSat->setEditing(false);
119     newSat->exec();
120 }
121 
slotNewButtonClicked()122 void SetupPageSats::slotNewButtonClicked()
123 {
124        //qDebug() << "SetupPageSats::slotNewButtonClicked" << QT_ENDL;
125 
126     createNewSat();
127 }
128 
slotEditButtonClicked()129 void SetupPageSats::slotEditButtonClicked()
130 {
131      //qDebug() << "SetupPageSats::slotEditButtonClicked" << QT_ENDL;
132     //QSqlQuery query;
133     //int nameCol = -1;
134 
135     selectedSat = getSelectedSat();
136     QString shortName = dataProxy->getSateliteArrlIdFromId(selectedSat);
137 
138     newSat->clear();
139     newSat->setEditing(true);
140     newSat->setShortName(shortName);
141     newSat->setName(dataProxy->getSatelliteName(shortName));
142     newSat->setUpLink(dataProxy->getSatelliteFullUplink(shortName));
143     newSat->setDownLink(dataProxy->getSatelliteFullDownlink(shortName));
144     newSat->setModes(dataProxy->getSatelliteFullMode(shortName));
145     newSat->exec();
146     //newSat->setStationCallSign(dataProxy->getStationCallSignFromSat(selectedSat));
147     //newSat->setOperators(dataProxy->getOperatorsFromSat(selectedSat));
148     //newSat->setComment(dataProxy->getCommentsFromSat(selectedSat));
149     //newSat->setDateString(dataProxy->getSatDateFromSat(selectedSat));
150     //newSat->setTypeN(dataProxy->getSatTypeNFromSat(selectedSat).toInt());
151 
152 /*
153        //qDebug() << "SetupPageSats::slotEditButtonClicked-1 (selectedlog: " << QString::number(selectedLog) << ")" << QT_ENDL;
154     QString stringQuery = QString("SELECT * FROM logs WHERE id='%1'").arg(selectedLog);
155        //qDebug() << "SetupPageSats::slotEditButtonClicked -2" << QT_ENDL;
156 
157     bool sqlOk = query.exec(stringQuery);
158     QSqlRecord rec = query.record();
159     if (sqlOk)
160     {
161            //qDebug() << "SetupPageSats::slotEditButtonClicked Query OK" << QT_ENDL;
162         QSqlRecord rec = query.record();
163         if ( (query.next()) && (query.isValid()) )
164         {//id/
165 /stationcall/comment/logtype/logtypeid
166                //qDebug() << "SetupPageSats::slotEditButtonClicked Query Valid" << QT_ENDL;
167 
168 
169 
170             //nameCol = rec.indexOf("stationcall");
171             //newLog->setStationCallSign((query.value(nameCol)).toString());
172             //nameCol = rec.indexOf("operators");
173             //newLog->setOperators((query.value(nameCol)).toString());
174 
175 
176 
177 
178             //nameCol = rec.indexOf("comment");
179             //newLog->setComment((query.value(nameCol)).toString());
180 
181             //nameCol = rec.indexOf("logdate");
182             //newLog->setDateString((query.value(nameCol)).toString());
183 
184             //nameCol = rec.indexOf("logtypen");
185                //qDebug() << "SetupPageSats::slotEditButtonClicked -3" << QT_ENDL;
186             //newLog->setTypeN((query.value(nameCol)).toInt());
187 
188             newLog->exec();
189         }
190 
191     }
192     else
193     {
194         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
195     }
196     */
197 }
198 
199 /*
200 void SetupPageSats::slotSatsCancelled(const bool _q)
201 {
202     selectedSat = -1;
203 }
204 */
205 
slotRemoveButtonClicked()206 void SetupPageSats::slotRemoveButtonClicked()
207 {
208        //qDebug() << "SetupPageSats::slotRemoveButtonClicked" << QT_ENDL;
209     int selectedSat = getSelectedSat();
210 
211     QMessageBox::StandardButton ret;
212     ret = QMessageBox::warning(this, tr("KLog"),
213              tr("Do you really want to remove this satellite?") + "\n" +
214                 tr("This satellite will no be longer available to be selected ..."),
215              QMessageBox::Yes | QMessageBox::No);
216     if (ret == QMessageBox::Yes)
217     {
218 
219         QString stringQuery = QString("DELETE FROM satellites WHERE id='%1'").arg(selectedSat);
220         QSqlQuery query(stringQuery);
221 
222         bool sqlOk = query.exec();
223         if (sqlOk)
224         {
225 
226             satsModel->select();
227             updateSelectedSats();
228             stringQuery = QString("DELETE FROM log WHERE lognumber='%1'").arg(selectedSat);
229             query.exec(stringQuery);
230             sqlOk = query.exec();
231                //qDebug() << "SetupPageSats::slotRemoveButtonClicked: LastQuery: " << query.lastQuery()  << QT_ENDL;
232             if (sqlOk)
233             {
234 
235                 stringQuery = QString("DELETE FROM awarddxcc WHERE lognumber='%2'").arg(selectedSat);
236                 query.exec(stringQuery);
237                 sqlOk = query.exec();
238                    //qDebug() << "SetupPageSats::slotRemoveButtonClicked: LastQuery: " << query.lastQuery()  << QT_ENDL;
239                 if (sqlOk)
240                 {
241                        //qDebug() << "SetupPageSats::slotRemoveButtonClicked (AWARDDXCC REMOVED: " << QString::number(selectedSat) << ")" << QT_ENDL;
242                 }
243                 else
244                 {
245                     emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
246                     showError(tr("Sat has not been removed. (#3)"));
247                        //qDebug() << "SetupPageSats::slotRemoveButtonClicked (AWARDDXCC NOT REMOVED: " << QString::number(selectedSat) << ")" << QT_ENDL;
248                 }
249 
250             }
251             else
252             {
253                 showError(tr("Sat has not been removed. (#2)"));
254                    //qDebug() << "SetupPageSats::slotRemoveButtonClicked (QSOS NOT REMOVED: " << QString::number(selectedSat) << ")" << QT_ENDL;
255             }
256         }
257         else
258         {
259             emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
260             showError(tr("Sat has not been removed. (#1)"));
261                //qDebug() << "SetupPageSats::slotRemoveButtonClicked (NOT REMOVED: " << QString::number(selectedSat) << ")" << QT_ENDL;
262         }
263     }
264 
265     //ASK FOR A CONFIRMATION
266 
267     //DELETE ALL THE QSO IN THE REMOVED Sat
268 
269 }
270 
createSatsPanel()271 void SetupPageSats::createSatsPanel()
272 {
273        //qDebug() << "SetupPageSats::createSatsPanel" << QT_ENDL;
274     satsView->setModel(satsModel);
275     QString stringQuery = QString("SELECT * FROM satellites");
276     QSqlQuery query(stringQuery);
277     QSqlRecord rec = query.record(); // Number of columns
278     int columns = rec.count();
279 
280     for (int i = 0; i < columns; i++ ){
281         satsView->setColumnHidden(i, true);
282     }
283 
284     columns = rec.indexOf("id");
285     satsView->setColumnHidden(columns, false);
286     columns = rec.indexOf("satarrlid");
287     satsView->setColumnHidden(columns, false);
288     columns = rec.indexOf("satname");
289     satsView->setColumnHidden(columns, false);
290     columns = rec.indexOf("uplink");
291     satsView->setColumnHidden(columns, false);
292     columns = rec.indexOf("downlink");
293     satsView->setColumnHidden(columns, false);
294     columns = rec.indexOf("satmode");
295     satsView->setColumnHidden(columns, false);
296 
297     satsView->setItemDelegate(new QSqlRelationalDelegate(this));
298     satsView->setSelectionMode( QAbstractItemView::SingleSelection);
299     satsView->setSelectionBehavior(QAbstractItemView::SelectRows);
300     satsView->resizeColumnsToContents();
301     satsView->horizontalHeader()->setStretchLastSection(true);
302 
303 }
304 
createSatsModel()305 void SetupPageSats::createSatsModel()
306 {
307      //qDebug() << "SetupPageSats::createsatsModel" << QT_ENDL;
308 
309         QString stringQuery = QString("SELECT * FROM satellites");
310         QSqlQuery q(stringQuery);
311         QSqlRecord rec = q.record();
312 
313         int nameCol;
314 
315         //satsModel = new QSqlRelationalTableModel(this);
316         satsModel->setTable("satellites");
317 
318         nameCol = rec.indexOf("id");
319         satsModel->setSort(nameCol, Qt::AscendingOrder);
320         satsModel->setHeaderData(nameCol, Qt::Horizontal, tr("ID"));
321 
322         nameCol = rec.indexOf("satarrlid");
323         satsModel->setHeaderData(nameCol, Qt::Horizontal, tr("Short"));
324 
325         nameCol = rec.indexOf("satname");
326         satsModel->setHeaderData(nameCol, Qt::Horizontal, tr("Name"));
327 
328         nameCol = rec.indexOf("uplink");
329         satsModel->setHeaderData(nameCol, Qt::Horizontal, tr("Uplink"));
330 
331         nameCol = rec.indexOf("downlink");
332         satsModel->setHeaderData(nameCol, Qt::Horizontal, tr("Downlink"));
333 
334         nameCol = rec.indexOf("satmode");
335         satsModel->setHeaderData(nameCol, Qt::Horizontal, tr("Modes"));
336 
337         satsModel->select();
338 }
339 
slotSatselected(const QModelIndex & index)340 void SetupPageSats::slotSatselected(const QModelIndex & index)
341 {
342      //qDebug() << "SetupPageSats::slotSatselected"  << QT_ENDL;
343     int row = index.row();
344     setSelectedSat((satsModel->index(row, 0)).data(0).toInt());
345 
346 }
347 
slotSatDoubleClicked(const QModelIndex & index)348 void SetupPageSats::slotSatDoubleClicked(const QModelIndex & index)
349 {
350        //qDebug() << "SetupPageSats::slotSatDoubleClicked"  << QT_ENDL;
351 
352     int row = index.row();
353     setSelectedSat((satsModel->index(row, 0)).data(0).toInt());
354     slotEditButtonClicked();
355 
356 }
slotAnalyzeNewSatData(const QStringList _qs)357 void SetupPageSats::slotAnalyzeNewSatData(const QStringList _qs)
358 {
359     updateSelectedSats();
360 }
361 
createActions()362 void SetupPageSats::createActions()
363 {
364        //qDebug() << "SetupPageSats::createActions" << QT_ENDL;
365     connect(importPushButton, SIGNAL(clicked()), this, SLOT(slotImportButtonClicked() ) );
366     connect(exportPushButton, SIGNAL(clicked()), this, SLOT(slotExportButtonClicked() ) );
367     connect(newSatPushButton, SIGNAL(clicked()), this, SLOT(slotNewButtonClicked() ) );
368     connect(removePushButton, SIGNAL(clicked()), this, SLOT(slotRemoveButtonClicked() ) );
369     connect(editPushButton, SIGNAL(clicked()), this, SLOT(slotEditButtonClicked() ) );
370     connect(newSat, SIGNAL(newSatData(QStringList)), this, SLOT(slotAnalyzeNewSatData(QStringList) ) );
371     connect(satsView, SIGNAL(clicked(QModelIndex)), this, SLOT(slotSatselected(QModelIndex) ) );
372     connect(satsView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(slotSatDoubleClicked(QModelIndex) ) );
373     //connect(SatView, SIGNAL(doubleClicked ( const QModelIndex& ) ), this, SLOT(slotDoubleClickSat( const QModelIndex& ) ) );
374 
375     //loadAllPushButton->setToolTip(tr("Load all the Sats"));
376     //loadSelectedPushButton->setToolTip(tr("Load only the selected Sat"));
377     //clearPushButton->setToolTip(tr("Clear selection"));
378 
379 }
380 
381 /*
382 bool SetupPageSats::addNewSat(const QStringList _qs)
383 {
384        //qDebug() << "SetupPageSats::addNewSat: " << _qs.at(2) << QT_ENDL;
385     QString aux = QString();
386     int nameCol = -1;
387 
388     QString _dateString = _qs.at(0);
389     QString _stationCallsign = _qs.at(1);
390     QString _typeContest = _qs.at(2);
391     QString _comment = _qs.at(3);
392     QString _typeContestN = _qs.at(4);
393 
394 
395     QString queryString = QString("SELECT * FROM logs WHERE logdate='%1' AND stationcall='%2' AND logtype='%3' AND logtypen='%4'").arg(_dateString).arg(_stationCallsign).arg(_typeContest).arg(_typeContestN);
396     //"logs"
397     //"id, logdate, stationcall, comment, logtype"
398        //qDebug() << "SetupPageSats::addNewLog query1: " << queryString << QT_ENDL;
399     QSqlQuery query;
400 
401     bool sqlOK = query.exec(queryString);
402     QSqlRecord rec = query.record(); // Number of columns
403 
404     while ( (query.next()) && (query.isValid()) )
405     {
406         nameCol = rec.indexOf("id");
407         aux = (query.value(nameCol)).toString();
408            //qDebug() << "SetupPageSats::addNewLog: id = " << aux << QT_ENDL;
409         return false;
410     }
411     queryString = QString("INSERT INTO logs (logdate, stationcall, comment, logtype, logtypen) values('%1','%2','%3','%4', '%5')").arg(_dateString).arg(_stationCallsign).arg(_comment).arg(_typeContest).arg(_typeContestN);
412 
413        //qDebug() << "SetupPageSats::addNewSat query1: " << queryString << QT_ENDL;
414     sqlOK = query.exec(queryString);
415     if (sqlOK)
416     {
417            //qDebug() << "SetupPageSats::addNewSat ADDED! id = "  << QT_ENDL;
418         satsModel->select();
419         updateSelectedSats();
420         return true;
421     }
422     else
423     {
424         return false;
425     }
426     return false;
427 }
428 */
429 
updateSelectedSats()430 void SetupPageSats::updateSelectedSats()
431 {
432    //qDebug() << "SetupPageSats::updateSelectedSats" << QT_ENDL;
433     satsAvailable = readSats();
434     satsModel->select();
435 
436     if (satsAvailable.length()>0)
437     {
438         currentSats->clear();
439         currentSats->addItems(satsAvailable);
440     }
441     else
442     {
443           //qDebug() << "SetupPageSats::updateSelectedSats Not selected (less than 1)" << QT_ENDL;
444         currentSats->clear();
445     }
446 }
447 
readSats()448 QStringList SetupPageSats::readSats()
449 {
450        //qDebug() << "SetupPageSats::readSats" << QT_ENDL;
451 
452     QString aux, aux2;
453     QStringList _sats;
454     QSqlQuery query;
455     int nameCol = -1;
456     bool sqlOk = false;
457     //QDate date = QDate::currentDate();
458     aux2.clear();
459     aux.clear();
460     _sats.clear();
461 
462 
463     aux = "SELECT id, satarrlid, satname, uplink, downlink, satmode FROM satellites";
464 
465     sqlOk = query.exec(aux);
466     if (sqlOk)
467     {
468         QSqlRecord rec = query.record();
469 
470         while ( (query.next()) && (query.isValid()) )
471         {
472             aux2.clear();
473 
474             nameCol = rec.indexOf("id");
475             aux2 = (query.value(nameCol)).toString();
476 
477             nameCol = rec.indexOf("satarrlid");
478             aux2 = aux2.append("-");
479             aux2.append((query.value(nameCol)).toString());
480 
481             nameCol = rec.indexOf("satname");
482              aux2 = aux2.append("-");
483              aux2.append((query.value(nameCol)).toString());
484 
485              nameCol = rec.indexOf("uplink");
486              aux2 = aux2.append("-");
487              aux2.append((query.value(nameCol)).toString());
488 
489              nameCol = rec.indexOf("downlink");
490              aux2 = aux2.append("-");
491              aux2.append((query.value(nameCol)).toString());
492 
493              nameCol = rec.indexOf("satmode");
494              aux2 = aux2.append("-");
495              aux2.append((query.value(nameCol)).toString());
496 
497              _sats.append(aux2);
498 
499          }
500          return _sats;
501      }
502      else
503      {
504          emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
505          return _sats;
506      }
507 
508 
509      //_sats.clear();
510         //qDebug() << "SetupPageSats::readSats: " << QString::number(_sats.size())<< QT_ENDL;
511 
512      //return _sats;
513 }
514 
getSelectedSat()515 int SetupPageSats::getSelectedSat()
516 {
517      //qDebug() << "SetupPageSats::getSelectedSat: " << currentSats->currentText() << QT_ENDL;
518     QString selectedSat = currentSats->currentText();
519     int i = 0;
520     QStringList qs;
521     qs.clear();
522     qs << selectedSat.split("-");
523     i = (qs.at(0)).toInt();
524     if (i>=1)
525     {
526         return i;
527     }
528     else
529     {
530         return 0;
531     }
532     //return 0;
533 }
534 
setSelectedSat(const int _i)535 void SetupPageSats::setSelectedSat(const int _i)
536 {
537      //qDebug() << "SetupPageSats::SetupPageSats::setSelectedSat: " << QString::number(_i) << QT_ENDL;
538 
539     QString n = QString::number(_i) + "-";
540     int selected = currentSats->findText(n, Qt::MatchStartsWith);
541     if (selected >= 0)
542     {
543          //qDebug() << "SetupPageSats::SetupPageSats::setSelectedSat selected>0: " << QString::number(selected) << QT_ENDL;
544         currentSats->setCurrentIndex(selected);
545     }
546     else
547     {
548           //qDebug() << "SetupPageSats::SetupPageSats::setSelectedSat not selected" << QT_ENDL;
549         return;
550     }
551 }
552 
553 //void SetupPageSats::readSelectedSat(const int _i)
554 //{
555 
556 //}
557 
showError(const QString & _errorC)558 void SetupPageSats::showError(const QString &_errorC)
559 {
560     QString text = QString(tr("An error has occurred showing the following error code:") + "\n'%1'").arg(_errorC);
561 
562 
563     QMessageBox::warning(this, tr("KLog - SetupPageSats"),
564                                    text,
565                                    QMessageBox::Ok);
566 
567 }
568 
slotImportButtonClicked()569 void SetupPageSats::slotImportButtonClicked()
570 {
571      //qDebug() << "SetupPageSats::slotImportButtonClicked" << QT_ENDL;
572 
573     QString fileName = QFileDialog::getOpenFileName(this, tr("Open Satellites File"),
574                                                      util->getHomeDir(),
575                                                      "SATS (*.dat)");
576     if (fileName.isNull())
577     {
578         return;
579     }
580 
581     UpdateSatsData *updateSat = new UpdateSatsData(dataProxy, this);
582     if (updateSat->satDataFileRead(fileName))
583     {
584 
585          //qDebug() << "SetupPageSats::slotImportButtonClicked IMPORTED OK" << QT_ENDL;
586     }
587     else
588     {
589          //qDebug() << "SetupPageSats::slotImportButtonClicked IMPORTED NOK" << QT_ENDL;
590         QMessageBox msgBox;
591         msgBox.setIcon(QMessageBox::Warning);
592         msgBox.setWindowTitle(tr("KLog warning"));
593         QString aux = QString();
594         aux = tr("An unexpected error ocurred while importing the satellite data.\n\nIt may be caused because the file you are trying to import does not have the right format.");
595         //msgBox.setText(aux + "MW-1#" + QString::number(errorCode));
596         msgBox.setText(aux);
597         msgBox.setDetailedText(tr("Please check the format or contact the developer for analysis with the error code: ") + "SetupPageSats error #1");
598         msgBox.setStandardButtons(QMessageBox::Ok);
599         msgBox.setDefaultButton(QMessageBox::Ok);
600         int ret = msgBox.exec();
601         switch (ret)
602         {
603             case QMessageBox::Ok:
604             break;
605             default:
606             // should never be reached
607             break;
608         }
609 
610     }
611     satsModel->select();
612     updateSelectedSats();
613 
614 }
615 
slotExportButtonClicked()616 void SetupPageSats::slotExportButtonClicked()
617 {
618      //qDebug() << "SetupPageSats::slotExportButtonClicked" << QT_ENDL;
619 
620     int nameCol = -1;
621     QString queryString, aux;
622     QSqlQuery query;
623 
624     int satsN = -1;
625 
626     bool sqlOk = false;
627     aux.clear();
628     queryString = "SELECT COUNT (*) from satellites";
629     sqlOk = query.exec(queryString);
630     if (sqlOk)
631     {
632         if (query.next())
633         {
634             if (query.isValid())
635             {
636                 satsN = (query.value(0)).toInt();
637                  //qDebug() << "SetupPageSats::slotExportButtonClicked: Sats: " << QString::number(satsN) << QT_ENDL;
638             }
639             else
640             {
641                 return;
642             }
643         }
644         else
645         {
646             return;
647         }
648 
649     }
650     else
651     {
652         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
653 
654     }
655     QDateTime *dateTime = new QDateTime();
656     //dateTime->currentDateTime();
657 
658     queryString = "SELECT id, satarrlid, satname, uplink, downlink, satmode FROM satellites";
659     sqlOk = query.exec(queryString);
660 
661     if (sqlOk)
662     {
663 
664         QString fileName = QFileDialog::getSaveFileName(this, tr("Save Satellites File"),
665                                    util->getHomeDir(),
666                                    "SATS (*.dat)");
667 
668         QFile file(fileName);
669         if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) /* Flawfinder: ignore */
670             return ;
671         QTextStream out(&file);
672 
673         out << "<app_klog_data:4>SATS" << QT_ENDL;
674         out << "<app_klog_sats_references:" << QString::number((QString::number(satsN)).length()) << ">" << QString::number(satsN) << QT_ENDL;
675         out << "<app_klog_sats_version:8>" << (dateTime->currentDateTime().date()).toString("yyyyMMdd");
676         out << "<EOH>" << QT_ENDL;
677         QSqlRecord rec = query.record();
678 
679         while ( (query.next()) && (query.isValid()) )
680         {
681             nameCol = rec.indexOf("satarrlid");
682             aux = (query.value(nameCol)).toString();
683             QString satText = "<app_klog_sats_arrlid:" + QString::number(aux.length()) + ">" + aux + " ";
684 
685             nameCol = rec.indexOf("satname");
686             aux = (query.value(nameCol)).toString();
687             satText = satText + "<app_klog_sats_name:" + QString::number(aux.length()) + ">" + aux + " ";
688 
689             nameCol = rec.indexOf("uplink");
690             aux = (query.value(nameCol)).toString();
691             satText = satText + "<app_klog_sats_uplink:" + QString::number(aux.length()) + ">" + aux + " ";
692 
693             nameCol = rec.indexOf("downlink");
694             aux = (query.value(nameCol)).toString();
695             satText = satText + "<app_klog_sats_downlink:" + QString::number(aux.length()) + ">" + aux + " ";
696 
697             nameCol = rec.indexOf("satmode");
698             aux = (query.value(nameCol)).toString();
699             satText = satText + "<app_klog_sats_mode:" + QString::number(aux.length()) + ">" + aux + " " + "<eor>";
700 
701             out << satText << QT_ENDL;
702             //satText.clear();
703         }
704 
705     }
706     else
707     {
708         emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
709     }
710 
711      //qDebug() << "SetupPageSats::slotExportButtonClicked END" << QT_ENDL;
712 }
713