#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; }