diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-11-23 01:41:28 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-11-23 01:41:28 +0100 |
commit | 4124faf474908e4d79d93b0f624bf8fd81bd9972 (patch) | |
tree | 335087d96ddab6b862c187969749134be6b4d96e /gui | |
parent | 7f5eb5d61ad5c94da5e3a0443ffbcd9088285496 (diff) | |
download | MultiMC-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.cpp | 36 | ||||
-rw-r--r-- | gui/ConsoleWindow.h | 18 | ||||
-rw-r--r-- | gui/ConsoleWindow.ui | 151 | ||||
-rw-r--r-- | gui/MainWindow.cpp | 29 | ||||
-rw-r--r-- | gui/MainWindow.h | 2 |
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>&Kill Minecraft</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="closeButton"> - <property name="text"> - <string>&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>&Kill Minecraft</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="closeButton"> + <property name="text"> + <string>&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(); |