mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-13 15:41:50 -05:00
b79cf0df99
Where tool tips are defined in rich text, equivalent pain test accessible descriptions have been added so that screen readers do not announce HTML tags. Refactored date time delegates to use a simpler default editor via a default item editor factory for QDateTime values, the editor is a standard QDateTimeEdit with a format that includes seconds and renders assuming the time is UTC. Modified the Cabrillo log and Fox log database table models to provide QDateTime items for the edit role of date time fields, and formated date time strings including seconds and assumed as UTC for the display role.
123 lines
4.0 KiB
C++
123 lines
4.0 KiB
C++
#include "FoxLogWindow.hpp"
|
|
|
|
#include <QApplication>
|
|
#include <QAction>
|
|
#include <QFile>
|
|
#include <QDir>
|
|
#include <QSqlTableModel>
|
|
#include <QFileDialog>
|
|
|
|
#include "SettingsGroup.hpp"
|
|
#include "Configuration.hpp"
|
|
#include "MessageBox.hpp"
|
|
#include "models/Bands.hpp"
|
|
#include "models/FoxLog.hpp"
|
|
#include "item_delegates/ForeignKeyDelegate.hpp"
|
|
#include "item_delegates/CallsignDelegate.hpp"
|
|
#include "item_delegates/MaidenheadLocatorDelegate.hpp"
|
|
#include "pimpl_impl.hpp"
|
|
|
|
#include "ui_FoxLogWindow.h"
|
|
#include "moc_FoxLogWindow.cpp"
|
|
|
|
class FoxLogWindow::impl final
|
|
{
|
|
public:
|
|
explicit impl (FoxLog * log)
|
|
: log_ {log}
|
|
{
|
|
}
|
|
|
|
FoxLog * log_;
|
|
Ui::FoxLogWindow ui_;
|
|
};
|
|
|
|
FoxLogWindow::FoxLogWindow (QSettings * settings, Configuration const * configuration
|
|
, FoxLog * fox_log, QWidget * parent)
|
|
: AbstractLogWindow {"Fox Log Window", settings, configuration, parent}
|
|
, m_ {fox_log}
|
|
{
|
|
setWindowTitle (QApplication::applicationName () + " - Fox Log");
|
|
m_->ui_.setupUi (this);
|
|
m_->ui_.log_table_view->setModel (m_->log_->model ());
|
|
set_log_view (m_->ui_.log_table_view);
|
|
m_->ui_.log_table_view->setItemDelegateForColumn (2, new CallsignDelegate {this});
|
|
m_->ui_.log_table_view->setItemDelegateForColumn (3, new MaidenheadLocatorDelegate {this});
|
|
m_->ui_.log_table_view->setItemDelegateForColumn (6, new ForeignKeyDelegate {configuration->bands (), 0, this});
|
|
m_->ui_.log_table_view->horizontalHeader ()->moveSection (6, 1); // move band to first column
|
|
m_->ui_.rate_label->setNum (0);
|
|
m_->ui_.queued_label->setNum (0);
|
|
m_->ui_.callers_label->setNum (0);
|
|
|
|
// actions
|
|
auto export_action = new QAction {tr ("&Export ADIF ..."), m_->ui_.log_table_view};
|
|
m_->ui_.log_table_view->insertAction (nullptr, export_action);
|
|
connect (export_action, &QAction::triggered, [this, configuration] (bool /*checked*/) {
|
|
auto file_name = QFileDialog::getSaveFileName (this
|
|
, tr ("Export ADIF Log File")
|
|
, configuration->writeable_data_dir ().absolutePath ()
|
|
, tr ("ADIF Log (*.adi)"));
|
|
if (file_name.size () && m_->log_)
|
|
{
|
|
QFile ADIF_file {file_name};
|
|
if (ADIF_file.open (QIODevice::WriteOnly | QIODevice::Text))
|
|
{
|
|
QTextStream output_stream {&ADIF_file};
|
|
m_->log_->export_qsos (output_stream);
|
|
}
|
|
else
|
|
{
|
|
MessageBox::warning_message (this
|
|
, tr ("Export ADIF File Error")
|
|
, tr ("Cannot open \"%1\" for writing: %2")
|
|
.arg (ADIF_file.fileName ()).arg (ADIF_file.errorString ()));
|
|
}
|
|
}
|
|
});
|
|
|
|
auto reset_action = new QAction {tr ("&Reset ..."), m_->ui_.log_table_view};
|
|
m_->ui_.log_table_view->insertAction (nullptr, reset_action);
|
|
connect (reset_action, &QAction::triggered, [this, configuration] (bool /*checked*/) {
|
|
if (MessageBox::Yes == MessageBox::query_message( this
|
|
, tr ("Confirm Reset")
|
|
, tr ("Are you sure you want to erase file FoxQSO.txt "
|
|
"and start a new Fox log?")))
|
|
{
|
|
QFile f{configuration->writeable_data_dir ().absoluteFilePath ("FoxQSO.txt")};
|
|
f.remove ();
|
|
Q_EMIT reset_log_model ();
|
|
}
|
|
});
|
|
}
|
|
|
|
FoxLogWindow::~FoxLogWindow ()
|
|
{
|
|
}
|
|
|
|
void FoxLogWindow::callers (int n)
|
|
{
|
|
m_->ui_.callers_label->setNum (n);
|
|
}
|
|
|
|
void FoxLogWindow::queued (int n)
|
|
{
|
|
m_->ui_.queued_label->setNum (n);
|
|
}
|
|
|
|
void FoxLogWindow::rate (int n)
|
|
{
|
|
m_->ui_.rate_label->setNum (n);
|
|
}
|
|
|
|
void FoxLogWindow::log_model_changed (int row)
|
|
{
|
|
if (row >= 0)
|
|
{
|
|
m_->log_->model ()->selectRow (row);
|
|
}
|
|
else
|
|
{
|
|
m_->log_->model ()->select ();
|
|
}
|
|
}
|