107 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#include "Modes.hpp"
 | 
						|
 | 
						|
#include <algorithm>
 | 
						|
 | 
						|
#include <QString>
 | 
						|
#include <QVariant>
 | 
						|
#include <QModelIndex>
 | 
						|
 | 
						|
#include "moc_Modes.cpp"
 | 
						|
 | 
						|
namespace
 | 
						|
{
 | 
						|
  // human readable strings for each Mode enumeration value
 | 
						|
  char const * const mode_names[] =
 | 
						|
  {
 | 
						|
    "All",
 | 
						|
    "JT65",
 | 
						|
    "JT9",
 | 
						|
    "JT4",
 | 
						|
    "WSPR",
 | 
						|
    "Echo",
 | 
						|
    "ISCAT",
 | 
						|
    "MSK144",
 | 
						|
    "QRA64",
 | 
						|
    "FreqCal",
 | 
						|
    "FT8"
 | 
						|
  };
 | 
						|
  std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]);
 | 
						|
}
 | 
						|
 | 
						|
Modes::Modes (QObject * parent)
 | 
						|
  : QAbstractListModel {parent}
 | 
						|
{
 | 
						|
  static_assert (mode_names_size == MODES_END_SENTINAL_AND_COUNT,
 | 
						|
                 "mode_names array must match Mode enumeration");
 | 
						|
}
 | 
						|
 | 
						|
char const * Modes::name (Mode m)
 | 
						|
{
 | 
						|
  return mode_names[static_cast<int> (m)];
 | 
						|
}
 | 
						|
 | 
						|
auto Modes::value (QString const& s) -> Mode
 | 
						|
{
 | 
						|
  auto end = mode_names + mode_names_size;
 | 
						|
  auto p = std::find_if (mode_names, end
 | 
						|
                         , [&s] (char const * const name) {
 | 
						|
                           return name == s;
 | 
						|
                         });
 | 
						|
  return p != end ? static_cast<Mode> (p - mode_names) : ALL;
 | 
						|
}
 | 
						|
 | 
						|
QVariant Modes::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 ("Mode");
 | 
						|
          break;
 | 
						|
 | 
						|
        case Qt::EditRole:
 | 
						|
          item = static_cast<Mode> (row);
 | 
						|
          break;
 | 
						|
 | 
						|
        case Qt::DisplayRole:
 | 
						|
        case Qt::AccessibleTextRole:
 | 
						|
          item = mode_names[row];
 | 
						|
          break;
 | 
						|
 | 
						|
        case Qt::TextAlignmentRole:
 | 
						|
          item = Qt::AlignHCenter + Qt::AlignVCenter;
 | 
						|
          break;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
  return item;
 | 
						|
}
 | 
						|
 | 
						|
QVariant Modes::headerData (int section, Qt::Orientation orientation, int role) const
 | 
						|
{
 | 
						|
  QVariant result;
 | 
						|
 | 
						|
  if (Qt::DisplayRole == role && Qt::Horizontal == orientation)
 | 
						|
    {
 | 
						|
      result = tr ("Mode");
 | 
						|
    }
 | 
						|
  else
 | 
						|
    {
 | 
						|
      result = QAbstractListModel::headerData (section, orientation, role);
 | 
						|
    }
 | 
						|
 | 
						|
  return result;
 | 
						|
}
 | 
						|
 | 
						|
#if !defined (QT_NO_DEBUG_STREAM)
 | 
						|
ENUM_QDEBUG_OPS_IMPL (Modes, Mode);
 | 
						|
#endif
 | 
						|
 | 
						|
ENUM_QDATASTREAM_OPS_IMPL (Modes, Mode);
 | 
						|
ENUM_CONVERSION_OPS_IMPL (Modes, Mode);
 |