Play-/Source/ui_unix/memorycardmanagerdialog.cpp

206 lines
6.6 KiB
C++
Raw Normal View History

2018-01-10 16:49:43 -05:00
#include <QFileDialog>
#include <QDateTime>
#include <QMessageBox>
2016-08-10 14:56:16 +01:00
#include "memorycardmanagerdialog.h"
#include "ui_memorycardmanager.h"
#include "StdStream.h"
#include "StdStreamUtils.h"
2018-01-10 16:49:43 -05:00
#include "AppConfig.h"
#include "../PS2VM_Preferences.h"
2016-08-10 14:56:16 +01:00
2018-01-10 14:58:25 -05:00
MemoryCardManagerDialog::MemoryCardManagerDialog(QWidget* parent)
: QDialog(parent)
, ui(new Ui::MemoryCardManagerDialog)
, m_MemoryCard0(CAppConfig::GetInstance().GetPreferencePath(PREF_PS2_MC0_DIRECTORY))
, m_MemoryCard1(CAppConfig::GetInstance().GetPreferencePath(PREF_PS2_MC1_DIRECTORY))
2016-08-10 14:56:16 +01:00
{
2018-01-10 14:58:25 -05:00
ui->setupUi(this);
2016-08-10 14:56:16 +01:00
2018-01-10 14:58:25 -05:00
m_pMemoryCard[0] = &m_MemoryCard0;
m_pMemoryCard[1] = &m_MemoryCard1;
2016-08-10 14:56:16 +01:00
2018-01-10 14:58:25 -05:00
m_pCurrentMemoryCard = m_pMemoryCard[0];
2016-08-10 14:56:16 +01:00
2018-01-10 14:58:25 -05:00
populateSaveList();
2016-08-10 14:56:16 +01:00
2018-01-10 14:58:25 -05:00
ui->label_name->setWordWrap(true);
2016-08-10 14:56:16 +01:00
}
MemoryCardManagerDialog::~MemoryCardManagerDialog()
{
2018-01-10 14:58:25 -05:00
delete ui;
2016-08-10 14:56:16 +01:00
}
void MemoryCardManagerDialog::on_import_saves_button_clicked()
{
2018-01-10 14:58:25 -05:00
QFileDialog dialog(this);
dialog.setDirectory(m_lastpath);
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setNameFilter(tr("All Supported types (*.psu *.sps *.xps *.max);;EMS Memory Adapter Save Dumps (*.psu);;Sharkport/X-Port Save Dumps (*.sps; *.xps);;Action Replay MAX Save Dumps (*.max);;All files (*.*)"));
if(dialog.exec())
{
QString fileName = dialog.selectedFiles().first();
m_lastpath = QFileInfo(fileName).path();
try
{
auto input(Framework::CStdStream(fileName.toStdString().c_str(), "r"));
CSaveImporter::ImportSave(input, m_pCurrentMemoryCard->GetBasePath(),
std::bind(&MemoryCardManagerDialog::OnImportOverwrite, this, std::placeholders::_1));
}
catch(const std::exception& Exception)
{
QString msg("Couldn't import save(s):\n\n%1");
QMessageBox messageBox;
messageBox.critical(this, "Error", msg.arg(Exception.what()));
messageBox.show();
return;
}
m_pCurrentMemoryCard->RefreshContents();
populateSaveList();
}
2016-08-10 14:56:16 +01:00
}
CSaveImporterBase::OVERWRITE_PROMPT_RETURN MemoryCardManagerDialog::OnImportOverwrite(const boost::filesystem::path& filePath)
{
2018-01-10 14:58:25 -05:00
std::string fileName = filePath.leaf().string();
QString msg("File %1 already exists.\n\nOverwrite?");
QMessageBox::StandardButton resBtn = QMessageBox::question(this, "Overwrite?",
msg.arg(fileName.c_str()),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::Yes);
return (resBtn == QMessageBox::Yes) ? CSaveImporterBase::OVERWRITE_YES : CSaveImporterBase::OVERWRITE_NO;
2016-08-10 14:56:16 +01:00
}
void MemoryCardManagerDialog::on_comboBox_currentIndexChanged(int index)
{
2018-01-10 14:58:25 -05:00
m_pCurrentMemoryCard = m_pMemoryCard[index];
populateSaveList();
2016-08-10 14:56:16 +01:00
}
void MemoryCardManagerDialog::populateSaveList()
{
2018-01-10 14:58:25 -05:00
unsigned int nItemCount = static_cast<unsigned int>(m_pCurrentMemoryCard->GetSaveCount());
ui->savelistWidget->clear();
for(unsigned int i = 0; i < nItemCount; i++)
{
QString name = QString::fromWCharArray(m_pCurrentMemoryCard->GetSaveByIndex(i)->GetName());
ui->savelistWidget->addItem(name);
}
2016-08-10 14:56:16 +01:00
}
void MemoryCardManagerDialog::on_savelistWidget_currentRowChanged(int currentRow)
{
2018-01-10 14:58:25 -05:00
int nItemCount = static_cast<int>(m_pCurrentMemoryCard->GetSaveCount() - 1);
if(currentRow >= 0 && currentRow <= nItemCount)
{
const CSave* save = m_pCurrentMemoryCard->GetSaveByIndex(currentRow);
QDateTime* dt = new QDateTime;
dt->setTime_t(save->GetLastModificationTime());
QString datetime = dt->toUTC().toString("hh:mm - dd.MM.yyyy");
ui->label_name->setText(QString::fromWCharArray(save->GetName()));
ui->label_name->setMinimumSize(ui->label_name->sizeHint());
ui->label_id->setText(QString(save->GetId()));
QString size("%1kb");
ui->label_size->setText(size.arg(QString::number(save->GetSize() / 1000)));
ui->label_last_mod->setText(datetime);
ui->delete_save_button->setEnabled(true);
ui->export_save_button->setEnabled(true);
}
else
{
ui->label_name->setText("--");
ui->label_id->setText("--");
ui->label_size->setText("--");
ui->label_last_mod->setText("--");
ui->delete_save_button->setEnabled(false);
ui->export_save_button->setEnabled(false);
}
2016-08-10 14:56:16 +01:00
}
void MemoryCardManagerDialog::on_delete_save_button_clicked()
{
2018-01-10 14:58:25 -05:00
QMessageBox::StandardButton resBtn = QMessageBox::question(this, "Overwrite?",
"Are you sure you want to delete the currently selected entry",
QMessageBox::Yes | QMessageBox::No,
QMessageBox::Yes);
if(resBtn == QMessageBox::Yes)
{
int currentRow = ui->savelistWidget->currentRow();
int nItemCount = static_cast<int>(m_pCurrentMemoryCard->GetSaveCount() - 1);
if(currentRow >= 0 && currentRow <= nItemCount)
{
const CSave* save = m_pCurrentMemoryCard->GetSaveByIndex(currentRow);
boost::filesystem::remove_all(save->GetPath());
m_pCurrentMemoryCard->RefreshContents();
populateSaveList();
}
}
2016-08-10 14:56:16 +01:00
}
void MemoryCardManagerDialog::on_export_save_button_clicked()
{
2018-01-10 14:58:25 -05:00
int currentRow = ui->savelistWidget->currentRow();
int nItemCount = static_cast<int>(m_pCurrentMemoryCard->GetSaveCount() - 1);
if(currentRow >= 0 && currentRow <= nItemCount)
{
const CSave* save = m_pCurrentMemoryCard->GetSaveByIndex(currentRow);
if(save != NULL)
{
QFileDialog dialog(this);
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setNameFilter(tr("EMS Memory Adapter Save Dumps (*.psu)"));
dialog.setDefaultSuffix("psu");
if(dialog.exec())
{
QString fileName = dialog.selectedFiles().first();
try
{
auto output(Framework::CreateOutputStdStream(fileName.toStdString()));
CSaveExporter::ExportPSU(output, save->GetPath());
}
catch(const std::exception& Exception)
{
QString msg("Couldn't export save(s):\n\n%1");
QMessageBox messageBox;
messageBox.critical(this, "Error", msg.arg(Exception.what()));
messageBox.show();
return;
}
QString msg("Save exported successfully.");
QMessageBox messageBox;
messageBox.information(this, "Success", msg);
messageBox.show();
return;
}
else
{
QString msg("Save export Cancelled.");
QMessageBox messageBox;
messageBox.warning(this, "Cancelled", msg);
messageBox.show();
return;
}
}
else
{
QString msg("Save not found,\nPlease try again.");
QMessageBox messageBox;
messageBox.critical(this, "Error", msg);
messageBox.show();
}
}
else
{
QString msg("Invalid selection,\nPlease try again.");
QMessageBox messageBox;
messageBox.critical(this, "Error", msg);
messageBox.show();
}
2016-08-10 14:56:16 +01:00
}