X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fgui%2Fwidgets%2FBasicBlockWidget.cxx;h=eee78c4ea55d06b47e672afeb10367967b3e8a30;hp=1cdc33f3dc7eb2ce4cf67f84ba8b1e77a0f24d0d;hb=9ec8606194f7996edf21615ac34007e1391eb80f;hpb=42617ae5ed5b400a66df8b59a705f6523eec71b8 diff --git a/src/gui/widgets/BasicBlockWidget.cxx b/src/gui/widgets/BasicBlockWidget.cxx index 1cdc33f..eee78c4 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,16 +233,16 @@ void BasicBlockWidget::populateWidget() { _table->cellAt(row, 2).firstCursorPosition().insertHtml(formatComments(&inst)); } QGraphicsTextItem* item = _widget.get(); - ((CustomQGraphicsTextItem*)item)->adjustSize(); + item->setDocument(document); + item->adjustSize(); } QString BasicBlockWidget::formatComments(Instruction* inst) { - QString comments; + QStringList comments; for (Comment* c: inst->comments()) { - comments += "
"; - comments += QString(c->getText().c_str()).toHtmlEscaped(); + comments << QString(c->getText().c_str()).toHtmlEscaped(); } - return (comments == "" ? "" : ";; ") + comments.trimmed(); + return (comments.empty() ? "" : ";; ") + comments.join("
").trimmed(); } void BasicBlockWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem*,