From 5c4abf48ab4b77555a79777bc37d52c842ee149a Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Wed, 6 Aug 2025 16:41:26 -0400 Subject: Add a Pinned Cross References tab to hold pinned references --- ui/xreflist.h | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'ui/xreflist.h') diff --git a/ui/xreflist.h b/ui/xreflist.h index ed29843b..c144da71 100644 --- a/ui/xreflist.h +++ b/ui/xreflist.h @@ -25,6 +25,7 @@ #include "viewframe.h" #include "fontsettings.h" #include "expandablegroup.h" +#include "tabwidget.h" class XrefHeader; @@ -676,7 +677,6 @@ class BINARYNINJAUIAPI CrossReferenceWidget : public SidebarWidget, public UICon SelectionInfoForXref m_curRef; SelectionInfoForXref m_newRef; std::optional m_pendingSelection; - bool m_navigating = false; bool m_navToNextOrPrevStarted = false; bool m_pinned; bool m_uiMaxItemsExceeded = false; @@ -729,11 +729,13 @@ class BINARYNINJAUIAPI CrossReferenceWidget : public SidebarWidget, public UICon void notifyRefresh() override; void notifyQuiesce(bool quiesce) override; + const SelectionInfoForXref& getCurrentSelection() const { return m_curRef; } + private Q_SLOTS: void hoverTimerEvent(); - void newPinnedPane(); + void newPinnedTab(); - public Q_SLOTS: +public Q_SLOTS: void referenceActivated(const QModelIndex& idx); void pinnedStateChanged(bool state); void selectionChanged(); @@ -753,6 +755,21 @@ class BINARYNINJAUIAPI CrossReferenceSidebarWidgetType : public SidebarWidgetTyp virtual SidebarWidget* createWidget(ViewFrame* frame, BinaryViewRef data) override; }; +/*! + \ingroup xreflist +*/ +class BINARYNINJAUIAPI PinnedCrossReferenceSidebarWidgetType : public SidebarWidgetType +{ +public: + PinnedCrossReferenceSidebarWidgetType(); + SidebarWidgetLocation defaultLocation() const override { return SidebarWidgetLocation::RightBottom; } + SidebarContextSensitivity contextSensitivity() const override { return PerViewTypeSidebarContext; } + bool alwaysShowTabs() const override { return true; } + QString noWidgetMessage() const override { return "No pinned cross references"; } + DockableTabStyle* tabStyle() const override { return new DefaultDockableTabStyle(); } + bool deactivateOnLastTabClose() const override { return true; } +}; + // https://github.com/CuriousCrow/QCheckboxCombo /*! QCheckboxCombo is a combobox widget that contains items with checkboxes. -- cgit v1.3.1