mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	Working frequencies can be for all regions or for individual IARU regions. This allows each mode band tuple to have one or more working frequencies which can include local ones only offered when the user configures their IARU region. Change working frequency default suggestions to better fit in FT8. General rule is FT8 is at JT65 -2kHz except where that is not possible e.g. where that would fall into a segment not allocated for narrow band data modes. For tight bands like top band sqeeze existing JT65 and JT allocations to allow space for FT8. NOTE: this change changes the WSPR frequency on 80m to allow access to JA stations that currently have no allocation where it was placed. ALSO NOTE: the JT65 and JT9 frequencies for 80m move down 6 kHz, again to accommodate region 3 users. Other appliactions not within our control should be asked to move in step when 1.8.0 is released. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7810 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			159 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef FREQUENCY_LIST_HPP__
 | |
| #define FREQUENCY_LIST_HPP__
 | |
| 
 | |
| #include "pimpl_h.hpp"
 | |
| 
 | |
| #include <QList>
 | |
| #include <QSortFilterProxyModel>
 | |
| 
 | |
| #include "Radio.hpp"
 | |
| #include "IARURegions.hpp"
 | |
| #include "Modes.hpp"
 | |
| 
 | |
| class Bands;
 | |
| 
 | |
| //
 | |
| // Class FrequencyList
 | |
| //
 | |
| //  Encapsulates a  collection of  frequencies with  associated modes.
 | |
| //  The implementation is a table  containing the list of IARU region,
 | |
| //  Frequency and  mode tuples which  are editable. A third  column is
 | |
| //  modeled in the  model which is an  immutable double representation
 | |
| //  of the corresponding Frequency item scaled to mega-Hertz.
 | |
| //
 | |
| //  The  list  is ordered.   A  filter  on  IARU  region and  mode  is
 | |
| //  available  and is  set by  the filter(Region,  Mode) method.   The
 | |
| //  Region value IARURegions::ALL and the Mode value Modes::ALL may be
 | |
| //  optionally given which passes all rows in the filtered column.
 | |
| //
 | |
| // Responsibilities
 | |
| //
 | |
| //  Stores internally a list of  unique region, frequency mode tuples.
 | |
| //  Provides methods to  add and delete list  elements. Provides range
 | |
| //  iterators for a filtered view of the underlying table.
 | |
| //
 | |
| // Collaborations
 | |
| //
 | |
| //  Implements the QSortFilterProxyModel interface  for a list of spot
 | |
| //  frequencies.
 | |
| //
 | |
| class FrequencyList final
 | |
|   : public QSortFilterProxyModel
 | |
| {
 | |
|   Q_OBJECT;
 | |
| 
 | |
| public:
 | |
|   using Region = IARURegions::Region;
 | |
|   using Frequency = Radio::Frequency;
 | |
|   using Mode = Modes::Mode;
 | |
| 
 | |
|   struct Item
 | |
|   {
 | |
|     Frequency frequency_;
 | |
|     Mode mode_;
 | |
|     Region region_;
 | |
|   };
 | |
|   using FrequencyItems = QList<Item>;
 | |
|   using BandSet = QSet<QString>;
 | |
| 
 | |
|   enum Column {region_column, mode_column, frequency_column, frequency_mhz_column, SENTINAL};
 | |
| 
 | |
|   // an iterator that meets the requirements of the C++ for range statement
 | |
|   class const_iterator
 | |
|   {
 | |
|   public:
 | |
|     const_iterator (FrequencyList const * parent, int row)
 | |
|       : parent_ {parent}
 | |
|       , row_ {row}
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     Item const& operator * () const;
 | |
|     Item const * operator -> () const;
 | |
|     bool operator != (const_iterator const&) const;
 | |
|     bool operator == (const_iterator const&) const;
 | |
|     const_iterator& operator ++ ();
 | |
| 
 | |
|   private:
 | |
|     FrequencyList const * parent_;
 | |
|     int row_;
 | |
|   };
 | |
| 
 | |
|   explicit FrequencyList (Bands const *, QObject * parent = nullptr);
 | |
|   ~FrequencyList ();
 | |
| 
 | |
|   // Load and store underlying items
 | |
|   FrequencyItems frequency_list (FrequencyItems);
 | |
|   FrequencyItems const& frequency_list () const;
 | |
|   FrequencyItems frequency_list (QModelIndexList const&) const;
 | |
|   void frequency_list_merge (FrequencyItems const&);
 | |
| 
 | |
|   // Iterators for the sorted and filtered items
 | |
|   //
 | |
|   // Note that these iterators are on the final sorted and filtered
 | |
|   // rows, if you need to access the underlying unfiltered and
 | |
|   // unsorted frequencies then use the frequency_list() member to
 | |
|   // access the underlying list of rows.
 | |
|   const_iterator begin () const;
 | |
|   const_iterator end () const;
 | |
| 
 | |
|   // Find a row with a given frequency
 | |
|   const_iterator find (Frequency) const;
 | |
| 
 | |
|   // Bands of the frequencies
 | |
|   BandSet all_bands (Region = IARURegions::ALL, Mode = Modes::ALL) const;
 | |
|   BandSet filtered_bands () const;
 | |
| 
 | |
|   // Find the row of the nearest best working frequency given a
 | |
|   // frequency. Returns -1 if no suitable working frequency is found
 | |
|   // in the list.
 | |
|   int best_working_frequency (Frequency) const;
 | |
| 
 | |
|   // Find the row  of the nearest best working frequency  given a band
 | |
|   // name. Returns -1 if no suitable working frequency is found in the
 | |
|   // list.
 | |
|   int best_working_frequency (QString const& band) const;
 | |
| 
 | |
|   // Set filter
 | |
|   Q_SLOT void filter (Region, Mode);
 | |
| 
 | |
|   // Reset
 | |
|   Q_SLOT void reset_to_defaults ();
 | |
| 
 | |
|   // Model API
 | |
|   QModelIndex add (Item);
 | |
|   bool remove (Item);
 | |
|   bool removeDisjointRows (QModelIndexList);
 | |
| 
 | |
|   // Proxy API
 | |
|   bool filterAcceptsRow (int source_row, QModelIndex const& parent) const override;
 | |
| 
 | |
|   // Custom roles.
 | |
|   static int constexpr SortRole = Qt::UserRole;
 | |
| 
 | |
| private:
 | |
|   class impl;
 | |
|   pimpl<impl> m_;
 | |
| };
 | |
| 
 | |
| inline
 | |
| bool operator == (FrequencyList::Item const& lhs, FrequencyList::Item const& rhs)
 | |
| {
 | |
|   return
 | |
|     lhs.frequency_ == rhs.frequency_
 | |
|     && lhs.region_ == rhs.region_
 | |
|     && lhs.mode_ == rhs.mode_;
 | |
| }
 | |
| 
 | |
| QDataStream& operator << (QDataStream&, FrequencyList::Item const&);
 | |
| QDataStream& operator >> (QDataStream&, FrequencyList::Item&);
 | |
| 
 | |
| #if !defined (QT_NO_DEBUG_STREAM)
 | |
| QDebug operator << (QDebug, FrequencyList::Item const&);
 | |
| #endif
 | |
| 
 | |
| Q_DECLARE_METATYPE (FrequencyList::Item);
 | |
| Q_DECLARE_METATYPE (FrequencyList::FrequencyItems);
 | |
| 
 | |
| #endif
 |