mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-10 17:55:47 -04:00
Qt: Update window title/save states from running title
This commit is contained in:
@ -210,7 +210,7 @@ static std::string_view GetFileNameFromPath(const char* path)
|
||||
return std::string_view(filename_start + 1, filename_end - filename_start);
|
||||
}
|
||||
|
||||
static std::string_view GetTitleForPath(const char* path)
|
||||
std::string_view GameList::GetTitleForPath(const char* path)
|
||||
{
|
||||
const char* extension = std::strrchr(path, '.');
|
||||
if (path == extension)
|
||||
@ -295,13 +295,11 @@ bool GameList::GetGameListEntry(const std::string& path, GameListEntry* entry)
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadDatabase();
|
||||
|
||||
auto iter = m_database.find(entry->code);
|
||||
if (iter != m_database.end())
|
||||
const GameListDatabaseEntry* database_entry = GetDatabaseEntryForCode(entry->code);
|
||||
if (database_entry)
|
||||
{
|
||||
entry->title = iter->second.title;
|
||||
entry->region = iter->second.region;
|
||||
entry->title = database_entry->title;
|
||||
entry->region = database_entry->region;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -620,7 +618,7 @@ public:
|
||||
auto iter = m_database.find(code);
|
||||
if (iter == m_database.end())
|
||||
{
|
||||
GameList::GameDatabaseEntry gde;
|
||||
GameListDatabaseEntry gde;
|
||||
gde.code = std::move(code);
|
||||
gde.region = GameList::GetRegionForCode(gde.code).value_or(ConsoleRegion::NTSC_U);
|
||||
gde.title = name;
|
||||
@ -641,7 +639,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
GameList::DatabaseMap& m_database;
|
||||
DatabaseMap& m_database;
|
||||
};
|
||||
|
||||
void GameList::AddDirectory(std::string path, bool recursive)
|
||||
@ -662,13 +660,22 @@ const GameListEntry* GameList::GetEntryForPath(const char* path) const
|
||||
const size_t path_length = std::strlen(path);
|
||||
for (const GameListEntry& entry : m_entries)
|
||||
{
|
||||
if (entry.path.size() == path_length && StringUtil::Strcasecmp(entry.path.c_str(), path))
|
||||
if (entry.path.size() == path_length && StringUtil::Strcasecmp(entry.path.c_str(), path) == 0)
|
||||
return &entry;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const GameListDatabaseEntry* GameList::GetDatabaseEntryForCode(const std::string& code) const
|
||||
{
|
||||
if (!m_database_load_tried)
|
||||
const_cast<GameList*>(this)->LoadDatabase();
|
||||
|
||||
auto iter = m_database.find(code);
|
||||
return (iter != m_database.end()) ? &iter->second : nullptr;
|
||||
}
|
||||
|
||||
void GameList::SetPathsFromSettings(SettingsInterface& si)
|
||||
{
|
||||
m_search_directories.clear();
|
||||
|
@ -18,6 +18,13 @@ enum class GameListEntryType
|
||||
PSExe
|
||||
};
|
||||
|
||||
struct GameListDatabaseEntry
|
||||
{
|
||||
std::string code;
|
||||
std::string title;
|
||||
ConsoleRegion region;
|
||||
};
|
||||
|
||||
struct GameListEntry
|
||||
{
|
||||
std::string path;
|
||||
@ -48,11 +55,13 @@ public:
|
||||
static std::optional<ConsoleRegion> GetRegionFromSystemArea(CDImage* cdi);
|
||||
static std::optional<ConsoleRegion> GetRegionForImage(CDImage* cdi);
|
||||
static std::optional<ConsoleRegion> GetRegionForPath(const char* image_path);
|
||||
static std::string_view GetTitleForPath(const char* path);
|
||||
|
||||
const EntryList& GetEntries() const { return m_entries; }
|
||||
const u32 GetEntryCount() const { return static_cast<u32>(m_entries.size()); }
|
||||
|
||||
const GameListEntry* GetEntryForPath(const char* path) const;
|
||||
const GameListDatabaseEntry* GetDatabaseEntryForCode(const std::string& code) const;
|
||||
|
||||
void SetPathsFromSettings(SettingsInterface& si);
|
||||
void AddDirectory(std::string path, bool recursive);
|
||||
@ -65,14 +74,7 @@ private:
|
||||
GAME_LIST_CACHE_VERSION = 2
|
||||
};
|
||||
|
||||
struct GameDatabaseEntry
|
||||
{
|
||||
std::string code;
|
||||
std::string title;
|
||||
ConsoleRegion region;
|
||||
};
|
||||
|
||||
using DatabaseMap = std::unordered_map<std::string, GameDatabaseEntry>;
|
||||
using DatabaseMap = std::unordered_map<std::string, GameListDatabaseEntry>;
|
||||
using CacheMap = std::unordered_map<std::string, GameListEntry>;
|
||||
|
||||
struct DirectoryEntry
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "common/string_util.h"
|
||||
#include "common/timer.h"
|
||||
#include "dma.h"
|
||||
#include "game_list.h"
|
||||
#include "gpu.h"
|
||||
#include "host_display.h"
|
||||
#include "mdec.h"
|
||||
@ -51,6 +52,7 @@ static std::string GetRelativePath(const std::string& path, const char* new_file
|
||||
|
||||
HostInterface::HostInterface()
|
||||
{
|
||||
m_game_list = std::make_unique<GameList>();
|
||||
m_settings.SetDefaults();
|
||||
m_last_throttle_time = Common::Timer::GetValue();
|
||||
}
|
||||
@ -435,6 +437,8 @@ void HostInterface::UpdateSpeedLimiterState()
|
||||
|
||||
void HostInterface::OnPerformanceCountersUpdated() {}
|
||||
|
||||
void HostInterface::OnRunningGameChanged(const char* path, const char* game_code, const char* game_title) {}
|
||||
|
||||
void HostInterface::RunFrame()
|
||||
{
|
||||
m_frame_timer.Reset();
|
||||
@ -490,3 +494,31 @@ void HostInterface::ResetPerformanceCounters()
|
||||
m_worst_frame_time_accumulator = 0.0f;
|
||||
m_fps_timer.Reset();
|
||||
}
|
||||
|
||||
void HostInterface::UpdateRunningGame(const char* path, CDImage* image)
|
||||
{
|
||||
if (!path)
|
||||
{
|
||||
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());
|
||||
}
|
||||
|
@ -11,12 +11,16 @@
|
||||
#include <vector>
|
||||
|
||||
class AudioStream;
|
||||
class CDImage;
|
||||
class HostDisplay;
|
||||
class GameList;
|
||||
|
||||
class System;
|
||||
|
||||
class HostInterface
|
||||
{
|
||||
friend System;
|
||||
|
||||
public:
|
||||
HostInterface();
|
||||
virtual ~HostInterface();
|
||||
@ -30,6 +34,9 @@ public:
|
||||
/// Returns a settings object which can be modified.
|
||||
Settings& GetSettings() { return m_settings; }
|
||||
|
||||
/// Returns the game list.
|
||||
const GameList* GetGameList() const { return m_game_list.get(); }
|
||||
|
||||
/// Adjusts the throttle frequency, i.e. how many times we should sleep per second.
|
||||
void SetThrottleFrequency(double frequency) { m_throttle_period = static_cast<s64>(1000000000.0 / frequency); }
|
||||
|
||||
@ -73,6 +80,7 @@ protected:
|
||||
};
|
||||
|
||||
virtual void OnPerformanceCountersUpdated();
|
||||
virtual void OnRunningGameChanged(const char* path, const char* game_code, const char* game_title);
|
||||
|
||||
void RunFrame();
|
||||
|
||||
@ -89,9 +97,12 @@ protected:
|
||||
void UpdatePerformanceCounters();
|
||||
void ResetPerformanceCounters();
|
||||
|
||||
void UpdateRunningGame(const char* path, CDImage* image);
|
||||
|
||||
std::unique_ptr<HostDisplay> m_display;
|
||||
std::unique_ptr<AudioStream> m_audio_stream;
|
||||
std::unique_ptr<System> m_system;
|
||||
std::unique_ptr<GameList> m_game_list;
|
||||
Settings m_settings;
|
||||
|
||||
u64 m_last_throttle_time = 0;
|
||||
|
@ -154,6 +154,9 @@ bool System::Boot(const char* filename)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Notify change of disc.
|
||||
m_host_interface->UpdateRunningGame(filename, media.get());
|
||||
|
||||
// Insert CD, and apply fastboot patch if enabled.
|
||||
m_cdrom->InsertMedia(std::move(media));
|
||||
if (m_cdrom->HasMedia() && GetSettings().bios_patch_fast_boot)
|
||||
|
Reference in New Issue
Block a user