1
0
Fork 0

GUI: Added option to enable/disable branch disassembly popup.

This commit is contained in:
Jack Reez 2020-06-14 18:28:42 +05:30 committed by Duncan Ogilvie
parent 95315402f1
commit ed1eab39e8
12 changed files with 48 additions and 29 deletions

View File

@ -58,6 +58,7 @@ AbstractTableView::AbstractTableView(QWidget* parent)
mShouldReload = true;
mAllowPainting = true;
mDrawDebugOnly = false;
mPopupEnabled = true;
// ScrollBar Init
setVerticalScrollBar(new AbstractTableScrollBar(verticalScrollBar()));
@ -1295,6 +1296,12 @@ void AbstractTableView::prepareData()
/************************************************************************************
DisassemblyPopup
************************************************************************************/
void AbstractTableView::setDisassemblyPopupEnabled(bool enable)
{
mPopupEnabled = enable;
}
duint AbstractTableView::getDisassemblyPopupAddress(int mousex, int mousey)
{
Q_UNUSED(mousex)
@ -1304,7 +1311,7 @@ duint AbstractTableView::getDisassemblyPopupAddress(int mousex, int mousey)
void AbstractTableView::ShowDisassemblyPopup(duint addr, int x, int y)
{
if(!addr)
if(!mPopupEnabled || !addr)
{
if(mDisassemblyPopup)
mDisassemblyPopup->hide();

View File

@ -112,6 +112,7 @@ public:
void setDrawDebugOnly(bool value);
bool getAllowPainting() const;
void setAllowPainting(bool allow);
void setDisassemblyPopupEnabled(bool enable);
// UI customization
void loadColumnFromConfig(const QString & viewName);
@ -208,6 +209,7 @@ private:
bool mShouldReload;
bool mDrawDebugOnly;
bool mPopupEnabled;
bool mAllowPainting;
static int mMouseWheelScrollDelta;

View File

@ -29,17 +29,10 @@ Disassembly::Disassembly(QWidget* parent) : AbstractTableView(parent)
mDisasm = new QBeaEngine(maxModuleSize);
tokenizerConfigUpdatedSlot();
updateConfigSlot();
mCodeFoldingManager = nullptr;
/*
duint setting;
if(BridgeSettingGetUint("Gui", "DisableBranchDestinationPreview", &setting))
mPopupEnabled = !setting;
else
mPopupEnabled = true;
*/
mIsLastInstDisplayed = false;
mGuiState = Disassembly::NoState;
// Update fonts immediately because they are used in calculations
@ -63,6 +56,7 @@ Disassembly::Disassembly(QWidget* parent) : AbstractTableView(parent)
connect(Bridge::getBridge(), SIGNAL(dbgStateChanged(DBGSTATE)), this, SLOT(debugStateChangedSlot(DBGSTATE)));
connect(this, SIGNAL(selectionChanged(dsint)), this, SLOT(selectionChangedSlot(dsint)));
connect(Config(), SIGNAL(tokenizerConfigUpdated()), this, SLOT(tokenizerConfigUpdatedSlot()));
connect(Config(), SIGNAL(guiOptionsUpdated()), this, SLOT(updateConfigSlot()));
Initialize();
}
@ -143,6 +137,11 @@ void Disassembly::updateFonts()
invalidateCachedFont();
}
void Disassembly::updateConfigSlot()
{
setDisassemblyPopupEnabled(!Config()->getBool("Disassembler", "NoBranchDisasmPreview"));
}
void Disassembly::tokenizerConfigUpdatedSlot()
{
mDisasm->UpdateConfig();

View File

@ -117,6 +117,7 @@ public slots:
void debugStateChangedSlot(DBGSTATE state);
void selectionChangedSlot(dsint parVA);
void tokenizerConfigUpdatedSlot();
void updateConfigSlot();
private:
enum GuiState
@ -240,7 +241,6 @@ protected:
duint mRvaDisplayBase;
dsint mRvaDisplayPageBase;
bool mHighlightingMode;
//bool mPopupEnabled;
MemoryPage* mMemPage;
QBeaEngine* mDisasm;
bool mShowMnemonicBrief;

View File

@ -350,15 +350,7 @@ void CPUDisassembly::setupRightClickContextMenu()
});
mMenuBuilder->addAction(makeShortcutAction(DIcon("highlight.png"), tr("&Highlighting mode"), SLOT(enableHighlightingModeSlot()), "ActionHighlightingMode"));
//The following code to manage branch preview has been disabled and will be implemented in a setting instead.
/*
QAction* togglePreview = makeShortcutAction(DIcon("branchpreview.png"), tr("Disable Branch Destination Preview"), SLOT(togglePreviewSlot()), "ActionToggleDestinationPreview");
mMenuBuilder->addAction(togglePreview, [this, togglePreview](QMenu*)
{
togglePreview->setText(mPopupEnabled ? tr("Disable Branch Destination Preview") : tr("Enable Branch Destination Preview"));
return false; //hide this menu from the user, but keep the shortcut working
});
*/
MenuBuilder* labelMenu = new MenuBuilder(this);
labelMenu->addAction(makeShortcutAction(tr("Label Current Address"), SLOT(setLabelSlot()), "ActionSetLabel"));
QAction* labelAddress = makeShortcutAction(tr("Label"), SLOT(setLabelAddressSlot()), "ActionSetLabelOperand");
@ -1983,15 +1975,7 @@ void CPUDisassembly::graphSlot()
if(DbgCmdExecDirect(QString("graph %1").arg(ToPtrString(rvaToVa(getSelectionStart()))).toUtf8().constData()))
emit displayGraphWidget();
}
/*
void CPUDisassembly::togglePreviewSlot()
{
if(mPopupEnabled == true)
ShowDisassemblyPopup(0, 0, 0);
mPopupEnabled = !mPopupEnabled;
BridgeSettingSetUint("Gui", "DisableBranchDestinationPreview", !mPopupEnabled);
}
*/
void CPUDisassembly::analyzeModuleSlot()
{
DbgCmdExec("cfanal");

View File

@ -107,7 +107,6 @@ public slots:
void setEncodeTypeRangeSlot();
void graphSlot();
void analyzeModuleSlot();
//void togglePreviewSlot();
void createThreadSlot();
void copyTokenTextSlot();
void copyTokenValueSlot();

View File

@ -2079,6 +2079,7 @@ void MainWindow::on_actionImportSettings_triggered()
DbgSettingsUpdated();
emit Config()->colorsUpdated();
emit Config()->fontsUpdated();
emit Config()->guiOptionsUpdated();
emit Config()->shortcutsUpdated();
emit Config()->tokenizerConfigUpdated();
GuiUpdateAllViews();

View File

@ -79,6 +79,7 @@ void SettingsDialog::LoadSettings()
settings.disasmTabBetweenMnemonicAndArguments = false;
settings.disasmNoCurrentModuleText = false;
settings.disasm0xPrefixValues = false;
settings.disasmNoBranchDisasmPreview = false;
settings.disasmNoSourceLineAutoComments = false;
settings.disasmMaxModuleSize = -1;
settings.guiNoForegroundWindow = true;
@ -213,6 +214,7 @@ void SettingsDialog::LoadSettings()
GetSettingBool("Disassembler", "PermanentHighlightingMode", &settings.disasmPermanentHighlightingMode);
GetSettingBool("Disassembler", "NoCurrentModuleText", &settings.disasmNoCurrentModuleText);
GetSettingBool("Disassembler", "0xPrefixValues", &settings.disasm0xPrefixValues);
GetSettingBool("Disassembler", "NoBranchDisasmPreview", &settings.disasmNoBranchDisasmPreview);
GetSettingBool("Disassembler", "NoSourceLineAutoComments", &settings.disasmNoSourceLineAutoComments);
if(BridgeSettingGetUint("Disassembler", "MaxModuleSize", &cur))
settings.disasmMaxModuleSize = int(cur);
@ -227,6 +229,7 @@ void SettingsDialog::LoadSettings()
ui->chkPermanentHighlightingMode->setChecked(settings.disasmPermanentHighlightingMode);
ui->chkNoCurrentModuleText->setChecked(settings.disasmNoCurrentModuleText);
ui->chk0xPrefixValues->setChecked(settings.disasm0xPrefixValues);
ui->chkNoBranchDisasmPreview->setChecked(settings.disasmNoBranchDisasmPreview);
ui->chkNoSourceLinesAutoComments->setChecked(settings.disasmNoSourceLineAutoComments);
ui->spinMaximumModuleNameSize->setValue(settings.disasmMaxModuleSize);
@ -382,6 +385,7 @@ void SettingsDialog::SaveSettings()
BridgeSettingSetUint("Disassembler", "PermanentHighlightingMode", settings.disasmPermanentHighlightingMode);
BridgeSettingSetUint("Disassembler", "NoCurrentModuleText", settings.disasmNoCurrentModuleText);
BridgeSettingSetUint("Disassembler", "0xPrefixValues", settings.disasm0xPrefixValues);
BridgeSettingSetUint("Disassembler", "NoBranchDisasmPreview", settings.disasmNoBranchDisasmPreview);
BridgeSettingSetUint("Disassembler", "NoSourceLineAutoComments", settings.disasmNoSourceLineAutoComments);
BridgeSettingSetUint("Disassembler", "MaxModuleSize", settings.disasmMaxModuleSize);
@ -446,6 +450,11 @@ void SettingsDialog::SaveSettings()
emit Config()->asciiAddressDumpModeUpdated();
bAsciiAddressDumpModeUpdated = false;
}
if(bGuiOptionsUpdated)
{
emit Config()->guiOptionsUpdated();
bGuiOptionsUpdated = false;
}
DbgSettingsUpdated();
GuiUpdateAllViews();
}
@ -861,6 +870,12 @@ void SettingsDialog::on_chk0xPrefixValues_toggled(bool checked)
settings.disasm0xPrefixValues = checked;
}
void SettingsDialog::on_chkNoBranchDisasmPreview_toggled(bool checked)
{
bGuiOptionsUpdated = true;
settings.disasmNoBranchDisasmPreview = checked;
}
void SettingsDialog::on_chkNoSourceLinesAutoComments_toggled(bool checked)
{
settings.disasmNoSourceLineAutoComments = checked;

View File

@ -73,6 +73,7 @@ private slots:
void on_chkNoCurrentModuleText_toggled(bool checked);
void on_chkPermanentHighlightingMode_toggled(bool checked);
void on_chk0xPrefixValues_toggled(bool checked);
void on_chkNoBranchDisasmPreview_toggled(bool checked);
void on_chkNoSourceLinesAutoComments_toggled(bool checked);
void on_spinMaximumModuleNameSize_valueChanged(int arg1);
//Gui Tab
@ -173,6 +174,7 @@ private:
bool disasmNoCurrentModuleText;
bool disasmPermanentHighlightingMode;
bool disasm0xPrefixValues;
bool disasmNoBranchDisasmPreview;
bool disasmNoSourceLineAutoComments;
int disasmMaxModuleSize;
//Gui Tab
@ -206,6 +208,7 @@ private:
QList<RangeStruct> realExceptionRanges;
bool bJitOld;
bool bJitAutoOld;
bool bGuiOptionsUpdated;
bool bTokenizerConfigUpdated;
bool bDisableAutoCompleteUpdated;
bool bAsciiAddressDumpModeUpdated;

View File

@ -545,6 +545,13 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkNoBranchDisasmPreview">
<property name="text">
<string>Disable branch disassembly preview</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chk0xPrefixValues">
<property name="text">

View File

@ -265,6 +265,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
disassemblyBool.insert("NoHighlightOperands", false);
disassemblyBool.insert("PermanentHighlightingMode", false);
disassemblyBool.insert("0xPrefixValues", false);
disassemblyBool.insert("NoBranchDisasmPreview", false);
disassemblyBool.insert("NoCurrentModuleText", false);
defaultBools.insert("Disassembler", disassemblyBool);

View File

@ -107,6 +107,7 @@ public:
signals:
void colorsUpdated();
void fontsUpdated();
void guiOptionsUpdated();
void shortcutsUpdated();
void tokenizerConfigUpdated();
void disableAutoCompleteUpdated();