Added settings for autoloading games, added qt-specific autoplay and map loading settings.

Also changed the comments in the default ini to look more clear and not invoke parsing errors
This commit is contained in:
archshift 2015-01-05 18:25:57 -08:00
parent 2432f317e4
commit fa273cbb15
10 changed files with 92 additions and 14 deletions

View File

@ -28,17 +28,21 @@ int __cdecl main(int argc, char **argv) {
logging_thread.join(); logging_thread.join();
}); });
if (argc < 2) { Config config;
log_filter.ParseFilterString(Settings::values.log_filter);
std::string boot_filename;
if (argc >= 2) {
// TODO: Better argument parsing
boot_filename = argv[1];
} else if (!Settings::values.autoload_game_path.empty()) {
boot_filename = Settings::values.autoload_game_path;
} else {
LOG_CRITICAL(Frontend, "Failed to load ROM: No ROM specified"); LOG_CRITICAL(Frontend, "Failed to load ROM: No ROM specified");
return -1; return -1;
} }
Config config;
log_filter.ParseFilterString(Settings::values.log_filter);
std::string boot_filename = argv[1];
EmuWindow_GLFW* emu_window = new EmuWindow_GLFW; EmuWindow_GLFW* emu_window = new EmuWindow_GLFW;
System::Init(emu_window); System::Init(emu_window);
Loader::ResultStatus load_result = Loader::LoadFile(boot_filename); Loader::ResultStatus load_result = Loader::LoadFile(boot_filename);

View File

@ -66,6 +66,7 @@ void Config::ReadValues() {
// Miscellaneous // Miscellaneous
Settings::values.log_filter = glfw_config->Get("Miscellaneous", "log_filter", "*:Info"); Settings::values.log_filter = glfw_config->Get("Miscellaneous", "log_filter", "*:Info");
Settings::values.autoload_game_path = glfw_config->Get("Miscellaneous", "autoload_game_path", "");
} }
void Config::Reload() { void Config::Reload() {

View File

@ -27,15 +27,34 @@ pad_sleft =
pad_sright = pad_sright =
[Core] [Core]
cpu_core = ## 0: Interpreter (default), 1: OldInterpreter (may work better, soon to be deprecated) # The CPU core to be enabled
gpu_refresh_rate = ## 30 (default) # 0 (default): Interpreter, 1: Old interpreter (soon to be deprecated)
frame_skip = ## 0: No frameskip (default), 1 : 2x frameskip, 2 : 4x frameskip, etc. cpu_core =
# The refresh rate for the GPU
# Defaults to 30
gpu_refresh_rate =
# The applied frameskip amount. Must be a power of two.
# 0 (default): No frameskip, 1: x2 frameskip, 2: x4 frameskip, 3: x8 frameskip, etc.
frame_skip =
[Data Storage] [Data Storage]
# Whether to create a virtual SD card.
# 1 (default): Yes, 0: No
use_virtual_sd = use_virtual_sd =
[Miscellaneous] [Miscellaneous]
log_filter = *:Info ## Examples: *:Debug Kernel.SVC:Trace Service.*:Critical # A filter which removes logs below a certain logging level.
# Examples: *:Debug Kernel.SVC:Trace Service.*:Critical
log_filter = *:Info
# Path for to a game file to be autoloaded by Citra.
# Leave blank for no autoloading. Overridden by path passed as a console argument.
autoload_game_path =
)"; )";
} }

View File

@ -17,6 +17,7 @@ set(SRCS
bootmanager.cpp bootmanager.cpp
hotkeys.cpp hotkeys.cpp
main.cpp main.cpp
settings.cpp
citra-qt.rc citra-qt.rc
) )
@ -37,6 +38,7 @@ set(HEADERS
bootmanager.h bootmanager.h
hotkeys.h hotkeys.h
main.h main.h
settings.h
version.h version.h
) )

View File

@ -9,7 +9,8 @@
#include "core/core.h" #include "core/core.h"
#include "common/file_util.h" #include "common/file_util.h"
#include "config.h" #include "citra_qt/config.h"
#include "citra_qt/settings.h"
Config::Config() { Config::Config() {
@ -54,6 +55,9 @@ void Config::ReadValues() {
qt_config->beginGroup("Miscellaneous"); qt_config->beginGroup("Miscellaneous");
Settings::values.log_filter = qt_config->value("log_filter", "*:Info").toString().toStdString(); Settings::values.log_filter = qt_config->value("log_filter", "*:Info").toString().toStdString();
Settings::qt_values.autoplay_game = qt_config->value("autoplay_game", true).toBool();
Settings::values.autoload_game_path = qt_config->value("autoload_game_path", "").toString().toStdString();
Settings::qt_values.autoload_map_path = qt_config->value("autoload_map_path", "").toString().toStdString();
qt_config->endGroup(); qt_config->endGroup();
} }
@ -90,6 +94,9 @@ void Config::SaveValues() {
qt_config->beginGroup("Miscellaneous"); qt_config->beginGroup("Miscellaneous");
qt_config->setValue("log_filter", QString::fromStdString(Settings::values.log_filter)); qt_config->setValue("log_filter", QString::fromStdString(Settings::values.log_filter));
qt_config->setValue("autoplay_game", Settings::qt_values.autoplay_game);
qt_config->setValue("autoload_game_path", QString::fromStdString(Settings::values.autoload_game_path));
qt_config->setValue("autoload_map_path", QString::fromStdString(Settings::qt_values.autoload_map_path));
qt_config->endGroup(); qt_config->endGroup();
} }

View File

@ -41,6 +41,7 @@
#include "core/loader/loader.h" #include "core/loader/loader.h"
#include "core/arm/disassembler/load_symbol_map.h" #include "core/arm/disassembler/load_symbol_map.h"
#include "citra_qt/config.h" #include "citra_qt/config.h"
#include "citra_qt/settings.h"
#include "version.h" #include "version.h"
@ -143,7 +144,14 @@ GMainWindow::GMainWindow()
QStringList args = QApplication::arguments(); QStringList args = QApplication::arguments();
if (args.length() >= 2) { if (args.length() >= 2) {
// TODO: Better argument parsing
BootGame(args[1].toStdString()); BootGame(args[1].toStdString());
} else if (!Settings::values.autoload_game_path.empty()) {
BootGame(Settings::values.autoload_game_path);
}
if (!Settings::qt_values.autoload_map_path.empty()) {
LoadSymbolMap(Settings::qt_values.autoload_map_path);
} }
} }
@ -174,7 +182,9 @@ void GMainWindow::BootGame(std::string filename)
render_window->GetEmuThread().start(); render_window->GetEmuThread().start();
render_window->show(); render_window->show();
OnStartGame();
if (Settings::qt_values.autoplay_game)
OnStartGame();
} }
void GMainWindow::OnMenuLoadFile() void GMainWindow::OnMenuLoadFile()
@ -259,7 +269,6 @@ void GMainWindow::closeEvent(QCloseEvent* event)
settings.setValue("state", saveState()); settings.setValue("state", saveState());
settings.setValue("geometryRenderWindow", render_window->saveGeometry()); settings.setValue("geometryRenderWindow", render_window->saveGeometry());
settings.setValue("singleWindowMode", ui.action_Single_Window_Mode->isChecked()); settings.setValue("singleWindowMode", ui.action_Single_Window_Mode->isChecked());
settings.setValue("firstStart", false);
SaveHotkeys(settings); SaveHotkeys(settings);
render_window->close(); render_window->close();

11
src/citra_qt/settings.cpp Normal file
View File

@ -0,0 +1,11 @@
// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include "citra_qt/settings.h"
namespace Settings {
QtValues qt_values;
}

21
src/citra_qt/settings.h Normal file
View File

@ -0,0 +1,21 @@
// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include <string>
// These are settings that apply only to the Qt frontend.
// Hence, they shouldn't be put in Core but instead here.
namespace Settings {
struct QtValues {
// Whether a loaded game is automatically started on load.
bool autoplay_game;
// A map file path to automatically load on init.
std::string autoload_map_path;
} extern qt_values;
}

View File

@ -23,7 +23,9 @@ void LoadSymbolMap(std::string filename) {
while (std::getline(infile, line)) { while (std::getline(infile, line)) {
std::istringstream iss(line); std::istringstream iss(line);
if (!(iss >> address_str >> size >> function_name)) { if (!(iss >> address_str >> size >> function_name)) {
break; // Error parsing Symbols::Clear();
LOG_ERROR(Frontend, "Could not load symbol map.");
break; // Error while parsing
} }
u32 address = std::stoul(address_str, nullptr, 16); u32 address = std::stoul(address_str, nullptr, 16);

View File

@ -36,6 +36,8 @@ struct Values {
// Data Storage // Data Storage
bool use_virtual_sd; bool use_virtual_sd;
// Misc
std::string autoload_game_path;
std::string log_filter; std::string log_filter;
} extern values; } extern values;