1
0
Fork 0

GUI: disassembly summary in graph

This commit is contained in:
mrexodia 2017-03-14 09:12:24 +01:00
parent f96a11fede
commit f7d3f7cb74
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
5 changed files with 29 additions and 3 deletions

View File

@ -39,6 +39,7 @@ DisassemblerGraphView::DisassemblerGraphView(QWidget* parent)
this->scroll_base_y = 0;
this->scroll_mode = false;
this->drawOverview = false;
this->onlySummary = false;
this->blocks.clear();
this->saveGraph = false;
@ -1559,7 +1560,13 @@ void DisassemblerGraphView::loadCurrentGraph()
}
instr.text = Text(richText);
block.instrs.push_back(instr);
//The summary contains calls, rets, user comments and string references
if(!onlySummary ||
instrTok.branchType == Instruction_t::Call ||
instrTok.instStr.startsWith("ret", Qt::CaseInsensitive) ||
(!commentText.text.isEmpty() && !autoComment) ||
commentText.text.contains('\"'))
block.instrs.push_back(instr);
}
}
func.blocks.push_back(block);
@ -1615,6 +1622,8 @@ void DisassemblerGraphView::setupContextMenu()
mMenuBuilder->addSeparator();
mMenuBuilder->addAction(mToggleOverview = makeShortcutAction(DIcon("graph.png"), tr("&Overview"), SLOT(toggleOverviewSlot()), "ActionGraphToggleOverview"));
mToggleOverview->setCheckable(true);
mMenuBuilder->addAction(mToggleSummary = makeShortcutAction(DIcon("summary.png"), tr("S&ummary"), SLOT(toggleSummarySlot()), "ActionGraphToggleSummary"));
mToggleSummary->setCheckable(true);
mMenuBuilder->addAction(mToggleSyncOrigin = makeShortcutAction(DIcon("lock.png"), tr("&Sync with origin"), SLOT(toggleSyncOriginSlot()), "ActionGraphSyncOrigin"));
mMenuBuilder->addAction(makeShortcutAction(DIcon("sync.png"), tr("&Refresh"), SLOT(refreshSlot()), "ActionRefresh"));
mMenuBuilder->addAction(makeShortcutAction(DIcon("image.png"), tr("&Save as image"), SLOT(saveImageSlot()), "ActionGraphSaveImage"));
@ -1705,8 +1714,20 @@ void DisassemblerGraphView::shortcutsUpdatedSlot()
void DisassemblerGraphView::toggleOverviewSlot()
{
drawOverview = !drawOverview;
mToggleOverview->setChecked(drawOverview);
this->viewport()->update();
if(onlySummary)
{
onlySummary = false;
loadCurrentGraph();
}
else
this->viewport()->update();
}
void DisassemblerGraphView::toggleSummarySlot()
{
drawOverview = false;
onlySummary = !onlySummary;
loadCurrentGraph();
}
void DisassemblerGraphView::selectionGetSlot(SELECTIONDATA* selection)

View File

@ -258,6 +258,7 @@ public slots:
void fontsUpdatedSlot();
void shortcutsUpdatedSlot();
void toggleOverviewSlot();
void toggleSummarySlot();
void selectionGetSlot(SELECTIONDATA* selection);
void tokenizerConfigUpdatedSlot();
void loadCurrentGraph();
@ -301,6 +302,7 @@ private:
CachedFontMetrics* mFontMetrics;
MenuBuilder* mMenuBuilder;
bool drawOverview;
bool onlySummary;
bool syncOrigin;
int overviewXOfs;
int overviewYOfs;
@ -311,6 +313,7 @@ private:
LayoutType layoutType;
QAction* mToggleOverview;
QAction* mToggleSummary;
QAction* mToggleSyncOrigin;
QColor disassemblyBackgroundColor;

View File

@ -534,6 +534,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
defaultShortcuts.insert("ActionGraphFollowDisassembler", Shortcut(tr("Actions -> Graph -> Follow in disassembler"), "Shift+Return"));
defaultShortcuts.insert("ActionGraphSaveImage", Shortcut(tr("Actions -> Graph -> Save as image"), "I"));
defaultShortcuts.insert("ActionGraphToggleOverview", Shortcut(tr("Actions -> Graph -> Toggle overview"), "O"));
defaultShortcuts.insert("ActionGraphToggleSummary", Shortcut(tr("Actions -> Graph -> Toggle summary"), "U"));
defaultShortcuts.insert("ActionGraphSyncOrigin", Shortcut(tr("Actions -> Graph -> Toggle sync with origin"), "S"));
defaultShortcuts.insert("ActionGraphDecompile", Shortcut(tr("Actions -> Graph -> Decompile"), "Tab"));
defaultShortcuts.insert("ActionIncrementx87Stack", Shortcut(tr("Actions -> Increment x87 Stack")));

BIN
src/gui/images/summary.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

View File

@ -293,5 +293,6 @@
<file>images/narrow.png</file>
<file>images/wide.png</file>
<file>images/layout.png</file>
<file>images/summary.png</file>
</qresource>
</RCC>