1818 \ingroup uiapi
1919*/
2020
21+ class StringsListItem
22+ {
23+ std::variant<BNStringReference, BinaryNinja::DerivedString> m_contents;
24+
25+ public:
26+ StringsListItem (const BNStringReference& ref): m_contents(ref) {}
27+ StringsListItem (const BinaryNinja::DerivedString& str): m_contents(str) {}
28+
29+ bool IsStringReference () const { return std::holds_alternative<BNStringReference>(m_contents); }
30+ bool IsDerivedString () const { return std::holds_alternative<BinaryNinja::DerivedString>(m_contents); }
31+ std::optional<BNStringReference> GetStringReference () const ;
32+ std::optional<BinaryNinja::DerivedString> GetDerivedString () const ;
33+
34+ std::optional<uint64_t > GetStartAddress () const ;
35+ uint64_t GetLength () const ;
36+ size_t GetCharacterLength () const ;
37+ std::optional<BNStringType> GetStringType () const ;
38+ QString GetStringTypeName () const ;
39+ std::optional<BinaryNinja::StringRef> GetStringRef () const ;
40+
41+ QString GetString (BinaryViewRef data, bool simplified) const ;
42+
43+ std::optional<uint64_t > GetReferenceCount (const std::map<uint64_t , uint64_t >& refs,
44+ const std::map<BinaryNinja::DerivedString, uint64_t >& derivedRefs) const ;
45+
46+ bool operator ==(const StringsListItem& other) const ;
47+ bool operator !=(const StringsListItem& other) const ;
48+ };
49+
2150/* !
2251
2352 \ingroup stringsview
@@ -28,15 +57,16 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
2857
2958 struct StringUpdateEvent
3059 {
31- BNStringReference ref ;
60+ StringsListItem item ;
3261 bool added;
3362 };
3463
3564 QWidget* m_stringsList;
3665 BinaryViewRef m_data;
37- std::vector<BNStringReference > m_allStrings;
38- std::vector<BNStringReference > m_strings;
66+ std::vector<StringsListItem > m_allStrings;
67+ std::vector<StringsListItem > m_strings;
3968 std::map<uint64_t , uint64_t > m_refCounts;
69+ std::map<BinaryNinja::DerivedString, uint64_t > m_derivedRefCounts;
4070 std::string m_filter;
4171
4272 size_t m_filteredByOptions;
@@ -48,8 +78,8 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
4878 bool m_includeOnlyReferenced;
4979 bool m_includeOnlyFromCurrentFunction;
5080
51- static bool stringComparison (const BNStringReference & a, const BNStringReference & b);
52- bool matchString (const BNStringReference& stringRef );
81+ static bool stringComparison (const StringsListItem & a, const StringsListItem & b);
82+ bool matchString (const StringsListItem& item );
5383
5484 std::vector<StringUpdateEvent> getQueuedStringUpdates ();
5585
@@ -74,8 +104,8 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
74104 virtual QVariant data (const QModelIndex& i, int role) const override ;
75105 virtual QVariant headerData (int section, Qt::Orientation orientation, int role) const override ;
76106
77- BNStringReference getStringAt (const QModelIndex& i);
78- QModelIndex findString (const BNStringReference& ref );
107+ StringsListItem getStringAt (const QModelIndex& i);
108+ QModelIndex findString (const StringsListItem& item );
79109
80110 virtual void OnStringFound (BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override ;
81111 virtual void OnStringRemoved (BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override ;
@@ -147,15 +177,18 @@ class BINARYNINJAUIAPI StringsView : public QTableView, public View, public Filt
147177 StringsListModel* m_list;
148178 StringItemDelegate* m_itemDelegate;
149179
180+ bool m_selectionAddrValid = false ;
150181 uint64_t m_selectionBegin, m_selectionEnd;
151182 uint64_t m_currentlySelectedDataAddress;
183+ std::optional<BinaryNinja::DerivedString> m_derivedString;
152184
153185 public:
154186 StringsView (BinaryViewRef data, StringsContainer* container);
155187
156188 virtual BinaryViewRef getData () override { return m_data; }
157189 virtual uint64_t getCurrentOffset () override ;
158190 virtual BNAddressRange getSelectionOffsets () override ;
191+ virtual SelectionInfoForXref getSelectionForXref () override ;
159192 virtual void setSelectionOffsets (BNAddressRange range) override ;
160193 virtual bool navigate (uint64_t offset) override ;
161194
0 commit comments