mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	This change incorporates a reorganization of the GUI code with widgets, validators, models, and item delegates being moved to sub-directories. Relax the requirements of the ForeignKeyDelegate and related CandidateKeyFilter classes to allow them to work with constant model pointers for both referenced and referencing models.
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "models/IARURegions.hpp"
 | 
						|
 | 
						|
#include <algorithm>
 | 
						|
 | 
						|
#include <QString>
 | 
						|
#include <QVariant>
 | 
						|
#include <QModelIndex>
 | 
						|
#include <QMetaType>
 | 
						|
 | 
						|
#include "moc_IARURegions.cpp"
 | 
						|
 | 
						|
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]);
 | 
						|
}
 | 
						|
 | 
						|
IARURegions::IARURegions (QObject * parent)
 | 
						|
  : QAbstractListModel {parent}
 | 
						|
{
 | 
						|
  static_assert (region_names_size == SENTINAL,
 | 
						|
                 "region_names array must match Region enumeration");
 | 
						|
}
 | 
						|
 | 
						|
char const * IARURegions::name (Region r)
 | 
						|
{
 | 
						|
  return region_names[static_cast<int> (r)];
 | 
						|
}
 | 
						|
 | 
						|
auto IARURegions::value (QString const& s) -> Region
 | 
						|
{
 | 
						|
  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;
 | 
						|
}
 | 
						|
 | 
						|
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);
 |