mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 07:21:25 +12:00
Merge pull request #756 from Syphurith/patch-UI
Added Save Data Utility UI (stub)
This commit is contained in:
commit
b78d0a8e5b
8 changed files with 456 additions and 16 deletions
|
@ -13,7 +13,7 @@ enum
|
||||||
AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent)
|
AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent)
|
||||||
: wxDialog(parent, wxID_ANY, "Auto-Pause Manager")
|
: wxDialog(parent, wxID_ANY, "Auto-Pause Manager")
|
||||||
{
|
{
|
||||||
SetSizeHints(wxSize(400, 300), wxDefaultSize);
|
SetMinSize(wxSize(400, 360));
|
||||||
|
|
||||||
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
@ -38,11 +38,11 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent)
|
||||||
wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
s_action->Add(new wxButton(this, wxID_CLEAR, wxT("Cl&ear"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
s_action->Add(new wxButton(this, wxID_CLEAR, wxT("Cl&ear"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
s_action->Add(new wxButton(this, wxID_REFRESH, wxT("&Reload"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5);
|
s_action->Add(new wxButton(this, wxID_REFRESH, wxT("&Reload"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
s_action->Add(new wxButton(this, wxID_SAVE, wxT("&Save"), wxDefaultPosition, wxDefaultSize, 0), 2, wxALL, 5);
|
s_action->Add(new wxButton(this, wxID_SAVE, wxT("&Save"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 3, wxALL, 5);
|
s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
|
|
||||||
s_main->Add(s_action, 2, wxALL, 5);
|
s_main->Add(s_action, 0, wxALL, 5);
|
||||||
|
|
||||||
Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnAdd, this, id_add);
|
Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnAdd, this, id_add);
|
||||||
Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnRemove, this, id_remove);
|
Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnRemove, this, id_remove);
|
||||||
|
@ -51,7 +51,6 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent)
|
||||||
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClear, this, wxID_CLEAR);
|
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClear, this, wxID_CLEAR);
|
||||||
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnReload, this, wxID_REFRESH);
|
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnReload, this, wxID_REFRESH);
|
||||||
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnSave, this, wxID_SAVE);
|
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnSave, this, wxID_SAVE);
|
||||||
//Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClose, this, wxID_CLOSE);
|
|
||||||
|
|
||||||
Emu.Stop();
|
Emu.Stop();
|
||||||
|
|
||||||
|
@ -59,7 +58,6 @@ AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent)
|
||||||
UpdateList();
|
UpdateList();
|
||||||
|
|
||||||
SetSizerAndFit(s_main);
|
SetSizerAndFit(s_main);
|
||||||
SetSize(wxSize(400, 360));
|
|
||||||
Layout();
|
Layout();
|
||||||
Centre(wxBOTH);
|
Centre(wxBOTH);
|
||||||
}
|
}
|
||||||
|
@ -220,7 +218,8 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry)
|
||||||
, m_presult(entry)
|
, m_presult(entry)
|
||||||
{
|
{
|
||||||
m_entry = *m_presult;
|
m_entry = *m_presult;
|
||||||
SetSizeHints(wxSize(400, -1), wxDefaultSize);
|
//SetSizeHints(wxSize(400, -1), wxDefaultSize);
|
||||||
|
SetMinSize(wxSize(400, -1));
|
||||||
|
|
||||||
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
@ -236,14 +235,14 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry)
|
||||||
wxBoxSizer* s_config = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer* s_config = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
m_id = new wxTextCtrl(this, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
|
m_id = new wxTextCtrl(this, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
|
||||||
s_config->Add(m_id, 0, wxALL | wxEXPAND, 5);
|
s_config->Add(m_id, 1, wxALL | wxEXPAND, 5);
|
||||||
s_config->Add(new wxButton(this, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5);
|
s_config->Add(new wxButton(this, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
s_config->Add(new wxButton(this, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0), 1, wxALL, 5);
|
s_config->Add(new wxButton(this, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
|
|
||||||
s_main->Add(s_config, 1, wxEXPAND, 5);
|
s_main->Add(s_config, 0, wxEXPAND, 5);
|
||||||
|
|
||||||
m_current_converted = new wxStaticText(this, wxID_ANY, wxT("Currently it gets an id of \"Unset\"."), wxDefaultPosition, wxDefaultSize, 0);
|
m_current_converted = new wxStaticText(this, wxID_ANY, wxT("Currently it gets an id of \"Unset\"."), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
s_main->Add(m_current_converted, 2, wxALL | wxEXPAND, 5);
|
s_main->Add(m_current_converted, 0, wxALL, 5);
|
||||||
|
|
||||||
m_entry_convert.clear();
|
m_entry_convert.clear();
|
||||||
m_entry_convert.str("");
|
m_entry_convert.str("");
|
||||||
|
@ -256,7 +255,7 @@ AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry)
|
||||||
Bind(wxEVT_TEXT, &AutoPauseSettingsDialog::OnUpdateValue, this, wxID_STATIC);
|
Bind(wxEVT_TEXT, &AutoPauseSettingsDialog::OnUpdateValue, this, wxID_STATIC);
|
||||||
|
|
||||||
SetSizerAndFit(s_main);
|
SetSizerAndFit(s_main);
|
||||||
SetSize(wxSize(400, -1));
|
//SetSize(wxSize(400, -1));
|
||||||
Layout();
|
Layout();
|
||||||
Centre(wxBOTH);
|
Centre(wxBOTH);
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@ public:
|
||||||
void OnClear(wxCommandEvent& event);
|
void OnClear(wxCommandEvent& event);
|
||||||
void OnReload(wxCommandEvent& event);
|
void OnReload(wxCommandEvent& event);
|
||||||
void OnSave(wxCommandEvent& event);
|
void OnSave(wxCommandEvent& event);
|
||||||
//void OnClose(wxCommandEvent& event);
|
|
||||||
|
|
||||||
void LoadEntries(void);
|
void LoadEntries(void);
|
||||||
void SaveEntries(void);
|
void SaveEntries(void);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "Gui/AboutDialog.h"
|
#include "Gui/AboutDialog.h"
|
||||||
#include "Gui/GameViewer.h"
|
#include "Gui/GameViewer.h"
|
||||||
#include "Gui/AutoPauseManager.h"
|
#include "Gui/AutoPauseManager.h"
|
||||||
|
#include "Gui/SaveDataUtility.h"
|
||||||
#include <wx/dynlib.h>
|
#include <wx/dynlib.h>
|
||||||
|
|
||||||
#include "Loader/PKG.h"
|
#include "Loader/PKG.h"
|
||||||
|
@ -39,6 +40,7 @@ enum IDs
|
||||||
id_config_vfs_manager,
|
id_config_vfs_manager,
|
||||||
id_config_vhdd_manager,
|
id_config_vhdd_manager,
|
||||||
id_config_autopause_manager,
|
id_config_autopause_manager,
|
||||||
|
id_config_savedata_manager,
|
||||||
id_tools_compiler,
|
id_tools_compiler,
|
||||||
id_tools_memory_viewer,
|
id_tools_memory_viewer,
|
||||||
id_tools_rsx_debugger,
|
id_tools_rsx_debugger,
|
||||||
|
@ -90,7 +92,8 @@ MainFrame::MainFrame()
|
||||||
menu_conf->Append(id_config_autopause_manager, "Auto-Pause Settings");
|
menu_conf->Append(id_config_autopause_manager, "Auto-Pause Settings");
|
||||||
menu_conf->AppendSeparator();
|
menu_conf->AppendSeparator();
|
||||||
menu_conf->Append(id_config_vfs_manager, "Virtual File System Manager");
|
menu_conf->Append(id_config_vfs_manager, "Virtual File System Manager");
|
||||||
menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager");
|
menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager");
|
||||||
|
menu_conf->Append(id_config_savedata_manager, "Save Data Utility");
|
||||||
|
|
||||||
wxMenu* menu_tools = new wxMenu();
|
wxMenu* menu_tools = new wxMenu();
|
||||||
menubar->Append(menu_tools, "Tools");
|
menubar->Append(menu_tools, "Tools");
|
||||||
|
@ -128,6 +131,7 @@ MainFrame::MainFrame()
|
||||||
Bind(wxEVT_MENU, &MainFrame::ConfigVFS, this, id_config_vfs_manager);
|
Bind(wxEVT_MENU, &MainFrame::ConfigVFS, this, id_config_vfs_manager);
|
||||||
Bind(wxEVT_MENU, &MainFrame::ConfigVHDD, this, id_config_vhdd_manager);
|
Bind(wxEVT_MENU, &MainFrame::ConfigVHDD, this, id_config_vhdd_manager);
|
||||||
Bind(wxEVT_MENU, &MainFrame::ConfigAutoPause, this, id_config_autopause_manager);
|
Bind(wxEVT_MENU, &MainFrame::ConfigAutoPause, this, id_config_autopause_manager);
|
||||||
|
Bind(wxEVT_MENU, &MainFrame::ConfigSaveData, this, id_config_savedata_manager);
|
||||||
|
|
||||||
Bind(wxEVT_MENU, &MainFrame::OpenELFCompiler, this, id_tools_compiler);
|
Bind(wxEVT_MENU, &MainFrame::OpenELFCompiler, this, id_tools_compiler);
|
||||||
Bind(wxEVT_MENU, &MainFrame::OpenMemoryViewer, this, id_tools_memory_viewer);
|
Bind(wxEVT_MENU, &MainFrame::OpenMemoryViewer, this, id_tools_memory_viewer);
|
||||||
|
@ -620,6 +624,11 @@ void MainFrame::ConfigAutoPause(wxCommandEvent& WXUNUSED(event))
|
||||||
AutoPauseManagerDialog(this).ShowModal();
|
AutoPauseManagerDialog(this).ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainFrame::ConfigSaveData(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
SaveDataListDialog(this, true).ShowModal();
|
||||||
|
}
|
||||||
|
|
||||||
void MainFrame::OpenELFCompiler(wxCommandEvent& WXUNUSED(event))
|
void MainFrame::OpenELFCompiler(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
(new CompilerELF(this)) -> Show();
|
(new CompilerELF(this)) -> Show();
|
||||||
|
|
|
@ -39,6 +39,7 @@ private:
|
||||||
void ConfigVFS(wxCommandEvent& event);
|
void ConfigVFS(wxCommandEvent& event);
|
||||||
void ConfigVHDD(wxCommandEvent& event);
|
void ConfigVHDD(wxCommandEvent& event);
|
||||||
void ConfigAutoPause(wxCommandEvent& event);
|
void ConfigAutoPause(wxCommandEvent& event);
|
||||||
|
void ConfigSaveData(wxCommandEvent& event);
|
||||||
void OpenELFCompiler(wxCommandEvent& evt);
|
void OpenELFCompiler(wxCommandEvent& evt);
|
||||||
void OpenMemoryViewer(wxCommandEvent& evt);
|
void OpenMemoryViewer(wxCommandEvent& evt);
|
||||||
void OpenRSXDebugger(wxCommandEvent& evt);
|
void OpenRSXDebugger(wxCommandEvent& evt);
|
||||||
|
|
340
rpcs3/Gui/SaveDataUtility.cpp
Normal file
340
rpcs3/Gui/SaveDataUtility.cpp
Normal file
|
@ -0,0 +1,340 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "SaveDataUtility.h"
|
||||||
|
|
||||||
|
//Cause i can not decide what struct to be used to fill those. Just use no real data now.
|
||||||
|
//Currently variable info isn't used. it supposed to be a container for the information passed by other.
|
||||||
|
SaveDataInfoDialog::SaveDataInfoDialog(wxWindow* parent, const SaveDataInformation& info)
|
||||||
|
: wxDialog(parent, wxID_ANY, "Save Data Information")
|
||||||
|
{
|
||||||
|
SetMinSize(wxSize(400, 300));
|
||||||
|
|
||||||
|
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
m_list = new wxListView(this);
|
||||||
|
m_list->InsertColumn(0, "Name");
|
||||||
|
m_list->InsertColumn(1, "Detail");
|
||||||
|
s_main->Add(m_list, 1, wxALL | wxEXPAND, 5);
|
||||||
|
|
||||||
|
wxBoxSizer* s_actions = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
s_actions->Add(0, 0, 1, wxEXPAND, 5); //Add a spacer to make Close on the Right-Down corner of this dialog.
|
||||||
|
s_actions->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
|
s_main->Add(s_actions, 0, wxEXPAND, 5);
|
||||||
|
|
||||||
|
SetSizerAndFit(s_main);
|
||||||
|
Layout();
|
||||||
|
Centre(wxBOTH);
|
||||||
|
|
||||||
|
SetSize(wxSize(400, 300));
|
||||||
|
|
||||||
|
UpdateData();
|
||||||
|
}
|
||||||
|
//This is intended to write the information of save data to wxListView.
|
||||||
|
//However been not able to decide which data struct i should use, i use static content for this to make it stub.
|
||||||
|
void SaveDataInfoDialog::UpdateData()
|
||||||
|
{
|
||||||
|
m_list->Freeze();
|
||||||
|
m_list->DeleteAllItems();
|
||||||
|
|
||||||
|
m_list->InsertItem(0, 0);
|
||||||
|
m_list->SetItem(0, 0, "User ID");
|
||||||
|
m_list->SetItem(0, 1, "00000000 (None)");
|
||||||
|
|
||||||
|
m_list->InsertItem(1, 1);
|
||||||
|
m_list->SetItem(1, 0, "Game Title");
|
||||||
|
m_list->SetItem(1, 1, "Happy with rpcs3 (free)");
|
||||||
|
|
||||||
|
m_list->InsertItem(2, 2);
|
||||||
|
m_list->SetItem(2, 0, "Subtitle");
|
||||||
|
m_list->SetItem(2, 1, "You devs are great");
|
||||||
|
|
||||||
|
m_list->InsertItem(3, 3);
|
||||||
|
m_list->SetItem(3, 0, "Detail");
|
||||||
|
m_list->SetItem(3, 1, "Stub it first");
|
||||||
|
|
||||||
|
m_list->InsertItem(4, 4);
|
||||||
|
m_list->SetItem(4, 0, "Copy-Able?");
|
||||||
|
m_list->SetItem(4, 1, "1 (Not allowed)");
|
||||||
|
|
||||||
|
m_list->InsertItem(5, 5);
|
||||||
|
m_list->SetItem(5, 0, "Play Time");
|
||||||
|
m_list->SetItem(5, 1, "00:00:00");
|
||||||
|
//Maybe there should be more details of save data.
|
||||||
|
//But i'm getting bored for assign it one by one.
|
||||||
|
|
||||||
|
m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER);
|
||||||
|
m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER);
|
||||||
|
m_list->Thaw();
|
||||||
|
}
|
||||||
|
|
||||||
|
//This dialog represents the Menu of Save Data Utility - which pop up after when you roll to a save and press triangle.
|
||||||
|
//I've ever thought of make it a right-click menu or a show-hide panel of the main dialog.
|
||||||
|
//Well only when those function calls related get implemented we can tell what this GUI should be, seriously.
|
||||||
|
SaveDataManageDialog::SaveDataManageDialog(wxWindow* parent, unsigned int* sort_type, SaveDataEntry& save)
|
||||||
|
: wxDialog(parent, wxID_ANY, "Save Data Pop-up Menu")
|
||||||
|
{
|
||||||
|
SetMinSize(wxSize(400, 110));
|
||||||
|
|
||||||
|
wxBoxSizer* s_manage = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
wxBoxSizer* s_sort = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
s_sort->Add(new wxStaticText(this, wxID_ANY, wxT("Sort By"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL | wxEXPAND, 5);
|
||||||
|
|
||||||
|
m_sort_options = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN | wxCB_READONLY);
|
||||||
|
//You might change this - of corse we should know what to been set - maybe after functions related been implemented.
|
||||||
|
m_sort_options->Append(wxT("User Id"));
|
||||||
|
m_sort_options->Append(wxT("Game Title"));
|
||||||
|
m_sort_options->Append(wxT("Game Subtitle"));
|
||||||
|
m_sort_options->Append(wxT("Play Time"));
|
||||||
|
m_sort_options->Append(wxT("Data Size"));
|
||||||
|
m_sort_options->Append(wxT("Last Modified"));
|
||||||
|
m_sort_options->Append(wxT("Created Time"));
|
||||||
|
m_sort_options->Append(wxT("Accessed Time"));
|
||||||
|
m_sort_options->Append(wxT("Modified Time"));
|
||||||
|
m_sort_options->Append(wxT("Modify Time"));
|
||||||
|
|
||||||
|
m_sort_type = sort_type;
|
||||||
|
if (m_sort_type != nullptr)
|
||||||
|
{
|
||||||
|
//Check sort type and set it to combo box
|
||||||
|
if (*m_sort_type >= m_sort_options->GetCount())
|
||||||
|
{
|
||||||
|
*m_sort_type = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_sort_options->SetSelection(*m_sort_type);
|
||||||
|
s_sort->Add(m_sort_options, 1, wxALL | wxEXPAND, 5);
|
||||||
|
|
||||||
|
wxButton* s_sort_action = new wxButton(this, wxID_ANY, wxT("&Apply!"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
s_sort_action->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnApplySort, this);
|
||||||
|
s_sort->Add(s_sort_action, 0, wxALL, 5);
|
||||||
|
|
||||||
|
s_manage->Add(s_sort, 1, wxEXPAND, 5);
|
||||||
|
|
||||||
|
wxBoxSizer* s_actions = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
|
wxButton* s_copy = new wxButton(this, wxID_ANY, wxT("&Copy"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
s_copy->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnCopy, this);
|
||||||
|
s_actions->Add(s_copy, 0, wxALL, 5);
|
||||||
|
|
||||||
|
wxButton* s_delete = new wxButton(this, wxID_ANY, wxT("&Delete"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
s_delete->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnDelete, this);
|
||||||
|
s_actions->Add(s_delete, 0, wxALL, 5);
|
||||||
|
|
||||||
|
wxButton* s_info = new wxButton(this, wxID_ANY, wxT("&Info"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
s_info->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnInfo, this);
|
||||||
|
s_actions->Add(s_info, 0, wxALL, 5);
|
||||||
|
|
||||||
|
s_actions->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
|
|
||||||
|
s_manage->Add(s_actions, 1, wxEXPAND, 5);
|
||||||
|
|
||||||
|
SetSizerAndFit(s_manage);
|
||||||
|
Layout();
|
||||||
|
Center(wxBOTH);
|
||||||
|
}
|
||||||
|
//Display information about the current selected save data.
|
||||||
|
//If selected is "New Save Data" or other invalid, this dialog would be initialized with "Info" disabled or not visible.
|
||||||
|
void SaveDataManageDialog::OnInfo(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnInfo called.");
|
||||||
|
SaveDataInformation info; //It should get a real one for information.. finally
|
||||||
|
SaveDataInfoDialog(this, info).ShowModal();
|
||||||
|
}
|
||||||
|
//Copy selected save data to another. Might need a dialog but i just leave it as this. Or Modal Dialog.
|
||||||
|
void SaveDataManageDialog::OnCopy(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnCopy called.");
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
//Delete selected save data, need confirm. just a stub now.
|
||||||
|
void SaveDataManageDialog::OnDelete(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnDelete called.");
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
//This should return the sort setting of the save data list. Also not implemented really.
|
||||||
|
void SaveDataManageDialog::OnApplySort(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
*m_sort_type = m_sort_options->GetSelection();
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnApplySort called. NAME=%s",
|
||||||
|
m_sort_options->GetStringSelection().ToStdString().c_str());
|
||||||
|
//event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Show up the savedata list, either to choose one to save/load or to manage saves.
|
||||||
|
//I suggest to use function callbacks to give save data list or get save data entry. (Not implemented or stubbed)
|
||||||
|
SaveDataListDialog::SaveDataListDialog(wxWindow* parent, bool enable_manage)
|
||||||
|
: wxDialog(parent, wxID_ANY, "Save Data Utility")
|
||||||
|
{
|
||||||
|
SetMinSize(wxSize(400, 400));
|
||||||
|
|
||||||
|
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
m_entry_convert.clear();
|
||||||
|
m_entry_convert.str("");
|
||||||
|
m_entry_convert << "This is only a stub now. Don't expect real effect from this."
|
||||||
|
<< "Cause related functions hasn't been implemented yet.";
|
||||||
|
wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
s_description->Wrap(400);
|
||||||
|
s_main->Add(s_description, 0, wxALL, 5);
|
||||||
|
|
||||||
|
m_list = new wxListView(this);
|
||||||
|
m_list->InsertColumn(0, "Game ID");
|
||||||
|
m_list->InsertColumn(1, "Save ID");
|
||||||
|
m_list->InsertColumn(2, "Detail");
|
||||||
|
|
||||||
|
m_list->Bind(wxEVT_LIST_ITEM_ACTIVATED, &SaveDataListDialog::OnEntryInfo, this);
|
||||||
|
m_list->Bind(wxEVT_RIGHT_DOWN, &SaveDataListDialog::OnRightClick, this);
|
||||||
|
|
||||||
|
s_main->Add(m_list, 1, wxALL | wxEXPAND, 5);
|
||||||
|
|
||||||
|
wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
|
//If do not need manage, hide it, like just a save data picker.
|
||||||
|
if (!enable_manage)
|
||||||
|
{
|
||||||
|
wxButton *m_select = new wxButton(this, wxID_OK, wxT("&Select"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
m_select->Bind(wxEVT_BUTTON, &SaveDataListDialog::OnSelect, this);
|
||||||
|
s_action->Add(m_select, 0, wxALL, 5);
|
||||||
|
SetTitle("Save Data Chooser");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wxButton *m_manage = new wxButton(this, wxID_ANY, wxT("&Manage"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
|
m_manage->Bind(wxEVT_BUTTON, &SaveDataListDialog::OnManage, this);
|
||||||
|
s_action->Add(m_manage, 0, wxALL, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
s_action->Add(0, 0, 1, wxEXPAND, 5);
|
||||||
|
|
||||||
|
s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
|
||||||
|
|
||||||
|
s_main->Add(s_action, 0, wxEXPAND, 5);
|
||||||
|
|
||||||
|
Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryCopy, this, id_copy);
|
||||||
|
Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryRemove, this, id_remove);
|
||||||
|
Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryInfo, this, id_info);
|
||||||
|
|
||||||
|
//Looks stupid, isn't it. I can't find Bind for range use..
|
||||||
|
Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 0);
|
||||||
|
Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 1);
|
||||||
|
Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 2);
|
||||||
|
|
||||||
|
SetSizerAndFit(s_main);
|
||||||
|
Layout();
|
||||||
|
Centre(wxBOTH);
|
||||||
|
|
||||||
|
LoadEntries();
|
||||||
|
UpdateList();
|
||||||
|
}
|
||||||
|
//After you pick a menu item from the sort sub-menu
|
||||||
|
void SaveDataListDialog::OnSort(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int idx = event.GetId();
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSort called. Type Value:%d", idx);
|
||||||
|
if ((idx < m_sort_options->GetMenuItemCount())
|
||||||
|
&& (idx >= 0))
|
||||||
|
{
|
||||||
|
m_sort_type = idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Copy a existing save, need to get more arguments. maybe a new dialog.
|
||||||
|
void SaveDataListDialog::OnEntryCopy(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int idx = m_list->GetFirstSelected();
|
||||||
|
if (idx != wxNOT_FOUND)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryCopy called.");
|
||||||
|
//Some Operations?
|
||||||
|
UpdateList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Remove a save file, need to be confirmed.
|
||||||
|
void SaveDataListDialog::OnEntryRemove(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int idx = m_list->GetFirstSelected();
|
||||||
|
if (idx != wxNOT_FOUND)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryRemove called.");
|
||||||
|
//Some Operations?
|
||||||
|
UpdateList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Display info dialog directly.
|
||||||
|
void SaveDataListDialog::OnEntryInfo(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int idx = m_list->GetFirstSelected();
|
||||||
|
if (idx != wxNOT_FOUND)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryInfo called.");
|
||||||
|
SaveDataInformation info; //Only a stub now.
|
||||||
|
SaveDataInfoDialog(this, info).ShowModal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Display info dialog directly.
|
||||||
|
void SaveDataListDialog::OnManage(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int idx = m_list->GetFirstSelected();
|
||||||
|
if (idx != wxNOT_FOUND)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnManage called.");
|
||||||
|
SaveDataEntry save; //Only a stub now.
|
||||||
|
SaveDataManageDialog(this, &m_sort_type, save).ShowModal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//When you press that select button in the Chooser mode.
|
||||||
|
void SaveDataListDialog::OnSelect(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int idx = m_list->GetFirstSelected();
|
||||||
|
if (idx != wxNOT_FOUND)
|
||||||
|
{
|
||||||
|
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSelect called.");
|
||||||
|
EndModal(wxID_OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Pop-up a small context-menu, being a replacement for SaveDataManageDialog
|
||||||
|
void SaveDataListDialog::OnRightClick(wxMouseEvent& event)
|
||||||
|
{
|
||||||
|
wxMenu* menu = new wxMenu();
|
||||||
|
int idx = m_list->GetFirstSelected();
|
||||||
|
|
||||||
|
//This is also a stub for the sort setting. Ids is set according to their sort-type integer.
|
||||||
|
m_sort_options = new wxMenu();
|
||||||
|
m_sort_options->Append(0, "UserID");
|
||||||
|
m_sort_options->Append(1, "Title");
|
||||||
|
m_sort_options->Append(2, "Subtitle");
|
||||||
|
|
||||||
|
menu->AppendSubMenu(m_sort_options, "&Sort");
|
||||||
|
menu->AppendSeparator();
|
||||||
|
menu->Append(id_copy, "&Copy")->Enable(idx != wxNOT_FOUND);
|
||||||
|
menu->Append(id_remove, "&Remove")->Enable(idx != wxNOT_FOUND);
|
||||||
|
menu->AppendSeparator();
|
||||||
|
menu->Append(id_info, "&Info");
|
||||||
|
|
||||||
|
PopupMenu(menu);
|
||||||
|
}
|
||||||
|
//This is intended to load the save data list from a way. However that is not certain for a stub. Does nothing now.
|
||||||
|
void SaveDataListDialog::LoadEntries(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//Setup some static items just for display.
|
||||||
|
void SaveDataListDialog::UpdateList(void)
|
||||||
|
{
|
||||||
|
m_list->Freeze();
|
||||||
|
m_list->DeleteAllItems();
|
||||||
|
|
||||||
|
m_list->InsertItem(0, 0);
|
||||||
|
m_list->SetItem(0, 0, "TEST00000");
|
||||||
|
m_list->SetItem(0, 1, "00");
|
||||||
|
m_list->SetItem(0, 2, "Final battle");
|
||||||
|
|
||||||
|
m_list->InsertItem(0, 0);
|
||||||
|
m_list->SetItem(0, 0, "XXXX99876");
|
||||||
|
m_list->SetItem(0, 1, "30");
|
||||||
|
m_list->SetItem(0, 2, "This is a fake game");
|
||||||
|
|
||||||
|
m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER);
|
||||||
|
m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER);
|
||||||
|
m_list->Thaw();
|
||||||
|
}
|
84
rpcs3/Gui/SaveDataUtility.h
Normal file
84
rpcs3/Gui/SaveDataUtility.h
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
#pragma once
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include <iomanip>
|
||||||
|
#include <sstream>
|
||||||
|
#include "Utilities/Log.h"
|
||||||
|
#include "Utilities/rFile.h"
|
||||||
|
|
||||||
|
//TODO: Implement function calls related to Save Data List.
|
||||||
|
//Those function calls may be needed to use this GUI.
|
||||||
|
//Currently this is only a stub.
|
||||||
|
|
||||||
|
//A stub for the struct sent to SaveDataInfoDialog.
|
||||||
|
struct SaveDataInformation
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
//A stub for the sorting.
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SAVE_DATA_LIST_SORT_BY_USERID
|
||||||
|
};
|
||||||
|
//A stub for a single entry of save data. used to make a save data list or do management.
|
||||||
|
struct SaveDataEntry
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
//Reserved some Ids for Sort-By Submenu.
|
||||||
|
id_copy = 64,
|
||||||
|
id_remove,
|
||||||
|
id_info
|
||||||
|
};
|
||||||
|
|
||||||
|
//Used to display the information of a savedata.
|
||||||
|
//Not sure about what information should be displayed.
|
||||||
|
class SaveDataInfoDialog :public wxDialog
|
||||||
|
{
|
||||||
|
wxListView* m_list;
|
||||||
|
|
||||||
|
void UpdateData();
|
||||||
|
public:
|
||||||
|
SaveDataInfoDialog(wxWindow* parent, const SaveDataInformation& info);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Simple way to show up the sort menu and other operations
|
||||||
|
//Like what you get when press Triangle on SaveData.
|
||||||
|
class SaveDataManageDialog :public wxDialog
|
||||||
|
{
|
||||||
|
wxComboBox* m_sort_options;
|
||||||
|
unsigned int* m_sort_type;
|
||||||
|
|
||||||
|
void OnInfo(wxCommandEvent& event);
|
||||||
|
void OnCopy(wxCommandEvent& event);
|
||||||
|
void OnDelete(wxCommandEvent& event);
|
||||||
|
void OnApplySort(wxCommandEvent& event);
|
||||||
|
public:
|
||||||
|
SaveDataManageDialog(wxWindow* parent, unsigned int* sort_type, SaveDataEntry& save);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Display a list of SaveData. Would need to be initialized.
|
||||||
|
//Can also be used as a Save Data Chooser.
|
||||||
|
class SaveDataListDialog : public wxDialog
|
||||||
|
{
|
||||||
|
wxListView* m_list;
|
||||||
|
wxMenu* m_sort_options;
|
||||||
|
unsigned int m_sort_type;
|
||||||
|
std::stringstream m_entry_convert;
|
||||||
|
|
||||||
|
void OnSelect(wxCommandEvent& event);
|
||||||
|
void OnManage(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnRightClick(wxMouseEvent& event);
|
||||||
|
void OnSort(wxCommandEvent& event);
|
||||||
|
void OnEntryCopy(wxCommandEvent& event);
|
||||||
|
void OnEntryRemove(wxCommandEvent& event);
|
||||||
|
void OnEntryInfo(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void LoadEntries(void);
|
||||||
|
void UpdateList(void);
|
||||||
|
public:
|
||||||
|
SaveDataListDialog(wxWindow* parent, bool enable_manage);
|
||||||
|
};
|
|
@ -177,6 +177,7 @@
|
||||||
<ClCompile Include="Gui\MemoryViewer.cpp" />
|
<ClCompile Include="Gui\MemoryViewer.cpp" />
|
||||||
<ClCompile Include="Gui\PADManager.cpp" />
|
<ClCompile Include="Gui\PADManager.cpp" />
|
||||||
<ClCompile Include="Gui\RSXDebugger.cpp" />
|
<ClCompile Include="Gui\RSXDebugger.cpp" />
|
||||||
|
<ClCompile Include="Gui\SaveDataUtility.cpp" />
|
||||||
<ClCompile Include="Gui\TextInputDialog.cpp" />
|
<ClCompile Include="Gui\TextInputDialog.cpp" />
|
||||||
<ClCompile Include="Gui\VFSManager.cpp" />
|
<ClCompile Include="Gui\VFSManager.cpp" />
|
||||||
<ClCompile Include="Gui\VHDDManager.cpp" />
|
<ClCompile Include="Gui\VHDDManager.cpp" />
|
||||||
|
@ -221,6 +222,7 @@
|
||||||
<ClInclude Include="Gui\MemoryViewer.h" />
|
<ClInclude Include="Gui\MemoryViewer.h" />
|
||||||
<ClInclude Include="Gui\RegisterEditor.h" />
|
<ClInclude Include="Gui\RegisterEditor.h" />
|
||||||
<ClInclude Include="Gui\RSXDebugger.h" />
|
<ClInclude Include="Gui\RSXDebugger.h" />
|
||||||
|
<ClInclude Include="Gui\SaveDataUtility.h" />
|
||||||
<ClInclude Include="Gui\TextInputDialog.h" />
|
<ClInclude Include="Gui\TextInputDialog.h" />
|
||||||
<ClInclude Include="Gui\VFSManager.h" />
|
<ClInclude Include="Gui\VFSManager.h" />
|
||||||
<ClInclude Include="Gui\VHDDManager.h" />
|
<ClInclude Include="Gui\VHDDManager.h" />
|
||||||
|
|
|
@ -99,6 +99,9 @@
|
||||||
<ClCompile Include="Gui\AutoPauseManager.cpp">
|
<ClCompile Include="Gui\AutoPauseManager.cpp">
|
||||||
<Filter>Gui</Filter>
|
<Filter>Gui</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Gui\SaveDataUtility.cpp">
|
||||||
|
<Filter>Gui</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="rpcs3.rc" />
|
<ResourceCompile Include="rpcs3.rc" />
|
||||||
|
@ -209,5 +212,8 @@
|
||||||
<ClInclude Include="Gui\AutoPauseManager.h">
|
<ClInclude Include="Gui\AutoPauseManager.h">
|
||||||
<Filter>Gui</Filter>
|
<Filter>Gui</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Gui\SaveDataUtility.h">
|
||||||
|
<Filter>Gui</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
Add table
Add a link
Reference in a new issue