diff options
| author | Brian Potchik <brian@vector35.com> | 2019-04-13 21:06:13 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2019-04-13 21:06:13 -0400 |
| commit | 8487508eecef5c96848c6a273e87872a2e14a84a (patch) | |
| tree | 058ba6c6d923415190ca00536c3f4d181d27c7e5 | |
| parent | 6e8fb8761a627d79c26bde4e7351022f707bb6fb (diff) | |
Add MenuHelper for better menu behavior.
| -rw-r--r-- | ui/addressindicator.h | 8 | ||||
| -rw-r--r-- | ui/disassemblyview.h | 7 | ||||
| -rw-r--r-- | ui/hexeditor.h | 8 | ||||
| -rw-r--r-- | ui/linearview.h | 8 | ||||
| -rw-r--r-- | ui/menus.h | 39 |
5 files changed, 48 insertions, 22 deletions
diff --git a/ui/addressindicator.h b/ui/addressindicator.h index 3ad40638..fd9326fe 100644 --- a/ui/addressindicator.h +++ b/ui/addressindicator.h @@ -5,12 +5,12 @@ #include "menus.h" #include "uicontext.h" -class BINARYNINJAUIAPI AddressIndicator: public QLabel + +class BINARYNINJAUIAPI AddressIndicator: public MenuHelper { Q_OBJECT uint64_t m_begin, m_end; - ContextMenuManager m_contextMenu; public: AddressIndicator(QWidget* parent); @@ -18,7 +18,5 @@ public: void setOffsets(uint64_t begin, uint64_t end); protected: - virtual void mousePressEvent(QMouseEvent* event); - virtual void enterEvent(QEvent* event); - virtual void leaveEvent(QEvent* event); + virtual void showMenu(); }; diff --git a/ui/disassemblyview.h b/ui/disassemblyview.h index 477081fb..abab2c86 100644 --- a/ui/disassemblyview.h +++ b/ui/disassemblyview.h @@ -58,20 +58,17 @@ public: static void registerActions(); private: - class DisassemblyViewOptionsWidget: public QLabel + class DisassemblyViewOptionsWidget: public MenuHelper { public: DisassemblyViewOptionsWidget(DisassemblyView* parent); protected: virtual void mousePressEvent(QMouseEvent* event); - virtual void enterEvent(QEvent* event); - virtual void leaveEvent(QEvent* event); + virtual void showMenu(); private: DisassemblyView* m_view; - Menu m_menu; - ContextMenuManager m_contextMenuManager; }; class DisassemblyViewStatusBarWidget: public StatusBarWidget diff --git a/ui/hexeditor.h b/ui/hexeditor.h index 26f877b9..b628a2dd 100644 --- a/ui/hexeditor.h +++ b/ui/hexeditor.h @@ -54,20 +54,16 @@ public: static void registerActions(); private: - class HexEditorHighlightWidget: public QLabel + class HexEditorHighlightWidget: public MenuHelper { public: HexEditorHighlightWidget(HexEditor* parent); protected: - virtual void mousePressEvent(QMouseEvent* event); - virtual void enterEvent(QEvent* event); - virtual void leaveEvent(QEvent* event); + virtual void showMenu(); private: HexEditor* m_editor; - Menu m_menu; - ContextMenuManager m_contextMenuManager; }; class HexEditorStatusBarWidget: public StatusBarWidget diff --git a/ui/linearview.h b/ui/linearview.h index 4c67e8d8..9df1aafc 100644 --- a/ui/linearview.h +++ b/ui/linearview.h @@ -36,20 +36,16 @@ class BINARYNINJAUIAPI LinearView: public QAbstractScrollArea, public View, publ { Q_OBJECT - class LinearViewOptionsWidget: public QLabel + class LinearViewOptionsWidget: public MenuHelper { public: LinearViewOptionsWidget(LinearView* parent); protected: - virtual void mousePressEvent(QMouseEvent* event); - virtual void enterEvent(QEvent* event); - virtual void leaveEvent(QEvent* event); + virtual void showMenu(); private: LinearView* m_view; - Menu m_menu; - ContextMenuManager m_contextMenuManager; }; class LinearViewStatusBarWidget: public StatusBarWidget @@ -1,12 +1,15 @@ #pragma once #include <QtCore/QPointer> +#include <QtCore/QTimer> +#include <QtWidgets/QLabel> #include <QtWidgets/QMenu> #include <QtWidgets/QWidget> #include <functional> #include <map> #include <string> #include "binaryninjaapi.h" +#include "action.h" #include "viewframe.h" class BINARYNINJAUIAPI ContextMenuManager @@ -23,3 +26,39 @@ public: MenuInstance* show(Menu* source, UIActionHandler* handler); bool isActive() { return !m_menu.isNull(); } }; + + +class BINARYNINJAUIAPI MenuHelper: public QLabel +{ + Q_OBJECT + + QPalette::ColorRole m_backgroundRole; + QPalette::ColorRole m_foregroundRole; + QPalette::ColorRole m_activeForegroundRole; + +protected: + Menu m_menu; + ContextMenuManager m_contextMenuManager; + QTimer* m_timer; + +public: + MenuHelper(QWidget* parent); + + void setBackgroundColorRole(QPalette::ColorRole role = QPalette::Highlight); + void setForegroundColorRole(QPalette::ColorRole role = QPalette::WindowText); + void setActiveForegroundColorRole(QPalette::ColorRole role = QPalette::HighlightedText); + +Q_SIGNALS: + void clicked(); + +protected Q_SLOTS: + virtual void showMenu() = 0; + +private Q_SLOTS: + void underMouseTimerEvent(); + +protected: + void enterEvent(QEvent* event) override; + void leaveEvent(QEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; +}; |
