summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/debugger/debugwin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/debugger/debugwin.cpp')
-rw-r--r--src/osd/modules/debugger/debugwin.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/osd/modules/debugger/debugwin.cpp b/src/osd/modules/debugger/debugwin.cpp
index 418e24287ef..ea93944e6c7 100644
--- a/src/osd/modules/debugger/debugwin.cpp
+++ b/src/osd/modules/debugger/debugwin.cpp
@@ -30,7 +30,7 @@
#include "../input/input_windows.h"
-class debugger_windows : public osd_module, public debug_module, protected debugger_windows_interface
+class debugger_windows : public osd_module, public debug_module, public debugger_windows_interface
{
public:
debugger_windows() :
@@ -76,7 +76,7 @@ private:
running_machine *m_machine;
std::unique_ptr<ui_metrics> m_metrics;
bool m_waiting_for_debugger;
- simple_list<debugwin_info> m_window_list;
+ std::vector<std::unique_ptr<debugwin_info>> m_window_list;
consolewin_info *m_main_console;
};
@@ -84,8 +84,8 @@ private:
void debugger_windows::exit()
{
// loop over windows and free them
- while (m_window_list.first() != nullptr)
- m_window_list.first()->destroy();
+ while (!m_window_list.empty())
+ m_window_list.front()->destroy();
m_main_console = nullptr;
m_metrics.reset();
@@ -164,8 +164,8 @@ void debugger_windows::debugger_update()
m_machine->debugger().cpu().get_visible_cpu()->debug()->halt_on_next_instruction("User-initiated break\n");
// if we were focused on some window's edit box, reset it to default
- for (debugwin_info &info : m_window_list)
- info.restore_field(focuswnd);
+ for (auto &info : m_window_list)
+ info->restore_field(focuswnd);
}
}
}
@@ -224,39 +224,40 @@ bool debugger_windows::seq_pressed() const
void debugger_windows::remove_window(debugwin_info &info)
{
- m_window_list.remove(info);
+ for (auto it = m_window_list.begin(); it != m_window_list.end(); ++it)
+ if (it->get() == &info) {
+ m_window_list.erase(it);
+ return;
+ }
}
void debugger_windows::show_all()
{
- for (debugwin_info &info : m_window_list)
- info.show();
+ for (auto &info : m_window_list)
+ info->show();
}
void debugger_windows::hide_all()
{
SetForegroundWindow(osd_common_t::s_window_list.front()->platform_window<HWND>());
- for (debugwin_info &info : m_window_list)
- info.hide();
+ for (auto &info : m_window_list)
+ info->hide();
}
template <typename T> T *debugger_windows::create_window()
{
// allocate memory
- T *info = global_alloc(T(*this));
+ std::unique_ptr<T> info = std::make_unique<T>(*this);
if (info->is_valid())
{
- m_window_list.prepend(*info);
- return info;
- }
- else
- {
- global_free(info);
- return nullptr;
+ m_window_list.push_back(std::move(info));
+ T *ptr = dynamic_cast<T*>(m_window_list.back().get());
+ return ptr;
}
+ return nullptr;
}