--- nono/wx/wxmainframe.cpp 2026/04/29 17:04:28 1.1.1.1 +++ nono/wx/wxmainframe.cpp 2026/04/29 17:04:30 1.1.1.2 @@ -6,6 +6,7 @@ #include "vm.h" #include "bitmap.h" #include "bt454.h" +#include "keyboard.h" #include "lance.h" #include "lcd.h" #include "mfp.h" @@ -43,12 +44,14 @@ wxBEGIN_EVENT_TABLE(WXMainFrame, inherit WXMainFrame::OnMenuFontSize) EVT_UPDATE_UI_RANGE(ID_FONTSIZE_START + 1, ID_FONTSIZE_END - 1, WXMainFrame::OnMenuFontSizeUI) + EVT_MENU(ID_MOUSEMODE, WXMainFrame::OnMouseMode) + EVT_UPDATE_UI(ID_MOUSEMODE, WXMainFrame::OnMouseModeUI) EVT_MENU_RANGE(WinID_Start, WinID_MAX - 1, WXMainFrame::OnWindow) EVT_UPDATE_UI_RANGE(WinID_Start, WinID_MAX - 1, WXMainFrame::OnWindowUI) wxEND_EVENT_TABLE() WXMainFrame::WXMainFrame(wxWindow *parent) - : wxFrame(parent, wxID_ANY, "mm") + : wxFrame(parent, wxID_ANY, wxT("nono")) { int vmtype; @@ -59,66 +62,63 @@ WXMainFrame::WXMainFrame(wxWindow *paren wxMenuBar *menubar = new wxMenuBar(); wxMenu *menuFile = new wxMenu(); // XXX とりあえず適当なところにおいとく - menuFile->Append(ID_FULL_SPEED, wxT("高速モード"), wxT("高速モード"), - wxITEM_CHECK); - menuFile->Append(wxID_EXIT, wxT("終了")); - menubar->Append(menuFile, wxT("ファイル")); + menuFile->Append(ID_FULL_SPEED, wxT("高速モード(&S)"), "", wxITEM_CHECK); + menuFile->Append(wxID_EXIT, wxT("終了(&X)")); + menubar->Append(menuFile, wxT("ファイル(&F)")); wxMenu *menuDisplay = new wxMenu(); wxMenu *menuViewScale = new wxMenu(); - menuViewScale->AppendRadioItem(ID_SCALE_1_00, wxT("x1.0"), wxT("x1.0")); - menuViewScale->AppendRadioItem(ID_SCALE_0_75, wxT("x0.75"), wxT("x0.75")); - menuViewScale->AppendRadioItem(ID_SCALE_0_50, wxT("x0.5"), wxT("x0.5")); - menuDisplay->AppendSubMenu(menuViewScale, wxT("スケール"), wxT("スケール")); + menuViewScale->Append(ID_SCALE_1_00, wxT("x1.&0"), "", wxITEM_CHECK); + menuViewScale->Append(ID_SCALE_0_75, wxT("x0.&75"), "", wxITEM_CHECK); + menuViewScale->Append(ID_SCALE_0_50, wxT("x0.&5"), "", wxITEM_CHECK); + menuDisplay->AppendSubMenu(menuViewScale, wxT("スケール(&S)")); wxMenu *menuFontSize = new wxMenu(); - menuFontSize->AppendRadioItem(ID_FONTSIZE_12, wxT("12"), wxT("12")); - menuFontSize->AppendRadioItem(ID_FONTSIZE_16, wxT("16"), wxT("16")); - menuFontSize->AppendRadioItem(ID_FONTSIZE_24, wxT("24"), wxT("24")); - menuDisplay->AppendSubMenu(menuFontSize, wxT("フォントサイズ"), - wxT("フォントサイズ")); - menubar->Append(menuDisplay, wxT("表示")); + menuFontSize->AppendRadioItem(ID_FONTSIZE_12, wxT("1&2")); + menuFontSize->AppendRadioItem(ID_FONTSIZE_16, wxT("1&6")); + menuFontSize->AppendRadioItem(ID_FONTSIZE_24, wxT("2&4")); + menuDisplay->AppendSubMenu(menuFontSize, wxT("フォントサイズ(&F)")); + menubar->Append(menuDisplay, wxT("表示(&V)")); wxMenu *menuDevice = new wxMenu(); - menuDevice->Append(WinID_SOFTKEY, wxT("ソフトウェアキーボード"), - wxT("ソフトウェアキーボード"), wxITEM_CHECK); - menubar->Append(menuDevice, wxT("デバイス")); + menuDevice->Append(WinID_SOFTKEY, wxT("ソフトウェアキーボード(&K)"), + "", wxITEM_CHECK); + menuDevice->Append(ID_MOUSEMODE, wxT("マウスモード(&M)\tCTRL+F12"), + "", wxITEM_CHECK); + menubar->Append(menuDevice, wxT("デバイス(&D)")); wxMenu *menuMonitor = new wxMenu(); - menuMonitor->Append(WinID_MONITOR_SCHEDULER, wxT("スケジューラ"), - wxT("スケジューラ"), wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_LOG, wxT("ログ"), wxT("ログ"), - wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_MPUREG, wxT("MPU レジスタ"), - wxT("MPU レジスタ"), wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_MPUATC, wxT("MPU(ATC)"), wxT("MPU(ATC)"), - wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_MPUBRHIST, wxT("MPU(ブランチ履歴)"), - wxT("MPU(ブランチ履歴)"), wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_MEMDUMP, wxT("メモリダンプ"), - wxT("メモリダンプ"), wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_SCHEDULER, wxT("スケジューラ(&S)"), + "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_LOG, wxT("ログ(&L)"), "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_MPUREG, wxT("MPU レジスタ(&R)"), + "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_MPUATC, wxT("MPU(&ATC)"), + "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_MPUBRHIST, wxT("MPU(ブランチ履歴)(&H)"), + "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_MEMDUMP, wxT("メモリダンプ(&D)"), + "", wxITEM_CHECK); if (vmtype == VM::TYPE_X68030) { - menuMonitor->Append(WinID_MONITOR_MFP, wxT("MFP"), wxT("MFP"), - wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_MFP, wxT("&MFP"), "", wxITEM_CHECK); } - menuMonitor->Append(WinID_MONITOR_SPC, wxT("SPC"), wxT("SPC"), - wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_RTC, wxT("RTC"), wxT("RTC"), - wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_SPC, wxT("S&PC"), "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_RTC, wxT("&RTC"), "", wxITEM_CHECK); if (vmtype == VM::TYPE_LUNA) { - menuMonitor->Append(WinID_MONITOR_SIO, wxT("SIO"), wxT("SIO"), - wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_LCD, wxT("LCD"), wxT("LCD"), - wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_LANCE, wxT("Lance"), wxT("Lance"), - wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_BITMAP, wxT("ビットマップ制御"), - wxT("ビットマップ制御"), wxITEM_CHECK); - menuMonitor->Append(WinID_MONITOR_BITMAP0, wxT("ビットマップ#0"), - wxT("ビットマップ#0"), wxITEM_CHECK); - } - menuMonitor->Append(WinID_MONITOR_NETDRIVER, wxT("ホストネットワーク"), - wxT("ホストネットワーク"), wxITEM_CHECK); - menubar->Append(menuMonitor, wxT("モニター")); + menuMonitor->Append(WinID_MONITOR_SIO, wxT("S&IO"), "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_LUNAKEYBOARD, + wxT("キーボード/マウス(&K)"), "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_LCD, wxT("LCD(&J)"), + "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_LANCE, wxT("Lance(&E)"), + "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_BITMAP, wxT("ビットマップ制御(&B)"), + "", wxITEM_CHECK); + menuMonitor->Append(WinID_MONITOR_BITMAP0, wxT("ビットマップ#&0"), + "", wxITEM_CHECK); + } + menuMonitor->Append(WinID_MONITOR_NETDRIVER, wxT("ホストネットワーク(&N)"), + "", wxITEM_CHECK); + menubar->Append(menuMonitor, wxT("モニター(&M)")); SetMenuBar(menubar); wxString title("nono"); @@ -238,23 +238,14 @@ void WXMainFrame::OnMenuScaleUI(wxUpdateUIEvent& event) { double current_scale = gMainView->GetScale(); - double event_scale; - switch (event.GetId()) { - case ID_SCALE_1_00: - event_scale = 1.0; - break; - case ID_SCALE_0_75: - event_scale = 0.75; - break; - case ID_SCALE_0_50: - event_scale = 0.50; - break; - default: - event_scale = 0; - break; + if (current_scale == 1.0) { + event.Check(event.GetId() == ID_SCALE_1_00); + } else if (current_scale == 0.75) { + event.Check(event.GetId() == ID_SCALE_0_75); + } else if (current_scale == 0.5) { + event.Check(event.GetId() == ID_SCALE_0_50); } - event.Check(current_scale == event_scale); } // メニューの「表示 > フォントサイズ > *」の共通イベント @@ -302,6 +293,30 @@ WXMainFrame::OnMenuFontSizeUI(wxUpdateUI event.Check(current_size == event_size); } +// メニューの「デバイス > マウスモード」 +void +WXMainFrame::OnMouseMode(wxCommandEvent& event) +{ + // enable ならチェックを付けようとして呼ばれた + bool enable = event.IsChecked(); + + if (enable) { + // メッセージを表示したい + } else { + // メッセージを表示したい + } + + // マウスモードを設定 + gMainView->SetMouseMode(enable); +} + +// メニューの「デバイス > マウスモード」UI +void +WXMainFrame::OnMouseModeUI(wxUpdateUIEvent& event) +{ + event.Check(gMainView->GetMouseMode()); +} + // メニューのウィンドウ ID 共通イベント // チェックが入る方なら、ウィンドウを作成して表示。 // チェックが消える方なら、ウィンドウを削除。 @@ -323,50 +338,58 @@ WXMainFrame::DoWindow(int id, bool enabl windows[id] = new WXLogMonitor(this, id); break; case WinID_MONITOR_SCHEDULER: - windows[id] = new WXMonitorWindow(this, id, "スケジューラ", + windows[id] = new WXMonitorWindow(this, id, wxT("スケジューラ"), gScheduler); break; case WinID_MONITOR_MPUREG: - windows[id] = new WXMonitorWindow(this, id, "MPU レジスタ", gMPU); + windows[id] = new WXMonitorWindow(this, id, wxT("MPU レジスタ"), + gMPU); break; case WinID_MONITOR_MPUATC: - windows[id] = new WXMonitorWindow(this, id, "MPU (ATC)", gMPUATC); + windows[id] = new WXMonitorWindow(this, id, wxT("MPU (ATC)"), + gMPUATC); break; case WinID_MONITOR_MPUBRHIST: - windows[id] = new WXMonitorWindow(this, id, "MPU (ブランチ履歴)", - gMPUBrHist); + windows[id] = new WXMonitorWindow(this, id, + wxT("MPU (ブランチ履歴)"), gMPUBrHist); break; case WinID_MONITOR_MEMDUMP: windows[id] = new WXMemdumpWindow(this, id); break; case WinID_MONITOR_MFP: - windows[id] = new WXMonitorWindow(this, id, "MFP", gMFP); + windows[id] = new WXMonitorWindow(this, id, wxT("MFP"), gMFP); break; case WinID_MONITOR_SPC: - windows[id] = new WXMonitorWindow(this, id, "SPC", gSPC); + windows[id] = new WXMonitorWindow(this, id, wxT("SPC"), gSPC); break; case WinID_MONITOR_RTC: - windows[id] = new WXMonitorWindow(this, id, "RTC", gRTC); + windows[id] = new WXMonitorWindow(this, id, wxT("RTC"), gRTC); break; case WinID_MONITOR_SIO: - windows[id] = new WXMonitorWindow(this, id, "SIO", gSIO); + windows[id] = new WXMonitorWindow(this, id, wxT("SIO"), gSIO); + break; + case WinID_MONITOR_LUNAKEYBOARD: + windows[id] = new WXMonitorWindow(this, id, + wxT("キーボード/マウス"), gKeyboard); break; case WinID_MONITOR_LCD: - windows[id] = new WXMonitorWindow(this, id, "LCD", gLCD); + windows[id] = new WXMonitorWindow(this, id, wxT("LCD"), gLCD); break; case WinID_MONITOR_LANCE: - windows[id] = new WXMonitorWindow(this, id, "Lance", gLance); + windows[id] = new WXMonitorWindow(this, id, wxT("Lance"), + dynamic_cast(gEthernet)); break; case WinID_MONITOR_NETDRIVER: - windows[id] = new WXMonitorWindow(this, id, "ホストネットワーク", - gNetDriver); + windows[id] = new WXMonitorWindow(this, id, + wxT("ホストネットワーク"), gNetDriver); break; case WinID_MONITOR_BITMAP: - windows[id] = new WXMonitorWindow(this, id, "ビットマップ制御", + windows[id] = new WXMonitorWindow(this, id, wxT("ビットマップ制御"), gBitmap); break; case WinID_MONITOR_BITMAP0: - windows[id] = new WXLunaBitmapWindow(this, id, "ビットマップ#0"); + windows[id] = new WXLunaBitmapWindow(this, id, + wxT("ビットマップ#0")); break; case WinID_SOFTKEY: windows[id] = new WXLunaSoftKeyWindow(this, id); @@ -428,6 +451,7 @@ WXMainFrame::monitor_names[WinID_MAX] = "spc", // SPC "rtc", // RTC "sio", // SIO + "keyboard", // LunaKeyboard "lcd", // LCD "lance", // LANCE "bitmap", // BITMAP