mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-12-29 16:37:03 +00:00
* Make PPC threads/texture cache info window columns untranslatable * Make several window titles translatable * Make About window text translatable * Fix <profile name> placeholder not being recognized as translatable * Miscellaneous improvements to GUI strings * Add a few missing entries to gitignore * Adjust Italian translation of Linux files
137 lines
3.5 KiB
C++
137 lines
3.5 KiB
C++
#include "gui/wxgui.h"
|
|
#include "gui/guiWrapper.h"
|
|
#include "gui/debugger/ModuleWindow.h"
|
|
|
|
#include <sstream>
|
|
|
|
#include "gui/debugger/DebuggerWindow2.h"
|
|
#include "Cafe/HW/Espresso/Debugger/Debugger.h"
|
|
|
|
#include "Cafe/OS/RPL/rpl.h"
|
|
#include "Cafe/OS/RPL/rpl_structs.h"
|
|
|
|
#include "Cafe/GraphicPack/GraphicPack2.h"
|
|
|
|
enum ItemColumns
|
|
{
|
|
ColumnName = 0,
|
|
ColumnAddress,
|
|
ColumnSize,
|
|
};
|
|
|
|
ModuleWindow::ModuleWindow(DebuggerWindow2& parent, const wxPoint& main_position, const wxSize& main_size)
|
|
: wxFrame(&parent, wxID_ANY, _("Modules"), wxDefaultPosition, wxSize(420, 250), wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN | wxRESIZE_BORDER | wxFRAME_FLOAT_ON_PARENT)
|
|
{
|
|
this->SetSizeHints(wxDefaultSize, wxDefaultSize);
|
|
|
|
this->wxWindowBase::SetBackgroundColour(*wxWHITE);
|
|
|
|
wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
m_modules = new wxListView(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT);
|
|
|
|
wxListItem col0;
|
|
col0.SetId(ColumnName);
|
|
col0.SetText(_("Name"));
|
|
col0.SetWidth(125);
|
|
m_modules->InsertColumn(ColumnName, col0);
|
|
|
|
wxListItem col1;
|
|
col1.SetId(ColumnAddress);
|
|
col1.SetText(_("Address"));
|
|
col1.SetWidth(75);
|
|
col1.SetAlign(wxLIST_FORMAT_RIGHT);
|
|
m_modules->InsertColumn(ColumnAddress, col1);
|
|
|
|
wxListItem col2;
|
|
col2.SetId(ColumnSize);
|
|
col2.SetText(_("Size"));
|
|
col2.SetWidth(75);
|
|
col2.SetAlign(wxLIST_FORMAT_RIGHT);
|
|
m_modules->InsertColumn(ColumnSize, col2);
|
|
|
|
main_sizer->Add(m_modules, 1, wxEXPAND);
|
|
|
|
this->SetSizer(main_sizer);
|
|
this->wxWindowBase::Layout();
|
|
|
|
this->Centre(wxBOTH);
|
|
|
|
if (parent.GetConfig().data().pin_to_main)
|
|
OnMainMove(main_position, main_size);
|
|
|
|
m_modules->Bind(wxEVT_LEFT_DCLICK, &ModuleWindow::OnLeftDClick, this);
|
|
|
|
OnGameLoaded();
|
|
}
|
|
|
|
void ModuleWindow::OnMainMove(const wxPoint& main_position, const wxSize& main_size)
|
|
{
|
|
wxSize size(420, 250);
|
|
this->SetSize(size);
|
|
|
|
wxPoint position = main_position;
|
|
position.x -= 420;
|
|
position.y += main_size.y;
|
|
this->SetPosition(position);
|
|
}
|
|
|
|
|
|
void ModuleWindow::OnGameLoaded()
|
|
{
|
|
Freeze();
|
|
|
|
m_modules->DeleteAllItems();
|
|
|
|
const auto module_count = RPLLoader_GetModuleCount();
|
|
const auto module_list = RPLLoader_GetModuleList();
|
|
for (int i = 0; i < module_count; i++)
|
|
{
|
|
const auto module = module_list[i];
|
|
if (module)
|
|
{
|
|
wxListItem item;
|
|
item.SetId(i);
|
|
item.SetText(module->moduleName2.c_str());
|
|
|
|
const auto index = m_modules->InsertItem(item);
|
|
m_modules->SetItem(index, ColumnAddress, wxString::Format("%08x", module->regionMappingBase_text.GetMPTR()));
|
|
m_modules->SetItem(index, ColumnSize, wxString::Format("%x", module->regionSize_text));
|
|
}
|
|
}
|
|
|
|
sint32 patch_count = 0;
|
|
for (auto& gfx_pack : GraphicPack2::GetGraphicPacks())
|
|
{
|
|
for (auto& patch_group : gfx_pack->GetPatchGroups())
|
|
{
|
|
if (patch_group->isApplied())
|
|
{
|
|
wxListItem item;
|
|
item.SetId(module_count + patch_count);
|
|
item.SetText(std::string(patch_group->getName()));
|
|
|
|
const auto index = m_modules->InsertItem(item);
|
|
m_modules->SetItem(index, ColumnAddress, wxString::Format("%08x", patch_group->getCodeCaveBase()));
|
|
m_modules->SetItem(index, ColumnSize, wxString::Format("%x", patch_group->getCodeCaveSize()));
|
|
patch_count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
Thaw();
|
|
}
|
|
|
|
|
|
void ModuleWindow::OnLeftDClick(wxMouseEvent& event)
|
|
{
|
|
long selected = m_modules->GetFirstSelected();
|
|
if (selected == -1)
|
|
return;
|
|
const auto text = m_modules->GetItemText(selected, ColumnAddress);
|
|
const auto address = std::stoul(text.ToStdString(), nullptr, 16);
|
|
if (address == 0)
|
|
return;
|
|
debuggerState.debugSession.instructionPointer = address;
|
|
debuggerWindow_moveIP();
|
|
}
|