mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
WX: HiDPI: FrameAUI / Debugger
Changes: - MemoryWindow was cleaned up and gives more feedback on searches. Some bugs were fixed as well: - A complex bug that allowed tearing off tabs and opening multiple copies of a debug panel which lead to segfaults - Another segfault related to right-click menus on code/memory views when those tools were floating in their own window.
This commit is contained in:
@ -4,6 +4,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
|
||||
#include <wx/aui/framemanager.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/panel.h>
|
||||
@ -12,16 +14,16 @@
|
||||
#include "Common/Event.h"
|
||||
#include "DolphinWX/Globals.h"
|
||||
|
||||
class CCodeView;
|
||||
class CFrame;
|
||||
struct SConfig;
|
||||
class CBreakPointWindow;
|
||||
class CRegisterWindow;
|
||||
class CWatchWindow;
|
||||
class CBreakPointWindow;
|
||||
class CMemoryWindow;
|
||||
class CJitWindow;
|
||||
class CCodeView;
|
||||
class DSPDebuggerLLE;
|
||||
class GFXDebuggerPanel;
|
||||
struct SConfig;
|
||||
|
||||
class DolphinAuiToolBar;
|
||||
class wxListBox;
|
||||
@ -29,6 +31,48 @@ class wxMenu;
|
||||
class wxMenuBar;
|
||||
class wxToolBar;
|
||||
|
||||
namespace Details
|
||||
{
|
||||
template <class T>
|
||||
struct DebugPanelToID;
|
||||
|
||||
template <>
|
||||
struct DebugPanelToID<CBreakPointWindow>
|
||||
{
|
||||
static constexpr int ID = IDM_BREAKPOINT_WINDOW;
|
||||
};
|
||||
template <>
|
||||
struct DebugPanelToID<CRegisterWindow>
|
||||
{
|
||||
static constexpr int ID = IDM_REGISTER_WINDOW;
|
||||
};
|
||||
template <>
|
||||
struct DebugPanelToID<CWatchWindow>
|
||||
{
|
||||
static constexpr int ID = IDM_WATCH_WINDOW;
|
||||
};
|
||||
template <>
|
||||
struct DebugPanelToID<CMemoryWindow>
|
||||
{
|
||||
static constexpr int ID = IDM_MEMORY_WINDOW;
|
||||
};
|
||||
template <>
|
||||
struct DebugPanelToID<CJitWindow>
|
||||
{
|
||||
static constexpr int ID = IDM_JIT_WINDOW;
|
||||
};
|
||||
template <>
|
||||
struct DebugPanelToID<DSPDebuggerLLE>
|
||||
{
|
||||
static constexpr int ID = IDM_SOUND_WINDOW;
|
||||
};
|
||||
template <>
|
||||
struct DebugPanelToID<GFXDebuggerPanel>
|
||||
{
|
||||
static constexpr int ID = IDM_VIDEO_WINDOW;
|
||||
};
|
||||
}
|
||||
|
||||
class CCodeWindow : public wxPanel
|
||||
{
|
||||
public:
|
||||
@ -41,10 +85,8 @@ public:
|
||||
void Save();
|
||||
|
||||
// Parent interaction
|
||||
CFrame* Parent;
|
||||
wxMenuBar* GetMenuBar();
|
||||
wxToolBar* GetToolBar();
|
||||
wxBitmap m_Bitmaps[Toolbar_Debug_Bitmap_Max];
|
||||
|
||||
bool UseInterpreter();
|
||||
bool BootToPause();
|
||||
@ -53,7 +95,7 @@ public:
|
||||
bool JITNoBlockLinking();
|
||||
bool JumpToAddress(u32 address);
|
||||
|
||||
void Update() override;
|
||||
void Repopulate();
|
||||
void NotifyMapLoaded();
|
||||
void CreateMenu(const SConfig& _LocalCoreStartupParameter, wxMenuBar* pMenuBar);
|
||||
void CreateMenuOptions(wxMenu* pMenu);
|
||||
@ -63,29 +105,35 @@ public:
|
||||
void OpenPages();
|
||||
|
||||
// Menu bar
|
||||
void ToggleCodeWindow(bool bShow);
|
||||
void ToggleRegisterWindow(bool bShow);
|
||||
void ToggleWatchWindow(bool bShow);
|
||||
void ToggleBreakPointWindow(bool bShow);
|
||||
void ToggleMemoryWindow(bool bShow);
|
||||
void ToggleJitWindow(bool bShow);
|
||||
void ToggleSoundWindow(bool bShow);
|
||||
void ToggleVideoWindow(bool bShow);
|
||||
// FIXME: This belongs in a separate class.
|
||||
void TogglePanel(int id, bool show);
|
||||
wxPanel* GetUntypedPanel(int id) const;
|
||||
bool HasUntypedPanel(int id) const { return GetUntypedPanel(id) != nullptr; }
|
||||
template <class T>
|
||||
T* GetPanel() const
|
||||
{
|
||||
return static_cast<T*>(GetUntypedPanel(Details::DebugPanelToID<T>::ID));
|
||||
}
|
||||
template <class T>
|
||||
bool HasPanel() const
|
||||
{
|
||||
return HasUntypedPanel(Details::DebugPanelToID<T>::ID);
|
||||
}
|
||||
template <class T>
|
||||
T* RequirePanel()
|
||||
{
|
||||
if (T* p = GetPanel<T>())
|
||||
return p;
|
||||
|
||||
// Sub dialogs
|
||||
CRegisterWindow* m_RegisterWindow;
|
||||
CWatchWindow* m_WatchWindow;
|
||||
CBreakPointWindow* m_BreakpointWindow;
|
||||
CMemoryWindow* m_MemoryWindow;
|
||||
CJitWindow* m_JitWindow;
|
||||
DSPDebuggerLLE* m_SoundWindow;
|
||||
GFXDebuggerPanel* m_VideoWindow;
|
||||
TogglePanel(Details::DebugPanelToID<T>::ID, true);
|
||||
return GetPanel<T>();
|
||||
}
|
||||
|
||||
// Settings
|
||||
bool bAutomaticStart;
|
||||
bool bBootToPause;
|
||||
bool bShowOnStart[IDM_VIDEO_WINDOW - IDM_LOG_WINDOW + 1];
|
||||
int iNbAffiliation[IDM_CODE_WINDOW - IDM_LOG_WINDOW + 1];
|
||||
bool bShowOnStart[IDM_DEBUG_WINDOW_LIST_END - IDM_DEBUG_WINDOW_LIST_START];
|
||||
int iNbAffiliation[IDM_DEBUG_WINDOW_LIST_END - IDM_DEBUG_WINDOW_LIST_START];
|
||||
|
||||
private:
|
||||
void OnCPUMode(wxCommandEvent& event);
|
||||
@ -99,7 +147,6 @@ private:
|
||||
void OnProfilerMenu(wxCommandEvent& event);
|
||||
|
||||
void OnSymbolListChange(wxCommandEvent& event);
|
||||
void OnSymbolListContextMenu(wxContextMenuEvent& event);
|
||||
void OnCallstackListChange(wxCommandEvent& event);
|
||||
void OnCallersListChange(wxCommandEvent& event);
|
||||
void OnCallsListChange(wxCommandEvent& event);
|
||||
@ -116,7 +163,15 @@ private:
|
||||
void UpdateCallstack();
|
||||
|
||||
void InitBitmaps();
|
||||
wxPanel* CreateSiblingPanel(int id);
|
||||
|
||||
wxBitmap m_Bitmaps[Toolbar_Debug_Bitmap_Max];
|
||||
|
||||
// Sibling debugger panels
|
||||
// FIXME: This obviously belongs in some manager class above this one.
|
||||
std::array<wxPanel*, IDM_DEBUG_WINDOW_LIST_END - IDM_DEBUG_WINDOW_LIST_START> m_sibling_panels;
|
||||
|
||||
CFrame* Parent;
|
||||
CCodeView* codeview;
|
||||
wxListBox* callstack;
|
||||
wxListBox* symbols;
|
||||
|
Reference in New Issue
Block a user