]> git.siccegge.de Git - frida/frida.git/blob - src/gui/widgets/BasicBlockWidget.hxx
2122bf208e6b55fa5323367fb4fd496a4c5dfeaf
[frida/frida.git] / src / gui / widgets / BasicBlockWidget.hxx
1 #ifndef INCLUDE__BasicBlockWidget_hxx
2 #define INCLUDE__BasicBlockWidget_hxx
3
4 #include "gui/qt.hxx"
5 #include "disassembler/BasicBlock.hxx"
6 #include <vector>
7 #include <cassert>
8 #include <tuple>
9 #include <array>
10
11 class Mainwindow;
12
13 class BasicBlockWidget : public QObject, public QGraphicsItem
14 {
15 Q_OBJECT
16 public:
17 BasicBlockWidget(const QString& name, BasicBlock * block, Mainwindow * mainwindow);
18
19 void addItem(uint8_t* bytes, size_t num_bytes, QString line, const QString& href);
20 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
21 QWidget *widget);
22 QRectF boundingRect() const;
23 std::array<QPointF, 3> getExits() const;
24
25 void mouseMoveEvent(QGraphicsSceneMouseEvent * event)
26 { QGraphicsItem::mouseMoveEvent(event); scene()->update(); }
27
28 QPointF getEntry() const
29 { return mapToScene(QPointF(width/2, 0)); }
30
31 void addPrevious(BasicBlockWidget * widget)
32 { previous.push_back(widget); }
33
34 void addNext(BasicBlockWidget * left, BasicBlockWidget * right)
35 { next[0] = left; next[1] = right; }
36
37 BasicBlockWidget ** getNext()
38 { return next; }
39
40 QString getName() const
41 { return name; }
42 private:
43 uint32_t width, height;
44 QString name;
45 QGraphicsTextItem _widget;
46 QTextTable* _table;
47 BasicBlock* block;
48 Mainwindow* mainwindow;
49 std::vector<BasicBlockWidget*> previous;
50 BasicBlockWidget* next[2];
51 };
52
53 #endif