1
0
Fork 0

Edit floating-point register dialog (#695)

* Edit floating-point register

* Edit floating-point register

* Edit floating-point register

* Edit floating-point register

* Edit floating-point registers

* Edit floating-point register
This commit is contained in:
Torusrxxx 2016-06-02 04:27:42 +00:00 committed by Duncan Ogilvie
parent 937a0a44cc
commit 69aa29fd4a
9 changed files with 1766 additions and 3 deletions

View File

@ -0,0 +1,719 @@
#include "EditFloatRegister.h"
#include "ui_EditFloatRegister.h"
#include "Bridge.h"
#include "StringUtil.h"
/**
* @brief Initialize EditFloatRegister dialog
*
* @param[in] RegisterSize The register size. 128 stands for XMM register, 256 stands for YMM register,
* 512 stands for ZMM register.
*
* @param[in] parent The parent of this dialog.
*
* @return Nothing.
*/
EditFloatRegister::EditFloatRegister(int RegisterSize, QWidget *parent) :
QDialog(parent), hexValidate(this), RegSize(RegisterSize),
signedShortValidator(LongLongValidator::DataType::SignedShort, this),
unsignedShortValidator(LongLongValidator::DataType::UnsignedShort, this),
signedLongValidator(LongLongValidator::DataType::SignedLong, this),
unsignedLongValidator(LongLongValidator::DataType::UnsignedLong, this),
signedLongLongValidator(LongLongValidator::DataType::SignedLongLong, this),
unsignedLongLongValidator(LongLongValidator::DataType::UnsignedLongLong, this),
doubleValidator(this),
ui(new Ui::EditFloatRegister)
{
memset(Data, 0, sizeof(Data));
ui->setupUi(this);
setModal(true);
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
setWindowFlags(Qt::Dialog | Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
#endif
switch(RegisterSize)
{
case 128:
hideUpperPart();
ui->labelLowRegister->setText(QString("XMM:"));
break;
case 256:
break;
case 512:
default:
GuiAddLogMessage(QString("Error, register size %1 is not supported.\n").arg(RegisterSize).toUtf8().constData());
break;
}
connect(ui->hexEdit, SIGNAL(textEdited(QString)), this, SLOT(editingHex1FinishedSlot(QString)));
ui->hexEdit->setValidator(&hexValidate);
connect(ui->hexEdit_2, SIGNAL(textEdited(QString)), this, SLOT(editingHex2FinishedSlot(QString)));
ui->hexEdit_2->setValidator(&hexValidate);
editingModeChangedSlot(false);
connect(ui->radioHex, SIGNAL(toggled(bool)), this, SLOT(editingModeChangedSlot(bool)));
connect(ui->radioSigned, SIGNAL(toggled(bool)), this, SLOT(editingModeChangedSlot(bool)));
connect(ui->radioUnsigned, SIGNAL(toggled(bool)), this, SLOT(editingModeChangedSlot(bool)));
connect(ui->shortEdit0_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort0FinishedSlot(QString)));
connect(ui->shortEdit1_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort1FinishedSlot(QString)));
connect(ui->shortEdit2_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort2FinishedSlot(QString)));
connect(ui->shortEdit3_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort3FinishedSlot(QString)));
connect(ui->shortEdit4_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort4FinishedSlot(QString)));
connect(ui->shortEdit5_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort5FinishedSlot(QString)));
connect(ui->shortEdit6_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort6FinishedSlot(QString)));
connect(ui->shortEdit7_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerShort7FinishedSlot(QString)));
connect(ui->shortEdit0, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort0FinishedSlot(QString)));
connect(ui->shortEdit1, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort1FinishedSlot(QString)));
connect(ui->shortEdit2, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort2FinishedSlot(QString)));
connect(ui->shortEdit3, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort3FinishedSlot(QString)));
connect(ui->shortEdit4, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort4FinishedSlot(QString)));
connect(ui->shortEdit5, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort5FinishedSlot(QString)));
connect(ui->shortEdit6, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort6FinishedSlot(QString)));
connect(ui->shortEdit7, SIGNAL(textEdited(QString)), this, SLOT(editingUpperShort7FinishedSlot(QString)));
connect(ui->longEdit0_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerLong0FinishedSlot(QString)));
connect(ui->longEdit1_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerLong1FinishedSlot(QString)));
connect(ui->longEdit2_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerLong2FinishedSlot(QString)));
connect(ui->longEdit3_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerLong3FinishedSlot(QString)));
connect(ui->longEdit0, SIGNAL(textEdited(QString)), this, SLOT(editingUpperLong0FinishedSlot(QString)));
connect(ui->longEdit1, SIGNAL(textEdited(QString)), this, SLOT(editingUpperLong1FinishedSlot(QString)));
connect(ui->longEdit2, SIGNAL(textEdited(QString)), this, SLOT(editingUpperLong2FinishedSlot(QString)));
connect(ui->longEdit3, SIGNAL(textEdited(QString)), this, SLOT(editingUpperLong3FinishedSlot(QString)));
connect(ui->floatEdit0_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerFloat0FinishedSlot(QString)));
connect(ui->floatEdit1_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerFloat1FinishedSlot(QString)));
connect(ui->floatEdit2_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerFloat2FinishedSlot(QString)));
connect(ui->floatEdit3_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerFloat3FinishedSlot(QString)));
connect(ui->floatEdit0, SIGNAL(textEdited(QString)), this, SLOT(editingUpperFloat0FinishedSlot(QString)));
connect(ui->floatEdit1, SIGNAL(textEdited(QString)), this, SLOT(editingUpperFloat1FinishedSlot(QString)));
connect(ui->floatEdit2, SIGNAL(textEdited(QString)), this, SLOT(editingUpperFloat2FinishedSlot(QString)));
connect(ui->floatEdit3, SIGNAL(textEdited(QString)), this, SLOT(editingUpperFloat3FinishedSlot(QString)));
connect(ui->doubleEdit0_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerDouble0FinishedSlot(QString)));
connect(ui->doubleEdit1_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerDouble1FinishedSlot(QString)));
connect(ui->doubleEdit0, SIGNAL(textEdited(QString)), this, SLOT(editingUpperDouble0FinishedSlot(QString)));
connect(ui->doubleEdit1, SIGNAL(textEdited(QString)), this, SLOT(editingUpperDouble1FinishedSlot(QString)));
connect(ui->longLongEdit0_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerLongLong0FinishedSlot(QString)));
connect(ui->longLongEdit1_2, SIGNAL(textEdited(QString)), this, SLOT(editingLowerLongLong1FinishedSlot(QString)));
connect(ui->longLongEdit0, SIGNAL(textEdited(QString)), this, SLOT(editingUpperLongLong0FinishedSlot(QString)));
connect(ui->longLongEdit1, SIGNAL(textEdited(QString)), this, SLOT(editingUpperLongLong1FinishedSlot(QString)));
ui->floatEdit0_2->setValidator(&doubleValidator);
ui->floatEdit1_2->setValidator(&doubleValidator);
ui->floatEdit2_2->setValidator(&doubleValidator);
ui->floatEdit3_2->setValidator(&doubleValidator);
ui->floatEdit0->setValidator(&doubleValidator);
ui->floatEdit1->setValidator(&doubleValidator);
ui->floatEdit2->setValidator(&doubleValidator);
ui->floatEdit3->setValidator(&doubleValidator);
ui->doubleEdit0_2->setValidator(&doubleValidator);
ui->doubleEdit1_2->setValidator(&doubleValidator);
ui->doubleEdit0->setValidator(&doubleValidator);
ui->doubleEdit1->setValidator(&doubleValidator);
}
void EditFloatRegister::hideUpperPart()
{
ui->labelH0->hide();
ui->labelH1->hide();
ui->labelH2->hide();
ui->labelH3->hide();
ui->labelH4->hide();
ui->labelH5->hide();
ui->labelH6->hide();
ui->labelH7->hide();
ui->labelH8->hide();
ui->labelH9->hide();
ui->labelHA->hide();
ui->labelHB->hide();
ui->labelHC->hide();
ui->labelHD->hide();
ui->labelHE->hide();
ui->hexEdit->hide();
ui->shortEdit0->hide();
ui->shortEdit1->hide();
ui->shortEdit2->hide();
ui->shortEdit3->hide();
ui->shortEdit4->hide();
ui->shortEdit5->hide();
ui->shortEdit6->hide();
ui->shortEdit7->hide();
ui->longEdit0->hide();
ui->longEdit1->hide();
ui->longEdit2->hide();
ui->longEdit3->hide();
ui->floatEdit0->hide();
ui->floatEdit1->hide();
ui->floatEdit2->hide();
ui->floatEdit3->hide();
ui->doubleEdit0->hide();
ui->doubleEdit1->hide();
ui->longLongEdit0->hide();
ui->longLongEdit1->hide();
}
/**
* @brief Load register data into the dialog
* @param[in] RegisterData the data to be loaded. It must be at lease the same size as the size specified in RegisterSize
* @return Nothing.
*/
void EditFloatRegister::loadData(char *RegisterData)
{
memcpy(Data, RegisterData, RegSize / 8);
reloadDataLow();
reloadDataHigh();
}
/**
* @brief Get the register data from the dialog
* @return The output buffer.
*/
const char *EditFloatRegister::getData()
{
return Data;
}
/**
* @brief reloads the lower 128-bit of data of the dialog
*/
void EditFloatRegister::reloadDataLow()
{
if(mutex == nullptr)
mutex = this;
if(mutex != ui->hexEdit_2)
ui->hexEdit_2->setText(QString(QByteArray(Data, 16).toHex()).toUpper());
reloadLongData(*ui->longEdit0_2, Data);
reloadLongData(*ui->longEdit1_2, Data + 4);
reloadLongData(*ui->longEdit2_2, Data + 8);
reloadLongData(*ui->longEdit3_2, Data + 12);
reloadShortData(*ui->shortEdit0_2, Data);
reloadShortData(*ui->shortEdit1_2, Data + 2);
reloadShortData(*ui->shortEdit2_2, Data + 4);
reloadShortData(*ui->shortEdit3_2, Data + 6);
reloadShortData(*ui->shortEdit4_2, Data + 8);
reloadShortData(*ui->shortEdit5_2, Data + 10);
reloadShortData(*ui->shortEdit6_2, Data + 12);
reloadShortData(*ui->shortEdit7_2, Data + 14);
reloadFloatData(*ui->floatEdit0_2, Data);
reloadFloatData(*ui->floatEdit1_2, Data + 4);
reloadFloatData(*ui->floatEdit2_2, Data + 8);
reloadFloatData(*ui->floatEdit3_2, Data + 12);
reloadDoubleData(*ui->doubleEdit0_2, Data);
reloadDoubleData(*ui->doubleEdit1_2, Data + 8);
reloadLongLongData(*ui->longLongEdit0_2, Data);
reloadLongLongData(*ui->longLongEdit1_2, Data + 8);
mutex = nullptr;
}
/**
* @brief reloads the upper 128-bit of data of the dialog
*/
void EditFloatRegister::reloadDataHigh()
{
if(mutex == nullptr)
mutex = this;
if(mutex != ui->hexEdit)
ui->hexEdit->setText(QString(QByteArray(Data + 16, 16).toHex()).toUpper());
reloadLongData(*ui->longEdit0, Data + 16);
reloadLongData(*ui->longEdit1, Data + 20);
reloadLongData(*ui->longEdit2, Data + 24);
reloadLongData(*ui->longEdit3, Data + 28);
reloadShortData(*ui->shortEdit0, Data + 16);
reloadShortData(*ui->shortEdit1, Data + 18);
reloadShortData(*ui->shortEdit2, Data + 20);
reloadShortData(*ui->shortEdit3, Data + 22);
reloadShortData(*ui->shortEdit4, Data + 24);
reloadShortData(*ui->shortEdit5, Data + 26);
reloadShortData(*ui->shortEdit6, Data + 28);
reloadShortData(*ui->shortEdit7, Data + 30);
reloadFloatData(*ui->floatEdit0, Data + 16);
reloadFloatData(*ui->floatEdit1, Data + 20);
reloadFloatData(*ui->floatEdit2, Data + 24);
reloadFloatData(*ui->floatEdit3, Data + 28);
reloadDoubleData(*ui->doubleEdit0, Data + 16);
reloadDoubleData(*ui->doubleEdit1, Data + 24);
reloadLongLongData(*ui->longLongEdit0, Data + 16);
reloadLongLongData(*ui->longLongEdit1, Data + 24);
mutex = nullptr;
}
void EditFloatRegister::reloadShortData(QLineEdit& txtbox, char *Data)
{
if(mutex != &txtbox)
{
if(ui->radioHex->isChecked())
txtbox.setText(QString().number((int)*(unsigned short*)Data, 16).toUpper());
else if(ui->radioSigned->isChecked())
txtbox.setText(QString().number((int)*(short*)Data));
else
txtbox.setText(QString().number((unsigned int)*(unsigned short*)Data));
}
}
void EditFloatRegister::reloadLongData(QLineEdit& txtbox, char *Data)
{
if(mutex != &txtbox)
{
if(ui->radioHex->isChecked())
txtbox.setText(QString().number(*(int*)Data, 16).toUpper());
else if(ui->radioSigned->isChecked())
txtbox.setText(QString().number(*(int*)Data));
else
txtbox.setText(QString().number(*(unsigned int*)Data));
}
}
void EditFloatRegister::reloadFloatData(QLineEdit &txtbox, char *Data)
{
if(mutex != &txtbox)
{
txtbox.setText(QString().number(*(float*)Data));
}
}
void EditFloatRegister::reloadDoubleData(QLineEdit &txtbox, char *Data)
{
if(mutex != &txtbox)
{
txtbox.setText(QString().number(*(double*)Data));
}
}
void EditFloatRegister::reloadLongLongData(QLineEdit &txtbox, char *Data)
{
if(mutex != &txtbox)
{
if(ui->radioHex->isChecked())
txtbox.setText(QString().number(*(unsigned long long*)Data, 16).toUpper());
else if(ui->radioSigned->isChecked())
txtbox.setText(QString().number(*(long long*)Data));
else
txtbox.setText(QString().number(*(unsigned long long*)Data));
}
}
void EditFloatRegister::editingModeChangedSlot(bool arg)
{
Q_UNUSED(arg);
if(ui->radioHex->isChecked())
{
ui->shortEdit0_2->setMaxLength(4);
ui->shortEdit1_2->setMaxLength(4);
ui->shortEdit2_2->setMaxLength(4);
ui->shortEdit3_2->setMaxLength(4);
ui->shortEdit4_2->setMaxLength(4);
ui->shortEdit5_2->setMaxLength(4);
ui->shortEdit6_2->setMaxLength(4);
ui->shortEdit7_2->setMaxLength(4);
ui->shortEdit0->setMaxLength(4);
ui->shortEdit1->setMaxLength(4);
ui->shortEdit2->setMaxLength(4);
ui->shortEdit3->setMaxLength(4);
ui->shortEdit4->setMaxLength(4);
ui->shortEdit5->setMaxLength(4);
ui->shortEdit6->setMaxLength(4);
ui->shortEdit7->setMaxLength(4);
ui->longEdit0_2->setMaxLength(8);
ui->longEdit1_2->setMaxLength(8);
ui->longEdit2_2->setMaxLength(8);
ui->longEdit3_2->setMaxLength(8);
ui->longEdit0->setMaxLength(8);
ui->longEdit1->setMaxLength(8);
ui->longEdit2->setMaxLength(8);
ui->longEdit3->setMaxLength(8);
ui->longLongEdit0->setMaxLength(16);
ui->longLongEdit1->setMaxLength(16);
ui->longLongEdit0_2->setMaxLength(16);
ui->longLongEdit1_2->setMaxLength(16);
ui->shortEdit0_2->setValidator(&hexValidate);
ui->shortEdit1_2->setValidator(&hexValidate);
ui->shortEdit2_2->setValidator(&hexValidate);
ui->shortEdit3_2->setValidator(&hexValidate);
ui->shortEdit4_2->setValidator(&hexValidate);
ui->shortEdit5_2->setValidator(&hexValidate);
ui->shortEdit6_2->setValidator(&hexValidate);
ui->shortEdit7_2->setValidator(&hexValidate);
ui->shortEdit0->setValidator(&hexValidate);
ui->shortEdit1->setValidator(&hexValidate);
ui->shortEdit2->setValidator(&hexValidate);
ui->shortEdit3->setValidator(&hexValidate);
ui->shortEdit4->setValidator(&hexValidate);
ui->shortEdit5->setValidator(&hexValidate);
ui->shortEdit6->setValidator(&hexValidate);
ui->shortEdit7->setValidator(&hexValidate);
ui->longEdit0_2->setValidator(&hexValidate);
ui->longEdit1_2->setValidator(&hexValidate);
ui->longEdit2_2->setValidator(&hexValidate);
ui->longEdit3_2->setValidator(&hexValidate);
ui->longEdit0->setValidator(&hexValidate);
ui->longEdit1->setValidator(&hexValidate);
ui->longEdit2->setValidator(&hexValidate);
ui->longEdit3->setValidator(&hexValidate);
ui->longLongEdit0->setValidator(&hexValidate);
ui->longLongEdit1->setValidator(&hexValidate);
ui->longLongEdit0_2->setValidator(&hexValidate);
ui->longLongEdit1_2->setValidator(&hexValidate);
}
else if(ui->radioSigned->isChecked())
{
ui->shortEdit0_2->setMaxLength(6);
ui->shortEdit1_2->setMaxLength(6);
ui->shortEdit2_2->setMaxLength(6);
ui->shortEdit3_2->setMaxLength(6);
ui->shortEdit4_2->setMaxLength(6);
ui->shortEdit5_2->setMaxLength(6);
ui->shortEdit6_2->setMaxLength(6);
ui->shortEdit7_2->setMaxLength(6);
ui->shortEdit0->setMaxLength(6);
ui->shortEdit1->setMaxLength(6);
ui->shortEdit2->setMaxLength(6);
ui->shortEdit3->setMaxLength(6);
ui->shortEdit4->setMaxLength(6);
ui->shortEdit5->setMaxLength(6);
ui->shortEdit6->setMaxLength(6);
ui->shortEdit7->setMaxLength(6);
ui->longEdit0_2->setMaxLength(12);
ui->longEdit1_2->setMaxLength(12);
ui->longEdit2_2->setMaxLength(12);
ui->longEdit3_2->setMaxLength(12);
ui->longEdit0->setMaxLength(12);
ui->longEdit1->setMaxLength(12);
ui->longEdit2->setMaxLength(12);
ui->longEdit3->setMaxLength(12);
ui->longLongEdit0->setMaxLength(64);
ui->longLongEdit1->setMaxLength(64);
ui->longLongEdit0_2->setMaxLength(64);
ui->longLongEdit1_2->setMaxLength(64);
ui->shortEdit0_2->setValidator(&signedShortValidator);
ui->shortEdit1_2->setValidator(&signedShortValidator);
ui->shortEdit2_2->setValidator(&signedShortValidator);
ui->shortEdit3_2->setValidator(&signedShortValidator);
ui->shortEdit4_2->setValidator(&signedShortValidator);
ui->shortEdit5_2->setValidator(&signedShortValidator);
ui->shortEdit6_2->setValidator(&signedShortValidator);
ui->shortEdit7_2->setValidator(&signedShortValidator);
ui->shortEdit0->setValidator(&signedShortValidator);
ui->shortEdit1->setValidator(&signedShortValidator);
ui->shortEdit2->setValidator(&signedShortValidator);
ui->shortEdit3->setValidator(&signedShortValidator);
ui->shortEdit4->setValidator(&signedShortValidator);
ui->shortEdit5->setValidator(&signedShortValidator);
ui->shortEdit6->setValidator(&signedShortValidator);
ui->shortEdit7->setValidator(&signedShortValidator);
ui->longEdit0_2->setValidator(&signedLongValidator);
ui->longEdit1_2->setValidator(&signedLongValidator);
ui->longEdit2_2->setValidator(&signedLongValidator);
ui->longEdit3_2->setValidator(&signedLongValidator);
ui->longEdit0->setValidator(&signedLongValidator);
ui->longEdit1->setValidator(&signedLongValidator);
ui->longEdit2->setValidator(&signedLongValidator);
ui->longEdit3->setValidator(&signedLongValidator);
ui->longLongEdit0->setValidator(&signedLongLongValidator);
ui->longLongEdit1->setValidator(&signedLongLongValidator);
ui->longLongEdit0_2->setValidator(&signedLongLongValidator);
ui->longLongEdit1_2->setValidator(&signedLongLongValidator);
}
else
{
ui->shortEdit0_2->setMaxLength(6);
ui->shortEdit1_2->setMaxLength(6);
ui->shortEdit2_2->setMaxLength(6);
ui->shortEdit3_2->setMaxLength(6);
ui->shortEdit4_2->setMaxLength(6);
ui->shortEdit5_2->setMaxLength(6);
ui->shortEdit6_2->setMaxLength(6);
ui->shortEdit7_2->setMaxLength(6);
ui->shortEdit0->setMaxLength(6);
ui->shortEdit1->setMaxLength(6);
ui->shortEdit2->setMaxLength(6);
ui->shortEdit3->setMaxLength(6);
ui->shortEdit4->setMaxLength(6);
ui->shortEdit5->setMaxLength(6);
ui->shortEdit6->setMaxLength(6);
ui->shortEdit7->setMaxLength(6);
ui->longEdit0_2->setMaxLength(12);
ui->longEdit1_2->setMaxLength(12);
ui->longEdit2_2->setMaxLength(12);
ui->longEdit3_2->setMaxLength(12);
ui->longEdit0->setMaxLength(12);
ui->longEdit1->setMaxLength(12);
ui->longEdit2->setMaxLength(12);
ui->longEdit3->setMaxLength(12);
ui->shortEdit0_2->setValidator(&unsignedShortValidator);
ui->shortEdit1_2->setValidator(&unsignedShortValidator);
ui->shortEdit2_2->setValidator(&unsignedShortValidator);
ui->shortEdit3_2->setValidator(&unsignedShortValidator);
ui->shortEdit4_2->setValidator(&unsignedShortValidator);
ui->shortEdit5_2->setValidator(&unsignedShortValidator);
ui->shortEdit6_2->setValidator(&unsignedShortValidator);
ui->shortEdit7_2->setValidator(&unsignedShortValidator);
ui->shortEdit0->setValidator(&unsignedShortValidator);
ui->shortEdit1->setValidator(&unsignedShortValidator);
ui->shortEdit2->setValidator(&unsignedShortValidator);
ui->shortEdit3->setValidator(&unsignedShortValidator);
ui->shortEdit4->setValidator(&unsignedShortValidator);
ui->shortEdit5->setValidator(&unsignedShortValidator);
ui->shortEdit6->setValidator(&unsignedShortValidator);
ui->shortEdit7->setValidator(&unsignedShortValidator);
ui->longEdit0_2->setValidator(&unsignedLongValidator);
ui->longEdit1_2->setValidator(&unsignedLongValidator);
ui->longEdit2_2->setValidator(&unsignedLongValidator);
ui->longEdit3_2->setValidator(&unsignedLongValidator);
ui->longEdit0->setValidator(&unsignedLongValidator);
ui->longEdit1->setValidator(&unsignedLongValidator);
ui->longEdit2->setValidator(&unsignedLongValidator);
ui->longEdit3->setValidator(&unsignedLongValidator);
ui->longLongEdit0->setValidator(&unsignedLongLongValidator);
ui->longLongEdit1->setValidator(&unsignedLongLongValidator);
ui->longLongEdit0_2->setValidator(&unsignedLongLongValidator);
ui->longLongEdit1_2->setValidator(&unsignedLongLongValidator);
}
reloadDataLow();
reloadDataHigh();
}
/**
* @brief Desturctor of EditFloatRegister
* @return nothing
*/
EditFloatRegister::~EditFloatRegister()
{
delete ui;
}
/**
* @brief The higher part of the YMM register (or XMM register) is modified
* @param arg the new text
*/
void EditFloatRegister::editingHex1FinishedSlot(QString arg)
{
mutex = sender();
QString filled(arg);
filled.append(QString(16 - filled.length(), QChar('0')));
for(int i = 0; i < 16; i++)
Data[i + 16] = filled.mid(i * 2, 2).toInt(0, 16);
reloadDataHigh();
}
/**
* @brief The lower part of the YMM register (or XMM register) is modified
* @param arg the new text
*/
void EditFloatRegister::editingHex2FinishedSlot(QString arg)
{
mutex = sender();
QString filled(arg);
filled.append(QString(16 - filled.length(), QChar('0')));
for(int i = 0; i < 16; i++)
Data[i] = filled.mid(i * 2, 2).toInt(0, 16);
reloadDataLow();
}
void EditFloatRegister::editingShortFinishedSlot(size_t offset, QString arg)
{
mutex = sender();
if(ui->radioHex->isChecked())
*(unsigned short*)(Data + offset) = arg.toUShort(0, 16);
else if(ui->radioSigned->isChecked())
*(short*)(Data + offset) = arg.toShort();
else
*(unsigned short*)(Data + offset) = arg.toUShort();
offset < 16 ? reloadDataLow() : reloadDataHigh();
}
void EditFloatRegister::editingLongFinishedSlot(size_t offset, QString arg)
{
mutex = sender();
if(ui->radioHex->isChecked())
*(unsigned int*)(Data + offset) = arg.toUInt(0, 16);
else if(ui->radioSigned->isChecked())
*(int*)(Data + offset) = arg.toInt();
else
*(unsigned int*)(Data + offset) = arg.toUInt();
offset < 16 ? reloadDataLow() : reloadDataHigh();
}
void EditFloatRegister::editingFloatFinishedSlot(size_t offset, QString arg)
{
mutex = sender();
bool ok;
float data = arg.toFloat(&ok);
if(ok)
*(float*)(Data + offset) = data;
offset < 16 ? reloadDataLow() : reloadDataHigh();
}
void EditFloatRegister::editingDoubleFinishedSlot(size_t offset, QString arg)
{
mutex = sender();
bool ok;
double data = arg.toDouble(&ok);
if(ok)
*(double*)(Data + offset) = data;
offset < 16 ? reloadDataLow() : reloadDataHigh();
}
void EditFloatRegister::editingLongLongFinishedSlot(size_t offset, QString arg)
{
mutex = sender();
if(ui->radioHex->isChecked())
*(unsigned long long*)(Data + offset) = arg.toULongLong(0, 16);
else if(ui->radioSigned->isChecked())
*(long long*)(Data + offset) = arg.toLongLong();
else
*(unsigned long long*)(Data + offset) = arg.toULongLong();
offset < 16 ? reloadDataLow() : reloadDataHigh();
}
void EditFloatRegister::editingLowerShort0FinishedSlot(QString arg)
{
editingShortFinishedSlot(0 * 2, arg);
}
void EditFloatRegister::editingLowerShort1FinishedSlot(QString arg)
{
editingShortFinishedSlot(1 * 2, arg);
}
void EditFloatRegister::editingLowerShort2FinishedSlot(QString arg)
{
editingShortFinishedSlot(2 * 2, arg);
}
void EditFloatRegister::editingLowerShort3FinishedSlot(QString arg)
{
editingShortFinishedSlot(3 * 2, arg);
}
void EditFloatRegister::editingLowerShort4FinishedSlot(QString arg)
{
editingShortFinishedSlot(4 * 2, arg);
}
void EditFloatRegister::editingLowerShort5FinishedSlot(QString arg)
{
editingShortFinishedSlot(5 * 2, arg);
}
void EditFloatRegister::editingLowerShort6FinishedSlot(QString arg)
{
editingShortFinishedSlot(6 * 2, arg);
}
void EditFloatRegister::editingLowerShort7FinishedSlot(QString arg)
{
editingShortFinishedSlot(7 * 2, arg);
}
void EditFloatRegister::editingUpperShort0FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 0 * 2, arg);
}
void EditFloatRegister::editingUpperShort1FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 1 * 2, arg);
}
void EditFloatRegister::editingUpperShort2FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 2 * 2, arg);
}
void EditFloatRegister::editingUpperShort3FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 3 * 2, arg);
}
void EditFloatRegister::editingUpperShort4FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 4 * 2, arg);
}
void EditFloatRegister::editingUpperShort5FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 5 * 2, arg);
}
void EditFloatRegister::editingUpperShort6FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 6 * 2, arg);
}
void EditFloatRegister::editingUpperShort7FinishedSlot(QString arg)
{
editingShortFinishedSlot(16 + 7 * 2, arg);
}
void EditFloatRegister::editingLowerLong0FinishedSlot(QString arg)
{
editingLongFinishedSlot(0 * 4, arg);
}
void EditFloatRegister::editingLowerLong1FinishedSlot(QString arg)
{
editingLongFinishedSlot(1 * 4, arg);
}
void EditFloatRegister::editingLowerLong2FinishedSlot(QString arg)
{
editingLongFinishedSlot(2 * 4, arg);
}
void EditFloatRegister::editingLowerLong3FinishedSlot(QString arg)
{
editingLongFinishedSlot(3 * 4, arg);
}
void EditFloatRegister::editingUpperLong0FinishedSlot(QString arg)
{
editingLongFinishedSlot(16 + 0 * 4, arg);
}
void EditFloatRegister::editingUpperLong1FinishedSlot(QString arg)
{
editingLongFinishedSlot(16 + 1 * 4, arg);
}
void EditFloatRegister::editingUpperLong2FinishedSlot(QString arg)
{
editingLongFinishedSlot(16 + 2 * 4, arg);
}
void EditFloatRegister::editingUpperLong3FinishedSlot(QString arg)
{
editingLongFinishedSlot(16 + 3 * 4, arg);
}
void EditFloatRegister::editingLowerFloat0FinishedSlot(QString arg)
{
editingFloatFinishedSlot(0 * 4, arg);
}
void EditFloatRegister::editingLowerFloat1FinishedSlot(QString arg)
{
editingFloatFinishedSlot(1 * 4, arg);
}
void EditFloatRegister::editingLowerFloat2FinishedSlot(QString arg)
{
editingFloatFinishedSlot(2 * 4, arg);
}
void EditFloatRegister::editingLowerFloat3FinishedSlot(QString arg)
{
editingFloatFinishedSlot(3 * 4, arg);
}
void EditFloatRegister::editingUpperFloat0FinishedSlot(QString arg)
{
editingFloatFinishedSlot(16 + 0 * 4, arg);
}
void EditFloatRegister::editingUpperFloat1FinishedSlot(QString arg)
{
editingFloatFinishedSlot(16 + 1 * 4, arg);
}
void EditFloatRegister::editingUpperFloat2FinishedSlot(QString arg)
{
editingFloatFinishedSlot(16 + 2 * 4, arg);
}
void EditFloatRegister::editingUpperFloat3FinishedSlot(QString arg)
{
editingFloatFinishedSlot(16 + 3 * 4, arg);
}
void EditFloatRegister::editingLowerDouble0FinishedSlot(QString arg)
{
editingDoubleFinishedSlot(0 * 8, arg);
}
void EditFloatRegister::editingLowerDouble1FinishedSlot(QString arg)
{
editingDoubleFinishedSlot(1 * 8, arg);
}
void EditFloatRegister::editingUpperDouble0FinishedSlot(QString arg)
{
editingDoubleFinishedSlot(16 + 0 * 8, arg);
}
void EditFloatRegister::editingUpperDouble1FinishedSlot(QString arg)
{
editingDoubleFinishedSlot(16 + 1 * 8, arg);
}
void EditFloatRegister::editingLowerLongLong0FinishedSlot(QString arg)
{
editingLongLongFinishedSlot(0 * 8, arg);
}
void EditFloatRegister::editingLowerLongLong1FinishedSlot(QString arg)
{
editingLongLongFinishedSlot(1 * 8, arg);
}
void EditFloatRegister::editingUpperLongLong0FinishedSlot(QString arg)
{
editingLongLongFinishedSlot(16 + 0 * 8, arg);
}
void EditFloatRegister::editingUpperLongLong1FinishedSlot(QString arg)
{
editingLongLongFinishedSlot(16 + 1 * 8, arg);
}

View File

@ -0,0 +1,104 @@
#ifndef EDITFLOATREGISTER_H
#define EDITFLOATREGISTER_H
#include <QDialog>
#include <QLineEdit>
#include <HexValidator.h>
#include "LongLongValidator.h"
#include <QDoubleValidator>
namespace Ui {
class EditFloatRegister;
}
class EditFloatRegister : public QDialog
{
Q_OBJECT
public:
explicit EditFloatRegister(int RegisterSize, QWidget *parent = 0);
void loadData(char* RegisterData);
const char* getData();
~EditFloatRegister();
private slots:
void editingModeChangedSlot(bool arg);
void editingHex1FinishedSlot(QString arg);
void editingHex2FinishedSlot(QString arg);
// the compiler does not allow us to use template as slot. So we are going to waste the screen space...
void editingLowerShort0FinishedSlot(QString arg);
void editingLowerShort1FinishedSlot(QString arg);
void editingLowerShort2FinishedSlot(QString arg);
void editingLowerShort3FinishedSlot(QString arg);
void editingLowerShort4FinishedSlot(QString arg);
void editingLowerShort5FinishedSlot(QString arg);
void editingLowerShort6FinishedSlot(QString arg);
void editingLowerShort7FinishedSlot(QString arg);
void editingUpperShort0FinishedSlot(QString arg);
void editingUpperShort1FinishedSlot(QString arg);
void editingUpperShort2FinishedSlot(QString arg);
void editingUpperShort3FinishedSlot(QString arg);
void editingUpperShort4FinishedSlot(QString arg);
void editingUpperShort5FinishedSlot(QString arg);
void editingUpperShort6FinishedSlot(QString arg);
void editingUpperShort7FinishedSlot(QString arg);
void editingLowerLong0FinishedSlot(QString arg);
void editingLowerLong1FinishedSlot(QString arg);
void editingLowerLong2FinishedSlot(QString arg);
void editingLowerLong3FinishedSlot(QString arg);
void editingUpperLong0FinishedSlot(QString arg);
void editingUpperLong1FinishedSlot(QString arg);
void editingUpperLong2FinishedSlot(QString arg);
void editingUpperLong3FinishedSlot(QString arg);
void editingLowerFloat0FinishedSlot(QString arg);
void editingLowerFloat1FinishedSlot(QString arg);
void editingLowerFloat2FinishedSlot(QString arg);
void editingLowerFloat3FinishedSlot(QString arg);
void editingUpperFloat0FinishedSlot(QString arg);
void editingUpperFloat1FinishedSlot(QString arg);
void editingUpperFloat2FinishedSlot(QString arg);
void editingUpperFloat3FinishedSlot(QString arg);
void editingLowerDouble0FinishedSlot(QString arg);
void editingLowerDouble1FinishedSlot(QString arg);
void editingUpperDouble0FinishedSlot(QString arg);
void editingUpperDouble1FinishedSlot(QString arg);
void editingLowerLongLong0FinishedSlot(QString arg);
void editingLowerLongLong1FinishedSlot(QString arg);
void editingUpperLongLong0FinishedSlot(QString arg);
void editingUpperLongLong1FinishedSlot(QString arg);
private:
HexValidator hexValidate;
LongLongValidator signedShortValidator;
LongLongValidator unsignedShortValidator;
LongLongValidator signedLongValidator;
LongLongValidator unsignedLongValidator;
LongLongValidator signedLongLongValidator;
LongLongValidator unsignedLongLongValidator;
QDoubleValidator doubleValidator;
void hideUpperPart();
void reloadDataLow();
void reloadDataHigh();
void reloadShortData(QLineEdit& txtbox, char* Data);
void reloadLongData(QLineEdit& txtbox, char* Data);
void reloadFloatData(QLineEdit& txtbox, char* Data);
void reloadDoubleData(QLineEdit& txtbox, char* Data);
void reloadLongLongData(QLineEdit& txtbox, char* Data);
void editingShortFinishedSlot(size_t offset, QString arg);
void editingLongFinishedSlot(size_t offset, QString arg);
void editingFloatFinishedSlot(size_t offset, QString arg);
void editingDoubleFinishedSlot(size_t offset, QString arg);
void editingLongLongFinishedSlot(size_t offset, QString arg);
Ui::EditFloatRegister *ui;
QObject* mutex;
char Data[64];
int RegSize;
};
#endif // EDITFLOATREGISTER_H

View File

@ -0,0 +1,716 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EditFloatRegister</class>
<widget class="QDialog" name="EditFloatRegister">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>701</width>
<height>528</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="windowIcon">
<iconset resource="../../resource.qrc">
<normaloff>:/icons/images/modify.png</normaloff>:/icons/images/modify.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QVBoxLayout" name="mainLayout">
<property name="sizeConstraint">
<enum>QLayout::SetNoConstraint</enum>
</property>
<item>
<layout class="QHBoxLayout" name="highRegister">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="labelH8">
<property name="text">
<string>High:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH9">
<property name="text">
<string>byte</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHA">
<property name="text">
<string>Short:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHB">
<property name="text">
<string>Long:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHC">
<property name="text">
<string>Float:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHD">
<property name="text">
<string>Double:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelHE">
<property name="text">
<string>int64:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="hexEdit">
<property name="inputMethodHints">
<set>Qt::ImhUppercaseOnly</set>
</property>
<property name="maxLength">
<number>32</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="labelH0">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>0-1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH1">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>2-3</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>4-5</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>6-7</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH6">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>8-9</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH5">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>A-B</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH7">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>C-D</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelH3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>E-F</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="shortEdit0"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit1"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit3"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit4"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit5"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit6"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit7">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLineEdit" name="longEdit0"/>
</item>
<item>
<widget class="QLineEdit" name="longEdit1"/>
</item>
<item>
<widget class="QLineEdit" name="longEdit2"/>
</item>
<item>
<widget class="QLineEdit" name="longEdit3"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLineEdit" name="floatEdit0"/>
</item>
<item>
<widget class="QLineEdit" name="floatEdit1"/>
</item>
<item>
<widget class="QLineEdit" name="floatEdit2"/>
</item>
<item>
<widget class="QLineEdit" name="floatEdit3"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLineEdit" name="doubleEdit0"/>
</item>
<item>
<widget class="QLineEdit" name="doubleEdit1"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QLineEdit" name="longLongEdit0"/>
</item>
<item>
<widget class="QLineEdit" name="longLongEdit1"/>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="lowRegister">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="labelLowRegister">
<property name="text">
<string>Low:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_29">
<property name="text">
<string>byte</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>Short:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_17">
<property name="text">
<string>Long:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>Float:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="text">
<string>Double:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>int64:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QLineEdit" name="hexEdit_2">
<property name="inputMethodHints">
<set>Qt::ImhUppercaseOnly</set>
</property>
<property name="maxLength">
<number>32</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QLabel" name="label_21">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>0-1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_22">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>2-3</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_23">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>4-5</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_24">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>6-7</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_25">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>8-9</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_26">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>A-B</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_27">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>C-D</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_28">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>E-F</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QLineEdit" name="shortEdit0_2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit1_2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit2_2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit3_2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit4_2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit5_2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit6_2"/>
</item>
<item>
<widget class="QLineEdit" name="shortEdit7_2">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<item>
<widget class="QLineEdit" name="longEdit0_2"/>
</item>
<item>
<widget class="QLineEdit" name="longEdit1_2"/>
</item>
<item>
<widget class="QLineEdit" name="longEdit2_2"/>
</item>
<item>
<widget class="QLineEdit" name="longEdit3_2"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QLineEdit" name="floatEdit0_2"/>
</item>
<item>
<widget class="QLineEdit" name="floatEdit1_2"/>
</item>
<item>
<widget class="QLineEdit" name="floatEdit2_2"/>
</item>
<item>
<widget class="QLineEdit" name="floatEdit3_2"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_16">
<item>
<widget class="QLineEdit" name="doubleEdit0_2"/>
</item>
<item>
<widget class="QLineEdit" name="doubleEdit1_2"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<widget class="QLineEdit" name="longLongEdit0_2"/>
</item>
<item>
<widget class="QLineEdit" name="longLongEdit1_2"/>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_18">
<item>
<widget class="QRadioButton" name="radioHex">
<property name="text">
<string>Hexadecimal</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioSigned">
<property name="text">
<string>Signed</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioUnsigned">
<property name="text">
<string>Unsigned</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_30">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Unified hex value follows memory byte order.</string>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources>
<include location="../../resource.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>EditFloatRegister</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>EditFloatRegister</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -5,6 +5,7 @@
#include "Configuration.h"
#include "WordEditDialog.h"
#include "LineEditDialog.h"
#include "EditFloatRegister.h"
#include "SelectFields.h"
void RegistersView::SetChangeButton(QPushButton* push_button)
@ -1308,6 +1309,11 @@ void RegistersView::operator delete(void* p)
_aligned_free(p);
}
/**
* @brief Get the label associated with the register
* @param register_selected the register
* @return the label
*/
QString RegistersView::getRegisterLabel(REGISTER_NAME register_selected)
{
char label_text[MAX_LABEL_SIZE] = "";
@ -1847,6 +1853,11 @@ void RegistersView::ModifyFields(QString title, STRING_VALUE_TABLE_t* table, SIZ
#define MODIFY_FIELDS_DISPLAY(title, table) ModifyFields(QString("Edit ") + QString(title), (STRING_VALUE_TABLE_t *) & table, SIZE_TABLE(table) )
/**
* @brief This function displays the appropriate edit dialog according to selected register
* @return Nothing.
*/
void RegistersView::displayEditDialog()
{
if(mFPU.contains(mSelected))
@ -1861,6 +1872,22 @@ void RegistersView::displayEditDialog()
MODIFY_FIELDS_DISPLAY("x87CW_PC", ControlWordPCValueStringTable);
else if(mSelected == x87SW_TOP)
MODIFY_FIELDS_DISPLAY("x87SW_TOP ST0=", StatusWordTOPValueStringTable);
else if(mFPUYMM.contains(mSelected))
{
EditFloatRegister mEditFloat(256, this);
mEditFloat.setWindowTitle(tr("Edit YMM register"));
mEditFloat.loadData(registerValue(&wRegDumpStruct, mSelected));
if(mEditFloat.exec() == QDialog::Accepted)
setRegister(mSelected, (duint)mEditFloat.getData());
}
else if(mFPUXMM.contains(mSelected))
{
EditFloatRegister mEditFloat(128, this);
mEditFloat.setWindowTitle(tr("Edit XMM register"));
mEditFloat.loadData(registerValue(&wRegDumpStruct, mSelected));
if(mEditFloat.exec() == QDialog::Accepted)
setRegister(mSelected, (duint)mEditFloat.getData());
}
else
{
bool errorinput = false;

View File

@ -0,0 +1,35 @@
#include "HexValidator.h"
#include <QObject>
HexValidator::HexValidator(QObject *parent) : QValidator(parent)
{
}
HexValidator::~HexValidator()
{
}
void HexValidator::fixup(QString& input) const
{
for(auto i : input)
{
if(!i.isDigit())
{
if(i >= QChar('a') && i <= QChar('f'))
i = i.toUpper();
else
input.remove(i);
}
}
}
QValidator::State HexValidator::validate(QString& input, int& pos) const
{
input = input.toUpper();
for(int i = 0; i < input.length(); i++)
{
if(!(input.at(i).isDigit() || (input.at(i) >= QChar('A') && input.at(i) <= QChar('F'))))
return State::Invalid;
}
return State::Acceptable;
}

View File

@ -0,0 +1,16 @@
#ifndef HEXVALIDATOR_H
#define HEXVALIDATOR_H
#include <QValidator>
class HexValidator : public QValidator
{
Q_OBJECT
public:
explicit HexValidator(QObject* parent = 0);
~HexValidator();
void fixup(QString& input) const;
State validate(QString& input, int& pos) const;
};
#endif // HEXVALIDATOR_H

View File

@ -0,0 +1,110 @@
#include "LongLongValidator.h"
LongLongValidator::LongLongValidator(DataType t, QObject *parent) : QValidator(parent), dt(t)
{
}
LongLongValidator::~LongLongValidator()
{
}
void LongLongValidator::fixup(QString& input) const
{
}
QValidator::State LongLongValidator::validate(QString& input, int& pos) const
{
bool ok = false;
if(input.isEmpty()) return State::Acceptable;
switch(dt)
{
case SignedShort:
input.toShort(&ok);
if(!ok)
{
if(input == QString('-'))
return State::Acceptable;
if(input.toULongLong(&ok) > 32767)
{
if(ok)
{
input = "32767";
return State::Acceptable;
}
}
else if(input.toLongLong(&ok) < -32768)
{
if(ok)
{
input = "-32768";
return State::Acceptable;
}
}
return State::Invalid;
}
return State::Acceptable;
case UnsignedShort:
input.toShort(&ok);
if(!ok)
{
if(input.toULongLong(&ok) > 65535)
{
if(ok)
{
input = "65535";
return State::Acceptable;
}
}
return State::Invalid;
}
return State::Acceptable;
case SignedLong:
input.toLong(&ok);
if(!ok)
{
if(input == QString('-'))
return State::Acceptable;
if(input.toULongLong(&ok) > 2147483647)
{
if(ok)
{
input = "2147483647";
return State::Acceptable;
}
}
else if(input.toLongLong(&ok) < -2147483648)
{
if(ok)
{
input = "-2147483648";
return State::Acceptable;
}
}
return State::Invalid;
}
return State::Acceptable;
case UnsignedLong:
input.toULong(&ok);
if(!ok)
{
if(input.toULongLong(&ok) > 4294967295)
if(ok)
{
input = "4294967295";
return State::Acceptable;
}
return State::Invalid;
}
return State::Acceptable;
case SignedLongLong:
input.toLongLong(&ok);
if(!ok)
return input == QChar('-') ? State::Acceptable : State::Invalid;
return State::Acceptable;
case UnsignedLongLong:
input.toULongLong(&ok);
return ok ? State::Acceptable : State::Invalid;
}
return State::Invalid;
}

View File

@ -0,0 +1,29 @@
#ifndef LONGLONGVALIDATOR_H
#define LONGLONGVALIDATOR_H
#include <QValidator>
class LongLongValidator : public QValidator
{
Q_OBJECT
public:
enum DataType
{
SignedShort,
UnsignedShort,
SignedLong,
UnsignedLong,
SignedLongLong,
UnsignedLongLong
};
explicit LongLongValidator(DataType t, QObject* parent = 0);
~LongLongValidator();
void fixup(QString& input) const;
State validate(QString& input, int& pos) const;
private:
DataType dt;
};
#endif // LONGLONGVALIDATOR_H

View File

@ -146,7 +146,10 @@ SOURCES += \
Src/Gui/SEHChainView.cpp \
Src/Gui/EditBreakpointDialog.cpp \
Src/Gui/CPUArgumentWidget.cpp \
Src/Gui/HandlesView.cpp
Src/Gui/HandlesView.cpp \
Src/Gui/EditFloatRegister.cpp \
Src/Utils/HexValidator.cpp \
Src/Utils/LongLongValidator.cpp
HEADERS += \
@ -233,7 +236,10 @@ HEADERS += \
Src/Gui/SEHChainView.h \
Src/Gui/EditBreakpointDialog.h \
Src/Gui/CPUArgumentWidget.h \
Src/Gui/HandlesView.h
Src/Gui/HandlesView.h \
Src/Gui/EditFloatRegister.h \
Src/Utils/HexValidator.h \
Src/Utils/LongLongValidator.h
FORMS += \
Src/Gui/MainWindow.ui \
@ -260,7 +266,8 @@ FORMS += \
Src/Gui/EntropyDialog.ui \
Src/Gui/AssembleDialog.ui \
Src/Gui/EditBreakpointDialog.ui \
Src/Gui/CPUArgumentWidget.ui
Src/Gui/CPUArgumentWidget.ui \
Src/Gui/EditFloatRegister.ui
TRANSLATIONS = \
Translations/x64dbg_zh_CN.ts