Initial Commit
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user