diff options
author | 2022-09-17 06:28:25 +1000 | |
---|---|---|
committer | 2022-09-17 06:31:07 +1000 | |
commit | c25428f519d401634d2e7555cc5cc0908efb5b0d (patch) | |
tree | 870decebdc57c8c742a8059629225aa923034e53 /src/osd/modules/debugger/debugqt.cpp | |
parent | b64b4ef8bbae5c5745740d0861393a2b37b0fd32 (diff) |
Added a crude dark theme for the Win32 debugger.
Also made a start on weaning the Qt debugger off its weird configuation
objects. It can now save more view state with less string comparisons
on memory labels, but it can't restore all of it yet.
Diffstat (limited to 'src/osd/modules/debugger/debugqt.cpp')
-rw-r--r-- | src/osd/modules/debugger/debugqt.cpp | 126 |
1 files changed, 55 insertions, 71 deletions
diff --git a/src/osd/modules/debugger/debugqt.cpp b/src/osd/modules/debugger/debugqt.cpp index dbc638d354a..cb09b08f0dc 100644 --- a/src/osd/modules/debugger/debugqt.cpp +++ b/src/osd/modules/debugger/debugqt.cpp @@ -56,8 +56,13 @@ public: #if defined(_WIN32) && !defined(SDLMAME_WIN32) virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE; #endif + private: + void configuration_save(config_type which_type, util::xml::data_node *parentnode); + void gather_save_configurations(); + running_machine *m_machine; + util::xml::file::ptr m_config; }; @@ -94,16 +99,15 @@ void xml_configuration_load(running_machine &machine, config_type cfg_type, conf util::xml::data_node const *wnode = nullptr; for (wnode = parentnode->get_child(osd::debugger::NODE_WINDOW); wnode; wnode = wnode->get_next_sibling(osd::debugger::NODE_WINDOW)) { - WindowQtConfig::WindowType type = (WindowQtConfig::WindowType)wnode->get_attribute_int(osd::debugger::ATTR_WINDOW_TYPE, WindowQtConfig::WIN_TYPE_UNKNOWN); - switch (type) + switch (wnode->get_attribute_int(osd::debugger::ATTR_WINDOW_TYPE, -1)) { - case WindowQtConfig::WIN_TYPE_MAIN: xmlConfigurations.push_back(std::make_unique<MainWindowQtConfig>()); break; - case WindowQtConfig::WIN_TYPE_MEMORY: xmlConfigurations.push_back(std::make_unique<MemoryWindowQtConfig>()); break; - case WindowQtConfig::WIN_TYPE_DASM: xmlConfigurations.push_back(std::make_unique<DasmWindowQtConfig>()); break; - case WindowQtConfig::WIN_TYPE_LOG: xmlConfigurations.push_back(std::make_unique<LogWindowQtConfig>()); break; - case WindowQtConfig::WIN_TYPE_BREAK_POINTS: xmlConfigurations.push_back(std::make_unique<BreakpointsWindowQtConfig>()); break; - case WindowQtConfig::WIN_TYPE_DEVICES: xmlConfigurations.push_back(std::make_unique<DevicesWindowQtConfig>()); break; - case WindowQtConfig::WIN_TYPE_DEVICE_INFORMATION: xmlConfigurations.push_back(std::make_unique<DeviceInformationWindowQtConfig>()); break; + case osd::debugger::WINDOW_TYPE_CONSOLE: xmlConfigurations.push_back(std::make_unique<MainWindowQtConfig>()); break; + case osd::debugger::WINDOW_TYPE_MEMORY_VIEWER: xmlConfigurations.push_back(std::make_unique<MemoryWindowQtConfig>()); break; + case osd::debugger::WINDOW_TYPE_DISASSEMBLY_VIEWER: xmlConfigurations.push_back(std::make_unique<DasmWindowQtConfig>()); break; + case osd::debugger::WINDOW_TYPE_ERROR_LOG_VIEWER: xmlConfigurations.push_back(std::make_unique<LogWindowQtConfig>()); break; + case osd::debugger::WINDOW_TYPE_POINTS_VIEWER: xmlConfigurations.push_back(std::make_unique<BreakpointsWindowQtConfig>()); break; + case osd::debugger::WINDOW_TYPE_DEVICES_VIEWER: xmlConfigurations.push_back(std::make_unique<DevicesWindowQtConfig>()); break; + case osd::debugger::WINDOW_TYPE_DEVICE_INFO_VIEWER: xmlConfigurations.push_back(std::make_unique<DeviceInformationWindowQtConfig>()); break; default: continue; } xmlConfigurations.back()->recoverFromXmlNode(*wnode); @@ -111,60 +115,6 @@ void xml_configuration_load(running_machine &machine, config_type cfg_type, conf } -void xml_configuration_save(running_machine &machine, config_type cfg_type, util::xml::data_node *parentnode) -{ - // We only save system configuration - if (cfg_type != config_type::SYSTEM) - return; - - for (int i = 0; i < xmlConfigurations.size(); i++) - { - WindowQtConfig &config = *xmlConfigurations[i]; - - // Create an xml node - util::xml::data_node *const debugger_node = parentnode->add_child(osd::debugger::NODE_WINDOW, nullptr); - - // Insert the appropriate information - if (debugger_node) - config.addToXmlDataNode(*debugger_node); - } -} - - -void gather_save_configurations() -{ - xmlConfigurations.clear(); - - // Loop over all the open windows - foreach (QWidget *widget, QApplication::topLevelWidgets()) - { - if (!widget->isVisible()) - continue; - - if (!widget->isWindow() || widget->windowType() != Qt::Window) - continue; - - // Figure out its type - if (dynamic_cast<MainWindow *>(widget)) - xmlConfigurations.push_back(std::make_unique<MainWindowQtConfig>()); - else if (dynamic_cast<MemoryWindow *>(widget)) - xmlConfigurations.push_back(std::make_unique<MemoryWindowQtConfig>()); - else if (dynamic_cast<DasmWindow *>(widget)) - xmlConfigurations.push_back(std::make_unique<DasmWindowQtConfig>()); - else if (dynamic_cast<LogWindow *>(widget)) - xmlConfigurations.push_back(std::make_unique<LogWindowQtConfig>()); - else if (dynamic_cast<BreakpointsWindow *>(widget)) - xmlConfigurations.push_back(std::make_unique<BreakpointsWindowQtConfig>()); - else if (dynamic_cast<DevicesWindow *>(widget)) - xmlConfigurations.push_back(std::make_unique<DevicesWindowQtConfig>()); - else if (dynamic_cast<DeviceInformationWindow *>(widget)) - xmlConfigurations.push_back(std::make_unique<DeviceInformationWindowQtConfig>()); - - xmlConfigurations.back()->buildFromQWidget(widget); - } -} - - //============================================================ // Utilities //============================================================ @@ -174,7 +124,7 @@ void load_and_clear_main_window_config(std::vector<std::unique_ptr<WindowQtConfi for (int i = 0; i < configList.size(); i++) { WindowQtConfig &config = *configList[i]; - if (config.m_type == WindowQtConfig::WIN_TYPE_MAIN) + if (config.m_type == osd::debugger::WINDOW_TYPE_CONSOLE) { config.applyToQWidget(mainQtWindow); configList.erase(configList.begin() + i); @@ -193,17 +143,17 @@ void setup_additional_startup_windows(running_machine &machine, std::vector<std: WindowQt *foo = nullptr; switch (config.m_type) { - case WindowQtConfig::WIN_TYPE_MEMORY: + case osd::debugger::WINDOW_TYPE_MEMORY_VIEWER: foo = new MemoryWindow(machine); break; - case WindowQtConfig::WIN_TYPE_DASM: + case osd::debugger::WINDOW_TYPE_DISASSEMBLY_VIEWER: foo = new DasmWindow(machine); break; - case WindowQtConfig::WIN_TYPE_LOG: + case osd::debugger::WINDOW_TYPE_ERROR_LOG_VIEWER: foo = new LogWindow(machine); break; - case WindowQtConfig::WIN_TYPE_BREAK_POINTS: + case osd::debugger::WINDOW_TYPE_POINTS_VIEWER: foo = new BreakpointsWindow(machine); break; - case WindowQtConfig::WIN_TYPE_DEVICES: + case osd::debugger::WINDOW_TYPE_DEVICES_VIEWER: foo = new DevicesWindow(machine); break; - case WindowQtConfig::WIN_TYPE_DEVICE_INFORMATION: + case osd::debugger::WINDOW_TYPE_DEVICE_INFO_VIEWER: foo = new DeviceInformationWindow(machine); break; default: break; @@ -266,10 +216,11 @@ void debug_qt::init_debugger(running_machine &machine) } m_machine = &machine; + // Setup the configuration XML saving and loading machine.configuration().config_register("debugger", configuration_manager::load_delegate(&xml_configuration_load, &machine), - configuration_manager::save_delegate(&xml_configuration_save, &machine)); + configuration_manager::save_delegate(&debug_qt::configuration_save, this)); } @@ -346,6 +297,7 @@ void debug_qt::wait_for_debugger(device_t &device, bool firststop) // all the QT windows are already gone. gather_save_configurations(); } + #if defined(_WIN32) && !defined(SDLMAME_WIN32) winwindow_update_cursor_state(*m_machine); // make sure the cursor isn't hidden while in debugger #endif @@ -361,6 +313,38 @@ void debug_qt::debugger_update() qApp->processEvents(QEventLoop::AllEvents, 1); } + +void debug_qt::configuration_save(config_type which_type, util::xml::data_node *parentnode) +{ + // We only save system configuration for now + if ((config_type::SYSTEM == which_type) && parentnode && m_config) + { + for (util::xml::data_node const *node = m_config->get_first_child(); node; node = node->get_next_sibling()) + node->copy_into(*parentnode); + m_config.reset(); + } +} + + +void debug_qt::gather_save_configurations() +{ + m_config = util::xml::file::create(); + + // Loop over all the open windows + foreach (QWidget *widget, QApplication::topLevelWidgets()) + { + if (!widget->isVisible()) + continue; + + if (!widget->isWindow() || widget->windowType() != Qt::Window) + continue; + + WindowQt *const win = dynamic_cast<WindowQt *>(widget); + if (win) + win->saveConfiguration(*m_config); + } +} + #else // USE_QTDEBUG MODULE_NOT_SUPPORTED(debug_qt, OSD_DEBUG_PROVIDER, "qt") |