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