summaryrefslogtreecommitdiff
path: root/ui/clickablelabel.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2021-06-02 11:27:24 -0400
committerRusty Wagner <rusty.wagner@gmail.com>2021-07-28 19:31:25 -0400
commitc08ddcab02433cb5078b6cfea11bf972e47b3169 (patch)
tree02f05276ac497521a76e1591f3776e4f1cfe31d9 /ui/clickablelabel.h
parent8c0fa1737552e548909a435ddcc2b661a71b5da9 (diff)
Add sidebar and move some dock widgets to it
Diffstat (limited to 'ui/clickablelabel.h')
-rw-r--r--ui/clickablelabel.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/ui/clickablelabel.h b/ui/clickablelabel.h
index 4025d7c3..606ec369 100644
--- a/ui/clickablelabel.h
+++ b/ui/clickablelabel.h
@@ -1,8 +1,21 @@
#pragma once
+#include <QtCore/QTimer>
#include <QtGui/QColor>
#include <QtGui/QPainter>
+#include <QtGui/QPaintEvent>
#include <QtWidgets/QLabel>
+#include "uicontext.h"
+
+
+struct BINARYNINJAUIAPI IconImage
+{
+ QImage original;
+ QImage active, activeHover;
+ QImage inactive, inactiveHover;
+
+ static IconImage generate(const QImage& src);
+};
class BINARYNINJAUIAPI ClickableLabel: public QLabel
@@ -20,6 +33,39 @@ protected:
};
+class BINARYNINJAUIAPI ClickableIcon: public QWidget
+{
+ Q_OBJECT
+
+ IconImage m_image;
+ bool m_canToggle = false;
+ bool m_active = true;
+ bool m_hover = false;
+ QTimer* m_timer;
+
+public:
+ ClickableIcon(const QImage& icon, const QSize& desiredPointSize);
+
+ void setAllowToggle(bool canToggle);
+ void setActive(bool state);
+ bool active() const { return m_active; }
+
+Q_SIGNALS:
+ void clicked();
+ void toggle(bool newState);
+
+private Q_SLOTS:
+ void underMouseTimerEvent();
+ void handleToggle();
+
+protected:
+ void enterEvent(QEnterEvent* event) override;
+ void leaveEvent(QEvent* event) override;
+ void paintEvent(QPaintEvent* event) override;
+ void mouseReleaseEvent(QMouseEvent* event) override { if (event->button() == Qt::LeftButton) Q_EMIT clicked(); }
+};
+
+
class BINARYNINJAUIAPI ClickableStateLabel: public ClickableLabel
{
Q_OBJECT