diff --git a/scripts/src/osd/windows.lua b/scripts/src/osd/windows.lua index 32e7f2339a7..f0e301e79e1 100644 --- a/scripts/src/osd/windows.lua +++ b/scripts/src/osd/windows.lua @@ -191,6 +191,8 @@ project ("osd_" .. _OPTIONS["osd"]) MAME_DIR .. "src/osd/modules/debugger/win/editwininfo.h", MAME_DIR .. "src/osd/modules/debugger/win/logwininfo.cpp", MAME_DIR .. "src/osd/modules/debugger/win/logwininfo.h", + MAME_DIR .. "src/osd/modules/debugger/win/logviewinfo.cpp", + MAME_DIR .. "src/osd/modules/debugger/win/logviewinfo.h", MAME_DIR .. "src/osd/modules/debugger/win/memoryviewinfo.cpp", MAME_DIR .. "src/osd/modules/debugger/win/memoryviewinfo.h", MAME_DIR .. "src/osd/modules/debugger/win/memorywininfo.cpp", diff --git a/src/emu/debug/dvtext.cpp b/src/emu/debug/dvtext.cpp index e4672b81974..e55a6b278e8 100644 --- a/src/emu/debug/dvtext.cpp +++ b/src/emu/debug/dvtext.cpp @@ -40,6 +40,20 @@ debug_view_textbuf::~debug_view_textbuf() } +//------------------------------------------------- +// clear - clear the contents +//------------------------------------------------- + +void debug_view_textbuf::clear() +{ + begin_update(); + text_buffer_clear(&m_textbuf); + m_at_bottom = true; + m_topseq = 0; + end_update(); +} + + //------------------------------------------------- // view_update - update a text buffer-based view //------------------------------------------------- diff --git a/src/emu/debug/dvtext.h b/src/emu/debug/dvtext.h index d9f28e80298..14a323794db 100644 --- a/src/emu/debug/dvtext.h +++ b/src/emu/debug/dvtext.h @@ -26,6 +26,9 @@ class debug_view_textbuf : public debug_view { friend class debug_view_manager; +public: + void clear(); + protected: // construction/destruction debug_view_textbuf(running_machine &machine, debug_view_type type, debug_view_osd_update_func osdupdate, void *osdprivate, text_buffer &textbuf); diff --git a/src/osd/modules/debugger/win/logviewinfo.cpp b/src/osd/modules/debugger/win/logviewinfo.cpp new file mode 100644 index 00000000000..affd4acd17a --- /dev/null +++ b/src/osd/modules/debugger/win/logviewinfo.cpp @@ -0,0 +1,29 @@ +// license:BSD-3-Clause +// copyright-holders:Samuele Zannoli +//============================================================ +// +// logviewinfo.c - Win32 debug log window handling +// +//============================================================ + +#include "emu.h" +#include "logviewinfo.h" + +#include "debug/dvtext.h" + + +logview_info::logview_info(debugger_windows_interface &debugger, debugwin_info &owner, HWND parent) : + debugview_info(debugger, owner, parent, DVT_LOG) +{ +} + + +logview_info::~logview_info() +{ +} + + +void logview_info::clear() +{ + view()->clear(); +} diff --git a/src/osd/modules/debugger/win/logviewinfo.h b/src/osd/modules/debugger/win/logviewinfo.h new file mode 100644 index 00000000000..da598038864 --- /dev/null +++ b/src/osd/modules/debugger/win/logviewinfo.h @@ -0,0 +1,26 @@ +// license:BSD-3-Clause +// copyright-holders:Samuele Zannoli +//============================================================ +// +// logviewinfo.h - Win32 debug log window handling +// +//============================================================ + +#ifndef __DEBUG_WIN_LOG_VIEW_INFO_H__ +#define __DEBUG_WIN_LOG_VIEW_INFO_H__ + +#include "debugwin.h" + +#include "debugviewinfo.h" + + +class logview_info : public debugview_info +{ +public: + logview_info(debugger_windows_interface &debugger, debugwin_info &owner, HWND parent); + virtual ~logview_info(); + + void clear(); +}; + +#endif diff --git a/src/osd/modules/debugger/win/logwininfo.cpp b/src/osd/modules/debugger/win/logwininfo.cpp index 1df89b73256..6d2cd59b554 100644 --- a/src/osd/modules/debugger/win/logwininfo.cpp +++ b/src/osd/modules/debugger/win/logwininfo.cpp @@ -10,6 +10,7 @@ #include "logwininfo.h" #include "debugviewinfo.h" +#include "logviewinfo.h" logwin_info::logwin_info(debugger_windows_interface &debugger) : @@ -18,13 +19,18 @@ logwin_info::logwin_info(debugger_windows_interface &debugger) : if (!window()) return; - m_views[0].reset(global_alloc(debugview_info(debugger, *this, window(), DVT_LOG))); + m_views[0].reset(global_alloc(logview_info(debugger, *this, window()))); if ((m_views[0] == nullptr) || !m_views[0]->is_valid()) { m_views[0].reset(); return; } + // create the log menu + HMENU const logmenu = CreatePopupMenu(); + AppendMenu(logmenu, MF_ENABLED, ID_CLEAR_LOG, TEXT("Clear")); + AppendMenu(GetMenu(window()), MF_ENABLED | MF_POPUP, (UINT_PTR)logmenu, TEXT("Log")); + // compute a client rect RECT bounds; bounds.top = bounds.left = 0; @@ -46,3 +52,14 @@ logwin_info::logwin_info(debugger_windows_interface &debugger) : logwin_info::~logwin_info() { } + +bool logwin_info::handle_command(WPARAM wparam, LPARAM lparam) +{ + if ((HIWORD(wparam) == 0) && (LOWORD(wparam) == ID_CLEAR_LOG)) + { + downcast(m_views[0].get())->clear(); + machine().debug_view().update_all(DVT_LOG); + return true; + } + return debugwin_info::handle_command(wparam, lparam); +} diff --git a/src/osd/modules/debugger/win/logwininfo.h b/src/osd/modules/debugger/win/logwininfo.h index 45c41447491..b9dfffaef62 100644 --- a/src/osd/modules/debugger/win/logwininfo.h +++ b/src/osd/modules/debugger/win/logwininfo.h @@ -19,6 +19,13 @@ class logwin_info : public debugwin_info public: logwin_info(debugger_windows_interface &debugger); virtual ~logwin_info(); + +protected: + enum + { + ID_CLEAR_LOG = 1 + }; + virtual bool handle_command(WPARAM wparam, LPARAM lparam) override; }; #endif