+ instructions = block->getInstructions();
+ populateWidget();
+ QObject::connect(block->getManager(), &InformationManager::changeCommentEvent,
+ [=](ChangeCommentEvent* e) {changeCommentHandler(e);});
+}
+
+void BasicBlockWidget::updateFunctionName(RenameFunctionEvent *event) {
+ QString search = QString("function:") + QString::number(event->address, 16);
+ QTextDocument *document = _widget->document();
+ QTextBlock b = document->begin();
+ while (b.isValid()) {
+ for (QTextBlock::iterator i = b.begin(); !i.atEnd(); ++i) {
+ QTextCharFormat format = i.fragment().charFormat();
+ bool isLink = format.isAnchor();
+ if (isLink)
+ {
+ if (search == format.anchorHref()) {
+ LOG4CXX_DEBUG(logger, i.fragment().text().toStdString() << " ---> "
+ << format.anchorHref().toStdString());
+
+ /* This should select the function name. It stars
+ * by selecting the whole link fragment from back
+ * to front and then moves one word to the back
+ * again deselecting whatever mnemonic is used for
+ * the call instruction.
+ */
+ QTextCursor c(b);
+ c.setPosition(i.fragment().position());
+ c.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, i.fragment().length());
+ 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();
+ item->adjustSize();
+ }
+ }
+ }
+ b = b.next();
+ }
+}
+
+void BasicBlockWidget::changeCommentHandler(ChangeCommentEvent* event) {
+ auto inst_it = std::find_if(instructions.begin(), instructions.end(),
+ [=](Instruction& inst) {
+ return inst.getAddress() == event->address;
+ });
+ if (inst_it != instructions.end()) {
+ if (std::find(inst_it->comments().begin(),
+ inst_it->comments().begin(),
+ event->comment) == inst_it->comments().end()) {
+ LOG4CXX_DEBUG(logger, "Change Comment Event -- New Comment!");
+ inst_it->comments().push_back(event->comment);
+ }
+ int row = inst_it - instructions.begin();
+ LOG4CXX_DEBUG(logger, "Inserting comment for instruction at row " << std::hex << row);
+ QTextCursor cursor = _table->cellAt(row, 2).lastCursorPosition();
+ while (cursor != _table->cellAt(row, 2).firstCursorPosition()) {
+ cursor.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor, 1);
+ }
+ cursor.removeSelectedText();
+ cursor.insertHtml(formatComments(&*inst_it));
+ QGraphicsTextItem* item = _widget.get();
+ item->adjustSize();
+ }
+}