From 2cfa4916c33b358af0380f52cbd109cfccafd6dc Mon Sep 17 00:00:00 2001 From: Radwan Selo <69148052+RadwanSelo@users.noreply.github.com> Date: Mon, 3 Aug 2020 20:11:02 +0300 Subject: [PATCH] Xrefs enhancement (#2362) * Add number of found results to xrefs dialog * Hide xref from if the item is not an VA --- src/dialogs/XrefsDialog.cpp | 19 +++++++++++++++---- src/dialogs/XrefsDialog.h | 3 ++- src/menus/AddressableItemContextMenu.cpp | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/dialogs/XrefsDialog.cpp b/src/dialogs/XrefsDialog.cpp index 4ea8f67c..e12ed73a 100644 --- a/src/dialogs/XrefsDialog.cpp +++ b/src/dialogs/XrefsDialog.cpp @@ -8,7 +8,7 @@ #include -XrefsDialog::XrefsDialog(MainWindow *main, QWidget *parent) : +XrefsDialog::XrefsDialog(MainWindow *main, QWidget *parent, bool hideXrefFrom) : QDialog(parent), addr(0), toModel(this), @@ -52,6 +52,10 @@ XrefsDialog::XrefsDialog(MainWindow *main, QWidget *parent) : connect(ui->toTreeWidget, &QAbstractItemView::doubleClicked, this, &QWidget::close); connect(ui->fromTreeWidget, &QAbstractItemView::doubleClicked, this, &QWidget::close); + + if (hideXrefFrom) { + hideXrefFromSection(); + } } XrefsDialog::~XrefsDialog() { } @@ -134,8 +138,8 @@ void XrefsDialog::updatePreview(RVA addr) void XrefsDialog::updateLabels(QString name) { - ui->label_xTo->setText(tr("X-Refs to %1:").arg(name)); - ui->label_xFrom->setText(tr("X-Refs from %1:").arg(name)); + ui->label_xTo->setText(tr("X-Refs to %1 (%2 results):").arg(name).arg(toModel.rowCount())); + ui->label_xFrom->setText(tr("X-Refs from %1 (%2 results):").arg(name).arg(fromModel.rowCount())); } void XrefsDialog::updateLabelsForVariables(QString name) @@ -144,14 +148,21 @@ void XrefsDialog::updateLabelsForVariables(QString name) ui->label_xFrom->setText(tr("Reads from %1").arg(name)); } +void XrefsDialog::hideXrefFromSection() +{ + ui->label_xFrom->hide(); + ui->fromTreeWidget->hide(); +} + void XrefsDialog::fillRefsForAddress(RVA addr, QString name, bool whole_function) { setWindowTitle(tr("X-Refs for %1").arg(name)); - updateLabels(name); toModel.readForOffset(addr, true, whole_function); fromModel.readForOffset(addr, false, whole_function); + updateLabels(name); + // Adjust columns to content qhelpers::adjustColumns(ui->fromTreeWidget, fromModel.columnCount(), 0); qhelpers::adjustColumns(ui->toTreeWidget, toModel.columnCount(), 0); diff --git a/src/dialogs/XrefsDialog.h b/src/dialogs/XrefsDialog.h index 975c72b4..a443f15f 100644 --- a/src/dialogs/XrefsDialog.h +++ b/src/dialogs/XrefsDialog.h @@ -44,7 +44,7 @@ class XrefsDialog : public QDialog Q_OBJECT public: - explicit XrefsDialog(MainWindow *main, QWidget *parent); + explicit XrefsDialog(MainWindow *main, QWidget *parent, bool hideXrefFrom=false); ~XrefsDialog(); void fillRefsForAddress(RVA addr, QString name, bool whole_function); @@ -78,6 +78,7 @@ private: void updateLabels(QString name); void updateLabelsForVariables(QString name); void updatePreview(RVA addr); + void hideXrefFromSection(); }; #endif // XREFSDIALOG_H diff --git a/src/menus/AddressableItemContextMenu.cpp b/src/menus/AddressableItemContextMenu.cpp index d03ccd90..8dd63fb2 100644 --- a/src/menus/AddressableItemContextMenu.cpp +++ b/src/menus/AddressableItemContextMenu.cpp @@ -85,7 +85,7 @@ void AddressableItemContextMenu::onActionCopyAddress() void AddressableItemContextMenu::onActionShowXrefs() { emit xrefsTriggered(); - XrefsDialog dialog(mainWindow, nullptr); + XrefsDialog dialog(mainWindow, nullptr, true); QString tmpName = name; if (name.isEmpty()) { name = RAddressString(offset);