summaryrefslogtreecommitdiff
path: root/src/processrunner.h
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-10-30 23:42:59 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-11-06 07:44:57 -0500
commitdb0b92776b5c9a34ebb1a5ce5c3f0b105844ee16 (patch)
tree4024b434840a21d37cac3c43f229fb2c3ce5a91a /src/processrunner.h
parent2aa70de49e89245467299d94d76825bad31c63a2 (diff)
added lockwidget to replace all the other dialogs
rewrote ProcessRunner to have a bunch of setters and then a run() fixed bad exit code when waiting on a process that's already completed removed lock()/unlock() from main window, ProcessRunner is in charge of that now
Diffstat (limited to 'src/processrunner.h')
-rw-r--r--src/processrunner.h70
1 files changed, 60 insertions, 10 deletions
diff --git a/src/processrunner.h b/src/processrunner.h
index 28f4da75..b7895903 100644
--- a/src/processrunner.h
+++ b/src/processrunner.h
@@ -2,10 +2,10 @@
#define PROCESSRUNNER_H
#include "spawn.h"
+#include "lockwidget.h"
#include <executableinfo.h>
class OrganizerCore;
-class ILockedWaitingForProcess;
class IUserInterface;
class Executable;
class MOShortcut;
@@ -35,9 +35,43 @@ private:
class ProcessRunner
{
public:
- ProcessRunner(OrganizerCore& core);
+ enum Results
+ {
+ Running = 1,
+ Completed,
+ Error,
+ Cancelled,
+ ForceUnlocked
+ };
+
+ using ForcedLibraries = QList<MOBase::ExecutableForcedLoadSetting>;
+
+ ProcessRunner(OrganizerCore& core, IUserInterface* ui);
+
+ ProcessRunner& setBinary(const QFileInfo &binary);
+ ProcessRunner& setArguments(const QString& arguments);
+ ProcessRunner& setCurrentDirectory(const QDir& directory);
+ ProcessRunner& setSteamID(const QString& steamID);
+ ProcessRunner& setCustomOverwrite(const QString& customOverwrite);
+ ProcessRunner& setForcedLibraries(const ForcedLibraries& forcedLibraries);
+ ProcessRunner& setProfileName(const QString& profileName);
+ ProcessRunner& setWaitForCompletion(LockWidget::Reasons reason, bool refresh);
+
+ ProcessRunner& setFromFile(QWidget* parent, const QFileInfo& targetInfo);
+ ProcessRunner& setFromExecutable(const Executable& exe);
+ ProcessRunner& setFromShortcut(const MOShortcut& shortcut);
+
+ ProcessRunner& setFromFileOrExecutable(
+ const QString &executable,
+ const QStringList &args,
+ const QString &cwd,
+ const QString &profile,
+ const QString &forcedCustomOverwrite = "",
+ bool ignoreCustomOverwrite = false);
+
+ Results run();
+ DWORD exitCode();
- void setUserInterface(IUserInterface* ui);
bool runFile(QWidget* parent, const QFileInfo& targetInfo);
@@ -53,17 +87,31 @@ public:
bool runShortcut(const MOShortcut& shortcut);
HANDLE runExecutableOrExecutableFile(
- const QString &executable, const QStringList &args, const QString &cwd,
- const QString &profile, const QString &forcedCustomOverwrite = "",
+ const QString &executable,
+ const QStringList &args,
+ const QString &cwd,
+ const QString &profile,
+ const QString &forcedCustomOverwrite = "",
bool ignoreCustomOverwrite = false);
- bool waitForApplication(HANDLE processHandle, LPDWORD exitCode = nullptr);
- bool waitForAllUSVFSProcessesWithLock();
+ Results waitForApplication(
+ HANDLE processHandle, LPDWORD exitCode, LockWidget::Reasons reason);
+
+ Results waitForAllUSVFSProcessesWithLock(LockWidget::Reasons reason);
private:
OrganizerCore& m_core;
IUserInterface* m_ui;
+ spawn::SpawnParameters m_sp;
+ QString m_customOverwrite;
+ ForcedLibraries m_forcedLibraries;
+ QString m_profileName;
+ LockWidget::Reasons m_lock;
+ bool m_refresh;
+ QString m_shellOpen;
+ HANDLE m_handle;
+ DWORD m_exitCode;
HANDLE spawnAndWait(
const QFileInfo &binary, const QString &arguments,
@@ -76,11 +124,13 @@ private:
SpawnedProcess spawn(spawn::SpawnParameters sp);
- void withLock(std::function<void (ILockedWaitingForProcess*)> f);
+ void withLock(
+ LockWidget::Reasons reason, std::function<void (LockWidget&)> f);
- bool waitForProcessCompletionWithLock(HANDLE handle, LPDWORD exitCode);
+ Results waitForProcessCompletionWithLock(
+ HANDLE handle, LPDWORD exitCode, LockWidget::Reasons reason);
- bool waitForAllUSVFSProcesses(ILockedWaitingForProcess* uilock);
+ Results waitForAllUSVFSProcesses(LockWidget& lock);
};
#endif // PROCESSRUNNER_H