]> git.siccegge.de Git - frida/frida.git/blob - src/gui/widgets/BasicBlockWidget.hxx
Add support for backward edges
[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
10 class BasicBlockWidget : public QGraphicsItem
11 {
12 public:
13 BasicBlockWidget(const QString& name, BasicBlock * block);
14
15 void addItem(uint8_t* bytes, size_t num_bytes, const QString& line);
16
17 QRectF boundingRect() const {
18 qreal penWidth = 1;
19 QRectF result(- penWidth / 2, - penWidth / 2,
20 width + penWidth, height + penWidth);
21 return result;
22 }
23
24 void mouseMoveEvent(QGraphicsSceneMouseEvent * event) {
25 QGraphicsItem::mouseMoveEvent(event);
26 scene()->update();
27 }
28
29 QPointF getEntry() const {
30 return mapToScene(QPointF(width/2, 0));
31 }
32
33 std::array<QPointF, 3> getExits() const {
34 return { { mapToScene(QPointF( width/3, height)),
35 mapToScene(QPointF( width/2, height)),
36 mapToScene(QPointF(2*width/3, height)) } };
37 }
38
39 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
40 QWidget *widget) {
41 painter->fillRect(0, 0, width, height, QColor(0xcc, 0xcc, 0xff, 0xff));
42 painter->setPen(QColor(0x00, 0x00, 0xff, 0xff));
43 painter->drawRect(0, 0, width, height);
44 painter->drawText(5, 15, name);
45 if (_widget.rowCount() != 0)
46 _widget.render(painter, QPoint(5, 20));
47 }
48
49 void addPrevious(BasicBlockWidget * widget) {
50 previous.push_back(widget);
51 }
52
53 void addNext(BasicBlockWidget * left, BasicBlockWidget * right) {
54 next[0] = left;
55 next[1] = right;
56 }
57
58 BasicBlockWidget ** getNext() {
59 return next;
60 }
61
62 private:
63 uint32_t width, height;
64 QTableWidget _widget;
65 QString name;
66 BasicBlock * block;
67 std::vector<BasicBlockWidget*> previous;
68 BasicBlockWidget* next[2];
69 };
70
71 #endif