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+
// Refer to the license.txt file included.
#include "DolphinWX/Config/GeneralConfigPane.h"
#include <wx/button.h>
#include <wx/checkbox.h>
#include <wx/choice.h>
@ -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)

View File

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

View File

@ -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();
}

View File

@ -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();

View File

@ -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);

View File

@ -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();

View File

@ -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);

View File

@ -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())