#include "BasicBlockWidget.hxx" #include "gui/Mainwindow.hxx" BasicBlockWidget::BasicBlockWidget(const QString& name, BasicBlock * block, Mainwindow * mainwindow) : width(270), height(45) , _widget("", this) , _table(NULL), name(name) , block(block), mainwindow(mainwindow) { next[0] = NULL; next[1] = NULL; _widget.setTextInteractionFlags(Qt::TextSelectableByMouse| Qt::LinksAccessibleByMouse); _widget.setPos(5, 20); if (width < 250) width = 250; } void BasicBlockWidget::addItem(uint8_t* bytes, size_t num_bytes, QString line, const QString& href) { QString bytestring; int row; if (_table) { row = _table->rows(); _table->appendRows(1); } else { row = 0; QTextTableFormat format; format.setBorderStyle(QTextFrameFormat::BorderStyle_None); format.setBorder(0); _table = _widget.textCursor().insertTable(1, 3, format); } for (size_t i(0); i < num_bytes; ++i) { const char * hexdigits = "0123456789ABCDEF"; bytestring += hexdigits[(bytes[i] >> 4) & 0xF]; bytestring += hexdigits[bytes[i] & 0xF]; bytestring += ' '; } _table->cellAt(row, 0).firstCursorPosition().insertText(bytestring); line = line.replace('\t', ' ').toHtmlEscaped(); if (href != "") { line = "" + line + ""; } _table->cellAt(row, 1).firstCursorPosition().insertHtml(line); QObject::connect(&_widget, &QGraphicsTextItem::linkActivated, [=](QString str) { if (str.startsWith("function:")) { QString address = str.remove("function:"); mainwindow->switchMainPlaneToAddress(address.toInt(NULL, 16)); } }); width = 10 + _widget.boundingRect().width(); height = 25 + _widget.boundingRect().height(); if (width < 250) width = 250; }