Skip to content

Commit

Permalink
GUI: implement all the missing SourceView features from before
Browse files Browse the repository at this point in the history
  • Loading branch information
mrexodia committed Apr 12, 2019
1 parent 4af8ff6 commit 51f53ee
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 4 deletions.
41 changes: 41 additions & 0 deletions src/gui/Src/Gui/SourceView.cpp
Expand Up @@ -26,6 +26,8 @@ SourceView::SourceView(QString path, duint addr, QWidget* parent)
setupContextMenu();

connect(this, SIGNAL(contextMenuSignal(QPoint)), this, SLOT(contextMenuSlot(QPoint)));
connect(this, SIGNAL(doubleClickedSignal()), this, SLOT(followDisassemblerSlot()));
connect(this, SIGNAL(enterPressedSignal()), this, SLOT(followDisassemblerSlot()));

Initialize();

Expand Down Expand Up @@ -116,9 +118,35 @@ void SourceView::contextMenuSlot(const QPoint & pos)
void SourceView::followDisassemblerSlot()
{
duint addr = addrFromIndex(getInitialSelection());
if(!DbgMemIsValidReadPtr(addr))
return;
DbgCmdExec(QString("disasm %1").arg(ToPtrString(addr)).toUtf8().constData());
}

void SourceView::followDumpSlot()
{
duint addr = addrFromIndex(getInitialSelection());
if(!DbgMemIsValidReadPtr(addr))
return;
DbgCmdExec(QString("dump %1").arg(ToPtrString(addr)).toUtf8().constData());
}

void SourceView::toggleBookmarkSlot()
{
duint addr = addrFromIndex(getInitialSelection());
if(!DbgMemIsValidReadPtr(addr))
return;

bool result;
if(DbgGetBookmarkAt(addr))
result = DbgSetBookmarkAt(addr, false);
else
result = DbgSetBookmarkAt(addr, true);
if(!result)
SimpleErrorBox(this, tr("Error!"), tr("DbgSetBookmarkAt failed!"));
GuiUpdateAllViews();
}

void SourceView::gotoLineSlot()
{
bool ok = false;
Expand Down Expand Up @@ -150,9 +178,22 @@ void SourceView::setupContextMenu()
{
return DbgMemIsValidReadPtr(addrFromIndex(getInitialSelection()));
});
mMenuBuilder->addAction(makeAction(DIcon("dump.png"), tr("Follow in &Dump"), SLOT(followDumpSlot())), [this](QMenu*)
{
return DbgMemIsValidReadPtr(addrFromIndex(getInitialSelection()));
});
mMenuBuilder->addSeparator();
mBreakpointMenu = new BreakpointMenu(this, getActionHelperFuncs(), [this]()
{
return addrFromIndex(getInitialSelection());
});
mBreakpointMenu->build(mMenuBuilder);
mMenuBuilder->addAction(makeShortcutAction(DIcon("bookmark_toggle.png"), tr("Toggle Bookmark"), SLOT(toggleBookmarkSlot()), "ActionToggleBookmark"));
mMenuBuilder->addSeparator();
mMenuBuilder->addAction(makeShortcutAction(DIcon("geolocation-goto.png"), tr("Go to line"), SLOT(gotoLineSlot()), "ActionGotoExpression"));
mMenuBuilder->addAction(makeAction(DIcon("source.png"), tr("Open source file"), SLOT(openSourceFileSlot())));
mMenuBuilder->addAction(makeAction(DIcon("source_show_in_folder.png"), tr("Show source file in directory"), SLOT(showInDirectorySlot())));
mMenuBuilder->addSeparator();
MenuBuilder* copyMenu = new MenuBuilder(this);
setupCopyColumnMenu(copyMenu);
mMenuBuilder->addMenu(makeMenu(DIcon("copy.png"), tr("&Copy")), copyMenu);
Expand Down
4 changes: 4 additions & 0 deletions src/gui/Src/Gui/SourceView.h
Expand Up @@ -3,6 +3,7 @@

#include <QWidget>
#include <AbstractStdTable.h>
#include "BreakpointMenu.h"

class FileLines;

Expand All @@ -25,12 +26,15 @@ class SourceView : public AbstractStdTable
private slots:
void contextMenuSlot(const QPoint & pos);
void followDisassemblerSlot();
void followDumpSlot();
void toggleBookmarkSlot();
void gotoLineSlot();
void openSourceFileSlot();
void showInDirectorySlot();

private:
MenuBuilder* mMenuBuilder = nullptr;
BreakpointMenu* mBreakpointMenu = nullptr;
QString mSourcePath;
duint mModBase;
int mTabSize = 4; //TODO: make customizable?
Expand Down
7 changes: 4 additions & 3 deletions src/gui/Src/Gui/SourceViewerManager.cpp
Expand Up @@ -28,11 +28,12 @@ void SourceViewerManager::loadSourceFile(QString path, duint addr)
SourceView* curView = (SourceView*)this->widget(i);
if(curView->getSourcePath().compare(path, Qt::CaseInsensitive) == 0) //file already loaded
{
QWidget* now = QApplication::focusWidget();
curView->setSelection(addr);
setCurrentIndex(i); //show that loaded tab
if(now)
now->setFocus();
QTimer::singleShot(50, [curView]()
{
curView->setFocus();
});
return;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/gui/Src/Utils/Configuration.cpp
Expand Up @@ -285,7 +285,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
insertMenuBuilderBools(&guiBool, "CallStackView", 50); //CallStackView
insertMenuBuilderBools(&guiBool, "ThreadView", 50); //Thread
insertMenuBuilderBools(&guiBool, "CPUStack", 50); //Stack
insertMenuBuilderBools(&guiBool, "SourceView", 10); //Source
insertMenuBuilderBools(&guiBool, "SourceView", 50); //Source
insertMenuBuilderBools(&guiBool, "DisassemblerGraphView", 50); //Graph
insertMenuBuilderBools(&guiBool, "XrefBrowseDialog", 10); //XrefBrowseDialog
insertMenuBuilderBools(&guiBool, "StructWidget", 8); //StructWidget
Expand Down

0 comments on commit 51f53ee

Please sign in to comment.