Merge pull request #1320 from TheKodeToad/better-launch
Combine launch buttons in instance window, persist profiler
This commit is contained in:
commit
f99b04bd16
@ -968,7 +968,7 @@ void Application::performMainStartupAction()
|
|||||||
qDebug() << " Launching with account" << m_profileToUse;
|
qDebug() << " Launching with account" << m_profileToUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
launch(inst, true, false, nullptr, serverToJoin, accountToUse);
|
launch(inst, true, false, serverToJoin, accountToUse);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1067,7 +1067,7 @@ void Application::messageReceived(const QByteArray& message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
launch(instance, true, false, nullptr, serverObject, accountObject);
|
launch(instance, true, false, serverObject, accountObject);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Received invalid message" << message;
|
qWarning() << "Received invalid message" << message;
|
||||||
}
|
}
|
||||||
@ -1108,7 +1108,6 @@ bool Application::openJsonEditor(const QString& filename)
|
|||||||
bool Application::launch(InstancePtr instance,
|
bool Application::launch(InstancePtr instance,
|
||||||
bool online,
|
bool online,
|
||||||
bool demo,
|
bool demo,
|
||||||
BaseProfilerFactory* profiler,
|
|
||||||
MinecraftServerTargetPtr serverToJoin,
|
MinecraftServerTargetPtr serverToJoin,
|
||||||
MinecraftAccountPtr accountToUse)
|
MinecraftAccountPtr accountToUse)
|
||||||
{
|
{
|
||||||
@ -1116,7 +1115,7 @@ bool Application::launch(InstancePtr instance,
|
|||||||
qDebug() << "Cannot launch instances while an update is running. Please try again when updates are completed.";
|
qDebug() << "Cannot launch instances while an update is running. Please try again when updates are completed.";
|
||||||
} else if (instance->canLaunch()) {
|
} else if (instance->canLaunch()) {
|
||||||
auto& extras = m_instanceExtras[instance->id()];
|
auto& extras = m_instanceExtras[instance->id()];
|
||||||
auto& window = extras.window;
|
auto window = extras.window;
|
||||||
if (window) {
|
if (window) {
|
||||||
if (!window->saveAll()) {
|
if (!window->saveAll()) {
|
||||||
return false;
|
return false;
|
||||||
@ -1127,7 +1126,7 @@ bool Application::launch(InstancePtr instance,
|
|||||||
controller->setInstance(instance);
|
controller->setInstance(instance);
|
||||||
controller->setOnline(online);
|
controller->setOnline(online);
|
||||||
controller->setDemo(demo);
|
controller->setDemo(demo);
|
||||||
controller->setProfiler(profiler);
|
controller->setProfiler(profilers().value(instance->settings()->get("Profiler").toString(), nullptr).get());
|
||||||
controller->setServerToJoin(serverToJoin);
|
controller->setServerToJoin(serverToJoin);
|
||||||
controller->setAccountToUse(accountToUse);
|
controller->setAccountToUse(accountToUse);
|
||||||
if (window) {
|
if (window) {
|
||||||
|
@ -195,7 +195,6 @@ class Application : public QApplication {
|
|||||||
bool launch(InstancePtr instance,
|
bool launch(InstancePtr instance,
|
||||||
bool online = true,
|
bool online = true,
|
||||||
bool demo = false,
|
bool demo = false,
|
||||||
BaseProfilerFactory* profiler = nullptr,
|
|
||||||
MinecraftServerTargetPtr serverToJoin = nullptr,
|
MinecraftServerTargetPtr serverToJoin = nullptr,
|
||||||
MinecraftAccountPtr accountToUse = nullptr);
|
MinecraftAccountPtr accountToUse = nullptr);
|
||||||
bool kill(InstancePtr instance);
|
bool kill(InstancePtr instance);
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
* Prism Launcher - Minecraft Launcher
|
* Prism Launcher - Minecraft Launcher
|
||||||
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
||||||
|
* Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -100,6 +101,8 @@ BaseInstance::BaseInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr s
|
|||||||
m_settings->registerSetting("ManagedPackName", "");
|
m_settings->registerSetting("ManagedPackName", "");
|
||||||
m_settings->registerSetting("ManagedPackVersionID", "");
|
m_settings->registerSetting("ManagedPackVersionID", "");
|
||||||
m_settings->registerSetting("ManagedPackVersionName", "");
|
m_settings->registerSetting("ManagedPackVersionName", "");
|
||||||
|
|
||||||
|
m_settings->registerSetting("Profiler", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BaseInstance::getPreLaunchCommand()
|
QString BaseInstance::getPreLaunchCommand()
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
* Prism Launcher - Minecraft Launcher
|
* Prism Launcher - Minecraft Launcher
|
||||||
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
||||||
|
* Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -38,6 +39,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <QMenu>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
@ -246,6 +248,8 @@ class BaseInstance : public QObject, public std::enable_shared_from_this<BaseIns
|
|||||||
virtual bool canEdit() const = 0;
|
virtual bool canEdit() const = 0;
|
||||||
virtual bool canExport() const = 0;
|
virtual bool canExport() const = 0;
|
||||||
|
|
||||||
|
virtual void populateLaunchMenu(QMenu* menu) = 0;
|
||||||
|
|
||||||
bool reloadSettings();
|
bool reloadSettings();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -282,6 +286,8 @@ class BaseInstance : public QObject, public std::enable_shared_from_this<BaseIns
|
|||||||
|
|
||||||
void runningStatusChanged(bool running);
|
void runningStatusChanged(bool running);
|
||||||
|
|
||||||
|
void profilerChanged();
|
||||||
|
|
||||||
void statusChanged(Status from, Status to);
|
void statusChanged(Status from, Status to);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
* Prism Launcher - Minecraft Launcher
|
* Prism Launcher - Minecraft Launcher
|
||||||
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
|
* Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -361,22 +362,21 @@ void LaunchController::readyForLaunch()
|
|||||||
QString error;
|
QString error;
|
||||||
if (!m_profiler->check(&error)) {
|
if (!m_profiler->check(&error)) {
|
||||||
m_launcher->abort();
|
m_launcher->abort();
|
||||||
QMessageBox::critical(m_parentWidget, tr("Error!"), tr("Couldn't start profiler: %1").arg(error));
|
|
||||||
emitFailed("Profiler startup failed!");
|
emitFailed("Profiler startup failed!");
|
||||||
|
QMessageBox::critical(m_parentWidget, tr("Error!"), tr("Profiler check for %1 failed: %2").arg(m_profiler->name(), error));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BaseProfiler* profilerInstance = m_profiler->createProfiler(m_launcher->instance(), this);
|
BaseProfiler* profilerInstance = m_profiler->createProfiler(m_launcher->instance(), this);
|
||||||
|
|
||||||
connect(profilerInstance, &BaseProfiler::readyToLaunch, [this](const QString& message) {
|
connect(profilerInstance, &BaseProfiler::readyToLaunch, [this](const QString& message) {
|
||||||
QMessageBox msg;
|
QMessageBox msg(m_parentWidget);
|
||||||
msg.setText(tr("The game launch is delayed until you press the "
|
msg.setText(tr("The game launch is delayed until you press the "
|
||||||
"button. This is the right time to setup the profiler, as the "
|
"button. This is the right time to setup the profiler, as the "
|
||||||
"profiler server is running now.\n\n%1")
|
"profiler server is running now.\n\n%1")
|
||||||
.arg(message));
|
.arg(message));
|
||||||
msg.setWindowTitle(tr("Waiting."));
|
msg.setWindowTitle(tr("Waiting."));
|
||||||
msg.setIcon(QMessageBox::Information);
|
msg.setIcon(QMessageBox::Information);
|
||||||
msg.addButton(tr("Launch"), QMessageBox::AcceptRole);
|
msg.addButton(tr("&Launch"), QMessageBox::AcceptRole);
|
||||||
msg.setModal(true);
|
|
||||||
msg.exec();
|
msg.exec();
|
||||||
m_launcher->proceed();
|
m_launcher->proceed();
|
||||||
});
|
});
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
* Prism Launcher - Minecraft Launcher
|
* Prism Launcher - Minecraft Launcher
|
||||||
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
|
* Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -62,6 +63,7 @@ class NullInstance : public BaseInstance {
|
|||||||
bool canExport() const override { return false; }
|
bool canExport() const override { return false; }
|
||||||
bool canEdit() const override { return false; }
|
bool canEdit() const override { return false; }
|
||||||
bool canLaunch() const override { return false; }
|
bool canLaunch() const override { return false; }
|
||||||
|
void populateLaunchMenu(QMenu* menu) override {}
|
||||||
QStringList verboseDescription(AuthSessionPtr session, MinecraftServerTargetPtr serverToJoin) override
|
QStringList verboseDescription(AuthSessionPtr session, MinecraftServerTargetPtr serverToJoin) override
|
||||||
{
|
{
|
||||||
QStringList out;
|
QStringList out;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Prism Launcher - Minecraft Launcher
|
* Prism Launcher - Minecraft Launcher
|
||||||
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
* Copyright (C) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
* Copyright (C) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
||||||
* Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me>
|
* Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
|
||||||
* Copyright (c) 2023 seth <getchoo at tuta dot io>
|
* Copyright (c) 2023 seth <getchoo at tuta dot io>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
@ -88,6 +88,10 @@
|
|||||||
#include "minecraft/gameoptions/GameOptions.h"
|
#include "minecraft/gameoptions/GameOptions.h"
|
||||||
#include "minecraft/update/FoldersTask.h"
|
#include "minecraft/update/FoldersTask.h"
|
||||||
|
|
||||||
|
#include "tools/BaseProfiler.h"
|
||||||
|
|
||||||
|
#include <QActionGroup>
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
#include "MangoHud.h"
|
#include "MangoHud.h"
|
||||||
#endif
|
#endif
|
||||||
@ -231,6 +235,50 @@ QSet<QString> MinecraftInstance::traits() const
|
|||||||
return profile->getTraits();
|
return profile->getTraits();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: move UI code out of MinecraftInstance
|
||||||
|
void MinecraftInstance::populateLaunchMenu(QMenu* menu)
|
||||||
|
{
|
||||||
|
QAction* normalLaunch = menu->addAction(tr("&Launch"));
|
||||||
|
normalLaunch->setShortcut(QKeySequence::Open);
|
||||||
|
QAction* normalLaunchOffline = menu->addAction(tr("Launch &Offline"));
|
||||||
|
normalLaunchOffline->setShortcut(QKeySequence(tr("Ctrl+Shift+O")));
|
||||||
|
QAction* normalLaunchDemo = menu->addAction(tr("Launch &Demo"));
|
||||||
|
normalLaunchDemo->setShortcut(QKeySequence(tr("Ctrl+Alt+O")));
|
||||||
|
|
||||||
|
normalLaunchDemo->setEnabled(supportsDemo());
|
||||||
|
|
||||||
|
connect(normalLaunch, &QAction::triggered, [this] { APPLICATION->launch(shared_from_this()); });
|
||||||
|
connect(normalLaunchOffline, &QAction::triggered, [this] { APPLICATION->launch(shared_from_this(), false, false); });
|
||||||
|
connect(normalLaunchDemo, &QAction::triggered, [this] { APPLICATION->launch(shared_from_this(), false, true); });
|
||||||
|
|
||||||
|
QString profilersTitle = tr("Profilers");
|
||||||
|
menu->addSeparator()->setText(profilersTitle);
|
||||||
|
|
||||||
|
auto profilers = new QActionGroup(menu);
|
||||||
|
profilers->setExclusive(true);
|
||||||
|
connect(profilers, &QActionGroup::triggered, [this](QAction* action) {
|
||||||
|
settings()->set("Profiler", action->data());
|
||||||
|
emit profilerChanged();
|
||||||
|
});
|
||||||
|
|
||||||
|
QAction* noProfilerAction = menu->addAction(tr("&No Profiler"));
|
||||||
|
noProfilerAction->setData("");
|
||||||
|
noProfilerAction->setCheckable(true);
|
||||||
|
noProfilerAction->setChecked(true);
|
||||||
|
profilers->addAction(noProfilerAction);
|
||||||
|
|
||||||
|
for (auto profiler = APPLICATION->profilers().begin(); profiler != APPLICATION->profilers().end(); profiler++) {
|
||||||
|
QAction* profilerAction = menu->addAction(profiler.value()->name());
|
||||||
|
profilers->addAction(profilerAction);
|
||||||
|
profilerAction->setData(profiler.key());
|
||||||
|
profilerAction->setCheckable(true);
|
||||||
|
profilerAction->setChecked(settings()->get("Profiler").toString() == profiler.key());
|
||||||
|
|
||||||
|
QString error;
|
||||||
|
profilerAction->setEnabled(profiler.value()->check(&error));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString MinecraftInstance::gameRoot() const
|
QString MinecraftInstance::gameRoot() const
|
||||||
{
|
{
|
||||||
QFileInfo mcDir(FS::PathCombine(instanceRoot(), "minecraft"));
|
QFileInfo mcDir(FS::PathCombine(instanceRoot(), "minecraft"));
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
* Prism Launcher - Minecraft Launcher
|
* Prism Launcher - Minecraft Launcher
|
||||||
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
* Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me>
|
* Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -70,6 +70,8 @@ class MinecraftInstance : public BaseInstance {
|
|||||||
|
|
||||||
bool canExport() const override { return true; }
|
bool canExport() const override { return true; }
|
||||||
|
|
||||||
|
void populateLaunchMenu(QMenu* menu) override;
|
||||||
|
|
||||||
////// Directories and files //////
|
////// Directories and files //////
|
||||||
QString jarModsDir() const;
|
QString jarModsDir() const;
|
||||||
QString resourcePacksDir() const;
|
QString resourcePacksDir() const;
|
||||||
|
@ -44,8 +44,6 @@
|
|||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
|
||||||
#include "ui/dialogs/CustomMessageBox.h"
|
|
||||||
#include "ui/dialogs/ProgressDialog.h"
|
|
||||||
#include "ui/widgets/PageContainer.h"
|
#include "ui/widgets/PageContainer.h"
|
||||||
|
|
||||||
#include "InstancePageProvider.h"
|
#include "InstancePageProvider.h"
|
||||||
@ -76,40 +74,44 @@ InstanceWindow::InstanceWindow(InstancePtr instance, QWidget* parent) : QMainWin
|
|||||||
|
|
||||||
// Add custom buttons to the page container layout.
|
// Add custom buttons to the page container layout.
|
||||||
{
|
{
|
||||||
auto horizontalLayout = new QHBoxLayout();
|
auto horizontalLayout = new QHBoxLayout(this);
|
||||||
horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
|
horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
|
||||||
horizontalLayout->setContentsMargins(6, -1, 6, -1);
|
horizontalLayout->setContentsMargins(6, -1, 6, -1);
|
||||||
|
|
||||||
auto btnHelp = new QPushButton();
|
auto btnHelp = new QPushButton(this);
|
||||||
btnHelp->setText(tr("Help"));
|
btnHelp->setText(tr("Help"));
|
||||||
horizontalLayout->addWidget(btnHelp);
|
horizontalLayout->addWidget(btnHelp);
|
||||||
connect(btnHelp, SIGNAL(clicked(bool)), m_container, SLOT(help()));
|
connect(btnHelp, &QPushButton::clicked, m_container, &PageContainer::help);
|
||||||
|
|
||||||
auto spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
|
auto spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
|
||||||
horizontalLayout->addSpacerItem(spacer);
|
horizontalLayout->addSpacerItem(spacer);
|
||||||
|
|
||||||
m_killButton = new QPushButton();
|
m_launchButton = new QToolButton(this);
|
||||||
|
m_launchButton->setText(tr("&Launch"));
|
||||||
|
m_launchButton->setToolTip(tr("Launch the instance"));
|
||||||
|
m_launchButton->setPopupMode(QToolButton::MenuButtonPopup);
|
||||||
|
m_launchButton->setMinimumWidth(80); // HACK!!
|
||||||
|
horizontalLayout->addWidget(m_launchButton);
|
||||||
|
connect(m_launchButton, &QPushButton::clicked, this, [this] { APPLICATION->launch(m_instance); });
|
||||||
|
|
||||||
|
m_killButton = new QPushButton(this);
|
||||||
|
m_killButton->setText(tr("&Kill"));
|
||||||
|
m_killButton->setToolTip(tr("Kill the running instance"));
|
||||||
|
m_killButton->setShortcut(QKeySequence(tr("Ctrl+K")));
|
||||||
horizontalLayout->addWidget(m_killButton);
|
horizontalLayout->addWidget(m_killButton);
|
||||||
connect(m_killButton, SIGNAL(clicked(bool)), SLOT(on_btnKillMinecraft_clicked()));
|
connect(m_killButton, &QPushButton::clicked, this, [this] { APPLICATION->kill(m_instance); });
|
||||||
|
|
||||||
m_launchOfflineButton = new QPushButton();
|
updateButtons();
|
||||||
horizontalLayout->addWidget(m_launchOfflineButton);
|
|
||||||
m_launchOfflineButton->setText(tr("Launch Offline"));
|
|
||||||
|
|
||||||
m_launchDemoButton = new QPushButton();
|
m_closeButton = new QPushButton(this);
|
||||||
horizontalLayout->addWidget(m_launchDemoButton);
|
|
||||||
m_launchDemoButton->setText(tr("Launch Demo"));
|
|
||||||
|
|
||||||
updateLaunchButtons();
|
|
||||||
connect(m_launchOfflineButton, SIGNAL(clicked(bool)), SLOT(on_btnLaunchMinecraftOffline_clicked()));
|
|
||||||
connect(m_launchDemoButton, SIGNAL(clicked(bool)), SLOT(on_btnLaunchMinecraftDemo_clicked()));
|
|
||||||
|
|
||||||
m_closeButton = new QPushButton();
|
|
||||||
m_closeButton->setText(tr("Close"));
|
m_closeButton->setText(tr("Close"));
|
||||||
horizontalLayout->addWidget(m_closeButton);
|
horizontalLayout->addWidget(m_closeButton);
|
||||||
connect(m_closeButton, SIGNAL(clicked(bool)), SLOT(on_closeButton_clicked()));
|
connect(m_closeButton, &QPushButton::clicked, this, &QMainWindow::close);
|
||||||
|
|
||||||
m_container->addButtons(horizontalLayout);
|
m_container->addButtons(horizontalLayout);
|
||||||
|
|
||||||
|
connect(m_instance.get(), &BaseInstance::profilerChanged, this, &InstanceWindow::updateButtons);
|
||||||
|
connect(APPLICATION, &Application::globalSettingsClosed, this, &InstanceWindow::updateButtons);
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore window state
|
// restore window state
|
||||||
@ -149,47 +151,18 @@ void InstanceWindow::on_instanceStatusChanged(BaseInstance::Status, BaseInstance
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstanceWindow::updateLaunchButtons()
|
void InstanceWindow::updateButtons()
|
||||||
{
|
{
|
||||||
if (m_instance->isRunning()) {
|
m_launchButton->setEnabled(m_instance->canLaunch());
|
||||||
m_launchOfflineButton->setEnabled(false);
|
m_killButton->setEnabled(m_instance->isRunning());
|
||||||
m_launchDemoButton->setEnabled(false);
|
|
||||||
m_killButton->setText(tr("Kill"));
|
|
||||||
m_killButton->setObjectName("killButton");
|
|
||||||
m_killButton->setToolTip(tr("Kill the running instance"));
|
|
||||||
} else if (!m_instance->canLaunch()) {
|
|
||||||
m_launchOfflineButton->setEnabled(false);
|
|
||||||
m_launchDemoButton->setEnabled(false);
|
|
||||||
m_killButton->setText(tr("Launch"));
|
|
||||||
m_killButton->setObjectName("launchButton");
|
|
||||||
m_killButton->setToolTip(tr("Launch the instance"));
|
|
||||||
m_killButton->setEnabled(false);
|
|
||||||
} else {
|
|
||||||
m_launchOfflineButton->setEnabled(true);
|
|
||||||
|
|
||||||
// Disable demo-mode if not available.
|
QMenu* launchMenu = m_launchButton->menu();
|
||||||
auto instance = dynamic_cast<MinecraftInstance*>(m_instance.get());
|
if (launchMenu)
|
||||||
if (instance) {
|
launchMenu->clear();
|
||||||
m_launchDemoButton->setEnabled(instance->supportsDemo());
|
else
|
||||||
}
|
launchMenu = new QMenu(this);
|
||||||
|
m_instance->populateLaunchMenu(launchMenu);
|
||||||
m_killButton->setText(tr("Launch"));
|
m_launchButton->setMenu(launchMenu);
|
||||||
m_killButton->setObjectName("launchButton");
|
|
||||||
m_killButton->setToolTip(tr("Launch the instance"));
|
|
||||||
}
|
|
||||||
// NOTE: this is a hack to force the button to recalculate its style
|
|
||||||
m_killButton->setStyleSheet("/* */");
|
|
||||||
m_killButton->setStyleSheet(QString());
|
|
||||||
}
|
|
||||||
|
|
||||||
void InstanceWindow::on_btnLaunchMinecraftOffline_clicked()
|
|
||||||
{
|
|
||||||
APPLICATION->launch(m_instance, false, false, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InstanceWindow::on_btnLaunchMinecraftDemo_clicked()
|
|
||||||
{
|
|
||||||
APPLICATION->launch(m_instance, false, true, nullptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstanceWindow::instanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> proc)
|
void InstanceWindow::instanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> proc)
|
||||||
@ -199,18 +172,13 @@ void InstanceWindow::instanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> pr
|
|||||||
|
|
||||||
void InstanceWindow::runningStateChanged(bool running)
|
void InstanceWindow::runningStateChanged(bool running)
|
||||||
{
|
{
|
||||||
updateLaunchButtons();
|
updateButtons();
|
||||||
m_container->refreshContainer();
|
m_container->refreshContainer();
|
||||||
if (running) {
|
if (running) {
|
||||||
selectPage("log");
|
selectPage("log");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstanceWindow::on_closeButton_clicked()
|
|
||||||
{
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
|
|
||||||
void InstanceWindow::closeEvent(QCloseEvent* event)
|
void InstanceWindow::closeEvent(QCloseEvent* event)
|
||||||
{
|
{
|
||||||
bool proceed = true;
|
bool proceed = true;
|
||||||
@ -233,15 +201,6 @@ bool InstanceWindow::saveAll()
|
|||||||
return m_container->saveAll();
|
return m_container->saveAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstanceWindow::on_btnKillMinecraft_clicked()
|
|
||||||
{
|
|
||||||
if (m_instance->isRunning()) {
|
|
||||||
APPLICATION->kill(m_instance);
|
|
||||||
} else {
|
|
||||||
APPLICATION->launch(m_instance, true, false, nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString InstanceWindow::instanceId()
|
QString InstanceWindow::instanceId()
|
||||||
{
|
{
|
||||||
return m_instance->id();
|
return m_instance->id();
|
||||||
@ -252,17 +211,15 @@ bool InstanceWindow::selectPage(QString pageId)
|
|||||||
return m_container->selectPage(pageId);
|
return m_container->selectPage(pageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
BasePage* InstanceWindow::selectedPage() const
|
|
||||||
{
|
|
||||||
return m_container->selectedPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
void InstanceWindow::refreshContainer()
|
void InstanceWindow::refreshContainer()
|
||||||
{
|
{
|
||||||
m_container->refreshContainer();
|
m_container->refreshContainer();
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceWindow::~InstanceWindow() {}
|
BasePage* InstanceWindow::selectedPage() const
|
||||||
|
{
|
||||||
|
return m_container->selectedPage();
|
||||||
|
}
|
||||||
|
|
||||||
bool InstanceWindow::requestClose()
|
bool InstanceWindow::requestClose()
|
||||||
{
|
{
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QToolButton>
|
||||||
|
|
||||||
#include "LaunchController.h"
|
#include "LaunchController.h"
|
||||||
#include "launch/LaunchTask.h"
|
#include "launch/LaunchTask.h"
|
||||||
@ -53,7 +54,7 @@ class InstanceWindow : public QMainWindow, public BasePageContainer {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit InstanceWindow(InstancePtr proc, QWidget* parent = 0);
|
explicit InstanceWindow(InstancePtr proc, QWidget* parent = 0);
|
||||||
virtual ~InstanceWindow();
|
virtual ~InstanceWindow() = default;
|
||||||
|
|
||||||
bool selectPage(QString pageId) override;
|
bool selectPage(QString pageId) override;
|
||||||
BasePage* selectedPage() const override;
|
BasePage* selectedPage() const override;
|
||||||
@ -71,11 +72,6 @@ class InstanceWindow : public QMainWindow, public BasePageContainer {
|
|||||||
void isClosing();
|
void isClosing();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_closeButton_clicked();
|
|
||||||
void on_btnKillMinecraft_clicked();
|
|
||||||
void on_btnLaunchMinecraftOffline_clicked();
|
|
||||||
void on_btnLaunchMinecraftDemo_clicked();
|
|
||||||
|
|
||||||
void instanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> proc);
|
void instanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> proc);
|
||||||
void runningStateChanged(bool running);
|
void runningStateChanged(bool running);
|
||||||
void on_instanceStatusChanged(BaseInstance::Status, BaseInstance::Status newStatus);
|
void on_instanceStatusChanged(BaseInstance::Status, BaseInstance::Status newStatus);
|
||||||
@ -84,7 +80,7 @@ class InstanceWindow : public QMainWindow, public BasePageContainer {
|
|||||||
void closeEvent(QCloseEvent*) override;
|
void closeEvent(QCloseEvent*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateLaunchButtons();
|
void updateButtons();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
shared_qobject_ptr<LaunchTask> m_proc;
|
shared_qobject_ptr<LaunchTask> m_proc;
|
||||||
@ -92,7 +88,6 @@ class InstanceWindow : public QMainWindow, public BasePageContainer {
|
|||||||
bool m_doNotSave = false;
|
bool m_doNotSave = false;
|
||||||
PageContainer* m_container = nullptr;
|
PageContainer* m_container = nullptr;
|
||||||
QPushButton* m_closeButton = nullptr;
|
QPushButton* m_closeButton = nullptr;
|
||||||
|
QToolButton* m_launchButton = nullptr;
|
||||||
QPushButton* m_killButton = nullptr;
|
QPushButton* m_killButton = nullptr;
|
||||||
QPushButton* m_launchOfflineButton = nullptr;
|
|
||||||
QPushButton* m_launchDemoButton = nullptr;
|
|
||||||
};
|
};
|
||||||
|
@ -553,71 +553,14 @@ void MainWindow::updateMainToolBar()
|
|||||||
ui->mainToolBar->setVisible(ui->menuBar->isNativeMenuBar() || !APPLICATION->settings()->get("MenuBarInsteadOfToolBar").toBool());
|
ui->mainToolBar->setVisible(ui->menuBar->isNativeMenuBar() || !APPLICATION->settings()->get("MenuBarInsteadOfToolBar").toBool());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::updateToolsMenu()
|
void MainWindow::updateLaunchButton()
|
||||||
{
|
{
|
||||||
bool currentInstanceRunning = m_selectedInstance && m_selectedInstance->isRunning();
|
|
||||||
|
|
||||||
ui->actionLaunchInstance->setDisabled(!m_selectedInstance || currentInstanceRunning);
|
|
||||||
ui->actionLaunchInstanceOffline->setDisabled(!m_selectedInstance || currentInstanceRunning);
|
|
||||||
ui->actionLaunchInstanceDemo->setDisabled(!m_selectedInstance || currentInstanceRunning);
|
|
||||||
|
|
||||||
QMenu* launchMenu = ui->actionLaunchInstance->menu();
|
QMenu* launchMenu = ui->actionLaunchInstance->menu();
|
||||||
if (launchMenu) {
|
if (launchMenu)
|
||||||
launchMenu->clear();
|
launchMenu->clear();
|
||||||
} else {
|
else
|
||||||
launchMenu = new QMenu(this);
|
launchMenu = new QMenu(this);
|
||||||
}
|
m_selectedInstance->populateLaunchMenu(launchMenu);
|
||||||
QAction* normalLaunch = launchMenu->addAction(tr("Launch"));
|
|
||||||
normalLaunch->setShortcut(QKeySequence::Open);
|
|
||||||
QAction* normalLaunchOffline = launchMenu->addAction(tr("Launch Offline"));
|
|
||||||
normalLaunchOffline->setShortcut(QKeySequence(tr("Ctrl+Shift+O")));
|
|
||||||
QAction* normalLaunchDemo = launchMenu->addAction(tr("Launch Demo"));
|
|
||||||
normalLaunchDemo->setShortcut(QKeySequence(tr("Ctrl+Alt+O")));
|
|
||||||
if (m_selectedInstance) {
|
|
||||||
normalLaunch->setEnabled(m_selectedInstance->canLaunch());
|
|
||||||
normalLaunchOffline->setEnabled(m_selectedInstance->canLaunch());
|
|
||||||
normalLaunchDemo->setEnabled(m_selectedInstance->canLaunch());
|
|
||||||
|
|
||||||
connect(normalLaunch, &QAction::triggered, [this]() { APPLICATION->launch(m_selectedInstance, true, false); });
|
|
||||||
connect(normalLaunchOffline, &QAction::triggered, [this]() { APPLICATION->launch(m_selectedInstance, false, false); });
|
|
||||||
connect(normalLaunchDemo, &QAction::triggered, [this]() { APPLICATION->launch(m_selectedInstance, false, true); });
|
|
||||||
} else {
|
|
||||||
normalLaunch->setDisabled(true);
|
|
||||||
normalLaunchOffline->setDisabled(true);
|
|
||||||
normalLaunchDemo->setDisabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disable demo-mode if not available.
|
|
||||||
auto instance = dynamic_cast<MinecraftInstance*>(m_selectedInstance.get());
|
|
||||||
if (instance) {
|
|
||||||
normalLaunchDemo->setEnabled(instance->supportsDemo());
|
|
||||||
}
|
|
||||||
|
|
||||||
QString profilersTitle = tr("Profilers");
|
|
||||||
launchMenu->addSeparator()->setText(profilersTitle);
|
|
||||||
for (auto profiler : APPLICATION->profilers().values()) {
|
|
||||||
QAction* profilerAction = launchMenu->addAction(profiler->name());
|
|
||||||
QAction* profilerOfflineAction = launchMenu->addAction(tr("%1 Offline").arg(profiler->name()));
|
|
||||||
QString error;
|
|
||||||
if (!profiler->check(&error)) {
|
|
||||||
profilerAction->setDisabled(true);
|
|
||||||
profilerOfflineAction->setDisabled(true);
|
|
||||||
QString profilerToolTip = tr("Profiler not setup correctly. Go into settings, \"External Tools\".");
|
|
||||||
profilerAction->setToolTip(profilerToolTip);
|
|
||||||
profilerOfflineAction->setToolTip(profilerToolTip);
|
|
||||||
} else if (m_selectedInstance) {
|
|
||||||
profilerAction->setEnabled(m_selectedInstance->canLaunch());
|
|
||||||
profilerOfflineAction->setEnabled(m_selectedInstance->canLaunch());
|
|
||||||
|
|
||||||
connect(profilerAction, &QAction::triggered,
|
|
||||||
[this, profiler]() { APPLICATION->launch(m_selectedInstance, true, false, profiler.get()); });
|
|
||||||
connect(profilerOfflineAction, &QAction::triggered,
|
|
||||||
[this, profiler]() { APPLICATION->launch(m_selectedInstance, false, false, profiler.get()); });
|
|
||||||
} else {
|
|
||||||
profilerAction->setDisabled(true);
|
|
||||||
profilerOfflineAction->setDisabled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ui->actionLaunchInstance->setMenu(launchMenu);
|
ui->actionLaunchInstance->setMenu(launchMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1278,7 +1221,7 @@ void MainWindow::globalSettingsClosed()
|
|||||||
proxymodel->invalidate();
|
proxymodel->invalidate();
|
||||||
proxymodel->sort(0);
|
proxymodel->sort(0);
|
||||||
updateMainToolBar();
|
updateMainToolBar();
|
||||||
updateToolsMenu();
|
updateLaunchButton();
|
||||||
updateThemeMenu();
|
updateThemeMenu();
|
||||||
updateStatusCenter();
|
updateStatusCenter();
|
||||||
// This needs to be done to prevent UI elements disappearing in the event the config is changed
|
// This needs to be done to prevent UI elements disappearing in the event the config is changed
|
||||||
@ -1513,20 +1456,6 @@ void MainWindow::activateInstance(InstancePtr instance)
|
|||||||
APPLICATION->launch(instance);
|
APPLICATION->launch(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionLaunchInstanceOffline_triggered()
|
|
||||||
{
|
|
||||||
if (m_selectedInstance) {
|
|
||||||
APPLICATION->launch(m_selectedInstance, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::on_actionLaunchInstanceDemo_triggered()
|
|
||||||
{
|
|
||||||
if (m_selectedInstance) {
|
|
||||||
APPLICATION->launch(m_selectedInstance, false, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::on_actionKillInstance_triggered()
|
void MainWindow::on_actionKillInstance_triggered()
|
||||||
{
|
{
|
||||||
if (m_selectedInstance && m_selectedInstance->isRunning()) {
|
if (m_selectedInstance && m_selectedInstance->isRunning()) {
|
||||||
@ -1700,6 +1629,7 @@ void MainWindow::instanceChanged(const QModelIndex& current, [[maybe_unused]] co
|
|||||||
}
|
}
|
||||||
if (m_selectedInstance) {
|
if (m_selectedInstance) {
|
||||||
disconnect(m_selectedInstance.get(), &BaseInstance::runningStatusChanged, this, &MainWindow::refreshCurrentInstance);
|
disconnect(m_selectedInstance.get(), &BaseInstance::runningStatusChanged, this, &MainWindow::refreshCurrentInstance);
|
||||||
|
disconnect(m_selectedInstance.get(), &BaseInstance::profilerChanged, this, &MainWindow::refreshCurrentInstance);
|
||||||
}
|
}
|
||||||
QString id = current.data(InstanceList::InstanceIDRole).toString();
|
QString id = current.data(InstanceList::InstanceIDRole).toString();
|
||||||
m_selectedInstance = APPLICATION->instances()->getInstanceById(id);
|
m_selectedInstance = APPLICATION->instances()->getInstanceById(id);
|
||||||
@ -1707,14 +1637,6 @@ void MainWindow::instanceChanged(const QModelIndex& current, [[maybe_unused]] co
|
|||||||
ui->instanceToolBar->setEnabled(true);
|
ui->instanceToolBar->setEnabled(true);
|
||||||
setInstanceActionsEnabled(true);
|
setInstanceActionsEnabled(true);
|
||||||
ui->actionLaunchInstance->setEnabled(m_selectedInstance->canLaunch());
|
ui->actionLaunchInstance->setEnabled(m_selectedInstance->canLaunch());
|
||||||
ui->actionLaunchInstanceOffline->setEnabled(m_selectedInstance->canLaunch());
|
|
||||||
ui->actionLaunchInstanceDemo->setEnabled(m_selectedInstance->canLaunch());
|
|
||||||
|
|
||||||
// Disable demo-mode if not available.
|
|
||||||
auto instance = dynamic_cast<MinecraftInstance*>(m_selectedInstance.get());
|
|
||||||
if (instance) {
|
|
||||||
ui->actionLaunchInstanceDemo->setEnabled(instance->supportsDemo());
|
|
||||||
}
|
|
||||||
|
|
||||||
ui->actionKillInstance->setEnabled(m_selectedInstance->isRunning());
|
ui->actionKillInstance->setEnabled(m_selectedInstance->isRunning());
|
||||||
ui->actionExportInstance->setEnabled(m_selectedInstance->canExport());
|
ui->actionExportInstance->setEnabled(m_selectedInstance->canExport());
|
||||||
@ -1723,17 +1645,16 @@ void MainWindow::instanceChanged(const QModelIndex& current, [[maybe_unused]] co
|
|||||||
updateStatusCenter();
|
updateStatusCenter();
|
||||||
updateInstanceToolIcon(m_selectedInstance->iconKey());
|
updateInstanceToolIcon(m_selectedInstance->iconKey());
|
||||||
|
|
||||||
updateToolsMenu();
|
updateLaunchButton();
|
||||||
|
|
||||||
APPLICATION->settings()->set("SelectedInstance", m_selectedInstance->id());
|
APPLICATION->settings()->set("SelectedInstance", m_selectedInstance->id());
|
||||||
|
|
||||||
connect(m_selectedInstance.get(), &BaseInstance::runningStatusChanged, this, &MainWindow::refreshCurrentInstance);
|
connect(m_selectedInstance.get(), &BaseInstance::runningStatusChanged, this, &MainWindow::refreshCurrentInstance);
|
||||||
|
connect(m_selectedInstance.get(), &BaseInstance::profilerChanged, this, &MainWindow::refreshCurrentInstance);
|
||||||
} else {
|
} else {
|
||||||
ui->instanceToolBar->setEnabled(false);
|
ui->instanceToolBar->setEnabled(false);
|
||||||
setInstanceActionsEnabled(false);
|
setInstanceActionsEnabled(false);
|
||||||
ui->actionLaunchInstance->setEnabled(false);
|
ui->actionLaunchInstance->setEnabled(false);
|
||||||
ui->actionLaunchInstanceOffline->setEnabled(false);
|
|
||||||
ui->actionLaunchInstanceDemo->setEnabled(false);
|
|
||||||
ui->actionKillInstance->setEnabled(false);
|
ui->actionKillInstance->setEnabled(false);
|
||||||
APPLICATION->settings()->set("SelectedInstance", QString());
|
APPLICATION->settings()->set("SelectedInstance", QString());
|
||||||
selectionBad();
|
selectionBad();
|
||||||
@ -1763,7 +1684,7 @@ void MainWindow::selectionBad()
|
|||||||
statusBar()->clearMessage();
|
statusBar()->clearMessage();
|
||||||
ui->instanceToolBar->setEnabled(false);
|
ui->instanceToolBar->setEnabled(false);
|
||||||
setInstanceActionsEnabled(false);
|
setInstanceActionsEnabled(false);
|
||||||
updateToolsMenu();
|
updateLaunchButton();
|
||||||
renameButton->setText(tr("Rename Instance"));
|
renameButton->setText(tr("Rename Instance"));
|
||||||
updateInstanceToolIcon("grass");
|
updateInstanceToolIcon("grass");
|
||||||
|
|
||||||
@ -1826,7 +1747,7 @@ void MainWindow::setInstanceActionsEnabled(bool enabled)
|
|||||||
ui->actionCreateInstanceShortcut->setEnabled(enabled);
|
ui->actionCreateInstanceShortcut->setEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::refreshCurrentInstance([[maybe_unused]] bool running)
|
void MainWindow::refreshCurrentInstance()
|
||||||
{
|
{
|
||||||
auto current = view->selectionModel()->currentIndex();
|
auto current = view->selectionModel()->currentIndex();
|
||||||
instanceChanged(current, current);
|
instanceChanged(current, current);
|
||||||
|
@ -144,10 +144,6 @@ class MainWindow : public QMainWindow {
|
|||||||
|
|
||||||
void on_actionLaunchInstance_triggered();
|
void on_actionLaunchInstance_triggered();
|
||||||
|
|
||||||
void on_actionLaunchInstanceOffline_triggered();
|
|
||||||
|
|
||||||
void on_actionLaunchInstanceDemo_triggered();
|
|
||||||
|
|
||||||
void on_actionKillInstance_triggered();
|
void on_actionKillInstance_triggered();
|
||||||
|
|
||||||
void on_actionDeleteInstance_triggered();
|
void on_actionDeleteInstance_triggered();
|
||||||
@ -181,7 +177,7 @@ class MainWindow : public QMainWindow {
|
|||||||
|
|
||||||
void updateMainToolBar();
|
void updateMainToolBar();
|
||||||
|
|
||||||
void updateToolsMenu();
|
void updateLaunchButton();
|
||||||
|
|
||||||
void updateThemeMenu();
|
void updateThemeMenu();
|
||||||
|
|
||||||
@ -215,7 +211,7 @@ class MainWindow : public QMainWindow {
|
|||||||
void keyReleaseEvent(QKeyEvent* event) override;
|
void keyReleaseEvent(QKeyEvent* event) override;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void refreshCurrentInstance(bool running);
|
void refreshCurrentInstance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void retranslateUi();
|
void retranslateUi();
|
||||||
|
@ -440,22 +440,6 @@
|
|||||||
<string>Ctrl+D</string>
|
<string>Ctrl+D</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionLaunchInstanceOffline">
|
|
||||||
<property name="text">
|
|
||||||
<string>Launch &Offline</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Launch the selected instance in offline mode.</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionLaunchInstanceDemo">
|
|
||||||
<property name="text">
|
|
||||||
<string>Launch &Demo</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Launch the selected instance in demo mode.</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionExportInstance">
|
<action name="actionExportInstance">
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset theme="export">
|
<iconset theme="export">
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Prism Launcher - Minecraft Launcher
|
* Prism Launcher - Minecraft Launcher
|
||||||
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
|
||||||
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
|
||||||
* Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me>
|
* Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -743,7 +743,7 @@ void ServersPage::on_actionMove_Down_triggered()
|
|||||||
void ServersPage::on_actionJoin_triggered()
|
void ServersPage::on_actionJoin_triggered()
|
||||||
{
|
{
|
||||||
const auto& address = m_model->at(currentServer)->m_address;
|
const auto& address = m_model->at(currentServer)->m_address;
|
||||||
APPLICATION->launch(m_inst, true, false, nullptr, std::make_shared<MinecraftServerTarget>(MinecraftServerTarget::parse(address)));
|
APPLICATION->launch(m_inst, true, false, std::make_shared<MinecraftServerTarget>(MinecraftServerTarget::parse(address)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "ServersPage.moc"
|
#include "ServersPage.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user