HostInterface: Move running title info to System

This commit is contained in:
Connor McLaughlin 2020-01-24 14:51:05 +10:00
parent b3db3a1cc0
commit 77b282862f
6 changed files with 65 additions and 40 deletions

View File

@ -438,7 +438,7 @@ void HostInterface::UpdateSpeedLimiterState()
void HostInterface::OnPerformanceCountersUpdated() {} void HostInterface::OnPerformanceCountersUpdated() {}
void HostInterface::OnRunningGameChanged(const char* path, const char* game_code, const char* game_title) {} void HostInterface::OnRunningGameChanged() {}
void HostInterface::SetUserDirectory() void HostInterface::SetUserDirectory()
{ {
@ -540,31 +540,3 @@ void HostInterface::ResetPerformanceCounters()
m_worst_frame_time_accumulator = 0.0f; m_worst_frame_time_accumulator = 0.0f;
m_fps_timer.Reset(); m_fps_timer.Reset();
} }
void HostInterface::UpdateRunningGame(const char* path, CDImage* image)
{
if (!path || std::strlen(path) == 0)
{
OnRunningGameChanged("", "", "");
return;
}
const GameListEntry* list_entry = m_game_list->GetEntryForPath(path);
if (list_entry)
{
OnRunningGameChanged(path, list_entry->code.c_str(), list_entry->title.c_str());
return;
}
const std::string game_code = image ? GameList::GetGameCodeForImage(image) : std::string();
const GameListDatabaseEntry* db_entry =
(!game_code.empty()) ? m_game_list->GetDatabaseEntryForCode(game_code) : nullptr;
if (!db_entry)
{
const std::string game_title(GameList::GetTitleForPath(path));
OnRunningGameChanged(path, game_code.c_str(), game_title.c_str());
return;
}
OnRunningGameChanged(path, db_entry->code.c_str(), db_entry->title.c_str());
}

View File

@ -86,7 +86,7 @@ protected:
}; };
virtual void OnPerformanceCountersUpdated(); virtual void OnPerformanceCountersUpdated();
virtual void OnRunningGameChanged(const char* path, const char* game_code, const char* game_title); virtual void OnRunningGameChanged();
void SetUserDirectory(); void SetUserDirectory();
@ -108,8 +108,6 @@ protected:
void UpdatePerformanceCounters(); void UpdatePerformanceCounters();
void ResetPerformanceCounters(); void ResetPerformanceCounters();
void UpdateRunningGame(const char* path, CDImage* image);
std::unique_ptr<HostDisplay> m_display; std::unique_ptr<HostDisplay> m_display;
std::unique_ptr<AudioStream> m_audio_stream; std::unique_ptr<AudioStream> m_audio_stream;
std::unique_ptr<System> m_system; std::unique_ptr<System> m_system;

View File

@ -155,7 +155,7 @@ bool System::Boot(const char* filename)
} }
// Notify change of disc. // Notify change of disc.
m_host_interface->UpdateRunningGame(filename, media.get()); UpdateRunningGame(filename, media.get());
// Insert CD, and apply fastboot patch if enabled. // Insert CD, and apply fastboot patch if enabled.
m_cdrom->InsertMedia(std::move(media)); m_cdrom->InsertMedia(std::move(media));
@ -251,7 +251,7 @@ bool System::DoState(StateWrapper& sw)
Log_ErrorPrintf("Failed to open CD image from save state: '%s'", media_filename.c_str()); Log_ErrorPrintf("Failed to open CD image from save state: '%s'", media_filename.c_str());
} }
m_host_interface->UpdateRunningGame(media_filename.c_str(), media.get()); UpdateRunningGame(media_filename.c_str(), media.get());
if (media) if (media)
m_cdrom->InsertMedia(std::move(media)); m_cdrom->InsertMedia(std::move(media));
else else
@ -516,6 +516,7 @@ bool System::InsertMedia(const char* path)
if (!image) if (!image)
return false; return false;
UpdateRunningGame(path, image.get());
m_cdrom->InsertMedia(std::move(image)); m_cdrom->InsertMedia(std::move(image));
return true; return true;
} }
@ -524,3 +525,37 @@ void System::RemoveMedia()
{ {
m_cdrom->RemoveMedia(); m_cdrom->RemoveMedia();
} }
void System::UpdateRunningGame(const char* path, CDImage* image)
{
m_running_game_path.clear();
m_running_game_code.clear();
m_running_game_title.clear();
if (path && std::strlen(path) > 0)
{
m_running_game_path = path;
const GameListEntry* list_entry = m_host_interface->GetGameList()->GetEntryForPath(path);
if (list_entry)
{
m_running_game_code = list_entry->code;
m_running_game_title = list_entry->title;
}
else
{
if (image)
m_running_game_code = GameList::GetGameCodeForImage(image);
const GameListDatabaseEntry* db_entry =
(!m_running_game_code.empty()) ? m_host_interface->GetGameList()->GetDatabaseEntryForCode(m_running_game_code) :
nullptr;
if (db_entry)
m_running_game_title = db_entry->title;
else
m_running_game_title = GameList::GetTitleForPath(path);
}
}
m_host_interface->OnRunningGameChanged();
}

View File

@ -1,8 +1,9 @@
#pragma once #pragma once
#include "types.h"
#include "host_interface.h" #include "host_interface.h"
#include "types.h"
#include <memory> #include <memory>
#include <optional> #include <optional>
#include <string>
class ByteStream; class ByteStream;
class CDImage; class CDImage;
@ -11,7 +12,7 @@ class StateWrapper;
namespace CPU { namespace CPU {
class Core; class Core;
class CodeCache; class CodeCache;
} } // namespace CPU
class Bus; class Bus;
class DMA; class DMA;
@ -56,6 +57,10 @@ public:
const Settings& GetSettings() { return m_host_interface->GetSettings(); } const Settings& GetSettings() { return m_host_interface->GetSettings(); }
const std::string& GetRunningPath() const { return m_running_game_path; }
const std::string& GetRunningCode() const { return m_running_game_code; }
const std::string& GetRunningTitle() const { return m_running_game_title; }
bool Boot(const char* filename); bool Boot(const char* filename);
void Reset(); void Reset();
@ -94,6 +99,8 @@ private:
void InitializeComponents(); void InitializeComponents();
void UpdateRunningGame(const char* path, CDImage* image);
HostInterface* m_host_interface; HostInterface* m_host_interface;
std::unique_ptr<CPU::Core> m_cpu; std::unique_ptr<CPU::Core> m_cpu;
std::unique_ptr<CPU::CodeCache> m_cpu_code_cache; std::unique_ptr<CPU::CodeCache> m_cpu_code_cache;
@ -112,4 +119,8 @@ private:
u32 m_frame_number = 1; u32 m_frame_number = 1;
u32 m_internal_frame_number = 1; u32 m_internal_frame_number = 1;
u32 m_global_tick_counter = 0; u32 m_global_tick_counter = 0;
std::string m_running_game_path;
std::string m_running_game_code;
std::string m_running_game_title;
}; };

View File

@ -247,11 +247,20 @@ void QtHostInterface::OnPerformanceCountersUpdated()
emit performanceCountersUpdated(m_speed, m_fps, m_vps, m_average_frame_time, m_worst_frame_time); emit performanceCountersUpdated(m_speed, m_fps, m_vps, m_average_frame_time, m_worst_frame_time);
} }
void QtHostInterface::OnRunningGameChanged(const char* path, const char* game_code, const char* game_title) void QtHostInterface::OnRunningGameChanged()
{ {
HostInterface::OnRunningGameChanged(path, game_code, game_title); HostInterface::OnRunningGameChanged();
emit runningGameChanged(QString::fromUtf8(path), QString::fromUtf8(game_code), QString::fromUtf8(game_title)); if (m_system)
{
emit runningGameChanged(QString::fromStdString(m_system->GetRunningPath()),
QString::fromStdString(m_system->GetRunningCode()),
QString::fromStdString(m_system->GetRunningTitle()));
}
else
{
emit runningGameChanged(QString(), QString(), QString());
}
} }
void QtHostInterface::updateInputMap() void QtHostInterface::updateInputMap()

View File

@ -88,7 +88,7 @@ private Q_SLOTS:
protected: protected:
void OnPerformanceCountersUpdated() override; void OnPerformanceCountersUpdated() override;
void OnRunningGameChanged(const char* path, const char* game_code, const char* game_title) override; void OnRunningGameChanged() override;
private: private:
using InputButtonHandler = std::function<void(bool)>; using InputButtonHandler = std::function<void(bool)>;