60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
#include "ElaIntValidator.h"
|
|
|
|
ElaIntValidator::ElaIntValidator(QObject *parent) : QIntValidator{parent} { _pIsHexMode = false; }
|
|
|
|
ElaIntValidator::ElaIntValidator(int bottom, int top, QObject *parent) : QIntValidator{bottom, top, parent} { _pIsHexMode = false; }
|
|
|
|
ElaIntValidator::~ElaIntValidator() {}
|
|
|
|
QValidator::State ElaIntValidator::validate(QString &input, int &pos) const {
|
|
QString inputCopy = input;
|
|
if (_pIsHexMode) {
|
|
inputCopy.remove("#");
|
|
if (!inputCopy.isEmpty()) {
|
|
bool isInt = false;
|
|
int value = inputCopy.toInt(&isInt, 16);
|
|
if (!isInt) {
|
|
return QValidator::Invalid;
|
|
}
|
|
if (value < bottom() || value > top()) {
|
|
return QValidator::Invalid;
|
|
}
|
|
int topLength = QString::number(top(), 16).length();
|
|
if (inputCopy.length() > topLength) {
|
|
return QValidator::Invalid;
|
|
}
|
|
}
|
|
inputCopy.prepend("#");
|
|
} else {
|
|
if (input.isEmpty()) {
|
|
return QValidator::Intermediate;
|
|
}
|
|
bool isInt = false;
|
|
int value = inputCopy.toInt(&isInt);
|
|
if (!isInt) {
|
|
return QValidator::Invalid;
|
|
}
|
|
if (value < bottom() || value > top()) {
|
|
return QValidator::Invalid;
|
|
}
|
|
}
|
|
input = inputCopy;
|
|
return QValidator::Acceptable;
|
|
}
|
|
|
|
void ElaIntValidator::fixup(QString &input) const {
|
|
if (_pIsHexMode) {
|
|
QString inputComplete = _completeInput(input, QString::number(top(), 16).length());
|
|
input = QString("#") + inputComplete;
|
|
} else {
|
|
input = QString::number(bottom());
|
|
}
|
|
}
|
|
|
|
QString ElaIntValidator::_completeInput(QString input, int length) const {
|
|
while (input.length() < length) {
|
|
input.prepend("0");
|
|
}
|
|
return input;
|
|
}
|