Files
seer/src/SeerConfigDialog.cpp
T

577 lines
16 KiB
C++
Raw Normal View History

2025-08-26 17:26:05 -05:00
// SPDX-FileCopyrightText: 2021 Ernie Pasveer <epasveer@att.net>
//
// SPDX-License-Identifier: GPL-3.0-or-later
2021-12-20 18:04:53 -06:00
#include "SeerConfigDialog.h"
2021-12-19 11:11:42 -06:00
#include <QtWidgets/QListWidget>
#include <QtWidgets/QListWidgetItem>
#include <QtWidgets/QStackedWidget>
2022-08-21 16:54:37 -05:00
#include <QtWidgets/QPushButton>
#include <QtWidgets/QMessageBox>
#include <QtCore/QString>
#include <QtCore/QStringList>
2021-12-19 11:11:42 -06:00
#include <QtCore/QDebug>
SeerConfigDialog::SeerConfigDialog(QWidget* parent) : QDialog(parent) {
// Set up the UI.
setupUi(this);
// Setup the widgets
2023-08-19 20:31:12 -05:00
QSize size(96, 84);
int spacing = 12;
2021-12-19 11:11:42 -06:00
contentsListWidget->setViewMode(QListView::IconMode);
2023-08-19 20:31:12 -05:00
contentsListWidget->setIconSize(size);
2021-12-19 11:11:42 -06:00
contentsListWidget->setMovement(QListView::Static);
2023-08-19 20:31:12 -05:00
contentsListWidget->setSpacing(spacing);
contentsListWidget->setFixedWidth(size.width()+(spacing*3));
contentsListWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
2021-12-19 11:11:42 -06:00
2022-08-21 16:54:37 -05:00
QPushButton* resetButton = buttonBox->button(QDialogButtonBox::Reset);
if (resetButton) {
resetButton->setToolTip("Reset configuration for the current page to initial settings.");
}
QPushButton* okButton = buttonBox->button(QDialogButtonBox::Ok);
if (okButton) {
okButton->setToolTip("Accept configuration changes to all pages.");
}
QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
if (cancelButton) {
cancelButton->setToolTip("Discard configuration changes to all pages.");
}
2021-12-20 18:04:53 -06:00
// Create pages.
2023-09-03 22:19:45 -05:00
_seerConfigPage = new SeerSeerConfigPage;
2022-07-17 15:39:04 -05:00
_gdbConfigPage = new SeerGdbConfigPage;
_editorConfigPage = new SeerEditorConfigPage;
_sourceConfigPage = new SeerSourceConfigPage;
_assemblyConfigPage = new SeerAssemblyConfigPage;
_keysConfigPage = new SeerKeysConfigPage;
2023-09-03 22:19:45 -05:00
_rrConfigPage = new SeerRRConfigPage;
2021-12-20 18:04:53 -06:00
// Add the pages to the stacked widget.
2023-09-03 22:19:45 -05:00
pagesStackedWidget->addWidget(_seerConfigPage);
2021-12-20 18:04:53 -06:00
pagesStackedWidget->addWidget(_gdbConfigPage);
pagesStackedWidget->addWidget(_editorConfigPage);
pagesStackedWidget->addWidget(_sourceConfigPage);
2022-07-17 15:39:04 -05:00
pagesStackedWidget->addWidget(_assemblyConfigPage);
2022-02-19 10:54:26 -06:00
pagesStackedWidget->addWidget(_keysConfigPage);
2023-09-03 22:19:45 -05:00
pagesStackedWidget->addWidget(_rrConfigPage);
2021-12-20 18:04:53 -06:00
2021-12-19 11:11:42 -06:00
// Create icons.
2023-09-03 22:19:45 -05:00
QListWidgetItem* configSeerButton = new QListWidgetItem(contentsListWidget);
configSeerButton->setIcon(QIcon(":/seer/resources/icons/hicolor/128x128/seergdb.png"));
2023-09-03 22:19:45 -05:00
configSeerButton->setText(tr("Seer"));
configSeerButton->setTextAlignment(Qt::AlignHCenter);
configSeerButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
2021-12-19 11:11:42 -06:00
QListWidgetItem* configGdbButton = new QListWidgetItem(contentsListWidget);
2022-09-10 13:14:21 -05:00
configGdbButton->setIcon(QIcon(":/seer/resources/icons-icons/gdb.png"));
2021-12-19 11:11:42 -06:00
configGdbButton->setText(tr("GDB"));
configGdbButton->setTextAlignment(Qt::AlignHCenter);
configGdbButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
QListWidgetItem* configEditorButton = new QListWidgetItem(contentsListWidget);
2022-09-10 13:14:21 -05:00
configEditorButton->setIcon(QIcon(":/seer/resources/icons-icons/editor.png"));
2021-12-19 11:11:42 -06:00
configEditorButton->setText(tr("Editor"));
configEditorButton->setTextAlignment(Qt::AlignHCenter);
configEditorButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
2021-12-20 18:04:53 -06:00
QListWidgetItem* configSourceButton = new QListWidgetItem(contentsListWidget);
2022-09-10 13:14:21 -05:00
configSourceButton->setIcon(QIcon(":/seer/resources/thenounproject/source.svg"));
2021-12-20 18:04:53 -06:00
configSourceButton->setText(tr("Source"));
configSourceButton->setTextAlignment(Qt::AlignHCenter);
configSourceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
2022-07-17 15:39:04 -05:00
QListWidgetItem* configAssemblyButton = new QListWidgetItem(contentsListWidget);
2022-09-10 13:14:21 -05:00
configAssemblyButton->setIcon(QIcon(":/seer/resources/thenounproject/assembly.svg"));
2022-07-17 15:39:04 -05:00
configAssemblyButton->setText(tr("Assembly"));
configAssemblyButton->setTextAlignment(Qt::AlignHCenter);
configAssemblyButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
2022-02-19 10:54:26 -06:00
QListWidgetItem* configKeysButton = new QListWidgetItem(contentsListWidget);
2022-09-10 16:26:03 -05:00
configKeysButton->setIcon(QIcon(":/seer/resources/thenounproject/keyboard.svg"));
2022-02-19 10:54:26 -06:00
configKeysButton->setText(tr("Keys"));
configKeysButton->setTextAlignment(Qt::AlignHCenter);
configKeysButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
2023-09-03 22:19:45 -05:00
QListWidgetItem* configRRButton = new QListWidgetItem(contentsListWidget);
configRRButton->setIcon(QIcon(":/seer/resources/icons/hicolor/256x256/rr.png"));
2023-09-03 22:19:45 -05:00
configRRButton->setText(tr("RR"));
configRRButton->setTextAlignment(Qt::AlignHCenter);
configRRButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
2021-12-19 11:11:42 -06:00
// Connect things.
connect(contentsListWidget, &QListWidget::currentItemChanged, this, &SeerConfigDialog::handleChangePage);
connect(buttonBox, &QDialogButtonBox::clicked, this, &SeerConfigDialog::handleButtonClicked);
2021-12-20 18:04:53 -06:00
// Set to first page.
contentsListWidget->setCurrentRow(0);
2021-12-19 11:11:42 -06:00
}
SeerConfigDialog::~SeerConfigDialog() {
}
2023-09-03 22:19:45 -05:00
void SeerConfigDialog::setSeerConsoleMode (const QString& mode) {
_seerConfigPage->setConsoleMode(mode);
}
QString SeerConfigDialog::seerConsoleMode () const {
return _seerConfigPage->consoleMode();
}
void SeerConfigDialog::setSeerConsoleScrollLines (int count) {
_seerConfigPage->setConsoleScrollLines(count);
}
int SeerConfigDialog::seerConsoleScrollLines () const {
return _seerConfigPage->consoleScrollLines();
}
void SeerConfigDialog::setSeerRememberWindowSizes (bool flag) {
_seerConfigPage->setRememberWindowSizes(flag);
}
bool SeerConfigDialog::seerRememberWindowSizes () const {
return _seerConfigPage->rememberWindowSizes();
}
void SeerConfigDialog::setSeerRememberManualCommandCount (int count) {
_seerConfigPage->setRememberManualCommandCount(count);
}
int SeerConfigDialog::seerRememberManualCommandCount () const {
return _seerConfigPage->rememberManualCommandCount();
}
void SeerConfigDialog::setSeerClearManualCommandHistory (bool flag) {
_seerConfigPage->setClearManualCommandHistory(flag);
}
bool SeerConfigDialog::seerClearManualCommandHistory () const {
return _seerConfigPage->clearManualCommandHistory();
}
2025-12-08 13:46:13 -06:00
void SeerConfigDialog::setGdbLauncher (const QString& launcher) {
2025-12-08 13:46:13 -06:00
_gdbConfigPage->setGdbLauncher(launcher);
}
QString SeerConfigDialog::gdbLauncher () const {
return _gdbConfigPage->gdbLauncher();
}
2021-12-26 14:57:58 -06:00
void SeerConfigDialog::setGdbProgram (const QString& program) {
_gdbConfigPage->setGdbProgram(program);
}
2021-12-20 20:28:00 -06:00
QString SeerConfigDialog::gdbProgram () const {
return _gdbConfigPage->gdbProgram();
}
2021-12-26 14:57:58 -06:00
void SeerConfigDialog::setGdbArguments (const QString& arguments) {
_gdbConfigPage->setGdbArguments(arguments);
}
2021-12-20 20:28:00 -06:00
QString SeerConfigDialog::gdbArguments () const {
return _gdbConfigPage->gdbArguments();
}
2021-12-26 14:57:58 -06:00
void SeerConfigDialog::setGdbAsyncMode (bool flag) {
2021-12-20 20:28:00 -06:00
2021-12-26 14:57:58 -06:00
_gdbConfigPage->setGdbAsyncMode(flag);
2021-12-20 20:28:00 -06:00
}
2021-12-26 14:57:58 -06:00
bool SeerConfigDialog::gdbAsyncMode () const {
2021-12-20 20:28:00 -06:00
2021-12-26 14:57:58 -06:00
return _gdbConfigPage->gdbAsyncMode();
2021-12-20 20:28:00 -06:00
}
void SeerConfigDialog::setGdbNonStopMode (bool flag) {
_gdbConfigPage->setGdbNonStopMode(flag);
}
bool SeerConfigDialog::gdbNonStopMode () const {
return _gdbConfigPage->gdbNonStopMode();
}
void SeerConfigDialog::setGdbHandleTerminatingException (bool flag) {
_gdbConfigPage->setGdbHandleTerminatingException(flag);
}
bool SeerConfigDialog::gdbHandleTerminatingException () const {
return _gdbConfigPage->gdbHandleTerminatingException();
}
2022-07-30 12:02:52 -05:00
void SeerConfigDialog::setGdbRandomizeStartAddress (bool flag) {
_gdbConfigPage->setGdbRandomizeStartAddress(flag);
}
bool SeerConfigDialog::gdbRandomizeStartAddress () const {
return _gdbConfigPage->gdbRandomizeStartAddress();
}
2022-08-21 16:54:37 -05:00
void SeerConfigDialog::setGdbEnablePrettyPrinting (bool flag) {
_gdbConfigPage->setGdbEnablePrettyPrinting(flag);
}
bool SeerConfigDialog::gdbEnablePrettyPrinting () const {
return _gdbConfigPage->gdbEnablePrettyPrinting();
}
2022-07-30 12:02:52 -05:00
void SeerConfigDialog::setGdbRemoteTargetType (const QString& type) {
_gdbConfigPage->setGdbRemoteTargetType(type);
}
QString SeerConfigDialog::gdbRemoteTargetType () const {
return _gdbConfigPage->gdbRemoteTargetType();
}
2025-11-17 14:35:37 -06:00
void SeerConfigDialog::setGdbArchitectureType (const QString& type) {
_gdbConfigPage->setGdbArchitectureType(type);
}
QString SeerConfigDialog::gdbArchitectureType () const {
return _gdbConfigPage->gdbArchitectureType();
}
2021-12-26 14:57:58 -06:00
void SeerConfigDialog::setEditorFont (const QFont& font) {
2021-12-20 20:28:00 -06:00
2021-12-26 14:57:58 -06:00
_editorConfigPage->setEditorFont(font);
2021-12-20 20:28:00 -06:00
}
2021-12-26 14:57:58 -06:00
const QFont& SeerConfigDialog::editorFont () const {
2021-12-20 20:28:00 -06:00
2021-12-26 14:57:58 -06:00
return _editorConfigPage->editorFont();
2021-12-20 20:28:00 -06:00
}
void SeerConfigDialog::setEditorTabSize (int spaces) {
_editorConfigPage->setEditorTabSize(spaces);
}
int SeerConfigDialog::editorTabSize () const {
return _editorConfigPage->editorTabSize();
}
void SeerConfigDialog::setEditorHighlighterSettings (const SeerHighlighterSettings& settings) {
_editorConfigPage->setHighlighterSettings(settings);
}
const SeerHighlighterSettings& SeerConfigDialog::editorHighlighterSettings () const {
return _editorConfigPage->highlighterSettings();
}
void SeerConfigDialog::setEditorHighlighterEnabled (bool flag) {
_editorConfigPage->setHighlighterEnabled(flag);
}
bool SeerConfigDialog::editorHighlighterEnabled () const {
return _editorConfigPage->highlighterEnabled();
}
2024-03-02 11:39:39 -06:00
void SeerConfigDialog::setExternalEditorCommand (const QString& externalEditorCommand) {
_editorConfigPage->setExternalEditorCommand(externalEditorCommand);
}
QString SeerConfigDialog::externalEditorCommand () const {
return _editorConfigPage->externalEditorCommand();
}
void SeerConfigDialog::setEditorAutoSourceReload (bool flag) {
_editorConfigPage->setAutoSourceReload(flag);
}
bool SeerConfigDialog::editorAutoSourceReload () const {
return _editorConfigPage->autoSourceReload();
}
void SeerConfigDialog::setSourceAlternateDirectories (const QStringList& alternateDirectories) {
_sourceConfigPage->setAlternateDirectories(alternateDirectories);
}
QStringList SeerConfigDialog::sourceAlternateDirectories () const {
return _sourceConfigPage->alternateDirectories();
}
2023-08-19 19:59:52 -05:00
void SeerConfigDialog::setSourceIgnoreFilePatterns (const QStringList& filePatterns) {
2022-09-06 20:35:47 -05:00
2023-08-19 19:59:52 -05:00
_sourceConfigPage->setIgnoreFilePatterns(filePatterns);
2022-09-06 20:35:47 -05:00
}
2023-08-19 19:59:52 -05:00
QStringList SeerConfigDialog::sourceIgnoreFilePatterns () const {
2022-09-06 20:35:47 -05:00
2023-08-19 19:59:52 -05:00
return _sourceConfigPage->ignoreFilePatterns();
2022-09-06 20:35:47 -05:00
}
void SeerConfigDialog::setSourceMiscFilePatterns (const QStringList& filePatterns) {
_sourceConfigPage->setMiscFilePatterns(filePatterns);
}
QStringList SeerConfigDialog::sourceMiscFilePatterns () const {
return _sourceConfigPage->miscFilePatterns();
}
void SeerConfigDialog::setSourceSourceFilePatterns (const QStringList& filePatterns) {
_sourceConfigPage->setSourceFilePatterns(filePatterns);
}
QStringList SeerConfigDialog::sourceSourceFilePatterns () const {
return _sourceConfigPage->sourceFilePatterns();
}
void SeerConfigDialog::setSourceHeaderFilePatterns (const QStringList& filePatterns) {
_sourceConfigPage->setHeaderFilePatterns(filePatterns);
}
QStringList SeerConfigDialog::sourceHeaderFilePatterns () const {
return _sourceConfigPage->headerFilePatterns();
}
void SeerConfigDialog::setAssemblyShowAssemblyTabOnStartupMode (const QString& mode) {
_assemblyConfigPage->setShowAssemblyTabOnStartupMode(mode);
}
QString SeerConfigDialog::assemblyShowAssemblyTabOnStartupMode () const {
return _assemblyConfigPage->showAssemblyTabOnStartupMode();
}
void SeerConfigDialog::setAssemblyKeepAssemblyTabOnTop (bool flag) {
_assemblyConfigPage->setKeepAssemblyTabOnTop(flag);
}
bool SeerConfigDialog::assemblyKeepAssemblyTabOnTop () const {
return _assemblyConfigPage->keepAssemblyTabOnTop();
}
2022-12-21 20:36:33 -06:00
void SeerConfigDialog::setAssemblyDisassemblyFlavor (const QString& flavor) {
2022-12-21 20:36:33 -06:00
_assemblyConfigPage->setDisassemblyFlavor(flavor);
}
2022-12-21 20:36:33 -06:00
QString SeerConfigDialog::assemblyDisassemblyFlavor () const {
2022-12-21 20:36:33 -06:00
return _assemblyConfigPage->disassemblyFlavor();
}
void SeerConfigDialog::setAssemblySymbolDemagling (const QString& onoff) {
_assemblyConfigPage->setSymbolDemagling(onoff);
}
QString SeerConfigDialog::assemblySymbolDemagling () const {
return _assemblyConfigPage->symbolDemagling();
}
void SeerConfigDialog::setAssemblyShowAddressColumn (bool flag) {
_assemblyConfigPage->setShowAddressColumn(flag);
}
bool SeerConfigDialog::assemblyShowAddressColumn () const {
return _assemblyConfigPage->showAddressColumn();
}
void SeerConfigDialog::setAssemblyShowOffsetColumn (bool flag) {
_assemblyConfigPage->setShowOffsetColumn(flag);
}
bool SeerConfigDialog::assemblyShowOffsetColumn () const {
return _assemblyConfigPage->showOffsetColumn();
}
void SeerConfigDialog::setAssemblyShowOpcodeColumn (bool flag) {
_assemblyConfigPage->setShowOpcodeColumn(flag);
}
bool SeerConfigDialog::assemblyShowOpcodeColumn () const {
return _assemblyConfigPage->showOpcodeColumn();
}
2022-11-06 18:18:42 -06:00
void SeerConfigDialog::setAssemblyShowSourceLines (bool flag) {
_assemblyConfigPage->setShowSourceLines(flag);
}
bool SeerConfigDialog::assemblyShowSourceLines () const {
return _assemblyConfigPage->showSourceLines();
}
void SeerConfigDialog::setAssemblyRegisterFormat (const QString& format) {
_assemblyConfigPage->setRegisterFormat(format);
}
QString SeerConfigDialog::assemblyRegisterFormat () const {
return _assemblyConfigPage->registerFormat();
}
void SeerConfigDialog::setAssemblyDisassemblyMode (const QString& mode, int bytes) {
_assemblyConfigPage->setDisassemblyMode(mode, bytes);
}
QString SeerConfigDialog::assemblyDisassemblyMode () const {
return _assemblyConfigPage->disassemblyMode();
}
int SeerConfigDialog::assemblyDisassemblyBytes () const {
return _assemblyConfigPage->disassemblyBytes();
}
2022-02-19 11:29:13 -06:00
void SeerConfigDialog::setKeySettings (const SeerKeySettings& settings) {
_keysConfigPage->setKeySettings(settings);
}
2022-02-19 12:02:19 -06:00
SeerKeySettings SeerConfigDialog::keySettings () const {
2022-02-19 11:29:13 -06:00
return _keysConfigPage->keySettings();
}
2023-09-03 22:19:45 -05:00
void SeerConfigDialog::setRRProgram (const QString& program) {
2023-09-03 22:19:45 -05:00
_rrConfigPage->setRRProgram(program);
}
2023-09-03 22:19:45 -05:00
QString SeerConfigDialog::rrProgram () const {
2023-09-03 22:19:45 -05:00
return _rrConfigPage->rrProgram();
}
2023-09-03 22:19:45 -05:00
void SeerConfigDialog::setRRArguments (const QString& arguments) {
2023-09-03 22:19:45 -05:00
_rrConfigPage->setRRArguments(arguments);
}
2023-09-03 22:19:45 -05:00
QString SeerConfigDialog::rrArguments () const {
2023-09-03 22:19:45 -05:00
return _rrConfigPage->rrArguments();
}
2023-09-03 22:19:45 -05:00
void SeerConfigDialog::setRRGdbArguments (const QString& arguments) {
2023-09-03 22:19:45 -05:00
_rrConfigPage->setGdbArguments(arguments);
}
2023-09-03 22:19:45 -05:00
QString SeerConfigDialog::rrGdbArguments () const {
2023-09-03 22:19:45 -05:00
return _rrConfigPage->gdbArguments();
}
void SeerConfigDialog::handleChangePage(QListWidgetItem* current, QListWidgetItem* previous) {
if (!current) {
current = previous;
}
pagesStackedWidget->setCurrentIndex(contentsListWidget->row(current));
}
void SeerConfigDialog::handleButtonClicked (QAbstractButton* button) {
// Handle resetting the config pages if "Reset" is clicked.
if (buttonBox->buttonRole(button) == QDialogButtonBox::ResetRole) {
QString itemLabel = contentsListWidget->currentItem()->text();
int result = QMessageBox::warning(this, "Seer",
QString("Reset settings for the '") + itemLabel + "' tab?",
QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Cancel);
if (result != QMessageBox::Ok) {
return;
}
if (itemLabel == "GDB") {
_gdbConfigPage->reset();
2022-02-17 18:55:03 -06:00
}else if (itemLabel == "Editor") {
_editorConfigPage->reset();
}else if (itemLabel == "Source") {
_sourceConfigPage->reset();
2022-07-17 15:39:04 -05:00
}else if (itemLabel == "Assembly") {
_assemblyConfigPage->reset();
2022-07-17 15:39:04 -05:00
2022-02-19 11:29:13 -06:00
}else if (itemLabel == "Keys") {
_keysConfigPage->reset();
2022-02-19 11:29:13 -06:00
}else if (itemLabel == "Seer") {
_seerConfigPage->reset();
2023-09-03 22:19:45 -05:00
}else if (itemLabel == "RR") {
_rrConfigPage->reset();
}
}
}