diff --git a/src/dialogs/CommentsDialog.cpp b/src/dialogs/CommentsDialog.cpp index 4d362d4f..5eb73445 100644 --- a/src/dialogs/CommentsDialog.cpp +++ b/src/dialogs/CommentsDialog.cpp @@ -1,12 +1,13 @@ #include "CommentsDialog.h" #include "ui_CommentsDialog.h" - +#include #include #include "core/Cutter.h" CommentsDialog::CommentsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::CommentsDialog) { + std::cout << "Comments dialog parent object name" << " " << parent->objectName().toStdString() << std::endl; ui->setupUi(this); setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint)); diff --git a/src/dialogs/FlagDialog.cpp b/src/dialogs/FlagDialog.cpp index 4e7742e2..dc9be919 100644 --- a/src/dialogs/FlagDialog.cpp +++ b/src/dialogs/FlagDialog.cpp @@ -2,15 +2,20 @@ #include "ui_FlagDialog.h" #include +#include #include "core/Cutter.h" FlagDialog::FlagDialog(RVA offset, QWidget *parent) : QDialog(parent), ui(new Ui::FlagDialog), offset(offset), flagName(""), flagOffset(RVA_INVALID) { + std::cout << "offset" << " " << offset << std::endl; + std::cout << "parent" << " " << parent << std::endl; + std::cout << "parentObjectName" << " " << parent->objectName().toStdString() << std::endl; // Setup UI ui->setupUi(this); setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint)); RzFlagItem *flag = rz_flag_get_i(Core()->core()->flags, offset); + std::cout << "flag" << " " << flag << std::endl; if (flag) { flagName = QString(flag->name); flagOffset = flag->offset; @@ -23,6 +28,7 @@ FlagDialog::FlagDialog(RVA offset, QWidget *parent) ui->nameEdit->setText(flag->name); ui->labelAction->setText(tr("Edit flag at %1").arg(RzAddressString(offset))); } else { + std::cout << "offset in if condition" << " " << offset << std::endl; ui->labelAction->setText(tr("Add flag at %1").arg(RzAddressString(offset))); } @@ -37,6 +43,7 @@ void FlagDialog::buttonBoxAccepted() { RVA size = ui->sizeEdit->text().toULongLong(); QString name = ui->nameEdit->text(); + std::cout << "name" << " " << name.toStdString() << std::endl; if (name.isEmpty()) { if (flagOffset != RVA_INVALID) { @@ -52,6 +59,7 @@ void FlagDialog::buttonBoxAccepted() } else { // Name provided and flag does not exist -> create the flag Core()->addFlag(offset, name, size); + std::cout << "Adding flag" << std::endl; } } close(); diff --git a/src/menus/DisassemblyContextMenu.cpp b/src/menus/DisassemblyContextMenu.cpp index 9879a16e..bcb124bd 100644 --- a/src/menus/DisassemblyContextMenu.cpp +++ b/src/menus/DisassemblyContextMenu.cpp @@ -11,7 +11,7 @@ #include "dialogs/EditStringDialog.h" #include "dialogs/BreakpointsDialog.h" #include "MainWindow.h" - +#include #include #include #include diff --git a/src/widgets/HexWidget.cpp b/src/widgets/HexWidget.cpp index c89337c6..444e000b 100644 --- a/src/widgets/HexWidget.cpp +++ b/src/widgets/HexWidget.cpp @@ -3,6 +3,8 @@ #include "Configuration.h" #include "dialogs/WriteCommandsDialogs.h" #include "dialogs/CommentsDialog.h" +#include "dialogs/FlagDialog.h" +#include #include #include @@ -50,7 +52,6 @@ HexWidget::HexWidget(QWidget *parent) setFocusPolicy(Qt::FocusPolicy::StrongFocus); connect(horizontalScrollBar(), &QScrollBar::valueChanged, this, [this]() { viewport()->update(); }); - connect(Config(), &Configuration::colorsUpdated, this, &HexWidget::updateColors); connect(Config(), &Configuration::fontsUpdated, this, [this]() { setMonospaceFont(Config()->getFont()); }); @@ -137,6 +138,21 @@ HexWidget::HexWidget(QWidget *parent) &HexWidget::onActionDeleteCommentTriggered); addAction(actionDeleteComment); + // Flag Option - Rohan + // Add flag option + actionFlag = new QAction(tr("Add Flag"), this); + actionFlag->setShortcutContext(Qt::ShortcutContext::WidgetWithChildrenShortcut); + actionFlag->setShortcut(Qt::Key_N); + connect(actionFlag, &QAction::triggered, this, &HexWidget::onActionAddFlagTriggered); + addAction(actionFlag); + + // Delete flag option + actionDeleteFlag = new QAction(tr("Delete Flag"), this); + actionDeleteFlag->setShortcutContext(Qt::ShortcutContext::WidgetWithChildrenShortcut); + connect(actionDeleteFlag, &QAction::triggered, this, + &HexWidget::onActionDeleteFlagTriggered); + addAction(actionDeleteFlag); + actionSelectRange = new QAction(tr("Select range"), this); connect(actionSelectRange, &QAction::triggered, this, [this]() { rangeDialog.open(cursor.address); }); @@ -214,6 +230,11 @@ HexWidget::HexWidget(QWidget *parent) connect(&warningTimer, &QTimer::timeout, this, &HexWidget::hideWarningRect); } +QWidget *HexWidget::parentForDialog() +{ + return parentWidget(); +} + void HexWidget::setMonospaceFont(const QFont &font) { if (!(font.styleHint() & QFont::Monospace)) { @@ -1160,6 +1181,17 @@ void HexWidget::contextMenuEvent(QContextMenuEvent *event) actionComment->setText(tr("Edit Comment")); } + QString flag = Core()->flagAt(cursor.address); + std::cout << "Flag at " << std::hex << cursor.address << " is " << flag.toStdString() << std::endl; + + if (flag.isNull() || flag.isEmpty()) { + actionDeleteFlag->setVisible(false); + actionFlag->setText(tr("Add Flag")); + } else { + actionDeleteFlag->setVisible(true); + actionFlag->setText(tr("Edit Flag")); + } + if (!ioModesController.canWrite()) { actionKeyboardEdit->setChecked(false); } @@ -1233,6 +1265,21 @@ void HexWidget::onActionAddCommentTriggered() CommentsDialog::addOrEditComment(addr, this); } +void HexWidget::onActionAddFlagTriggered() +{ + uint64_t addr = cursor.address; + std::cout << "Add flag at " << std::hex << addr << std::endl; + FlagDialog dialog(addr, this); + dialog.exec(); +} + +// slot for deleting flag action +void HexWidget::onActionDeleteFlagTriggered() +{ + uint64_t addr = cursor.address; + Core()->delFlag(addr); +} + // slot for deleting comment action void HexWidget::onActionDeleteCommentTriggered() { diff --git a/src/widgets/HexWidget.h b/src/widgets/HexWidget.h index 103040c2..9155ad3c 100644 --- a/src/widgets/HexWidget.h +++ b/src/widgets/HexWidget.h @@ -382,6 +382,8 @@ private slots: void copyAddress(); void onRangeDialogAccepted(); void onActionAddCommentTriggered(); + void onActionAddFlagTriggered(); + void onActionDeleteFlagTriggered(); void onActionDeleteCommentTriggered(); // Write command slots @@ -424,6 +426,7 @@ private: QString renderItem(int offset, QColor *color = nullptr); QChar renderAscii(int offset, QColor *color = nullptr); QString getFlagsAndComment(uint64_t address); + QWidget *parentForDialog(); /** * @brief Get the location on which operations such as Writing should apply. * @return Start of selection if multiple bytes are selected. Otherwise, the curren seek of the @@ -576,6 +579,8 @@ private: QAction *actionCopy; QAction *actionCopyAddress; QAction *actionComment; + QAction *actionFlag; + QAction *actionDeleteFlag; QAction *actionDeleteComment; QAction *actionSelectRange; QAction *actionKeyboardEdit; diff --git a/src/widgets/HexdumpWidget.h b/src/widgets/HexdumpWidget.h index aa80fdf0..32b0e195 100644 --- a/src/widgets/HexdumpWidget.h +++ b/src/widgets/HexdumpWidget.h @@ -34,6 +34,7 @@ public: Highlighter *highlighter; static QString getWidgetType(); + QWidget *parentForDialog(); public slots: void initParsing();