Frontends: Add shared command line interface

Also provides batch mode and automatic fullscreen switching.

  -help: Displays this information and exits.
  -version: Displays version information and exits.
  -batch: Enables batch mode (exits after powering off)
  -fastboot: Force fast boot for provided filename
  -slowboot: Force slow boot for provided filename
  -resume: Load resume save state. If a boot filename is provided,
    that game's resume state will be loaded, otherwise the most
    recent resume save state will be loaded.
  -state <index>: Loads specified save state by index. If a boot
    filename is provided, a per-game state will be loaded, otherwise
    a global state will be loaded.
  -statefile <filename>: Loads state from the specified filename.
    No boot filename is required with this option.
  -fullscreen: Enters fullscreen mode immediately after starting.
  -nofullscreen: Prevents fullscreen mode from triggering if enabled.
  -portable: Forces "portable mode", data in same directory.
  --: Signals that no more arguments will follow and the remaining
    parameters make up the filename. Use when the filename contains
    spaces or starts with a dash.
This commit is contained in:
Connor McLaughlin
2020-04-13 22:13:46 +10:00
parent 6a03bb2d15
commit 81cf4b469f
12 changed files with 365 additions and 80 deletions

View File

@@ -1,7 +1,7 @@
#pragma once
#include "common/event.h"
#include "core/host_interface.h"
#include "core/system.h"
#include "common/event.h"
#include "frontend-common/common_host_interface.h"
#include <QtCore/QByteArray>
#include <QtCore/QObject>
@@ -37,6 +37,8 @@ public:
explicit QtHostInterface(QObject* parent = nullptr);
~QtHostInterface();
const char* GetFrontendName() const override;
bool Initialize() override;
void Shutdown() override;
@@ -44,6 +46,8 @@ public:
void ReportMessage(const char* message) override;
bool ConfirmMessage(const char* message) override;
bool parseCommandLineParameters(int argc, char* argv[], std::unique_ptr<SystemBootParameters>* out_boot_params);
/// Thread-safe QSettings access.
QVariant getSettingValue(const QString& name, const QVariant& default_value = QVariant());
void putSettingValue(const QString& name, const QVariant& value);
@@ -55,6 +59,7 @@ public:
ALWAYS_INLINE const HotkeyInfoList& getHotkeyInfoList() const { return GetHotkeyInfoList(); }
ALWAYS_INLINE ControllerInterface* getControllerInterface() const { return GetControllerInterface(); }
ALWAYS_INLINE bool inBatchMode() const { return InBatchMode(); }
ALWAYS_INLINE bool isOnWorkerThread() const { return QThread::currentThread() == m_worker_thread; }
@@ -84,6 +89,7 @@ Q_SIGNALS:
void systemPerformanceCountersUpdated(float speed, float fps, float vps, float avg_frame_time,
float worst_frame_time);
void runningGameChanged(const QString& filename, const QString& game_code, const QString& game_title);
void exitRequested();
public Q_SLOTS:
void setDefaultSettings();
@@ -124,6 +130,7 @@ protected:
bool IsFullscreen() const override;
bool SetFullscreen(bool enabled) override;
void RequestExit() override;
std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const override;
void OnSystemCreated() override;
@@ -161,7 +168,7 @@ private:
private:
QtHostInterface* m_parent;
std::atomic_bool m_init_result{ false };
std::atomic_bool m_init_result{false};
Common::Event m_init_event;
};