mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04: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.
		
			
				
	
	
		
			107 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef STATION_LIST_HPP__
 | |
| #define STATION_LIST_HPP__
 | |
| 
 | |
| #include <QSortFilterProxyModel>
 | |
| #include <QString>
 | |
| #include <QList>
 | |
| 
 | |
| #include "pimpl_h.hpp"
 | |
| 
 | |
| #include "Radio.hpp"
 | |
| 
 | |
| class Bands;
 | |
| 
 | |
| //
 | |
| // Class StationList
 | |
| //
 | |
| //  Encapsulates information  about a  collection of  unique operating
 | |
| //  stations per  band. The implementation  is a table model  with the
 | |
| //  first column  being the unique  (within the table rows)  band name
 | |
| //  and, the  second the frequency  offset for transverter  usage and,
 | |
| //  the third the antenna description. All are editable.
 | |
| //
 | |
| // Responsibilities
 | |
| //
 | |
| //  Stores internally an unordered table of bands.
 | |
| //
 | |
| //  If  an ordered  representaion is  required then  wrapping with  an
 | |
| //  appropriate        proxy         model        is        sufficient
 | |
| //  e.g. QSortFilterProxyModel. A custom SortRole role is provided for
 | |
| //  the band  name column which  returns a numeric value  (Bands lower
 | |
| //  frequency limit) which gives a strict frequency ordering by band.
 | |
| //
 | |
| // Collaborations
 | |
| //
 | |
| //  Implements the  QAbstractTableModel interface for a  grid of bands
 | |
| //  with offset frequencies and antenna descriptions.
 | |
| //
 | |
| //  Uses the Bands model to lookup band information.
 | |
| //
 | |
| class StationList final
 | |
|   : public QSortFilterProxyModel
 | |
| {
 | |
| public:
 | |
|   using Frequency = Radio::Frequency;
 | |
|   using FrequencyDelta = Radio::FrequencyDelta;
 | |
| 
 | |
|   //
 | |
|   // Struct Station
 | |
|   //
 | |
|   //  Aggregation of fields that describe a radio station on a band.
 | |
|   //
 | |
|   struct Station
 | |
|   {
 | |
|     QString band_name_;
 | |
|     FrequencyDelta offset_;
 | |
|     QString antenna_description_;
 | |
|   };
 | |
| 
 | |
|   using Stations = QList<Station>;
 | |
| 
 | |
|   enum Column {band_column, offset_column, description_column};
 | |
| 
 | |
|   explicit StationList (Bands const * bands, QObject * parent = nullptr);
 | |
|   explicit StationList (Bands const * bands, Stations, QObject * parent = nullptr);
 | |
|   ~StationList ();
 | |
| 
 | |
|   // Load and query contents.
 | |
|   Stations station_list (Stations);
 | |
|   Stations const& station_list () const;
 | |
| 
 | |
|   //
 | |
|   // Model API
 | |
|   //
 | |
|   QModelIndex add (Station);                 // Add a new Station
 | |
|   bool remove (Station);                     // Remove a Station
 | |
|   bool removeDisjointRows (QModelIndexList); // Remove one or more stations
 | |
|   FrequencyDelta offset (Frequency) const;   // Return the offset to be used for a Frequency
 | |
| 
 | |
|   // Custom sort role.
 | |
|   static int constexpr SortRole = Qt::UserRole;
 | |
| 
 | |
| private:
 | |
|   class impl;
 | |
|   pimpl<impl> m_;
 | |
| };
 | |
| 
 | |
| // Station equivalence
 | |
| inline
 | |
| bool operator == (StationList::Station const& lhs, StationList::Station const& rhs)
 | |
| {
 | |
|   return lhs.band_name_ == rhs.band_name_
 | |
|     && lhs.offset_ == rhs.offset_
 | |
|     && lhs.antenna_description_ == rhs.antenna_description_;
 | |
| }
 | |
| 
 | |
| QDataStream& operator << (QDataStream&, StationList::Station const&);
 | |
| QDataStream& operator >> (QDataStream&, StationList::Station&);
 | |
| 
 | |
| #if !defined (QT_NO_DEBUG_STREAM)
 | |
| QDebug operator << (QDebug debug, StationList::Station const&);
 | |
| #endif
 | |
| 
 | |
| Q_DECLARE_METATYPE (StationList::Station);
 | |
| Q_DECLARE_METATYPE (StationList::Stations);
 | |
| 
 | |
| #endif
 |