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.
		
			
				
	
	
		
			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
 |