diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2022-04-16 14:35:29 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-16 14:35:29 +0200 |
| commit | 0ec3f3a6aee295c6569a5b817a571d7dc20ff0e6 (patch) | |
| tree | 942251b4700c17d69305950d687728216c8586ea /Source/Core/DolphinQt/Debugger/MemoryWidget.cpp | |
| parent | 0a4805c0b9f248ee217fb4748721438489775c99 (diff) | |
| parent | a2aecc3794d58306e00348ea5d4115596383f5a1 (diff) | |
Merge pull request #10563 from TryTwo/PR_MemoryWidget_Display_Types
Debugger MemoryWidget: More display types, use combo box for options
Diffstat (limited to 'Source/Core/DolphinQt/Debugger/MemoryWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/Debugger/MemoryWidget.cpp | 128 |
1 files changed, 71 insertions, 57 deletions
diff --git a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp index 0655a6a1d9..0576420883 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp @@ -18,7 +18,6 @@ #include <QLabel> #include <QLineEdit> #include <QPushButton> -#include <QRadioButton> #include <QRegularExpression> #include <QScrollArea> #include <QSpacerItem> @@ -69,7 +68,7 @@ MemoryWidget::MemoryWidget(QWidget* parent) : QDockWidget(parent) ConnectWidgets(); OnAddressSpaceChanged(); - OnTypeChanged(); + OnDisplayChanged(); } MemoryWidget::~MemoryWidget() @@ -140,11 +139,19 @@ void MemoryWidget::CreateWidgets() m_input_combo->addItem(tr("Signed 32"), int(InputID::S32)); // Dump + auto* dump_group = new QGroupBox(tr("Dump")); + auto* dump_layout = new QVBoxLayout; + dump_group->setLayout(dump_layout); m_dump_mram = new QPushButton(tr("Dump &MRAM")); m_dump_exram = new QPushButton(tr("Dump &ExRAM")); m_dump_aram = new QPushButton(tr("Dump &ARAM")); m_dump_fake_vmem = new QPushButton(tr("Dump &FakeVMEM")); + dump_layout->addWidget(m_dump_mram); + dump_layout->addWidget(m_dump_exram); + dump_layout->addWidget(m_dump_aram); + dump_layout->addWidget(m_dump_fake_vmem); + // Search Options auto* search_group = new QGroupBox(tr("Search")); auto* search_layout = new QVBoxLayout; @@ -179,22 +186,38 @@ void MemoryWidget::CreateWidgets() address_space_layout->setSpacing(1); // Data Type - auto* datatype_group = new QGroupBox(tr("Data Type")); - auto* datatype_layout = new QVBoxLayout; - datatype_group->setLayout(datatype_layout); - - m_type_u8 = new QRadioButton(tr("U&8")); - m_type_u16 = new QRadioButton(tr("U&16")); - m_type_u32 = new QRadioButton(tr("U&32")); - m_type_ascii = new QRadioButton(tr("ASCII")); - m_type_float = new QRadioButton(tr("Float")); - - datatype_layout->addWidget(m_type_u8); - datatype_layout->addWidget(m_type_u16); - datatype_layout->addWidget(m_type_u32); - datatype_layout->addWidget(m_type_ascii); - datatype_layout->addWidget(m_type_float); - datatype_layout->setSpacing(1); + auto* displaytype_group = new QGroupBox(tr("Display Type")); + auto* displaytype_layout = new QVBoxLayout; + displaytype_group->setLayout(displaytype_layout); + + m_display_combo = new QComboBox; + m_display_combo->setMaxVisibleItems(20); + m_display_combo->addItem(tr("Hex 8"), int(MemoryViewWidget::Type::Hex8)); + m_display_combo->addItem(tr("Hex 16"), int(MemoryViewWidget::Type::Hex16)); + m_display_combo->addItem(tr("Hex 32"), int(MemoryViewWidget::Type::Hex32)); + m_display_combo->addItem(tr("Unsigned 8"), int(MemoryViewWidget::Type::Unsigned8)); + m_display_combo->addItem(tr("Unsigned 16"), int(MemoryViewWidget::Type::Unsigned16)); + m_display_combo->addItem(tr("Unsigned 32"), int(MemoryViewWidget::Type::Unsigned32)); + m_display_combo->addItem(tr("Signed 8"), int(MemoryViewWidget::Type::Signed8)); + m_display_combo->addItem(tr("Signed 16"), int(MemoryViewWidget::Type::Signed16)); + m_display_combo->addItem(tr("Signed 32"), int(MemoryViewWidget::Type::Signed32)); + m_display_combo->addItem(tr("ASCII"), int(MemoryViewWidget::Type::ASCII)); + m_display_combo->addItem(tr("Float"), int(MemoryViewWidget::Type::Float32)); + m_display_combo->addItem(tr("Double"), int(MemoryViewWidget::Type::Double)); + + m_align_combo = new QComboBox; + m_align_combo->addItem(tr("Fixed Alignment")); + m_align_combo->addItem(tr("Type-based Alignment"), 0); + m_align_combo->addItem(tr("No Alignment"), 1); + + m_row_length_combo = new QComboBox; + m_row_length_combo->addItem(tr("4 Bytes"), 4); + m_row_length_combo->addItem(tr("8 Bytes"), 8); + m_row_length_combo->addItem(tr("16 Bytes"), 16); + + displaytype_layout->addWidget(m_display_combo); + displaytype_layout->addWidget(m_align_combo); + displaytype_layout->addWidget(m_row_length_combo); // MBP options auto* bp_group = new QGroupBox(tr("Memory breakpoint options")); @@ -232,16 +255,16 @@ void MemoryWidget::CreateWidgets() sidebar_layout->addWidget(m_data_preview); sidebar_layout->addWidget(m_set_value); sidebar_layout->addWidget(m_from_file); - sidebar_layout->addItem(new QSpacerItem(1, 20)); - sidebar_layout->addWidget(m_dump_mram); - sidebar_layout->addWidget(m_dump_exram); - sidebar_layout->addWidget(m_dump_aram); - sidebar_layout->addWidget(m_dump_fake_vmem); - sidebar_layout->addItem(new QSpacerItem(1, 15)); + sidebar_layout->addItem(new QSpacerItem(1, 10)); sidebar_layout->addWidget(search_group); + sidebar_layout->addItem(new QSpacerItem(1, 10)); + sidebar_layout->addWidget(displaytype_group); + sidebar_layout->addItem(new QSpacerItem(1, 10)); sidebar_layout->addWidget(address_space_group); - sidebar_layout->addWidget(datatype_group); + sidebar_layout->addItem(new QSpacerItem(1, 10)); sidebar_layout->addWidget(bp_group); + sidebar_layout->addItem(new QSpacerItem(1, 10)); + sidebar_layout->addWidget(dump_group); sidebar_layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding)); // Splitter @@ -289,9 +312,11 @@ void MemoryWidget::ConnectWidgets() { connect(radio, &QRadioButton::toggled, this, &MemoryWidget::OnAddressSpaceChanged); } - - for (auto* radio : {m_type_u8, m_type_u16, m_type_u32, m_type_ascii, m_type_float}) - connect(radio, &QRadioButton::toggled, this, &MemoryWidget::OnTypeChanged); + for (auto* combo : {m_display_combo, m_align_combo, m_row_length_combo}) + { + connect(combo, qOverload<int>(&QComboBox::currentIndexChanged), this, + &MemoryWidget::OnDisplayChanged); + } for (auto* radio : {m_bp_read_write, m_bp_read_only, m_bp_write_only}) connect(radio, &QRadioButton::toggled, this, &MemoryWidget::OnBPTypeChanged); @@ -342,17 +367,9 @@ void MemoryWidget::LoadSettings() m_address_space_auxiliary->setChecked(address_space_auxiliary); m_address_space_physical->setChecked(address_space_physical); - const bool type_u8 = settings.value(QStringLiteral("memorywidget/typeu8"), true).toBool(); - const bool type_u16 = settings.value(QStringLiteral("memorywidget/typeu16"), false).toBool(); - const bool type_u32 = settings.value(QStringLiteral("memorywidget/typeu32"), false).toBool(); - const bool type_float = settings.value(QStringLiteral("memorywidget/typefloat"), false).toBool(); - const bool type_ascii = settings.value(QStringLiteral("memorywidget/typeascii"), false).toBool(); + const int display_index = settings.value(QStringLiteral("memorywidget/display_type"), 1).toInt(); - m_type_u8->setChecked(type_u8); - m_type_u16->setChecked(type_u16); - m_type_u32->setChecked(type_u32); - m_type_float->setChecked(type_float); - m_type_ascii->setChecked(type_ascii); + m_display_combo->setCurrentIndex(display_index); bool bp_rw = settings.value(QStringLiteral("memorywidget/bpreadwrite"), true).toBool(); bool bp_r = settings.value(QStringLiteral("memorywidget/bpread"), false).toBool(); @@ -385,11 +402,7 @@ void MemoryWidget::SaveSettings() settings.setValue(QStringLiteral("memorywidget/addrspace_physical"), m_address_space_physical->isChecked()); - settings.setValue(QStringLiteral("memorywidget/typeu8"), m_type_u8->isChecked()); - settings.setValue(QStringLiteral("memorywidget/typeu16"), m_type_u16->isChecked()); - settings.setValue(QStringLiteral("memorywidget/typeu32"), m_type_u32->isChecked()); - settings.setValue(QStringLiteral("memorywidget/typeascii"), m_type_ascii->isChecked()); - settings.setValue(QStringLiteral("memorywidget/typefloat"), m_type_float->isChecked()); + settings.setValue(QStringLiteral("memorywidget/display_type"), m_display_combo->currentIndex()); settings.setValue(QStringLiteral("memorywidget/bpreadwrite"), m_bp_read_write->isChecked()); settings.setValue(QStringLiteral("memorywidget/bpread"), m_bp_read_only->isChecked()); @@ -413,23 +426,24 @@ void MemoryWidget::OnAddressSpaceChanged() SaveSettings(); } -void MemoryWidget::OnTypeChanged() +void MemoryWidget::OnDisplayChanged() { - MemoryViewWidget::Type type; - - if (m_type_u8->isChecked()) - type = MemoryViewWidget::Type::U8; - else if (m_type_u16->isChecked()) - type = MemoryViewWidget::Type::U16; - else if (m_type_u32->isChecked()) - type = MemoryViewWidget::Type::U32; - else if (m_type_ascii->isChecked()) - type = MemoryViewWidget::Type::ASCII; + const auto type = static_cast<MemoryViewWidget::Type>(m_display_combo->currentData().toInt()); + int bytes_per_row = m_row_length_combo->currentData().toInt(); + int alignment; + + if (type == MemoryViewWidget::Type::Double && bytes_per_row == 4) + bytes_per_row = 8; + + // Alignment: First (fixed) option equals bytes per row. 'currentData' is correct for other + // options. Type-based must be calculated in memoryviewwidget and is left at 0. No alignment is + // equivalent to a value of 1. + if (m_align_combo->currentIndex() == 0) + alignment = bytes_per_row; else - type = MemoryViewWidget::Type::Float32; + alignment = m_align_combo->currentData().toInt(); - ValidateAndPreviewInputValue(); - m_memory_view->SetType(type); + m_memory_view->SetDisplay(type, bytes_per_row, alignment); SaveSettings(); } |
