mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Add screen to control debug levels. Will make it easier to access later.
This commit is contained in:
parent
78d3ee3d6a
commit
26c5ee4a6d
13 changed files with 257 additions and 259 deletions
|
@ -1131,6 +1131,7 @@ endif()
|
||||||
|
|
||||||
set(NativeAppSource
|
set(NativeAppSource
|
||||||
UI/NativeApp.cpp
|
UI/NativeApp.cpp
|
||||||
|
UI/DevScreens.cpp
|
||||||
UI/EmuScreen.cpp
|
UI/EmuScreen.cpp
|
||||||
android/jni/TestRunner.cpp
|
android/jni/TestRunner.cpp
|
||||||
UI/GameInfoCache.cpp
|
UI/GameInfoCache.cpp
|
||||||
|
|
|
@ -47,7 +47,7 @@ void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogManager *LogManager::m_logManager = NULL;
|
LogManager *LogManager::logManager_ = NULL;
|
||||||
|
|
||||||
struct LogNameTableEntry {
|
struct LogNameTableEntry {
|
||||||
LogTypes::LOG_TYPE logType;
|
LogTypes::LOG_TYPE logType;
|
||||||
|
@ -62,9 +62,9 @@ static const LogNameTableEntry logTable[] = {
|
||||||
{LogTypes::CPU ,"CPU", "CPU"},
|
{LogTypes::CPU ,"CPU", "CPU"},
|
||||||
{LogTypes::LOADER ,"LOAD", "Loader"},
|
{LogTypes::LOADER ,"LOAD", "Loader"},
|
||||||
{LogTypes::IO ,"IO", "IO"},
|
{LogTypes::IO ,"IO", "IO"},
|
||||||
{LogTypes::DISCIO ,"DIO", "DiscIO"},
|
|
||||||
{LogTypes::PAD ,"PAD", "Pad"},
|
{LogTypes::PAD ,"PAD", "Pad"},
|
||||||
{LogTypes::FILESYS ,"FileSys", "File System"},
|
{LogTypes::FILESYS ,"FileSys", "File System"},
|
||||||
|
{LogTypes::DISCIO ,"DIO", "DiscIO"},
|
||||||
{LogTypes::G3D ,"G3D", "3D Graphics"},
|
{LogTypes::G3D ,"G3D", "3D Graphics"},
|
||||||
{LogTypes::DMA ,"DMA", "DMA"},
|
{LogTypes::DMA ,"DMA", "DMA"},
|
||||||
{LogTypes::INTC ,"INTC", "Interrupts"},
|
{LogTypes::INTC ,"INTC", "Interrupts"},
|
||||||
|
@ -81,75 +81,76 @@ static const LogNameTableEntry logTable[] = {
|
||||||
|
|
||||||
LogManager::LogManager() {
|
LogManager::LogManager() {
|
||||||
for (size_t i = 0; i < ARRAY_SIZE(logTable); i++) {
|
for (size_t i = 0; i < ARRAY_SIZE(logTable); i++) {
|
||||||
m_Log[logTable[i].logType] = new LogContainer(logTable[i].name, logTable[i].longName);
|
if (i != logTable[i].logType) {
|
||||||
|
FLOG("Bad logtable at %i", i);
|
||||||
|
}
|
||||||
|
log_[logTable[i].logType] = new LogChannel(logTable[i].name, logTable[i].longName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove file logging on small devices
|
// Remove file logging on small devices
|
||||||
#if !defined(USING_GLES2) || defined(_DEBUG)
|
#if !defined(USING_GLES2) || defined(_DEBUG)
|
||||||
m_fileLog = new FileLogListener(File::GetUserPath(F_MAINLOG_IDX).c_str());
|
fileLog_ = new FileLogListener(File::GetUserPath(F_MAINLOG_IDX).c_str());
|
||||||
m_consoleLog = new ConsoleListener();
|
consoleLog_ = new ConsoleListener();
|
||||||
m_debuggerLog = new DebuggerLogListener();
|
debuggerLog_ = new DebuggerLogListener();
|
||||||
#else
|
#else
|
||||||
m_fileLog = NULL;
|
fileLog_ = NULL;
|
||||||
m_consoleLog = NULL;
|
consoleLog_ = NULL;
|
||||||
m_debuggerLog = NULL;
|
debuggerLog_ = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
|
||||||
m_Log[i]->SetEnable(true);
|
log_[i]->SetEnable(true);
|
||||||
#if !defined(USING_GLES2) || defined(_DEBUG)
|
#if !defined(USING_GLES2) || defined(_DEBUG)
|
||||||
m_Log[i]->AddListener(m_fileLog);
|
log_[i]->AddListener(fileLog_);
|
||||||
m_Log[i]->AddListener(m_consoleLog);
|
log_[i]->AddListener(consoleLog_);
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
if (IsDebuggerPresent() && m_debuggerLog != NULL && LOG_MSC_OUTPUTDEBUG)
|
if (IsDebuggerPresent() && debuggerLog_ != NULL && LOG_MSC_OUTPUTDEBUG)
|
||||||
m_Log[i]->AddListener(m_debuggerLog);
|
log_[i]->AddListener(debuggerLog_);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogManager::~LogManager()
|
LogManager::~LogManager() {
|
||||||
{
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
|
||||||
{
|
|
||||||
#if !defined(USING_GLES2) || defined(_DEBUG)
|
#if !defined(USING_GLES2) || defined(_DEBUG)
|
||||||
if (m_fileLog != NULL)
|
if (fileLog_ != NULL)
|
||||||
m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_fileLog);
|
logManager_->RemoveListener((LogTypes::LOG_TYPE)i, fileLog_);
|
||||||
m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_consoleLog);
|
logManager_->RemoveListener((LogTypes::LOG_TYPE)i, consoleLog_);
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_debuggerLog);
|
logManager_->RemoveListener((LogTypes::LOG_TYPE)i, debuggerLog_);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
||||||
delete m_Log[i];
|
delete log_[i];
|
||||||
if (m_fileLog != NULL)
|
if (fileLog_ != NULL)
|
||||||
delete m_fileLog;
|
delete fileLog_;
|
||||||
#if !defined(USING_GLES2) || defined(_DEBUG)
|
#if !defined(USING_GLES2) || defined(_DEBUG)
|
||||||
delete m_consoleLog;
|
delete consoleLog_;
|
||||||
delete m_debuggerLog;
|
delete debuggerLog_;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::ChangeFileLog(const char *filename) {
|
void LogManager::ChangeFileLog(const char *filename) {
|
||||||
if (m_fileLog != NULL) {
|
if (fileLog_ != NULL) {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
||||||
m_logManager->RemoveListener((LogTypes::LOG_TYPE)i, m_fileLog);
|
logManager_->RemoveListener((LogTypes::LOG_TYPE)i, fileLog_);
|
||||||
delete m_fileLog;
|
delete fileLog_;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename != NULL) {
|
if (filename != NULL) {
|
||||||
m_fileLog = new FileLogListener(filename);
|
fileLog_ = new FileLogListener(filename);
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
||||||
m_Log[i]->AddListener(m_fileLog);
|
log_[i]->AddListener(fileLog_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::SaveConfig(IniFile::Section *section) {
|
void LogManager::SaveConfig(IniFile::Section *section) {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) {
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) {
|
||||||
section->Set((std::string(m_Log[i]->GetShortName()) + "Enabled").c_str(), m_Log[i]->IsEnabled());
|
section->Set((std::string(log_[i]->GetShortName()) + "Enabled").c_str(), log_[i]->IsEnabled());
|
||||||
section->Set((std::string(m_Log[i]->GetShortName()) + "Level").c_str(), (int)m_Log[i]->GetLevel());
|
section->Set((std::string(log_[i]->GetShortName()) + "Level").c_str(), (int)log_[i]->GetLevel());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,18 +158,18 @@ void LogManager::LoadConfig(IniFile::Section *section) {
|
||||||
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) {
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++) {
|
||||||
bool enabled;
|
bool enabled;
|
||||||
int level;
|
int level;
|
||||||
section->Get((std::string(m_Log[i]->GetShortName()) + "Enabled").c_str(), &enabled, true);
|
section->Get((std::string(log_[i]->GetShortName()) + "Enabled").c_str(), &enabled, true);
|
||||||
section->Get((std::string(m_Log[i]->GetShortName()) + "Level").c_str(), &level, 0);
|
section->Get((std::string(log_[i]->GetShortName()) + "Level").c_str(), &level, 0);
|
||||||
m_Log[i]->SetEnable(enabled);
|
log_[i]->SetEnable(enabled);
|
||||||
m_Log[i]->SetLevel((LogTypes::LOG_LEVELS)level);
|
log_[i]->SetLevel((LogTypes::LOG_LEVELS)level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char *format, va_list args) {
|
void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char *format, va_list args) {
|
||||||
std::lock_guard<std::mutex> lk(m_log_lock);
|
std::lock_guard<std::mutex> lk(log_lock_);
|
||||||
|
|
||||||
char msg[MAX_MSGLEN * 2];
|
char msg[MAX_MSGLEN * 2];
|
||||||
LogContainer *log = m_Log[type];
|
LogChannel *log = log_[type];
|
||||||
if (!log || !log->IsEnabled() || level > log->GetLevel() || ! log->HasListeners())
|
if (!log || !log->IsEnabled() || level > log->GetLevel() || ! log->HasListeners())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -193,16 +194,13 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *msgPos = msg;
|
char *msgPos = msg;
|
||||||
if (hleCurrentThreadName != NULL)
|
if (hleCurrentThreadName != NULL) {
|
||||||
{
|
|
||||||
msgPos += sprintf(msgPos, "%s %-12.12s %c[%s]: %s:%d ",
|
msgPos += sprintf(msgPos, "%s %-12.12s %c[%s]: %s:%d ",
|
||||||
formattedTime,
|
formattedTime,
|
||||||
hleCurrentThreadName, level_to_char[(int)level],
|
hleCurrentThreadName, level_to_char[(int)level],
|
||||||
log->GetShortName(),
|
log->GetShortName(),
|
||||||
file, line);
|
file, line);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
msgPos += sprintf(msgPos, "%s %s:%d %c[%s]: ",
|
msgPos += sprintf(msgPos, "%s %s:%d %c[%s]: ",
|
||||||
formattedTime,
|
formattedTime,
|
||||||
file, line, level_to_char[(int)level],
|
file, line, level_to_char[(int)level],
|
||||||
|
@ -217,33 +215,33 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::Init() {
|
void LogManager::Init() {
|
||||||
m_logManager = new LogManager();
|
logManager_ = new LogManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogManager::Shutdown() {
|
void LogManager::Shutdown() {
|
||||||
delete m_logManager;
|
delete logManager_;
|
||||||
m_logManager = NULL;
|
logManager_ = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogContainer::LogContainer(const char* shortName, const char* fullName, bool enable)
|
LogChannel::LogChannel(const char* shortName, const char* fullName, bool enable)
|
||||||
: m_enable(enable) {
|
: enable_(enable) {
|
||||||
strncpy(m_fullName, fullName, 128);
|
strncpy(m_fullName, fullName, 128);
|
||||||
strncpy(m_shortName, shortName, 32);
|
strncpy(m_shortName, shortName, 32);
|
||||||
m_level = LogTypes::LDEBUG;
|
level_ = LogTypes::LDEBUG;
|
||||||
}
|
}
|
||||||
|
|
||||||
// LogContainer
|
// LogContainer
|
||||||
void LogContainer::AddListener(LogListener *listener) {
|
void LogChannel::AddListener(LogListener *listener) {
|
||||||
std::lock_guard<std::mutex> lk(m_listeners_lock);
|
std::lock_guard<std::mutex> lk(m_listeners_lock);
|
||||||
m_listeners.insert(listener);
|
m_listeners.insert(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogContainer::RemoveListener(LogListener *listener) {
|
void LogChannel::RemoveListener(LogListener *listener) {
|
||||||
std::lock_guard<std::mutex> lk(m_listeners_lock);
|
std::lock_guard<std::mutex> lk(m_listeners_lock);
|
||||||
m_listeners.erase(listener);
|
m_listeners.erase(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogContainer::Trigger(LogTypes::LOG_LEVELS level, const char *msg) {
|
void LogChannel::Trigger(LogTypes::LOG_LEVELS level, const char *msg) {
|
||||||
#ifdef __SYMBIAN32__
|
#ifdef __SYMBIAN32__
|
||||||
RDebug::Printf("%s",msg);
|
RDebug::Printf("%s",msg);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -62,9 +62,13 @@ public:
|
||||||
void Log(LogTypes::LOG_LEVELS, const char *msg);
|
void Log(LogTypes::LOG_LEVELS, const char *msg);
|
||||||
};
|
};
|
||||||
|
|
||||||
class LogContainer {
|
// TODO: A simple buffered log that can be used to display the log in-window
|
||||||
|
// on Android etc.
|
||||||
|
// class BufferedLogListener { ... }
|
||||||
|
|
||||||
|
class LogChannel {
|
||||||
public:
|
public:
|
||||||
LogContainer(const char* shortName, const char* fullName, bool enable = false);
|
LogChannel(const char* shortName, const char* fullName, bool enable = false);
|
||||||
|
|
||||||
const char* GetShortName() const { return m_shortName; }
|
const char* GetShortName() const { return m_shortName; }
|
||||||
const char* GetFullName() const { return m_fullName; }
|
const char* GetFullName() const { return m_fullName; }
|
||||||
|
@ -74,20 +78,21 @@ public:
|
||||||
|
|
||||||
void Trigger(LogTypes::LOG_LEVELS, const char *msg);
|
void Trigger(LogTypes::LOG_LEVELS, const char *msg);
|
||||||
|
|
||||||
bool IsEnabled() const { return m_enable; }
|
bool IsEnabled() const { return enable_; }
|
||||||
void SetEnable(bool enable) { m_enable = enable; }
|
void SetEnable(bool enable) { enable_ = enable; }
|
||||||
|
|
||||||
LogTypes::LOG_LEVELS GetLevel() const { return m_level; }
|
LogTypes::LOG_LEVELS GetLevel() const { return (LogTypes::LOG_LEVELS)level_; }
|
||||||
|
|
||||||
void SetLevel(LogTypes::LOG_LEVELS level) { m_level = level; }
|
|
||||||
|
|
||||||
|
void SetLevel(LogTypes::LOG_LEVELS level) { level_ = level; }
|
||||||
bool HasListeners() const { return !m_listeners.empty(); }
|
bool HasListeners() const { return !m_listeners.empty(); }
|
||||||
|
|
||||||
|
// Although not elegant, easy to set with a PopupMultiChoice...
|
||||||
|
int level_;
|
||||||
|
bool enable_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char m_fullName[128];
|
char m_fullName[128];
|
||||||
char m_shortName[32];
|
char m_shortName[32];
|
||||||
bool m_enable;
|
|
||||||
LogTypes::LOG_LEVELS m_level;
|
|
||||||
std::mutex m_listeners_lock;
|
std::mutex m_listeners_lock;
|
||||||
std::set<LogListener*> m_listeners;
|
std::set<LogListener*> m_listeners;
|
||||||
};
|
};
|
||||||
|
@ -96,56 +101,62 @@ class ConsoleListener;
|
||||||
|
|
||||||
class LogManager : NonCopyable {
|
class LogManager : NonCopyable {
|
||||||
private:
|
private:
|
||||||
LogContainer* m_Log[LogTypes::NUMBER_OF_LOGS];
|
LogChannel* log_[LogTypes::NUMBER_OF_LOGS];
|
||||||
FileLogListener *m_fileLog;
|
FileLogListener *fileLog_;
|
||||||
ConsoleListener *m_consoleLog;
|
ConsoleListener *consoleLog_;
|
||||||
DebuggerLogListener *m_debuggerLog;
|
DebuggerLogListener *debuggerLog_;
|
||||||
static LogManager *m_logManager; // Singleton. Ugh.
|
static LogManager *logManager_; // Singleton. Ugh.
|
||||||
std::mutex m_log_lock;
|
std::mutex log_lock_;
|
||||||
|
|
||||||
LogManager();
|
LogManager();
|
||||||
~LogManager();
|
~LogManager();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static u32 GetMaxLevel() { return MAX_LOGLEVEL; }
|
static u32 GetMaxLevel() { return MAX_LOGLEVEL; }
|
||||||
|
static int GetNumChannels() { return LogTypes::NUMBER_OF_LOGS; }
|
||||||
|
|
||||||
void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
|
void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
|
||||||
const char *file, int line, const char *fmt, va_list args);
|
const char *file, int line, const char *fmt, va_list args);
|
||||||
|
|
||||||
|
LogChannel *GetLogChannel(LogTypes::LOG_TYPE type) {
|
||||||
|
return log_[type];
|
||||||
|
}
|
||||||
|
|
||||||
void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level) {
|
void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level) {
|
||||||
m_Log[type]->SetLevel(level);
|
log_[type]->SetLevel(level);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetEnable(LogTypes::LOG_TYPE type, bool enable) {
|
void SetEnable(LogTypes::LOG_TYPE type, bool enable) {
|
||||||
m_Log[type]->SetEnable(enable);
|
log_[type]->SetEnable(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogTypes::LOG_LEVELS GetLogLevel(LogTypes::LOG_TYPE type) {
|
LogTypes::LOG_LEVELS GetLogLevel(LogTypes::LOG_TYPE type) {
|
||||||
return m_Log[type]->GetLevel();
|
return log_[type]->GetLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddListener(LogTypes::LOG_TYPE type, LogListener *listener) {
|
void AddListener(LogTypes::LOG_TYPE type, LogListener *listener) {
|
||||||
m_Log[type]->AddListener(listener);
|
log_[type]->AddListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveListener(LogTypes::LOG_TYPE type, LogListener *listener) {
|
void RemoveListener(LogTypes::LOG_TYPE type, LogListener *listener) {
|
||||||
m_Log[type]->RemoveListener(listener);
|
log_[type]->RemoveListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsoleListener *GetConsoleListener() const {
|
ConsoleListener *GetConsoleListener() const {
|
||||||
return m_consoleLog;
|
return consoleLog_;
|
||||||
}
|
}
|
||||||
|
|
||||||
DebuggerLogListener *GetDebuggerListener() const {
|
DebuggerLogListener *GetDebuggerListener() const {
|
||||||
return m_debuggerLog;
|
return debuggerLog_;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LogManager* GetInstance() {
|
static LogManager* GetInstance() {
|
||||||
return m_logManager;
|
return logManager_;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetInstance(LogManager *logManager) {
|
static void SetInstance(LogManager *logManager) {
|
||||||
m_logManager = logManager;
|
logManager_ = logManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Init();
|
static void Init();
|
||||||
|
|
103
UI/DevScreens.cpp
Normal file
103
UI/DevScreens.cpp
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
// Copyright (c) 2013- PPSSPP Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0 or later versions.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official git repository and contact information can be found at
|
||||||
|
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
||||||
|
|
||||||
|
#include "gfx_es2/gl_state.h"
|
||||||
|
#include "i18n/i18n.h"
|
||||||
|
#include "ui/ui_context.h"
|
||||||
|
#include "ui/view.h"
|
||||||
|
#include "ui/viewgroup.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "UI/MiscScreens.h"
|
||||||
|
#include "UI/DevScreens.h"
|
||||||
|
#include "UI/GameSettingsScreen.h"
|
||||||
|
#include "Common/LogManager.h"
|
||||||
|
#include "Core/Config.h"
|
||||||
|
|
||||||
|
// It's not so critical to translate everything here, most of this is developers only.
|
||||||
|
|
||||||
|
void LogConfigScreen::CreateViews() {
|
||||||
|
using namespace UI;
|
||||||
|
|
||||||
|
I18NCategory *d = GetI18NCategory("Dialog");
|
||||||
|
|
||||||
|
root_ = new ScrollView(ORIENT_VERTICAL);
|
||||||
|
|
||||||
|
LinearLayout *vert = root_->Add(new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)));
|
||||||
|
vert->SetSpacing(0);
|
||||||
|
|
||||||
|
vert->Add(new ItemHeader("Log Channels"));
|
||||||
|
|
||||||
|
static const char *logLevelList[] = {
|
||||||
|
"Notice (highest)",
|
||||||
|
"Error",
|
||||||
|
"Warning",
|
||||||
|
"Info",
|
||||||
|
"Debug",
|
||||||
|
"Verbose (lowest)"
|
||||||
|
};
|
||||||
|
|
||||||
|
LogManager *logMan = LogManager::GetInstance();
|
||||||
|
|
||||||
|
for (int i = 0; i < LogManager::GetNumChannels(); i++) {
|
||||||
|
LogTypes::LOG_TYPE type = (LogTypes::LOG_TYPE)i;
|
||||||
|
LogChannel *chan = logMan->GetLogChannel(type);
|
||||||
|
LinearLayout *row = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT));
|
||||||
|
row->Add(new PopupMultiChoice(&chan->level_, chan->GetFullName(), logLevelList, 1, 6, 0, screenManager(), new LinearLayoutParams(1.0)));
|
||||||
|
row->Add(new CheckBox(&chan->enable_, "", "", new LinearLayoutParams(100, WRAP_CONTENT)));
|
||||||
|
|
||||||
|
vert->Add(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
vert->Add(new Button(d->T("Back"), new LayoutParams(260, 64)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SystemInfoScreen::CreateViews() {
|
||||||
|
// NOTE: Do not translate this section. It will change a lot and will be impossible to keep up.
|
||||||
|
I18NCategory *d = GetI18NCategory("Dialog");
|
||||||
|
|
||||||
|
using namespace UI;
|
||||||
|
root_ = new ScrollView(ORIENT_VERTICAL, new LayoutParams(FILL_PARENT, FILL_PARENT));
|
||||||
|
|
||||||
|
LinearLayout *scroll = new LinearLayout(ORIENT_VERTICAL, new LayoutParams(FILL_PARENT, WRAP_CONTENT));
|
||||||
|
root_->Add(scroll);
|
||||||
|
|
||||||
|
scroll->Add(new ItemHeader("System Information"));
|
||||||
|
scroll->Add(new InfoItem("System Name", System_GetProperty(SYSPROP_NAME)));
|
||||||
|
scroll->Add(new InfoItem("System Lang/Region", System_GetProperty(SYSPROP_LANGREGION)));
|
||||||
|
scroll->Add(new InfoItem("GPU Vendor", (char *)glGetString(GL_VENDOR)));
|
||||||
|
scroll->Add(new InfoItem("GPU Model", (char *)glGetString(GL_RENDERER)));
|
||||||
|
scroll->Add(new InfoItem("OpenGL Version Supported", (char *)glGetString(GL_VERSION)));
|
||||||
|
scroll->Add(new Button(d->T("Back"), new LayoutParams(260, 64)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
scroll->Add(new ItemHeader("OpenGL Extensions"));
|
||||||
|
#else
|
||||||
|
scroll->Add(new ItemHeader("OpenGL ES 2.0 Extensions"));
|
||||||
|
#endif
|
||||||
|
std::vector<std::string> exts;
|
||||||
|
SplitString(g_all_gl_extensions, ' ', exts);
|
||||||
|
for (size_t i = 0; i < exts.size(); i++) {
|
||||||
|
scroll->Add(new TextView(exts[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll->Add(new ItemHeader("EGL Extensions"));
|
||||||
|
exts.clear();
|
||||||
|
SplitString(g_all_egl_extensions, ' ', exts);
|
||||||
|
for (size_t i = 0; i < exts.size(); i++) {
|
||||||
|
scroll->Add(new TextView(exts[i]));
|
||||||
|
}
|
||||||
|
}
|
44
UI/DevScreens.h
Normal file
44
UI/DevScreens.h
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
// Copyright (c) 2013- PPSSPP Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0 or later versions.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official git repository and contact information can be found at
|
||||||
|
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "base/functional.h"
|
||||||
|
#include "file/file_util.h"
|
||||||
|
#include "ui/ui_screen.h"
|
||||||
|
|
||||||
|
#include "UI/MiscScreens.h"
|
||||||
|
|
||||||
|
class LogConfigScreen : public UIDialogScreenWithBackground {
|
||||||
|
public:
|
||||||
|
LogConfigScreen() {}
|
||||||
|
virtual void CreateViews();
|
||||||
|
|
||||||
|
private:
|
||||||
|
UI::EventReturn OnLogLevelChanged(UI::EventParams &e);
|
||||||
|
UI::EventReturn OnLogEnabledChanged(UI::EventParams &e);
|
||||||
|
};
|
||||||
|
|
||||||
|
class SystemInfoScreen : public UIDialogScreenWithBackground {
|
||||||
|
public:
|
||||||
|
SystemInfoScreen() {}
|
||||||
|
virtual void CreateViews();
|
||||||
|
};
|
|
@ -26,6 +26,8 @@
|
||||||
#include "UI/GameInfoCache.h"
|
#include "UI/GameInfoCache.h"
|
||||||
#include "UI/MiscScreens.h"
|
#include "UI/MiscScreens.h"
|
||||||
#include "UI/ControlMappingScreen.h"
|
#include "UI/ControlMappingScreen.h"
|
||||||
|
#include "UI/DevScreens.h"
|
||||||
|
|
||||||
#include "Core/Config.h"
|
#include "Core/Config.h"
|
||||||
#include "Core/Host.h"
|
#include "Core/Host.h"
|
||||||
#include "android/jni/TestRunner.h"
|
#include "android/jni/TestRunner.h"
|
||||||
|
@ -57,142 +59,6 @@ namespace MainWindow {
|
||||||
extern bool isJailed;
|
extern bool isJailed;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace UI {
|
|
||||||
|
|
||||||
// Reads and writes value to determine the current selection.
|
|
||||||
class PopupMultiChoice : public Choice {
|
|
||||||
public:
|
|
||||||
PopupMultiChoice(int *value, const std::string &text, const char **choices, int minVal, int numChoices,
|
|
||||||
I18NCategory *category, ScreenManager *screenManager, LayoutParams *layoutParams = 0)
|
|
||||||
: Choice(text, "", false, layoutParams), value_(value), choices_(choices), minVal_(minVal), numChoices_(numChoices),
|
|
||||||
category_(category), screenManager_(screenManager) {
|
|
||||||
if (*value >= numChoices+minVal) *value = numChoices+minVal-1;
|
|
||||||
if (*value < minVal) *value = minVal;
|
|
||||||
OnClick.Handle(this, &PopupMultiChoice::HandleClick);
|
|
||||||
UpdateText();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void Draw(UIContext &dc);
|
|
||||||
|
|
||||||
UI::Event OnChoice;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void UpdateText();
|
|
||||||
EventReturn HandleClick(EventParams &e);
|
|
||||||
|
|
||||||
void ChoiceCallback(int num);
|
|
||||||
|
|
||||||
int *value_;
|
|
||||||
const char **choices_;
|
|
||||||
int minVal_;
|
|
||||||
int numChoices_;
|
|
||||||
I18NCategory *category_;
|
|
||||||
ScreenManager *screenManager_;
|
|
||||||
std::string valueText_;
|
|
||||||
};
|
|
||||||
|
|
||||||
EventReturn PopupMultiChoice::HandleClick(EventParams &e) {
|
|
||||||
std::vector<std::string> choices;
|
|
||||||
for (int i = 0; i < numChoices_; i++) {
|
|
||||||
choices.push_back(category_ ? category_->T(choices_[i]) : choices_[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Screen *popupScreen = new ListPopupScreen(text_, choices, *value_ - minVal_,
|
|
||||||
std::bind(&PopupMultiChoice::ChoiceCallback, this, placeholder::_1));
|
|
||||||
screenManager_->push(popupScreen);
|
|
||||||
return EVENT_DONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PopupMultiChoice::UpdateText() {
|
|
||||||
valueText_ = category_ ? category_->T(choices_[*value_ - minVal_]) : choices_[*value_ - minVal_];
|
|
||||||
}
|
|
||||||
|
|
||||||
void PopupMultiChoice::ChoiceCallback(int num) {
|
|
||||||
if (num != -1) {
|
|
||||||
*value_ = num + minVal_;
|
|
||||||
UpdateText();
|
|
||||||
|
|
||||||
UI::EventParams e;
|
|
||||||
e.v = this;
|
|
||||||
e.a = num;
|
|
||||||
OnChoice.Trigger(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PopupMultiChoice::Draw(UIContext &dc) {
|
|
||||||
Choice::Draw(dc);
|
|
||||||
int paddingX = 12;
|
|
||||||
dc.SetFontStyle(dc.theme->uiFont);
|
|
||||||
dc.DrawText(valueText_.c_str(), bounds_.x2() - paddingX, bounds_.centerY(), 0xFFFFFFFF, ALIGN_RIGHT | ALIGN_VCENTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
class PopupSliderChoice : public Choice {
|
|
||||||
public:
|
|
||||||
PopupSliderChoice(int *value, int minValue, int maxValue, const std::string &text, ScreenManager *screenManager, LayoutParams *layoutParams = 0)
|
|
||||||
: Choice(text, "", false, layoutParams), value_(value), minValue_(minValue), maxValue_(maxValue), screenManager_(screenManager) {
|
|
||||||
OnClick.Handle(this, &PopupSliderChoice::HandleClick);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Draw(UIContext &dc);
|
|
||||||
|
|
||||||
private:
|
|
||||||
EventReturn HandleClick(EventParams &e);
|
|
||||||
|
|
||||||
int *value_;
|
|
||||||
int minValue_;
|
|
||||||
int maxValue_;
|
|
||||||
ScreenManager *screenManager_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class PopupSliderChoiceFloat : public Choice {
|
|
||||||
public:
|
|
||||||
PopupSliderChoiceFloat(float *value, float minValue, float maxValue, const std::string &text, ScreenManager *screenManager, LayoutParams *layoutParams = 0)
|
|
||||||
: Choice(text, "", false, layoutParams), value_(value), minValue_(minValue), maxValue_(maxValue), screenManager_(screenManager) {
|
|
||||||
OnClick.Handle(this, &PopupSliderChoiceFloat::HandleClick);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Draw(UIContext &dc);
|
|
||||||
|
|
||||||
private:
|
|
||||||
EventReturn HandleClick(EventParams &e);
|
|
||||||
|
|
||||||
float *value_;
|
|
||||||
float minValue_;
|
|
||||||
float maxValue_;
|
|
||||||
ScreenManager *screenManager_;
|
|
||||||
};
|
|
||||||
|
|
||||||
EventReturn PopupSliderChoice::HandleClick(EventParams &e) {
|
|
||||||
Screen *popupScreen = new SliderPopupScreen(value_, minValue_, maxValue_, text_);
|
|
||||||
screenManager_->push(popupScreen);
|
|
||||||
return EVENT_DONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PopupSliderChoice::Draw(UIContext &dc) {
|
|
||||||
Choice::Draw(dc);
|
|
||||||
char temp[32];
|
|
||||||
sprintf(temp, "%i", *value_);
|
|
||||||
dc.SetFontStyle(dc.theme->uiFont);
|
|
||||||
dc.DrawText(temp, bounds_.x2() - 12, bounds_.centerY(), 0xFFFFFFFF, ALIGN_RIGHT | ALIGN_VCENTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
EventReturn PopupSliderChoiceFloat::HandleClick(EventParams &e) {
|
|
||||||
Screen *popupScreen = new SliderFloatPopupScreen(value_, minValue_, maxValue_, text_);
|
|
||||||
screenManager_->push(popupScreen);
|
|
||||||
return EVENT_DONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PopupSliderChoiceFloat::Draw(UIContext &dc) {
|
|
||||||
Choice::Draw(dc);
|
|
||||||
char temp[32];
|
|
||||||
sprintf(temp, "%2.2f", *value_);
|
|
||||||
dc.SetFontStyle(dc.theme->uiFont);
|
|
||||||
dc.DrawText(temp, bounds_.x2() - 12, bounds_.centerY(), 0xFFFFFFFF, ALIGN_RIGHT | ALIGN_VCENTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static const int alternateSpeedTable[9] = {
|
static const int alternateSpeedTable[9] = {
|
||||||
0, 15, 30, 45, 60, 75, 90, 120, 180
|
0, 15, 30, 45, 60, 75, 90, 120, 180
|
||||||
};
|
};
|
||||||
|
@ -370,6 +236,7 @@ void GameSettingsScreen::CreateViews() {
|
||||||
systemSettings->SetSpacing(0);
|
systemSettings->SetSpacing(0);
|
||||||
systemSettings->Add(new ItemHeader(s->T("General")));
|
systemSettings->Add(new ItemHeader(s->T("General")));
|
||||||
systemSettings->Add(new Choice(dev->T("Language", "Language")))->OnClick.Handle(this, &GameSettingsScreen::OnLanguage);
|
systemSettings->Add(new Choice(dev->T("Language", "Language")))->OnClick.Handle(this, &GameSettingsScreen::OnLanguage);
|
||||||
|
systemSettings->Add(new Choice(s->T("Developer Tools")))->OnClick.Handle(this, &GameSettingsScreen::OnDeveloperTools);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Screenshot functionality is not yet available on non-Windows
|
// Screenshot functionality is not yet available on non-Windows
|
||||||
systemSettings->Add(new CheckBox(&g_Config.bScreenshotsAsPNG, s->T("Screenshots as PNG")));
|
systemSettings->Add(new CheckBox(&g_Config.bScreenshotsAsPNG, s->T("Screenshots as PNG")));
|
||||||
|
@ -384,7 +251,6 @@ void GameSettingsScreen::CreateViews() {
|
||||||
enableReportsCheckbox_ = new CheckBox(&enableReports_, s->T("Enable Compatibility Server Reports"));
|
enableReportsCheckbox_ = new CheckBox(&enableReports_, s->T("Enable Compatibility Server Reports"));
|
||||||
enableReportsCheckbox_->SetEnabled(Reporting::IsSupported());
|
enableReportsCheckbox_->SetEnabled(Reporting::IsSupported());
|
||||||
systemSettings->Add(enableReportsCheckbox_);
|
systemSettings->Add(enableReportsCheckbox_);
|
||||||
systemSettings->Add(new Choice(s->T("Developer Tools")))->OnClick.Handle(this, &GameSettingsScreen::OnDeveloperTools);
|
|
||||||
|
|
||||||
|
|
||||||
systemSettings->Add(new ItemHeader(s->T("PSP Settings")));
|
systemSettings->Add(new ItemHeader(s->T("PSP Settings")));
|
||||||
|
@ -572,6 +438,7 @@ void DeveloperToolsScreen::CreateViews() {
|
||||||
list->SetSpacing(0);
|
list->SetSpacing(0);
|
||||||
list->Add(new ItemHeader(s->T("General")));
|
list->Add(new ItemHeader(s->T("General")));
|
||||||
list->Add(new Choice(de->T("System Information")))->OnClick.Handle(this, &DeveloperToolsScreen::OnSysInfo);
|
list->Add(new Choice(de->T("System Information")))->OnClick.Handle(this, &DeveloperToolsScreen::OnSysInfo);
|
||||||
|
list->Add(new Choice(de->T("Logging Channels")))->OnClick.Handle(this, &DeveloperToolsScreen::OnLogConfig);
|
||||||
list->Add(new Choice(de->T("Run CPU Tests")))->OnClick.Handle(this, &DeveloperToolsScreen::OnRunCPUTests);
|
list->Add(new Choice(de->T("Run CPU Tests")))->OnClick.Handle(this, &DeveloperToolsScreen::OnRunCPUTests);
|
||||||
list->Add(new Choice(de->T("Restore Default Settings")))->OnClick.Handle(this, &DeveloperToolsScreen::OnRestoreDefaultSettings);
|
list->Add(new Choice(de->T("Restore Default Settings")))->OnClick.Handle(this, &DeveloperToolsScreen::OnRestoreDefaultSettings);
|
||||||
#ifndef __SYMBIAN32__
|
#ifndef __SYMBIAN32__
|
||||||
|
@ -637,3 +504,8 @@ UI::EventReturn DeveloperToolsScreen::OnLoadLanguageIni(UI::EventParams &e) {
|
||||||
i18nrepo.LoadIni(g_Config.languageIni);
|
i18nrepo.LoadIni(g_Config.languageIni);
|
||||||
return UI::EVENT_DONE;
|
return UI::EVENT_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UI::EventReturn DeveloperToolsScreen::OnLogConfig(UI::EventParams &e) {
|
||||||
|
screenManager()->push(new LogConfigScreen());
|
||||||
|
return UI::EVENT_DONE;
|
||||||
|
}
|
||||||
|
|
|
@ -96,6 +96,7 @@ private:
|
||||||
UI::EventReturn OnLoadLanguageIni(UI::EventParams &e);
|
UI::EventReturn OnLoadLanguageIni(UI::EventParams &e);
|
||||||
UI::EventReturn OnSaveLanguageIni(UI::EventParams &e);
|
UI::EventReturn OnSaveLanguageIni(UI::EventParams &e);
|
||||||
UI::EventReturn OnRestoreDefaultSettings(UI::EventParams &e);
|
UI::EventReturn OnRestoreDefaultSettings(UI::EventParams &e);
|
||||||
|
UI::EventReturn OnLogConfig(UI::EventParams &e);
|
||||||
|
|
||||||
// Temporary variable.
|
// Temporary variable.
|
||||||
bool enableLogging_;
|
bool enableLogging_;
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "Core/Config.h"
|
#include "Core/Config.h"
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/HLE/sceUtility.h"
|
#include "Core/HLE/sceUtility.h"
|
||||||
|
#include "Common/CPUDetect.h"
|
||||||
|
|
||||||
#include "ui_atlas.h"
|
#include "ui_atlas.h"
|
||||||
|
|
||||||
|
@ -331,43 +332,6 @@ void LogoScreen::render() {
|
||||||
dc.Flush();
|
dc.Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemInfoScreen::CreateViews() {
|
|
||||||
// NOTE: Do not translate this section. It will change a lot and will be impossible to keep up.
|
|
||||||
I18NCategory *d = GetI18NCategory("Dialog");
|
|
||||||
|
|
||||||
using namespace UI;
|
|
||||||
root_ = new ScrollView(ORIENT_VERTICAL, new LayoutParams(FILL_PARENT, FILL_PARENT));
|
|
||||||
|
|
||||||
LinearLayout *scroll = new LinearLayout(ORIENT_VERTICAL, new LayoutParams(FILL_PARENT, WRAP_CONTENT));
|
|
||||||
root_->Add(scroll);
|
|
||||||
|
|
||||||
scroll->Add(new ItemHeader("System Information"));
|
|
||||||
scroll->Add(new InfoItem("System Name", System_GetProperty(SYSPROP_NAME)));
|
|
||||||
scroll->Add(new InfoItem("System Lang/Region", System_GetProperty(SYSPROP_LANGREGION)));
|
|
||||||
scroll->Add(new InfoItem("GPU Vendor", (char *)glGetString(GL_VENDOR)));
|
|
||||||
scroll->Add(new InfoItem("GPU Model", (char *)glGetString(GL_RENDERER)));
|
|
||||||
scroll->Add(new InfoItem("OpenGL Version Supported", (char *)glGetString(GL_VERSION)));
|
|
||||||
scroll->Add(new Button(d->T("Back"), new LayoutParams(260, 64)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
scroll->Add(new ItemHeader("OpenGL Extensions"));
|
|
||||||
#else
|
|
||||||
scroll->Add(new ItemHeader("OpenGL ES 2.0 Extensions"));
|
|
||||||
#endif
|
|
||||||
std::vector<std::string> exts;
|
|
||||||
SplitString(g_all_gl_extensions, ' ', exts);
|
|
||||||
for (size_t i = 0; i < exts.size(); i++) {
|
|
||||||
scroll->Add(new TextView(exts[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
scroll->Add(new ItemHeader("EGL Extensions"));
|
|
||||||
exts.clear();
|
|
||||||
SplitString(g_all_egl_extensions, ' ', exts);
|
|
||||||
for (size_t i = 0; i < exts.size(); i++) {
|
|
||||||
scroll->Add(new TextView(exts[i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CreditsScreen::CreateViews() {
|
void CreditsScreen::CreateViews() {
|
||||||
using namespace UI;
|
using namespace UI;
|
||||||
I18NCategory *d = GetI18NCategory("Dialog");
|
I18NCategory *d = GetI18NCategory("Dialog");
|
||||||
|
|
|
@ -104,11 +104,6 @@ private:
|
||||||
int frames_;
|
int frames_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SystemInfoScreen : public UIDialogScreenWithBackground {
|
|
||||||
public:
|
|
||||||
SystemInfoScreen() {}
|
|
||||||
virtual void CreateViews();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Utility functions that create various popup screens
|
// Utility functions that create various popup screens
|
||||||
ListPopupScreen *CreateLanguageScreen();
|
ListPopupScreen *CreateLanguageScreen();
|
|
@ -21,6 +21,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="ControlMappingScreen.cpp" />
|
<ClCompile Include="ControlMappingScreen.cpp" />
|
||||||
<ClCompile Include="CwCheatScreen.cpp" />
|
<ClCompile Include="CwCheatScreen.cpp" />
|
||||||
|
<ClCompile Include="DevScreens.cpp" />
|
||||||
<ClCompile Include="EmuScreen.cpp" />
|
<ClCompile Include="EmuScreen.cpp" />
|
||||||
<ClCompile Include="GameInfoCache.cpp" />
|
<ClCompile Include="GameInfoCache.cpp" />
|
||||||
<ClCompile Include="GamepadEmu.cpp" />
|
<ClCompile Include="GamepadEmu.cpp" />
|
||||||
|
@ -36,6 +37,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="ControlMappingScreen.h" />
|
<ClInclude Include="ControlMappingScreen.h" />
|
||||||
|
<ClInclude Include="DevScreens.h" />
|
||||||
<ClInclude Include="EmuScreen.h" />
|
<ClInclude Include="EmuScreen.h" />
|
||||||
<ClInclude Include="GameInfoCache.h" />
|
<ClInclude Include="GameInfoCache.h" />
|
||||||
<ClInclude Include="GamepadEmu.h" />
|
<ClInclude Include="GamepadEmu.h" />
|
||||||
|
|
|
@ -29,6 +29,9 @@
|
||||||
<Filter>Screens</Filter>
|
<Filter>Screens</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="CwCheatScreen.cpp" />
|
<ClCompile Include="CwCheatScreen.cpp" />
|
||||||
|
<ClCompile Include="DevScreens.cpp">
|
||||||
|
<Filter>Screens</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="GameInfoCache.h" />
|
<ClInclude Include="GameInfoCache.h" />
|
||||||
|
@ -58,6 +61,9 @@
|
||||||
<Filter>Screens</Filter>
|
<Filter>Screens</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="CwCheatScreen.h" />
|
<ClInclude Include="CwCheatScreen.h" />
|
||||||
|
<ClInclude Include="DevScreens.h">
|
||||||
|
<Filter>Screens</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Screens">
|
<Filter Include="Screens">
|
||||||
|
|
|
@ -149,6 +149,7 @@ LOCAL_SRC_FILES := \
|
||||||
$(SRC)/Core/MIPS/MIPSDebugInterface.cpp \
|
$(SRC)/Core/MIPS/MIPSDebugInterface.cpp \
|
||||||
$(SRC)/UI/ui_atlas.cpp \
|
$(SRC)/UI/ui_atlas.cpp \
|
||||||
$(SRC)/UI/NativeApp.cpp \
|
$(SRC)/UI/NativeApp.cpp \
|
||||||
|
$(SRC)/UI/DevScreens.cpp \
|
||||||
$(SRC)/UI/EmuScreen.cpp \
|
$(SRC)/UI/EmuScreen.cpp \
|
||||||
$(SRC)/UI/MainScreen.cpp \
|
$(SRC)/UI/MainScreen.cpp \
|
||||||
$(SRC)/UI/MiscScreens.cpp \
|
$(SRC)/UI/MiscScreens.cpp \
|
||||||
|
|
2
native
2
native
|
@ -1 +1 @@
|
||||||
Subproject commit 0b752abc4139a24d705a4a059af76b98d030c6f7
|
Subproject commit 997aae346bae42ef5a8d047bb3d09d757385d855
|
Loading…
Add table
Reference in a new issue