mirror of
https://github.com/rizinorg/cutter.git
synced 2025-01-06 03:55:27 +00:00
91 lines
2.8 KiB
C++
91 lines
2.8 KiB
C++
#include "dialogs/TypesInteractionDialog.h"
|
|
#include "ui_TypesInteractionDialog.h"
|
|
|
|
#include "core/Cutter.h"
|
|
#include "common/Configuration.h"
|
|
#include "common/SyntaxHighlighter.h"
|
|
#include "widgets/TypesWidget.h"
|
|
|
|
#include <QFileDialog>
|
|
#include <QTemporaryFile>
|
|
|
|
TypesInteractionDialog::TypesInteractionDialog(QWidget *parent, bool readOnly)
|
|
: QDialog(parent), ui(new Ui::TypesInteractionDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
QFont font = Config()->getBaseFont();
|
|
ui->plainTextEdit->setFont(font);
|
|
ui->plainTextEdit->setPlainText("");
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
|
|
ui->plainTextEdit->setTabStopDistance(4 * QFontMetrics(font).horizontalAdvance(' '));
|
|
#endif
|
|
syntaxHighLighter = Config()->createSyntaxHighlighter(ui->plainTextEdit->document());
|
|
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
|
ui->plainTextEdit->setReadOnly(readOnly);
|
|
this->typeName = "";
|
|
}
|
|
|
|
TypesInteractionDialog::~TypesInteractionDialog() {}
|
|
|
|
void TypesInteractionDialog::setTypeName(QString name)
|
|
{
|
|
this->typeName = name;
|
|
}
|
|
|
|
void TypesInteractionDialog::on_selectFileButton_clicked()
|
|
{
|
|
QString filename =
|
|
QFileDialog::getOpenFileName(this, tr("Select file"), Config()->getRecentFolder(),
|
|
"Header files (*.h *.hpp);;All files (*)");
|
|
if (filename.isEmpty()) {
|
|
return;
|
|
}
|
|
Config()->setRecentFolder(QFileInfo(filename).absolutePath());
|
|
QFile file(filename);
|
|
if (!file.open(QIODevice::ReadOnly)) {
|
|
QMessageBox::critical(this, tr("Error"), file.errorString());
|
|
on_selectFileButton_clicked();
|
|
return;
|
|
}
|
|
ui->filenameLineEdit->setText(filename);
|
|
ui->plainTextEdit->setPlainText(file.readAll());
|
|
}
|
|
|
|
void TypesInteractionDialog::on_plainTextEdit_textChanged()
|
|
{
|
|
if (ui->plainTextEdit->toPlainText().isEmpty()) {
|
|
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
|
} else {
|
|
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
|
|
}
|
|
}
|
|
|
|
void TypesInteractionDialog::done(int r)
|
|
{
|
|
if (r == QDialog::Accepted) {
|
|
RzCoreLocked core(Core());
|
|
bool edited = rz_type_db_edit_base_type(
|
|
core->analysis->typedb, this->typeName.toUtf8().constData(),
|
|
ui->plainTextEdit->toPlainText().toUtf8().constData());
|
|
if (edited) {
|
|
emit newTypesLoaded();
|
|
QDialog::done(r);
|
|
return;
|
|
}
|
|
|
|
QMessageBox popup(this);
|
|
popup.setWindowTitle(tr("Error"));
|
|
popup.setText(tr("There was some error while loading new types"));
|
|
popup.setStandardButtons(QMessageBox::Ok);
|
|
popup.exec();
|
|
} else {
|
|
QDialog::done(r);
|
|
}
|
|
}
|
|
|
|
void TypesInteractionDialog::fillTextArea(QString content)
|
|
{
|
|
ui->layoutWidget->hide();
|
|
ui->plainTextEdit->setPlainText(content);
|
|
}
|