summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/debugger
diff options
context:
space:
mode:
author Vas Crabb <cuavas@users.noreply.github.com>2021-10-31 12:31:16 +1100
committer GitHub <noreply@github.com>2021-10-31 12:31:16 +1100
commitd64ea5331b2312f81df464fb22dcef0191216d86 (patch)
treea3f3784371da401e6a675e5b6b9734b88281a08d /src/osd/modules/debugger
parentcfffc54b61cabc5ef9533396bf87324eb5eeb63e (diff)
-frontend: Refactored menu event handling and fixed a number of issues. (#8777)
* Moved common code for drawing about box, info viewer, and other text box menus to a base class; removed the last of the info viewer logic and the multi-line item hack from the base menu class. * Added previous/next group navigation for general inputs and plugin input selection menus. * Moved message catalog logic to lib/util, allowing osd and emu to use localised messages. * Made the base menu class use the UI manager’s feature for holding session state rather than a static map and mutex. * Improved menu event handling model, and fixed many issues, particularly with menus behaving badly when hidden/shown. * Added better support for menus that don’t participate in the usual menu stack, like the menuless sliders and the save/load state menus. * Made a number of menus refresh state when being shown after being hidden (fixes MT08121 among other issues). * Fixed indication of mounted slot option in the slot option details menu. * Improved appearance of background menus when emulation isn't running - draw all menus in the stack, and darken the background menus to make the edges of the active menu clearer. * Fixed locale issues in -listxml. -debugger: Made GUI debuggers more uniform. * Added new memory view features to Win32 debugger. * Fixed spelling of hexadecimal in Cocoa debugger and added decimal address option. * Fixed duplicate keyboard shortcut in Cocoa debugger (Shift-Cmd-D was both new device window and 64-bit float format). * Made keyboard shortcuts slightly more consistent across debuggers. -plugins: Moved input selection menu and sequence polling code to a common library. Fixed the issue that prevented keyboard inputs being mapped with -steadykey on. -docs: Started adding some documentation for MAME's internal UI, and updated the list of example front-ends. -Regenerated message catalog sources. For translators, the new strings are mostly: * The names of the inputs provided by the OS-dependent layer for things like fullscreen and video features. These show up in the user interface inputs menu. * The names for automatically generated views. These show up in the video options menu - test with a system with a lot of screens to see more variants. * The input macro plugin UI. * A few format strings for analog input assignments. * A few strings for the about box header.
Diffstat (limited to 'src/osd/modules/debugger')
-rw-r--r--src/osd/modules/debugger/osx/debugwindowhandler.mm2
-rw-r--r--src/osd/modules/debugger/osx/memoryview.mm114
-rw-r--r--src/osd/modules/debugger/qt/memorywindow.cpp10
-rw-r--r--src/osd/modules/debugger/qt/windowqt.cpp1
-rw-r--r--src/osd/modules/debugger/win/debugwininfo.h21
-rw-r--r--src/osd/modules/debugger/win/memoryviewinfo.cpp10
-rw-r--r--src/osd/modules/debugger/win/memoryviewinfo.h2
-rw-r--r--src/osd/modules/debugger/win/memorywininfo.cpp196
8 files changed, 234 insertions, 122 deletions
diff --git a/src/osd/modules/debugger/osx/debugwindowhandler.mm b/src/osd/modules/debugger/osx/debugwindowhandler.mm
index 67910f92f99..ec79887e308 100644
--- a/src/osd/modules/debugger/osx/debugwindowhandler.mm
+++ b/src/osd/modules/debugger/osx/debugwindowhandler.mm
@@ -114,7 +114,7 @@ NSString *const MAMESaveDebuggerConfigurationNotification = @"MAMESaveDebuggerCo
keyEquivalent:@"b"];
[newMenu addItemWithTitle:@"Devices Window"
action:@selector(debugNewDevicesWindow:)
- keyEquivalent:@"D"];
+ keyEquivalent:@""];
[menu addItem:[NSMenuItem separatorItem]];
diff --git a/src/osd/modules/debugger/osx/memoryview.mm b/src/osd/modules/debugger/osx/memoryview.mm
index 1de39fc6ee8..03055bd7daf 100644
--- a/src/osd/modules/debugger/osx/memoryview.mm
+++ b/src/osd/modules/debugger/osx/memoryview.mm
@@ -57,14 +57,9 @@
{
return (memview->chunks_per_row() + [item tag]) > 0;
}
- else if (action == @selector(showHexidecimalAddr:))
+ else if (action == @selector(showAddressRadix:))
{
- [item setState:((memview->address_radix() == 16) ? NSOnState : NSOffState)];
- return YES;
- }
- else if (action == @selector(showOctalAddr:))
- {
- [item setState:((memview->address_radix() == 8) ? NSOnState : NSOffState)];
+ [item setState:((memview->address_radix() == [item tag]) ? NSOnState : NSOffState)];
return YES;
}
else
@@ -194,12 +189,8 @@
downcast<debug_view_memory *>(view)->set_physical([sender tag]);
}
-- (IBAction)showHexidecimalAddr:(id)sender {
- downcast<debug_view_memory *>(view)->set_address_radix(16);
-}
-
-- (IBAction)showOctalAddr:(id)sender {
- downcast<debug_view_memory *>(view)->set_address_radix(8);
+- (IBAction)showAddressRadix:(id)sender {
+ downcast<debug_view_memory *>(view)->set_address_radix([sender tag]);
}
- (IBAction)showReverseView:(id)sender {
@@ -240,97 +231,104 @@
- (void)insertActionItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index {
NSMenuItem *chunkItem1 = [menu insertItemWithTitle:@"1-byte Chunks (Hex)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"1"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"1"
+ atIndex:index++];
[chunkItem1 setTarget:self];
[chunkItem1 setTag:int(debug_view_memory::data_format::HEX_8BIT)];
NSMenuItem *chunkItem2 = [menu insertItemWithTitle:@"2-byte Chunks (Hex)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"2"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"2"
+ atIndex:index++];
[chunkItem2 setTarget:self];
[chunkItem2 setTag:int(debug_view_memory::data_format::HEX_16BIT)];
NSMenuItem *chunkItem4 = [menu insertItemWithTitle:@"4-byte Chunks (Hex)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"4"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"4"
+ atIndex:index++];
[chunkItem4 setTarget:self];
[chunkItem4 setTag:int(debug_view_memory::data_format::HEX_32BIT)];
NSMenuItem *chunkItem8 = [menu insertItemWithTitle:@"8-byte Chunks (Hex)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"8"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"8"
+ atIndex:index++];
[chunkItem8 setTarget:self];
[chunkItem8 setTag:int(debug_view_memory::data_format::HEX_64BIT)];
NSMenuItem *chunkItem12 = [menu insertItemWithTitle:@"1-byte Chunks (Octal)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"3"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"3"
+ atIndex:index++];
[chunkItem12 setTarget:self];
[chunkItem12 setTag:int(debug_view_memory::data_format::OCTAL_8BIT)];
NSMenuItem *chunkItem13 = [menu insertItemWithTitle:@"2-byte Chunks (Octal)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"5"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"5"
+ atIndex:index++];
[chunkItem13 setTarget:self];
[chunkItem13 setTag:int(debug_view_memory::data_format::OCTAL_16BIT)];
NSMenuItem *chunkItem14 = [menu insertItemWithTitle:@"4-byte Chunks (Octal)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"7"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"7"
+ atIndex:index++];
[chunkItem14 setTarget:self];
[chunkItem14 setTag:int(debug_view_memory::data_format::OCTAL_32BIT)];
NSMenuItem *chunkItem15 = [menu insertItemWithTitle:@"8-byte Chunks (Octal)"
- action:@selector(showChunkSize:)
- keyEquivalent:@"9"
- atIndex:index++];
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"9"
+ atIndex:index++];
[chunkItem15 setTarget:self];
[chunkItem15 setTag:int(debug_view_memory::data_format::OCTAL_64BIT)];
- NSMenuItem *chunkItem9 = [menu insertItemWithTitle:@"32-bit floats"
- action:@selector(showChunkSize:)
- keyEquivalent:@"F"
- atIndex:index++];
+ NSMenuItem *chunkItem9 = [menu insertItemWithTitle:@"32-bit Floating Point"
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"F"
+ atIndex:index++];
[chunkItem9 setTarget:self];
[chunkItem9 setTag:int(debug_view_memory::data_format::FLOAT_32BIT)];
- NSMenuItem *chunkItem10 = [menu insertItemWithTitle:@"64-bit floats"
- action:@selector(showChunkSize:)
- keyEquivalent:@"D"
- atIndex:index++];
+ NSMenuItem *chunkItem10 = [menu insertItemWithTitle:@"64-bit Floating Point"
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"D"
+ atIndex:index++];
[chunkItem10 setTarget:self];
[chunkItem10 setTag:int(debug_view_memory::data_format::FLOAT_64BIT)];
- NSMenuItem *chunkItem11 = [menu insertItemWithTitle:@"80-bit floats"
- action:@selector(showChunkSize:)
- keyEquivalent:@"E"
- atIndex:index++];
+ NSMenuItem *chunkItem11 = [menu insertItemWithTitle:@"80-bit Floating Point"
+ action:@selector(showChunkSize:)
+ keyEquivalent:@"E"
+ atIndex:index++];
[chunkItem11 setTarget:self];
[chunkItem11 setTag:int(debug_view_memory::data_format::FLOAT_80BIT)];
[menu insertItem:[NSMenuItem separatorItem] atIndex:index++];
- NSMenuItem *hexidecimalItem = [menu insertItemWithTitle:@"Hexidecimal Addresses"
- action:@selector(showHexidecimalAddr:)
- keyEquivalent:@"H"
+ NSMenuItem *hexadecimalItem = [menu insertItemWithTitle:@"Hexadecimal Addresses"
+ action:@selector(showAddressRadix:)
+ keyEquivalent:@"H"
+ atIndex:index++];
+ [hexadecimalItem setTarget:self];
+ [hexadecimalItem setTag:16];
+
+ NSMenuItem *decimalItem = [menu insertItemWithTitle:@"Decimal Addresses"
+ action:@selector(showAddressRadix:)
+ keyEquivalent:@""
atIndex:index++];
- [hexidecimalItem setTarget:self];
- [hexidecimalItem setTag:FALSE];
+ [decimalItem setTarget:self];
+ [decimalItem setTag:10];
NSMenuItem *octalItem = [menu insertItemWithTitle:@"Octal Addresses"
- action:@selector(showOctalAddr:)
- keyEquivalent:@"O"
- atIndex:index++];
+ action:@selector(showAddressRadix:)
+ keyEquivalent:@"O"
+ atIndex:index++];
[octalItem setTarget:self];
- [octalItem setTag:TRUE];
+ [octalItem setTag:8];
[menu insertItem:[NSMenuItem separatorItem] atIndex:index++];
diff --git a/src/osd/modules/debugger/qt/memorywindow.cpp b/src/osd/modules/debugger/qt/memorywindow.cpp
index 4d16806a084..09d13c5d6d4 100644
--- a/src/osd/modules/debugger/qt/memorywindow.cpp
+++ b/src/osd/modules/debugger/qt/memorywindow.cpp
@@ -124,7 +124,13 @@ MemoryWindow::MemoryWindow(running_machine &machine, QWidget *parent) :
formatActTwo->setShortcut(QKeySequence("Ctrl+2"));
formatActFour->setShortcut(QKeySequence("Ctrl+4"));
formatActEight->setShortcut(QKeySequence("Ctrl+8"));
- formatAct32bitFloat->setShortcut(QKeySequence("Ctrl+9"));
+ formatActOneOctal->setShortcut(QKeySequence("Ctrl+3"));
+ formatActTwoOctal->setShortcut(QKeySequence("Ctrl+5"));
+ formatActFourOctal->setShortcut(QKeySequence("Ctrl+7"));
+ formatActEightOctal->setShortcut(QKeySequence("Ctrl+9"));
+ formatAct32bitFloat->setShortcut(QKeySequence("Ctrl+Shift+F"));
+ formatAct64bitFloat->setShortcut(QKeySequence("Ctrl+Shift+D"));
+ formatAct80bitFloat->setShortcut(QKeySequence("Ctrl+Shift+E"));
formatActOne->setChecked(true);
connect(dataFormat, &QActionGroup::triggered, this, &MemoryWindow::formatChanged);
@@ -157,6 +163,8 @@ MemoryWindow::MemoryWindow(running_machine &machine, QWidget *parent) :
radixActHexadecimal->setActionGroup(radixGroup);
radixActDecimal->setActionGroup(radixGroup);
radixActOctal->setActionGroup(radixGroup);
+ radixActHexadecimal->setShortcut(QKeySequence("Ctrl+Shift+H"));
+ radixActOctal->setShortcut(QKeySequence("Ctrl+Shift+O"));
radixActHexadecimal->setChecked(true);
connect(radixGroup, &QActionGroup::triggered, this, &MemoryWindow::radixChanged);
diff --git a/src/osd/modules/debugger/qt/windowqt.cpp b/src/osd/modules/debugger/qt/windowqt.cpp
index 13abd470c6f..852d1f5449c 100644
--- a/src/osd/modules/debugger/qt/windowqt.cpp
+++ b/src/osd/modules/debugger/qt/windowqt.cpp
@@ -48,7 +48,6 @@ WindowQt::WindowQt(running_machine &machine, QWidget *parent) :
connect(debugActOpenPoints, &QAction::triggered, this, &WindowQt::debugActOpenPoints);
QAction *debugActOpenDevices = new QAction("New D&evices Window", this);
- debugActOpenDevices->setShortcut(QKeySequence("Shift+Ctrl+D"));
connect(debugActOpenDevices, &QAction::triggered, this, &WindowQt::debugActOpenDevices);
QAction *dbgActRun = new QAction("Run", this);
diff --git a/src/osd/modules/debugger/win/debugwininfo.h b/src/osd/modules/debugger/win/debugwininfo.h
index 80561dd2a05..20cea0d477d 100644
--- a/src/osd/modules/debugger/win/debugwininfo.h
+++ b/src/osd/modules/debugger/win/debugwininfo.h
@@ -75,13 +75,20 @@ protected:
ID_SOFT_RESET,
ID_EXIT,
- ID_1_BYTE_CHUNKS,
- ID_2_BYTE_CHUNKS,
- ID_4_BYTE_CHUNKS,
- ID_8_BYTE_CHUNKS,
- ID_FLOATING_POINT_32BIT,
- ID_FLOATING_POINT_64BIT,
- ID_FLOATING_POINT_80BIT,
+ ID_1_BYTE_CHUNKS_HEX,
+ ID_2_BYTE_CHUNKS_HEX,
+ ID_4_BYTE_CHUNKS_HEX,
+ ID_8_BYTE_CHUNKS_HEX,
+ ID_1_BYTE_CHUNKS_OCT,
+ ID_2_BYTE_CHUNKS_OCT,
+ ID_4_BYTE_CHUNKS_OCT,
+ ID_8_BYTE_CHUNKS_OCT,
+ ID_FLOAT_32BIT,
+ ID_FLOAT_64BIT,
+ ID_FLOAT_80BIT,
+ ID_HEX_ADDRESSES,
+ ID_DEC_ADDRESSES,
+ ID_OCT_ADDRESSES,
ID_LOGICAL_ADDRESSES,
ID_PHYSICAL_ADDRESSES,
ID_REVERSE_VIEW,
diff --git a/src/osd/modules/debugger/win/memoryviewinfo.cpp b/src/osd/modules/debugger/win/memoryviewinfo.cpp
index 4b6f33bcd85..a8891553987 100644
--- a/src/osd/modules/debugger/win/memoryviewinfo.cpp
+++ b/src/osd/modules/debugger/win/memoryviewinfo.cpp
@@ -46,6 +46,11 @@ bool memoryview_info::physical() const
return view<debug_view_memory>()->physical();
}
+int memoryview_info::address_radix() const
+{
+ return view<debug_view_memory>()->address_radix();
+}
+
void memoryview_info::set_expression(const std::string &string)
{
@@ -72,6 +77,11 @@ void memoryview_info::set_physical(bool physical)
view<debug_view_memory>()->set_physical(physical);
}
+void memoryview_info::set_address_radix(int radix)
+{
+ view<debug_view_memory>()->set_address_radix(radix);
+}
+
void memoryview_info::add_items_to_context_menu(HMENU menu)
{
diff --git a/src/osd/modules/debugger/win/memoryviewinfo.h b/src/osd/modules/debugger/win/memoryviewinfo.h
index 95436e507e6..ccc451acd3e 100644
--- a/src/osd/modules/debugger/win/memoryviewinfo.h
+++ b/src/osd/modules/debugger/win/memoryviewinfo.h
@@ -28,12 +28,14 @@ public:
uint32_t chunks_per_row() const;
bool reverse() const;
bool physical() const;
+ int address_radix() const;
void set_expression(const std::string &string);
void set_data_format(debug_view_memory::data_format dataformat);
void set_chunks_per_row(uint32_t rowchunks);
void set_reverse(bool reverse);
void set_physical(bool physical);
+ void set_address_radix(int radix);
protected:
enum
diff --git a/src/osd/modules/debugger/win/memorywininfo.cpp b/src/osd/modules/debugger/win/memorywininfo.cpp
index a103b3b353b..3ed9b6b9482 100644
--- a/src/osd/modules/debugger/win/memorywininfo.cpp
+++ b/src/osd/modules/debugger/win/memorywininfo.cpp
@@ -32,21 +32,29 @@ memorywin_info::memorywin_info(debugger_windows_interface &debugger) :
// create the options menu
HMENU const optionsmenu = CreatePopupMenu();
- AppendMenu(optionsmenu, MF_ENABLED, ID_1_BYTE_CHUNKS, TEXT("1-byte chunks\tCtrl+1"));
- AppendMenu(optionsmenu, MF_ENABLED, ID_2_BYTE_CHUNKS, TEXT("2-byte chunks\tCtrl+2"));
- AppendMenu(optionsmenu, MF_ENABLED, ID_4_BYTE_CHUNKS, TEXT("4-byte chunks\tCtrl+4"));
- AppendMenu(optionsmenu, MF_ENABLED, ID_8_BYTE_CHUNKS, TEXT("8-byte chunks\tCtrl+8"));
- AppendMenu(optionsmenu, MF_ENABLED, ID_FLOATING_POINT_32BIT, TEXT("32 bit floating point\tCtrl+9"));
- AppendMenu(optionsmenu, MF_ENABLED, ID_FLOATING_POINT_64BIT, TEXT("64 bit floating point"));
- AppendMenu(optionsmenu, MF_ENABLED, ID_FLOATING_POINT_80BIT, TEXT("80 bit floating point"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_1_BYTE_CHUNKS_HEX, TEXT("1-byte Chunks (Hex)\tCtrl+1"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_2_BYTE_CHUNKS_HEX, TEXT("2-byte Chunks (Hex)\tCtrl+2"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_4_BYTE_CHUNKS_HEX, TEXT("4-byte Chunks (Hex)\tCtrl+4"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_8_BYTE_CHUNKS_HEX, TEXT("8-byte Chunks (Hex)\tCtrl+8"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_1_BYTE_CHUNKS_OCT, TEXT("1-byte Chunks (Octal)\tCtrl+3"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_2_BYTE_CHUNKS_OCT, TEXT("2-byte Chunks (Octal)\tCtrl+5"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_4_BYTE_CHUNKS_OCT, TEXT("4-byte Chunks (Octal)\tCtrl+7"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_8_BYTE_CHUNKS_OCT, TEXT("8-byte Chunks (Octal)\tCtrl+9"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_FLOAT_32BIT, TEXT("32-bit Floating Point\tCtrl+Shift+F"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_FLOAT_64BIT, TEXT("64-bit Floating Point\tCtrl+Shift+D"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_FLOAT_80BIT, TEXT("80-bit Floating Point\tCtrl+Shift+E"));
+ AppendMenu(optionsmenu, MF_DISABLED | MF_SEPARATOR, 0, TEXT(""));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_HEX_ADDRESSES, TEXT("Hexadecimal Addresses\tCtrl+Shift+H"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_DEC_ADDRESSES, TEXT("Decimal Addresses"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_OCT_ADDRESSES, TEXT("Octal Addresses\tCtrl+Shift+O"));
AppendMenu(optionsmenu, MF_DISABLED | MF_SEPARATOR, 0, TEXT(""));
AppendMenu(optionsmenu, MF_ENABLED, ID_LOGICAL_ADDRESSES, TEXT("Logical Addresses\tCtrl+L"));
AppendMenu(optionsmenu, MF_ENABLED, ID_PHYSICAL_ADDRESSES, TEXT("Physical Addresses\tCtrl+Y"));
AppendMenu(optionsmenu, MF_DISABLED | MF_SEPARATOR, 0, TEXT(""));
AppendMenu(optionsmenu, MF_ENABLED, ID_REVERSE_VIEW, TEXT("Reverse View\tCtrl+R"));
AppendMenu(optionsmenu, MF_DISABLED | MF_SEPARATOR, 0, TEXT(""));
- AppendMenu(optionsmenu, MF_ENABLED, ID_INCREASE_MEM_WIDTH, TEXT("Increase bytes per line\tCtrl+P"));
- AppendMenu(optionsmenu, MF_ENABLED, ID_DECREASE_MEM_WIDTH, TEXT("Decrease bytes per line\tCtrl+O"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_INCREASE_MEM_WIDTH, TEXT("Increase Bytes Per Line\tCtrl+P"));
+ AppendMenu(optionsmenu, MF_ENABLED, ID_DECREASE_MEM_WIDTH, TEXT("Decrease Bytes Per Line\tCtrl+O"));
AppendMenu(GetMenu(window()), MF_ENABLED | MF_POPUP, (UINT_PTR)optionsmenu, TEXT("Options"));
// set up the view to track the initial expression
@@ -83,47 +91,87 @@ bool memorywin_info::handle_key(WPARAM wparam, LPARAM lparam)
{
if (GetAsyncKeyState(VK_CONTROL) & 0x8000)
{
- switch (wparam)
+ if (GetAsyncKeyState(VK_SHIFT))
{
- case '1':
- SendMessage(window(), WM_COMMAND, ID_1_BYTE_CHUNKS, 0);
- return true;
+ switch (wparam)
+ {
+ case 'F':
+ SendMessage(window(), WM_COMMAND, ID_FLOAT_32BIT, 0);
+ return true;
- case '2':
- SendMessage(window(), WM_COMMAND, ID_2_BYTE_CHUNKS, 0);
- return true;
+ case 'D':
+ SendMessage(window(), WM_COMMAND, ID_FLOAT_64BIT, 0);
+ return true;
- case '4':
- SendMessage(window(), WM_COMMAND, ID_4_BYTE_CHUNKS, 0);
- return true;
+ case 'E':
+ SendMessage(window(), WM_COMMAND, ID_FLOAT_80BIT, 0);
+ return true;
- case '8':
- SendMessage(window(), WM_COMMAND, ID_8_BYTE_CHUNKS, 0);
- return true;
+ case 'H':
+ SendMessage(window(), WM_COMMAND, ID_HEX_ADDRESSES, 0);
+ return true;
- case '9':
- SendMessage(window(), WM_COMMAND, ID_FLOATING_POINT_32BIT, 0);
- return true;
+ case 'O':
+ SendMessage(window(), WM_COMMAND, ID_OCT_ADDRESSES, 0);
+ return true;
+ }
+ }
+ else
+ {
+ switch (wparam)
+ {
+ case '1':
+ SendMessage(window(), WM_COMMAND, ID_1_BYTE_CHUNKS_HEX, 0);
+ return true;
- case 'L':
- SendMessage(window(), WM_COMMAND, ID_LOGICAL_ADDRESSES, 0);
- return true;
+ case '2':
+ SendMessage(window(), WM_COMMAND, ID_2_BYTE_CHUNKS_HEX, 0);
+ return true;
- case 'Y':
- SendMessage(window(), WM_COMMAND, ID_PHYSICAL_ADDRESSES, 0);
- return true;
+ case '4':
+ SendMessage(window(), WM_COMMAND, ID_4_BYTE_CHUNKS_HEX, 0);
+ return true;
- case 'R':
- SendMessage(window(), WM_COMMAND, ID_REVERSE_VIEW, 0);
- return true;
+ case '8':
+ SendMessage(window(), WM_COMMAND, ID_8_BYTE_CHUNKS_HEX, 0);
+ return true;
- case 'P':
- SendMessage(window(), WM_COMMAND, ID_INCREASE_MEM_WIDTH, 0);
- return true;
+ case '3':
+ SendMessage(window(), WM_COMMAND, ID_1_BYTE_CHUNKS_OCT, 0);
+ return true;
- case 'O':
- SendMessage(window(), WM_COMMAND, ID_DECREASE_MEM_WIDTH, 0);
- return true;
+ case '5':
+ SendMessage(window(), WM_COMMAND, ID_2_BYTE_CHUNKS_OCT, 0);
+ return true;
+
+ case '7':
+ SendMessage(window(), WM_COMMAND, ID_4_BYTE_CHUNKS_OCT, 0);
+ return true;
+
+ case '9':
+ SendMessage(window(), WM_COMMAND, ID_8_BYTE_CHUNKS_OCT, 0);
+ return true;
+
+ case 'L':
+ SendMessage(window(), WM_COMMAND, ID_LOGICAL_ADDRESSES, 0);
+ return true;
+
+ case 'Y':
+ SendMessage(window(), WM_COMMAND, ID_PHYSICAL_ADDRESSES, 0);
+ return true;
+
+ case 'R':
+ SendMessage(window(), WM_COMMAND, ID_REVERSE_VIEW, 0);
+ return true;
+
+ case 'P':
+ SendMessage(window(), WM_COMMAND, ID_INCREASE_MEM_WIDTH, 0);
+ return true;
+
+ case 'O':
+ SendMessage(window(), WM_COMMAND, ID_DECREASE_MEM_WIDTH, 0);
+ return true;
+ }
}
}
return editwin_info::handle_key(wparam, lparam);
@@ -180,16 +228,28 @@ void memorywin_info::update_menu()
auto *const memview = downcast<memoryview_info *>(m_views[0].get());
HMENU const menu = GetMenu(window());
- CheckMenuItem(menu, ID_1_BYTE_CHUNKS, MF_BYCOMMAND | (memview->data_format() == debug_view_memory::data_format::HEX_8BIT ? MF_CHECKED : MF_UNCHECKED));
- CheckMenuItem(menu, ID_2_BYTE_CHUNKS, MF_BYCOMMAND | (memview->data_format() == debug_view_memory::data_format::HEX_16BIT ? MF_CHECKED : MF_UNCHECKED));
- CheckMenuItem(menu, ID_4_BYTE_CHUNKS, MF_BYCOMMAND | (memview->data_format() == debug_view_memory::data_format::HEX_32BIT ? MF_CHECKED : MF_UNCHECKED));
- CheckMenuItem(menu, ID_8_BYTE_CHUNKS, MF_BYCOMMAND | (memview->data_format() == debug_view_memory::data_format::HEX_64BIT ? MF_CHECKED : MF_UNCHECKED));
- CheckMenuItem(menu, ID_FLOATING_POINT_32BIT, MF_BYCOMMAND | (memview->data_format() == debug_view_memory::data_format::FLOAT_32BIT ? MF_CHECKED : MF_UNCHECKED));
- CheckMenuItem(menu, ID_FLOATING_POINT_64BIT, MF_BYCOMMAND | (memview->data_format() == debug_view_memory::data_format::FLOAT_64BIT ? MF_CHECKED : MF_UNCHECKED));
- CheckMenuItem(menu, ID_FLOATING_POINT_80BIT, MF_BYCOMMAND | (memview->data_format() == debug_view_memory::data_format::FLOAT_80BIT ? MF_CHECKED : MF_UNCHECKED));
+
+ CheckMenuItem(menu, ID_1_BYTE_CHUNKS_HEX, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::HEX_8BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_2_BYTE_CHUNKS_HEX, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::HEX_16BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_4_BYTE_CHUNKS_HEX, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::HEX_32BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_8_BYTE_CHUNKS_HEX, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::HEX_64BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_1_BYTE_CHUNKS_OCT, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::OCTAL_8BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_2_BYTE_CHUNKS_OCT, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::OCTAL_16BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_4_BYTE_CHUNKS_OCT, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::OCTAL_32BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_8_BYTE_CHUNKS_OCT, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::OCTAL_64BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_FLOAT_32BIT, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::FLOAT_32BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_FLOAT_64BIT, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::FLOAT_64BIT) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_FLOAT_80BIT, MF_BYCOMMAND | ((memview->data_format() == debug_view_memory::data_format::FLOAT_80BIT) ? MF_CHECKED : MF_UNCHECKED));
+
+ CheckMenuItem(menu, ID_HEX_ADDRESSES, MF_BYCOMMAND | ((memview->address_radix() == 16) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_DEC_ADDRESSES, MF_BYCOMMAND | ((memview->address_radix() == 10) ? MF_CHECKED : MF_UNCHECKED));
+ CheckMenuItem(menu, ID_OCT_ADDRESSES, MF_BYCOMMAND | ((memview->address_radix() == 8) ? MF_CHECKED : MF_UNCHECKED));
+
CheckMenuItem(menu, ID_LOGICAL_ADDRESSES, MF_BYCOMMAND | (memview->physical() ? MF_UNCHECKED : MF_CHECKED));
CheckMenuItem(menu, ID_PHYSICAL_ADDRESSES, MF_BYCOMMAND | (memview->physical() ? MF_CHECKED : MF_UNCHECKED));
+
CheckMenuItem(menu, ID_REVERSE_VIEW, MF_BYCOMMAND | (memview->reverse() ? MF_CHECKED : MF_UNCHECKED));
+
EnableMenuItem(menu, ID_DECREASE_MEM_WIDTH, MF_BYCOMMAND | ((memview->chunks_per_row() > 1) ? MF_ENABLED : MF_GRAYED));
}
@@ -219,34 +279,62 @@ bool memorywin_info::handle_command(WPARAM wparam, LPARAM lparam)
case 0:
switch (LOWORD(wparam))
{
- case ID_1_BYTE_CHUNKS:
+ case ID_1_BYTE_CHUNKS_HEX:
memview->set_data_format(debug_view_memory::data_format::HEX_8BIT);
return true;
- case ID_2_BYTE_CHUNKS:
+ case ID_2_BYTE_CHUNKS_HEX:
memview->set_data_format(debug_view_memory::data_format::HEX_16BIT);
return true;
- case ID_4_BYTE_CHUNKS:
+ case ID_4_BYTE_CHUNKS_HEX:
memview->set_data_format(debug_view_memory::data_format::HEX_32BIT);
return true;
- case ID_8_BYTE_CHUNKS:
+ case ID_8_BYTE_CHUNKS_HEX:
memview->set_data_format(debug_view_memory::data_format::HEX_64BIT);
return true;
- case ID_FLOATING_POINT_32BIT:
+ case ID_1_BYTE_CHUNKS_OCT:
+ memview->set_data_format(debug_view_memory::data_format::OCTAL_8BIT);
+ return true;
+
+ case ID_2_BYTE_CHUNKS_OCT:
+ memview->set_data_format(debug_view_memory::data_format::OCTAL_16BIT);
+ return true;
+
+ case ID_4_BYTE_CHUNKS_OCT:
+ memview->set_data_format(debug_view_memory::data_format::OCTAL_32BIT);
+ return true;
+
+ case ID_8_BYTE_CHUNKS_OCT:
+ memview->set_data_format(debug_view_memory::data_format::OCTAL_64BIT);
+ return true;
+
+ case ID_FLOAT_32BIT:
memview->set_data_format(debug_view_memory::data_format::FLOAT_32BIT);
return true;
- case ID_FLOATING_POINT_64BIT:
+ case ID_FLOAT_64BIT:
memview->set_data_format(debug_view_memory::data_format::FLOAT_64BIT);
return true;
- case ID_FLOATING_POINT_80BIT:
+ case ID_FLOAT_80BIT:
memview->set_data_format(debug_view_memory::data_format::FLOAT_80BIT);
return true;
+ case ID_HEX_ADDRESSES:
+ memview->set_address_radix(16);
+ return true;
+
+ case ID_DEC_ADDRESSES:
+ memview->set_address_radix(10);
+ return true;
+
+ case ID_OCT_ADDRESSES:
+ memview->set_address_radix(8);
+ return true;
+
case ID_LOGICAL_ADDRESSES:
memview->set_physical(false);
return true;