From fe68d5946073d92bc585b2b5372c420218807c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 1 Nov 2016 01:25:04 +0100 Subject: GH-1645 reimplement open/close instance window based on settings --- application/MultiMC.cpp | 84 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 65 insertions(+), 19 deletions(-) (limited to 'application/MultiMC.cpp') diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp index 95cf57b9..a20666ca 100644 --- a/application/MultiMC.cpp +++ b/application/MultiMC.cpp @@ -547,7 +547,6 @@ void MultiMC::initGlobalSettings() // Console m_settings->registerSetting("ShowConsole", true); - m_settings->registerSetting("RaiseConsole", true); m_settings->registerSetting("AutoCloseConsole", true); m_settings->registerSetting("LogPrePostOutput", true); @@ -1072,25 +1071,32 @@ void MultiMC::launch(InstancePtr instance, bool online, BaseProfilerFactory *pro { if(instance->canLaunch()) { - m_launchController.reset(new LaunchController()); - m_launchController->setInstance(instance); - m_launchController->setOnline(online); - m_launchController->setProfiler(profiler); - auto windowIter = m_instanceWindows.find(instance->id()); - if(windowIter != m_instanceWindows.end()) + auto & extras = m_instanceExtras[instance->id()]; + auto & window = extras.window; + if(window) { - auto window = *windowIter; if(!window->saveAll()) { return; } - m_launchController->setParentWidget(window); } - if(m_mainWindow) + auto & controller = extras.controller; + controller.reset(new LaunchController()); + controller->setInstance(instance); + controller->setOnline(online); + controller->setProfiler(profiler); + controller->setShowConsole(instance->settings()->get("ShowConsole").toBool()); + if(window) { - m_launchController->setParentWidget(m_mainWindow); + controller->setParentWidget(window); } - m_launchController->start(); + else if(m_mainWindow) + { + controller->setParentWidget(m_mainWindow); + } + connect(controller.get(), &LaunchController::succeeded, this, &MultiMC::controllerSucceeded); + connect(controller.get(), &LaunchController::failed, this, &MultiMC::controllerFailed); + controller->start(); } else if (instance->isRunning()) { @@ -1098,6 +1104,37 @@ void MultiMC::launch(InstancePtr instance, bool online, BaseProfilerFactory *pro } } +void MultiMC::controllerSucceeded() +{ + auto controller = qobject_cast(QObject::sender()); + if(!controller) + return; + auto id = controller->id(); + auto & extras = m_instanceExtras[id]; + // on success, do... + if (controller->instance()->settings()->get("AutoCloseConsole").toBool()) + { + if(extras.window) + { + extras.window->close(); + } + } + extras.controller.reset(); +} + +void MultiMC::controllerFailed(const QString& error) +{ + Q_UNUSED(error); + auto controller = qobject_cast(QObject::sender()); + if(!controller) + return; + auto id = controller->id(); + auto & extras = m_instanceExtras[id]; + + // on failure, do... nothing + extras.controller.reset(); +} + MainWindow * MultiMC::showMainWindow() { if(m_mainWindow) @@ -1123,34 +1160,43 @@ InstanceWindow *MultiMC::showInstanceWindow(InstancePtr instance, QString page) if(!instance) return nullptr; auto id = instance->id(); - InstanceWindow * window = nullptr; + auto & extras = m_instanceExtras[id]; + auto & window = extras.window; - auto iter = m_instanceWindows.find(id); - if(iter != m_instanceWindows.end()) + if(window) { - window = *iter; window->raise(); window->activateWindow(); } else { window = new InstanceWindow(instance); - m_instanceWindows[id] = window; connect(window, &InstanceWindow::isClosing, this, &MultiMC::on_windowClose); } if(!page.isEmpty()) { window->selectPage(page); } + m_openWindows ++; + if(extras.controller) + { + extras.controller->setParentWidget(window); + } return window; } void MultiMC::on_windowClose() { + m_openWindows--; auto instWindow = qobject_cast(QObject::sender()); if(instWindow) { - m_instanceWindows.remove(instWindow->instanceId()); + auto & extras = m_instanceExtras[instWindow->instanceId()]; + extras.window = nullptr; + if(extras.controller) + { + extras.controller->setParentWidget(m_mainWindow); + } return; } auto mainWindow = qobject_cast(QObject::sender()); @@ -1159,7 +1205,7 @@ void MultiMC::on_windowClose() m_mainWindow = nullptr; } // quit when there are no more windows. - if(m_instanceWindows.isEmpty() && !m_mainWindow) + if(m_openWindows == 0) { quit(); } -- cgit v1.2.3