1
0
Fork 0

GUI: basics for a highlight context menu

This commit is contained in:
mrexodia 2016-08-30 22:30:48 +02:00
parent 53ea8b8332
commit 469094d503
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
4 changed files with 37 additions and 25 deletions

View File

@ -693,31 +693,21 @@ void Disassembly::mousePressEvent(QMouseEvent* event)
{
bool wAccept = false;
if(DbgIsDebugging() && ((event->buttons() & Qt::LeftButton) != 0) && ((event->buttons() & Qt::RightButton) == 0))
if(mHighlightingMode)
{
if(getGuiState() == AbstractTableView::NoState)
if(getColumnIndexFromX(event->x()) == 2) //click in instruction column
{
if(mHighlightingMode)
int rowOffset = getIndexOffsetFromY(transY(event->y()));
if(rowOffset < mInstBuffer.size())
{
if(getColumnIndexFromX(event->x()) == 2) //click in instruction column
CapstoneTokenizer::SingleToken token;
if(CapstoneTokenizer::TokenFromX(mInstBuffer.at(rowOffset).tokens, token, event->x(), mFontMetrics))
{
int rowOffset = getIndexOffsetFromY(transY(event->y()));
if(rowOffset < mInstBuffer.size())
if(CapstoneTokenizer::IsHighlightableToken(token) && !CapstoneTokenizer::TokenEquals(&token, &mHighlightToken))
mHighlightToken = token;
else
{
CapstoneTokenizer::SingleToken token;
if(CapstoneTokenizer::TokenFromX(mInstBuffer.at(rowOffset).tokens, token, event->x(), mFontMetrics))
{
if(CapstoneTokenizer::IsHighlightableToken(token) && !CapstoneTokenizer::TokenEquals(&token, &mHighlightToken))
mHighlightToken = token;
else
{
mHighlightToken = CapstoneTokenizer::SingleToken();
}
}
else
{
mHighlightToken = CapstoneTokenizer::SingleToken();
}
mHighlightToken = CapstoneTokenizer::SingleToken();
}
}
else
@ -725,7 +715,19 @@ void Disassembly::mousePressEvent(QMouseEvent* event)
mHighlightToken = CapstoneTokenizer::SingleToken();
}
}
else if(event->y() > getHeaderHeight())
}
else
{
mHighlightToken = CapstoneTokenizer::SingleToken();
}
return;
}
if(DbgIsDebugging() && ((event->buttons() & Qt::LeftButton) != 0) && ((event->buttons() & Qt::RightButton) == 0))
{
if(getGuiState() == AbstractTableView::NoState)
{
if(event->y() > getHeaderHeight())
{
dsint wIndex = getIndexOffsetFromY(transY(event->y()));

View File

@ -150,7 +150,6 @@ private:
QList<HistoryData_t> mVaHistory;
int mCurrentVa;
CapstoneTokenizer::SingleToken mHighlightToken;
protected:
// Configuration
@ -216,6 +215,7 @@ protected:
XREF_INFO mXrefInfo;
CodeFoldingHelper* mCodeFoldingManager;
DisassemblyPopup mDisassemblyPopup;
CapstoneTokenizer::SingleToken mHighlightToken;
};
#endif // DISASSEMBLY_H

View File

@ -52,9 +52,11 @@ void CPUDisassembly::mousePressEvent(QMouseEvent* event)
}
else
{
mHighlightContextMenu = false;
Disassembly::mousePressEvent(event);
if(mHighlightingMode) //disable highlighting mode after clicked
{
mHighlightContextMenu = true;
mHighlightingMode = false;
reloadData();
}
@ -201,8 +203,12 @@ void CPUDisassembly::setupFollowReferenceMenu(dsint wVA, QMenu* menu, bool isRef
void CPUDisassembly::contextMenuEvent(QContextMenuEvent* event)
{
QMenu wMenu(this);
mMenuBuilder->build(&wMenu);
wMenu.exec(event->globalPos());
if(!mHighlightContextMenu)
mMenuBuilder->build(&wMenu);
else if(mHighlightToken.text.length())
mHighlightMenuBuilder->build(&wMenu);
if(wMenu.actions().length())
wMenu.exec(event->globalPos());
}
/************************************************************************************
@ -595,6 +601,9 @@ void CPUDisassembly::setupRightClickContextMenu()
menu->addActions(mPluginMenu->actions());
return true;
}));
// Highlight menu
mHighlightMenuBuilder = new MenuBuilder(this);
}
void CPUDisassembly::gotoOriginSlot()

View File

@ -140,7 +140,8 @@ private:
CPUWidget* mParentCPUWindow;
MenuBuilder* mMenuBuilder;
MenuBuilder* mHighlightMenuBuilder;
bool mHighlightContextMenu = false;
};
#endif // CPUDISASSEMBLY_H