]> git.siccegge.de Git - frida/frida.git/commitdiff
Fix stupid Qt adjustSize() behavior
authorChristoph Egger <Christoph.Egger@fau.de>
Tue, 24 Mar 2015 17:27:07 +0000 (18:27 +0100)
committerChristoph Egger <Christoph.Egger@fau.de>
Tue, 24 Mar 2015 17:29:26 +0000 (18:29 +0100)
src/gui/widgets/BasicBlockWidget.cxx

index efa7ec34394ec6d2416933c99d452d1b054032fa..19af3bc39b4ff1eba7475bdf377fb4d1685f2086 100644 (file)
@@ -15,6 +15,8 @@ public:
        CustomQGraphicsTextItem(const QString& text, BasicBlockWidget* parent)
                : QGraphicsTextItem(text, parent), parent(parent) {}
        void contextMenuEvent(QGraphicsSceneContextMenuEvent*);
+
+       void adjustSize();
 private:
        void addComment(int row, bool global);
 
@@ -70,9 +72,21 @@ void CustomQGraphicsTextItem::contextMenuEvent(QGraphicsSceneContextMenuEvent* e
        menu.exec(event->screenPos());
 }
 
+void CustomQGraphicsTextItem::adjustSize() {
+       int width = 1000;
+       setTextWidth(width);
+       int height = boundingRect().height();
+       while (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(270), height(45), name(name)
+       : width(200), height(45), name(name)
        , _table(NULL)
        , block(block), mainwindow(mainwindow)
        , logger(log4cxx::Logger::getLogger("gui.BasicBlockWidget." + name.toStdString())) {
@@ -117,6 +131,9 @@ void BasicBlockWidget::updateFunctionName(RenameFunctionEvent *event) {
                                        c.movePosition(QTextCursor::Left,  QTextCursor::KeepAnchor, i.fragment().length());
                                        c.movePosition(QTextCursor::WordRight,  QTextCursor::KeepAnchor);
                                        c.insertText(event->new_name.c_str());
+
+                                       QGraphicsTextItem* item = _widget.get();
+                                       ((CustomQGraphicsTextItem*)item)->adjustSize();
                                }
                        }
                }
@@ -144,6 +161,8 @@ void BasicBlockWidget::changeCommentHandler(ChangeCommentEvent* event) {
                }
                cursor.removeSelectedText();
                cursor.insertHtml(formatComments(&*inst_it));
+               QGraphicsTextItem* item = _widget.get();
+               ((CustomQGraphicsTextItem*)item)->adjustSize();
        }
 }
 
@@ -168,7 +187,7 @@ void BasicBlockWidget::populateWidget() {
                        bytestring += hexdigits[byte & 0xF];
                        bytestring += ' ';
                }
-               _table->cellAt(row, 0).firstCursorPosition().insertText(bytestring);
+               _table->cellAt(row, 0).firstCursorPosition().insertHtml("<nobr>" + bytestring + "</nobr>");
 
                QString line = inst.getText().c_str();
                line = line.replace('\t', ' ').toHtmlEscaped();
@@ -186,9 +205,11 @@ void BasicBlockWidget::populateWidget() {
                        }
                        line = "<a href=\"" + href + "\">" + line + "</a>";
                }
-               _table->cellAt(row, 1).firstCursorPosition().insertHtml(line);
+               _table->cellAt(row, 1).firstCursorPosition().insertHtml("<nobr>" + line + "</nobr>");
                _table->cellAt(row, 2).firstCursorPosition().insertHtml(formatComments(&inst));
        }
+       QGraphicsTextItem* item = _widget.get();
+       ((CustomQGraphicsTextItem*)item)->adjustSize();
 }
 
 QString BasicBlockWidget::formatComments(Instruction* inst) {
@@ -202,7 +223,6 @@ QString BasicBlockWidget::formatComments(Instruction* inst) {
 
 void BasicBlockWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem*,
                   QWidget*) {
-       _widget->adjustSize();
        width = 10 + _widget->boundingRect().width();
        height = 25 + _widget->boundingRect().height();
        if (width < 250) width = 250;