mirror of
https://github.com/rizinorg/cutter.git
synced 2025-01-09 21:45:26 +00:00
94 lines
2.8 KiB
C++
94 lines
2.8 KiB
C++
#include "WriteCommandsDialogs.h"
|
|
#include "ui_Base64EnDecodedWriteDialog.h"
|
|
#include "ui_IncrementDecrementDialog.h"
|
|
#include "ui_DuplicateFromOffsetDialog.h"
|
|
#include "Cutter.h"
|
|
|
|
#include <cmath>
|
|
#include <QFontDatabase>
|
|
|
|
Base64EnDecodedWriteDialog::Base64EnDecodedWriteDialog(QWidget* parent) : QDialog(parent),
|
|
ui(new Ui::Base64EnDecodedWriteDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
ui->decodeRB->click();
|
|
}
|
|
|
|
Base64EnDecodedWriteDialog::Mode Base64EnDecodedWriteDialog::getMode() const
|
|
{
|
|
return ui->decodeRB->isChecked() ? Decode : Encode;
|
|
}
|
|
|
|
QByteArray Base64EnDecodedWriteDialog::getData() const
|
|
{
|
|
return ui->base64LineEdit->text().toUtf8();
|
|
}
|
|
|
|
IncrementDecrementDialog::IncrementDecrementDialog(QWidget* parent) : QDialog(parent),
|
|
ui(new Ui::IncrementDecrementDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
ui->incrementRB->click();
|
|
|
|
ui->nBytesCB->addItems(QStringList()
|
|
<< tr("Byte")
|
|
<< tr("Word")
|
|
<< tr("Dword")
|
|
<< tr("Qword"));
|
|
|
|
ui->valueLE->setValidator(new QRegularExpressionValidator(QRegularExpression("[0-9a-fA-Fx]{1,18}"), ui->valueLE));
|
|
}
|
|
|
|
IncrementDecrementDialog::Mode IncrementDecrementDialog::getMode() const
|
|
{
|
|
return ui->incrementRB->isChecked() ? Increase : Decrease;
|
|
}
|
|
|
|
uint8_t IncrementDecrementDialog::getNBytes() const
|
|
{
|
|
// Shift left to keep index powered by two
|
|
// This is used to create the w1, w2, w4 and w8 commands based on the selected index.
|
|
return static_cast<uint8_t>(1 << ui->nBytesCB->currentIndex());
|
|
}
|
|
|
|
uint64_t IncrementDecrementDialog::getValue() const
|
|
{
|
|
return Core()->math(ui->valueLE->text());
|
|
}
|
|
|
|
DuplicateFromOffsetDialog::DuplicateFromOffsetDialog(QWidget* parent) : QDialog(parent),
|
|
ui(new Ui::DuplicateFromOffsetDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
ui->bytesLabel->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
|
ui->offsetLE->setValidator(new QRegularExpressionValidator(QRegularExpression("[0-9a-fA-Fx]{1,18}"), ui->offsetLE));
|
|
connect(ui->offsetLE, &QLineEdit::textChanged, this, &DuplicateFromOffsetDialog::refresh);
|
|
connect(ui->nBytesSB, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &DuplicateFromOffsetDialog::refresh);
|
|
}
|
|
|
|
RVA DuplicateFromOffsetDialog::getOffset() const
|
|
{
|
|
return Core()->math(ui->offsetLE->text());
|
|
}
|
|
|
|
size_t DuplicateFromOffsetDialog::getNBytes() const
|
|
{
|
|
return static_cast<size_t>(ui->nBytesSB->value());
|
|
}
|
|
|
|
void DuplicateFromOffsetDialog::refresh()
|
|
{
|
|
RVA offestFrom = getOffset();
|
|
|
|
QSignalBlocker sb(Core());
|
|
|
|
// Add space every two characters for word wrap in hex sequence
|
|
QRegularExpression re{"(.{2})"};
|
|
QString bytes = Core()->cmdRawAt(QString("p8 %1")
|
|
.arg(QString::number(getNBytes())),
|
|
offestFrom)
|
|
.replace(re, "\\1 ");
|
|
|
|
ui->bytesLabel->setText(bytes.trimmed());
|
|
}
|