From 412855ae3d967ff81a383688397c4d9448a4ee15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 30 Oct 2016 02:37:38 +0100 Subject: NOISSUE refactor window management and launch, make MultiMC a single instance application. --- application/MainWindow.cpp | 88 +++++++--------------------------------------- 1 file changed, 12 insertions(+), 76 deletions(-) (limited to 'application/MainWindow.cpp') diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp index e07686dd..85484700 100644 --- a/application/MainWindow.cpp +++ b/application/MainWindow.cpp @@ -691,7 +691,7 @@ void MainWindow::updateToolsMenu() QAction *normalLaunch = launchMenu->addAction(tr("Launch")); connect(normalLaunch, &QAction::triggered, [this]() { - launch(m_selectedInstance); + MMC->launch(m_selectedInstance); }); launchMenu->addSeparator()->setText(tr("Profilers")); for (auto profiler : MMC->profilers().values()) @@ -707,7 +707,7 @@ void MainWindow::updateToolsMenu() { connect(profilerAction, &QAction::triggered, [this, profiler]() { - launch(m_selectedInstance, true, profiler.get()); + MMC->launch(m_selectedInstance, true, profiler.get()); }); } } @@ -953,7 +953,7 @@ void MainWindow::downloadUpdates(GoUpdate::Status status) { qDebug() << "Downloading updates."; ProgressDialog updateDlg(this); - status.rootPath = MMC->rootPath; + status.rootPath = MMC->root(); auto dlPath = FS::PathCombine(MMC->root(), "update", "XXXXXX"); if (!FS::ensureFilePathExists(dlPath)) @@ -1004,8 +1004,8 @@ void MainWindow::waitForMinecraftVersions() if (!MMC->minecraftlist()->isLoaded() && m_versionLoadTask && m_versionLoadTask->isRunning()) { QEventLoop waitLoop; - waitLoop.connect(m_versionLoadTask, SIGNAL(failed(QString)), SLOT(quit())); - waitLoop.connect(m_versionLoadTask, SIGNAL(succeeded()), SLOT(quit())); + waitLoop.connect(m_versionLoadTask, &Task::failed, &waitLoop, &QEventLoop::quit); + waitLoop.connect(m_versionLoadTask, &Task::succeeded, &waitLoop, &QEventLoop::quit); waitLoop.exec(); } } @@ -1261,62 +1261,24 @@ void MainWindow::on_actionSettings_triggered() update(); } -InstanceWindow *MainWindow::showInstanceWindow(InstancePtr instance, QString page) -{ - if(!instance) - return nullptr; - auto id = instance->id(); - InstanceWindow * window = nullptr; - - auto iter = m_instanceWindows.find(id); - if(iter != m_instanceWindows.end()) - { - window = *iter; - window->raise(); - window->activateWindow(); - } - else - { - window = new InstanceWindow(instance); - m_instanceWindows[id] = window; - connect(window, &InstanceWindow::isClosing, this, &MainWindow::on_instanceWindowClose); - } - if(!page.isEmpty()) - { - window->selectPage(page); - } - return window; -} - -void MainWindow::on_instanceWindowClose() -{ - auto senderWindow = qobject_cast(QObject::sender()); - if(!senderWindow) - { - return; - } - m_instanceWindows.remove(senderWindow->instanceId()); -} - - void MainWindow::on_actionInstanceSettings_triggered() { - showInstanceWindow(m_selectedInstance, "settings"); + MMC->showInstanceWindow(m_selectedInstance, "settings"); } void MainWindow::on_actionEditInstNotes_triggered() { - showInstanceWindow(m_selectedInstance, "notes"); + MMC->showInstanceWindow(m_selectedInstance, "notes"); } void MainWindow::on_actionEditInstance_triggered() { - showInstanceWindow(m_selectedInstance); + MMC->showInstanceWindow(m_selectedInstance); } void MainWindow::on_actionScreenshots_triggered() { - showInstanceWindow(m_selectedInstance, "screenshots"); + MMC->showInstanceWindow(m_selectedInstance, "screenshots"); } void MainWindow::on_actionManageAccounts_triggered() @@ -1440,14 +1402,14 @@ void MainWindow::instanceActivated(QModelIndex index) if (!inst) return; - launch(inst); + MMC->launch(inst); } void MainWindow::on_actionLaunchInstance_triggered() { if (m_selectedInstance) { - launch(m_selectedInstance); + MMC->launch(m_selectedInstance); } } @@ -1455,33 +1417,7 @@ void MainWindow::on_actionLaunchInstanceOffline_triggered() { if (m_selectedInstance) { - launch(m_selectedInstance, false); - } -} - -void MainWindow::launch(InstancePtr instance, bool online, BaseProfilerFactory *profiler) -{ - if(instance->canLaunch()) - { - // FIXME: duplicate logic between MainWindow and InstanceWindow - auto window = m_instanceWindows.find(instance->id()); - if(window != m_instanceWindows.end()) - { - if(!(*window)->saveAll()) - { - return; - } - } - m_launchController.reset(new LaunchController()); - m_launchController->setInstance(instance); - m_launchController->setOnline(online); - m_launchController->setParentWidget(this); - m_launchController->setProfiler(profiler); - m_launchController->start(); - } - else if (instance->isRunning()) - { - showInstanceWindow(instance, "console"); + MMC->launch(m_selectedInstance, false); } } -- cgit v1.2.3