setWindowTitle(tr("FRIDA"));
- QTreeWidgetItem * external = new QTreeWidgetItem(listWidget, QStringList("External Functions"));
+ external = new QTreeWidgetItem(listWidget, QStringList("External Functions"));
external->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
external->setBackground(0, QBrush(QColor(0xff, 0xdd, 0xdd)));
- connect(mgr, &InformationManager::newFunctionEvent,
- [=] (NewFunctionEvent* event) {
- std::string name = event->function->getName();
- if (event->function->isDynamic()) {
- auto item = new QTreeWidgetItem(external, QStringList(name.c_str()));
- item->setBackground(0, QBrush(QColor(0xff, 0xdd, 0xdd)));
- } else {
- addFunction(event->function);
- }
+ connect(mgr, &InformationManager::resetEvent,
+ [this,mgr]() {
+ connect(this, SIGNAL(requestNewFunctionByAddress(uint64_t)),
+ mgr->getDisassembler(), SLOT(disassembleFunctionAt(uint64_t)));
});
+ connect(mgr, &InformationManager::newFunctionEvent,
+ this, &Mainwindow::handleNewFunctionEvent);
connect(mgr, &InformationManager::renameFunctionEvent,
[&](RenameFunctionEvent* event) {
if (objects_list_by_address.find(event->address) == objects_list_by_address.end())
});
}
+void Mainwindow::handleNewFunctionEvent(NewFunctionEvent event) {
+ std::string name = event.function->getName();
+ if (event.function->isDynamic()) {
+ auto item = new QTreeWidgetItem(external, QStringList(name.c_str()));
+ item->setBackground(0, QBrush(QColor(0xff, 0xdd, 0xdd)));
+ } else {
+ addFunction(event.function);
+ }
+}
+
void Mainwindow::quit()
{
QMessageBox messageBox;
NewFunctionDialog dialog;
int result = dialog.exec();
if (QDialog::Accepted == result) {
- requestNewFunctionByAddress(dialog.result());
+ emit requestNewFunctionByAddress(dialog.result());
} else {
LOG4CXX_DEBUG(logger, "requestNewFunction aborted");
}
}
}
-void Mainwindow::requestNewFunctionByAddress(uint64_t address) {
- LOG4CXX_DEBUG(logger, "requesting Function at " << std::hex << address);
- manager->getDisassembler()->disassembleFunctionAt(address);
- switchMainPlaneToAddress(address);
-}
-
void Mainwindow::renameFunction(Function* function) {
SimpleStringDialog dialog("New name");
int result = dialog.exec();