summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-11-23 01:41:28 +0100
committerPetr Mrázek <peterix@gmail.com>2013-11-23 01:41:28 +0100
commit4124faf474908e4d79d93b0f624bf8fd81bd9972 (patch)
tree335087d96ddab6b862c187969749134be6b4d96e /gui
parent7f5eb5d61ad5c94da5e3a0443ffbcd9088285496 (diff)
downloadMultiMC-4124faf474908e4d79d93b0f624bf8fd81bd9972.tar
MultiMC-4124faf474908e4d79d93b0f624bf8fd81bd9972.tar.gz
MultiMC-4124faf474908e4d79d93b0f624bf8fd81bd9972.tar.lz
MultiMC-4124faf474908e4d79d93b0f624bf8fd81bd9972.tar.xz
MultiMC-4124faf474908e4d79d93b0f624bf8fd81bd9972.zip
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.
Diffstat (limited to 'gui')
-rw-r--r--gui/ConsoleWindow.cpp36
-rw-r--r--gui/ConsoleWindow.h18
-rw-r--r--gui/ConsoleWindow.ui151
-rw-r--r--gui/MainWindow.cpp29
-rw-r--r--gui/MainWindow.h2
5 files changed, 117 insertions, 119 deletions
diff --git a/gui/ConsoleWindow.cpp b/gui/ConsoleWindow.cpp
index 1a888330..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>
@@ -23,13 +24,26 @@
#include <gui/dialogs/CustomMessageBox.h>
ConsoleWindow::ConsoleWindow(MinecraftProcess *mcproc, QWidget *parent)
- : QDialog(parent), ui(new Ui::ConsoleWindow), m_mayclose(true), proc(mcproc)
+ : QMainWindow(parent), ui(new Ui::ConsoleWindow), proc(mcproc)
{
MultiMCPlatform::fixWM_CLASS(this);
ui->setupUi(this);
- this->setWindowFlags(Qt::Window);
+ 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()
@@ -105,7 +119,13 @@ void ConsoleWindow::closeEvent(QCloseEvent *event)
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()
@@ -131,6 +151,16 @@ void ConsoleWindow::onEnded(BaseInstance *instance, int code, QProcess::ExitStat
if (code == 0 && status != QProcess::CrashExit)
{
this->close();
+ return;
}
}
+ if(!isVisible())
+ show();
+}
+
+void ConsoleWindow::onLaunchFailed(BaseInstance *instance)
+{
+ ui->btnKillMinecraft->setEnabled(false);
+ if(!isVisible())
+ show();
}
diff --git a/gui/ConsoleWindow.h b/gui/ConsoleWindow.h
index 65786c7e..e0a47bc6 100644
--- a/gui/ConsoleWindow.h
+++ b/gui/ConsoleWindow.h
@@ -15,7 +15,7 @@
#pragma once
-#include <QDialog>
+#include <QMainWindow>
#include "logic/MinecraftProcess.h"
namespace Ui
@@ -23,7 +23,7 @@ namespace Ui
class ConsoleWindow;
}
-class ConsoleWindow : public QDialog
+class ConsoleWindow : public QMainWindow
{
Q_OBJECT
@@ -38,6 +38,9 @@ public:
*/
void setMayClose(bool mayclose);
+signals:
+ void isClosing();
+
public
slots:
/**
@@ -67,13 +70,16 @@ slots:
void on_closeButton_clicked();
void on_btnKillMinecraft_clicked();
void onEnded(BaseInstance *instance, int code, QProcess::ExitStatus status);
+ void onLaunchFailed(BaseInstance *instance);
+
+ // FIXME: add handlers for the other MinecraftProcess signals (pre/post launch command
+ // failures)
protected:
void closeEvent(QCloseEvent *);
private:
- Ui::ConsoleWindow *ui;
- MinecraftProcess *proc;
- bool m_mayclose;
+ Ui::ConsoleWindow *ui = nullptr;
+ MinecraftProcess *proc = nullptr;
+ bool m_mayclose = true;
};
-
diff --git a/gui/ConsoleWindow.ui b/gui/ConsoleWindow.ui
index 472c7c8d..ed1b627b 100644
--- a/gui/ConsoleWindow.ui
+++ b/gui/ConsoleWindow.ui
@@ -1,99 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ConsoleWindow</class>
- <widget class="QDialog" name="ConsoleWindow">
+ <widget class="QMainWindow" name="ConsoleWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>610</width>
- <height>391</height>
+ <width>640</width>
+ <height>440</height>
</rect>
</property>
<property name="windowTitle">
<string>MultiMC Console</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>6</number>
- </property>
- <item>
- <widget class="QPlainTextEdit" name="text">
- <property name="font">
- <font>
- <pointsize>10</pointsize>
- </font>
- </property>
- <property name="undoRedoEnabled">
- <bool>false</bool>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- <property name="plainText">
- <string notr="true"/>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
- </property>
- <property name="centerOnScroll">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="leftMargin">
- <number>6</number>
- </property>
- <property name="rightMargin">
- <number>6</number>
- </property>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="btnKillMinecraft">
- <property name="text">
- <string>&amp;Kill Minecraft</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="closeButton">
- <property name="text">
- <string>&amp;Close</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QPlainTextEdit" name="text">
+ <property name="font">
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property name="undoRedoEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="plainText">
+ <string notr="true"/>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ <property name="centerOnScroll">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnKillMinecraft">
+ <property name="text">
+ <string>&amp;Kill Minecraft</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="closeButton">
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
</widget>
- <tabstops>
- <tabstop>text</tabstop>
- <tabstop>closeButton</tabstop>
- <tabstop>btnKillMinecraft</tabstop>
- </tabstops>
<resources/>
<connections/>
</ui>
diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp
index 842014d3..fc1b631c 100644
--- a/gui/MainWindow.cpp
+++ b/gui/MainWindow.cpp
@@ -712,27 +712,10 @@ void MainWindow::launchInstance(BaseInstance *instance, LoginResponse response)
if (!proc)
return;
- // Prepare GUI: If it shall stay open disable the required parts
- if (MMC->settings()->get("NoHide").toBool())
- {
- ui->actionLaunchInstance->setEnabled(false);
- }
- else
- {
- this->hide();
- }
+ this->hide();
console = new ConsoleWindow(proc);
-
- connect(proc, SIGNAL(log(QString, MessageLevel::Enum)), console,
- SLOT(write(QString, MessageLevel::Enum)));
- connect(proc, SIGNAL(ended(BaseInstance*,int,QProcess::ExitStatus)), this,
- SLOT(instanceEnded(BaseInstance*,int,QProcess::ExitStatus)));
-
- if (instance->settings().get("ShowConsole").toBool())
- {
- console->show();
- }
+ connect(console, SIGNAL(isClosing()), this, SLOT(instanceEnded()));
proc->setLogin(response.username, response.session_id);
proc->launch();
@@ -884,15 +867,9 @@ void MainWindow::on_actionEditInstNotes_triggered()
}
}
-void MainWindow::instanceEnded(BaseInstance *instance, int code, QProcess::ExitStatus status)
+void MainWindow::instanceEnded()
{
this->show();
- ui->actionLaunchInstance->setEnabled(m_selectedInstance);
-
- if (instance->settings().get("AutoCloseConsole").toBool())
- {
- console->close();
- }
}
void MainWindow::checkSetDefaultJava()
diff --git a/gui/MainWindow.h b/gui/MainWindow.h
index 798df0f9..b1678f76 100644
--- a/gui/MainWindow.h
+++ b/gui/MainWindow.h
@@ -116,7 +116,7 @@ slots:
void on_actionChangeInstLWJGLVersion_triggered();
- void instanceEnded(BaseInstance *instance, int code, QProcess::ExitStatus status);
+ void instanceEnded();
void on_actionInstanceSettings_triggered();