+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());
+ 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());
+ }
+ }
+ }
+ 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));
+ }
+}
+
+void BasicBlockWidget::populateWidget() {
+ int row;
+ QTextTableFormat format;
+ format.setBorderStyle(QTextFrameFormat::BorderStyle_None);
+ format.setBorder(0);
+
+ for (Instruction& inst : instructions) {
+ if (_table) {
+ row = _table->rows();
+ _table->appendRows(1);
+ } else {
+ row = 0;
+ _table = _widget->textCursor().insertTable(1, 3, format);
+ }
+ QString bytestring;
+ for (uint8_t byte : inst.getBytes()) {
+ const char * hexdigits = "0123456789ABCDEF";
+ bytestring += hexdigits[(byte >> 4) & 0xF];
+ bytestring += hexdigits[byte & 0xF];
+ bytestring += ' ';
+ }
+ _table->cellAt(row, 0).firstCursorPosition().insertText(bytestring);
+
+ QString line = inst.getText().c_str();
+ line = line.replace('\t', ' ').toHtmlEscaped();
+ if (inst.getReference() != "") {
+ QString href = inst.getReference().c_str();
+ QStringList list = href.split(":");
+ if (list[0] == "function") {
+ uint64_t address = href.split(":")[1].toLongLong(NULL, 16);
+ Function* fun = block->getManager()->getFunction(address);