More GFX plugin cleanup, still no visible changes.

New right-click popup menu in game list - allow editing patch files easily.


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@31 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
hrydgard
2008-07-20 12:26:32 +00:00
parent c7795c41b7
commit 461077b1a1
52 changed files with 509 additions and 805 deletions

View File

@ -187,6 +187,15 @@ CFrame::CreateMenu()
m_pMenuBar->Append(fileMenu, _T("&File"));
}
// Game menu
{
wxMenu* pGameMenu = new wxMenu;
{
wxMenuItem *pItem = new wxMenuItem(pGameMenu, IDM_EDITPATCHFILE, "Edit patch file");
pGameMenu->Append(pItem);
}
}
// emulation menu
{
wxMenu* pEmulationMenu = new wxMenu;

View File

@ -18,8 +18,10 @@
#include "Globals.h"
#include <wx/imaglist.h>
#include <algorithm>
#include "FileSearch.h"
#include "FileUtil.h"
#include "StringUtil.h"
#include "BootManager.h"
#include "Config.h"
@ -42,6 +44,8 @@ EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, CGameListCtrl::OnColBeginDrag)
EVT_LIST_ITEM_SELECTED(LIST_CTRL, CGameListCtrl::OnSelected)
EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, CGameListCtrl::OnActivated)
EVT_LIST_COL_END_DRAG(LIST_CTRL, CGameListCtrl::OnColEndDrag)
EVT_MENU(IDM_EDITPATCHFILE, CGameListCtrl::OnEditPatchFile)
EVT_MENU(IDM_OPENCONTAININGFOLDER, CGameListCtrl::OnOpenContainingFolder)
END_EVENT_TABLE()
@ -116,6 +120,7 @@ CGameListCtrl::Update()
{
InsertItemInReportView(i);
}
SetItemState(0, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
}
else
{
@ -126,6 +131,7 @@ CGameListCtrl::Update()
long item = InsertItem(0, buf, -1);
SetItemFont(item, *wxITALIC_FONT);
SetColumnWidth(item, wxLIST_AUTOSIZE);
SetItemState(0, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
}
AutomaticColumnWidth();
@ -299,6 +305,7 @@ CGameListCtrl::ScanForISOs()
}
}
}
std::sort(m_ISOFiles.begin(), m_ISOFiles.end());
}
@ -317,8 +324,25 @@ CGameListCtrl::OnColEndDrag(wxListEvent& WXUNUSED (event))
void
CGameListCtrl::OnRightClick(wxMouseEvent& WXUNUSED (event))
{}
CGameListCtrl::OnRightClick(wxMouseEvent& event)
{
// Focus the clicked item.
int flags;
long item = HitTest(event.GetPosition(), flags);
if (item != wxNOT_FOUND) {
SetItemState(item, wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED,
wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED);
}
const CISOFile *selected_iso = GetSelectedISO();
if (selected_iso) {
std::string unique_id = selected_iso->GetUniqueID();
wxMenu popupMenu;
std::string menu_text = StringFromFormat("Edit &patch file: %s.ini", unique_id.c_str());
popupMenu.Append(IDM_EDITPATCHFILE, menu_text);
popupMenu.Append(IDM_OPENCONTAININGFOLDER, "Open &containing folder");
PopupMenu(&popupMenu);
}
}
void
@ -331,7 +355,6 @@ CGameListCtrl::OnActivated(wxListEvent& event)
else
{
size_t Index = event.GetData();
if (Index < m_ISOFiles.size())
{
const CISOFile& rISOFile = m_ISOFiles[Index];
@ -340,6 +363,47 @@ CGameListCtrl::OnActivated(wxListEvent& event)
}
}
const CISOFile *
CGameListCtrl::GetSelectedISO() const
{
int item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
if (item == -1)
return 0;
else
return &m_ISOFiles[GetItemData(item)];
}
void
CGameListCtrl::OnOpenContainingFolder(wxCommandEvent& WXUNUSED (event)) {
const CISOFile *iso = GetSelectedISO();
if (!iso)
return;
std::string path;
SplitPath(iso->GetFileName(), &path, 0, 0);
File::Explore(path);
}
void
CGameListCtrl::OnEditPatchFile(wxCommandEvent& WXUNUSED (event))
{
const CISOFile *iso = GetSelectedISO();
if (!iso)
return;
std::string filename = "Patches/" + iso->GetUniqueID() + ".ini";
if (!File::Exists(filename)) {
if (AskYesNo("%s.ini does not exist. Do you want to create it?", iso->GetUniqueID().c_str())) {
FILE *f = fopen(filename.c_str(), "w");
fprintf(f, "# %s - %s\r\n\r\n", iso->GetUniqueID().c_str(), iso->GetName().c_str());
fprintf(f, "[OnFrame]\r\n#Add memory patches here.\r\n\r\n");
fprintf(f, "[ActionReplay]\r\n#Add decrypted action replay cheats here.\r\n");
fclose(f);
} else {
return;
}
}
File::Launch(filename);
}
void
CGameListCtrl::OnSelected(wxListEvent& WXUNUSED (event))

View File

@ -20,20 +20,18 @@
#include <vector>
#include "wx/listctrl.h"
#include "ISOFile.h"
// Define a new application
class CGameListCtrl
: public wxListCtrl
class CGameListCtrl : public wxListCtrl
{
public:
CGameListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style);
void Update();
void BrowseForDirectory();
const CISOFile *GetSelectedISO() const;
private:
@ -51,13 +49,12 @@ class CGameListCtrl
std::vector<int>m_FlagImageIndex;
bool m_test;
std::vector<CISOFile>m_ISOFiles;
std::vector<CISOFile> m_ISOFiles;
void InitBitmaps();
void InsertItemInReportView(size_t _Index);
void ScanForISOs();
DECLARE_EVENT_TABLE()
// events
@ -68,6 +65,8 @@ class CGameListCtrl
void OnSelected(wxListEvent& event);
void OnActivated(wxListEvent& event);
void OnSize(wxSizeEvent& event);
void OnEditPatchFile(wxCommandEvent& event);
void OnOpenContainingFolder(wxCommandEvent& event);
virtual bool MSWDrawSubItem(wxPaintDC& rPainDC, int item, int subitem);

View File

@ -25,6 +25,8 @@ enum
IDM_PLAY,
IDM_STOP,
IDM_BROWSE,
IDM_EDITPATCHFILE,
IDM_OPENCONTAININGFOLDER,
IDM_PLUGIN_OPTIONS,
IDM_CONFIG_GFX_PLUGIN,
IDM_CONFIG_DSP_PLUGIN,

View File

@ -44,6 +44,7 @@ CISOFile::CISOFile(const std::string& _rFileName)
m_Country = pVolume->GetCountry();
m_FileSize = pVolume->GetSize();
m_Name = pVolume->GetName();
m_UniqueID = pVolume->GetUniqueID();
// check if we can get some infos from the banner file too
DiscIO::IFileSystem* pFileSystem = DiscIO::CreateFileSystem(*pVolume);
@ -56,7 +57,7 @@ CISOFile::CISOFile(const std::string& _rFileName)
{
if (pBannerLoader->IsValid())
{
pBannerLoader->GetName(m_Name);
pBannerLoader->GetName(m_Name, 0); //m_Country == DiscIO::IVolume::COUNTRY_JAP ? 1 : 0);
pBannerLoader->GetCompany(m_Company);
if (pBannerLoader->GetBanner(g_ImageTemp))

View File

@ -29,30 +29,31 @@ class CISOFile
bool IsValid() const {return(m_Valid);}
const std::string& GetFileName() const {return(m_FileName);}
const std::string& GetName() const {return(m_Name);}
const std::string& GetCompany() const {return(m_Company);}
const std::string& GetUniqueID() const {return(m_UniqueID);}
DiscIO::IVolume::ECountry GetCountry() const {return(m_Country);}
u64 GetFileSize() const {return(m_FileSize);}
const wxImage& GetImage() const {return(m_Image);}
bool operator < (const CISOFile &other) const {
// HACK - they end up in reverse order in the list view
return strcmp(m_Name.c_str(), other.m_Name.c_str()) > 0;
}
private:
std::string m_FileName;
std::string m_Name;
std::string m_Company;
std::string m_UniqueID;
u64 m_FileSize;