summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/debugger/qt/memorywindow.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2022-09-20 04:22:51 +1000
committer Vas Crabb <vas@vastheman.com>2022-09-20 04:22:51 +1000
commit76541e8c81f1a38707bd4d1c973f6e4f86478de5 (patch)
treecfb6ba0d92911763ae0fa56be563cf81612c7ab7 /src/osd/modules/debugger/qt/memorywindow.cpp
parent05d3b10a6c6223b7a384a4aa02ad9d55923d778d (diff)
Debugger updates:
Made closing the Qt debugger console window hide all debugger windows and run the emulated machine (debugger windows will be shown on next user break or breakpoint hit). This matches the behaviour of the Win32 and Cocoa debuggers. Made Qt debugger clean up its windows on exit rather than on subsequent starts. This fixes GitHub #9789. Made Qt debugger less reliant on global variables, and made code to save and load configuration a bit less convoluted. It still needs more refactoring on this front, but it's in slightly better shape now. Made Qt debugger a bit less crashy on invalid configuration. Still plenty of ways to crash it, but every little bit counts. Made Qt debugger do less comparisons on menu item names and object names - it might be possible to localise one day. Moved all the C++ debugger implementations into namespaces. They're using awfully generic class names, so it's about time.
Diffstat (limited to 'src/osd/modules/debugger/qt/memorywindow.cpp')
-rw-r--r--src/osd/modules/debugger/qt/memorywindow.cpp202
1 files changed, 77 insertions, 125 deletions
diff --git a/src/osd/modules/debugger/qt/memorywindow.cpp b/src/osd/modules/debugger/qt/memorywindow.cpp
index 2360cda0458..0aed1a750ce 100644
--- a/src/osd/modules/debugger/qt/memorywindow.cpp
+++ b/src/osd/modules/debugger/qt/memorywindow.cpp
@@ -24,6 +24,9 @@
#define horizontalAdvance width
#endif
+
+namespace osd::debugger::qt {
+
MemoryWindow::MemoryWindow(running_machine &machine, QWidget *parent) :
WindowQt(machine, nullptr)
{
@@ -89,17 +92,17 @@ MemoryWindow::MemoryWindow(running_machine &machine, QWidget *parent) :
QAction *formatAct32bitFloat = new QAction("32-bit Floating Point", this);
QAction *formatAct64bitFloat = new QAction("64-bit Floating Point", this);
QAction *formatAct80bitFloat = new QAction("80-bit Floating Point", this);
- formatActOne->setObjectName("formatActOne");
- formatActTwo->setObjectName("formatActTwo");
- formatActFour->setObjectName("formatActFour");
- formatActEight->setObjectName("formatActEight");
- formatActOneOctal->setObjectName("formatActOneOctal");
- formatActTwoOctal->setObjectName("formatActTwoOctal");
- formatActFourOctal->setObjectName("formatActFourOctal");
- formatActEightOctal->setObjectName("formatActEightOctal");
- formatAct32bitFloat->setObjectName("formatAct32bitFloat");
- formatAct64bitFloat->setObjectName("formatAct64bitFloat");
- formatAct80bitFloat->setObjectName("formatAct80bitFloat");
+ formatActOne->setData(int(debug_view_memory::data_format::HEX_8BIT));
+ formatActTwo->setData(int(debug_view_memory::data_format::HEX_16BIT));
+ formatActFour->setData(int(debug_view_memory::data_format::HEX_32BIT));
+ formatActEight->setData(int(debug_view_memory::data_format::HEX_64BIT));
+ formatActOneOctal->setData(int(debug_view_memory::data_format::OCTAL_8BIT));
+ formatActTwoOctal->setData(int(debug_view_memory::data_format::OCTAL_16BIT));
+ formatActFourOctal->setData(int(debug_view_memory::data_format::OCTAL_32BIT));
+ formatActEightOctal->setData(int(debug_view_memory::data_format::OCTAL_64BIT));
+ formatAct32bitFloat->setData(int(debug_view_memory::data_format::FLOAT_32BIT));
+ formatAct64bitFloat->setData(int(debug_view_memory::data_format::FLOAT_64BIT));
+ formatAct80bitFloat->setData(int(debug_view_memory::data_format::FLOAT_80BIT));
formatActOne->setCheckable(true);
formatActTwo->setCheckable(true);
formatActFour->setCheckable(true);
@@ -141,6 +144,8 @@ MemoryWindow::MemoryWindow(running_machine &machine, QWidget *parent) :
addressGroup->setObjectName("addressgroup");
QAction *addressActLogical = new QAction("Logical Addresses", this);
QAction *addressActPhysical = new QAction("Physical Addresses", this);
+ addressActLogical->setData(false);
+ addressActPhysical->setData(true);
addressActLogical->setCheckable(true);
addressActPhysical->setCheckable(true);
addressActLogical->setActionGroup(addressGroup);
@@ -156,9 +161,9 @@ MemoryWindow::MemoryWindow(running_machine &machine, QWidget *parent) :
QAction *radixActHexadecimal = new QAction("Hexadecimal Addresses", this);
QAction *radixActDecimal = new QAction("Decimal Addresses", this);
QAction *radixActOctal = new QAction("Octal Addresses", this);
- radixActHexadecimal->setObjectName("radixHexadecimal");
- radixActDecimal->setObjectName("radixDecimal");
- radixActOctal->setObjectName("radixOctal");
+ radixActHexadecimal->setData(16);
+ radixActDecimal->setData(10);
+ radixActOctal->setData(8);
radixActHexadecimal->setCheckable(true);
radixActDecimal->setCheckable(true);
radixActOctal->setCheckable(true);
@@ -218,16 +223,16 @@ void MemoryWindow::saveConfigurationToNode(util::xml::data_node &node)
{
WindowQt::saveConfigurationToNode(node);
- node.set_attribute_int(osd::debugger::ATTR_WINDOW_TYPE, osd::debugger::WINDOW_TYPE_MEMORY_VIEWER);
+ node.set_attribute_int(ATTR_WINDOW_TYPE, WINDOW_TYPE_MEMORY_VIEWER);
debug_view_memory &memView = *m_memTable->view<debug_view_memory>();
- node.set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_REGION, m_memTable->sourceIndex());
- node.set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, memView.reverse() ? 1 : 0);
- node.set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_MODE, memView.physical() ? 1 : 0);
- node.set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_RADIX, memView.address_radix());
- node.set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_DATA_FORMAT, int(memView.get_data_format()));
- node.set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ROW_CHUNKS, memView.chunks_per_row());
- node.add_child(osd::debugger::NODE_WINDOW_EXPRESSION, memView.expression());
+ node.set_attribute_int(ATTR_WINDOW_MEMORY_REGION, m_memTable->sourceIndex());
+ node.set_attribute_int(ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, memView.reverse() ? 1 : 0);
+ node.set_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_MODE, memView.physical() ? 1 : 0);
+ node.set_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_RADIX, memView.address_radix());
+ node.set_attribute_int(ATTR_WINDOW_MEMORY_DATA_FORMAT, int(memView.get_data_format()));
+ node.set_attribute_int(ATTR_WINDOW_MEMORY_ROW_CHUNKS, memView.chunks_per_row());
+ node.add_child(NODE_WINDOW_EXPRESSION, memView.expression());
}
@@ -239,28 +244,26 @@ void MemoryWindow::memoryRegionChanged(int index)
m_memTable->viewport()->update();
// Update the data format radio buttons to the memory region's default
- debug_view_memory *memView = m_memTable->view<debug_view_memory>();
- switch (memView->get_data_format())
+ debug_view_memory *const memView = m_memTable->view<debug_view_memory>();
+
+ QActionGroup *const dataFormat = findChild<QActionGroup *>("dataformat");
+ for (QAction *action : dataFormat->actions())
{
- case debug_view_memory::data_format::HEX_8BIT: dataFormatMenuItem("formatActOne")->setChecked(true); break;
- case debug_view_memory::data_format::HEX_16BIT: dataFormatMenuItem("formatActTwo")->setChecked(true); break;
- case debug_view_memory::data_format::HEX_32BIT: dataFormatMenuItem("formatActFour")->setChecked(true); break;
- case debug_view_memory::data_format::HEX_64BIT: dataFormatMenuItem("formatActEight")->setChecked(true); break;
- case debug_view_memory::data_format::OCTAL_8BIT: dataFormatMenuItem("formatActOneOctal")->setChecked(true); break;
- case debug_view_memory::data_format::OCTAL_16BIT: dataFormatMenuItem("formatActTwoOctal")->setChecked(true); break;
- case debug_view_memory::data_format::OCTAL_32BIT: dataFormatMenuItem("formatActFourOctal")->setChecked(true); break;
- case debug_view_memory::data_format::OCTAL_64BIT: dataFormatMenuItem("formatActEightOctal")->setChecked(true); break;
- case debug_view_memory::data_format::FLOAT_32BIT: dataFormatMenuItem("formatAct32bitFloat")->setChecked(true); break;
- case debug_view_memory::data_format::FLOAT_64BIT: dataFormatMenuItem("formatAct64bitFloat")->setChecked(true); break;
- case debug_view_memory::data_format::FLOAT_80BIT: dataFormatMenuItem("formatAct80bitFloat")->setChecked(true); break;
- default: break;
+ if (debug_view_memory::data_format(action->data().toInt()) == memView->get_data_format())
+ {
+ action->setChecked(true);
+ break;
+ }
}
- switch (memView->address_radix())
+
+ QActionGroup *radixGroup = findChild<QActionGroup*>("radixgroup");
+ for (QAction *action : radixGroup->actions())
{
- case 8: dataFormatMenuItem("radixOctal")->setChecked(true); break;
- case 10: dataFormatMenuItem("radixDecimal")->setChecked(true); break;
- case 16: dataFormatMenuItem("radixHexadecimal")->setChecked(true); break;
- default: break;
+ if (action->data().toInt() == memView->address_radix())
+ {
+ action->setChecked(true);
+ break;
+ }
}
}
}
@@ -287,30 +290,7 @@ void MemoryWindow::expressionSubmitted()
void MemoryWindow::formatChanged(QAction* changedTo)
{
debug_view_memory *const memView = m_memTable->view<debug_view_memory>();
-
- if (changedTo->text() == "1-byte hexadecimal")
- memView->set_data_format(debug_view_memory::data_format::HEX_8BIT);
- else if (changedTo->text() == "2-byte hexadecimal")
- memView->set_data_format(debug_view_memory::data_format::HEX_16BIT);
- else if (changedTo->text() == "4-byte hexadecimal")
- memView->set_data_format(debug_view_memory::data_format::HEX_32BIT);
- else if (changedTo->text() == "8-byte hexadecimal")
- memView->set_data_format(debug_view_memory::data_format::HEX_64BIT);
- else if (changedTo->text() == "1-byte octal")
- memView->set_data_format(debug_view_memory::data_format::OCTAL_8BIT);
- else if (changedTo->text() == "2-byte octal")
- memView->set_data_format(debug_view_memory::data_format::OCTAL_16BIT);
- else if (changedTo->text() == "4-byte octal")
- memView->set_data_format(debug_view_memory::data_format::OCTAL_32BIT);
- else if (changedTo->text() == "8-byte octal")
- memView->set_data_format(debug_view_memory::data_format::OCTAL_64BIT);
- else if (changedTo->text() == "32 bit floating point")
- memView->set_data_format(debug_view_memory::data_format::FLOAT_32BIT);
- else if (changedTo->text() == "64 bit floating point")
- memView->set_data_format(debug_view_memory::data_format::FLOAT_64BIT);
- else if (changedTo->text() == "80 bit floating point")
- memView->set_data_format(debug_view_memory::data_format::FLOAT_80BIT);
-
+ memView->set_data_format(debug_view_memory::data_format(changedTo->data().toInt()));
m_memTable->viewport()->update();
}
@@ -318,12 +298,7 @@ void MemoryWindow::formatChanged(QAction* changedTo)
void MemoryWindow::addressChanged(QAction* changedTo)
{
debug_view_memory *const memView = m_memTable->view<debug_view_memory>();
-
- if (changedTo->text() == "Logical Addresses")
- memView->set_physical(false);
- else if (changedTo->text() == "Physical Addresses")
- memView->set_physical(true);
-
+ memView->set_physical(changedTo->data().toBool());
m_memTable->viewport()->update();
}
@@ -331,14 +306,7 @@ void MemoryWindow::addressChanged(QAction* changedTo)
void MemoryWindow::radixChanged(QAction* changedTo)
{
debug_view_memory *const memView = m_memTable->view<debug_view_memory>();
-
- if (changedTo->text() == "Hexadecimal Addresses")
- memView->set_address_radix(16);
- else if (changedTo->text() == "Decimal Addresses")
- memView->set_address_radix(10);
- else if (changedTo->text() == "Octal Addresses")
- memView->set_address_radix(8);
-
+ memView->set_address_radix(changedTo->data().toInt());
m_memTable->viewport()->update();
}
@@ -393,25 +361,6 @@ void MemoryWindow::setToCurrentCpu()
}
-// I have a hard time storing QActions as class members. This is a substitute.
-QAction *MemoryWindow::dataFormatMenuItem(const QString& itemName)
-{
- QList<QMenu *> menus = menuBar()->findChildren<QMenu *>();
- for (int i = 0; i < menus.length(); i++)
- {
- if (menus[i]->title() != "&Options")
- continue;
- QList<QAction *> actions = menus[i]->actions();
- for (int j = 0; j < actions.length(); j++)
- {
- if (actions[j]->objectName() == itemName)
- return actions[j];
- }
- }
- return nullptr;
-}
-
-
//=========================================================================
// DebuggerMemView
//=========================================================================
@@ -497,33 +446,34 @@ void MemoryWindowQtConfig::applyToQWidget(QWidget *widget)
if (m_reverse)
reverse->trigger();
- QActionGroup *addressGroup = window->findChild<QActionGroup*>("addressgroup");
- addressGroup->actions()[m_addressMode]->trigger();
+ QActionGroup *const addressGroup = window->findChild<QActionGroup*>("addressgroup");
+ for (QAction *action : addressGroup->actions())
+ {
+ if (action->data().toBool() == m_addressMode)
+ {
+ action->trigger();
+ break;
+ }
+ }
- QActionGroup *radixGroup = window->findChild<QActionGroup*>("radixgroup");
- switch (m_addressRadix)
+ QActionGroup *const radixGroup = window->findChild<QActionGroup*>("radixgroup");
+ for (QAction *action : radixGroup->actions())
{
- case 16: radixGroup->actions()[0]->trigger(); break;
- case 10: radixGroup->actions()[1]->trigger(); break;
- case 8: radixGroup->actions()[2]->trigger(); break;
- default: break;
+ if (action->data().toInt() == m_addressRadix)
+ {
+ action->trigger();
+ break;
+ }
}
- QActionGroup *dataFormat = window->findChild<QActionGroup*>("dataformat");
- switch (debug_view_memory::data_format(m_dataFormat))
+ QActionGroup *const dataFormat = window->findChild<QActionGroup*>("dataformat");
+ for (QAction *action : dataFormat->actions())
{
- case debug_view_memory::data_format::HEX_8BIT: dataFormat->actions()[0]->trigger(); break;
- case debug_view_memory::data_format::HEX_16BIT: dataFormat->actions()[1]->trigger(); break;
- case debug_view_memory::data_format::HEX_32BIT: dataFormat->actions()[2]->trigger(); break;
- case debug_view_memory::data_format::HEX_64BIT: dataFormat->actions()[3]->trigger(); break;
- case debug_view_memory::data_format::OCTAL_8BIT: dataFormat->actions()[4]->trigger(); break;
- case debug_view_memory::data_format::OCTAL_16BIT: dataFormat->actions()[5]->trigger(); break;
- case debug_view_memory::data_format::OCTAL_32BIT: dataFormat->actions()[6]->trigger(); break;
- case debug_view_memory::data_format::OCTAL_64BIT: dataFormat->actions()[7]->trigger(); break;
- case debug_view_memory::data_format::FLOAT_32BIT: dataFormat->actions()[8]->trigger(); break;
- case debug_view_memory::data_format::FLOAT_64BIT: dataFormat->actions()[9]->trigger(); break;
- case debug_view_memory::data_format::FLOAT_80BIT: dataFormat->actions()[10]->trigger(); break;
- default: break;
+ if (action->data().toInt() == m_dataFormat)
+ {
+ action->trigger();
+ break;
+ }
}
}
@@ -531,9 +481,11 @@ void MemoryWindowQtConfig::applyToQWidget(QWidget *widget)
void MemoryWindowQtConfig::recoverFromXmlNode(util::xml::data_node const &node)
{
WindowQtConfig::recoverFromXmlNode(node);
- m_memoryRegion = node.get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_REGION, m_memoryRegion);
- m_reverse = node.get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, m_reverse);
- m_addressMode = node.get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_MODE, m_addressMode);
- m_addressRadix = node.get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_RADIX, m_addressRadix);
- m_dataFormat = node.get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_DATA_FORMAT, m_dataFormat);
+ m_memoryRegion = node.get_attribute_int(ATTR_WINDOW_MEMORY_REGION, m_memoryRegion);
+ m_reverse = node.get_attribute_int(ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, m_reverse);
+ m_addressMode = node.get_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_MODE, m_addressMode);
+ m_addressRadix = node.get_attribute_int(ATTR_WINDOW_MEMORY_ADDRESS_RADIX, m_addressRadix);
+ m_dataFormat = node.get_attribute_int(ATTR_WINDOW_MEMORY_DATA_FORMAT, m_dataFormat);
}
+
+} // namespace osd::debugger::qt