X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fgui%2FMainwindow.cxx;h=764eb0376d1ca4acb12f56fb0faa7b37c27c98d1;hp=46ce2e98562a24cca3b63c460a935529a979de48;hb=21463b5c215974f253a0100231890ed909cd19e3;hpb=fd23bef07ee9d7adb3337d095f78adc6e0b18078 diff --git a/src/gui/Mainwindow.cxx b/src/gui/Mainwindow.cxx index 46ce2e9..764eb03 100644 --- a/src/gui/Mainwindow.cxx +++ b/src/gui/Mainwindow.cxx @@ -3,7 +3,7 @@ #include "disassembler/llvm/LLVMDisassembler.hxx" #include "widgets/CFGScene.hxx" - +#include "dialogs/NewFunctionDialog.hxx" #include #include #include @@ -41,6 +41,10 @@ Mainwindow::Mainwindow(InformationManager* mgr) addDockWidget(Qt::BottomDockWidgetArea, scripting); listWidget = new QListWidget(); + listWidget->setContextMenuPolicy(Qt::CustomContextMenu); + connect(listWidget, SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(showListContextMenu(const QPoint&))); + stackedWidget = new QStackedWidget(); dockWidget = new QDockWidget(tr("Functions"), this); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | @@ -64,7 +68,7 @@ Mainwindow::Mainwindow(InformationManager* mgr) void Mainwindow::quit() { QMessageBox messageBox; - messageBox.setWindowTitle(tr("Notepad")); + messageBox.setWindowTitle(tr("Frida")); messageBox.setText(tr("Do you really want to quit?")); messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); messageBox.setDefaultButton(QMessageBox::No); @@ -79,6 +83,30 @@ void Mainwindow::open() { manager->reset(fileName.toStdString()); } +void Mainwindow::showListContextMenu(const QPoint& point) { + QListWidgetItem * item = listWidget->itemAt(point); + if (item) { + LOG4CXX_DEBUG(logger, "WOHO " << item->text().toStdString()); + } else { + QMenu menu(this); + QAction * act = menu.addAction("AddFunction"); + connect(act, SIGNAL(triggered()), this, SLOT(requestNewFunction())); + + menu.exec(listWidget->mapToGlobal(point)); + } +} + +void Mainwindow::requestNewFunction() { + NewFunctionDialog dialog; + int result = dialog.exec(); + if (QDialog::Accepted == result) { + LOG4CXX_DEBUG(logger, "requesting Function at " << std::hex << dialog.result()); + manager->getDisassembler()->disassembleFunctionAt(dialog.result()); + } else { + LOG4CXX_DEBUG(logger, "requestNewFunction aborted"); + } +} + void Mainwindow::addFunction(Function* fun) { if (functions.find(fun) != functions.end()) return;