X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=src%2Fgui%2Fwidgets%2FBasicBlockWidget.cxx;h=e08cba5e86ac394751f7e3db3d6ac88f14ab88fc;hb=d39f46d62a4c8ae94479101accae21aea5ce6e0e;hp=2a3f3b7d992f30f4f5089754a1016bf221ac13c7;hpb=9d118e5302db0c9aefe6b0e662795aef6f7b71a1;p=frida%2Ffrida.git diff --git a/src/gui/widgets/BasicBlockWidget.cxx b/src/gui/widgets/BasicBlockWidget.cxx index 2a3f3b7..e08cba5 100644 --- a/src/gui/widgets/BasicBlockWidget.cxx +++ b/src/gui/widgets/BasicBlockWidget.cxx @@ -16,8 +16,6 @@ public: CustomQGraphicsTextItem(const QString& text, BasicBlockWidget* parent) : QGraphicsTextItem(text, parent), parent(parent) {} void contextMenuEvent(QGraphicsSceneContextMenuEvent*); - - void adjustSize(); private: void addComment(int row, bool global); @@ -84,31 +82,6 @@ void CustomQGraphicsTextItem::contextMenuEvent(QGraphicsSceneContextMenuEvent* e menu.exec(event->screenPos()); } -/* QGraphicsTextItem has an adjustSize() function that is supposed to - * resize the widget to it's "ideal" size. However it totally ignores - * all directives to not wrap lines and "ideal" is actually just a - * bunch of heuristics. - * - * We are starting with a hopefully absurdly large startingwidth and - * reduce it untill a line is broken (detected by a change in - * height). As long as the width (1000 here) is sufficiently large, - * this should give us a widget without any line-wrapping. - * - * One needs to call this on a Pointer of tye CustomQGraphicsTextItem - * as the adjustSize() function is not polymorphic (vurtual). - */ -void CustomQGraphicsTextItem::adjustSize() { - int width = 1000; - setTextWidth(width); - int height = boundingRect().height(); - while (width > 250 && height == boundingRect().height()) { - setTextWidth(width -= 10); - } - width += 10; - if (width < 250) width = 250; - setTextWidth(width); -} - BasicBlockWidget::BasicBlockWidget(const QString& name, BasicBlock * block, Mainwindow * mainwindow) : width(200), height(45), name(name) @@ -117,7 +90,8 @@ BasicBlockWidget::BasicBlockWidget(const QString& name, BasicBlock * block, , logger(log4cxx::Logger::getLogger("gui.BasicBlockWidget." + name.toStdString())) { next[0] = NULL; next[1] = NULL; - block->getManager()->registerRenameFunctionEvent([=](RenameFunctionEvent* event) {updateFunctionName(event);}); + QObject::connect(block->getManager(), &InformationManager::renameFunctionEvent, + [=](RenameFunctionEvent* event) {updateFunctionName(event);}); _widget.reset(new CustomQGraphicsTextItem("", this)); _widget->setPos(5, 20); @@ -150,7 +124,8 @@ BasicBlockWidget::BasicBlockWidget(const QString& name, BasicBlock * block, }); instructions = block->getInstructions(); populateWidget(); - block->getManager()->registerChangeCommentEvent([=](ChangeCommentEvent* e) {changeCommentHandler(e);}); + QObject::connect(block->getManager(), &InformationManager::changeCommentEvent, + [=](ChangeCommentEvent* e) {changeCommentHandler(e);}); } void BasicBlockWidget::updateFunctionName(RenameFunctionEvent *event) { @@ -181,7 +156,7 @@ void BasicBlockWidget::updateFunctionName(RenameFunctionEvent *event) { c.insertText(event->new_name.c_str()); QGraphicsTextItem* item = _widget.get(); - ((CustomQGraphicsTextItem*)item)->adjustSize(); + item->adjustSize(); } } } @@ -210,13 +185,14 @@ void BasicBlockWidget::changeCommentHandler(ChangeCommentEvent* event) { cursor.removeSelectedText(); cursor.insertHtml(formatComments(&*inst_it)); QGraphicsTextItem* item = _widget.get(); - ((CustomQGraphicsTextItem*)item)->adjustSize(); + item->adjustSize(); } } void BasicBlockWidget::populateWidget() { int row; QTextTableFormat format; + QTextDocument* document = new QTextDocument(); format.setBorderStyle(QTextFrameFormat::BorderStyle_None); format.setBorder(0); @@ -226,7 +202,7 @@ void BasicBlockWidget::populateWidget() { _table->appendRows(1); } else { row = 0; - _table = _widget->textCursor().insertTable(1, 3, format); + _table = QTextCursor(document).insertTable(1, 3, format); } QString bytestring; for (uint8_t byte : inst.getBytes()) { @@ -257,7 +233,9 @@ void BasicBlockWidget::populateWidget() { _table->cellAt(row, 2).firstCursorPosition().insertHtml(formatComments(&inst)); } QGraphicsTextItem* item = _widget.get(); - ((CustomQGraphicsTextItem*)item)->adjustSize(); + item->setDocument(document); + item->adjustSize(); + updateSize(); } QString BasicBlockWidget::formatComments(Instruction* inst) { @@ -268,11 +246,16 @@ QString BasicBlockWidget::formatComments(Instruction* inst) { return (comments.empty() ? "" : ";; ") + comments.join("
").trimmed(); } -void BasicBlockWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem*, - QWidget*) { +void BasicBlockWidget::updateSize() { + prepareGeometryChange(); width = 10 + _widget->boundingRect().width(); height = 25 + _widget->boundingRect().height(); if (width < 250) width = 250; +} + +void BasicBlockWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem*, + QWidget*) { + updateSize(); painter->fillRect(0, 0, width, height, currentColor); painter->setPen(QColor(0x00, 0x00, 0xff, 0xff));