diff --git a/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp b/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp index 78501ba14a..86cbe7e84b 100644 --- a/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp +++ b/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include "DolphinWX/Config/GeneralConfigPane.h" + #include #include #include @@ -16,14 +18,10 @@ #include "Core/ConfigManager.h" #include "Core/Core.h" #include "Core/PowerPC/PowerPC.h" -#include "DolphinWX/Config/GeneralConfigPane.h" -#include "DolphinWX/Debugger/CodeWindow.h" -#include "DolphinWX/Frame.h" -#include "DolphinWX/Main.h" GeneralConfigPane::GeneralConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id) { - cpu_cores = { + m_cpu_cores = { {PowerPC::CORE_INTERPRETER, _("Interpreter (slowest)")}, {PowerPC::CORE_CACHEDINTERPRETER, _("Cached Interpreter (slower)")}, #ifdef _M_X86_64 @@ -50,7 +48,7 @@ void GeneralConfigPane::InitializeGUI() m_throttler_array_string.Add(wxString::Format(_("%i%%"), i)); } - for (const CPUCore& cpu_core : cpu_cores) + for (const CPUCore& cpu_core : m_cpu_cores) m_cpu_engine_array_string.Add(cpu_core.name); m_dual_core_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Dual Core (speedup)")); @@ -156,9 +154,9 @@ void GeneralConfigPane::LoadGUIValues() if (selection < m_throttler_array_string.size()) m_throttler_choice->SetSelection(selection); - for (size_t i = 0; i < cpu_cores.size(); ++i) + for (size_t i = 0; i < m_cpu_cores.size(); ++i) { - if (cpu_cores[i].CPUid == startup_params.iCPUCore) + if (m_cpu_cores[i].CPUid == startup_params.iCPUCore) m_cpu_engine_radiobox->SetSelection(i); } } @@ -200,15 +198,7 @@ void GeneralConfigPane::OnThrottlerChoiceChanged(wxCommandEvent& event) void GeneralConfigPane::OnCPUEngineRadioBoxChanged(wxCommandEvent& event) { - const int selection = m_cpu_engine_radiobox->GetSelection(); - - if (main_frame->g_pCodeWindow) - { - bool using_interp = (SConfig::GetInstance().iCPUCore == PowerPC::CORE_INTERPRETER); - main_frame->g_pCodeWindow->GetMenuBar()->Check(IDM_INTERPRETER, using_interp); - } - - SConfig::GetInstance().iCPUCore = cpu_cores[selection].CPUid; + SConfig::GetInstance().iCPUCore = m_cpu_cores.at(event.GetSelection()).CPUid; } void GeneralConfigPane::OnAnalyticsCheckBoxChanged(wxCommandEvent& event) diff --git a/Source/Core/DolphinWX/Config/GeneralConfigPane.h b/Source/Core/DolphinWX/Config/GeneralConfigPane.h index bfe7007ce4..e34565b86a 100644 --- a/Source/Core/DolphinWX/Config/GeneralConfigPane.h +++ b/Source/Core/DolphinWX/Config/GeneralConfigPane.h @@ -24,7 +24,7 @@ private: int CPUid; wxString name; }; - std::vector cpu_cores; + std::vector m_cpu_cores; void InitializeGUI(); void LoadGUIValues(); void RefreshGUI(); diff --git a/Source/Core/DolphinWX/Debugger/CodeWindow.cpp b/Source/Core/DolphinWX/Debugger/CodeWindow.cpp index 862af71fb8..c39efe0047 100644 --- a/Source/Core/DolphinWX/Debugger/CodeWindow.cpp +++ b/Source/Core/DolphinWX/Debugger/CodeWindow.cpp @@ -132,7 +132,7 @@ CCodeWindow::~CCodeWindow() m_aui_manager.UnInit(); } -wxMenuBar* CCodeWindow::GetMenuBar() +wxMenuBar* CCodeWindow::GetParentMenuBar() { return Parent->GetMenuBar(); } @@ -213,7 +213,6 @@ void CCodeWindow::OnCodeStep(wxCommandEvent& event) break; } - UpdateButtonStates(); // Update all toolbars in the aui manager Parent->UpdateGUI(); } @@ -502,9 +501,6 @@ void CCodeWindow::OnCPUMode(wxCommandEvent& event) // Clear the JIT cache to enable these changes JitInterface::ClearCache(); - - // Update - UpdateButtonStates(); } void CCodeWindow::OnJitMenu(wxCommandEvent& event) @@ -543,27 +539,27 @@ void CCodeWindow::OnJitMenu(wxCommandEvent& event) // Shortcuts bool CCodeWindow::UseInterpreter() { - return GetMenuBar()->IsChecked(IDM_INTERPRETER); + return GetParentMenuBar()->IsChecked(IDM_INTERPRETER); } bool CCodeWindow::BootToPause() { - return GetMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE); + return GetParentMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE); } bool CCodeWindow::AutomaticStart() { - return GetMenuBar()->IsChecked(IDM_AUTOMATIC_START); + return GetParentMenuBar()->IsChecked(IDM_AUTOMATIC_START); } bool CCodeWindow::JITNoBlockCache() { - return GetMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_CACHE); + return GetParentMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_CACHE); } bool CCodeWindow::JITNoBlockLinking() { - return GetMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_LINKING); + return GetParentMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_LINKING); } // Update GUI @@ -574,63 +570,20 @@ void CCodeWindow::Repopulate(bool refresh_codeview) if (refresh_codeview) codeview->Refresh(); + UpdateCallstack(); - UpdateButtonStates(); // Do not automatically show the current PC position when a breakpoint is hit or // when we pause since this can be called at other times too. // codeview->Center(PC); } -void CCodeWindow::UpdateButtonStates() +void CCodeWindow::UpdateFonts() { - bool Initialized = (Core::GetState() != Core::CORE_UNINITIALIZED); - bool Pause = (Core::GetState() == Core::CORE_PAUSE); - bool Stepping = CPU::IsStepping(); - bool can_step = Initialized && Stepping; - - GetMenuBar()->Enable(IDM_INTERPRETER, Pause); // CPU Mode - - GetMenuBar()->Enable(IDM_STEP, can_step); - GetMenuBar()->Enable(IDM_STEPOVER, can_step); - GetMenuBar()->Enable(IDM_STEPOUT, can_step); - - GetMenuBar()->Enable(IDM_JIT_NO_BLOCK_CACHE, !Initialized); - - GetMenuBar()->Enable(IDM_JIT_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_LS_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_LSLXZ_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_LSLWZ_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_LSLBZX_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_LSF_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_LSP_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_FP_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_I_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_P_OFF, Pause); - GetMenuBar()->Enable(IDM_JIT_SR_OFF, Pause); - - GetMenuBar()->Enable(IDM_CLEAR_CODE_CACHE, Pause); // JIT Menu - GetMenuBar()->Enable(IDM_SEARCH_INSTRUCTION, Initialized); - - GetMenuBar()->Enable(IDM_CLEAR_SYMBOLS, Initialized); // Symbols menu - GetMenuBar()->Enable(IDM_SCAN_FUNCTIONS, Initialized); - GetMenuBar()->Enable(IDM_LOAD_MAP_FILE, Initialized); - GetMenuBar()->Enable(IDM_SAVEMAPFILE, Initialized); - GetMenuBar()->Enable(IDM_LOAD_MAP_FILE_AS, Initialized); - GetMenuBar()->Enable(IDM_SAVE_MAP_FILE_AS, Initialized); - GetMenuBar()->Enable(IDM_LOAD_BAD_MAP_FILE, Initialized); - GetMenuBar()->Enable(IDM_SAVE_MAP_FILE_WITH_CODES, Initialized); - GetMenuBar()->Enable(IDM_CREATE_SIGNATURE_FILE, Initialized); - GetMenuBar()->Enable(IDM_APPEND_SIGNATURE_FILE, Initialized); - GetMenuBar()->Enable(IDM_COMBINE_SIGNATURE_FILES, Initialized); - GetMenuBar()->Enable(IDM_RENAME_SYMBOLS, Initialized); - GetMenuBar()->Enable(IDM_USE_SIGNATURE_FILE, Initialized); - GetMenuBar()->Enable(IDM_PATCH_HLE_FUNCTIONS, Initialized); - - // Update Fonts callstack->SetFont(DebuggerFont); symbols->SetFont(DebuggerFont); callers->SetFont(DebuggerFont); calls->SetFont(DebuggerFont); m_aui_manager.GetArtProvider()->SetFont(wxAUI_DOCKART_CAPTION_FONT, DebuggerFont); + m_aui_manager.Update(); } diff --git a/Source/Core/DolphinWX/Debugger/CodeWindow.h b/Source/Core/DolphinWX/Debugger/CodeWindow.h index 2b230ee5d0..b3f5bca191 100644 --- a/Source/Core/DolphinWX/Debugger/CodeWindow.h +++ b/Source/Core/DolphinWX/Debugger/CodeWindow.h @@ -83,9 +83,6 @@ public: void Load(); void Save(); - // Parent interaction - wxMenuBar* GetMenuBar(); - bool UseInterpreter(); bool BootToPause(); bool AutomaticStart(); @@ -95,10 +92,8 @@ public: void Repopulate(bool refresh_codeview = true); void NotifyMapLoaded(); - void UpdateButtonStates(); void OpenPages(); - // Menu bar // FIXME: This belongs in a separate class. void TogglePanel(int id, bool show); wxPanel* GetUntypedPanel(int id) const; @@ -128,6 +123,8 @@ public: int iNbAffiliation[IDM_DEBUG_WINDOW_LIST_END - IDM_DEBUG_WINDOW_LIST_START]; private: + wxMenuBar* GetParentMenuBar(); + void OnCPUMode(wxCommandEvent& event); void OnChangeFont(wxCommandEvent& event); @@ -151,6 +148,7 @@ private: void StepOut(); void ToggleBreakpoint(); + void UpdateFonts(); void UpdateLists(); void UpdateCallstack(); diff --git a/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp b/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp index ae33abc7ed..3206721851 100644 --- a/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp +++ b/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp @@ -93,8 +93,8 @@ void CCodeWindow::Save() IniFile::Section* general = ini.GetOrCreateSection("General"); general->Set("DebuggerFont", WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc())); - general->Set("AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATIC_START)); - general->Set("BootToPause", GetMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE)); + general->Set("AutomaticStart", GetParentMenuBar()->IsChecked(IDM_AUTOMATIC_START)); + general->Set("BootToPause", GetParentMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE)); const char* SettingName[] = {"Log", "LogConfig", "Console", "Registers", "Breakpoints", "Memory", "JIT", "Sound", "Video", "Code"}; @@ -102,7 +102,7 @@ void CCodeWindow::Save() // Save windows settings for (int i = IDM_LOG_WINDOW; i <= IDM_VIDEO_WINDOW; i++) ini.GetOrCreateSection("ShowOnStart") - ->Set(SettingName[i - IDM_LOG_WINDOW], GetMenuBar()->IsChecked(i)); + ->Set(SettingName[i - IDM_LOG_WINDOW], GetParentMenuBar()->IsChecked(i)); // Save notebook affiliations std::string section = "P - " + Parent->Perspectives[Parent->ActivePerspective].Name; @@ -125,7 +125,7 @@ void CCodeWindow::OnProfilerMenu(wxCommandEvent& event) Core::SetState(Core::CORE_PAUSE); if (jit != nullptr) jit->ClearCache(); - Profiler::g_ProfileBlocks = GetMenuBar()->IsChecked(IDM_PROFILE_BLOCKS); + Profiler::g_ProfileBlocks = GetParentMenuBar()->IsChecked(IDM_PROFILE_BLOCKS); Core::SetState(Core::CORE_RUN); break; case IDM_WRITE_PROFILE: @@ -447,6 +447,7 @@ void CCodeWindow::OnChangeFont(wxCommandEvent& event) if (dialog.ShowModal() == wxID_OK) DebuggerFont = dialog.GetFontData().GetChosenFont(); + UpdateFonts(); // TODO: Send event to all panels that tells them to reload the font when it changes. } @@ -466,7 +467,7 @@ void CCodeWindow::TogglePanel(int id, bool show) wxPanel* panel = GetUntypedPanel(id); // Not all the panels (i.e. CodeWindow) have corresponding menu options. - wxMenuItem* item = GetMenuBar()->FindItem(id); + wxMenuItem* item = GetParentMenuBar()->FindItem(id); if (item) item->Check(show); diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp index 2d528fc45f..c966bf84f6 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -429,16 +429,11 @@ CFrame::CFrame(wxFrame* parent, wxWindowID id, const wxString& title, wxRect geo X11Utils::XWindowFromHandle(GetHandle())); #endif - // ------------------------- // Connect event handlers - m_Mgr->Bind(wxEVT_AUI_RENDER, &CFrame::OnManagerResize, this); - // ---------- // Update controls UpdateGUI(); - if (g_pCodeWindow) - g_pCodeWindow->UpdateButtonStates(); // check if game is running InitControllers(); diff --git a/Source/Core/DolphinWX/Frame.h b/Source/Core/DolphinWX/Frame.h index 7024469da8..e2cf78c054 100644 --- a/Source/Core/DolphinWX/Frame.h +++ b/Source/Core/DolphinWX/Frame.h @@ -179,6 +179,8 @@ private: void BindEvents(); void BindMenuBarEvents(); + void BindDebuggerMenuBarEvents(); + void BindDebuggerMenuBarUpdateEvents(); wxToolBar* OnCreateToolBar(long style, wxWindowID id, const wxString& name) override; wxMenuBar* CreateMenuBar() const; @@ -235,6 +237,12 @@ private: void OnReloadThemeBitmaps(wxCommandEvent& event); + void OnEnableMenuItemIfCoreInitialized(wxUpdateUIEvent& event); + void OnEnableMenuItemIfCoreUninitialized(wxUpdateUIEvent& event); + void OnEnableMenuItemIfCorePaused(wxUpdateUIEvent& event); + void OnEnableMenuItemIfCPUCanStep(wxUpdateUIEvent& event); + void OnUpdateInterpreterMenuItem(wxUpdateUIEvent& event); + void OnOpen(wxCommandEvent& event); // File menu void DoOpen(bool Boot); void OnRefresh(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp index b48dad0e5f..cb4297585f 100644 --- a/Source/Core/DolphinWX/FrameTools.cpp +++ b/Source/Core/DolphinWX/FrameTools.cpp @@ -176,6 +176,18 @@ void CFrame::BindMenuBarEvents() Bind(wxEVT_MENU, &CFrame::GameListChanged, this, IDM_PURGE_GAME_LIST_CACHE); Bind(wxEVT_MENU, &CFrame::OnChangeColumnsVisible, this, IDM_SHOW_SYSTEM, IDM_SHOW_STATE); + // Help menu + Bind(wxEVT_MENU, &CFrame::OnHelp, this, IDM_HELP_WEBSITE); + Bind(wxEVT_MENU, &CFrame::OnHelp, this, IDM_HELP_ONLINE_DOCS); + Bind(wxEVT_MENU, &CFrame::OnHelp, this, IDM_HELP_GITHUB); + Bind(wxEVT_MENU, &CFrame::OnHelp, this, wxID_ABOUT); + + if (UseDebugger) + BindDebuggerMenuBarEvents(); +} + +void CFrame::BindDebuggerMenuBarEvents() +{ // Debug menu Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_SAVE_PERSPECTIVE); Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_EDIT_PERSPECTIVES); @@ -189,11 +201,51 @@ void CFrame::BindMenuBarEvents() Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_TAB_SPLIT); Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_NO_DOCKING); - // Help menu - Bind(wxEVT_MENU, &CFrame::OnHelp, this, IDM_HELP_WEBSITE); - Bind(wxEVT_MENU, &CFrame::OnHelp, this, IDM_HELP_ONLINE_DOCS); - Bind(wxEVT_MENU, &CFrame::OnHelp, this, IDM_HELP_GITHUB); - Bind(wxEVT_MENU, &CFrame::OnHelp, this, wxID_ABOUT); + BindDebuggerMenuBarUpdateEvents(); +} + +void CFrame::BindDebuggerMenuBarUpdateEvents() +{ + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCPUCanStep, this, IDM_STEP); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCPUCanStep, this, IDM_STEPOUT); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCPUCanStep, this, IDM_STEPOVER); + + Bind(wxEVT_UPDATE_UI, &CFrame::OnUpdateInterpreterMenuItem, this, IDM_INTERPRETER); + + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_LS_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_LSLXZ_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_LSLWZ_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_LSLBZX_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_LSF_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_LSP_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_FP_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_I_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_P_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_JIT_SR_OFF); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCorePaused, this, IDM_CLEAR_CODE_CACHE); + + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_SEARCH_INSTRUCTION); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_CLEAR_SYMBOLS); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_SCAN_FUNCTIONS); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_LOAD_MAP_FILE); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_SAVEMAPFILE); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_LOAD_MAP_FILE_AS); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_SAVE_MAP_FILE_AS); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_LOAD_BAD_MAP_FILE); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, + IDM_SAVE_MAP_FILE_WITH_CODES); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, + IDM_CREATE_SIGNATURE_FILE); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, + IDM_APPEND_SIGNATURE_FILE); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, + IDM_COMBINE_SIGNATURE_FILES); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_RENAME_SYMBOLS); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_USE_SIGNATURE_FILE); + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreInitialized, this, IDM_PATCH_HLE_FUNCTIONS); + + Bind(wxEVT_UPDATE_UI, &CFrame::OnEnableMenuItemIfCoreUninitialized, this, IDM_JIT_NO_BLOCK_CACHE); } wxToolBar* CFrame::OnCreateToolBar(long style, wxWindowID id, const wxString& name) @@ -1015,6 +1067,36 @@ void CFrame::OnReloadThemeBitmaps(wxCommandEvent& WXUNUSED(event)) UpdateGameList(); } +void CFrame::OnEnableMenuItemIfCoreInitialized(wxUpdateUIEvent& event) +{ + event.Enable(Core::GetState() != Core::CORE_UNINITIALIZED); +} + +void CFrame::OnEnableMenuItemIfCoreUninitialized(wxUpdateUIEvent& event) +{ + event.Enable(Core::GetState() == Core::CORE_UNINITIALIZED); +} + +void CFrame::OnEnableMenuItemIfCorePaused(wxUpdateUIEvent& event) +{ + event.Enable(Core::GetState() == Core::CORE_PAUSE); +} + +void CFrame::OnEnableMenuItemIfCPUCanStep(wxUpdateUIEvent& event) +{ + event.Enable(Core::GetState() != Core::CORE_UNINITIALIZED && CPU::IsStepping()); +} + +void CFrame::OnUpdateInterpreterMenuItem(wxUpdateUIEvent& event) +{ + OnEnableMenuItemIfCorePaused(event); + + if (GetMenuBar()->FindItem(IDM_INTERPRETER)->IsChecked()) + return; + + event.Check(SConfig::GetInstance().iCPUCore == PowerPC::CORE_INTERPRETER); +} + void CFrame::ClearStatusBar() { if (this->GetStatusBar()->IsEnabled())