Fix console window (now not a QDialog)

It now opens and coloses as expected, depending on user
preferences and the status of the various processes involved.
Console window geometry and state are remembered between runs.
This commit is contained in:
Petr Mrázek
2013-11-23 01:41:28 +01:00
parent 7f5eb5d61a
commit 4124faf474
9 changed files with 152 additions and 133 deletions

View File

@ -48,12 +48,9 @@ void InstanceLauncher::onLoginComplete()
return;
}
console = new ConsoleWindow(proc);
console->show();
connect(proc, SIGNAL(ended()), SLOT(onTerminated()));
connect(proc, SIGNAL(log(QString, MessageLevel::Enum)), console,
SLOT(write(QString, MessageLevel::Enum)));
connect(console, SIGNAL(isClosing()), this, SLOT(onTerminated()));
proc->setLogin(result.username, result.session_id);
proc->launch();
}

View File

@ -101,7 +101,7 @@ void MinecraftProcess::on_stdOut()
for (int i = 0; i < lines.size() - 1; i++)
{
QString &line = lines[i];
emit log(line /*.replace(username, "<Username>").replace(sessionID, "<Session ID>")*/,
emit log(line.replace(username, "<Username>").replace(sessionID, "<Session ID>"),
getLevel(line, MessageLevel::Message));
}
if (!complete)
@ -139,7 +139,8 @@ void MinecraftProcess::finish(int code, ExitStatus status)
m_prepostlaunchprocess.waitForFinished();
if (m_prepostlaunchprocess.exitStatus() != NormalExit)
{
// TODO: error handling
emit postlaunch_failed(m_instance, m_prepostlaunchprocess.exitCode(),
m_prepostlaunchprocess.exitStatus());
}
}
m_instance->cleanupAfterRun();
@ -160,7 +161,9 @@ void MinecraftProcess::launch()
m_prepostlaunchprocess.waitForFinished();
if (m_prepostlaunchprocess.exitStatus() != NormalExit)
{
// TODO: error handling
m_instance->cleanupAfterRun();
emit prelaunch_failed(m_instance, m_prepostlaunchprocess.exitCode(),
m_prepostlaunchprocess.exitStatus());
return;
}
}
@ -171,15 +174,15 @@ void MinecraftProcess::launch()
QString JavaPath = m_instance->settings().get("JavaPath").toString();
emit log(QString("Java path: '%1'").arg(JavaPath));
emit log(QString("Arguments: '%1'").arg(
m_args.join("' '") /*.replace(username, "<Username>").replace(sessionID, "<Session
ID>")*/));
m_args.join("' '").replace(username, "<Username>").replace(sessionID, "<Session ID>")));
start(JavaPath, m_args);
if (!waitForStarted())
{
//: Error message displayed if instace can't start
emit log(tr("Could not launch minecraft!"));
emit log(tr("Could not launch minecraft!"), MessageLevel::Error);
m_instance->cleanupAfterRun();
emit launch_failed(m_instance);
return;
// TODO: error handling
}
}

View File

@ -58,6 +58,11 @@ public:
*/
void launch();
BaseInstance *instance()
{
return m_instance;
}
void setMinecraftWorkdir(QString path);
void setMinecraftArguments(QStringList args);
@ -71,6 +76,21 @@ public:
}
signals:
/**
* @brief emitted when Minecraft immediately fails to run
*/
void launch_failed(BaseInstance *);
/**
* @brief emitted when the PreLaunchCommand fails
*/
void prelaunch_failed(BaseInstance *, int code, QProcess::ExitStatus status);
/**
* @brief emitted when the PostLaunchCommand fails
*/
void postlaunch_failed(BaseInstance *, int code, QProcess::ExitStatus status);
/**
* @brief emitted when mc has finished and the PostLaunchCommand was run
*/