summaryrefslogtreecommitdiffstats
path: root/gui/ConsoleWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/ConsoleWindow.cpp')
-rw-r--r--gui/ConsoleWindow.cpp83
1 files changed, 57 insertions, 26 deletions
diff --git a/gui/ConsoleWindow.cpp b/gui/ConsoleWindow.cpp
index ec25b9cf..d8a1b69d 100644
--- a/gui/ConsoleWindow.cpp
+++ b/gui/ConsoleWindow.cpp
@@ -15,6 +15,7 @@
#include "ConsoleWindow.h"
#include "ui_ConsoleWindow.h"
+#include "MultiMC.h"
#include <QScrollBar>
#include <QMessageBox>
@@ -22,16 +23,27 @@
#include <gui/Platform.h>
#include <gui/dialogs/CustomMessageBox.h>
-ConsoleWindow::ConsoleWindow(MinecraftProcess *mcproc, QWidget *parent) :
- QDialog(parent),
- ui(new Ui::ConsoleWindow),
- m_mayclose(true),
- proc(mcproc)
+ConsoleWindow::ConsoleWindow(MinecraftProcess *mcproc, QWidget *parent)
+ : QMainWindow(parent), ui(new Ui::ConsoleWindow), proc(mcproc)
{
MultiMCPlatform::fixWM_CLASS(this);
ui->setupUi(this);
- this->setWindowFlags(Qt::Window);
- connect(mcproc, SIGNAL(ended(BaseInstance*)), this, SLOT(onEnded(BaseInstance*)));
+ connect(mcproc, SIGNAL(log(QString, MessageLevel::Enum)), this,
+ SLOT(write(QString, MessageLevel::Enum)));
+ connect(mcproc, SIGNAL(ended(BaseInstance *, int, QProcess::ExitStatus)), this,
+ SLOT(onEnded(BaseInstance *, int, QProcess::ExitStatus)));
+ connect(mcproc, SIGNAL(prelaunch_failed(BaseInstance*,int,QProcess::ExitStatus)), this,
+ SLOT(onEnded(BaseInstance *, int, QProcess::ExitStatus)));
+ connect(mcproc, SIGNAL(launch_failed(BaseInstance*)), this,
+ SLOT(onLaunchFailed(BaseInstance*)));
+
+ restoreState(QByteArray::fromBase64(MMC->settings()->get("ConsoleWindowState").toByteArray()));
+ restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("ConsoleWindowGeometry").toByteArray()));
+
+ if (mcproc->instance()->settings().get("ShowConsole").toBool())
+ {
+ show();
+ }
}
ConsoleWindow::~ConsoleWindow()
@@ -54,32 +66,32 @@ void ConsoleWindow::writeColor(QString text, const char *color)
void ConsoleWindow::write(QString data, MessageLevel::Enum mode)
{
if (data.endsWith('\n'))
- data = data.left(data.length()-1);
+ data = data.left(data.length() - 1);
QStringList paragraphs = data.split('\n');
- for(QString &paragraph : paragraphs)
+ for (QString &paragraph : paragraphs)
{
paragraph = paragraph.trimmed();
}
QListIterator<QString> iter(paragraphs);
if (mode == MessageLevel::MultiMC)
- while(iter.hasNext())
+ while (iter.hasNext())
writeColor(iter.next(), "blue");
else if (mode == MessageLevel::Error)
- while(iter.hasNext())
+ while (iter.hasNext())
writeColor(iter.next(), "red");
else if (mode == MessageLevel::Warning)
- while(iter.hasNext())
+ while (iter.hasNext())
writeColor(iter.next(), "orange");
else if (mode == MessageLevel::Fatal)
- while(iter.hasNext())
+ while (iter.hasNext())
writeColor(iter.next(), "pink");
else if (mode == MessageLevel::Debug)
- while(iter.hasNext())
+ while (iter.hasNext())
writeColor(iter.next(), "green");
// TODO: implement other MessageLevels
else
- while(iter.hasNext())
+ while (iter.hasNext())
writeColor(iter.next());
}
@@ -102,34 +114,53 @@ void ConsoleWindow::setMayClose(bool mayclose)
ui->closeButton->setEnabled(false);
}
-void ConsoleWindow::closeEvent(QCloseEvent * event)
+void ConsoleWindow::closeEvent(QCloseEvent *event)
{
- if(!m_mayclose)
+ if (!m_mayclose)
event->ignore();
else
- QDialog::closeEvent(event);
+ {
+ MMC->settings()->set("ConsoleWindowState", saveState().toBase64());
+ MMC->settings()->set("ConsoleWindowGeometry", saveGeometry().toBase64());
+
+ emit isClosing();
+ QMainWindow::closeEvent(event);
+ }
}
void ConsoleWindow::on_btnKillMinecraft_clicked()
{
ui->btnKillMinecraft->setEnabled(false);
- auto response = CustomMessageBox::selectable(this, tr("Kill Minecraft?"),
- tr("This can cause the instance to get corrupted and should only be used if Minecraft is frozen for some reason"),
- QMessageBox::Question, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)->exec();
+ auto response = CustomMessageBox::selectable(
+ this, tr("Kill Minecraft?"),
+ tr("This can cause the instance to get corrupted and should only be used if Minecraft "
+ "is frozen for some reason"),
+ QMessageBox::Question, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)->exec();
if (response == QMessageBox::Yes)
proc->killMinecraft();
else
ui->btnKillMinecraft->setEnabled(true);
}
-void ConsoleWindow::onEnded(BaseInstance *instance)
+void ConsoleWindow::onEnded(BaseInstance *instance, int code, QProcess::ExitStatus status)
{
ui->btnKillMinecraft->setEnabled(false);
- // TODO: Might need an option to forcefully close, even on an error
- if(instance->settings().get("AutoCloseConsole").toBool())
+ if (instance->settings().get("AutoCloseConsole").toBool())
{
- // TODO: Check why this doesn't work
- if (!proc->exitCode()) this->close();
+ if (code == 0 && status != QProcess::CrashExit)
+ {
+ this->close();
+ return;
+ }
}
+ if(!isVisible())
+ show();
+}
+
+void ConsoleWindow::onLaunchFailed(BaseInstance *instance)
+{
+ ui->btnKillMinecraft->setEnabled(false);
+ if(!isVisible())
+ show();
}