1
2 /***************************************************************************
3 searchwindow.cpp - description
4 -------------------
5 begin : sept 2020
6 copyright : (C) 2020 by Jaime Robles
7 email : jaime@robles.es
8 ***************************************************************************/
9
10 /*****************************************************************************
11 * This file is part of KLog. *
12 * *
13 * KLog is free software: you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation, either version 3 of the License, or *
16 * (at your option) any later version. *
17 * *
18 * KLog is distributed in the hope that it will be useful, *
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
21 * GNU General Public License for more details. *
22 * *
23 * You should have received a copy of the GNU General Public License *
24 * along with KLog. If not, see <https://www.gnu.org/licenses/>. *
25 * *
26 *****************************************************************************/
27
28 #include "searchwindow.h"
29
30
SearchWindow(DataProxy_SQLite * dp,QWidget * parent)31 SearchWindow::SearchWindow(DataProxy_SQLite *dp, QWidget *parent) : QWidget(parent)
32 {
33 //qDebug() << "SearchWindow::SearchWindow: " << QT_ENDL;
34 dataProxy = dp;
35 showStationCallsignInHeader = true;
36 //sortingThroughProxyModel = false;
37 searchModel = new SearchModel(dataProxy, this);
38 util = new Utilities;
39 connect(searchModel, SIGNAL(queryError(QString, QString, QString, QString)), this, SLOT(slotQueryErrorManagement(QString, QString, QString, QString)) );
40 //logView = new QTableView;
41 treeView = new QTreeView;
42 //dxccStatusWidget = new DXCCStatusWidget(dataProxy);
43 //elogClublog = new eLogClubLog();
44 currentLog = -1;
45 //proxyModel = new LogViewSortFilterProxyModel(this);
46
47
48 awards = new Awards(dataProxy, Q_FUNC_INFO);
49
50 createUI();
51 createActions();
52 setDefaultData();
53 //qDebug() << "SearchWindow::SearchWindow: - END" << QT_ENDL;
54
55 }
56
~SearchWindow()57 SearchWindow::~SearchWindow()
58 {
59 // emit clearError();
60 }
61
62
sortColumn(const int _c)63 void SearchWindow::sortColumn(const int _c)
64 {
65 //proxyModel->sort(_c);
66 searchModel->sort(_c, Qt::AscendingOrder);
67 }
68
clear()69 void SearchWindow::clear()
70 {
71 //qDebug() << "SearchWindow::clear " << QT_ENDL;
72 qslingNeeded = false;
73 }
74
createUI()75 void SearchWindow::createUI()
76 {
77 //qDebug() << "SearchWindow::createUI" << QT_ENDL;
78
79
80 //logView->setContextMenuPolicy(Qt::CustomContextMenu);
81 //logView->setSortingEnabled(true);
82
83 QStringList labels;
84 if (showStationCallsignInHeader)
85 {
86 labels << tr("Call") << tr("Date/Time") << tr("Band") << tr("Mode") << tr("QSL Sent") << tr("QSL Rcvd") << tr("Station Callsign") << tr("ID") ;
87 //treeView->setColumnCount(8);
88 }
89 else
90 {
91 labels << tr("Call") << tr("Date/Time") << tr("Band") << tr("Mode") << tr("QSL Sent") << tr("QSL Rcvd") << tr("ID") ;
92 //treeView->setColumnCount(7);
93 }
94
95 //searchModel->setColumnsToDX();
96
97 /*
98 QStandardItemModel model;
99 model.setColumnCount (1);
100 model.setHeaderData (0, Qt::Horizontal, "Player");
101 */
102 //treeView->setHeaderLabels(labels);
103 //QTreeWidgetItem *item = new QTreeWidgetItem(searchResultsTreeWidget);
104 (treeView->header())->resizeSections(QHeaderView::ResizeToContents);
105
106
107 //treeView->clear();
108 //searchResultsTreeWidget->collapseAll();
109 treeView->setSortingEnabled(true);
110
111 treeView->setContextMenuPolicy(Qt::CustomContextMenu);
112 treeView->setSortingEnabled(true);
113
114
115 QVBoxLayout *layout = new QVBoxLayout;
116 layout->addWidget(treeView);
117 //layout->addWidget(logView);
118 setLayout(layout);
119 }
120
setDefaultData()121 void SearchWindow::setDefaultData()
122 {
123 //qDebug() << "SearchWindow::setDefaultData" << QT_ENDL;
124 }
125
setStationCallsignInHeader(const bool _h)126 void SearchWindow::setStationCallsignInHeader(const bool _h)
127 {
128 showStationCallsignInHeader = _h;
129 setColumnsToDX();
130
131 }
132
createlogPanel(const int _currentLog)133 void SearchWindow::createlogPanel(const int _currentLog)
134 {
135 //qDebug() << "SearchWindow::createlogPanel: " << QString::number(_currentLog) << QT_ENDL;
136 currentLog = _currentLog;
137 searchModel->createSearchModel(currentLog);
138
139 treeView->setModel(searchModel);
140 treeView->setCurrentIndex(searchModel->index(0, 0));
141
142 //logView->setModel(searchModel);
143 //logView->setCurrentIndex(searchModel->index(0, 0));
144
145 //setProxyModel(false);
146
147 //QString contestMode = dataProxy->getLogTypeOfUserLog(currentLog);
148 setColumnsToDX();
149 sortColumn(1); //Initial sort by column 1 (date & time)
150
151 //qDebug() << "SearchWindow::createlogPanel " << searchModel->record(0).field(1).value().toString() << QT_ENDL;
152 //logView->setSelectionMode(QAbstractItemView::ExtendedSelection);
153 //logView->setSelectionBehavior(QAbstractItemView::SelectRows);
154 //logView->resizeColumnsToContents();
155 //logView->horizontalHeader()->setStretchLastSection(true);
156 //logView->sortByColumn(1);
157
158 treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
159 treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
160 //treeView->resizeColumnsToContents();
161 //treeView->horizontalHeader()->setStretchLastSection(true);
162 treeView->sortByColumn(1, Qt::AscendingOrder);
163 }
164
setColumnsToDX()165 void SearchWindow::setColumnsToDX()
166 {
167 //qDebug() << "SearchWindow::setColumnsToDX" << QT_ENDL;
168
169 QString stringQuery;
170 //stringQuery = QString("SELECT call, qso_date, bandid, modeid, qsl_sent, qsl_rcvd, station_callsign, id FROM log LIMIT 1");
171 stringQuery = QString("SELECT * FROM log LIMIT 1");
172 QSqlQuery query;
173 bool sqlOK = query.exec(stringQuery);
174 if (!sqlOK)
175 {
176 emit queryError(Q_FUNC_INFO, query.lastError().databaseText(), query.lastError().nativeErrorCode(), query.lastQuery());
177 }
178
179 //qDebug() << "SearchWindow::setColumnsToDX - Query: " << query.lastQuery() << QT_ENDL;
180 QSqlRecord rec;
181 rec = query.record(); // Number of columns
182 int columns = rec.count();
183
184 for (int i=0; i < columns; i++)
185 {
186 //logView->setColumnHidden(i, true);
187 treeView->setColumnHidden(i, true);
188 }
189
190 columns = rec.indexOf("qso_date");
191 treeView->setColumnHidden(columns, false);
192 searchModel->setHeaderData(columns, Qt::Horizontal,tr("Date/time"));
193 searchModel->setSort(columns, Qt::AscendingOrder);
194
195 columns = rec.indexOf("call");
196 treeView->setColumnHidden(columns, false);
197 searchModel->setHeaderData(columns, Qt::Horizontal,tr("Call"));
198
199 columns = rec.indexOf("bandid");
200 searchModel->setBandIdColumn(columns);
201 treeView->setColumnHidden(columns, false);
202 searchModel->setRelation(columns, QSqlRelation("band", "id", "name"));
203 searchModel->setHeaderData(columns, Qt::Horizontal,tr("Band"));
204
205
206 columns = rec.indexOf("modeid");
207 treeView->setColumnHidden(columns, false);
208 searchModel->setHeaderData(columns, Qt::Horizontal,tr("Mode"));
209 searchModel->setRelation(columns, QSqlRelation("mode", "id", "submode"));
210 searchModel->setModeIdColumn(columns);
211
212 columns = rec.indexOf("qsl_sent");
213 treeView->setColumnHidden(columns, false);
214 searchModel->setHeaderData(columns, Qt::Horizontal,tr("QSL Sent"));
215
216 columns = rec.indexOf("qsl_rcvd");
217 treeView->setColumnHidden(columns, false);
218 searchModel->setHeaderData(columns, Qt::Horizontal,tr("QSL Rcvd"));
219
220 if (showStationCallsignInHeader)
221 {
222 columns = rec.indexOf("station_callsign");
223 treeView->setColumnHidden(columns, false);
224 searchModel->setHeaderData(columns, Qt::Horizontal,tr("Station callsign"));
225 }
226
227 columns = rec.indexOf("dxcc");
228 searchModel->setDXCCColumn(columns);
229 columns = rec.indexOf("lognumber");
230 searchModel->setLogNColumn(columns);
231
232 //columns = rec.indexOf("id");
233
234 //treeView->setColumnHidden(columns, false);
235 }
236
refresh()237 void SearchWindow::refresh()
238 {
239 //qDebug() << "SearchWindow::refresh" << QT_ENDL;
240
241 searchModel->select();
242 }
243
createActions()244 void SearchWindow::createActions()
245 {
246 createActionsCommon();
247 }
248
createActionsCommon()249 void SearchWindow::createActionsCommon()
250 {
251 //LOG VIEW
252
253 //connect(logView, SIGNAL(customContextMenuRequested( const QPoint& ) ), this, SLOT(slotRighButtonFromLog( const QPoint& ) ) );
254 //connect(logView, SIGNAL(doubleClicked ( const QModelIndex& ) ), this, SLOT(slotDoubleClickLog( const QModelIndex& ) ) );
255 connect(treeView, SIGNAL(customContextMenuRequested( const QPoint& ) ), this, SLOT(slotRighButtonFromLog( const QPoint& ) ) );
256 connect(treeView, SIGNAL(doubleClicked ( const QModelIndex& ) ), this, SLOT(slotDoubleClickLog( const QModelIndex& ) ) );
257 }
258
slotRighButtonFromLog(const QPoint & pos)259 void SearchWindow::slotRighButtonFromLog(const QPoint& pos)
260 {
261 //qDebug() << "SearchWindow::slotshowRighButtonFromLog: " << QString::number((treeView->indexAt(pos)).row()) << QT_ENDL;
262 //int row = (logView->indexAt(pos)).row();
263 int row = (treeView->indexAt(pos)).row();
264 //int _qsoID = ((searchModel->index(row, 0)).data(0)).toInt();
265 showMenuRightButtonFromLogCreateActions();
266 rightButtonFromLogMenu(row);
267 //TODO: To be added to the SearchWindow and create an action that emist the QSO id
268 }
269
rightButtonFromLogMenu(const int row)270 void SearchWindow::rightButtonFromLogMenu(const int row)
271 {
272 //qDebug() << "SearchWindow::slotshowRighButtonFromLogMenu: QSO_id: " << QString::number(row) << QT_ENDL;
273
274 int _qsoID = ((searchModel->index(row, 0)).data(0)).toInt();
275 //qDebug() << "SearchWindow::slotshowRighButtonFromLogMenu: QSOid: " << QString::number(_qsoID) << QT_ENDL;
276 bool qslReceived = isQSLReceived(_qsoID);
277 bool qslSent = isQSLSent(_qsoID);
278 QMenu menu(this);
279
280 menu.addAction(delQSOFromLogAct);
281 delQSOFromLogAct->setData(row);
282 menu.addAction(qsoToEditFromLogAct);
283 qsoToEditFromLogAct->setData(row);
284 menu.addAction(checkQRZCOMFromLogAct);
285 checkQRZCOMFromLogAct->setData(row);
286 menu.addAction(checkDXHeatFromLogAct);
287 checkDXHeatFromLogAct->setData(row);
288
289 menu.addSeparator();
290 if (qslSent)
291 {
292 }
293 else
294 {
295 QMenu *menuSentQsl = menu.addMenu(tr("QSL Send"));
296 menuSentQsl->addAction(qslSentViaBureauFromLogAct);
297 menuSentQsl->addAction(qslSentViaDirectFromLogAct);
298 menuSentQsl->addAction(qslSentRequestedAct);
299 if (!qslReceived)
300 {
301 menuSentQsl->addAction(qslSentViaBureauMarkRcvReqFromSearchAct);
302 menuSentQsl->addAction(qslSentViaDirectMarkRcvReqFromSearchAct);
303 qslSentViaBureauMarkRcvReqFromSearchAct->setData(row);
304 qslSentViaDirectMarkRcvReqFromSearchAct->setData(row);
305 }
306 qslSentViaBureauFromLogAct->setData(row);
307 qslSentViaDirectFromLogAct->setData(row);
308 qslSentRequestedAct->setData(row);
309 }
310
311 if (qslReceived)
312 {
313 }
314 else
315 {
316 QMenu *menuRecQsl = menu.addMenu(tr("QSL Rcvd"));
317 menuRecQsl->addAction(qslRecViaBureauFromLogAct);
318 menuRecQsl->addAction(qslRecViaBureauMarkReqFromSearchAct);
319 menuRecQsl->addAction(qslRecViaDirectFromLogAct);
320 menuRecQsl->addAction(qslRecViaDirectMarkReqFromSearchAct);
321 menuRecQsl->addAction(qslRecRequestedAct);
322 qslRecViaBureauFromLogAct->setData(row);
323 qslRecViaBureauMarkReqFromSearchAct->setData(row);
324 qslRecViaDirectFromLogAct->setData(row);
325 qslRecViaDirectMarkReqFromSearchAct->setData(row);
326 qslRecRequestedAct->setData(row);
327
328 }
329 menu.exec(QCursor::pos());
330 }
331
slotDoubleClickLog(const QModelIndex & index)332 void SearchWindow::slotDoubleClickLog(const QModelIndex & index)
333 {
334 //qDebug() << "SearchWindow::slotDoubleClickLog: Row: " << QString::number(index.row()) << "Column: " << QString::number(index.column()) << QT_ENDL;
335
336 int row = index.row();
337 //qsoToEdit((searchModel->index(row, 0)).data(0).toInt());
338 int qsoID = ((searchModel->index(row, Qt::DisplayRole)).data(0)).toInt();
339
340 //qDebug() << "SearchWindow::slotDoubleClickLog: n: " << QString::number (searchModel->data(index, Qt::DisplayRole).toInt()) << QT_ENDL;
341 //qDebug() << "SearchWindow::slotDoubleClickLog: emitted: " << QString::number (((searchModel->index(row, Qt::DisplayRole)).data(0)).toInt()) << QT_ENDL;
342
343 emit actionQSODoubleClicked(qsoID);
344 //qsoToEdit((searchModel->index(row, 0)).data(0).toInt());
345
346 //TODO: To be added to the SearchWindow and create an action that emist the QSO id to be edited
347
348 searchModel->select();
349 }
350
isQSLReceived(const int _qsoId)351 bool SearchWindow::isQSLReceived(const int _qsoId)
352 {
353 //qDebug() << "SearchWindow::isQSLReceived: " << QString::number(_qsoId) << QT_ENDL;
354 return dataProxy->isQSOConfirmed(_qsoId, true, false); // We check just paper QSL
355 //return dataProxy->isQSLReceived(_qsoId);
356 }
357
isQSLSent(const int _qsoId)358 bool SearchWindow::isQSLSent(const int _qsoId)
359 {
360 //qDebug() << "SearchWindow::isQSLSent: " << QString::number(_qsoId) << QT_ENDL;
361
362 return dataProxy->isQSLSent(_qsoId);
363 }
364
365
showMenuRightButtonFromLogCreateActions()366 void SearchWindow::showMenuRightButtonFromLogCreateActions()
367 {
368 //qDebug() << "SearchWindow::showMenuRightButtonFromLogCreateActions" << QT_ENDL;
369
370 delQSOFromLogAct = new QAction(tr("&Delete"), this);
371 delQSOFromLogAct->setStatusTip(tr("Delete a QSO"));
372 connect(delQSOFromLogAct, SIGNAL(triggered()), this, SLOT(slotQsoDeleteFromLog()));
373
374 qsoToEditFromLogAct = new QAction(tr("&Edit QSO"), this);
375 qsoToEditFromLogAct->setStatusTip(tr("Edit this QSO"));
376 connect(qsoToEditFromLogAct, SIGNAL(triggered()), this, SLOT(slotQSOToEditFromLog()));
377
378 qslSentViaBureauFromLogAct = new QAction(tr("Via &bureau"), this);
379 qslSentViaBureauFromLogAct->setStatusTip(tr("Send this QSL via bureau"));
380 connect(qslSentViaBureauFromLogAct, SIGNAL(triggered()), this, SLOT( slotQSLSentViaBureauFromLog() ));
381
382 qslSentViaDirectFromLogAct = new QAction(tr("D&irect"), this);
383 qslSentViaDirectFromLogAct->setStatusTip(tr("Send this QSL via direct"));
384 connect(qslSentViaDirectFromLogAct, SIGNAL(triggered()), this, SLOT( slotQSLSentViaDirectFromLog() ));
385
386 qslRecViaBureauFromLogAct = new QAction(tr("Via bureau"), this);
387 qslRecViaBureauFromLogAct->setStatusTip(tr("QSL &received via bureau"));
388 connect(qslRecViaBureauFromLogAct, SIGNAL(triggered()), this, SLOT( slotQSLRecViaBureauFromLog() ));
389
390 qslRecViaDirectFromLogAct = new QAction(tr("Direct"), this);
391 qslRecViaDirectFromLogAct->setStatusTip(tr("QSL received via direc&t"));
392 connect(qslRecViaDirectFromLogAct, SIGNAL(triggered()), this, SLOT( slotQSLRecViaDirectFromLog() ));
393
394 checkQRZCOMFromLogAct = new QAction(tr("Check in QRZ.com"), this);
395 checkQRZCOMFromLogAct->setStatusTip(tr("Check this callsign in QRZ.com"));
396 connect(checkQRZCOMFromLogAct, SIGNAL(triggered()), this, SLOT( slotCheckQRZCom() ));
397
398 checkDXHeatFromLogAct = new QAction(tr("Check in DXHeat.com"), this);
399 checkDXHeatFromLogAct->setStatusTip(tr("Check this callsign in DXHeat.com"));
400 connect(checkDXHeatFromLogAct, SIGNAL(triggered()), this, SLOT( slotCheckDXHeatCom() ));
401
402 qslSentRequestedAct = new QAction(tr("&Request my QSL"), this);
403 qslSentRequestedAct->setStatusTip(tr("Mark my QSL as requested"));
404 connect(qslSentRequestedAct, SIGNAL(triggered()), this, SLOT( slotQSLSentMarkAsRequested() ));
405
406 qslSentViaDirectMarkRcvReqFromSearchAct = new QAction(tr("Via Direct and mark DX QSL as requested"), this);
407 qslSentViaDirectMarkRcvReqFromSearchAct->setStatusTip(tr("Send this QSL via direct and mark DX QSL as requested"));
408 connect(qslSentViaDirectMarkRcvReqFromSearchAct, SIGNAL(triggered()), this, SLOT( slotQSLSentViaDirectMarkDXReqFromSearch() ));
409
410 qslSentViaBureauMarkRcvReqFromSearchAct = new QAction(tr("Via Bureau and mark DX QSL as requested"), this);
411 qslSentViaBureauMarkRcvReqFromSearchAct->setStatusTip(tr("Send this QSL via bureau and mark DX QSL as requested"));
412 connect(qslSentViaBureauMarkRcvReqFromSearchAct, SIGNAL(triggered()), this, SLOT( slotQSLSentViaBureauMarkDXReqFromSearch() ));
413
414 qslRecRequestedAct = new QAction(tr("&Request the QSL"), this);
415 qslRecRequestedAct->setStatusTip(tr("Mark the QSL as requested"));
416 connect(qslRecRequestedAct, SIGNAL(triggered()), this, SLOT( slotQSLRecMarkAsRequested() ));
417
418 qslRecViaBureauMarkReqFromSearchAct = new QAction(tr("Via bureau and mark my QSL as requested"), this);
419 qslRecViaBureauMarkReqFromSearchAct->setStatusTip(tr("QSL received via bureau and mark my QSL as requested"));
420 connect(qslRecViaBureauMarkReqFromSearchAct, SIGNAL(triggered()), this, SLOT( slotQSLRecViaBureauMarkReqFromSearch() ));
421
422 qslRecViaDirectMarkReqFromSearchAct = new QAction(tr("Direc&t and mark as my QSL requested"), this);
423 qslRecViaDirectMarkReqFromSearchAct->setStatusTip(tr("QSL received via direct and mark my QSL as requested"));
424 connect(qslRecViaDirectMarkReqFromSearchAct, SIGNAL(triggered()), this, SLOT( slotQSLRecViaDirectMarkReqFromSearch() ));
425
426 }
427
428
slotQSLSentViaBureauFromLog()429 void SearchWindow::slotQSLSentViaBureauFromLog()
430 {
431 //qDebug() << "SearchWindow::slotQSLSentViaBureauFromLog: " << (qslSentViaBureauFromLogAct->data()).toString() << " - Id = " << QString::number( ((searchModel->index( ( (qslSentViaBureauFromLogAct->data()).toInt() ) , 0)).data(0).toInt()) ) << QT_ENDL;
432 int _qsoId = ((searchModel->index( ( (qslSentViaBureauFromLogAct->data()).toInt() ) , 0)).data(0).toInt());
433 qslSentViaBureau(_qsoId);
434 searchModel->select();
435
436 }
437
slotQSLSentViaDirectFromLog()438 void SearchWindow::slotQSLSentViaDirectFromLog()
439 {
440 //qDebug() << "SearchWindow::slotQSLSentViaDirectFromLog: " << (qslSentViaDirectFromLogAct->data()).toString() << " - Id = " << QString::number( ((searchModel->index( ( (qslSentViaDirectFromLogAct->data()).toInt() ) , 0)).data(0).toInt()) ) << QT_ENDL;
441 int _qsoId = ((searchModel->index( ( (qslSentViaDirectFromLogAct->data()).toInt() ) , 0)).data(0).toInt());
442 //dataProxy->qslSentViaDirect(_qsoId, (QDateTime::currentDateTime()).toString("yyyy-MM-dd"));
443 dataProxy->qslSentViaDirect(_qsoId, QDate::currentDate());
444 searchModel->select();
445
446 }
447
slotQSLRecViaBureauFromLog()448 void SearchWindow::slotQSLRecViaBureauFromLog()
449 {
450 //qDebug() << "SearchWindow::slotQSLRecViaBureauFromLog: " << QT_ENDL;
451
452 int _qsoId = ((searchModel->index( ( (qslRecViaBureauFromLogAct->data()).toInt() ) , 0)).data(0).toInt());
453 qslRecViaBureau(_qsoId);
454 searchModel->select();
455 //TODO: To be added to the SearchWindow and create an action that emist the QSO id
456 }
457
slotQSLRecViaDirectFromLog()458 void SearchWindow::slotQSLRecViaDirectFromLog()
459 {
460 //qDebug() << "SearchWindow::slotQSLRecViaDirectFromLog: " << (qslRecViaDirectFromLogAct->data()).toString() << " - Id = " << QString::number( ((searchModel->index( ( (qslRecViaDirectFromLogAct->data()).toInt() ) , 0)).data(0).toInt()) ) << QT_ENDL;
461 int _qsoId = ((searchModel->index( ( (qslRecViaDirectFromLogAct->data()).toInt() ) , 0)).data(0).toInt());
462 qslRecViaDirect(_qsoId);
463 searchModel->select();
464 // Mark Sent, Bureau, date, update log.
465 //TODO: To be added to the SearchWindow and create an action that emist the QSO id
466 }
467
slotQSOToEditFromLog()468 void SearchWindow::slotQSOToEditFromLog()
469 {
470 //qDebug() << "slotQSOToEditFromLog: " << (qsoToEditFromLogAct->data()).toString() << QT_ENDL;
471
472 int QSOid = ((searchModel->index((qsoToEditFromLogAct->data()).toInt(), 0)).data(0)).toInt();
473 //int QSOid = qsoToEditFromLogAct->data().toInt();
474 emit actionQSODoubleClicked(QSOid);
475
476
477
478 //TODO: To be added to the SearchWindow and create an action that emit the QSO id
479 }
480 /*
481 void SearchWindow::deleteQSO(const int _qsoID)
482 {
483 //qDebug() << "SearchWindow::deleteQSO: " << QString::number(_qsoID) << QT_ENDL;
484
485 //int QSOid = (delQSOFromLogAct->data()).toInt();
486 emit actionDeleteQSO(_qsoID);
487
488
489
490 elogClublog->deleteQSO(dataProxy->getClubLogRealTimeFromId(_qsoID));
491 dataProxy->deleteQSO(_qsoID);
492
493
494 refresh();
495
496 searchModel->select();
497 emit updateAwards();
498 emit updateSearchText();
499
500 }
501 */
slotQsoDeleteFromLog()502 void SearchWindow::slotQsoDeleteFromLog()
503 {
504 //qDebug() << "SearchWindow::slotQsoDeleteFromLog: qsoID1: " << QString::number((delQSOFromLogAct->data()).toInt()) << QT_ENDL;
505 int QSOid = ((searchModel->index((delQSOFromLogAct->data()).toInt(), 0)).data(0)).toInt();
506
507 //int QSOid = (delQSOFromLogAct->data()).toInt();
508 //qDebug() << "SearchWindow::slotQsoDeleteFromLog: qsoID1: " << QString::number(QSOid) << QT_ENDL;
509 //qDebug() << "SearchWindow::slotQsoDeleteFromLog: qsoID2: " << QString::number((delQSOFromLogAct->data()).toInt()) << QT_ENDL;
510 emit actionDeleteQSO(QSOid);
511 searchModel->select();
512 }
513
qslSentViaBureau(const int _qsoId)514 void SearchWindow::qslSentViaBureau(const int _qsoId)
515 {
516 //qDebug() << "SearchWindow::qslSentViaBureau: " << QString::number(_qsoId)yyyy-MM-dd
517 dataProxy->qslSentViaBureau(_qsoId, QDate::currentDate());
518 searchModel->select();
519 }
520
qslRecViaBureau(const int _qsoId)521 void SearchWindow::qslRecViaBureau(const int _qsoId)
522 {
523 // //qDebug() << "LogWyyyy-MM-ddRecViaBureau: " << QString::number(_qsoIyyyy-MM-dd<< (dateTime->currentDateTime()).toString("yyyy/MM/dd") << QT_ENDL;
524 dataProxy->qslRecViaBureau(_qsoId, QDate::currentDate(), false);
525 awards->setAwards(_qsoId); //Update the Award status
526 searchModel->select();
527 //refresh();
528 emit updateAwards();
529 }
530
qslRecViaDirect(const int _qsoId)531 void SearchWindow::qslRecViaDirect(const int _qsoId)
532 {
533 //qDebug() << "SearchWindow::qslRecViaDirect: " << QString::number(_qsoId)yyyy-MM-dd
534 dataProxy->qslRecViaDirect(_qsoId, QDate::currentDate(), false);
535 awards->setAwards(_qsoId);
536 searchModel->select();
537 //refresh();
538 emit updateAwards();
539 }
540
slotQueryErrorManagement(QString functionFailed,QString errorCodeS,QString nativeError,QString failedQuery)541 void SearchWindow::slotQueryErrorManagement(QString functionFailed, QString errorCodeS, QString nativeError, QString failedQuery)
542 {
543 emit queryError(functionFailed, errorCodeS, nativeError, failedQuery);
544 }
545
slotCheckQRZCom()546 void SearchWindow::slotCheckQRZCom()
547 {
548 QString _qrz = ((searchModel->index( ( (checkQRZCOMFromLogAct->data()).toInt() ) , 2)).data(Qt::DisplayRole).toString());
549 //qDebug() << "SearchWindow::sloTCheckQRZCom: " << _qrz << QT_ENDL;
550 QString url = "https://www.qrz.com/db/" + _qrz;
551
552 QDesktopServices::openUrl(QUrl(url));
553
554 }
555
slotCheckDXHeatCom()556 void SearchWindow::slotCheckDXHeatCom()
557 {
558 //int _qsoId = ((searchModel->index( ( (qslRecViaDirectFromLogAct->data()).toInt() ) , 0)).data(0).toInt());
559 //QString _qrz = dataProxy->getCallFromId(_qsoId);
560 QString _qrz = ((searchModel->index( ( (checkDXHeatFromLogAct->data()).toInt() ) , 2)).data(Qt::DisplayRole).toString());
561 //qDebug() << "SearchWindow::slotCheckDXHeatCom(): " << _qrz << QT_ENDL;
562 QString url = "https://www.dxheat.com/db/" + _qrz;
563 QDesktopServices::openUrl(QUrl(url));
564 }
565
setFilterString(const QString & _st)566 void SearchWindow::setFilterString(const QString &_st)
567 {
568 //qDebug() << "SearchWindow::setFilterString: " << _st << QT_ENDL;
569 searchModel->setFilterString(_st);
570 //qDebug() << "SearchWindow::setFilterString: - END " << QT_ENDL;
571 }
572
selectAll()573 void SearchWindow::selectAll()
574 {
575 //qDebug() << "SearchWindow::selectAll: " << QString::number(searchModel->rowCount()) << QT_ENDL;
576 int rowCount = searchModel->rowCount();
577 //logView->selectAll();
578 treeView->selectAll();
579 for (int i=0;i<rowCount; i++)
580 {
581 //searchModel->selectRow(i);
582 }
583
584
585 }
586
clearSelection()587 void SearchWindow::clearSelection()
588 {
589 //qDebug() << "SearchWindow::clearSelection" << QT_ENDL;
590 //logView->clearSelection();
591 treeView->clearSelection();
592
593 }
594
getSelectedQSOs()595 QList<int> SearchWindow::getSelectedQSOs()
596 {
597 //qDebug() << "SearchWindow::getSelectedQSOs: (Total: " << QString::number(searchModel->rowCount()) << ")"<< QT_ENDL;
598 QList<int> selectedQSOs;
599
600 //QModelIndexList selection = //logView->selectionModel()->selectedRows();
601 QModelIndexList selection = treeView->selectionModel()->selectedRows();
602 foreach (QModelIndex index, selection)
603 {
604 int row, qsoID;
605 row = index.row();
606 qsoID = ((searchModel->index(row, 0)).data(0)).toInt();
607 selectedQSOs.append(qsoID);
608 }
609 //qDebug() << "SearchWindow::getSelectedQSOs: (Selected: (" << QString::number(selectedQSOs.count()) << ")" << QT_ENDL;
610 return selectedQSOs;
611
612 }
613
slotQSLRecMarkAsRequested()614 void SearchWindow::slotQSLRecMarkAsRequested()
615 {
616
617 int _qsoId = ((searchModel->index((qslRecRequestedAct->data()).toInt(), 0)).data(0)).toInt();
618 dataProxy->qslRecAsRequested(_qsoId, QDate::currentDate());
619 if(qslingNeeded)
620 {
621 searchToolNeededQSLToSend();
622 }
623 else
624 {
625 emit updateSearchLineEdit();
626 }
627
628 searchModel->select();
629 }
630
setNeedingQSL(bool const _q)631 void SearchWindow::setNeedingQSL(bool const _q)
632 {
633 qslingNeeded = _q;
634
635 }
636
slotToolSearchQSL(const int actionQSL)637 void SearchWindow::slotToolSearchQSL(const int actionQSL)
638 {
639 //qDebug() << "SearchWidget::slotToolSearchQSL: " << QString::number(actionQSL) << " - LogNumber: " << QString::number(currentLog) << QT_ENDL;
640 // 2 means QSL_RCVD = 'R'
641 QString stringQuery = QString();
642 QString message = QString();
643 QString aux = QString();
644 QString filter;
645 filter = QString();
646
647 //int i = -1;
648
649 switch (actionQSL)
650 {
651 case 0://void searchToolNeededQSLToSend();
652 //qDebug() << "SearchWidget::slotToolSearchQSL: CASE 0" << QT_ENDL;
653
654
655 stringQuery = QString("SELECT call, qso_date,dxcc, bandid, modeid, qsl_sent, qsl_rcvd, lotw_qsl_rcvd, station_callsign, id FROM log WHERE (qsl_rcvd<>'Y' AND lotw_qsl_rcvd<>'Y') AND qsl_sent<>'Y' AND qsl_sent<>'Q' AND qsl_sent<>'R' AND lognumber='%1' AND (bandid, dxcc) NOT IN (SELECT distinct bandid, dxcc from log WHERE qsl_rcvd='Y' OR lotw_qsl_rcvd='Y')").arg(currentLog);
656 //stringQuery = QString("SELECT call, qso_date, bandid, modeid, qsl_sent, qsl_rcvd, station_callsign, log.id FROM log JOIN awarddxcc ON awarddxcc.qsoid=log.id WHERE awarddxcc.confirmed='0' AND log.qsl_sent!='Y' AND log.qsl_sent!='Q' AND log.qsl_sent!='R' AND log.lognumber='%1'").arg(currentLog);
657 message = tr("Needed QSO to send the QSL");
658 setNeedingQSL(true);
659 //qslingNeeded = true;
660 emit requestFocus();
661 break;
662 case 1:
663 //qDebug() << "SearchWidget::slotToolSearchQSL: CASE 1" << QT_ENDL;
664 filter = QString("qsl_sent=='R' AND lognumber='%1'").arg(currentLog);
665 message = tr("My QSL requested to be sent");
666 break;
667 case 2://void slotToolSearchNeededQSLPendingToReceive();
668 //qDebug() << "SearchWidget::slotToolSearchQSL: CASE 2" << QT_ENDL;
669 filter = QString("lognumber='%1' AND ( (qsl_sent='Y' AND qsl_rcvd!='Y' AND qsl_rcvd!='I') OR qsl_rcvd='R')").arg(currentLog);
670 message = tr("DX QSL pending to be received");
671 break;
672 case 3://void slotToolSearchNeededQSLRequested()
673 //qDebug() << "SearchWidget::slotToolSearchQSL: CASE 3" << QT_ENDL;
674 filter = QString("WHERE lognumber='%1' AND qsl_rcvd='R'").arg(currentLog);
675 message = tr("DX QSL pending to be received");
676 break;
677 default:
678 //qDebug() << "SearchWidget::slotToolSearchQSL: CASE DEFAULT" << QT_ENDL;
679 // should never be reached
680 return;
681 // break;
682 }
683
684 clear();
685 setFilterString(filter);
686 }
687
searchToolNeededQSLToSend()688 void SearchWindow::searchToolNeededQSLToSend()
689 {
690 //qDebug() << "SearchWidget::slotToolSearchQSLToSend - TO PREPARE THE QUERY and optimize the function" << QT_ENDL;
691 slotToolSearchQSL(0);
692 //qDebug() << "SearchWidget::slotToolSearchQSLToSend - END" << QT_ENDL;
693 }
694
slotQSLSentMarkAsRequested()695 void SearchWindow::slotQSLSentMarkAsRequested()
696 {
697 //qDebug() << "SearchWindow::slotQSLSentMarkAsRequested: " << QString::number( (qslSentRequestedAct->data()).toInt() ) << QT_ENDL;
698 // bool qslSentAsRequested(const int _qsoId, const QString &_updateDate);
699 int _qsoId = ((searchModel->index((qslSentRequestedAct->data()).toInt(), 0)).data(0)).toInt();
700
701 dataProxy->qslSentAsRequested(_qsoId, QDate::currentDate());
702 if(qslingNeeded)
703 {
704 slotToolSearchQSL(0);
705 }
706 else
707 {
708 emit updateSearchText();
709 }
710 searchModel->select();
711 }
712
slotQSLSentViaDirectMarkDXReqFromSearch()713 void SearchWindow::slotQSLSentViaDirectMarkDXReqFromSearch()
714 {
715 //qDebug() << "slotQSLSentViaDirectMarkDXReqFromSearch: " << QT_ENDL;
716 int _qsoId = ((searchModel->index((qslSentViaDirectMarkRcvReqFromSearchAct->data()).toInt(), 0)).data(0)).toInt();
717 //int _qsoId = (qslSentViaDirectMarkRcvReqFromSearchAct->data()).toInt();
718
719 dataProxy->qslSentViaDirect(_qsoId, QDate::currentDate());
720 dataProxy->qslRecAsRequested(_qsoId, QDate::currentDate());
721
722
723 if(qslingNeeded)
724 {
725 slotToolSearchQSL(0);
726 }
727 else
728 {
729 emit updateSearchText();
730 }
731 searchModel->select();
732 // Mark Sent, Bureau, date, update log.
733 }
734
slotQSLSentViaBureauMarkDXReqFromSearch()735 void SearchWindow::slotQSLSentViaBureauMarkDXReqFromSearch()
736 {
737 //qDebug() << "slotQSLSentViaBureauMarkDXReqFromSearch: " << QString::number( (qslSentViaBureauMarkRcvReqFromSearchAct->data()).toInt() ) << QT_ENDL;
738 //int _qsoId = (qslSentViaBureauMarkRcvReqFromSearchAct->data()).toInt();
739 int _qsoId = ((searchModel->index((qslSentViaBureauMarkRcvReqFromSearchAct->data()).toInt(), 0)).data(0)).toInt();
740 dataProxy->qslSentViaBureau(_qsoId, QDate::currentDate());
741 dataProxy->qslRecAsRequested(_qsoId, QDate::currentDate());
742
743
744 if(qslingNeeded)
745 {
746 slotToolSearchQSL(0);
747 }
748 else
749 {
750 emit updateSearchText();
751 }
752 searchModel->select();
753 //qDebug() << "slotQSLSentViaBureauMarkDXReqFromSearch: - END " << QT_ENDL;
754 // Mark Sent, Bureau, date, update log.
755
756 }
757
slotQSLRecViaBureauMarkReqFromSearch()758 void SearchWindow::slotQSLRecViaBureauMarkReqFromSearch()
759 {
760 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog - Start" << QT_ENDL;
761 //int _qsoId = (qslRecViaBureauMarkReqFromSearchAct->data()).toInt();
762 int _qsoId = ((searchModel->index((qslRecViaBureauMarkReqFromSearchAct->data()).toInt(), 0)).data(0)).toInt();
763 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog: 01" << QT_ENDL;
764 //qslRecViaBureauMarkReq(_qsoId);
765 dataProxy->qslRecViaBureau(_qsoId, QDate::currentDate(), true);
766 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog: 02: n: " << QString::number(_qsoId) << QT_ENDL;
767 if(qslingNeeded)
768 {
769 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog: 03" << QT_ENDL;
770 slotToolSearchQSL(0);
771 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog: 04" << QT_ENDL;
772 }
773 else
774 {
775 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog: 05" << QT_ENDL;
776 emit updateSearchText();
777 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog: 06" << QT_ENDL;
778 }
779 searchModel->select();
780 //qDebug() << "SearchWidget::slotQSLRecViaBureauMarkReqFromLog: 07" << QT_ENDL;
781 }
782
slotQSLRecViaDirectMarkReqFromSearch()783 void SearchWindow::slotQSLRecViaDirectMarkReqFromSearch()
784 {
785 //qDebug() << "SearchWidget::slotQSLRecViaDirectFromLog: " << QT_ENDL;
786 //int _qsoId = (qslRecViaDirectMarkReqFromSearchAct->data()).toInt();
787 int _qsoId = ((searchModel->index((qslRecViaDirectMarkReqFromSearchAct->data()).toInt(), 0)).data(0)).toInt();
788 //qslRecViaDirectMarkReq(_qsoId);
789 dataProxy->qslRecViaDirect(_qsoId, QDate::currentDate(), true);
790 if(qslingNeeded)
791 {
792 slotToolSearchQSL(0);
793 }
794 else
795 {
796 emit updateSearchText();
797 }
798 searchModel->select();
799 // Mark Sent, Bureau, date, update log.
800 }
801
802 /*
803 void SearchWindow::qslRecViaBureauMarkReq(const int _qsoId)
804 {
805 //qDebug() << "SearchWidget::qslRecViaBureau: " << QString::number(_qsoId) << "/" << QDate::currentDate() << QT_ENDL;
806 dataProxy->qslRecViaBureau(_qsoId, QDate::currentDate(), true);
807 //qDebug() << "SearchWidget::qslRecViaBureau: END" << QT_ENDL;
808 }
809 */
810
811 /*
812 void SearchWindow::qslRecViaDirectMarkReq(const int _qsoId)
813 {
814 //qDebug() << "SearchWidget::qslRecViaDirect: " << QString::number(_qsoId) << QT_ENDL;
815 dataProxy->qslRecViaDirect(_qsoId, QDate::currentDate(), true);
816 }
817 */
818 /*
819 void SearchWindow::colorTheList()
820 {
821 //qDebug() << "SearchWidget::colorTheList: " << QString::number(treeView->model()->rowCount()) << QT_ENDL;
822 for (int i = 0; i < treeView->model()->rowCount(); i++)
823 {
824
825 //QString _qrz = ((searchModel->index( ( (qslRecViaDirectFromLogAct->data()).toInt() ) , 0)).data(1).toString());
826 QString _qrz = (searchModel->index(i, 2)).data(Qt::DisplayRole).toString();
827
828 //QColor getQRZDXStatusColor(const QStringList &_qs); // Receives Entity, band, mode & log
829 //QColor color = awards->getQRZDXStatusColor()
830
831 QColor color = QColor(Qt::blue);
832 //searchModel->setItemData(searchModel->index(i, 2), color);
833 //qDebug() << "SearchWidget::colorTheList: " << _qrz << QT_ENDL;
834 }
835
836 }
837 */
838
setColors(const QString & _newOne,const QString & _needed,const QString & _worked,const QString & _confirmed,const QString & _default)839 void SearchWindow::setColors (const QString &_newOne, const QString &_needed, const QString &_worked, const QString &_confirmed, const QString &_default)
840 {
841 //qDebug() << "DXClusterWidget::setColors: " << _newOne << "/" << _needed << "/" << _worked << "/" << _confirmed << "/" << _default << QT_ENDL;
842 // Just to pass the colors to the awards class
843 searchModel->setColors(_newOne, _needed, _worked, _confirmed, _default);
844 }
845
846