33#include <QRegularExpression>
38#include "frequency.hh"
78 const QStringList &
stack()
const;
112 void push(
const QString &element);
145 typedef std::initializer_list< std::pair<QString, RadioLimitElement *> >
PropList;
173 QObject *parent=
nullptr);
207 QObject *parent=
nullptr);
234 QObject *parent=
nullptr);
284 QObject *parent=
nullptr);
306 RadioLimitUInt(qint64 minValue=-1, qint64 maxValue=-1, qint64 defValue=-1,
308 QObject *parent=
nullptr);
333 QObject *parent=
nullptr);
347 QObject *parent=
nullptr);
365 typedef std::initializer_list<std::pair<Frequency, Frequency>>
RangeList;
370 QObject *parent=
nullptr);
374 QObject *parent=
nullptr);
394 QObject *parent=
nullptr);
398 QObject *parent=
nullptr);
413 QObject *parent=
nullptr);
417 QObject *parent=
nullptr);
437 QObject *parent=
nullptr);
538 typedef std::initializer_list<std::pair<const QMetaObject&, RadioLimitObject *> >
TypeList;
565 QHash<QString, RadioLimitObject *>
_types;
584 RadioLimitObjRef(
const QMetaObject &type,
bool allowNull=
true, QObject *parent=
nullptr);
596 bool validType(
const QMetaObject *type)
const;
619 QObject *parent=
nullptr);
656 RadioLimitList(
const std::initializer_list<ElementLimits> &elements, QObject *parent=
nullptr);
686 RadioLimitRefList(
int minSize,
int maxSize,
const QMetaObject &type, QObject *parent=
nullptr);
692 bool validType(
const QMetaObject *type)
const;
760 explicit RadioLimits(
bool betaWarning, QObject *parent =
nullptr);
762 RadioLimits(
const std::initializer_list<std::pair<QString,RadioLimitElement *> > &list, QObject *parent=
nullptr);
Base class for all configuration objects (channels, zones, contacts, etc).
Definition configobject.hh:35
Base class of all labeled and named objects.
Definition configobject.hh:192
The config class, representing the codeplug configuration.
Definition config.hh:70
RadioLimitBool(QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:301
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:308
Collects the issues found during verification.
Definition radiolimits.hh:97
RadioLimitIssue::Severity _maxSeverity
Holds the highest severity of all messages.
Definition radiolimits.hh:132
bool ignoreFrequencyLimits() const
If true, frequency limit voilations are warnings.
Definition radiolimits.cc:121
void pop()
Pops the top-most property name/element index from the stack.
Definition radiolimits.cc:116
const RadioLimitIssue & message(int n) const
Returns the n-th issue.
Definition radiolimits.cc:106
RadioLimitContext(bool ignoreFrequencyLimits=false)
Empty constructor.
Definition radiolimits.cc:86
bool _ignoreFrequencyLimits
If true, any frequency range voilation is a warning.
Definition radiolimits.hh:130
void push(const QString &element)
Push a property name/element index onto the stack.
Definition radiolimits.cc:111
QStringList _stack
The current item stack.
Definition radiolimits.hh:126
QList< RadioLimitIssue > _messages
The list of issues found.
Definition radiolimits.hh:128
RadioLimitIssue::Severity maxSeverity() const
Returns the highest severity of the messages.
Definition radiolimits.cc:130
RadioLimitIssue & newMessage(RadioLimitIssue::Severity severity=RadioLimitIssue::Hint)
Constructs a new message and puts it into the list of issues.
Definition radiolimits.cc:93
int count() const
Returns the number of issues.
Definition radiolimits.cc:101
void enableIgnoreFrequencyLimits(bool enable=true)
Enables/disables that frequency range voilations are handled as warnings.
Definition radiolimits.cc:125
RadioLimitDMRId(RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Hint, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:390
virtual ~RadioLimitElement()
Destructor.
Definition radiolimits.cc:144
std::initializer_list< std::pair< QString, RadioLimitElement * > > PropList
Initializer lists of ConfigItem properties.
Definition radiolimits.hh:145
RadioLimitElement(QObject *parent=nullptr)
Hidden constructor.
Definition radiolimits.cc:138
virtual bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const =0
Verifies the given property of the specified item.
QSet< unsigned > _values
Holds the set of valid values.
Definition radiolimits.hh:353
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:407
RadioLimitEnum(const std::initializer_list< unsigned > &values, RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Hint, QObject *parent=nullptr)
Constructor from initializer list of possible enum values.
Definition radiolimits.cc:400
RadioLimitFrequencies(RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Warning, QObject *parent=nullptr)
Empty constructor.
Definition radiolimits.cc:437
std::initializer_list< std::pair< Frequency, Frequency > > RangeList
Typedef for the initializer list.
Definition radiolimits.hh:365
QList< FrequencyRange > _frequencyRanges
Holds the frequency ranges for the device.
Definition radiolimits.hh:380
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:452
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:948
qint64 _minSize
Holds the minimum size of the list.
Definition radiolimits.hh:722
RadioLimitGroupCallRefList(int minSize, int maxSize, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:941
qint64 _maxSize
Holds the maximum size of the list.
Definition radiolimits.hh:724
RadioLimitIssue::Severity _severity
The severity of the issue generated.
Definition radiolimits.hh:290
RadioLimitIgnoredBool(RadioLimitIssue::Severity notify=RadioLimitIssue::Hint, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:324
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:331
RadioLimitIssue::Severity _notification
Holds the level of the notification.
Definition radiolimits.hh:521
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:159
RadioLimitIgnored(RadioLimitIssue::Severity notify=RadioLimitIssue::Hint, QObject *parent=nullptr)
Constructor for a ignored setting verification element.
Definition radiolimits.cc:152
bool verifyObject(const ConfigObject *item, RadioLimitContext &context) const
Verifies the properties of the given object.
Definition radiolimits.cc:168
RadioLimitInterval(RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Warning, QObject *parent=nullptr)
Empty constructor.
Definition radiolimits.cc:512
Range< Interval > _durations
Holds the duration ranges for the interval.
Definition radiolimits.hh:423
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:526
Represents a single issue found during verification.
Definition radiolimits.hh:51
Severity
Defines the possible severity levels.
Definition radiolimits.hh:54
@ Critical
Assembly of the codeplug will fail or a non-functional codeplug might be created.
Definition radiolimits.hh:58
@ Hint
Just a hint, a working codeplug will be assembled.
Definition radiolimits.hh:56
@ Silent
The user will not be notified.
Definition radiolimits.hh:55
@ Warning
The codeplug gets changed but a working codeplug might be assembled.
Definition radiolimits.hh:57
Severity severity() const
Returns the severity of the issue.
Definition radiolimits.cc:54
QStringList _stack
Holds the item-stack (where the issue occurred).
Definition radiolimits.hh:86
RadioLimitIssue(Severity severity, const QStringList &stack)
Constructs an empty message for the specified severity at the specified point of the verification.
Definition radiolimits.cc:26
QString format() const
Formats the message.
Definition radiolimits.cc:69
const QString & message() const
Returns the text message.
Definition radiolimits.cc:59
const QStringList & stack() const
Returns the traceback of the issue.
Definition radiolimits.cc:64
RadioLimitIssue & operator=(const RadioLimitIssue &other)
Copy assignment.
Definition radiolimits.cc:39
QString _message
Holds the text message.
Definition radiolimits.hh:88
Severity _severity
Holds the severity of the issue.
Definition radiolimits.hh:84
virtual bool verifyItem(const ConfigItem *item, RadioLimitContext &context) const
Verifies the properties of the given item.
Definition radiolimits.cc:631
bool add(const QString &prop, RadioLimitElement *structure)
Adds a property declaration.
Definition radiolimits.cc:599
QHash< QString, RadioLimitElement * > _elements
Holds the property <-> limits map.
Definition radiolimits.hh:480
RadioLimitItem(QObject *parent=nullptr)
Empty constructor.
Definition radiolimits.cc:584
virtual bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:608
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:555
RadioLimitLevel(const Range< unsigned int > &range={0, 10}, bool allowInvalid=true, RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Warning, QObject *parent=nullptr)
Empty constructor.
Definition radiolimits.cc:547
QString findClassName(const QMetaObject &type) const
Searches for the specified type or one of its super-clsases in the set of allowed types.
Definition radiolimits.cc:869
RadioLimitList(const QMetaObject &type, int minSize, int maxSize, RadioLimitObject *element, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:783
QHash< QString, qint64 > _minCount
Maps typename to minimum count.
Definition radiolimits.hh:668
QHash< QString, RadioLimitObject * > _elements
Maps typename to element definition.
Definition radiolimits.hh:666
QHash< QString, qint64 > _maxCount
Maps typename to maximum count.
Definition radiolimits.hh:670
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:804
RadioLimitObjRefIgnored(ConfigObject *defObj=nullptr, RadioLimitIssue::Severity notify=RadioLimitIssue::Hint, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:758
ConfigObject * _default
A weak reference to a default value, that gets silently ignored.
Definition radiolimits.hh:627
RadioLimitIssue::Severity _severity
The severity of the issue.
Definition radiolimits.hh:625
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:767
std::initializer_list< QMetaObject > MetaObjectList
Initializer lists of allowed classes.
Definition radiolimits.hh:577
RadioLimitObjRef(const QMetaObject &type, bool allowNull=true, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:701
bool _allowNull
If true, a null reference is allowed.
Definition radiolimits.hh:600
bool validType(const QMetaObject *type) const
Checks if the given type is one of the valid ones in _types.
Definition radiolimits.cc:746
QSet< QString > _types
Possible classes of instances, the reference may point to.
Definition radiolimits.hh:602
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:715
Represents the limits for all properties of a ConfigObject instance.
Definition radiolimits.hh:487
virtual bool verifyObject(const ConfigObject *item, RadioLimitContext &context) const
Verifies the properties of the given object.
Definition radiolimits.cc:666
RadioLimitObject(QObject *parent=nullptr)
Empty constructor.
Definition radiolimits.cc:653
RadioLimitObjects(const TypeList &list, QObject *parent=nullptr)
Constructor from initializer list.
Definition radiolimits.cc:677
bool verifyItem(const ConfigItem *item, RadioLimitContext &context) const
Verifies the properties of the given item.
Definition radiolimits.cc:687
std::initializer_list< std::pair< const QMetaObject &, RadioLimitObject * > > TypeList
Initializer lists of type properties.
Definition radiolimits.hh:538
QHash< QString, RadioLimitObject * > _types
Maps class-names to object limits.
Definition radiolimits.hh:565
qint64 _maxSize
Holds the maximum size of the list.
Definition radiolimits.hh:698
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:888
QSet< QString > _types
Possible classes of instances, the references may point to.
Definition radiolimits.hh:700
RadioLimitRefList(int minSize, int maxSize, const QMetaObject &type, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:881
qint64 _minSize
Holds the minimum size of the list.
Definition radiolimits.hh:696
bool validType(const QMetaObject *type) const
Checks if the given type is one of the valid ones in _types.
Definition radiolimits.cc:929
RadioLimitSingleZone(qint64 maxSize, const PropList &list, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:997
bool verifyItem(const ConfigItem *item, RadioLimitContext &context) const
Verifies the properties of the given item.
Definition radiolimits.cc:1006
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:278
RadioLimitStringIgnored(RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Hint, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:271
QRegularExpression _pattern
Holds the regular expression pattern.
Definition radiolimits.hh:240
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:246
RadioLimitStringRegEx(const QString &pattern, RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Warning, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:239
int _minLen
Holds the minimum length of the string.
Definition radiolimits.hh:213
RadioLimitString(int minLen, int maxLen, Encoding enc, RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Hint, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:191
int _maxLen
Holds the maximum length of the string.
Definition radiolimits.hh:215
Encoding
Possible encoding of strings.
Definition radiolimits.hh:193
@ ASCII
Just ASCII is allowed.
Definition radiolimits.hh:195
@ Unicode
Any Unicode character is allowed.
Definition radiolimits.hh:196
@ DTMF
Just DTMF symbols are allowed (0-9, A-D, *, #).
Definition radiolimits.hh:194
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:198
Encoding _encoding
Holds the allowed character encoding.
Definition radiolimits.hh:217
RadioLimitTransmitFrequencies(RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Warning, QObject *parent=nullptr)
Empty constructor.
Definition radiolimits.cc:481
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:494
qint64 _maxValue
Holds the maximum value.
Definition radiolimits.hh:316
qint64 _defValue
Holds the default value.
Definition radiolimits.hh:318
bool verify(const ConfigItem *item, const QMetaProperty &prop, RadioLimitContext &context) const
Verifies the given property of the specified item.
Definition radiolimits.cc:361
RadioLimitUInt(qint64 minValue=-1, qint64 maxValue=-1, qint64 defValue=-1, RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Hint, QObject *parent=nullptr)
Constructor.
Definition radiolimits.cc:353
qint64 _minValue
Holds the minimum value.
Definition radiolimits.hh:314
RadioLimitIssue::Severity _severity
The severity of the issue, if the test fails.
Definition radiolimits.hh:177
RadioLimitValue(RadioLimitIssue::Severity severity=RadioLimitIssue::Severity::Hint, QObject *parent=nullptr)
Hidden constructor.
Definition radiolimits.cc:181
Represents the limits or the entire codeplug.
Definition radiolimits.hh:755
bool _satelliteConfigImplemented
If true, satellite config is implemented.
Definition radiolimits.hh:794
unsigned numCallSignDBEntries() const
Returns the maximum number of entries in the call-sign DB.
Definition radiolimits.cc:1052
virtual bool verifyConfig(const Config *config, RadioLimitContext &context) const
Verifies the given configuration.
Definition radiolimits.cc:1074
bool hasSatelliteConfig() const
Returns true if the radio supports satellite config.
Definition radiolimits.cc:1058
bool _callSignDBImplemented
If true, the call-sign is implemented.
Definition radiolimits.hh:788
bool _hasSatelliteConfig
If true, the radio supports satellite config.
Definition radiolimits.hh:792
bool _hasCallSignDB
If true, the radio supports a call-sign DB.
Definition radiolimits.hh:786
bool satelliteConfigImplemented() const
Returns true if satellite config is implemented.
Definition radiolimits.cc:1063
bool hasCallSignDB() const
Returns true if the radio supports a call-sign DB.
Definition radiolimits.cc:1042
unsigned _numSatellites
Holds the number of possible satellites.
Definition radiolimits.hh:796
unsigned _numCallSignDBEntries
Holds the number of possible call-sign DB entries.
Definition radiolimits.hh:790
RadioLimits(bool betaWarning, QObject *parent=nullptr)
Empty constructor.
Definition radiolimits.cc:1024
bool callSignDBImplemented() const
Returns true if the call-sign DB is implemented.
Definition radiolimits.cc:1047
bool _betaWarning
If true, a warning is issued that the radio is still under development and not well tested yet.
Definition radiolimits.hh:784
unsigned numSatellites() const
Returns the maximum number of satellites.
Definition radiolimits.cc:1068
Simple range class representing some range in some data type.
Definition ranges.hh:14
Helper struct to pass list entry definitions.
Definition radiolimits.hh:639
int minCount
Minimum count of elements.
Definition radiolimits.hh:641
const QMetaObject & type
The type of the object.
Definition radiolimits.hh:640
int maxCount
Maximum count of elements.
Definition radiolimits.hh:642
RadioLimitObject * structure
The structure of the elements.
Definition radiolimits.hh:643