diff --git a/kyty/KytyScripts.cpp b/kyty/KytyScripts.cpp index 8871cae4..1ec42b9c 100644 --- a/kyty/KytyScripts.cpp +++ b/kyty/KytyScripts.cpp @@ -114,11 +114,6 @@ int main(int argc, char* argv[]) args.Add(str); } run_script(args.At(1), args); - } else - { - printf("%s\n", get_build_string().C_Str()); - printf("fc_script args...\n\n"); - PrintHelp(); } return 0; diff --git a/kyty/emulator/include/Emulator/Config.h b/kyty/emulator/include/Emulator/Config.h index de1e3e27..cfb2d514 100644 --- a/kyty/emulator/include/Emulator/Config.h +++ b/kyty/emulator/include/Emulator/Config.h @@ -15,8 +15,6 @@ class ScriptVar; namespace Kyty::Config { -KYTY_SUBSYSTEM_DEFINE(Config); - enum class ShaderOptimizationType { None, diff --git a/kyty/emulator/src/Config.cpp b/kyty/emulator/src/Config.cpp index d2641f00..30a0d88c 100644 --- a/kyty/emulator/src/Config.cpp +++ b/kyty/emulator/src/Config.cpp @@ -31,18 +31,7 @@ struct Config String pipeline_dump_folder = U"_Pipelines"; }; -static Config* g_config = nullptr; - -KYTY_SUBSYSTEM_INIT(Config) -{ - EXIT_IF(g_config != nullptr); - - g_config = new Config; -} - -KYTY_SUBSYSTEM_UNEXPECTED_SHUTDOWN(Config) {} - -KYTY_SUBSYSTEM_DESTROY(Config) {} +static Config* g_config = nullptr; // new Config; template void LoadInt(T& dst, const Scripts::ScriptVar& cfg, const String& key) diff --git a/kyty/emulator/src/Kyty.cpp b/kyty/emulator/src/Kyty.cpp index b3b39cd2..5f59fef6 100644 --- a/kyty/emulator/src/Kyty.cpp +++ b/kyty/emulator/src/Kyty.cpp @@ -88,10 +88,10 @@ static void Init(const Scripts::ScriptVar& cfg) auto* slist = Core::SubsystemsList::Instance(); + // Lookup definition by searching for KYTY_SUBSYSTEM_DEFINE auto* audio = Libs::Audio::AudioSubsystem::Instance(); auto* config = Config::ConfigSubsystem::Instance(); auto* controller = Libs::Controller::ControllerSubsystem::Instance(); - auto* core = Core::CoreSubsystem::Instance(); auto* file_system = Libs::LibKernel::FileSystem::FileSystemSubsystem::Instance(); auto* graphics = Libs::Graphics::GraphicsSubsystem::Instance(); auto* log = Log::LogSubsystem::Instance(); @@ -99,12 +99,8 @@ static void Init(const Scripts::ScriptVar& cfg) auto* network = Libs::Network::NetworkSubsystem::Instance(); auto* profiler = Profiler::ProfilerSubsystem::Instance(); auto* pthread = Libs::LibKernel::PthreadSubsystem::Instance(); - auto* scripts = Scripts::ScriptsSubsystem::Instance(); auto* timer = Loader::Timer::TimerSubsystem::Instance(); - slist->Add(config, {core, scripts}); - slist->InitAll(true); - Config::Load(cfg); slist->Add(audio, {core, log, pthread, memory}); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 37e6d239..2ec54a83 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,6 +27,7 @@ endif() # Setup application target. add_executable(obliteration WIN32 game_models.cpp + game_settings_dialog.cpp initialize_dialog.cpp main.cpp main_window.cpp diff --git a/src/game_settings_dialog.cpp b/src/game_settings_dialog.cpp new file mode 100644 index 00000000..643ead38 --- /dev/null +++ b/src/game_settings_dialog.cpp @@ -0,0 +1,11 @@ +#include "game_settings_dialog.hpp" + +GameSettingsDialog::GameSettingsDialog(Game *game, QWidget *parent) : + QDialog(parent), + m_game(game) +{ +} + +GameSettingsDialog::~GameSettingsDialog() +{ +} diff --git a/src/game_settings_dialog.hpp b/src/game_settings_dialog.hpp new file mode 100644 index 00000000..74c03ab1 --- /dev/null +++ b/src/game_settings_dialog.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include + +class Game; + +class GameSettingsDialog final : public QDialog { +public: + GameSettingsDialog(Game *game, QWidget *parent = nullptr); + ~GameSettingsDialog(); + +private: + Game *m_game; +}; diff --git a/src/main_window.cpp b/src/main_window.cpp index 00dfcbdb..9ebf4b6a 100644 --- a/src/main_window.cpp +++ b/src/main_window.cpp @@ -1,12 +1,14 @@ #include "main_window.hpp" #include "emulator.hpp" #include "game_models.hpp" +#include "game_settings_dialog.hpp" #include "settings.hpp" #include #include #include #include +#include #include #include #include @@ -26,9 +28,12 @@ MainWindow::MainWindow(GameListModel *games) // Setup game list. m_games = new QListView(this); m_games->setViewMode(QListView::IconMode); + m_games->setContextMenuPolicy(Qt::CustomContextMenu); m_games->setModel(games); connect(m_games, &QAbstractItemView::doubleClicked, this, &MainWindow::startGame); + connect(m_games, &QWidget::customContextMenuRequested, this, &MainWindow::requestGamesContextMenu); + setCentralWidget(m_games); // Setup status bar. @@ -78,6 +83,37 @@ void MainWindow::startGame(const QModelIndex &index) start_game(reinterpret_cast(dir.constData()), dir.size()); } +void MainWindow::requestGamesContextMenu(const QPoint &pos) +{ + // Get item index. + auto index = m_games->indexAt(pos); + + if (!index.isValid()) { + return; + } + + auto model = reinterpret_cast(m_games->model()); + auto game = model->get(index.row()); + + // Setup menu. + QMenu menu(this); + QAction settings("&Settings", this); + + menu.addAction(&settings); + + // Show menu. + auto selected = menu.exec(m_games->viewport()->mapToGlobal(pos)); + + if (!selected) { + return; + } + + if (selected == &settings) { + GameSettingsDialog dialog(game, this); + dialog.exec(); + } +} + void MainWindow::restoreGeometry() { QSettings settings; diff --git a/src/main_window.hpp b/src/main_window.hpp index 0690007b..1fc37b07 100644 --- a/src/main_window.hpp +++ b/src/main_window.hpp @@ -15,6 +15,7 @@ protected: private slots: void startGame(const QModelIndex &index); + void requestGamesContextMenu(const QPoint &pos); private: void restoreGeometry();