mirror of https://github.com/PCSX2/pcsx2.git
Qt: Support changing running GS dump by drag/dropping
This commit is contained in:
parent
5d95a503bf
commit
8505e9203a
|
@ -2065,7 +2065,7 @@ static QString getFilenameFromMimeData(const QMimeData* md)
|
||||||
// only one url accepted
|
// only one url accepted
|
||||||
const QList<QUrl> urls(md->urls());
|
const QList<QUrl> urls(md->urls());
|
||||||
if (urls.size() == 1)
|
if (urls.size() == 1)
|
||||||
filename = urls.front().toLocalFile();
|
filename = QDir::toNativeSeparators(urls.front().toLocalFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
return filename;
|
return filename;
|
||||||
|
@ -2925,11 +2925,23 @@ void MainWindow::doStartFile(std::optional<CDVD_SourceType> source, const QStrin
|
||||||
|
|
||||||
void MainWindow::doDiscChange(CDVD_SourceType source, const QString& path)
|
void MainWindow::doDiscChange(CDVD_SourceType source, const QString& path)
|
||||||
{
|
{
|
||||||
|
const bool is_gs_dump = VMManager::IsGSDumpFileName(path.toStdString());
|
||||||
|
if (is_gs_dump != GSDumpReplayer::IsReplayingDump())
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this, tr("Error"), tr("Cannot switch from game to GS dump or vice versa."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (is_gs_dump)
|
||||||
|
{
|
||||||
|
Host::RunOnCPUThread([path = path.toStdString()]() { GSDumpReplayer::ChangeDump(path.c_str()); });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bool reset_system = false;
|
bool reset_system = false;
|
||||||
if (!m_was_disc_change_request)
|
if (!m_was_disc_change_request)
|
||||||
{
|
{
|
||||||
QMessageBox message(QMessageBox::Question, tr("Confirm Disc Change"),
|
QMessageBox message(QMessageBox::Question, tr("Confirm Disc Change"),
|
||||||
tr("Do you want to swap discs or boot the new image (via system reset)?"));
|
tr("Do you want to swap discs or boot the new image (via system reset)?"), QMessageBox::NoButton, this);
|
||||||
message.addButton(tr("Swap Disc"), QMessageBox::ActionRole);
|
message.addButton(tr("Swap Disc"), QMessageBox::ActionRole);
|
||||||
QPushButton* reset_button = message.addButton(tr("Reset"), QMessageBox::ActionRole);
|
QPushButton* reset_button = message.addButton(tr("Reset"), QMessageBox::ActionRole);
|
||||||
QPushButton* cancel_button = message.addButton(QMessageBox::Cancel);
|
QPushButton* cancel_button = message.addButton(QMessageBox::Cancel);
|
||||||
|
|
|
@ -101,7 +101,7 @@ int GSDumpReplayer::GetLoopCount()
|
||||||
bool GSDumpReplayer::Initialize(const char* filename)
|
bool GSDumpReplayer::Initialize(const char* filename)
|
||||||
{
|
{
|
||||||
Common::Timer timer;
|
Common::Timer timer;
|
||||||
Console.WriteLn("(GSDumpReplayer) Reading file...");
|
Console.WriteLn("(GSDumpReplayer) Reading file '%s'...", filename);
|
||||||
|
|
||||||
s_dump_file = GSDumpFile::OpenGSDump(filename);
|
s_dump_file = GSDumpFile::OpenGSDump(filename);
|
||||||
if (!s_dump_file || !s_dump_file->ReadFile())
|
if (!s_dump_file || !s_dump_file->ReadFile())
|
||||||
|
@ -125,6 +125,25 @@ bool GSDumpReplayer::Initialize(const char* filename)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GSDumpReplayer::ChangeDump(const char* filename)
|
||||||
|
{
|
||||||
|
Console.WriteLn("(GSDumpReplayer) Switching to '%s'...", filename);
|
||||||
|
|
||||||
|
std::unique_ptr<GSDumpFile> new_dump(GSDumpFile::OpenGSDump(filename));
|
||||||
|
if (!new_dump || !new_dump->ReadFile())
|
||||||
|
{
|
||||||
|
Host::ReportFormattedErrorAsync("GSDumpReplayer", "Failed to open or read '%s'.", filename);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_dump_file = std::move(new_dump);
|
||||||
|
s_current_packet = 0;
|
||||||
|
|
||||||
|
// Don't forget to reset the GS!
|
||||||
|
GSDumpReplayerCpuReset();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void GSDumpReplayer::Reset()
|
void GSDumpReplayer::Reset()
|
||||||
{
|
{
|
||||||
GSDumpReplayerCpuReset();
|
GSDumpReplayerCpuReset();
|
||||||
|
@ -185,6 +204,7 @@ void GSDumpReplayerCpuReset()
|
||||||
s_needs_state_loaded = true;
|
s_needs_state_loaded = true;
|
||||||
s_current_packet = 0;
|
s_current_packet = 0;
|
||||||
s_dump_frame_number = 0;
|
s_dump_frame_number = 0;
|
||||||
|
hwReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GSDumpReplayerLoadInitialState()
|
static void GSDumpReplayerLoadInitialState()
|
||||||
|
|
|
@ -30,6 +30,7 @@ bool IsRunner();
|
||||||
void SetIsDumpRunner(bool is_runner);
|
void SetIsDumpRunner(bool is_runner);
|
||||||
|
|
||||||
bool Initialize(const char* filename);
|
bool Initialize(const char* filename);
|
||||||
|
bool ChangeDump(const char* filename);
|
||||||
void Reset();
|
void Reset();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue