Merge pull request #4422 from lioncash/codewindow-menu

CodeWindow: Migrate more menubar handling code to CFrame
This commit is contained in:
Mat M 2016-11-05 08:19:28 -04:00 committed by GitHub
commit 0ad4e70fc5
8 changed files with 121 additions and 94 deletions

View File

@ -2,6 +2,8 @@
// Licensed under GPLv2+ // Licensed under GPLv2+
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "DolphinWX/Config/GeneralConfigPane.h"
#include <wx/button.h> #include <wx/button.h>
#include <wx/checkbox.h> #include <wx/checkbox.h>
#include <wx/choice.h> #include <wx/choice.h>
@ -16,14 +18,10 @@
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/Core.h" #include "Core/Core.h"
#include "Core/PowerPC/PowerPC.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) GeneralConfigPane::GeneralConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id)
{ {
cpu_cores = { m_cpu_cores = {
{PowerPC::CORE_INTERPRETER, _("Interpreter (slowest)")}, {PowerPC::CORE_INTERPRETER, _("Interpreter (slowest)")},
{PowerPC::CORE_CACHEDINTERPRETER, _("Cached Interpreter (slower)")}, {PowerPC::CORE_CACHEDINTERPRETER, _("Cached Interpreter (slower)")},
#ifdef _M_X86_64 #ifdef _M_X86_64
@ -50,7 +48,7 @@ void GeneralConfigPane::InitializeGUI()
m_throttler_array_string.Add(wxString::Format(_("%i%%"), i)); 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_cpu_engine_array_string.Add(cpu_core.name);
m_dual_core_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Dual Core (speedup)")); 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()) if (selection < m_throttler_array_string.size())
m_throttler_choice->SetSelection(selection); 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); m_cpu_engine_radiobox->SetSelection(i);
} }
} }
@ -200,15 +198,7 @@ void GeneralConfigPane::OnThrottlerChoiceChanged(wxCommandEvent& event)
void GeneralConfigPane::OnCPUEngineRadioBoxChanged(wxCommandEvent& event) void GeneralConfigPane::OnCPUEngineRadioBoxChanged(wxCommandEvent& event)
{ {
const int selection = m_cpu_engine_radiobox->GetSelection(); SConfig::GetInstance().iCPUCore = m_cpu_cores.at(event.GetSelection()).CPUid;
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;
} }
void GeneralConfigPane::OnAnalyticsCheckBoxChanged(wxCommandEvent& event) void GeneralConfigPane::OnAnalyticsCheckBoxChanged(wxCommandEvent& event)

View File

@ -24,7 +24,7 @@ private:
int CPUid; int CPUid;
wxString name; wxString name;
}; };
std::vector<CPUCore> cpu_cores; std::vector<CPUCore> m_cpu_cores;
void InitializeGUI(); void InitializeGUI();
void LoadGUIValues(); void LoadGUIValues();
void RefreshGUI(); void RefreshGUI();

View File

@ -132,7 +132,7 @@ CCodeWindow::~CCodeWindow()
m_aui_manager.UnInit(); m_aui_manager.UnInit();
} }
wxMenuBar* CCodeWindow::GetMenuBar() wxMenuBar* CCodeWindow::GetParentMenuBar()
{ {
return Parent->GetMenuBar(); return Parent->GetMenuBar();
} }
@ -213,7 +213,6 @@ void CCodeWindow::OnCodeStep(wxCommandEvent& event)
break; break;
} }
UpdateButtonStates();
// Update all toolbars in the aui manager // Update all toolbars in the aui manager
Parent->UpdateGUI(); Parent->UpdateGUI();
} }
@ -502,9 +501,6 @@ void CCodeWindow::OnCPUMode(wxCommandEvent& event)
// Clear the JIT cache to enable these changes // Clear the JIT cache to enable these changes
JitInterface::ClearCache(); JitInterface::ClearCache();
// Update
UpdateButtonStates();
} }
void CCodeWindow::OnJitMenu(wxCommandEvent& event) void CCodeWindow::OnJitMenu(wxCommandEvent& event)
@ -543,27 +539,27 @@ void CCodeWindow::OnJitMenu(wxCommandEvent& event)
// Shortcuts // Shortcuts
bool CCodeWindow::UseInterpreter() bool CCodeWindow::UseInterpreter()
{ {
return GetMenuBar()->IsChecked(IDM_INTERPRETER); return GetParentMenuBar()->IsChecked(IDM_INTERPRETER);
} }
bool CCodeWindow::BootToPause() bool CCodeWindow::BootToPause()
{ {
return GetMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE); return GetParentMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE);
} }
bool CCodeWindow::AutomaticStart() bool CCodeWindow::AutomaticStart()
{ {
return GetMenuBar()->IsChecked(IDM_AUTOMATIC_START); return GetParentMenuBar()->IsChecked(IDM_AUTOMATIC_START);
} }
bool CCodeWindow::JITNoBlockCache() bool CCodeWindow::JITNoBlockCache()
{ {
return GetMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_CACHE); return GetParentMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_CACHE);
} }
bool CCodeWindow::JITNoBlockLinking() bool CCodeWindow::JITNoBlockLinking()
{ {
return GetMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_LINKING); return GetParentMenuBar()->IsChecked(IDM_JIT_NO_BLOCK_LINKING);
} }
// Update GUI // Update GUI
@ -574,63 +570,20 @@ void CCodeWindow::Repopulate(bool refresh_codeview)
if (refresh_codeview) if (refresh_codeview)
codeview->Refresh(); codeview->Refresh();
UpdateCallstack(); UpdateCallstack();
UpdateButtonStates();
// Do not automatically show the current PC position when a breakpoint is hit or // 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. // when we pause since this can be called at other times too.
// codeview->Center(PC); // 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); callstack->SetFont(DebuggerFont);
symbols->SetFont(DebuggerFont); symbols->SetFont(DebuggerFont);
callers->SetFont(DebuggerFont); callers->SetFont(DebuggerFont);
calls->SetFont(DebuggerFont); calls->SetFont(DebuggerFont);
m_aui_manager.GetArtProvider()->SetFont(wxAUI_DOCKART_CAPTION_FONT, DebuggerFont); m_aui_manager.GetArtProvider()->SetFont(wxAUI_DOCKART_CAPTION_FONT, DebuggerFont);
m_aui_manager.Update();
} }

View File

@ -83,9 +83,6 @@ public:
void Load(); void Load();
void Save(); void Save();
// Parent interaction
wxMenuBar* GetMenuBar();
bool UseInterpreter(); bool UseInterpreter();
bool BootToPause(); bool BootToPause();
bool AutomaticStart(); bool AutomaticStart();
@ -95,10 +92,8 @@ public:
void Repopulate(bool refresh_codeview = true); void Repopulate(bool refresh_codeview = true);
void NotifyMapLoaded(); void NotifyMapLoaded();
void UpdateButtonStates();
void OpenPages(); void OpenPages();
// Menu bar
// FIXME: This belongs in a separate class. // FIXME: This belongs in a separate class.
void TogglePanel(int id, bool show); void TogglePanel(int id, bool show);
wxPanel* GetUntypedPanel(int id) const; wxPanel* GetUntypedPanel(int id) const;
@ -128,6 +123,8 @@ public:
int iNbAffiliation[IDM_DEBUG_WINDOW_LIST_END - IDM_DEBUG_WINDOW_LIST_START]; int iNbAffiliation[IDM_DEBUG_WINDOW_LIST_END - IDM_DEBUG_WINDOW_LIST_START];
private: private:
wxMenuBar* GetParentMenuBar();
void OnCPUMode(wxCommandEvent& event); void OnCPUMode(wxCommandEvent& event);
void OnChangeFont(wxCommandEvent& event); void OnChangeFont(wxCommandEvent& event);
@ -151,6 +148,7 @@ private:
void StepOut(); void StepOut();
void ToggleBreakpoint(); void ToggleBreakpoint();
void UpdateFonts();
void UpdateLists(); void UpdateLists();
void UpdateCallstack(); void UpdateCallstack();

View File

@ -93,8 +93,8 @@ void CCodeWindow::Save()
IniFile::Section* general = ini.GetOrCreateSection("General"); IniFile::Section* general = ini.GetOrCreateSection("General");
general->Set("DebuggerFont", WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc())); general->Set("DebuggerFont", WxStrToStr(DebuggerFont.GetNativeFontInfoUserDesc()));
general->Set("AutomaticStart", GetMenuBar()->IsChecked(IDM_AUTOMATIC_START)); general->Set("AutomaticStart", GetParentMenuBar()->IsChecked(IDM_AUTOMATIC_START));
general->Set("BootToPause", GetMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE)); general->Set("BootToPause", GetParentMenuBar()->IsChecked(IDM_BOOT_TO_PAUSE));
const char* SettingName[] = {"Log", "LogConfig", "Console", "Registers", "Breakpoints", const char* SettingName[] = {"Log", "LogConfig", "Console", "Registers", "Breakpoints",
"Memory", "JIT", "Sound", "Video", "Code"}; "Memory", "JIT", "Sound", "Video", "Code"};
@ -102,7 +102,7 @@ void CCodeWindow::Save()
// Save windows settings // Save windows settings
for (int i = IDM_LOG_WINDOW; i <= IDM_VIDEO_WINDOW; i++) for (int i = IDM_LOG_WINDOW; i <= IDM_VIDEO_WINDOW; i++)
ini.GetOrCreateSection("ShowOnStart") ini.GetOrCreateSection("ShowOnStart")
->Set(SettingName[i - IDM_LOG_WINDOW], GetMenuBar()->IsChecked(i)); ->Set(SettingName[i - IDM_LOG_WINDOW], GetParentMenuBar()->IsChecked(i));
// Save notebook affiliations // Save notebook affiliations
std::string section = "P - " + Parent->Perspectives[Parent->ActivePerspective].Name; std::string section = "P - " + Parent->Perspectives[Parent->ActivePerspective].Name;
@ -125,7 +125,7 @@ void CCodeWindow::OnProfilerMenu(wxCommandEvent& event)
Core::SetState(Core::CORE_PAUSE); Core::SetState(Core::CORE_PAUSE);
if (jit != nullptr) if (jit != nullptr)
jit->ClearCache(); jit->ClearCache();
Profiler::g_ProfileBlocks = GetMenuBar()->IsChecked(IDM_PROFILE_BLOCKS); Profiler::g_ProfileBlocks = GetParentMenuBar()->IsChecked(IDM_PROFILE_BLOCKS);
Core::SetState(Core::CORE_RUN); Core::SetState(Core::CORE_RUN);
break; break;
case IDM_WRITE_PROFILE: case IDM_WRITE_PROFILE:
@ -447,6 +447,7 @@ void CCodeWindow::OnChangeFont(wxCommandEvent& event)
if (dialog.ShowModal() == wxID_OK) if (dialog.ShowModal() == wxID_OK)
DebuggerFont = dialog.GetFontData().GetChosenFont(); DebuggerFont = dialog.GetFontData().GetChosenFont();
UpdateFonts();
// TODO: Send event to all panels that tells them to reload the font when it changes. // 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); wxPanel* panel = GetUntypedPanel(id);
// Not all the panels (i.e. CodeWindow) have corresponding menu options. // Not all the panels (i.e. CodeWindow) have corresponding menu options.
wxMenuItem* item = GetMenuBar()->FindItem(id); wxMenuItem* item = GetParentMenuBar()->FindItem(id);
if (item) if (item)
item->Check(show); item->Check(show);

View File

@ -429,16 +429,11 @@ CFrame::CFrame(wxFrame* parent, wxWindowID id, const wxString& title, wxRect geo
X11Utils::XWindowFromHandle(GetHandle())); X11Utils::XWindowFromHandle(GetHandle()));
#endif #endif
// -------------------------
// Connect event handlers // Connect event handlers
m_Mgr->Bind(wxEVT_AUI_RENDER, &CFrame::OnManagerResize, this); m_Mgr->Bind(wxEVT_AUI_RENDER, &CFrame::OnManagerResize, this);
// ----------
// Update controls // Update controls
UpdateGUI(); UpdateGUI();
if (g_pCodeWindow)
g_pCodeWindow->UpdateButtonStates();
// check if game is running // check if game is running
InitControllers(); InitControllers();

View File

@ -179,6 +179,8 @@ private:
void BindEvents(); void BindEvents();
void BindMenuBarEvents(); void BindMenuBarEvents();
void BindDebuggerMenuBarEvents();
void BindDebuggerMenuBarUpdateEvents();
wxToolBar* OnCreateToolBar(long style, wxWindowID id, const wxString& name) override; wxToolBar* OnCreateToolBar(long style, wxWindowID id, const wxString& name) override;
wxMenuBar* CreateMenuBar() const; wxMenuBar* CreateMenuBar() const;
@ -235,6 +237,12 @@ private:
void OnReloadThemeBitmaps(wxCommandEvent& event); 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 OnOpen(wxCommandEvent& event); // File menu
void DoOpen(bool Boot); void DoOpen(bool Boot);
void OnRefresh(wxCommandEvent& event); void OnRefresh(wxCommandEvent& event);

View File

@ -176,6 +176,18 @@ void CFrame::BindMenuBarEvents()
Bind(wxEVT_MENU, &CFrame::GameListChanged, this, IDM_PURGE_GAME_LIST_CACHE); Bind(wxEVT_MENU, &CFrame::GameListChanged, this, IDM_PURGE_GAME_LIST_CACHE);
Bind(wxEVT_MENU, &CFrame::OnChangeColumnsVisible, this, IDM_SHOW_SYSTEM, IDM_SHOW_STATE); 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 // Debug menu
Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_SAVE_PERSPECTIVE); Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_SAVE_PERSPECTIVE);
Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_EDIT_PERSPECTIVES); 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_TAB_SPLIT);
Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_NO_DOCKING); Bind(wxEVT_MENU, &CFrame::OnPerspectiveMenu, this, IDM_NO_DOCKING);
// Help menu BindDebuggerMenuBarUpdateEvents();
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); void CFrame::BindDebuggerMenuBarUpdateEvents()
Bind(wxEVT_MENU, &CFrame::OnHelp, this, wxID_ABOUT); {
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) wxToolBar* CFrame::OnCreateToolBar(long style, wxWindowID id, const wxString& name)
@ -1015,6 +1067,36 @@ void CFrame::OnReloadThemeBitmaps(wxCommandEvent& WXUNUSED(event))
UpdateGameList(); 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() void CFrame::ClearStatusBar()
{ {
if (this->GetStatusBar()->IsEnabled()) if (this->GetStatusBar()->IsEnabled())