diff --git a/launcher/Application.cpp b/launcher/Application.cpp index b0ef1405a..fd76d4671 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -52,6 +52,7 @@ #include "tools/GenericProfiler.h" #include "ui/InstanceWindow.h" #include "ui/MainWindow.h" +#include "ui/ViewLogWindow.h" #include "ui/dialogs/ProgressDialog.h" #include "ui/instanceview/AccessibleInstanceView.h" @@ -1691,6 +1692,20 @@ MainWindow* Application::showMainWindow(bool minimized) return m_mainWindow; } +ViewLogWindow* Application::showLogWindow() +{ + if (m_viewLogWindow) { + m_viewLogWindow->setWindowState(m_viewLogWindow->windowState() & ~Qt::WindowMinimized); + m_viewLogWindow->raise(); + m_viewLogWindow->activateWindow(); + } else { + m_viewLogWindow = new ViewLogWindow(); + connect(m_viewLogWindow, &ViewLogWindow::isClosing, this, &Application::on_windowClose); + m_openWindows++; + } + return m_viewLogWindow; +} + InstanceWindow* Application::showInstanceWindow(InstancePtr instance, QString page) { if (!instance) diff --git a/launcher/Application.h b/launcher/Application.h index 548345c18..52a84b461 100644 --- a/launcher/Application.h +++ b/launcher/Application.h @@ -55,6 +55,7 @@ class LaunchController; class LocalPeer; class InstanceWindow; class MainWindow; +class ViewLogWindow; class SetupWizard; class GenericPageProvider; class QFile; @@ -183,6 +184,7 @@ class Application : public QApplication { InstanceWindow* showInstanceWindow(InstancePtr instance, QString page = QString()); MainWindow* showMainWindow(bool minimized = false); + ViewLogWindow* showLogWindow(); void updateIsRunning(bool running); bool updatesAreAllowed(); @@ -290,6 +292,9 @@ class Application : public QApplication { // main window, if any MainWindow* m_mainWindow = nullptr; + // log window, if any + ViewLogWindow* m_viewLogWindow = nullptr; + // peer launcher instance connector - used to implement single instance launcher and signalling LocalPeer* m_peerInstance = nullptr; diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index e9e32d481..ada0af75f 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -847,6 +847,8 @@ SET(LAUNCHER_SOURCES ui/MainWindow.cpp ui/InstanceWindow.h ui/InstanceWindow.cpp + ui/ViewLogWindow.h + ui/ViewLogWindow.cpp # FIXME: maybe find a better home for this. FileIgnoreProxy.cpp @@ -1098,8 +1100,6 @@ SET(LAUNCHER_SOURCES ui/dialogs/ResourceUpdateDialog.h ui/dialogs/InstallLoaderDialog.cpp ui/dialogs/InstallLoaderDialog.h - ui/dialogs/ViewLogDialog.cpp - ui/dialogs/ViewLogDialog.h ui/dialogs/skins/SkinManageDialog.cpp ui/dialogs/skins/SkinManageDialog.h @@ -1258,7 +1258,6 @@ qt_wrap_ui(LAUNCHER_UI ui/dialogs/ScrollMessageBox.ui ui/dialogs/BlockedModsDialog.ui ui/dialogs/ChooseProviderDialog.ui - ui/dialogs/ViewLogDialog.ui ui/dialogs/skins/SkinManageDialog.ui ) diff --git a/launcher/MessageLevel.cpp b/launcher/MessageLevel.cpp index 2440f644e..c1c190c72 100644 --- a/launcher/MessageLevel.cpp +++ b/launcher/MessageLevel.cpp @@ -15,7 +15,7 @@ MessageLevel::Enum MessageLevel::getLevel(const QString& levelName) return MessageLevel::Message; else if (name == "WARNING" || name == "WARN") return MessageLevel::Warning; - else if (name == "ERROR") + else if (name == "ERROR" || name == "CRITICAL") return MessageLevel::Error; else if (name == "FATAL") return MessageLevel::Fatal; diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index f68b94aca..4fc4044cf 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -92,6 +92,7 @@ #include "InstanceWindow.h" #include "ui/GuiUtil.h" +#include "ui/ViewLogWindow.h" #include "ui/dialogs/AboutDialog.h" #include "ui/dialogs/CopyInstanceDialog.h" #include "ui/dialogs/CreateShortcutDialog.h" @@ -103,7 +104,6 @@ #include "ui/dialogs/NewInstanceDialog.h" #include "ui/dialogs/NewsDialog.h" #include "ui/dialogs/ProgressDialog.h" -#include "ui/dialogs/ViewLogDialog.h" #include "ui/instanceview/InstanceDelegate.h" #include "ui/instanceview/InstanceProxyModel.h" #include "ui/instanceview/InstanceView.h" @@ -240,10 +240,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWi } { // logs viewing - connect(ui->actionViewLog, &QAction::triggered, this, [this] { - ViewLogDialog dialog(this); - dialog.exec(); - }); + connect(ui->actionViewLog, &QAction::triggered, this, [] { APPLICATION->showLogWindow(); }); } // add the toolbar toggles to the view menu diff --git a/launcher/ui/ViewLogWindow.cpp b/launcher/ui/ViewLogWindow.cpp new file mode 100644 index 000000000..c0c56f3ee --- /dev/null +++ b/launcher/ui/ViewLogWindow.cpp @@ -0,0 +1,25 @@ +#include + +#include "ViewLogWindow.h" + +#include "ui/pages/instance/OtherLogsPage.h" + +ViewLogWindow::ViewLogWindow(QWidget* parent) + : QMainWindow(parent), m_page(new OtherLogsPage("launcher-logs", tr("Launcher Logs"), "Launcher-Logs", nullptr, parent)) +{ + setAttribute(Qt::WA_DeleteOnClose); + setWindowIcon(APPLICATION->getThemedIcon("log")); + setWindowTitle(tr("View Launcher Logs")); + setCentralWidget(m_page); + setMinimumSize(m_page->size()); + setContentsMargins(0, 0, 0, 0); + m_page->opened(); + show(); +} + +void ViewLogWindow::closeEvent(QCloseEvent* event) +{ + m_page->closed(); + emit isClosing(); + event->accept(); +} diff --git a/launcher/ui/ViewLogWindow.h b/launcher/ui/ViewLogWindow.h new file mode 100644 index 000000000..bb10683aa --- /dev/null +++ b/launcher/ui/ViewLogWindow.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include "Application.h" + +class OtherLogsPage; + +class ViewLogWindow : public QMainWindow { + Q_OBJECT + + public: + explicit ViewLogWindow(QWidget* parent = nullptr); + + signals: + void isClosing(); + + protected: + void closeEvent(QCloseEvent*) override; + + private: + OtherLogsPage* m_page; +}; diff --git a/launcher/ui/dialogs/ViewLogDialog.cpp b/launcher/ui/dialogs/ViewLogDialog.cpp deleted file mode 100644 index 47c63d9cc..000000000 --- a/launcher/ui/dialogs/ViewLogDialog.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "ViewLogDialog.h" -#include "ui_ViewLogDialog.h" - -#include "ui/pages/instance/OtherLogsPage.h" - -ViewLogDialog::ViewLogDialog(QWidget* parent) - : QDialog(parent) - , ui(new Ui::ViewLogDialog) - , m_page(new OtherLogsPage("launcher-logs", tr("Launcher Logs"), "Launcher-Logs", nullptr, parent)) -{ - ui->setupUi(this); - ui->verticalLayout->insertWidget(0, m_page); - connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - m_page->opened(); -} - -ViewLogDialog::~ViewLogDialog() -{ - m_page->closed(); - delete ui; -} diff --git a/launcher/ui/dialogs/ViewLogDialog.h b/launcher/ui/dialogs/ViewLogDialog.h deleted file mode 100644 index ebb9ef650..000000000 --- a/launcher/ui/dialogs/ViewLogDialog.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include -#include - -namespace Ui { -class ViewLogDialog; -} - -class OtherLogsPage; - -class ViewLogDialog : public QDialog { - Q_OBJECT - - public: - explicit ViewLogDialog(QWidget* parent = nullptr); - ~ViewLogDialog(); - - private: - Ui::ViewLogDialog* ui; - OtherLogsPage* m_page; -}; diff --git a/launcher/ui/dialogs/ViewLogDialog.ui b/launcher/ui/dialogs/ViewLogDialog.ui deleted file mode 100644 index 4a7bb789e..000000000 --- a/launcher/ui/dialogs/ViewLogDialog.ui +++ /dev/null @@ -1,34 +0,0 @@ - - - ViewLogDialog - - - - 0 - 0 - 825 - 782 - - - - View Launcher Logs - - - true - - - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - - - - - -