1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles, Vas Crabb 3 //============================================================ 4 // 5 // debugwininfo.h - Win32 debug window handling 6 // 7 //============================================================ 8 #ifndef MAME_DEBUGGER_WIN_DEBUGWININFO_H 9 #define MAME_DEBUGGER_WIN_DEBUGWININFO_H 10 11 #pragma once 12 13 #include "debugwin.h" 14 15 #include "debugbaseinfo.h" 16 17 18 class debugwin_info : protected debugbase_info 19 { 20 public: 21 debugwin_info(debugger_windows_interface &debugger, bool is_main_console, LPCSTR title, WNDPROC handler); 22 virtual ~debugwin_info(); 23 is_valid()24 bool is_valid() const { return m_wnd != nullptr; } 25 set_ignore_char_lparam(LPARAM value)26 void set_ignore_char_lparam(LPARAM value) { m_ignore_char_lparam = value >> 16; } check_ignore_char_lparam(LPARAM value)27 bool check_ignore_char_lparam(LPARAM value) 28 { 29 if (m_ignore_char_lparam == (value >> 16)) 30 { 31 m_ignore_char_lparam = 0; 32 return false; 33 } 34 else 35 { 36 return true; 37 } 38 } 39 show()40 void show() const { smart_show_window(m_wnd, true); } hide()41 void hide() const { smart_show_window(m_wnd, false); } set_foreground()42 void set_foreground() const { SetForegroundWindow(m_wnd); } 43 void destroy(); 44 45 virtual bool set_default_focus(); 46 void prev_view(debugview_info *curview); 47 void next_view(debugview_info *curview); restore_field(HWND wnd)48 virtual bool restore_field(HWND wnd) { return false; } 49 50 virtual bool handle_key(WPARAM wparam, LPARAM lparam); 51 52 protected: 53 static DWORD const DEBUG_WINDOW_STYLE = (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN) & (~WS_MINIMIZEBOX & ~WS_MAXIMIZEBOX); 54 static DWORD const DEBUG_WINDOW_STYLE_EX = 0; 55 56 static int const MAX_VIEWS = 4; 57 static int const EDGE_WIDTH = 3; 58 59 enum 60 { 61 ID_NEW_MEMORY_WND = 1, 62 ID_NEW_DISASM_WND, 63 ID_NEW_LOG_WND, 64 ID_NEW_POINTS_WND, 65 ID_RUN, 66 ID_RUN_AND_HIDE, 67 ID_RUN_VBLANK, 68 ID_RUN_IRQ, 69 ID_NEXT_CPU, 70 ID_STEP, 71 ID_STEP_OVER, 72 ID_STEP_OUT, 73 ID_REWIND_STEP, 74 ID_HARD_RESET, 75 ID_SOFT_RESET, 76 ID_EXIT, 77 78 ID_1_BYTE_CHUNKS, 79 ID_2_BYTE_CHUNKS, 80 ID_4_BYTE_CHUNKS, 81 ID_8_BYTE_CHUNKS, 82 ID_FLOATING_POINT_32BIT, 83 ID_FLOATING_POINT_64BIT, 84 ID_FLOATING_POINT_80BIT, 85 ID_LOGICAL_ADDRESSES, 86 ID_PHYSICAL_ADDRESSES, 87 ID_REVERSE_VIEW, 88 ID_INCREASE_MEM_WIDTH, 89 ID_DECREASE_MEM_WIDTH, 90 91 ID_TOGGLE_BREAKPOINT, 92 ID_DISABLE_BREAKPOINT, 93 ID_RUN_TO_CURSOR, 94 ID_SHOW_RAW, 95 ID_SHOW_ENCRYPTED, 96 ID_SHOW_COMMENTS, 97 98 ID_SHOW_BREAKPOINTS, 99 ID_SHOW_WATCHPOINTS, 100 101 ID_CLEAR_LOG, 102 103 ID_DEVICE_OPTIONS // always keep this at the end 104 }; 105 is_main_console()106 bool is_main_console() const { return m_is_main_console; } window()107 HWND window() const { return m_wnd; } minwidth()108 uint32_t minwidth() const { return m_minwidth; } maxwidth()109 uint32_t maxwidth() const { return m_maxwidth; } set_minwidth(uint32_t value)110 void set_minwidth(uint32_t value) { m_minwidth = value; } set_maxwidth(uint32_t value)111 void set_maxwidth(uint32_t value) { m_maxwidth = value; } 112 113 virtual void recompute_children(); update_menu()114 virtual void update_menu() { } 115 virtual bool handle_command(WPARAM wparam, LPARAM lparam); 116 virtual void draw_contents(HDC dc); 117 void draw_border(HDC dc, RECT &bounds); 118 void draw_border(HDC dc, HWND child); 119 120 std::unique_ptr<debugview_info> m_views[MAX_VIEWS]; 121 122 private: 123 LRESULT window_proc(UINT message, WPARAM wparam, LPARAM lparam); 124 125 HMENU create_standard_menubar(); 126 127 static LRESULT CALLBACK static_window_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam); 128 129 static void register_window_class(); 130 131 bool const m_is_main_console; 132 133 HWND m_wnd; 134 WNDPROC const m_handler; 135 136 uint32_t m_minwidth, m_maxwidth; 137 uint32_t m_minheight, m_maxheight; 138 139 uint16_t m_ignore_char_lparam; 140 141 static bool s_window_class_registered; 142 }; 143 144 #endif 145