diff options
| author | 2021-10-31 12:31:16 +1100 | |
|---|---|---|
| committer | 2021-10-31 12:31:16 +1100 | |
| commit | d64ea5331b2312f81df464fb22dcef0191216d86 (patch) | |
| tree | a3f3784371da401e6a675e5b6b9734b88281a08d /src/osd/modules/debugger | |
| parent | cfffc54b61cabc5ef9533396bf87324eb5eeb63e (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.mm | 2 | ||||
| -rw-r--r-- | src/osd/modules/debugger/osx/memoryview.mm | 114 | ||||
| -rw-r--r-- | src/osd/modules/debugger/qt/memorywindow.cpp | 10 | ||||
| -rw-r--r-- | src/osd/modules/debugger/qt/windowqt.cpp | 1 | ||||
| -rw-r--r-- | src/osd/modules/debugger/win/debugwininfo.h | 21 | ||||
| -rw-r--r-- | src/osd/modules/debugger/win/memoryviewinfo.cpp | 10 | ||||
| -rw-r--r-- | src/osd/modules/debugger/win/memoryviewinfo.h | 2 | ||||
| -rw-r--r-- | src/osd/modules/debugger/win/memorywininfo.cpp | 196 |
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; |
