diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2021-06-02 11:27:24 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2021-07-28 19:31:25 -0400 |
| commit | c08ddcab02433cb5078b6cfea11bf972e47b3169 (patch) | |
| tree | 02f05276ac497521a76e1591f3776e4f1cfe31d9 /ui/typeview.h | |
| parent | 8c0fa1737552e548909a435ddcc2b661a71b5da9 (diff) | |
Add sidebar and move some dock widgets to it
Diffstat (limited to 'ui/typeview.h')
| -rw-r--r-- | ui/typeview.h | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/ui/typeview.h b/ui/typeview.h index f31f2aae..5d0a59fc 100644 --- a/ui/typeview.h +++ b/ui/typeview.h @@ -17,6 +17,7 @@ #include "render.h" #include "menus.h" #include "xreflist.h" +#include "clickablelabel.h" #define TYPE_VIEW_UPDATE_CHECK_INTERVAL 200 @@ -102,7 +103,11 @@ class BINARYNINJAUIAPI TypeView: public QAbstractScrollArea, public View, public QWidget* m_lineNumberArea; int m_lineNumberAreaWidth = 0; int m_lineCount = 0; - int m_cols, m_rows, m_paddingCols; + size_t m_systemTypesHidden = 0; + std::optional<size_t> m_showSystemTypesLine; + size_t m_typesFiltered = 0; + std::optional<size_t> m_clearFilterLine; + int m_cols, m_rows, m_paddingCols, m_offsetPaddingWidth; uint64_t m_maxOffset; size_t m_offsetWidth; HighlightTokenState m_highlight; @@ -130,6 +135,8 @@ class BINARYNINJAUIAPI TypeView: public QAbstractScrollArea, public View, public QAction* m_actionCopy; QAction* m_actionSelectAll; + bool m_compact; + void adjustSize(int width, int height); void refreshAllTypes(); @@ -163,7 +170,7 @@ class BINARYNINJAUIAPI TypeView: public QAbstractScrollArea, public View, public static TypeDefinitionLine getTypeDefinitionHeaderLine(PlatformRef platform, const std::string& name, TypeRef type); public: - explicit TypeView(BinaryViewRef data, ViewFrame* view, TypesContainer* container); + explicit TypeView(BinaryViewRef data, ViewFrame* view, TypesContainer* container, bool compact = false); virtual ~TypeView(); virtual bool findNextData(uint64_t start, uint64_t end, const BinaryNinja::DataBuffer& data, uint64_t& addr, BNFindFlag flags, @@ -230,6 +237,8 @@ public: const std::string& varName, size_t index, TypeRef type, TypeRef parent, BinaryViewRef data, int paddingCols, bool collapsed = false); + void showContextMenu(Menu* source = nullptr); + protected: virtual void resizeEvent(QResizeEvent* event) override; virtual void paintEvent(QPaintEvent* event) override; @@ -295,8 +304,7 @@ class BINARYNINJAUIAPI TypeFilter: public QWidget Q_OBJECT TypesContainer* m_container; - ExpandableGroup* m_group; - QComboBox* m_showTypes; + ClickableIcon* m_showSystemTypes; QLineEdit* m_textFilter; bool MatchesAutoFilter(BinaryViewRef data, const BinaryNinja::QualifiedName& name); @@ -306,12 +314,15 @@ Q_SIGNALS: void filterChanged(); public: - TypeFilter(TypesContainer* container); + TypeFilter(TypesContainer* container = nullptr); + void setContainer(TypesContainer* container) { m_container = container; } - std::map<BinaryNinja::QualifiedName, std::vector<TypeDefinitionLine>> GetFilteredTypeLines(BinaryViewRef data, int padding); + std::map<BinaryNinja::QualifiedName, std::vector<TypeDefinitionLine>> GetFilteredTypeLines( + BinaryViewRef data, int padding, size_t& systemTypesHidden, size_t& typesFiltered); void showAndFocus(); - uint64_t getCurrentTypeFilter(); - void setTypeFilter(uint64_t typesToShow); + bool areAutoTypesVisible(); + void setShowAutoTypes(bool showAutoTypes); + void clearTextFilter(); }; @@ -324,7 +335,8 @@ class BINARYNINJAUIAPI TypesContainer: public QWidget, public ViewContainer UIActionHandler m_actionHandler; public: - TypesContainer(BinaryViewRef data, ViewFrame* view); + TypesContainer(BinaryViewRef data, ViewFrame* view, + TypeFilter* filter = nullptr, bool compact = false); virtual View* getView() override { return m_typeView; } TypeView* getTypesView() { return m_typeView; } @@ -335,3 +347,32 @@ public: protected: virtual void focusInEvent(QFocusEvent* event) override; }; + + +class BINARYNINJAUIAPI TypeViewSidebarWidget: public SidebarWidget +{ + Q_OBJECT + + TypesContainer* m_container; + QWidget* m_header; + Menu m_addMenu; + +public: + TypeViewSidebarWidget(BinaryViewRef data, ViewFrame* frame); + + TypesContainer* container() const { return m_container; } + virtual void focus() override; + + virtual QWidget* headerWidget() override { return m_header; } + +private Q_SLOTS: + void showAddMenu(); +}; + + +class BINARYNINJAUIAPI TypeViewSidebarWidgetType: public SidebarWidgetType +{ +public: + TypeViewSidebarWidgetType(); + virtual SidebarWidget* createWidget(ViewFrame* frame, BinaryViewRef data) override; +}; |
