1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-04 03:40:14 +00:00

create startup script when running from OpenCS

This commit is contained in:
Marc Zinnschlag 2014-09-05 11:40:01 +02:00
parent 61a92da374
commit 5e022195b8
3 changed files with 40 additions and 4 deletions

View File

@ -2375,7 +2375,8 @@ bool CSMDoc::Document::isBlacklisted (const CSMWorld::UniversalId& id)
void CSMDoc::Document::startRunning (const std::string& profile, void CSMDoc::Document::startRunning (const std::string& profile,
const std::string& startupInstruction) const std::string& startupInstruction)
{ {
mRunner.configure (getData().getDebugProfiles().getRecord (profile).get()); mRunner.configure (getData().getDebugProfiles().getRecord (profile).get(),
startupInstruction);
int state = getState(); int state = getState();

View File

@ -1,9 +1,12 @@
#include "runner.hpp" #include "runner.hpp"
#include <QTemporaryFile>
#include <QTextStream>
#include "operation.hpp" #include "operation.hpp"
CSMDoc::Runner::Runner() : mRunning (false) CSMDoc::Runner::Runner() : mRunning (false), mStartup (0)
{ {
connect (&mProcess, SIGNAL (finished (int, QProcess::ExitStatus)), connect (&mProcess, SIGNAL (finished (int, QProcess::ExitStatus)),
this, SLOT (finished (int, QProcess::ExitStatus))); this, SLOT (finished (int, QProcess::ExitStatus)));
@ -23,6 +26,12 @@ CSMDoc::Runner::~Runner()
void CSMDoc::Runner::start (bool delayed) void CSMDoc::Runner::start (bool delayed)
{ {
if (mStartup)
{
delete mStartup;
mStartup = 0;
}
if (!delayed) if (!delayed)
{ {
QString path = "openmw"; QString path = "openmw";
@ -35,6 +44,20 @@ void CSMDoc::Runner::start (bool delayed)
path.prepend(QString("./")); path.prepend(QString("./"));
#endif #endif
mStartup = new QTemporaryFile (this);
mStartup->open();
{
QTextStream stream (mStartup);
if (!mStartupInstruction.empty())
stream << QString::fromUtf8 (mStartupInstruction.c_str()) << '\n';
stream << QString::fromUtf8 (mProfile.mScriptText.c_str());
}
mStartup->close();
QStringList arguments; QStringList arguments;
arguments << "--skip-menu"; arguments << "--skip-menu";
@ -43,6 +66,8 @@ void CSMDoc::Runner::start (bool delayed)
else else
arguments << "--new-game=1"; arguments << "--new-game=1";
arguments << ("--script-run="+mStartup->fileName());
mProcess.start (path, arguments); mProcess.start (path, arguments);
} }
@ -52,6 +77,9 @@ void CSMDoc::Runner::start (bool delayed)
void CSMDoc::Runner::stop() void CSMDoc::Runner::stop()
{ {
delete mStartup;
mStartup = 0;
if (mProcess.state()==QProcess::NotRunning) if (mProcess.state()==QProcess::NotRunning)
{ {
mRunning = false; mRunning = false;
@ -66,9 +94,11 @@ bool CSMDoc::Runner::isRunning() const
return mRunning; return mRunning;
} }
void CSMDoc::Runner::configure (const ESM::DebugProfile& profile) void CSMDoc::Runner::configure (const ESM::DebugProfile& profile,
const std::string& startupInstruction)
{ {
mProfile = profile; mProfile = profile;
mStartupInstruction = startupInstruction;
} }
void CSMDoc::Runner::finished (int exitCode, QProcess::ExitStatus exitStatus) void CSMDoc::Runner::finished (int exitCode, QProcess::ExitStatus exitStatus)

View File

@ -6,6 +6,8 @@
#include <components/esm/debugprofile.hpp> #include <components/esm/debugprofile.hpp>
class QTemporaryFile;
namespace CSMDoc namespace CSMDoc
{ {
class Runner : public QObject class Runner : public QObject
@ -15,6 +17,8 @@ namespace CSMDoc
QProcess mProcess; QProcess mProcess;
bool mRunning; bool mRunning;
ESM::DebugProfile mProfile; ESM::DebugProfile mProfile;
std::string mStartupInstruction;
QTemporaryFile *mStartup;
public: public:
@ -32,7 +36,8 @@ namespace CSMDoc
/// is not necessarily identical to the moment the child process is started. /// is not necessarily identical to the moment the child process is started.
bool isRunning() const; bool isRunning() const;
void configure (const ESM::DebugProfile& profile); void configure (const ESM::DebugProfile& profile,
const std::string& startupInstruction);
signals: signals: