2018-11-07 12:49:45 -05:00
|
|
|
#include "models/IARURegions.hpp"
|
2017-07-07 19:11:41 -04:00
|
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
|
|
#include <QString>
|
|
|
|
#include <QVariant>
|
|
|
|
#include <QModelIndex>
|
2017-07-13 14:02:07 -04:00
|
|
|
#include <QMetaType>
|
2017-07-07 19:11:41 -04:00
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
// human readable strings for each Region enumeration value
|
|
|
|
char const * const region_names[] =
|
|
|
|
{
|
|
|
|
"All",
|
|
|
|
"Region 1",
|
|
|
|
"Region 2",
|
|
|
|
"Region 3",
|
|
|
|
};
|
|
|
|
std::size_t constexpr region_names_size = sizeof (region_names) / sizeof (region_names[0]);
|
|
|
|
}
|
|
|
|
|
2019-06-06 07:56:25 -04:00
|
|
|
#include "moc_IARURegions.cpp"
|
|
|
|
|
2017-07-07 19:11:41 -04:00
|
|
|
IARURegions::IARURegions (QObject * parent)
|
|
|
|
: QAbstractListModel {parent}
|
|
|
|
{
|
2017-07-10 21:59:19 -04:00
|
|
|
static_assert (region_names_size == SENTINAL,
|
2017-07-07 19:11:41 -04:00
|
|
|
"region_names array must match Region enumeration");
|
|
|
|
}
|
|
|
|
|
|
|
|
char const * IARURegions::name (Region r)
|
|
|
|
{
|
|
|
|
return region_names[static_cast<int> (r)];
|
|
|
|
}
|
|
|
|
|
2017-10-13 18:34:10 -04:00
|
|
|
auto IARURegions::value (QString const& s) -> Region
|
2017-07-07 19:11:41 -04:00
|
|
|
{
|
2017-10-13 18:34:10 -04:00
|
|
|
auto end = region_names + region_names_size;
|
|
|
|
auto p = std::find_if (region_names, end
|
|
|
|
, [&s] (char const * const name) {
|
|
|
|
return name == s;
|
|
|
|
});
|
|
|
|
return p != end ? static_cast<Region> (p - region_names) : ALL;
|
2017-07-07 19:11:41 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
QVariant IARURegions::data (QModelIndex const& index, int role) const
|
|
|
|
{
|
|
|
|
QVariant item;
|
|
|
|
|
|
|
|
if (index.isValid ())
|
|
|
|
{
|
|
|
|
auto const& row = index.row ();
|
|
|
|
switch (role)
|
|
|
|
{
|
|
|
|
case Qt::ToolTipRole:
|
|
|
|
case Qt::AccessibleDescriptionRole:
|
|
|
|
item = tr ("IARU Region");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::EditRole:
|
|
|
|
item = static_cast<Region> (row);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::DisplayRole:
|
|
|
|
case Qt::AccessibleTextRole:
|
|
|
|
item = region_names[row];
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Qt::TextAlignmentRole:
|
|
|
|
item = Qt::AlignHCenter + Qt::AlignVCenter;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
|
|
|
|
QVariant IARURegions::headerData (int section, Qt::Orientation orientation, int role) const
|
|
|
|
{
|
|
|
|
QVariant result;
|
|
|
|
|
|
|
|
if (Qt::DisplayRole == role && Qt::Horizontal == orientation)
|
|
|
|
{
|
|
|
|
result = tr ("IARU Region");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result = QAbstractListModel::headerData (section, orientation, role);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
ENUM_QDATASTREAM_OPS_IMPL (IARURegions, Region);
|
|
|
|
ENUM_CONVERSION_OPS_IMPL (IARURegions, Region);
|