summaryrefslogtreecommitdiff
path: root/ui/clickablelabel.h
diff options
context:
space:
mode:
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