| 
									
										
										
										
											2018-11-07 17:49:45 +00:00
										 |  |  | #include "models/IARURegions.hpp"
 | 
					
						
							| 
									
										
										
										
											2017-07-07 23:11:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <algorithm>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QString>
 | 
					
						
							|  |  |  | #include <QVariant>
 | 
					
						
							|  |  |  | #include <QModelIndex>
 | 
					
						
							| 
									
										
										
										
											2017-07-13 18:02:07 +00:00
										 |  |  | #include <QMetaType>
 | 
					
						
							| 
									
										
										
										
											2017-07-07 23:11:41 +00: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 12:56:25 +01:00
										 |  |  | #include "moc_IARURegions.cpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-07 23:11:41 +00:00
										 |  |  | IARURegions::IARURegions (QObject * parent) | 
					
						
							|  |  |  |   : QAbstractListModel {parent} | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-07-11 01:59:19 +00:00
										 |  |  |   static_assert (region_names_size == SENTINAL, | 
					
						
							| 
									
										
										
										
											2017-07-07 23:11:41 +00:00
										 |  |  |                  "region_names array must match Region enumeration"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | char const * IARURegions::name (Region r) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   return region_names[static_cast<int> (r)]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-13 22:34:10 +00:00
										 |  |  | auto IARURegions::value (QString const& s) -> Region | 
					
						
							| 
									
										
										
										
											2017-07-07 23:11:41 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-13 22:34:10 +00: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 23:11:41 +00: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); |