]> git.siccegge.de Git - frida/frida.git/blobdiff - src/gui/widgets/BasicBlockWidget.cxx
Add doc repo as submodule
[frida/frida.git] / src / gui / widgets / BasicBlockWidget.cxx
index 78618c48c6c5ce3ad027b6ec04ef686ead216892..21f432fa0245670d6fbab2e8e88828f977303bbb 100644 (file)
@@ -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);
 
@@ -60,7 +58,7 @@ void CustomQGraphicsTextItem::contextMenuEvent(QGraphicsSceneContextMenuEvent* e
                QAction* act = menu.addAction(c.selectedText() + " is a Function");
                QObject::connect(act, &QAction::triggered,
                                 [=]() {
-                                        parent->mainwindow->requestNewFunctionByAddress(address);
+                                        emit parent->mainwindow->requestNewFunctionByAddress(address);
                                         if (NULL == table) return;
                                         int row = table->cellAt(c).row();
                                         uint64_t insAddress = parent->instructions[row].getAddress();
@@ -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)
@@ -183,7 +156,7 @@ void BasicBlockWidget::updateFunctionName(RenameFunctionEvent *event) {
                                        c.insertText(event->new_name.c_str());
 
                                        QGraphicsTextItem* item = _widget.get();
-                                       ((CustomQGraphicsTextItem*)item)->adjustSize();
+                                       item->adjustSize();
                                }
                        }
                }
@@ -212,7 +185,7 @@ void BasicBlockWidget::changeCommentHandler(ChangeCommentEvent* event) {
                cursor.removeSelectedText();
                cursor.insertHtml(formatComments(&*inst_it));
                QGraphicsTextItem* item = _widget.get();
-               ((CustomQGraphicsTextItem*)item)->adjustSize();
+               item->adjustSize();
        }
 }
 
@@ -261,7 +234,8 @@ void BasicBlockWidget::populateWidget() {
        }
        QGraphicsTextItem* item = _widget.get();
        item->setDocument(document);
-       ((CustomQGraphicsTextItem*)item)->adjustSize();
+       item->adjustSize();
+       updateSize();
 }
 
 QString BasicBlockWidget::formatComments(Instruction* inst) {
@@ -272,11 +246,16 @@ QString BasicBlockWidget::formatComments(Instruction* inst) {
        return (comments.empty() ? "" : ";; ") + comments.join("<br />").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));