mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:10:04 +00:00
Alert model cleanup, and size hints for columns
This commit is contained in:
parent
d19656f0f1
commit
dabcf1114e
3 changed files with 77 additions and 30 deletions
|
|
@ -10,6 +10,8 @@
|
|||
#include <format>
|
||||
|
||||
#include <GeographicLib/Geodesic.hpp>
|
||||
#include <QApplication>
|
||||
#include <QFontMetrics>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
|
|
@ -24,7 +26,7 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
|
|||
static constexpr int kFirstColumn = static_cast<int>(AlertModel::Column::Etn);
|
||||
static constexpr int kLastColumn =
|
||||
static_cast<int>(AlertModel::Column::Distance);
|
||||
static const int kNumColumns = 9;
|
||||
static constexpr int kNumColumns = kLastColumn - kFirstColumn + 1;
|
||||
|
||||
class AlertModelImpl
|
||||
{
|
||||
|
|
@ -96,15 +98,17 @@ int AlertModel::columnCount(const QModelIndex& parent) const
|
|||
|
||||
QVariant AlertModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
if (index.isValid() && index.row() >= 0 &&
|
||||
index.row() < p->textEventKeys_.size() &&
|
||||
(role == Qt::DisplayRole || role == types::SortRole ||
|
||||
(role == types::TimePointRole &&
|
||||
(index.column() == static_cast<int>(Column::StartTime) ||
|
||||
index.column() == static_cast<int>(Column::EndTime)))))
|
||||
if (!index.isValid() || index.row() < 0 ||
|
||||
index.row() >= p->textEventKeys_.size())
|
||||
{
|
||||
const auto& textEventKey = p->textEventKeys_.at(index.row());
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
const auto& textEventKey = p->textEventKeys_.at(index.row());
|
||||
|
||||
if (role == Qt::ItemDataRole::DisplayRole ||
|
||||
role == types::ItemDataRole::SortRole)
|
||||
{
|
||||
switch (index.column())
|
||||
{
|
||||
case static_cast<int>(Column::Etn):
|
||||
|
|
@ -129,28 +133,12 @@ QVariant AlertModel::data(const QModelIndex& index, int role) const
|
|||
AlertModelImpl::GetCounties(textEventKey));
|
||||
|
||||
case static_cast<int>(Column::StartTime):
|
||||
if (role == types::TimePointRole)
|
||||
{
|
||||
return QVariant::fromValue(
|
||||
AlertModelImpl::GetStartTime(textEventKey));
|
||||
}
|
||||
else
|
||||
{
|
||||
return QString::fromStdString(
|
||||
AlertModelImpl::GetStartTimeString(textEventKey));
|
||||
}
|
||||
return QString::fromStdString(
|
||||
AlertModelImpl::GetStartTimeString(textEventKey));
|
||||
|
||||
case static_cast<int>(Column::EndTime):
|
||||
if (role == types::TimePointRole)
|
||||
{
|
||||
return QVariant::fromValue(
|
||||
AlertModelImpl::GetEndTime(textEventKey));
|
||||
}
|
||||
else
|
||||
{
|
||||
return QString::fromStdString(
|
||||
AlertModelImpl::GetEndTimeString(textEventKey));
|
||||
}
|
||||
return QString::fromStdString(
|
||||
AlertModelImpl::GetEndTimeString(textEventKey));
|
||||
|
||||
case static_cast<int>(Column::Distance):
|
||||
if (role == Qt::DisplayRole)
|
||||
|
|
@ -177,6 +165,20 @@ QVariant AlertModel::data(const QModelIndex& index, int role) const
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if (role == types::ItemDataRole::TimePointRole)
|
||||
{
|
||||
switch (index.column())
|
||||
{
|
||||
case static_cast<int>(Column::StartTime):
|
||||
return QVariant::fromValue(AlertModelImpl::GetStartTime(textEventKey));
|
||||
|
||||
case static_cast<int>(Column::EndTime):
|
||||
return QVariant::fromValue(AlertModelImpl::GetEndTime(textEventKey));
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
|
@ -222,6 +224,51 @@ AlertModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (role == Qt::ItemDataRole::SizeHintRole)
|
||||
{
|
||||
static const QFontMetrics fontMetrics(QApplication::font());
|
||||
|
||||
QSize contentsSize {};
|
||||
|
||||
switch (section)
|
||||
{
|
||||
case static_cast<int>(Column::Etn):
|
||||
contentsSize = fontMetrics.size(0, "0000"); // 24x16
|
||||
break;
|
||||
|
||||
case static_cast<int>(Column::Phenomenon):
|
||||
contentsSize = fontMetrics.size(0, QString(10, 'W'));
|
||||
break;
|
||||
|
||||
case static_cast<int>(Column::State):
|
||||
contentsSize = fontMetrics.size(0, "WW, WW");
|
||||
break;
|
||||
|
||||
case static_cast<int>(Column::Counties):
|
||||
contentsSize = fontMetrics.size(0, QString(15, 'W'));
|
||||
break;
|
||||
|
||||
case static_cast<int>(Column::StartTime):
|
||||
case static_cast<int>(Column::EndTime):
|
||||
contentsSize = fontMetrics.size(0, "0000-00-00 00:00:00");
|
||||
break;
|
||||
|
||||
case static_cast<int>(Column::Distance):
|
||||
contentsSize = fontMetrics.size(0, "00000 km");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (contentsSize != QSize {})
|
||||
{
|
||||
// Add padding
|
||||
// TODO: Ideally, derived using the current style, but how?
|
||||
contentsSize += QSize(12, 8);
|
||||
return QVariant(contentsSize);
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include <scwx/qt/types/text_event_key.hpp>
|
||||
#include <scwx/common/geographic.hpp>
|
||||
#include <scwx/util/iterator.hpp>
|
||||
|
||||
#include <memory>
|
||||
|
||||
|
|
@ -32,7 +31,6 @@ public:
|
|||
EndTime = 7,
|
||||
Distance = 8
|
||||
};
|
||||
typedef util::Iterator<Column, Column::Etn, Column::Distance> ColumnIterator;
|
||||
|
||||
explicit AlertModel(QObject* parent = nullptr);
|
||||
~AlertModel();
|
||||
|
|
|
|||
|
|
@ -67,6 +67,8 @@ AlertDockWidget::AlertDockWidget(QWidget* parent) :
|
|||
ui->alertView->header()->setSortIndicator(
|
||||
static_cast<int>(model::AlertModel::Column::Distance),
|
||||
Qt::AscendingOrder);
|
||||
ui->alertView->header()->resizeSections(
|
||||
QHeaderView::ResizeMode::ResizeToContents);
|
||||
|
||||
ui->alertSettings->addAction(ui->actionActiveAlerts);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue