149 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #include "logqso.h" | ||
|  | 
 | ||
|  | #include <QString> | ||
|  | #include <QSettings> | ||
|  | #include <QStandardPaths> | ||
|  | #include <QDir> | ||
|  | #include <QDebug> | ||
|  | 
 | ||
|  | #include "logbook/adif.h" | ||
|  | #include "MessageBox.hpp" | ||
|  | 
 | ||
|  | #include "ui_logqso.h" | ||
|  | #include "moc_logqso.cpp" | ||
|  | 
 | ||
|  | LogQSO::LogQSO(QString const& programTitle, QSettings * settings, QWidget *parent) | ||
|  |   : QDialog(parent) | ||
|  |   , ui(new Ui::LogQSO) | ||
|  |   , m_settings (settings) | ||
|  | { | ||
|  |   ui->setupUi(this); | ||
|  |   setWindowTitle(programTitle + " - Log QSO"); | ||
|  |   loadSettings (); | ||
|  | } | ||
|  | 
 | ||
|  | LogQSO::~LogQSO () | ||
|  | { | ||
|  | } | ||
|  | 
 | ||
|  | void LogQSO::loadSettings () | ||
|  | { | ||
|  |   m_settings->beginGroup ("LogQSO"); | ||
|  |   restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ()); | ||
|  |   ui->cbTxPower->setChecked (m_settings->value ("SaveTxPower", false).toBool ()); | ||
|  |   ui->cbComments->setChecked (m_settings->value ("SaveComments", false).toBool ()); | ||
|  |   m_txPower = m_settings->value ("TxPower", "").toString (); | ||
|  |   m_comments = m_settings->value ("LogComments", "").toString(); | ||
|  |   m_settings->endGroup (); | ||
|  | } | ||
|  | 
 | ||
|  | void LogQSO::storeSettings () const | ||
|  | { | ||
|  |   m_settings->beginGroup ("LogQSO"); | ||
|  |   m_settings->setValue ("geometry", saveGeometry ()); | ||
|  |   m_settings->setValue ("SaveTxPower", ui->cbTxPower->isChecked ()); | ||
|  |   m_settings->setValue ("SaveComments", ui->cbComments->isChecked ()); | ||
|  |   m_settings->setValue ("TxPower", m_txPower); | ||
|  |   m_settings->setValue ("LogComments", m_comments); | ||
|  |   m_settings->endGroup (); | ||
|  | } | ||
|  | 
 | ||
|  | void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString mode, | ||
|  |                         QString const& rptSent, QString const& rptRcvd, | ||
|  |                         QDateTime const& dateTimeOn, QDateTime const& dateTimeOff, | ||
|  |                         Radio::Frequency dialFreq, QString const& myCall, QString const& myGrid, | ||
|  |                         bool noSuffix, bool toRTTY, bool dBtoComments) | ||
|  | { | ||
|  |   if(!isHidden()) return; | ||
|  |   ui->call->setText(hisCall); | ||
|  |   ui->grid->setText(hisGrid); | ||
|  |   ui->name->setText(""); | ||
|  |   ui->txPower->setText(""); | ||
|  |   ui->comments->setText(""); | ||
|  |   if (ui->cbTxPower->isChecked ()) ui->txPower->setText(m_txPower); | ||
|  |   if (ui->cbComments->isChecked ()) ui->comments->setText(m_comments); | ||
|  |   if(dBtoComments) { | ||
|  |     QString t=mode; | ||
|  |     if(rptSent!="") t+="  Sent: " + rptSent; | ||
|  |     if(rptRcvd!="") t+="  Rcvd: " + rptRcvd; | ||
|  |     ui->comments->setText(t); | ||
|  |   } | ||
|  |   if(noSuffix and mode.mid(0,3)=="JT9") mode="JT9"; | ||
|  |   if(toRTTY and mode.mid(0,3)=="JT9") mode="RTTY"; | ||
|  |   ui->mode->setText(mode); | ||
|  |   ui->sent->setText(rptSent); | ||
|  |   ui->rcvd->setText(rptRcvd); | ||
|  |   ui->start_date_time->setDateTime (dateTimeOn); | ||
|  |   ui->end_date_time->setDateTime (dateTimeOff); | ||
|  |   m_dialFreq=dialFreq; | ||
|  |   m_myCall=myCall; | ||
|  |   m_myGrid=myGrid; | ||
|  |   QString band= ADIF::bandFromFrequency(dialFreq / 1.e6); | ||
|  |   ui->band->setText(band); | ||
|  | 
 | ||
|  |   show (); | ||
|  | } | ||
|  | 
 | ||
|  | void LogQSO::accept() | ||
|  | { | ||
|  |   QString hisCall,hisGrid,mode,rptSent,rptRcvd,dateOn,dateOff,timeOn,timeOff,band; | ||
|  |   QString comments,name; | ||
|  | 
 | ||
|  |   hisCall=ui->call->text(); | ||
|  |   hisGrid=ui->grid->text(); | ||
|  |   mode=ui->mode->text(); | ||
|  |   rptSent=ui->sent->text(); | ||
|  |   rptRcvd=ui->rcvd->text(); | ||
|  |   m_dateTimeOn = ui->start_date_time->dateTime (); | ||
|  |   m_dateTimeOff = ui->end_date_time->dateTime (); | ||
|  |   band=ui->band->text(); | ||
|  |   name=ui->name->text(); | ||
|  |   m_txPower=ui->txPower->text(); | ||
|  |   comments=ui->comments->text(); | ||
|  |   m_comments=comments; | ||
|  |   QString strDialFreq(QString::number(m_dialFreq / 1.e6,'f',6)); | ||
|  | 
 | ||
|  |   //Log this QSO to ADIF file "wsjtx_log.adi" | ||
|  |   QString filename = "wsjtx_log.adi";  // TODO allow user to set | ||
|  |   ADIF adifile; | ||
|  |   auto adifilePath = QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx_log.adi"); | ||
|  |   adifile.init(adifilePath); | ||
|  |   if (!adifile.addQSOToFile(hisCall,hisGrid,mode,rptSent,rptRcvd,m_dateTimeOn,m_dateTimeOff,band,comments,name,strDialFreq,m_myCall,m_myGrid,m_txPower)) | ||
|  |   { | ||
|  |     MessageBox::warning_message (this, tr ("Log file error"), | ||
|  |                                  tr ("Cannot open \"%1\"").arg (adifilePath)); | ||
|  |   } | ||
|  | 
 | ||
|  | //Log this QSO to file "wsjtx.log" | ||
|  |   static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")}; | ||
|  |   if(!f.open(QIODevice::Text | QIODevice::Append)) { | ||
|  |     MessageBox::warning_message (this, tr ("Log file error"), | ||
|  |                                  tr ("Cannot open \"%1\" for append").arg (f.fileName ()), | ||
|  |                                  tr ("Error: %1").arg (f.errorString ())); | ||
|  |   } else { | ||
|  |     QString logEntry=m_dateTimeOn.date().toString("yyyy-MM-dd,") + | ||
|  |       m_dateTimeOn.time().toString("hh:mm:ss,") + | ||
|  |       m_dateTimeOff.date().toString("yyyy-MM-dd,") + | ||
|  |       m_dateTimeOff.time().toString("hh:mm:ss,") + hisCall + "," + | ||
|  |       hisGrid + "," + strDialFreq + "," + mode + | ||
|  |       "," + rptSent + "," + rptRcvd + "," + m_txPower + | ||
|  |       "," + comments + "," + name; | ||
|  |     QTextStream out(&f); | ||
|  |     out << logEntry << endl; | ||
|  |     f.close(); | ||
|  |   } | ||
|  | 
 | ||
|  | //Clean up and finish logging | ||
|  |   Q_EMIT acceptQSO (m_dateTimeOff, hisCall, hisGrid, m_dialFreq, mode, rptSent, rptRcvd, m_txPower, comments, name,m_dateTimeOn); | ||
|  |   QDialog::accept(); | ||
|  | } | ||
|  | 
 | ||
|  | // closeEvent is only called from the system menu close widget for a | ||
|  | // modeless dialog so we use the hideEvent override to store the | ||
|  | // window settings | ||
|  | void LogQSO::hideEvent (QHideEvent * e) | ||
|  | { | ||
|  |   storeSettings (); | ||
|  |   QDialog::hideEvent (e); | ||
|  | } |