summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2019-04-13 21:06:13 -0400
committerBrian Potchik <brian@vector35.com>2019-04-13 21:06:13 -0400
commit8487508eecef5c96848c6a273e87872a2e14a84a (patch)
tree058ba6c6d923415190ca00536c3f4d181d27c7e5
parent6e8fb8761a627d79c26bde4e7351022f707bb6fb (diff)
Add MenuHelper for better menu behavior.
-rw-r--r--ui/addressindicator.h8
-rw-r--r--ui/disassemblyview.h7
-rw-r--r--ui/hexeditor.h8
-rw-r--r--ui/linearview.h8
-rw-r--r--ui/menus.h39
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
diff --git a/ui/menus.h b/ui/menus.h
index 0a455243..b3358304 100644
--- a/ui/menus.h
+++ b/ui/menus.h
@@ -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;
+};