WSJT-X/widgets/CabrilloLogWindow.cpp
Bill Somerville b79cf0df99 Improvements to accessibiity
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.
2019-05-03 10:21:50 +01:00

87 lines
2.2 KiB
C++

#include "CabrilloLogWindow.hpp"
#include <QApplication>
#include <QIdentityProxyModel>
#include <QSqlTableModel>
#include "Configuration.hpp"
#include "models/Bands.hpp"
#include "item_delegates/ForeignKeyDelegate.hpp"
#include "item_delegates/CallsignDelegate.hpp"
#include "pimpl_impl.hpp"
#include "ui_CabrilloLogWindow.h"
namespace
{
class FormatProxyModel final
: public QIdentityProxyModel
{
public:
explicit FormatProxyModel (QObject * parent = nullptr)
: QIdentityProxyModel {parent}
{
}
QVariant data (QModelIndex const& index, int role) const override
{
if (Qt::TextAlignmentRole == role && index.isValid ())
{
switch (index.column ())
{
case 1:
case 6:
return Qt::AlignRight + Qt::AlignVCenter;
default:
break;
}
}
return QIdentityProxyModel::data (index, role);
}
};
}
class CabrilloLogWindow::impl final
{
public:
explicit impl (QSqlTableModel * log_model)
: log_model_ {log_model}
{
}
QSqlTableModel * log_model_;
FormatProxyModel format_model_;
Ui::CabrilloLogWindow ui_;
};
CabrilloLogWindow::CabrilloLogWindow (QSettings * settings, Configuration const * configuration
, QSqlTableModel * cabrillo_log_model, QWidget * parent)
: AbstractLogWindow {"Cabrillo Log Window", settings, configuration, parent}
, m_{cabrillo_log_model}
{
setWindowTitle (QApplication::applicationName () + " - Cabrillo Log");
m_->ui_.setupUi (this);
m_->format_model_.setSourceModel (m_->log_model_);
m_->ui_.log_table_view->setModel (&m_->format_model_);
set_log_view (m_->ui_.log_table_view);
m_->ui_.log_table_view->setItemDelegateForColumn (3, new CallsignDelegate {this});
m_->ui_.log_table_view->setItemDelegateForColumn (6, new ForeignKeyDelegate {configuration->bands (), 0, this});
auto h_header = m_->ui_.log_table_view->horizontalHeader ();
h_header->moveSection (6, 1); // band to first column
}
CabrilloLogWindow::~CabrilloLogWindow ()
{
}
void CabrilloLogWindow::log_model_changed (int row)
{
if (row >= 0)
{
m_->log_model_->selectRow (row);
}
else
{
m_->log_model_->select ();
}
}