GUI: Added option to enable/disable branch disassembly popup.
This commit is contained in:
parent
95315402f1
commit
ed1eab39e8
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -107,7 +107,6 @@ public slots:
|
|||
void setEncodeTypeRangeSlot();
|
||||
void graphSlot();
|
||||
void analyzeModuleSlot();
|
||||
//void togglePreviewSlot();
|
||||
void createThreadSlot();
|
||||
void copyTokenTextSlot();
|
||||
void copyTokenValueSlot();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -107,6 +107,7 @@ public:
|
|||
signals:
|
||||
void colorsUpdated();
|
||||
void fontsUpdated();
|
||||
void guiOptionsUpdated();
|
||||
void shortcutsUpdated();
|
||||
void tokenizerConfigUpdated();
|
||||
void disableAutoCompleteUpdated();
|
||||
|
|
Loading…
Reference in New Issue