1
0
Fork 0

CalculatorDialog/WordEditDialog : Fixed expression validation not working due to not setting a callback on textChange

This commit is contained in:
Herzeh 2015-12-23 16:13:30 +01:00
parent 3a89a56377
commit 3a9ef35db8
4 changed files with 22 additions and 0 deletions

View File

@ -16,6 +16,8 @@ CalculatorDialog::CalculatorDialog(QWidget* parent) : QDialog(parent), ui(new Ui
ui->txtExpression->selectAll();
ui->txtExpression->setFocus();
mValidateThread = new ValidateExpressionThread(this);
mValidateThread->setOnExpressionChangedCallback(std::bind(&CalculatorDialog::validateExpression, this, std::placeholders::_1));
connect(mValidateThread, SIGNAL(expressionChanged(bool, bool, dsint)), this, SLOT(expressionChanged(bool, bool, dsint)));
connect(ui->txtExpression, SIGNAL(textChanged(QString)), mValidateThread, SLOT(textChanged(QString)));
}
@ -25,6 +27,14 @@ CalculatorDialog::~CalculatorDialog()
delete ui;
}
void CalculatorDialog::validateExpression(QString expression)
{
duint value;
bool validExpression = DbgFunctions()->ValFromString(expression.toUtf8().constData(), &value);
bool validPointer = validExpression && DbgMemIsValidReadPtr(value);
this->mValidateThread->emitExpressionChanged(validExpression, validPointer, value);
}
void CalculatorDialog::showEvent(QShowEvent* event)
{
Q_UNUSED(event);

View File

@ -28,6 +28,7 @@ class CalculatorDialog : public QDialog
public:
explicit CalculatorDialog(QWidget* parent = 0);
~CalculatorDialog();
void validateExpression(QString expression);
void setExpressionFocus();
void showEvent(QShowEvent* event);
void hideEvent(QHideEvent* event);

View File

@ -14,11 +14,21 @@ WordEditDialog::WordEditDialog(QWidget* parent) : QDialog(parent), ui(new Ui::Wo
ui->unsignedLineEdit->setValidator(new QRegExpValidator(QRegExp("^\\d*(\\d+)?$"), this));// No signs, 0-9
mValidateThread = new ValidateExpressionThread(this);
mValidateThread->setOnExpressionChangedCallback(std::bind(&WordEditDialog::validateExpression, this, std::placeholders::_1));
connect(mValidateThread, SIGNAL(expressionChanged(bool, bool, dsint)), this, SLOT(expressionChanged(bool, bool, dsint)));
connect(ui->expressionLineEdit, SIGNAL(textChanged(QString)), mValidateThread, SLOT(textChanged(QString)));
mWord = 0;
}
void WordEditDialog::validateExpression(QString expression)
{
duint value;
bool validExpression = DbgFunctions()->ValFromString(expression.toUtf8().constData(), &value);
bool validPointer = validExpression && DbgMemIsValidReadPtr(value);
this->mValidateThread->emitExpressionChanged(validExpression, validPointer, value);
}
WordEditDialog::~WordEditDialog()
{
delete ui;

View File

@ -18,6 +18,7 @@ class WordEditDialog : public QDialog
public:
explicit WordEditDialog(QWidget* parent = 0);
~WordEditDialog();
void validateExpression(QString expression);
void setup(QString title, duint defVal, int byteCount);
duint getVal();
void showEvent(QShowEvent* event);