Updating radar site display fields to be more human-friendly

- Latitude/longitude in degrees N/S/E/W
- Radar types with hyphens
- Sort by raw decimal values
This commit is contained in:
Dan Paulat 2022-10-07 22:29:30 -05:00
parent 1bc6e714f5
commit 6e7a13494a
11 changed files with 186 additions and 5 deletions

View file

@ -0,0 +1,19 @@
#pragma once
#include <Qt>
namespace scwx
{
namespace qt
{
namespace common
{
enum ItemDataRole
{
SortRole = Qt::UserRole
};
} // namespace common
} // namespace qt
} // namespace scwx

View file

@ -20,6 +20,9 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
static const std::string defaultRadarSiteFile_ =
":/res/config/radar_sites.json";
static const std::unordered_map<std::string, std::string> typeNameMap_ {
{"wsr88d", "WSR-88D"}, {"tdwr", "TDWR"}, {"?", "?"}};
static std::unordered_map<std::string, std::shared_ptr<RadarSite>>
radarSiteMap_;
static std::unordered_map<std::string, std::string> siteIdMap_;
@ -63,6 +66,19 @@ std::string RadarSite::type() const
return p->type_;
}
std::string RadarSite::type_name() const
{
auto it = typeNameMap_.find(p->type_);
if (it != typeNameMap_.cend())
{
return it->second;
}
else
{
return typeNameMap_.at("?");
}
}
std::string RadarSite::id() const
{
return p->id_;

View file

@ -26,6 +26,7 @@ public:
RadarSite& operator=(RadarSite&&) noexcept;
std::string type() const;
std::string type_name() const;
std::string id() const;
double latitude() const;
double longitude() const;

View file

@ -1,5 +1,7 @@
#include <scwx/qt/model/radar_site_model.hpp>
#include <scwx/qt/common/types.hpp>
#include <scwx/qt/config/radar_site.hpp>
#include <scwx/common/geographic.hpp>
#include <scwx/util/logger.hpp>
namespace scwx
@ -42,7 +44,8 @@ int RadarSiteModel::columnCount(const QModelIndex& parent) const
QVariant RadarSiteModel::data(const QModelIndex& index, int role) const
{
if (index.isValid() && index.row() >= 0 &&
index.row() < p->radarSites_.size() && role == Qt::DisplayRole)
index.row() < p->radarSites_.size() &&
(role == Qt::DisplayRole || role == common::SortRole))
{
const auto& site = p->radarSites_.at(index.row());
@ -57,11 +60,27 @@ QVariant RadarSiteModel::data(const QModelIndex& index, int role) const
case 3:
return QString::fromStdString(site->country());
case 4:
return QString("%1").arg(site->latitude());
if (role == Qt::DisplayRole)
{
return QString::fromStdString(
scwx::common::GetLatitudeString(site->latitude()));
}
else
{
return site->latitude();
}
case 5:
return QString("%1").arg(site->longitude());
if (role == Qt::DisplayRole)
{
return QString::fromStdString(
scwx::common::GetLongitudeString(site->longitude()));
}
else
{
return site->longitude();
}
case 6:
return QString::fromStdString(site->type());
return QString::fromStdString(site->type_name());
default:
break;
}

View file

@ -1,6 +1,7 @@
#include "radar_site_dialog.hpp"
#include "./ui_radar_site_dialog.h"
#include <scwx/qt/common/types.hpp>
#include <scwx/qt/model/radar_site_model.hpp>
#include <scwx/util/logger.hpp>
@ -25,6 +26,7 @@ public:
proxyModel_ {new QSortFilterProxyModel(self_)}
{
proxyModel_->setSourceModel(radarSiteModel_);
proxyModel_->setSortRole(common::SortRole);
proxyModel_->setFilterCaseSensitivity(Qt::CaseInsensitive);
proxyModel_->setFilterKeyColumn(-1);
}