1
0
Fork 0

Merge pull request #2690 from morsisko/dump_modify_dialog_fix

MemoyDump - "modify" dialog fix
This commit is contained in:
Duncan Ogilvie 2021-07-19 22:44:32 +02:00 committed by GitHub
commit 02068e0935
Signed by: GitHub
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 4 deletions

View File

@ -61,6 +61,7 @@ void WordEditDialog::hideEvent(QHideEvent* event)
void WordEditDialog::setup(QString title, duint defVal, int byteCount)
{
this->setWindowTitle(title);
this->byteCount = byteCount;
ui->hexLineEdit->setInputMask(QString("hh").repeated(byteCount));
ui->expressionLineEdit->setText(QString("%1").arg(defVal, byteCount * 2, 16, QChar('0')).toUpper());
@ -111,9 +112,23 @@ void WordEditDialog::expressionChanged(bool validExpression, bool validPointer,
// Byte edit line
ui->hexLineEdit->setText(ToPtrString(hexWord));
// Signed edit
ui->signedLineEdit->setText(QString::number((dsint)mWord));
if(byteCount == sizeof(signed char))
ui->signedLineEdit->setText(QString::number((signed char)mWord));
else if(byteCount == sizeof(signed short))
ui->signedLineEdit->setText(QString::number((signed short)mWord));
else if(byteCount == sizeof(signed int))
ui->signedLineEdit->setText(QString::number((signed int)mWord));
else
ui->signedLineEdit->setText(QString::number((long long)mWord));
// Unsigned edit
ui->unsignedLineEdit->setText(QString::number((duint)mWord));
if(byteCount == sizeof(unsigned char))
ui->unsignedLineEdit->setText(QString::number((unsigned char)mWord));
else if(byteCount == sizeof(unsigned short))
ui->unsignedLineEdit->setText(QString::number((unsigned short)mWord));
else if(byteCount == sizeof(unsigned int))
ui->unsignedLineEdit->setText(QString::number((unsigned int)mWord));
else
ui->unsignedLineEdit->setText(QString::number((unsigned long long)mWord));
// ASCII edit
QString asciiExp;
for(int i = 0; i < asciiWidth; i++)
@ -143,7 +158,7 @@ void WordEditDialog::on_signedLineEdit_textEdited(const QString & arg1)
{
ui->signedLineEdit->setStyleSheet("");
ui->btnOk->setEnabled(true);
ui->expressionLineEdit->setText(ToPtrString((duint)value));
ui->expressionLineEdit->setText(convertValueToHexString((duint)value));
}
else
{
@ -159,7 +174,7 @@ void WordEditDialog::on_unsignedLineEdit_textEdited(const QString & arg1)
{
ui->unsignedLineEdit->setStyleSheet("");
ui->btnOk->setEnabled(true);
ui->expressionLineEdit->setText(ToPtrString((duint)value));
ui->expressionLineEdit->setText(convertValueToHexString((duint)value));
}
else
{
@ -168,6 +183,20 @@ void WordEditDialog::on_unsignedLineEdit_textEdited(const QString & arg1)
}
}
QString WordEditDialog::convertValueToHexString(duint value)
{
if(byteCount == sizeof(unsigned char))
return ToByteString(value);
else if(byteCount == sizeof(unsigned short))
return ToWordString(value);
else if(byteCount == sizeof(unsigned int))
return ToDwordString(value);
return ToPtrString(value);
}
void WordEditDialog::saveCursorPositions()
{
// Save the user's cursor index

View File

@ -36,6 +36,7 @@ private slots:
void on_unsignedLineEdit_textEdited(const QString & arg1);
private:
QString convertValueToHexString(duint value);
Ui::WordEditDialog* ui;
duint mWord;
ValidateExpressionThread* mValidateThread;
@ -44,6 +45,7 @@ private:
int mSignedEditPos;
int mUnsignedEditPos;
int mAsciiLineEditPos;
int byteCount;
};
#endif // WORDEDITDIALOG_H

View File

@ -70,6 +70,13 @@ inline QString ToWordString(unsigned short Value)
return QString(temp);
}
inline QString ToDwordString(unsigned int Value)
{
char temp[16];
sprintf_s(temp, "%08X", Value);
return QString(temp);
}
template<typename T>
inline QString ToFloatingString(const void* buffer, int precision)
{