aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages/instance
diff options
context:
space:
mode:
authorTheKodeToad <TheKodeToad@proton.me>2023-08-16 20:46:16 +0100
committerTheKodeToad <TheKodeToad@proton.me>2023-08-16 22:23:38 +0100
commit3e2733d840d24ce4f46b49bca0b8656d4d6e3d87 (patch)
tree386113207514b8071b0122b318c10439259ca83c /launcher/ui/pages/instance
parent57430fd189aed592a170d597de61b3acabaaa43d (diff)
parentc88088c91a92a371a9bc2b7384c2897157772b7e (diff)
downloadPrismLauncher-3e2733d840d24ce4f46b49bca0b8656d4d6e3d87.tar.gz
PrismLauncher-3e2733d840d24ce4f46b49bca0b8656d4d6e3d87.tar.bz2
PrismLauncher-3e2733d840d24ce4f46b49bca0b8656d4d6e3d87.zip
Merge branch 'develop' into better-launch
Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
Diffstat (limited to 'launcher/ui/pages/instance')
-rw-r--r--launcher/ui/pages/instance/ExternalResourcesPage.cpp2
-rw-r--r--launcher/ui/pages/instance/ExternalResourcesPage.h4
-rw-r--r--launcher/ui/pages/instance/GameOptionsPage.cpp13
-rw-r--r--launcher/ui/pages/instance/GameOptionsPage.h40
-rw-r--r--launcher/ui/pages/instance/InstanceSettingsPage.cpp131
-rw-r--r--launcher/ui/pages/instance/InstanceSettingsPage.h38
-rw-r--r--launcher/ui/pages/instance/InstanceSettingsPage.ui64
-rw-r--r--launcher/ui/pages/instance/LogPage.cpp146
-rw-r--r--launcher/ui/pages/instance/LogPage.h46
-rw-r--r--launcher/ui/pages/instance/ManagedPackPage.cpp22
-rw-r--r--launcher/ui/pages/instance/ManagedPackPage.ui12
-rw-r--r--launcher/ui/pages/instance/ModFolderPage.cpp2
-rw-r--r--launcher/ui/pages/instance/NotesPage.cpp7
-rw-r--r--launcher/ui/pages/instance/NotesPage.h37
-rw-r--r--launcher/ui/pages/instance/OtherLogsPage.cpp160
-rw-r--r--launcher/ui/pages/instance/OtherLogsPage.h44
-rw-r--r--launcher/ui/pages/instance/ResourcePackPage.cpp2
-rw-r--r--launcher/ui/pages/instance/ResourcePackPage.h11
-rw-r--r--launcher/ui/pages/instance/ScreenshotsPage.cpp244
-rw-r--r--launcher/ui/pages/instance/ScreenshotsPage.h60
-rw-r--r--launcher/ui/pages/instance/ServersPage.cpp384
-rw-r--r--launcher/ui/pages/instance/ServersPage.h61
-rw-r--r--launcher/ui/pages/instance/ShaderPackPage.h7
-rw-r--r--launcher/ui/pages/instance/TexturePackPage.cpp2
-rw-r--r--launcher/ui/pages/instance/TexturePackPage.h12
-rw-r--r--launcher/ui/pages/instance/VersionPage.cpp134
-rw-r--r--launcher/ui/pages/instance/VersionPage.h5
-rw-r--r--launcher/ui/pages/instance/VersionPage.ui62
-rw-r--r--launcher/ui/pages/instance/WorldListPage.cpp177
-rw-r--r--launcher/ui/pages/instance/WorldListPage.h66
30 files changed, 719 insertions, 1276 deletions
diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.cpp b/launcher/ui/pages/instance/ExternalResourcesPage.cpp
index 12038f88..719db879 100644
--- a/launcher/ui/pages/instance/ExternalResourcesPage.cpp
+++ b/launcher/ui/pages/instance/ExternalResourcesPage.cpp
@@ -305,7 +305,7 @@ bool ExternalResourcesPage::current(const QModelIndex& current, const QModelInde
return onSelectionChanged(current, previous);
}
-bool ExternalResourcesPage::onSelectionChanged(const QModelIndex& current, const QModelIndex& previous)
+bool ExternalResourcesPage::onSelectionChanged(const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
auto sourceCurrent = m_filterModel->mapToSource(current);
int row = sourceCurrent.row();
diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.h b/launcher/ui/pages/instance/ExternalResourcesPage.h
index 97d922d8..d29be0fc 100644
--- a/launcher/ui/pages/instance/ExternalResourcesPage.h
+++ b/launcher/ui/pages/instance/ExternalResourcesPage.h
@@ -4,8 +4,8 @@
#include <QSortFilterProxyModel>
#include "Application.h"
-#include "settings/Setting.h"
#include "minecraft/MinecraftInstance.h"
+#include "settings/Setting.h"
#include "ui/pages/BasePage.h"
class ResourceFolderModel;
@@ -52,7 +52,7 @@ class ExternalResourcesPage : public QMainWindow, public BasePage {
virtual void addItem();
void removeItem();
- virtual void removeItems(const QItemSelection &selection);
+ virtual void removeItems(const QItemSelection& selection);
virtual void enableItem();
virtual void disableItem();
diff --git a/launcher/ui/pages/instance/GameOptionsPage.cpp b/launcher/ui/pages/instance/GameOptionsPage.cpp
index 63443166..8db392b1 100644
--- a/launcher/ui/pages/instance/GameOptionsPage.cpp
+++ b/launcher/ui/pages/instance/GameOptionsPage.cpp
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -34,23 +34,20 @@
*/
#include "GameOptionsPage.h"
-#include "ui_GameOptionsPage.h"
#include "minecraft/MinecraftInstance.h"
#include "minecraft/gameoptions/GameOptions.h"
+#include "ui_GameOptionsPage.h"
-GameOptionsPage::GameOptionsPage(MinecraftInstance * inst, QWidget* parent)
- : QWidget(parent), ui(new Ui::GameOptionsPage)
+GameOptionsPage::GameOptionsPage(MinecraftInstance* inst, QWidget* parent) : QWidget(parent), ui(new Ui::GameOptionsPage)
{
ui->setupUi(this);
ui->tabWidget->tabBar()->hide();
m_model = inst->gameOptionsModel();
ui->optionsView->setModel(m_model.get());
auto head = ui->optionsView->header();
- if(head->count())
- {
+ if (head->count()) {
head->setSectionResizeMode(0, QHeaderView::ResizeToContents);
- for(int i = 1; i < head->count(); i++)
- {
+ for (int i = 1; i < head->count(); i++) {
head->setSectionResizeMode(i, QHeaderView::Stretch);
}
}
diff --git a/launcher/ui/pages/instance/GameOptionsPage.h b/launcher/ui/pages/instance/GameOptionsPage.h
index de8c421e..a132843e 100644
--- a/launcher/ui/pages/instance/GameOptionsPage.h
+++ b/launcher/ui/pages/instance/GameOptionsPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -35,50 +35,36 @@
#pragma once
-#include <QWidget>
#include <QString>
+#include <QWidget>
-#include "ui/pages/BasePage.h"
#include <Application.h>
+#include "ui/pages/BasePage.h"
-namespace Ui
-{
+namespace Ui {
class GameOptionsPage;
}
class GameOptions;
class MinecraftInstance;
-class GameOptionsPage : public QWidget, public BasePage
-{
+class GameOptionsPage : public QWidget, public BasePage {
Q_OBJECT
-public:
- explicit GameOptionsPage(MinecraftInstance *inst, QWidget *parent = 0);
+ public:
+ explicit GameOptionsPage(MinecraftInstance* inst, QWidget* parent = 0);
virtual ~GameOptionsPage();
void openedImpl() override;
void closedImpl() override;
- virtual QString displayName() const override
- {
- return tr("Game Options");
- }
- virtual QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("settings");
- }
- virtual QString id() const override
- {
- return "gameoptions";
- }
- virtual QString helpPage() const override
- {
- return "Game-Options-management";
- }
+ virtual QString displayName() const override { return tr("Game Options"); }
+ virtual QIcon icon() const override { return APPLICATION->getThemedIcon("settings"); }
+ virtual QString id() const override { return "gameoptions"; }
+ virtual QString helpPage() const override { return "Game-Options-management"; }
void retranslate() override;
-private: // data
- Ui::GameOptionsPage *ui = nullptr;
+ private: // data
+ Ui::GameOptionsPage* ui = nullptr;
std::shared_ptr<GameOptions> m_model;
};
diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.cpp b/launcher/ui/pages/instance/InstanceSettingsPage.cpp
index 25cc1a0d..f7be9168 100644
--- a/launcher/ui/pages/instance/InstanceSettingsPage.cpp
+++ b/launcher/ui/pages/instance/InstanceSettingsPage.cpp
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
* Copyright (C) 2023 seth <getchoo at tuta dot io>
@@ -38,8 +38,8 @@
#include "InstanceSettingsPage.h"
#include "ui_InstanceSettingsPage.h"
-#include <QFileDialog>
#include <QDialog>
+#include <QFileDialog>
#include <QMessageBox>
#include <sys.h>
@@ -47,15 +47,15 @@
#include "ui/dialogs/VersionSelectDialog.h"
#include "ui/widgets/CustomCommands.h"
-#include "JavaCommon.h"
#include "Application.h"
+#include "JavaCommon.h"
#include "minecraft/auth/AccountList.h"
#include "FileSystem.h"
#include "java/JavaInstallList.h"
#include "java/JavaUtils.h"
-InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent)
+InstanceSettingsPage::InstanceSettingsPage(BaseInstance* inst, QWidget* parent)
: QWidget(parent), ui(new Ui::InstanceSettingsPage), m_instance(inst)
{
m_settings = inst->settings();
@@ -78,7 +78,7 @@ InstanceSettingsPage::~InstanceSettingsPage()
void InstanceSettingsPage::globalSettingsButtonClicked(bool)
{
- switch(ui->settingsTabs->currentIndex()) {
+ switch (ui->settingsTabs->currentIndex()) {
case 0:
APPLICATION->ShowGlobalSettings(this, "java-settings");
return;
@@ -104,13 +104,10 @@ void InstanceSettingsPage::applySettings()
// Miscellaneous
bool miscellaneous = ui->miscellaneousSettingsBox->isChecked();
m_settings->set("OverrideMiscellaneous", miscellaneous);
- if (miscellaneous)
- {
+ if (miscellaneous) {
m_settings->set("CloseAfterLaunch", ui->closeAfterLaunchCheck->isChecked());
m_settings->set("QuitAfterGameStop", ui->quitAfterGameStopCheck->isChecked());
- }
- else
- {
+ } else {
m_settings->reset("CloseAfterLaunch");
m_settings->reset("QuitAfterGameStop");
}
@@ -118,14 +115,11 @@ void InstanceSettingsPage::applySettings()
// Console
bool console = ui->consoleSettingsBox->isChecked();
m_settings->set("OverrideConsole", console);
- if (console)
- {
+ if (console) {
m_settings->set("ShowConsole", ui->showConsoleCheck->isChecked());
m_settings->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked());
m_settings->set("ShowConsoleOnError", ui->showConsoleErrorCheck->isChecked());
- }
- else
- {
+ } else {
m_settings->reset("ShowConsole");
m_settings->reset("AutoCloseConsole");
m_settings->reset("ShowConsoleOnError");
@@ -134,14 +128,11 @@ void InstanceSettingsPage::applySettings()
// Window Size
bool window = ui->windowSizeGroupBox->isChecked();
m_settings->set("OverrideWindow", window);
- if (window)
- {
+ if (window) {
m_settings->set("LaunchMaximized", ui->maximizedCheckBox->isChecked());
m_settings->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
m_settings->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
- }
- else
- {
+ } else {
m_settings->reset("LaunchMaximized");
m_settings->reset("MinecraftWinWidth");
m_settings->reset("MinecraftWinHeight");
@@ -150,24 +141,18 @@ void InstanceSettingsPage::applySettings()
// Memory
bool memory = ui->memoryGroupBox->isChecked();
m_settings->set("OverrideMemory", memory);
- if (memory)
- {
+ if (memory) {
int min = ui->minMemSpinBox->value();
int max = ui->maxMemSpinBox->value();
- if(min < max)
- {
+ if (min < max) {
m_settings->set("MinMemAlloc", min);
m_settings->set("MaxMemAlloc", max);
- }
- else
- {
+ } else {
m_settings->set("MinMemAlloc", max);
m_settings->set("MaxMemAlloc", min);
}
m_settings->set("PermGen", ui->permGenSpinBox->value());
- }
- else
- {
+ } else {
m_settings->reset("MinMemAlloc");
m_settings->reset("MaxMemAlloc");
m_settings->reset("PermGen");
@@ -176,13 +161,10 @@ void InstanceSettingsPage::applySettings()
// Java Install Settings
bool javaInstall = ui->javaSettingsGroupBox->isChecked();
m_settings->set("OverrideJavaLocation", javaInstall);
- if (javaInstall)
- {
+ if (javaInstall) {
m_settings->set("JavaPath", ui->javaPathTextBox->text());
m_settings->set("IgnoreJavaCompatibility", ui->skipCompatibilityCheckbox->isChecked());
- }
- else
- {
+ } else {
m_settings->reset("JavaPath");
m_settings->reset("IgnoreJavaCompatibility");
}
@@ -190,12 +172,9 @@ void InstanceSettingsPage::applySettings()
// Java arguments
bool javaArgs = ui->javaArgumentsGroupBox->isChecked();
m_settings->set("OverrideJavaArgs", javaArgs);
- if(javaArgs)
- {
+ if (javaArgs) {
m_settings->set("JvmArgs", ui->jvmArgsTextBox->toPlainText().replace("\n", " "));
- }
- else
- {
+ } else {
m_settings->reset("JvmArgs");
}
@@ -205,14 +184,11 @@ void InstanceSettingsPage::applySettings()
// Custom Commands
bool custcmd = ui->customCommands->checked();
m_settings->set("OverrideCommands", custcmd);
- if (custcmd)
- {
+ if (custcmd) {
m_settings->set("PreLaunchCommand", ui->customCommands->prelaunchCommand());
m_settings->set("WrapperCommand", ui->customCommands->wrapperCommand());
m_settings->set("PostExitCommand", ui->customCommands->postexitCommand());
- }
- else
- {
+ } else {
m_settings->reset("PreLaunchCommand");
m_settings->reset("WrapperCommand");
m_settings->reset("PostExitCommand");
@@ -221,13 +197,10 @@ void InstanceSettingsPage::applySettings()
// Workarounds
bool workarounds = ui->nativeWorkaroundsGroupBox->isChecked();
m_settings->set("OverrideNativeWorkarounds", workarounds);
- if(workarounds)
- {
+ if (workarounds) {
m_settings->set("UseNativeOpenAL", ui->useNativeOpenALCheck->isChecked());
m_settings->set("UseNativeGLFW", ui->useNativeGLFWCheck->isChecked());
- }
- else
- {
+ } else {
m_settings->reset("UseNativeOpenAL");
m_settings->reset("UseNativeGLFW");
}
@@ -235,14 +208,11 @@ void InstanceSettingsPage::applySettings()
// Performance
bool performance = ui->perfomanceGroupBox->isChecked();
m_settings->set("OverridePerformance", performance);
- if(performance)
- {
+ if (performance) {
m_settings->set("EnableFeralGamemode", ui->enableFeralGamemodeCheck->isChecked());
m_settings->set("EnableMangoHud", ui->enableMangoHud->isChecked());
m_settings->set("UseDiscreteGpu", ui->useDiscreteGpuCheck->isChecked());
- }
- else
- {
+ } else {
m_settings->reset("EnableFeralGamemode");
m_settings->reset("EnableMangoHud");
m_settings->reset("UseDiscreteGpu");
@@ -251,13 +221,10 @@ void InstanceSettingsPage::applySettings()
// Game time
bool gameTime = ui->gameTimeGroupBox->isChecked();
m_settings->set("OverrideGameTime", gameTime);
- if (gameTime)
- {
+ if (gameTime) {
m_settings->set("ShowGameTime", ui->showGameTime->isChecked());
m_settings->set("RecordGameTime", ui->recordGameTime->isChecked());
- }
- else
- {
+ } else {
m_settings->reset("ShowGameTime");
m_settings->reset("RecordGameTime");
}
@@ -265,12 +232,9 @@ void InstanceSettingsPage::applySettings()
// Join server on launch
bool joinServerOnLaunch = ui->serverJoinGroupBox->isChecked();
m_settings->set("JoinServerOnLaunch", joinServerOnLaunch);
- if (joinServerOnLaunch)
- {
+ if (joinServerOnLaunch) {
m_settings->set("JoinServerOnLaunchAddress", ui->serverJoinAddress->text());
- }
- else
- {
+ } else {
m_settings->reset("JoinServerOnLaunchAddress");
}
@@ -316,13 +280,10 @@ void InstanceSettingsPage::loadSettings()
ui->memoryGroupBox->setChecked(m_settings->get("OverrideMemory").toBool());
int min = m_settings->get("MinMemAlloc").toInt();
int max = m_settings->get("MaxMemAlloc").toInt();
- if(min < max)
- {
+ if (min < max) {
ui->minMemSpinBox->setValue(min);
ui->maxMemSpinBox->setValue(max);
- }
- else
- {
+ } else {
ui->minMemSpinBox->setValue(max);
ui->maxMemSpinBox->setValue(min);
}
@@ -332,7 +293,6 @@ void InstanceSettingsPage::loadSettings()
ui->labelPermGen->setVisible(permGenVisible);
ui->labelPermgenNote->setVisible(permGenVisible);
-
// Java Settings
bool overrideJava = m_settings->get("OverrideJava").toBool();
bool overrideLocation = m_settings->get("OverrideJavaLocation").toBool() || overrideJava;
@@ -346,13 +306,8 @@ void InstanceSettingsPage::loadSettings()
ui->jvmArgsTextBox->setPlainText(m_settings->get("JvmArgs").toString());
// Custom commands
- ui->customCommands->initialize(
- true,
- m_settings->get("OverrideCommands").toBool(),
- m_settings->get("PreLaunchCommand").toString(),
- m_settings->get("WrapperCommand").toString(),
- m_settings->get("PostExitCommand").toString()
- );
+ ui->customCommands->initialize(true, m_settings->get("OverrideCommands").toBool(), m_settings->get("PreLaunchCommand").toString(),
+ m_settings->get("WrapperCommand").toString(), m_settings->get("PostExitCommand").toString());
// Workarounds
ui->nativeWorkaroundsGroupBox->setChecked(m_settings->get("OverrideNativeWorkarounds").toBool());
@@ -408,8 +363,7 @@ void InstanceSettingsPage::on_javaDetectBtn_clicked()
vselect.setResizeOn(2);
vselect.exec();
- if (vselect.result() == QDialog::Accepted && vselect.selectedVersion())
- {
+ if (vselect.result() == QDialog::Accepted && vselect.selectedVersion()) {
java = std::dynamic_pointer_cast<JavaInstall>(vselect.selectedVersion());
ui->javaPathTextBox->setText(java->path);
bool visible = java->id.requiresPermGen() && m_settings->get("OverrideMemory").toBool();
@@ -425,15 +379,13 @@ void InstanceSettingsPage::on_javaBrowseBtn_clicked()
QString raw_path = QFileDialog::getOpenFileName(this, tr("Find Java executable"));
// do not allow current dir - it's dirty. Do not allow dirs that don't exist
- if(raw_path.isEmpty())
- {
+ if (raw_path.isEmpty()) {
return;
}
QString cooked_path = FS::NormalizePath(raw_path);
QFileInfo javaInfo(cooked_path);
- if(!javaInfo.exists() || !javaInfo.isExecutable())
- {
+ if (!javaInfo.exists() || !javaInfo.isExecutable()) {
return;
}
ui->javaPathTextBox->setText(cooked_path);
@@ -447,13 +399,11 @@ void InstanceSettingsPage::on_javaBrowseBtn_clicked()
void InstanceSettingsPage::on_javaTestBtn_clicked()
{
- if(checker)
- {
+ if (checker) {
return;
}
- checker.reset(new JavaCommon::TestCheck(
- this, ui->javaPathTextBox->text(), ui->jvmArgsTextBox->toPlainText().replace("\n", " "),
- ui->minMemSpinBox->value(), ui->maxMemSpinBox->value(), ui->permGenSpinBox->value()));
+ checker.reset(new JavaCommon::TestCheck(this, ui->javaPathTextBox->text(), ui->jvmArgsTextBox->toPlainText().replace("\n", " "),
+ ui->minMemSpinBox->value(), ui->maxMemSpinBox->value(), ui->permGenSpinBox->value()));
connect(checker.get(), SIGNAL(finished()), SLOT(checkerFinished()));
checker->run();
}
@@ -470,7 +420,6 @@ void InstanceSettingsPage::updateAccountsMenu()
if (i == accountIndex)
ui->instanceAccountSelector->setCurrentIndex(i);
}
-
}
QIcon InstanceSettingsPage::getFaceForAccount(MinecraftAccountPtr account)
@@ -491,7 +440,7 @@ void InstanceSettingsPage::changeInstanceAccount(int index)
}
}
-void InstanceSettingsPage::on_maxMemSpinBox_valueChanged(int i)
+void InstanceSettingsPage::on_maxMemSpinBox_valueChanged([[maybe_unused]] int i)
{
updateThresholds();
}
diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.h b/launcher/ui/pages/instance/InstanceSettingsPage.h
index 036b4181..21ecbaf8 100644
--- a/launcher/ui/pages/instance/InstanceSettingsPage.h
+++ b/launcher/ui/pages/instance/InstanceSettingsPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -46,35 +46,21 @@
#include "ui/pages/BasePage.h"
class JavaChecker;
-namespace Ui
-{
+namespace Ui {
class InstanceSettingsPage;
}
-class InstanceSettingsPage : public QWidget, public BasePage
-{
+class InstanceSettingsPage : public QWidget, public BasePage {
Q_OBJECT
-public:
- explicit InstanceSettingsPage(BaseInstance *inst, QWidget *parent = 0);
+ public:
+ explicit InstanceSettingsPage(BaseInstance* inst, QWidget* parent = 0);
virtual ~InstanceSettingsPage();
- virtual QString displayName() const override
- {
- return tr("Settings");
- }
- virtual QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("instance-settings");
- }
- virtual QString id() const override
- {
- return "settings";
- }
+ virtual QString displayName() const override { return tr("Settings"); }
+ virtual QIcon icon() const override { return APPLICATION->getThemedIcon("instance-settings"); }
+ virtual QString id() const override { return "settings"; }
virtual bool apply() override;
- virtual QString helpPage() const override
- {
- return "Instance-settings";
- }
+ virtual QString helpPage() const override { return "Instance-settings"; }
void retranslate() override;
void updateThresholds();
@@ -96,9 +82,9 @@ public:
QIcon getFaceForAccount(MinecraftAccountPtr account);
void changeInstanceAccount(int index);
-private:
- Ui::InstanceSettingsPage *ui;
- BaseInstance *m_instance;
+ private:
+ Ui::InstanceSettingsPage* ui;
+ BaseInstance* m_instance;
SettingsObjectPtr m_settings;
unique_qobject_ptr<JavaCommon::TestCheck> checker;
};
diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.ui b/launcher/ui/pages/instance/InstanceSettingsPage.ui
index 323890b9..380d8c88 100644
--- a/launcher/ui/pages/instance/InstanceSettingsPage.ui
+++ b/launcher/ui/pages/instance/InstanceSettingsPage.ui
@@ -61,31 +61,7 @@
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0" colspan="3">
- <widget class="QLineEdit" name="javaPathTextBox"/>
- </item>
- <item row="1" column="0">
- <widget class="QPushButton" name="javaDetectBtn">
- <property name="text">
- <string>Auto-detect...</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QPushButton" name="javaBrowseBtn">
- <property name="text">
- <string>Browse...</string>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QPushButton" name="javaTestBtn">
- <property name="text">
- <string>Test</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
+ <item row="4" column="0">
<widget class="QCheckBox" name="skipCompatibilityCheckbox">
<property name="toolTip">
<string>If enabled, the launcher will not check if an instance is compatible with the selected Java version.</string>
@@ -95,6 +71,38 @@
</property>
</widget>
</item>
+ <item row="1" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="javaPathTextBox"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="javaBrowseBtn">
+ <property name="text">
+ <string>Browse</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QPushButton" name="javaDetectBtn">
+ <property name="text">
+ <string>Auto-detect...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="javaTestBtn">
+ <property name="text">
+ <string>Test</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
</item>
@@ -116,7 +124,7 @@
<item row="2" column="0">
<widget class="QLabel" name="labelPermGen">
<property name="text">
- <string notr="true">PermGen:</string>
+ <string>PermGen:</string>
</property>
</widget>
</item>
@@ -699,10 +707,6 @@
<tabstop>openGlobalJavaSettingsButton</tabstop>
<tabstop>settingsTabs</tabstop>
<tabstop>javaSettingsGroupBox</tabstop>
- <tabstop>javaPathTextBox</tabstop>
- <tabstop>javaDetectBtn</tabstop>
- <tabstop>javaBrowseBtn</tabstop>
- <tabstop>javaTestBtn</tabstop>
<tabstop>memoryGroupBox</tabstop>
<tabstop>minMemSpinBox</tabstop>
<tabstop>maxMemSpinBox</tabstop>
diff --git a/launcher/ui/pages/instance/LogPage.cpp b/launcher/ui/pages/instance/LogPage.cpp
index 639cd711..8e1e5376 100644
--- a/launcher/ui/pages/instance/LogPage.cpp
+++ b/launcher/ui/pages/instance/LogPage.cpp
@@ -47,56 +47,42 @@
#include "launch/LaunchTask.h"
#include "settings/Setting.h"
-#include "ui/GuiUtil.h"
#include "ui/ColorCache.h"
+#include "ui/GuiUtil.h"
#include <BuildConfig.h>
-class LogFormatProxyModel : public QIdentityProxyModel
-{
-public:
- LogFormatProxyModel(QObject* parent = nullptr) : QIdentityProxyModel(parent)
- {
- }
- QVariant data(const QModelIndex &index, int role) const override
+class LogFormatProxyModel : public QIdentityProxyModel {
+ public:
+ LogFormatProxyModel(QObject* parent = nullptr) : QIdentityProxyModel(parent) {}
+ QVariant data(const QModelIndex& index, int role) const override
{
- switch(role)
- {
+ switch (role) {
case Qt::FontRole:
return m_font;
- case Qt::ForegroundRole:
- {
- MessageLevel::Enum level = (MessageLevel::Enum) QIdentityProxyModel::data(index, LogModel::LevelRole).toInt();
+ case Qt::ForegroundRole: {
+ MessageLevel::Enum level = (MessageLevel::Enum)QIdentityProxyModel::data(index, LogModel::LevelRole).toInt();
return m_colors->getFront(level);
}
- case Qt::BackgroundRole:
- {
- MessageLevel::Enum level = (MessageLevel::Enum) QIdentityProxyModel::data(index, LogModel::LevelRole).toInt();
+ case Qt::BackgroundRole: {
+ MessageLevel::Enum level = (MessageLevel::Enum)QIdentityProxyModel::data(index, LogModel::LevelRole).toInt();
return m_colors->getBack(level);
}
default:
return QIdentityProxyModel::data(index, role);
- }
+ }
}
- void setFont(QFont font)
- {
- m_font = font;
- }
+ void setFont(QFont font) { m_font = font; }
- void setColors(LogColorCache* colors)
- {
- m_colors.reset(colors);
- }
+ void setColors(LogColorCache* colors) { m_colors.reset(colors); }
- QModelIndex find(const QModelIndex &start, const QString &value, bool reverse) const
+ QModelIndex find(const QModelIndex& start, const QString& value, bool reverse) const
{
QModelIndex parentIndex = parent(start);
- auto compare = [&](int r) -> QModelIndex
- {
+ auto compare = [&](int r) -> QModelIndex {
QModelIndex idx = index(r, start.column(), parentIndex);
- if (!idx.isValid() || idx == start)
- {
+ if (!idx.isValid() || idx == start) {
return QModelIndex();
}
QVariant v = data(idx, Qt::DisplayRole);
@@ -105,35 +91,28 @@ public:
return idx;
return QModelIndex();
};
- if(reverse)
- {
+ if (reverse) {
int from = start.row();
int to = 0;
- for (int i = 0; i < 2; ++i)
- {
- for (int r = from; (r >= to); --r)
- {
+ for (int i = 0; i < 2; ++i) {
+ for (int r = from; (r >= to); --r) {
auto idx = compare(r);
- if(idx.isValid())
+ if (idx.isValid())
return idx;
}
// prepare for the next iteration
from = rowCount() - 1;
to = start.row();
}
- }
- else
- {
+ } else {
int from = start.row();
int to = rowCount(parentIndex);
- for (int i = 0; i < 2; ++i)
- {
- for (int r = from; (r < to); ++r)
- {
+ for (int i = 0; i < 2; ++i) {
+ for (int r = from; (r < to); ++r) {
auto idx = compare(r);
- if(idx.isValid())
+ if (idx.isValid())
return idx;
}
// prepare for the next iteration
@@ -143,13 +122,13 @@ public:
}
return QModelIndex();
}
-private:
+
+ private:
QFont m_font;
std::unique_ptr<LogColorCache> m_colors;
};
-LogPage::LogPage(InstancePtr instance, QWidget *parent)
- : QWidget(parent), ui(new Ui::LogPage), m_instance(instance)
+LogPage::LogPage(InstancePtr instance, QWidget* parent) : QWidget(parent), ui(new Ui::LogPage), m_instance(instance)
{
ui->setupUi(this);
ui->tabWidget->tabBar()->hide();
@@ -167,8 +146,7 @@ LogPage::LogPage(InstancePtr instance, QWidget *parent)
QString fontFamily = APPLICATION->settings()->get("ConsoleFont").toString();
bool conversionOk = false;
int fontSize = APPLICATION->settings()->get("ConsoleFontSize").toInt(&conversionOk);
- if(!conversionOk)
- {
+ if (!conversionOk) {
fontSize = 11;
}
m_proxy->setFont(QFont(fontFamily, fontSize));
@@ -179,8 +157,7 @@ LogPage::LogPage(InstancePtr instance, QWidget *parent)
// set up instance and launch process recognition
{
auto launchTask = m_instance->getLaunchTask();
- if(launchTask)
- {
+ if (launchTask) {
setInstanceLaunchTaskChanged(launchTask, true);
}
connect(m_instance.get(), &BaseInstance::launchTaskChanged, this, &LogPage::onInstanceLaunchTaskChanged);
@@ -202,30 +179,23 @@ LogPage::~LogPage()
void LogPage::modelStateToUI()
{
- if(m_model->wrapLines())
- {
+ if (m_model->wrapLines()) {
ui->text->setWordWrap(true);
ui->wrapCheckbox->setCheckState(Qt::Checked);
- }
- else
- {
+ } else {
ui->text->setWordWrap(false);
ui->wrapCheckbox->setCheckState(Qt::Unchecked);
}
- if(m_model->suspended())
- {
+ if (m_model->suspended()) {
ui->trackLogCheckbox->setCheckState(Qt::Unchecked);
- }
- else
- {
+ } else {
ui->trackLogCheckbox->setCheckState(Qt::Checked);
}
}
void LogPage::UIToModelState()
{
- if(!m_model)
- {
+ if (!m_model) {
return;
}
m_model->setLineWrap(ui->wrapCheckbox->checkState() == Qt::Checked);
@@ -235,21 +205,15 @@ void LogPage::UIToModelState()
void LogPage::setInstanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> proc, bool initial)
{
m_process = proc;
- if(m_process)
- {
+ if (m_process) {
m_model = proc->getLogModel();
m_proxy->setSourceModel(m_model.get());
- if(initial)
- {
+ if (initial) {
modelStateToUI();
- }
- else
- {
+ } else {
UIToModelState();
}
- }
- else
- {
+ } else {
m_proxy->setSourceModel(nullptr);
m_model.reset();
}
@@ -272,34 +236,25 @@ bool LogPage::shouldDisplay() const
void LogPage::on_btnPaste_clicked()
{
- if(!m_model)
+ if (!m_model)
return;
- //FIXME: turn this into a proper task and move the upload logic out of GuiUtil!
- m_model->append(
- MessageLevel::Launcher,
- QString("Log upload triggered at: %1").arg(
- QDateTime::currentDateTime().toString(Qt::RFC2822Date)
- )
- );
+ // FIXME: turn this into a proper task and move the upload logic out of GuiUtil!
+ m_model->append(MessageLevel::Launcher,
+ QString("Log upload triggered at: %1").arg(QDateTime::currentDateTime().toString(Qt::RFC2822Date)));
auto url = GuiUtil::uploadPaste(tr("Minecraft Log"), m_model->toPlainText(), this);
- if(!url.has_value())
- {
+ if (!url.has_value()) {
m_model->append(MessageLevel::Error, QString("Log upload canceled"));
- }
- else if (url->isNull())
- {
+ } else if (url->isNull()) {
m_model->append(MessageLevel::Error, QString("Log upload failed!"));
- }
- else
- {
+ } else {
m_model->append(MessageLevel::Launcher, QString("Log uploaded to: %1").arg(url.value()));
}
}
void LogPage::on_btnCopy_clicked()
{
- if(!m_model)
+ if (!m_model)
return;
m_model->append(MessageLevel::Launcher, QString("Clipboard copy at: %1").arg(QDateTime::currentDateTime().toString(Qt::RFC2822Date)));
GuiUtil::setClipboardText(m_model->toPlainText());
@@ -307,7 +262,7 @@ void LogPage::on_btnCopy_clicked()
void LogPage::on_btnClear_clicked()
{
- if(!m_model)
+ if (!m_model)
return;
m_model->clear();
m_container->refreshContainer();
@@ -320,7 +275,7 @@ void LogPage::on_btnBottom_clicked()
void LogPage::on_trackLogCheckbox_clicked(bool checked)
{
- if(!m_model)
+ if (!m_model)
return;
m_model->suspend(!checked);
}
@@ -328,7 +283,7 @@ void LogPage::on_trackLogCheckbox_clicked(bool checked)
void LogPage::on_wrapCheckbox_clicked(bool checked)
{
ui->text->setWordWrap(checked);
- if(!m_model)
+ if (!m_model)
return;
m_model->setLineWrap(checked);
}
@@ -353,8 +308,7 @@ void LogPage::findPreviousActivated()
void LogPage::findActivated()
{
// focus the search bar if it doesn't have focus
- if (!ui->searchBar->hasFocus())
- {
+ if (!ui->searchBar->hasFocus()) {
ui->searchBar->setFocus();
ui->searchBar->selectAll();
}
diff --git a/launcher/ui/pages/instance/LogPage.h b/launcher/ui/pages/instance/LogPage.h
index f6fe87c4..6c259891 100644
--- a/launcher/ui/pages/instance/LogPage.h
+++ b/launcher/ui/pages/instance/LogPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -37,46 +37,32 @@
#include <QWidget>
+#include <Application.h>
#include "BaseInstance.h"
#include "launch/LaunchTask.h"
#include "ui/pages/BasePage.h"
-#include <Application.h>
-namespace Ui
-{
+namespace Ui {
class LogPage;
}
class QTextCharFormat;
class LogFormatProxyModel;
-class LogPage : public QWidget, public BasePage
-{
+class LogPage : public QWidget, public BasePage {
Q_OBJECT
-public:
- explicit LogPage(InstancePtr instance, QWidget *parent = 0);
+ public:
+ explicit LogPage(InstancePtr instance, QWidget* parent = 0);
virtual ~LogPage();
- virtual QString displayName() const override
- {
- return tr("Minecraft Log");
- }
- virtual QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("log");
- }
- virtual QString id() const override
- {
- return "console";
- }
+ virtual QString displayName() const override { return tr("Minecraft Log"); }
+ virtual QIcon icon() const override { return APPLICATION->getThemedIcon("log"); }
+ virtual QString id() const override { return "console"; }
virtual bool apply() override;
- virtual QString helpPage() const override
- {
- return "Minecraft-Logs";
- }
+ virtual QString helpPage() const override { return "Minecraft-Logs"; }
virtual bool shouldDisplay() const override;
void retranslate() override;
-private slots:
+ private slots:
void on_btnPaste_clicked();
void on_btnCopy_clicked();
void on_btnClear_clicked();
@@ -92,16 +78,16 @@ private slots:
void onInstanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> proc);
-private:
+ private:
void modelStateToUI();
void UIToModelState();
void setInstanceLaunchTaskChanged(shared_qobject_ptr<LaunchTask> proc, bool initial);
-private:
- Ui::LogPage *ui;
+ private:
+ Ui::LogPage* ui;
InstancePtr m_instance;
shared_qobject_ptr<LaunchTask> m_process;
- LogFormatProxyModel * m_proxy;
- shared_qobject_ptr <LogModel> m_model;
+ LogFormatProxyModel* m_proxy;
+ shared_qobject_ptr<LogModel> m_model;
};
diff --git a/launcher/ui/pages/instance/ManagedPackPage.cpp b/launcher/ui/pages/instance/ManagedPackPage.cpp
index 0fc0c986..8fdaf065 100644
--- a/launcher/ui/pages/instance/ManagedPackPage.cpp
+++ b/launcher/ui/pages/instance/ManagedPackPage.cpp
@@ -3,6 +3,9 @@
// SPDX-License-Identifier: GPL-3.0-only
#include "ManagedPackPage.h"
+#include <QDesktopServices>
+#include <QUrl>
+#include <QUrlQuery>
#include "ui_ManagedPackPage.h"
#include <QListView>
@@ -23,6 +26,8 @@
#include "ui/dialogs/CustomMessageBox.h"
#include "ui/dialogs/ProgressDialog.h"
+#include "net/ApiDownload.h"
+
/** This is just to override the combo box popup behavior so that the combo box doesn't take the whole screen.
* ... thanks Qt.
*/
@@ -103,6 +108,19 @@ ManagedPackPage::ManagedPackPage(BaseInstance* inst, InstanceWindow* instance_wi
// Pretend we're opening the page again
openedImpl();
});
+
+ connect(ui->changelogTextBrowser, &QTextBrowser::anchorClicked, this, [](const QUrl url) {
+ if (url.scheme().isEmpty()) {
+ auto querry =
+ QUrlQuery(url.query()).queryItemValue("remoteUrl", QUrl::FullyDecoded); // curseforge workaround for linkout?remoteUrl=
+ auto decoded = QUrl::fromPercentEncoding(querry.toUtf8());
+ auto newUrl = QUrl(decoded);
+ if (newUrl.isValid() && (newUrl.scheme() == "http" || newUrl.scheme() == "https"))
+ QDesktopServices ::openUrl(newUrl);
+ return;
+ }
+ QDesktopServices::openUrl(url);
+ });
}
ManagedPackPage::~ManagedPackPage()
@@ -226,7 +244,7 @@ void ModrinthManagedPackPage::parseManagedPack()
QString id = m_inst->getManagedPackID();
m_fetch_job->addNetAction(
- Net::Download::makeByteArray(QString("%1/project/%2/version").arg(BuildConfig.MODRINTH_PROD_URL, id), response));
+ Net::ApiDownload::makeByteArray(QString("%1/project/%2/version").arg(BuildConfig.MODRINTH_PROD_URL, id), response));
QObject::connect(m_fetch_job.get(), &NetJob::succeeded, this, [this, response, id] {
QJsonParseError parse_error{};
@@ -376,7 +394,7 @@ void FlameManagedPackPage::parseManagedPack()
QString id = m_inst->getManagedPackID();
- m_fetch_job->addNetAction(Net::Download::makeByteArray(QString("%1/mods/%2/files").arg(BuildConfig.FLAME_BASE_URL, id), response));
+ m_fetch_job->addNetAction(Net::ApiDownload::makeByteArray(QString("%1/mods/%2/files").arg(BuildConfig.FLAME_BASE_URL, id), response));
QObject::connect(m_fetch_job.get(), &NetJob::succeeded, this, [this, response, id] {
QJsonParseError parse_error{};
diff --git a/launcher/ui/pages/instance/ManagedPackPage.ui b/launcher/ui/pages/instance/ManagedPackPage.ui
index bbe44a94..05e91bbc 100644
--- a/launcher/ui/pages/instance/ManagedPackPage.ui
+++ b/launcher/ui/pages/instance/ManagedPackPage.ui
@@ -168,10 +168,13 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
- <widget class="QTextBrowser" name="changelogTextBrowser">
+ <widget class="ProjectDescriptionPage" name="changelogTextBrowser">
<property name="placeholderText">
<string>No changelog available for this version!</string>
</property>
+ <property name="openLinks">
+ <bool>false</bool>
+ </property>
</widget>
</item>
</layout>
@@ -188,6 +191,13 @@
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>ProjectDescriptionPage</class>
+ <extends>QTextBrowser</extends>
+ <header>ui/widgets/ProjectDescriptionPage.h</header>
+ </customwidget>
+ </customwidgets>
<resources/>
<connections/>
</ui>
diff --git a/launcher/ui/pages/instance/ModFolderPage.cpp b/launcher/ui/pages/instance/ModFolderPage.cpp
index cef292bd..0f5e29cb 100644
--- a/launcher/ui/pages/instance/ModFolderPage.cpp
+++ b/launcher/ui/pages/instance/ModFolderPage.cpp
@@ -127,7 +127,7 @@ bool ModFolderPage::shouldDisplay() const
return true;
}
-bool ModFolderPage::onSelectionChanged(const QModelIndex& current, const QModelIndex& previous)
+bool ModFolderPage::onSelectionChanged(const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
auto sourceCurrent = m_filterModel->mapToSource(current);
int row = sourceCurrent.row();
diff --git a/launcher/ui/pages/instance/NotesPage.cpp b/launcher/ui/pages/instance/NotesPage.cpp
index 95a9fad2..a86369f8 100644
--- a/launcher/ui/pages/instance/NotesPage.cpp
+++ b/launcher/ui/pages/instance/NotesPage.cpp
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -34,11 +34,10 @@
*/
#include "NotesPage.h"
-#include "ui_NotesPage.h"
#include <QTabBar>
+#include "ui_NotesPage.h"
-NotesPage::NotesPage(BaseInstance *inst, QWidget *parent)
- : QWidget(parent), ui(new Ui::NotesPage), m_inst(inst)
+NotesPage::NotesPage(BaseInstance* inst, QWidget* parent) : QWidget(parent), ui(new Ui::NotesPage), m_inst(inst)
{
ui->setupUi(this);
ui->noteEditor->setText(m_inst->notes());
diff --git a/launcher/ui/pages/instance/NotesPage.h b/launcher/ui/pages/instance/NotesPage.h
index 80a7279b..3351d25f 100644
--- a/launcher/ui/pages/instance/NotesPage.h
+++ b/launcher/ui/pages/instance/NotesPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -37,45 +37,34 @@
#include <QWidget>
+#include <Application.h>
#include "BaseInstance.h"
#include "ui/pages/BasePage.h"
-#include <Application.h>
-namespace Ui
-{
+namespace Ui {
class NotesPage;
}
-class NotesPage : public QWidget, public BasePage
-{
+class NotesPage : public QWidget, public BasePage {
Q_OBJECT
-public:
- explicit NotesPage(BaseInstance *inst, QWidget *parent = 0);
+ public:
+ explicit NotesPage(BaseInstance* inst, QWidget* parent = 0);
virtual ~NotesPage();
- virtual QString displayName() const override
- {
- return tr("Notes");
- }
+ virtual QString displayName() const override { return tr("Notes"); }
virtual QIcon icon() const override
{
auto icon = APPLICATION->getThemedIcon("notes");
- if(icon.isNull())
+ if (icon.isNull())
icon = APPLICATION->getThemedIcon("news");
return icon;
}
- virtual QString id() const override
- {
- return "notes";
- }
+ virtual QString id() const override { return "notes"; }
virtual bool apply() override;
- virtual QString helpPage() const override
- {
- return "Notes";
- }
+ virtual QString helpPage() const override { return "Notes"; }
void retranslate() override;
-private:
- Ui::NotesPage *ui;
- BaseInstance *m_inst;
+ private:
+ Ui::NotesPage* ui;
+ BaseInstance* m_inst;
};
diff --git a/launcher/ui/pages/instance/OtherLogsPage.cpp b/launcher/ui/pages/instance/OtherLogsPage.cpp
index bbdd7324..ab5d9828 100644
--- a/launcher/ui/pages/instance/OtherLogsPage.cpp
+++ b/launcher/ui/pages/instance/OtherLogsPage.cpp
@@ -41,14 +41,13 @@
#include "ui/GuiUtil.h"
-#include "RecursiveFileSystemWatcher.h"
-#include <GZip.h>
#include <FileSystem.h>
+#include <GZip.h>
#include <QShortcut>
+#include "RecursiveFileSystemWatcher.h"
-OtherLogsPage::OtherLogsPage(QString path, IPathMatcher::Ptr fileFilter, QWidget *parent)
- : QWidget(parent), ui(new Ui::OtherLogsPage), m_path(path), m_fileFilter(fileFilter),
- m_watcher(new RecursiveFileSystemWatcher(this))
+OtherLogsPage::OtherLogsPage(QString path, IPathMatcher::Ptr fileFilter, QWidget* parent)
+ : QWidget(parent), ui(new Ui::OtherLogsPage), m_path(path), m_fileFilter(fileFilter), m_watcher(new RecursiveFileSystemWatcher(this))
{
ui->setupUi(this);
ui->tabWidget->tabBar()->hide();
@@ -94,21 +93,15 @@ void OtherLogsPage::populateSelectLogBox()
{
ui->selectLogBox->clear();
ui->selectLogBox->addItems(m_watcher->files());
- if (m_currentFile.isEmpty())
- {
+ if (m_currentFile.isEmpty()) {
setControlsEnabled(false);
ui->selectLogBox->setCurrentIndex(-1);
- }
- else
- {
+ } else {
const int index = ui->selectLogBox->findText(m_currentFile);
- if (index != -1)
- {
+ if (index != -1) {
ui->selectLogBox->setCurrentIndex(index);
setControlsEnabled(true);
- }
- else
- {
+ } else {
setControlsEnabled(false);
}
}
@@ -117,19 +110,15 @@ void OtherLogsPage::populateSelectLogBox()
void OtherLogsPage::on_selectLogBox_currentIndexChanged(const int index)
{
QString file;
- if (index != -1)
- {
+ if (index != -1) {
file = ui->selectLogBox->itemText(index);
}
- if (file.isEmpty() || !QFile::exists(FS::PathCombine(m_path, file)))
- {
+ if (file.isEmpty() || !QFile::exists(FS::PathCombine(m_path, file))) {
m_currentFile = QString();
ui->text->clear();
setControlsEnabled(false);
- }
- else
- {
+ } else {
m_currentFile = file;
on_btnReload_clicked();
setControlsEnabled(true);
@@ -138,64 +127,49 @@ void OtherLogsPage::on_selectLogBox_currentIndexChanged(const int index)
void OtherLogsPage::on_btnReload_clicked()
{
- if(m_currentFile.isEmpty())
- {
+ if (m_currentFile.isEmpty()) {
setControlsEnabled(false);
return;
}
QFile file(FS::PathCombine(m_path, m_currentFile));
- if (!file.open(QFile::ReadOnly))
- {
+ if (!file.open(QFile::ReadOnly)) {
setControlsEnabled(false);
- ui->btnReload->setEnabled(true); // allow reload
+ ui->btnReload->setEnabled(true); // allow reload
m_currentFile = QString();
- QMessageBox::critical(this, tr("Error"), tr("Unable to open %1 for reading: %2")
- .arg(m_currentFile, file.errorString()));
- }
- else
- {
- auto setPlainText = [&](const QString & text)
- {
+ QMessageBox::critical(this, tr("Error"), tr("Unable to open %1 for reading: %2").arg(m_currentFile, file.errorString()));
+ } else {
+ auto setPlainText = [&](const QString& text) {
QString fontFamily = APPLICATION->settings()->get("ConsoleFont").toString();
bool conversionOk = false;
int fontSize = APPLICATION->settings()->get("ConsoleFontSize").toInt(&conversionOk);
- if(!conversionOk)
- {
+ if (!conversionOk) {
fontSize = 11;
}
- QTextDocument *doc = ui->text->document();
+ QTextDocument* doc = ui->text->document();
doc->setDefaultFont(QFont(fontFamily, fontSize));
ui->text->setPlainText(text);
};
- auto showTooBig = [&]()
- {
- setPlainText(
- tr("The file (%1) is too big. You may want to open it in a viewer optimized "
- "for large files.").arg(file.fileName()));
+ auto showTooBig = [&]() {
+ setPlainText(tr("The file (%1) is too big. You may want to open it in a viewer optimized "
+ "for large files.")
+ .arg(file.fileName()));
};
- if(file.size() > (1024ll * 1024ll * 12ll))
- {
+ if (file.size() > (1024ll * 1024ll * 12ll)) {
showTooBig();
return;
}
QString content;
- if(file.fileName().endsWith(".gz"))
- {
+ if (file.fileName().endsWith(".gz")) {
QByteArray temp;
- if(!GZip::unzip(file.readAll(), temp))
- {
- setPlainText(
- tr("The file (%1) is not readable.").arg(file.fileName()));
+ if (!GZip::unzip(file.readAll(), temp)) {
+ setPlainText(tr("The file (%1) is not readable.").arg(file.fileName()));
return;
}
content = QString::fromUtf8(temp);
- }
- else
- {
+ } else {
content = QString::fromUtf8(file.readAll());
}
- if (content.size() >= 50000000ll)
- {
+ if (content.size() >= 50000000ll) {
showTooBig();
return;
}
@@ -215,8 +189,7 @@ void OtherLogsPage::on_btnCopy_clicked()
void OtherLogsPage::on_btnDelete_clicked()
{
- if(m_currentFile.isEmpty())
- {
+ if (m_currentFile.isEmpty()) {
setControlsEnabled(false);
return;
}
@@ -230,36 +203,27 @@ void OtherLogsPage::on_btnDelete_clicked()
}
QFile file(FS::PathCombine(m_path, m_currentFile));
- if (FS::trash(file.fileName()))
- {
+ if (FS::trash(file.fileName())) {
return;
}
- if (!file.remove())
- {
- QMessageBox::critical(this, tr("Error"), tr("Unable to delete %1: %2")
- .arg(m_currentFile, file.errorString()));
+ if (!file.remove()) {
+ QMessageBox::critical(this, tr("Error"), tr("Unable to delete %1: %2").arg(m_currentFile, file.errorString()));
}
}
-
-
void OtherLogsPage::on_btnClean_clicked()
{
auto toDelete = m_watcher->files();
- if(toDelete.isEmpty())
- {
+ if (toDelete.isEmpty()) {
return;
}
- QMessageBox *messageBox = new QMessageBox(this);
+ QMessageBox* messageBox = new QMessageBox(this);
messageBox->setWindowTitle(tr("Confirm Cleanup"));
- if(toDelete.size() > 5)
- {
+ if (toDelete.size() > 5) {
messageBox->setText(tr("Are you sure you want to delete all log files?"));
messageBox->setDetailedText(toDelete.join('\n'));
- }
- else
- {
+ } else {
messageBox->setText(tr("Are you sure you want to delete all these files?\n%1").arg(toDelete.join('\n')));
}
messageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
@@ -268,46 +232,37 @@ void OtherLogsPage::on_btnClean_clicked()
messageBox->setIcon(QMessageBox::Question);
messageBox->setTextInteractionFlags(Qt::TextBrowserInteraction);
- if (messageBox->exec() != QMessageBox::Ok)
- {
+ if (messageBox->exec() != QMessageBox::Ok) {
return;
}
QStringList failed;
- for(auto item: toDelete)
- {
+ for (auto item : toDelete) {
QFile file(FS::PathCombine(m_path, item));
- if (FS::trash(file.fileName()))
- {
+ if (FS::trash(file.fileName())) {
continue;
}
- if (!file.remove())
- {
+ if (!file.remove()) {
failed.push_back(item);
}
}
- if(!failed.empty())
- {
- QMessageBox *messageBox = new QMessageBox(this);
- messageBox->setWindowTitle(tr("Error"));
- if(failed.size() > 5)
- {
- messageBox->setText(tr("Couldn't delete some files!"));
- messageBox->setDetailedText(failed.join('\n'));
- }
- else
- {
- messageBox->setText(tr("Couldn't delete some files:\n%1").arg(failed.join('\n')));
+ if (!failed.empty()) {
+ QMessageBox* messageBoxFailure = new QMessageBox(this);
+ messageBoxFailure->setWindowTitle(tr("Error"));
+ if (failed.size() > 5) {
+ messageBoxFailure->setText(tr("Couldn't delete some files!"));
+ messageBoxFailure->setDetailedText(failed.join('\n'));
+ } else {
+ messageBoxFailure->setText(tr("Couldn't delete some files:\n%1").arg(failed.join('\n')));
}
- messageBox->setStandardButtons(QMessageBox::Ok);
- messageBox->setDefaultButton(QMessageBox::Ok);
- messageBox->setTextInteractionFlags(Qt::TextSelectableByMouse);
- messageBox->setIcon(QMessageBox::Critical);
- messageBox->setTextInteractionFlags(Qt::TextBrowserInteraction);
- messageBox->exec();
+ messageBoxFailure->setStandardButtons(QMessageBox::Ok);
+ messageBoxFailure->setDefaultButton(QMessageBox::Ok);
+ messageBoxFailure->setTextInteractionFlags(Qt::TextSelectableByMouse);
+ messageBoxFailure->setIcon(QMessageBox::Critical);
+ messageBoxFailure->setTextInteractionFlags(Qt::TextBrowserInteraction);
+ messageBoxFailure->exec();
}
}
-
void OtherLogsPage::setControlsEnabled(const bool enabled)
{
ui->btnReload->setEnabled(enabled);
@@ -319,7 +274,7 @@ void OtherLogsPage::setControlsEnabled(const bool enabled)
}
// FIXME: HACK, use LogView instead?
-static void findNext(QPlainTextEdit * _this, const QString& what, bool reverse)
+static void findNext(QPlainTextEdit* _this, const QString& what, bool reverse)
{
_this->find(what, reverse ? QTextDocument::FindFlag::FindBackward : QTextDocument::FindFlag(0));
}
@@ -344,8 +299,7 @@ void OtherLogsPage::findPreviousActivated()
void OtherLogsPage::findActivated()
{
// focus the search bar if it doesn't have focus
- if (!ui->searchBar->hasFocus())
- {
+ if (!ui->searchBar->hasFocus()) {
ui->searchBar->setFocus();
ui->searchBar->selectAll();
}
diff --git a/launcher/ui/pages/instance/OtherLogsPage.h b/launcher/ui/pages/instance/OtherLogsPage.h
index 95591638..4b3b122b 100644
--- a/launcher/ui/pages/instance/OtherLogsPage.h
+++ b/launcher/ui/pages/instance/OtherLogsPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -37,47 +37,33 @@
#include <QWidget>
-#include "ui/pages/BasePage.h"
#include <Application.h>
#include <pathmatcher/IPathMatcher.h>
+#include "ui/pages/BasePage.h"
-namespace Ui
-{
+namespace Ui {
class OtherLogsPage;
}
class RecursiveFileSystemWatcher;
-class OtherLogsPage : public QWidget, public BasePage
-{
+class OtherLogsPage : public QWidget, public BasePage {
Q_OBJECT
-public:
- explicit OtherLogsPage(QString path, IPathMatcher::Ptr fileFilter, QWidget *parent = 0);
+ public:
+ explicit OtherLogsPage(QString path, IPathMatcher::Ptr fileFilter, QWidget* parent = 0);
~OtherLogsPage();
- QString id() const override
- {
- return "logs";
- }
- QString displayName() const override
- {
- return tr("Other logs");
- }
- QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("log");
- }
- QString helpPage() const override
- {
- return "Minecraft-Logs";
- }
+ QString id() const override { return "logs"; }
+ QString displayName() const override { return tr("Other logs"); }
+ QIcon icon() const override { return APPLICATION->getThemedIcon("log"); }
+ QString helpPage() const override { return "Minecraft-Logs"; }
void retranslate() override;
void openedImpl() override;
void closedImpl() override;
-private slots:
+ private slots:
void populateSelectLogBox();
void on_selectLogBox_currentIndexChanged(const int index);
void on_btnReload_clicked();
@@ -91,13 +77,13 @@ private slots:
void findNextActivated();
void findPreviousActivated();
-private:
+ private:
void setControlsEnabled(const bool enabled);
-private:
- Ui::OtherLogsPage *ui;
+ private:
+ Ui::OtherLogsPage* ui;
QString m_path;
QString m_currentFile;
IPathMatcher::Ptr m_fileFilter;
- RecursiveFileSystemWatcher *m_watcher;
+ RecursiveFileSystemWatcher* m_watcher;
};
diff --git a/launcher/ui/pages/instance/ResourcePackPage.cpp b/launcher/ui/pages/instance/ResourcePackPage.cpp
index 12b371df..26c14ca4 100644
--- a/launcher/ui/pages/instance/ResourcePackPage.cpp
+++ b/launcher/ui/pages/instance/ResourcePackPage.cpp
@@ -55,7 +55,7 @@ ResourcePackPage::ResourcePackPage(MinecraftInstance* instance, std::shared_ptr<
ui->actionViewConfigs->setVisible(false);
}
-bool ResourcePackPage::onSelectionChanged(const QModelIndex& current, const QModelIndex& previous)
+bool ResourcePackPage::onSelectionChanged(const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
auto sourceCurrent = m_filterModel->mapToSource(current);
int row = sourceCurrent.row();
diff --git a/launcher/ui/pages/instance/ResourcePackPage.h b/launcher/ui/pages/instance/ResourcePackPage.h
index b04aa2e9..cb84ca96 100644
--- a/launcher/ui/pages/instance/ResourcePackPage.h
+++ b/launcher/ui/pages/instance/ResourcePackPage.h
@@ -42,11 +42,10 @@
#include "minecraft/mod/ResourcePackFolderModel.h"
-class ResourcePackPage : public ExternalResourcesPage
-{
+class ResourcePackPage : public ExternalResourcesPage {
Q_OBJECT
-public:
- explicit ResourcePackPage(MinecraftInstance *instance, std::shared_ptr<ResourcePackFolderModel> model, QWidget *parent = 0);
+ public:
+ explicit ResourcePackPage(MinecraftInstance* instance, std::shared_ptr<ResourcePackFolderModel> model, QWidget* parent = 0);
QString displayName() const override { return tr("Resource packs"); }
QIcon icon() const override { return APPLICATION->getThemedIcon("resourcepacks"); }
@@ -55,12 +54,10 @@ public:
virtual bool shouldDisplay() const override
{
- return !m_instance->traits().contains("no-texturepacks") &&
- !m_instance->traits().contains("texturepacks");
+ return !m_instance->traits().contains("no-texturepacks") && !m_instance->traits().contains("texturepacks");
}
public slots:
bool onSelectionChanged(const QModelIndex& current, const QModelIndex& previous) override;
void downloadRPs();
};
-
diff --git a/launcher/ui/pages/instance/ScreenshotsPage.cpp b/launcher/ui/pages/instance/ScreenshotsPage.cpp
index bcce5f57..29c835fc 100644
--- a/launcher/ui/pages/instance/ScreenshotsPage.cpp
+++ b/launcher/ui/pages/instance/ScreenshotsPage.cpp
@@ -39,52 +39,50 @@
#include "BuildConfig.h"
#include "ui_ScreenshotsPage.h"
-#include <QModelIndex>
-#include <QMutableListIterator>
-#include <QMap>
-#include <QSet>
+#include <QClipboard>
+#include <QEvent>
#include <QFileIconProvider>
#include <QFileSystemModel>
-#include <QStyledItemDelegate>
-#include <QLineEdit>
-#include <QEvent>
-#include <QPainter>
-#include <QClipboard>
#include <QKeyEvent>
+#include <QLineEdit>
+#include <QMap>
#include <QMenu>
+#include <QModelIndex>
+#include <QMutableListIterator>
+#include <QPainter>
#include <QRegularExpression>
+#include <QSet>
+#include <QStyledItemDelegate>
#include <Application.h>
-#include "ui/dialogs/ProgressDialog.h"
#include "ui/dialogs/CustomMessageBox.h"
+#include "ui/dialogs/ProgressDialog.h"
#include "net/NetJob.h"
-#include "screenshots/ImgurUpload.h"
#include "screenshots/ImgurAlbumCreation.h"
+#include "screenshots/ImgurUpload.h"
#include "tasks/SequentialTask.h"
-#include "RWStorage.h"
-#include <FileSystem.h>
#include <DesktopServices.h>
+#include <FileSystem.h>
+#include "RWStorage.h"
typedef RWStorage<QString, QIcon> SharedIconCache;
typedef std::shared_ptr<SharedIconCache> SharedIconCachePtr;
-class ThumbnailingResult : public QObject
-{
+class ThumbnailingResult : public QObject {
Q_OBJECT
-public slots:
- inline void emitResultsReady(const QString &path) { emit resultsReady(path); }
- inline void emitResultsFailed(const QString &path) { emit resultsFailed(path); }
-signals:
- void resultsReady(const QString &path);
- void resultsFailed(const QString &path);
+ public slots:
+ inline void emitResultsReady(const QString& path) { emit resultsReady(path); }
+ inline void emitResultsFailed(const QString& path) { emit resultsFailed(path); }
+ signals:
+ void resultsReady(const QString& path);
+ void resultsFailed(const QString& path);
};
-class ThumbnailRunnable : public QRunnable
-{
-public:
+class ThumbnailRunnable : public QRunnable {
+ public:
ThumbnailRunnable(QString path, SharedIconCachePtr cache)
{
m_path = path;
@@ -129,57 +127,50 @@ public:
// this is about as elegant and well written as a bag of bricks with scribbles done by insane
// asylum patients.
-class FilterModel : public QIdentityProxyModel
-{
+class FilterModel : public QIdentityProxyModel {
Q_OBJECT
-public:
- explicit FilterModel(QObject *parent = 0) : QIdentityProxyModel(parent)
+ public:
+ explicit FilterModel(QObject* parent = 0) : QIdentityProxyModel(parent)
{
m_thumbnailingPool.setMaxThreadCount(4);
m_thumbnailCache = std::make_shared<SharedIconCache>();
m_thumbnailCache->add("placeholder", APPLICATION->getThemedIcon("screenshot-placeholder"));
connect(&watcher, SIGNAL(fileChanged(QString)), SLOT(fileChanged(QString)));
}
- virtual ~FilterModel() {
+ virtual ~FilterModel()
+ {
m_thumbnailingPool.clear();
if (!m_thumbnailingPool.waitForDone(500))
qDebug() << "Thumbnail pool took longer than 500ms to finish";
}
- virtual QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const
+ virtual QVariant data(const QModelIndex& proxyIndex, int role = Qt::DisplayRole) const
{
auto model = sourceModel();
if (!model)
return QVariant();
- if (role == Qt::DisplayRole || role == Qt::EditRole)
- {
+ if (role == Qt::DisplayRole || role == Qt::EditRole) {
QVariant result = sourceModel()->data(mapToSource(proxyIndex), role);
return result.toString().remove(QRegularExpression("\\.png$"));
}
- if (role == Qt::DecorationRole)
- {
- QVariant result =
- sourceModel()->data(mapToSource(proxyIndex), QFileSystemModel::FilePathRole);
+ if (role == Qt::DecorationRole) {
+ QVariant result = sourceModel()->data(mapToSource(proxyIndex), QFileSystemModel::FilePathRole);
QString filePath = result.toString();
QIcon temp;
- if (!watched.contains(filePath))
- {
- ((QFileSystemWatcher &)watcher).addPath(filePath);
- ((QSet<QString> &)watched).insert(filePath);
+ if (!watched.contains(filePath)) {
+ ((QFileSystemWatcher&)watcher).addPath(filePath);
+ ((QSet<QString>&)watched).insert(filePath);
}
- if (m_thumbnailCache->get(filePath, temp))
- {
+ if (m_thumbnailCache->get(filePath, temp)) {
return temp;
}
- if (!m_failed.contains(filePath))
- {
- ((FilterModel *)this)->thumbnailImage(filePath);
+ if (!m_failed.contains(filePath)) {
+ ((FilterModel*)this)->thumbnailImage(filePath);
}
return (m_thumbnailCache->get("placeholder"));
}
return sourceModel()->data(mapToSource(proxyIndex), role);
}
- virtual bool setData(const QModelIndex &index, const QVariant &value,
- int role = Qt::EditRole)
+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole)
{
auto model = sourceModel();
if (!model)
@@ -189,23 +180,21 @@ public:
// FIXME: this is a workaround for a bug in QFileSystemModel, where it doesn't
// sort after renames
{
- ((QFileSystemModel *)model)->setNameFilterDisables(true);
- ((QFileSystemModel *)model)->setNameFilterDisables(false);
+ ((QFileSystemModel*)model)->setNameFilterDisables(true);
+ ((QFileSystemModel*)model)->setNameFilterDisables(false);
}
return model->setData(mapToSource(index), value.toString() + ".png", role);
}
-private:
+ private:
void thumbnailImage(QString path)
{
auto runnable = new ThumbnailRunnable(path, m_thumbnailCache);
- connect(&(runnable->m_resultEmitter), SIGNAL(resultsReady(QString)),
- SLOT(thumbnailReady(QString)));
- connect(&(runnable->m_resultEmitter), SIGNAL(resultsFailed(QString)),
- SLOT(thumbnailFailed(QString)));
- ((QThreadPool &)m_thumbnailingPool).start(runnable);
+ connect(&(runnable->m_resultEmitter), SIGNAL(resultsReady(QString)), SLOT(thumbnailReady(QString)));
+ connect(&(runnable->m_resultEmitter), SIGNAL(resultsFailed(QString)), SLOT(thumbnailFailed(QString)));
+ ((QThreadPool&)m_thumbnailingPool).start(runnable);
}
-private slots:
+ private slots:
void thumbnailReady(QString path) { emit layoutChanged(); }
void thumbnailFailed(QString path) { m_failed.insert(path); }
void fileChanged(QString filepath)
@@ -219,7 +208,7 @@ private slots:
}
}
-private:
+ private:
SharedIconCachePtr m_thumbnailCache;
QThreadPool m_thumbnailingPool;
QSet<QString> m_failed;
@@ -227,18 +216,15 @@ private:
QFileSystemWatcher watcher;
};
-class CenteredEditingDelegate : public QStyledItemDelegate
-{
-public:
- explicit CenteredEditingDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {}
+class CenteredEditingDelegate : public QStyledItemDelegate {
+ public:
+ explicit CenteredEditingDelegate(QObject* parent = 0) : QStyledItemDelegate(parent) {}
virtual ~CenteredEditingDelegate() {}
- virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
- const QModelIndex &index) const
+ virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
auto widget = QStyledItemDelegate::createEditor(parent, option, index);
- auto foo = dynamic_cast<QLineEdit *>(widget);
- if (foo)
- {
+ auto foo = dynamic_cast<QLineEdit*>(widget);
+ if (foo) {
foo->setAlignment(Qt::AlignHCenter);
foo->setFrame(true);
foo->setMaximumWidth(192);
@@ -247,15 +233,14 @@ public:
}
};
-ScreenshotsPage::ScreenshotsPage(QString path, QWidget *parent)
- : QMainWindow(parent), ui(new Ui::ScreenshotsPage)
+ScreenshotsPage::ScreenshotsPage(QString path, QWidget* parent) : QMainWindow(parent), ui(new Ui::ScreenshotsPage)
{
m_model.reset(new QFileSystemModel());
m_filterModel.reset(new FilterModel());
m_filterModel->setSourceModel(m_model.get());
m_model->setFilter(QDir::Files);
m_model->setReadOnly(false);
- m_model->setNameFilters({"*.png"});
+ m_model->setNameFilters({ "*.png" });
m_model->setNameFilterDisables(false);
m_folder = path;
m_valid = FS::ensureFolderPathExists(m_folder);
@@ -278,31 +263,29 @@ ScreenshotsPage::ScreenshotsPage(QString path, QWidget *parent)
connect(ui->listView, SIGNAL(activated(QModelIndex)), SLOT(onItemActivated(QModelIndex)));
}
-bool ScreenshotsPage::eventFilter(QObject *obj, QEvent *evt)
+bool ScreenshotsPage::eventFilter(QObject* obj, QEvent* evt)
{
if (obj != ui->listView)
return QWidget::eventFilter(obj, evt);
- if (evt->type() != QEvent::KeyPress)
- {
+ if (evt->type() != QEvent::KeyPress) {
return QWidget::eventFilter(obj, evt);
}
- QKeyEvent *keyEvent = static_cast<QKeyEvent *>(evt);
+ QKeyEvent* keyEvent = static_cast<QKeyEvent*>(evt);
if (keyEvent->matches(QKeySequence::Copy)) {
on_actionCopy_File_s_triggered();
return true;
}
- switch (keyEvent->key())
- {
- case Qt::Key_Delete:
- on_actionDelete_triggered();
- return true;
- case Qt::Key_F2:
- on_actionRename_triggered();
- return true;
- default:
- break;
+ switch (keyEvent->key()) {
+ case Qt::Key_Delete:
+ on_actionDelete_triggered();
+ return true;
+ case Qt::Key_F2:
+ on_actionRename_triggered();
+ return true;
+ default:
+ break;
}
return QWidget::eventFilter(obj, evt);
}
@@ -322,17 +305,17 @@ void ScreenshotsPage::ShowContextMenu(const QPoint& pos)
auto menu = ui->toolBar->createContextMenu(this, tr("Context menu"));
if (ui->listView->selectionModel()->selectedRows().size() > 1) {
- menu->removeAction( ui->actionCopy_Image );
+ menu->removeAction(ui->actionCopy_Image);
}
menu->exec(ui->listView->mapToGlobal(pos));
delete menu;
}
-QMenu * ScreenshotsPage::createPopupMenu()
+QMenu* ScreenshotsPage::createPopupMenu()
{
QMenu* filteredMenu = QMainWindow::createPopupMenu();
- filteredMenu->removeAction( ui->toolBar->toggleViewAction() );
+ filteredMenu->removeAction(ui->toolBar->toggleViewAction());
return filteredMenu;
}
@@ -345,13 +328,12 @@ void ScreenshotsPage::onItemActivated(QModelIndex index)
DesktopServices::openFile(info.absoluteFilePath());
}
-void ScreenshotsPage::onCurrentSelectionChanged(const QItemSelection &selected)
+void ScreenshotsPage::onCurrentSelectionChanged(const QItemSelection& selected)
{
bool allReadable = !selected.isEmpty();
bool allWritable = !selected.isEmpty();
- for (auto index : selected.indexes())
- {
+ for (auto index : selected.indexes()) {
if (!index.isValid())
break;
auto info = m_model->fileInfo(index);
@@ -401,8 +383,7 @@ void ScreenshotsPage::on_actionUpload_triggered()
QList<ScreenShot::Ptr> uploaded;
auto job = NetJob::Ptr(new NetJob("Screenshot Upload", APPLICATION->network()));
- if(selection.size() < 2)
- {
+ if (selection.size() < 2) {
auto item = selection.at(0);
auto info = m_model->fileInfo(item);
auto screenshot = std::make_shared<ScreenShot>(info);
@@ -411,31 +392,24 @@ void ScreenshotsPage::on_actionUpload_triggered()
m_uploadActive = true;
ProgressDialog dialog(this);
- if(dialog.execWithTask(job.get()) != QDialog::Accepted)
- {
- CustomMessageBox::selectable(this, tr("Failed to upload screenshots!"),
- tr("Unknown error"), QMessageBox::Warning)->exec();
- }
- else
- {
+ if (dialog.execWithTask(job.get()) != QDialog::Accepted) {
+ CustomMessageBox::selectable(this, tr("Failed to upload screenshots!"), tr("Unknown error"), QMessageBox::Warning)->exec();
+ } else {
auto link = screenshot->m_url;
- QClipboard *clipboard = QApplication::clipboard();
+ QClipboard* clipboard = QApplication::clipboard();
clipboard->setText(link);
CustomMessageBox::selectable(
- this,
- tr("Upload finished"),
- tr("The <a href=\"%1\">link to the uploaded screenshot</a> has been placed in your clipboard.")
- .arg(link),
- QMessageBox::Information
- )->exec();
+ this, tr("Upload finished"),
+ tr("The <a href=\"%1\">link to the uploaded screenshot</a> has been placed in your clipboard.").arg(link),
+ QMessageBox::Information)
+ ->exec();
}
m_uploadActive = false;
return;
}
- for (auto item : selection)
- {
+ for (auto item : selection) {
auto info = m_model->fileInfo(item);
auto screenshot = std::make_shared<ScreenShot>(info);
uploaded.push_back(screenshot);
@@ -449,26 +423,16 @@ void ScreenshotsPage::on_actionUpload_triggered()
task.addTask(albumTask);
m_uploadActive = true;
ProgressDialog prog(this);
- if (prog.execWithTask(&task) != QDialog::Accepted)
- {
- CustomMessageBox::selectable(
- this,
- tr("Failed to upload screenshots!"),
- tr("Unknown error"),
- QMessageBox::Warning
- )->exec();
- }
- else
- {
+ if (prog.execWithTask(&task) != QDialog::Accepted) {
+ CustomMessageBox::selectable(this, tr("Failed to upload screenshots!"), tr("Unknown error"), QMessageBox::Warning)->exec();
+ } else {
auto link = QString("https://imgur.com/a/%1").arg(imgurAlbum->id());
- QClipboard *clipboard = QApplication::clipboard();
+ QClipboard* clipboard = QApplication::clipboard();
clipboard->setText(link);
- CustomMessageBox::selectable(
- this,
- tr("Upload finished"),
- tr("The <a href=\"%1\">link to the uploaded album</a> has been placed in your clipboard.") .arg(link),
- QMessageBox::Information
- )->exec();
+ CustomMessageBox::selectable(this, tr("Upload finished"),
+ tr("The <a href=\"%1\">link to the uploaded album</a> has been placed in your clipboard.").arg(link),
+ QMessageBox::Information)
+ ->exec();
}
m_uploadActive = false;
}
@@ -476,8 +440,7 @@ void ScreenshotsPage::on_actionUpload_triggered()
void ScreenshotsPage::on_actionCopy_Image_triggered()
{
auto selection = ui->listView->selectionModel()->selectedRows();
- if(selection.size() < 1)
- {
+ if (selection.size() < 1) {
return;
}
@@ -492,15 +455,13 @@ void ScreenshotsPage::on_actionCopy_Image_triggered()
void ScreenshotsPage::on_actionCopy_File_s_triggered()
{
auto selection = ui->listView->selectionModel()->selectedRows();
- if(selection.size() < 1)
- {
+ if (selection.size() < 1) {
// Don't do anything so we don't empty the users clipboard
return;
}
QString buf = "";
- for (auto item : selection)
- {
+ for (auto item : selection) {
auto info = m_model->fileInfo(item);
buf += "file:///" + info.absoluteFilePath() + "\r\n";
}
@@ -532,8 +493,7 @@ void ScreenshotsPage::on_actionDelete_triggered()
if (response != QMessageBox::Yes)
return;
- for (auto item : selected)
- {
+ for (auto item : selected) {
if (FS::trash(m_model->filePath(item)))
continue;
@@ -552,23 +512,19 @@ void ScreenshotsPage::on_actionRename_triggered()
void ScreenshotsPage::openedImpl()
{
- if(!m_valid)
- {
+ if (!m_valid) {
m_valid = FS::ensureFolderPathExists(m_folder);
}
- if (m_valid)
- {
+ if (m_valid) {
QString path = QDir(m_folder).absolutePath();
auto idx = m_model->setRootPath(path);
- if(idx.isValid())
- {
+ if (idx.isValid()) {
ui->listView->setModel(m_filterModel.get());
- connect(ui->listView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &ScreenshotsPage::onCurrentSelectionChanged);
- onCurrentSelectionChanged(ui->listView->selectionModel()->selection()); // set initial button enable states
+ connect(ui->listView->selectionModel(), &QItemSelectionModel::selectionChanged, this,
+ &ScreenshotsPage::onCurrentSelectionChanged);
+ onCurrentSelectionChanged(ui->listView->selectionModel()->selection()); // set initial button enable states
ui->listView->setRootIndex(m_filterModel->mapFromSource(idx));
- }
- else
- {
+ } else {
ui->listView->setModel(nullptr);
}
}
diff --git a/launcher/ui/pages/instance/ScreenshotsPage.h b/launcher/ui/pages/instance/ScreenshotsPage.h
index 89611b6d..bb127b42 100644
--- a/launcher/ui/pages/instance/ScreenshotsPage.h
+++ b/launcher/ui/pages/instance/ScreenshotsPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -37,16 +37,15 @@
#include <QMainWindow>
-#include "ui/pages/BasePage.h"
#include <Application.h>
+#include "ui/pages/BasePage.h"
#include "settings/Setting.h"
class QFileSystemModel;
class QIdentityProxyModel;
class QItemSelection;
-namespace Ui
-{
+namespace Ui {
class ScreenshotsPage;
}
@@ -54,49 +53,30 @@ struct ScreenShot;
class ScreenshotList;
class ImgurAlbumCreation;
-class ScreenshotsPage : public QMainWindow, public BasePage
-{
+class ScreenshotsPage : public QMainWindow, public BasePage {
Q_OBJECT
-public:
- explicit ScreenshotsPage(QString path, QWidget *parent = 0);
+ public:
+ explicit ScreenshotsPage(QString path, QWidget* parent = 0);
virtual ~ScreenshotsPage();
void openedImpl() override;
void closedImpl() override;
- enum
- {
- NothingDone = 0x42
- };
+ enum { NothingDone = 0x42 };
- virtual bool eventFilter(QObject *, QEvent *) override;
- virtual QString displayName() const override
- {
- return tr("Screenshots");
- }
- virtual QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("screenshots");
- }
- virtual QString id() const override
- {
- return "screenshots";
- }
- virtual QString helpPage() const override
- {
- return "Screenshots-management";
- }
- virtual bool apply() override
- {
- return !m_uploadActive;
- }
+ virtual bool eventFilter(QObject*, QEvent*) override;
+ virtual QString displayName() const override { return tr("Screenshots"); }
+ virtual QIcon icon() const override { return APPLICATION->getThemedIcon("screenshots"); }
+ virtual QString id() const override { return "screenshots"; }
+ virtual QString helpPage() const override { return "Screenshots-management"; }
+ virtual bool apply() override { return !m_uploadActive; }
void retranslate() override;
-protected:
- QMenu * createPopupMenu() override;
+ protected:
+ QMenu* createPopupMenu() override;
-private slots:
+ private slots:
void on_actionUpload_triggered();
void on_actionCopy_Image_triggered();
void on_actionCopy_File_s_triggered();
@@ -104,11 +84,11 @@ private slots:
void on_actionRename_triggered();
void on_actionView_Folder_triggered();
void onItemActivated(QModelIndex);
- void onCurrentSelectionChanged(const QItemSelection &selected);
- void ShowContextMenu(const QPoint &pos);
+ void onCurrentSelectionChanged(const QItemSelection& selected);
+ void ShowContextMenu(const QPoint& pos);
-private:
- Ui::ScreenshotsPage *ui;
+ private:
+ Ui::ScreenshotsPage* ui;
std::shared_ptr<QFileSystemModel> m_model;
std::shared_ptr<QIdentityProxyModel> m_filterModel;
QString m_folder;
diff --git a/launcher/ui/pages/instance/ServersPage.cpp b/launcher/ui/pages/instance/ServersPage.cpp
index 5e899a11..6bf802e6 100644
--- a/launcher/ui/pages/instance/ServersPage.cpp
+++ b/launcher/ui/pages/instance/ServersPage.cpp
@@ -40,36 +40,27 @@
#include "ui_ServersPage.h"
#include <FileSystem.h>
-#include <sstream>
#include <io/stream_reader.h>
-#include <tag_string.h>
-#include <tag_primitive.h>
-#include <tag_list.h>
-#include <tag_compound.h>
#include <minecraft/MinecraftInstance.h>
+#include <tag_compound.h>
+#include <tag_list.h>
+#include <tag_primitive.h>
+#include <tag_string.h>
+#include <sstream>
#include <QFileSystemWatcher>
#include <QMenu>
#include <QTimer>
-static const int COLUMN_COUNT = 2; // 3 , TBD: latency and other nice things.
+static const int COLUMN_COUNT = 2; // 3 , TBD: latency and other nice things.
-struct Server
-{
+struct Server {
// Types
- enum class AcceptsTextures : int
- {
- ASK = 0,
- ALWAYS = 1,
- NEVER = 2
- };
+ enum class AcceptsTextures : int { ASK = 0, ALWAYS = 1, NEVER = 2 };
// Methods
- Server()
- {
- m_name = QObject::tr("Minecraft Server");
- }
- Server(const QString & name, const QString & address)
+ Server() { m_name = QObject::tr("Minecraft Server"); }
+ Server(const QString& name, const QString& address)
{
m_name = name;
m_address = address;
@@ -82,21 +73,16 @@ struct Server
std::string nameStr(server["name"]);
m_name = QString::fromUtf8(nameStr.c_str());
- if(server["icon"])
- {
+ if (server["icon"]) {
std::string base64str(server["icon"]);
m_icon = QByteArray::fromBase64(base64str.c_str());
}
- if(server.has_key("acceptTextures", nbt::tag_type::Byte))
- {
+ if (server.has_key("acceptTextures", nbt::tag_type::Byte)) {
bool value = server["acceptTextures"].as<nbt::tag_byte>().get();
- if(value)
- {
+ if (value) {
m_acceptsTextures = AcceptsTextures::ALWAYS;
- }
- else
- {
+ } else {
m_acceptsTextures = AcceptsTextures::NEVER;
}
}
@@ -106,12 +92,10 @@ struct Server
{
server.insert("name", m_name.trimmed().toUtf8().toStdString());
server.insert("ip", m_address.trimmed().toUtf8().toStdString());
- if(m_icon.size())
- {
+ if (m_icon.size()) {
server.insert("icon", m_icon.toBase64().toStdString());
}
- if(m_acceptsTextures != AcceptsTextures::ASK)
- {
+ if (m_acceptsTextures != AcceptsTextures::ASK) {
server.insert("acceptTextures", nbt::tag_byte(m_acceptsTextures == AcceptsTextures::ALWAYS));
}
}
@@ -127,64 +111,54 @@ struct Server
// Data - temporary
bool m_checked = false;
bool m_up = false;
- QString m_motd; // https://mctools.org/motd-creator
+ QString m_motd; // https://mctools.org/motd-creator
int m_ping = 0;
int m_currentPlayers = 0;
int m_maxPlayers = 0;
};
-static std::unique_ptr <nbt::tag_compound> parseServersDat(const QString& filename)
+static std::unique_ptr<nbt::tag_compound> parseServersDat(const QString& filename)
{
- try
- {
+ try {
QByteArray input = FS::read(filename);
std::istringstream foo(std::string(input.constData(), input.size()));
auto pair = nbt::io::read_compound(foo);
- if(pair.first != "")
+ if (pair.first != "")
return nullptr;
- if(pair.second == nullptr)
+ if (pair.second == nullptr)
return nullptr;
return std::move(pair.second);
- }
- catch (...)
- {
+ } catch (...) {
return nullptr;
}
}
-static bool serializeServerDat(const QString& filename, nbt::tag_compound * levelInfo)
+static bool serializeServerDat(const QString& filename, nbt::tag_compound* levelInfo)
{
- try
- {
- if(!FS::ensureFilePathExists(filename))
- {
+ try {
+ if (!FS::ensureFilePathExists(filename)) {
return false;
}
std::ostringstream s;
nbt::io::write_tag("", *levelInfo, s);
- QByteArray val(s.str().data(), (int) s.str().size() );
+ QByteArray val(s.str().data(), (int)s.str().size());
FS::write(filename, val);
return true;
- }
- catch (...)
- {
+ } catch (...) {
return false;
}
}
-class ServersModel: public QAbstractListModel
-{
+class ServersModel : public QAbstractListModel {
Q_OBJECT
-public:
- enum Roles
- {
+ public:
+ enum Roles {
ServerPtrRole = Qt::UserRole,
};
- explicit ServersModel(const QString &path, QObject *parent = 0)
- : QAbstractListModel(parent)
+ explicit ServersModel(const QString& path, QObject* parent = 0) : QAbstractListModel(parent)
{
m_path = path;
m_watcher = new QFileSystemWatcher(this);
@@ -194,18 +168,16 @@ public:
m_saveTimer.setInterval(5000);
connect(&m_saveTimer, &QTimer::timeout, this, &ServersModel::save_internal);
}
- virtual ~ServersModel() {};
+ virtual ~ServersModel(){};
void observe()
{
- if(m_observed)
- {
+ if (m_observed) {
return;
}
m_observed = true;
- if(!m_loaded)
- {
+ if (!m_loaded) {
load();
}
@@ -214,8 +186,7 @@ public:
void unobserve()
{
- if(!m_observed)
- {
+ if (!m_observed) {
return;
}
m_observed = false;
@@ -225,8 +196,7 @@ public:
void lock()
{
- if(m_locked)
- {
+ if (m_locked) {
return;
}
saveNow();
@@ -237,8 +207,7 @@ public:
void unlock()
{
- if(!m_locked)
- {
+ if (!m_locked) {
return;
}
m_locked = false;
@@ -248,12 +217,10 @@ public:
int addEmptyRow(int position)
{
- if(m_locked)
- {
+ if (m_locked) {
return -1;
}
- if(position < 0 || position >= rowCount())
- {
+ if (position < 0 || position >= rowCount()) {
position = rowCount();
}
beginInsertRows(QModelIndex(), position, position);
@@ -265,36 +232,32 @@ public:
bool removeRow(int row)
{
- if(m_locked)
- {
+ if (m_locked) {
return false;
}
- if(row < 0 || row >= rowCount())
- {
+ if (row < 0 || row >= rowCount()) {
return false;
}
beginRemoveRows(QModelIndex(), row, row);
m_servers.removeAt(row);
- endRemoveRows(); // does absolutely nothing, the selected server stays as the next line...
+ endRemoveRows(); // does absolutely nothing, the selected server stays as the next line...
scheduleSave();
return true;
}
bool moveUp(int row)
{
- if(m_locked)
- {
+ if (m_locked) {
return false;
}
- if(row <= 0)
- {
+ if (row <= 0) {
return false;
}
beginMoveRows(QModelIndex(), row, row, QModelIndex(), row - 1);
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
- m_servers.swapItemsAt(row-1, row);
+ m_servers.swapItemsAt(row - 1, row);
#else
- m_servers.swap(row-1, row);
+ m_servers.swap(row - 1, row);
#endif
endMoveRows();
scheduleSave();
@@ -303,20 +266,18 @@ public:
bool moveDown(int row)
{
- if(m_locked)
- {
+ if (m_locked) {
return false;
}
int count = rowCount();
- if(row + 1 >= count)
- {
+ if (row + 1 >= count) {
return false;
}
beginMoveRows(QModelIndex(), row, row, QModelIndex(), row + 2);
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
- m_servers.swapItemsAt(row+1, row);
+ m_servers.swapItemsAt(row + 1, row);
#else
- m_servers.swap(row+1, row);
+ m_servers.swap(row + 1, row);
#endif
endMoveRows();
scheduleSave();
@@ -328,10 +289,8 @@ public:
if (section < 0 || section >= COLUMN_COUNT)
return QVariant();
- if(role == Qt::DisplayRole)
- {
- switch(section)
- {
+ if (role == Qt::DisplayRole) {
+ switch (section) {
case 0:
return tr("Name");
case 1:
@@ -344,90 +303,81 @@ public:
return QAbstractListModel::headerData(section, orientation, role);
}
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override
{
if (!index.isValid())
return QVariant();
int row = index.row();
int column = index.column();
- if(column < 0 || column >= COLUMN_COUNT)
+ if (column < 0 || column >= COLUMN_COUNT)
return QVariant();
if (row < 0 || row >= m_servers.size())
return QVariant();
- switch(column)
- {
+ switch (column) {
case 0:
- switch (role)
- {
- case Qt::DecorationRole:
- {
- auto & bytes = m_servers[row].m_icon;
- if(bytes.size())
- {
- QPixmap px;
- if(px.loadFromData(bytes))
- return QIcon(px);
+ switch (role) {
+ case Qt::DecorationRole: {
+ auto& bytes = m_servers[row].m_icon;
+ if (bytes.size()) {
+ QPixmap px;
+ if (px.loadFromData(bytes))
+ return QIcon(px);
+ }
+ return APPLICATION->getThemedIcon("unknown_server");
}
- return APPLICATION->getThemedIcon("unknown_server");
- }
- case Qt::DisplayRole:
- return m_servers[row].m_name;
- case ServerPtrRole:
- return QVariant::fromValue<void *>((void *)&m_servers[row]);
- default:
- return QVariant();
+ case Qt::DisplayRole:
+ return m_servers[row].m_name;
+ case ServerPtrRole:
+ return QVariant::fromValue<void*>((void*)&m_servers[row]);
+ default:
+ return QVariant();
}
case 1:
- switch (role)
- {
- case Qt::DisplayRole:
- return m_servers[row].m_address;
- default:
- return QVariant();
+ switch (role) {
+ case Qt::DisplayRole:
+ return m_servers[row].m_address;
+ default:
+ return QVariant();
}
case 2:
- switch (role)
- {
- case Qt::DisplayRole:
- return m_servers[row].m_ping;
- default:
- return QVariant();
+ switch (role) {
+ case Qt::DisplayRole:
+ return m_servers[row].m_ping;
+ default:
+ return QVariant();
}
default:
return QVariant();
}
}
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override
{
return parent.isValid() ? 0 : m_servers.size();
}
- int columnCount(const QModelIndex & parent) const override
+ int columnCount(const QModelIndex& parent) const override
{
return parent.isValid() ? 0 : COLUMN_COUNT;
}
- Server * at(int index)
+ Server* at(int index)
{
- if(index < 0 || index >= rowCount())
- {
+ if (index < 0 || index >= rowCount()) {
return nullptr;
}
return &m_servers[index];
}
- void setName(int row, const QString & name)
+ void setName(int row, const QString& name)
{
- if(m_locked)
- {
+ if (m_locked) {
return;
}
auto server = at(row);
- if(!server || server->m_name == name)
- {
+ if (!server || server->m_name == name) {
return;
}
server->m_name = name;
@@ -435,15 +385,13 @@ public:
scheduleSave();
}
- void setAddress(int row, const QString & address)
+ void setAddress(int row, const QString& address)
{
- if(m_locked)
- {
+ if (m_locked) {
return;
}
auto server = at(row);
- if(!server || server->m_address == address)
- {
+ if (!server || server->m_address == address) {
return;
}
server->m_address = address;
@@ -453,13 +401,11 @@ public:
void setAcceptsTextures(int row, Server::AcceptsTextures textures)
{
- if(m_locked)
- {
+ if (m_locked) {
return;
}
auto server = at(row);
- if(!server || server->m_acceptsTextures == textures)
- {
+ if (!server || server->m_acceptsTextures == textures) {
return;
}
server->m_acceptsTextures = textures;
@@ -473,12 +419,10 @@ public:
beginResetModel();
QList<Server> servers;
auto serversDat = parseServersDat(serversPath());
- if(serversDat)
- {
- auto &serversList = serversDat->at("servers").as<nbt::tag_list>();
- for(auto iter = serversList.begin(); iter != serversList.end(); iter++)
- {
- auto & serverTag = (*iter).as<nbt::tag_compound>();
+ if (serversDat) {
+ auto& serversList = serversDat->at("servers").as<nbt::tag_list>();
+ for (auto iter = serversList.begin(); iter != serversList.end(); iter++) {
+ auto& serverTag = (*iter).as<nbt::tag_compound>();
Server s(serverTag);
servers.append(s);
}
@@ -490,14 +434,12 @@ public:
void saveNow()
{
- if(saveIsScheduled())
- {
+ if (saveIsScheduled()) {
save_internal();
}
}
-
-public slots:
+ public slots:
void dirChanged(const QString& path)
{
qDebug() << "Changed:" << path;
@@ -508,7 +450,7 @@ public slots:
qDebug() << "Changed:" << path;
}
-private slots:
+ private slots:
void save_internal()
{
cancelSave();
@@ -517,31 +459,27 @@ private slots:
nbt::tag_compound out;
nbt::tag_list list;
- for(auto & server: m_servers)
- {
+ for (auto& server : m_servers) {
nbt::tag_compound serverNbt;
server.serialize(serverNbt);
list.push_back(std::move(serverNbt));
}
out.insert("servers", nbt::value(std::move(list)));
- if(!serializeServerDat(path, &out))
- {
+ if (!serializeServerDat(path, &out)) {
qDebug() << "Failed to save server list:" << path << "Will try again.";
scheduleSave();
}
}
-private:
+ private:
void scheduleSave()
{
- if(!m_loaded)
- {
+ if (!m_loaded) {
qDebug() << "Server list should never save if it didn't successfully load, path:" << m_path;
return;
}
- if(!m_dirty)
- {
+ if (!m_dirty) {
m_dirty = true;
qDebug() << "Server list save is scheduled for" << m_path;
}
@@ -562,24 +500,17 @@ private:
void updateFSObserver()
{
bool observingFS = m_watcher->directories().contains(m_path);
- if(m_observed && m_locked)
- {
- if(!observingFS)
- {
+ if (m_observed && m_locked) {
+ if (!observingFS) {
qWarning() << "Will watch" << m_path;
- if(!m_watcher->addPath(m_path))
- {
+ if (!m_watcher->addPath(m_path)) {
qWarning() << "Failed to start watching" << m_path;
}
}
- }
- else
- {
- if(observingFS)
- {
+ } else {
+ if (observingFS) {
qWarning() << "Will stop watching" << m_path;
- if(!m_watcher->removePath(m_path))
- {
+ if (!m_watcher->removePath(m_path)) {
qWarning() << "Failed to stop watching" << m_path;
}
}
@@ -592,34 +523,31 @@ private:
return foo.filePath();
}
-private:
+ private:
bool m_loaded = false;
bool m_locked = false;
bool m_observed = false;
bool m_dirty = false;
QString m_path;
QList<Server> m_servers;
- QFileSystemWatcher *m_watcher = nullptr;
+ QFileSystemWatcher* m_watcher = nullptr;
QTimer m_saveTimer;
};
-ServersPage::ServersPage(InstancePtr inst, QWidget* parent)
- : QMainWindow(parent), ui(new Ui::ServersPage)
+ServersPage::ServersPage(InstancePtr inst, QWidget* parent) : QMainWindow(parent), ui(new Ui::ServersPage)
{
ui->setupUi(this);
m_inst = inst;
m_model = new ServersModel(inst->gameRoot(), this);
- ui->serversView->setIconSize(QSize(64,64));
+ ui->serversView->setIconSize(QSize(64, 64));
ui->serversView->setModel(m_model);
ui->serversView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->serversView, &QTreeView::customContextMenuRequested, this, &ServersPage::ShowContextMenu);
auto head = ui->serversView->header();
- if(head->count())
- {
+ if (head->count()) {
head->setSectionResizeMode(0, QHeaderView::Stretch);
- for(int i = 1; i < head->count(); i++)
- {
+ for (int i = 1; i < head->count(); i++) {
head->setSectionResizeMode(i, QHeaderView::ResizeToContents);
}
}
@@ -633,8 +561,7 @@ ServersPage::ServersPage(InstancePtr inst, QWidget* parent)
connect(m_model, &QAbstractItemModel::rowsRemoved, this, &ServersPage::rowsRemoved);
m_locked = m_inst->isRunning();
- if(m_locked)
- {
+ if (m_locked) {
m_model->lock();
}
@@ -659,40 +586,33 @@ void ServersPage::ShowContextMenu(const QPoint& pos)
delete menu;
}
-QMenu * ServersPage::createPopupMenu()
+QMenu* ServersPage::createPopupMenu()
{
QMenu* filteredMenu = QMainWindow::createPopupMenu();
- filteredMenu->removeAction( ui->toolBar->toggleViewAction() );
+ filteredMenu->removeAction(ui->toolBar->toggleViewAction());
return filteredMenu;
}
void ServersPage::runningStateChanged(bool running)
{
- if(m_locked == running)
- {
+ if (m_locked == running) {
return;
}
m_locked = running;
- if(m_locked)
- {
+ if (m_locked) {
m_model->lock();
- }
- else
- {
+ } else {
m_model->unlock();
}
updateState();
}
-void ServersPage::currentChanged(const QModelIndex &current, const QModelIndex &previous)
+void ServersPage::currentChanged(const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
int nextServer = -1;
- if (!current.isValid())
- {
+ if (!current.isValid()) {
nextServer = -1;
- }
- else
- {
+ } else {
nextServer = current.row();
}
currentServer = nextServer;
@@ -700,20 +620,15 @@ void ServersPage::currentChanged(const QModelIndex &current, const QModelIndex &
}
// WARNING: this is here because currentChanged is not accurate when removing rows. the current item needs to be fixed up after removal.
-void ServersPage::rowsRemoved(const QModelIndex& parent, int first, int last)
+void ServersPage::rowsRemoved([[maybe_unused]] const QModelIndex& parent, int first, int last)
{
- if(currentServer < first)
- {
+ if (currentServer < first) {
// current was before the removal
return;
- }
- else if(currentServer >= first && currentServer <= last)
- {
+ } else if (currentServer >= first && currentServer <= last) {
// current got removed...
return;
- }
- else
- {
+ } else {
// current was past the removal
int count = last - first + 1;
currentServer -= count;
@@ -749,14 +664,11 @@ void ServersPage::updateState()
ui->actionRemove->setEnabled(serverEditEnabled);
ui->actionJoin->setEnabled(serverEditEnabled);
- if(server)
- {
+ if (server) {
ui->addressLine->setText(server->m_address);
ui->nameLine->setText(server->m_name);
ui->resourceComboBox->setCurrentIndex(int(server->m_acceptsTextures));
- }
- else
- {
+ } else {
ui->addressLine->setText(QString());
ui->nameLine->setText(QString());
ui->resourceComboBox->setCurrentIndex(0);
@@ -788,27 +700,25 @@ void ServersPage::closedImpl()
void ServersPage::on_actionAdd_triggered()
{
int position = m_model->addEmptyRow(currentServer + 1);
- if(position < 0)
- {
+ if (position < 0) {
return;
}
// select the new row
ui->serversView->selectionModel()->setCurrentIndex(
- m_model->index(position),
- QItemSelectionModel::SelectCurrent | QItemSelectionModel::Clear | QItemSelectionModel::Rows
- );
+ m_model->index(position), QItemSelectionModel::SelectCurrent | QItemSelectionModel::Clear | QItemSelectionModel::Rows);
currentServer = position;
}
void ServersPage::on_actionRemove_triggered()
{
- auto response = CustomMessageBox::selectable(this, tr("Confirm Removal"),
- tr("You are about to remove \"%1\".\n"
- "This is permanent and the server will be gone from your list forever (A LONG TIME).\n\n"
- "Are you sure?")
- .arg(m_model->at(currentServer)->m_name),
- QMessageBox::Warning, QMessageBox::Yes | QMessageBox::No, QMessageBox::No)
- ->exec();
+ auto response =
+ CustomMessageBox::selectable(this, tr("Confirm Removal"),
+ tr("You are about to remove \"%1\".\n"
+ "This is permanent and the server will be gone from your list forever (A LONG TIME).\n\n"
+ "Are you sure?")
+ .arg(m_model->at(currentServer)->m_name),
+ QMessageBox::Warning, QMessageBox::Yes | QMessageBox::No, QMessageBox::No)
+ ->exec();
if (response != QMessageBox::Yes)
return;
@@ -818,23 +728,21 @@ void ServersPage::on_actionRemove_triggered()
void ServersPage::on_actionMove_Up_triggered()
{
- if(m_model->moveUp(currentServer))
- {
- currentServer --;
+ if (m_model->moveUp(currentServer)) {
+ currentServer--;
}
}
void ServersPage::on_actionMove_Down_triggered()
{
- if(m_model->moveDown(currentServer))
- {
- currentServer ++;
+ if (m_model->moveDown(currentServer)) {
+ currentServer++;
}
}
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, std::make_shared<MinecraftServerTarget>(MinecraftServerTarget::parse(address)));
}
diff --git a/launcher/ui/pages/instance/ServersPage.h b/launcher/ui/pages/instance/ServersPage.h
index 476e7d70..a27d1d29 100644
--- a/launcher/ui/pages/instance/ServersPage.h
+++ b/launcher/ui/pages/instance/ServersPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
*
@@ -39,13 +39,12 @@
#include <QMainWindow>
#include <QString>
-#include "ui/pages/BasePage.h"
#include <Application.h>
+#include "ui/pages/BasePage.h"
#include "settings/Setting.h"
-namespace Ui
-{
+namespace Ui {
class ServersPage;
}
@@ -53,46 +52,33 @@ struct Server;
class ServersModel;
class MinecraftInstance;
-class ServersPage : public QMainWindow, public BasePage
-{
+class ServersPage : public QMainWindow, public BasePage {
Q_OBJECT
-public:
- explicit ServersPage(InstancePtr inst, QWidget *parent = 0);
+ public:
+ explicit ServersPage(InstancePtr inst, QWidget* parent = 0);
virtual ~ServersPage();
void openedImpl() override;
void closedImpl() override;
- virtual QString displayName() const override
- {
- return tr("Servers");
- }
- virtual QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("server");
- }
- virtual QString id() const override
- {
- return "servers";
- }
- virtual QString helpPage() const override
- {
- return "Servers-management";
- }
+ virtual QString displayName() const override { return tr("Servers"); }
+ virtual QIcon icon() const override { return APPLICATION->getThemedIcon("server"); }
+ virtual QString id() const override { return "servers"; }
+ virtual QString helpPage() const override { return "Servers-management"; }
void retranslate() override;
-protected:
- QMenu * createPopupMenu() override;
+ protected:
+ QMenu* createPopupMenu() override;
-private:
+ private:
void updateState();
void scheduleSave();
bool saveIsScheduled() const;
-private slots:
- void currentChanged(const QModelIndex &current, const QModelIndex &previous);
- void rowsRemoved(const QModelIndex &parent, int first, int last);
+ private slots:
+ void currentChanged(const QModelIndex& current, const QModelIndex& previous);
+ void rowsRemoved(const QModelIndex& parent, int first, int last);
void on_actionAdd_triggered();
void on_actionRemove_triggered();
@@ -102,19 +88,18 @@ private slots:
void runningStateChanged(bool running);
- void nameEdited(const QString & name);
- void addressEdited(const QString & address);
- void resourceIndexChanged(int index);\
+ void nameEdited(const QString& name);
+ void addressEdited(const QString& address);
+ void resourceIndexChanged(int index);
- void ShowContextMenu(const QPoint &pos);
+ void ShowContextMenu(const QPoint& pos);
-private: // data
+ private: // data
int currentServer = -1;
bool m_locked = true;
- Ui::ServersPage *ui = nullptr;
- ServersModel * m_model = nullptr;
+ Ui::ServersPage* ui = nullptr;
+ ServersModel* m_model = nullptr;
InstancePtr m_inst = nullptr;
std::shared_ptr<Setting> m_wide_bar_setting = nullptr;
};
-
diff --git a/launcher/ui/pages/instance/ShaderPackPage.h b/launcher/ui/pages/instance/ShaderPackPage.h
index a779fd8c..7c43a375 100644
--- a/launcher/ui/pages/instance/ShaderPackPage.h
+++ b/launcher/ui/pages/instance/ShaderPackPage.h
@@ -39,11 +39,10 @@
#include "ExternalResourcesPage.h"
-class ShaderPackPage : public ExternalResourcesPage
-{
+class ShaderPackPage : public ExternalResourcesPage {
Q_OBJECT
-public:
- explicit ShaderPackPage(MinecraftInstance *instance, std::shared_ptr<ShaderPackFolderModel> model, QWidget *parent = nullptr);
+ public:
+ explicit ShaderPackPage(MinecraftInstance* instance, std::shared_ptr<ShaderPackFolderModel> model, QWidget* parent = nullptr);
~ShaderPackPage() override = default;
QString displayName() const override { return tr("Shader packs"); }
diff --git a/launcher/ui/pages/instance/TexturePackPage.cpp b/launcher/ui/pages/instance/TexturePackPage.cpp
index e477ceda..fa478a9a 100644
--- a/launcher/ui/pages/instance/TexturePackPage.cpp
+++ b/launcher/ui/pages/instance/TexturePackPage.cpp
@@ -57,7 +57,7 @@ TexturePackPage::TexturePackPage(MinecraftInstance* instance, std::shared_ptr<Te
ui->actionViewConfigs->setVisible(false);
}
-bool TexturePackPage::onSelectionChanged(const QModelIndex& current, const QModelIndex& previous)
+bool TexturePackPage::onSelectionChanged(const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
auto sourceCurrent = m_filterModel->mapToSource(current);
int row = sourceCurrent.row();
diff --git a/launcher/ui/pages/instance/TexturePackPage.h b/launcher/ui/pages/instance/TexturePackPage.h
index 47a8fa60..9c4f24b7 100644
--- a/launcher/ui/pages/instance/TexturePackPage.h
+++ b/launcher/ui/pages/instance/TexturePackPage.h
@@ -42,21 +42,17 @@
#include "minecraft/mod/TexturePackFolderModel.h"
-class TexturePackPage : public ExternalResourcesPage
-{
+class TexturePackPage : public ExternalResourcesPage {
Q_OBJECT
-public:
- explicit TexturePackPage(MinecraftInstance *instance, std::shared_ptr<TexturePackFolderModel> model, QWidget* parent = nullptr);
+ public:
+ explicit TexturePackPage(MinecraftInstance* instance, std::shared_ptr<TexturePackFolderModel> model, QWidget* parent = nullptr);
QString displayName() const override { return tr("Texture packs"); }
QIcon icon() const override { return APPLICATION->getThemedIcon("resourcepacks"); }
QString id() const override { return "texturepacks"; }
QString helpPage() const override { return "Texture-packs"; }
- virtual bool shouldDisplay() const override
- {
- return m_instance->traits().contains("texturepacks");
- }
+ virtual bool shouldDisplay() const override { return m_instance->traits().contains("texturepacks"); }
public slots:
bool onSelectionChanged(const QModelIndex& current, const QModelIndex& previous) override;
diff --git a/launcher/ui/pages/instance/VersionPage.cpp b/launcher/ui/pages/instance/VersionPage.cpp
index a180c804..ef029d1d 100644
--- a/launcher/ui/pages/instance/VersionPage.cpp
+++ b/launcher/ui/pages/instance/VersionPage.cpp
@@ -6,7 +6,7 @@
* Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
* Copyright (C) 2022-2023 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
* it under the terms of the GNU General Public License as published by
@@ -51,6 +51,7 @@
#include <QUrl>
#include "VersionPage.h"
+#include "ui/dialogs/InstallLoaderDialog.h"
#include "ui_VersionPage.h"
#include "ui/dialogs/CustomMessageBox.h"
@@ -188,7 +189,7 @@ void VersionPage::showContextMenu(const QPoint& pos)
delete menu;
}
-void VersionPage::packageCurrent(const QModelIndex& current, const QModelIndex& previous)
+void VersionPage::packageCurrent(const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
if (!current.isValid()) {
ui->frame->clear();
@@ -226,18 +227,6 @@ void VersionPage::packageCurrent(const QModelIndex& current, const QModelIndex&
void VersionPage::updateVersionControls()
{
- // FIXME: this is a dirty hack
- auto minecraftVersion = Version(m_profile->getComponentVersion("net.minecraft"));
-
- bool supportsFabric = minecraftVersion >= Version("1.14");
- ui->actionInstall_Fabric->setEnabled(supportsFabric);
-
- bool supportsQuilt = minecraftVersion >= Version("1.14");
- ui->actionInstall_Quilt->setEnabled(supportsQuilt);
-
- bool supportsLiteLoader = minecraftVersion <= Version("1.12.2");
- ui->actionInstall_LiteLoader->setEnabled(supportsLiteLoader);
-
updateButtons();
}
@@ -389,20 +378,14 @@ void VersionPage::on_actionChange_version_triggered()
return;
}
auto uid = list->uid();
- // FIXME: this is a horrible HACK. Get version filtering information from the actual metadata...
- if (uid == "net.minecraftforge") {
- on_actionInstall_Forge_triggered();
- return;
- } else if (uid == "com.mumfrey.liteloader") {
- on_actionInstall_LiteLoader_triggered();
- return;
- }
+
VersionSelectDialog vselect(list.get(), tr("Change %1 version").arg(name), this);
if (uid == "net.fabricmc.intermediary" || uid == "org.quiltmc.hashed") {
vselect.setEmptyString(tr("No intermediary mappings versions are currently available."));
vselect.setEmptyErrorString(tr("Couldn't load or download the intermediary mappings version lists!"));
- vselect.setExactFilter(BaseVersionList::ParentVersionRole, m_profile->getComponentVersion("net.minecraft"));
}
+ vselect.setExactIfPresentFilter(BaseVersionList::ParentVersionRole, m_profile->getComponentVersion("net.minecraft"));
+
auto currentVersion = patch->getVersion();
if (!currentVersion.isEmpty()) {
vselect.setCurrentVersion(currentVersion);
@@ -443,79 +426,11 @@ void VersionPage::on_actionDownload_All_triggered()
m_container->refreshContainer();
}
-void VersionPage::on_actionInstall_Forge_triggered()
-{
- auto vlist = APPLICATION->metadataIndex()->get("net.minecraftforge");
- if (!vlist) {
- return;
- }
- VersionSelectDialog vselect(vlist.get(), tr("Select Forge version"), this);
- vselect.setExactFilter(BaseVersionList::ParentVersionRole, m_profile->getComponentVersion("net.minecraft"));
- vselect.setEmptyString(tr("No Forge versions are currently available for Minecraft ") +
- m_profile->getComponentVersion("net.minecraft"));
- vselect.setEmptyErrorString(tr("Couldn't load or download the Forge version lists!"));
-
- auto currentVersion = m_profile->getComponentVersion("net.minecraftforge");
- if (!currentVersion.isEmpty()) {
- vselect.setCurrentVersion(currentVersion);
- }
-
- if (vselect.exec() && vselect.selectedVersion()) {
- auto vsn = vselect.selectedVersion();
- m_profile->setComponentVersion("net.minecraftforge", vsn->descriptor());
- m_profile->resolve(Net::Mode::Online);
- // m_profile->installVersion();
- preselect(m_profile->rowCount(QModelIndex()) - 1);
- m_container->refreshContainer();
- }
-}
-
-void VersionPage::on_actionInstall_Fabric_triggered()
+void VersionPage::on_actionInstall_Loader_triggered()
{
- auto vlist = APPLICATION->metadataIndex()->get("net.fabricmc.fabric-loader");
- if (!vlist) {
- return;
- }
- VersionSelectDialog vselect(vlist.get(), tr("Select Fabric Loader version"), this);
- vselect.setEmptyString(tr("No Fabric Loader versions are currently available."));
- vselect.setEmptyErrorString(tr("Couldn't load or download the Fabric Loader version lists!"));
-
- auto currentVersion = m_profile->getComponentVersion("net.fabricmc.fabric-loader");
- if (!currentVersion.isEmpty()) {
- vselect.setCurrentVersion(currentVersion);
- }
-
- if (vselect.exec() && vselect.selectedVersion()) {
- auto vsn = vselect.selectedVersion();
- m_profile->setComponentVersion("net.fabricmc.fabric-loader", vsn->descriptor());
- m_profile->resolve(Net::Mode::Online);
- preselect(m_profile->rowCount(QModelIndex()) - 1);
- m_container->refreshContainer();
- }
-}
-
-void VersionPage::on_actionInstall_Quilt_triggered()
-{
- auto vlist = APPLICATION->metadataIndex()->get("org.quiltmc.quilt-loader");
- if (!vlist) {
- return;
- }
- VersionSelectDialog vselect(vlist.get(), tr("Select Quilt Loader version"), this);
- vselect.setEmptyString(tr("No Quilt Loader versions are currently available."));
- vselect.setEmptyErrorString(tr("Couldn't load or download the Quilt Loader version lists!"));
-
- auto currentVersion = m_profile->getComponentVersion("org.quiltmc.quilt-loader");
- if (!currentVersion.isEmpty()) {
- vselect.setCurrentVersion(currentVersion);
- }
-
- if (vselect.exec() && vselect.selectedVersion()) {
- auto vsn = vselect.selectedVersion();
- m_profile->setComponentVersion("org.quiltmc.quilt-loader", vsn->descriptor());
- m_profile->resolve(Net::Mode::Online);
- preselect(m_profile->rowCount(QModelIndex()) - 1);
- m_container->refreshContainer();
- }
+ InstallLoaderDialog dialog(m_inst->getPackProfile(), QString(), this);
+ dialog.exec();
+ m_container->refreshContainer();
}
void VersionPage::on_actionAdd_Empty_triggered()
@@ -534,33 +449,6 @@ void VersionPage::on_actionAdd_Empty_triggered()
}
}
-void VersionPage::on_actionInstall_LiteLoader_triggered()
-{
- auto vlist = APPLICATION->metadataIndex()->get("com.mumfrey.liteloader");
- if (!vlist) {
- return;
- }
- VersionSelectDialog vselect(vlist.get(), tr("Select LiteLoader version"), this);
- vselect.setExactFilter(BaseVersionList::ParentVersionRole, m_profile->getComponentVersion("net.minecraft"));
- vselect.setEmptyString(tr("No LiteLoader versions are currently available for Minecraft ") +
- m_profile->getComponentVersion("net.minecraft"));
- vselect.setEmptyErrorString(tr("Couldn't load or download the LiteLoader version lists!"));
-
- auto currentVersion = m_profile->getComponentVersion("com.mumfrey.liteloader");
- if (!currentVersion.isEmpty()) {
- vselect.setCurrentVersion(currentVersion);
- }
-
- if (vselect.exec() && vselect.selectedVersion()) {
- auto vsn = vselect.selectedVersion();
- m_profile->setComponentVersion("com.mumfrey.liteloader", vsn->descriptor());
- m_profile->resolve(Net::Mode::Online);
- // m_profile->installVersion(vselect.selectedVersion());
- preselect(m_profile->rowCount(QModelIndex()) - 1);
- m_container->refreshContainer();
- }
-}
-
void VersionPage::on_actionLibrariesFolder_triggered()
{
DesktopServices::openDirectory(m_inst->getLocalLibraryPath(), true);
@@ -571,7 +459,7 @@ void VersionPage::on_actionMinecraftFolder_triggered()
DesktopServices::openDirectory(m_inst->gameRoot(), true);
}
-void VersionPage::versionCurrent(const QModelIndex& current, const QModelIndex& previous)
+void VersionPage::versionCurrent(const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
currentIdx = current.row();
updateButtons(currentIdx);
diff --git a/launcher/ui/pages/instance/VersionPage.h b/launcher/ui/pages/instance/VersionPage.h
index 45d383f4..6915be88 100644
--- a/launcher/ui/pages/instance/VersionPage.h
+++ b/launcher/ui/pages/instance/VersionPage.h
@@ -68,11 +68,8 @@ class VersionPage : public QMainWindow, public BasePage {
private slots:
void on_actionChange_version_triggered();
- void on_actionInstall_Forge_triggered();
- void on_actionInstall_Fabric_triggered();
- void on_actionInstall_Quilt_triggered();
+ void on_actionInstall_Loader_triggered();
void on_actionAdd_Empty_triggered();
- void on_actionInstall_LiteLoader_triggered();
void on_actionReload_triggered();
void on_actionRemove_triggered();
void on_actionMove_up_triggered();
diff --git a/launcher/ui/pages/instance/VersionPage.ui b/launcher/ui/pages/instance/VersionPage.ui
index a73c42d6..9be21d49 100644
--- a/launcher/ui/pages/instance/VersionPage.ui
+++ b/launcher/ui/pages/instance/VersionPage.ui
@@ -98,11 +98,7 @@
<addaction name="actionEdit"/>
<addaction name="actionRevert"/>
<addaction name="separator"/>
- <addaction name="actionInstall_Forge"/>
- <addaction name="actionInstall_Fabric"/>
- <addaction name="actionInstall_Quilt"/>
- <addaction name="actionInstall_LiteLoader"/>
- <addaction name="separator"/>
+ <addaction name="actionInstall_Loader"/>
<addaction name="actionAdd_to_Minecraft_jar"/>
<addaction name="actionReplace_Minecraft_jar"/>
<addaction name="actionAdd_Agents"/>
@@ -116,26 +112,26 @@
</widget>
<action name="actionChange_version">
<property name="text">
- <string>Change version</string>
+ <string>Change Version</string>
</property>
<property name="toolTip">
- <string>Change version of the selected package.</string>
+ <string>Change version of the selected component.</string>
</property>
</action>
<action name="actionMove_up">
<property name="text">
- <string>Move up</string>
+ <string>Move Up</string>
</property>
<property name="toolTip">
- <string>Make the selected package apply sooner.</string>
+ <string>Make the selected component apply sooner.</string>
</property>
</action>
<action name="actionMove_down">
<property name="text">
- <string>Move down</string>
+ <string>Move Down</string>
</property>
<property name="toolTip">
- <string>Make the selected package apply later.</string>
+ <string>Make the selected component apply later.</string>
</property>
</action>
<action name="actionRemove">
@@ -143,7 +139,7 @@
<string>Remove</string>
</property>
<property name="toolTip">
- <string>Remove selected package from the instance.</string>
+ <string>Remove selected component from the instance.</string>
</property>
</action>
<action name="actionCustomize">
@@ -151,7 +147,7 @@
<string>Customize</string>
</property>
<property name="toolTip">
- <string>Customize selected package.</string>
+ <string>Customize selected component.</string>
</property>
</action>
<action name="actionEdit">
@@ -159,7 +155,7 @@
<string>Edit</string>
</property>
<property name="toolTip">
- <string>Edit selected package.</string>
+ <string>Edit selected component.</string>
</property>
</action>
<action name="actionRevert">
@@ -167,39 +163,15 @@
<string>Revert</string>
</property>
<property name="toolTip">
- <string>Revert the selected package to default.</string>
- </property>
- </action>
- <action name="actionInstall_Forge">
- <property name="text">
- <string>Install Forge</string>
- </property>
- <property name="toolTip">
- <string>Install the Minecraft Forge package.</string>
- </property>
- </action>
- <action name="actionInstall_Fabric">
- <property name="text">
- <string>Install Fabric</string>
- </property>
- <property name="toolTip">
- <string>Install the Fabric Loader package.</string>
- </property>
- </action>
- <action name="actionInstall_Quilt">
- <property name="text">
- <string>Install Quilt</string>
- </property>
- <property name="toolTip">
- <string>Install the Quilt Loader package.</string>
+ <string>Revert the selected component to default.</string>
</property>
</action>
- <action name="actionInstall_LiteLoader">
+ <action name="actionInstall_Loader">
<property name="text">
- <string>Install LiteLoader</string>
+ <string>Install Loader</string>
</property>
<property name="toolTip">
- <string>Install the LiteLoader package.</string>
+ <string>Install a mod loader.</string>
</property>
</action>
<action name="actionAdd_to_Minecraft_jar">
@@ -228,7 +200,7 @@
<string>Add Empty</string>
</property>
<property name="toolTip">
- <string>Add an empty custom package.</string>
+ <string>Add an empty custom component.</string>
</property>
</action>
<action name="actionReload">
@@ -236,12 +208,12 @@
<string>Reload</string>
</property>
<property name="toolTip">
- <string>Reload all packages.</string>
+ <string>Reload all components.</string>
</property>
</action>
<action name="actionDownload_All">
<property name="text">
- <string>Download All</string>
+ <string>Download all</string>
</property>
<property name="toolTip">
<string>Download the files needed to launch the instance now.</string>
diff --git a/launcher/ui/pages/instance/WorldListPage.cpp b/launcher/ui/pages/instance/WorldListPage.cpp
index b2200b1a..587bb6ce 100644
--- a/launcher/ui/pages/instance/WorldListPage.cpp
+++ b/launcher/ui/pages/instance/WorldListPage.cpp
@@ -36,45 +36,42 @@
*/
#include "WorldListPage.h"
+#include "minecraft/WorldList.h"
#include "ui/dialogs/CustomMessageBox.h"
#include "ui_WorldListPage.h"
-#include "minecraft/WorldList.h"
+#include <QClipboard>
#include <QEvent>
-#include <QMenu>
+#include <QInputDialog>
#include <QKeyEvent>
-#include <QClipboard>
+#include <QMenu>
#include <QMessageBox>
#include <QSortFilterProxyModel>
#include <QTreeView>
-#include <QInputDialog>
#include <Qt>
-#include "tools/MCEditTool.h"
#include "FileSystem.h"
+#include "tools/MCEditTool.h"
-#include "ui/GuiUtil.h"
#include "DesktopServices.h"
+#include "ui/GuiUtil.h"
#include "Application.h"
-
-class WorldListProxyModel : public QSortFilterProxyModel
-{
+class WorldListProxyModel : public QSortFilterProxyModel {
Q_OBJECT
-public:
- WorldListProxyModel(QObject *parent) : QSortFilterProxyModel(parent) {}
+ public:
+ WorldListProxyModel(QObject* parent) : QSortFilterProxyModel(parent) {}
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const
{
QModelIndex sourceIndex = mapToSource(index);
- if (index.column() == 0 && role == Qt::DecorationRole)
- {
- WorldList *worlds = qobject_cast<WorldList *>(sourceModel());
+ if (index.column() == 0 && role == Qt::DecorationRole) {
+ WorldList* worlds = qobject_cast<WorldList*>(sourceModel());
auto iconFile = worlds->data(sourceIndex, WorldList::IconFileRole).toString();
- if(iconFile.isNull()) {
+ if (iconFile.isNull()) {
// NOTE: Minecraft uses the same placeholder for servers AND worlds
return APPLICATION->getThemedIcon("unknown_server");
}
@@ -85,15 +82,14 @@ public:
}
};
-
-WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr<WorldList> worlds, QWidget *parent)
+WorldListPage::WorldListPage(BaseInstance* inst, std::shared_ptr<WorldList> worlds, QWidget* parent)
: QMainWindow(parent), m_inst(inst), ui(new Ui::WorldListPage), m_worlds(worlds)
{
ui->setupUi(this);
ui->toolBar->insertSpacer(ui->actionRefresh);
- WorldListProxyModel * proxy = new WorldListProxyModel(this);
+ WorldListProxyModel* proxy = new WorldListProxyModel(this);
proxy->setSortCaseSensitivity(Qt::CaseInsensitive);
proxy->setSourceModel(m_worlds.get());
proxy->setSortRole(Qt::UserRole);
@@ -101,7 +97,7 @@ WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr<WorldList> worl
ui->worldTreeView->setModel(proxy);
ui->worldTreeView->installEventFilter(this);
ui->worldTreeView->setContextMenuPolicy(Qt::CustomContextMenu);
- ui->worldTreeView->setIconSize(QSize(64,64));
+ ui->worldTreeView->setIconSize(QSize(64, 64));
connect(ui->worldTreeView, &QTreeView::customContextMenuRequested, this, &WorldListPage::ShowContextMenu);
auto head = ui->worldTreeView->header();
@@ -146,10 +142,10 @@ void WorldListPage::ShowContextMenu(const QPoint& pos)
delete menu;
}
-QMenu * WorldListPage::createPopupMenu()
+QMenu* WorldListPage::createPopupMenu()
{
QMenu* filteredMenu = QMainWindow::createPopupMenu();
- filteredMenu->removeAction( ui->toolBar->toggleViewAction() );
+ filteredMenu->removeAction(ui->toolBar->toggleViewAction());
return filteredMenu;
}
@@ -163,26 +159,24 @@ void WorldListPage::retranslate()
ui->retranslateUi(this);
}
-bool WorldListPage::worldListFilter(QKeyEvent *keyEvent)
+bool WorldListPage::worldListFilter(QKeyEvent* keyEvent)
{
- switch (keyEvent->key())
- {
- case Qt::Key_Delete:
- on_actionRemove_triggered();
- return true;
- default:
- break;
+ switch (keyEvent->key()) {
+ case Qt::Key_Delete:
+ on_actionRemove_triggered();
+ return true;
+ default:
+ break;
}
return QWidget::eventFilter(ui->worldTreeView, keyEvent);
}
-bool WorldListPage::eventFilter(QObject *obj, QEvent *ev)
+bool WorldListPage::eventFilter(QObject* obj, QEvent* ev)
{
- if (ev->type() != QEvent::KeyPress)
- {
+ if (ev->type() != QEvent::KeyPress) {
return QWidget::eventFilter(obj, ev);
}
- QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
+ QKeyEvent* keyEvent = static_cast<QKeyEvent*>(ev);
if (obj == ui->worldTreeView)
return worldListFilter(keyEvent);
return QWidget::eventFilter(obj, ev);
@@ -192,7 +186,7 @@ void WorldListPage::on_actionRemove_triggered()
{
auto proxiedIndex = getSelectedWorld();
- if(!proxiedIndex.isValid())
+ if (!proxiedIndex.isValid())
return;
auto result = CustomMessageBox::selectable(this, tr("Confirm Deletion"),
@@ -203,8 +197,7 @@ void WorldListPage::on_actionRemove_triggered()
QMessageBox::Warning, QMessageBox::Yes | QMessageBox::No, QMessageBox::No)
->exec();
- if(result != QMessageBox::Yes)
- {
+ if (result != QMessageBox::Yes) {
return;
}
m_worlds->stopWatching();
@@ -221,12 +214,11 @@ void WorldListPage::on_actionDatapacks_triggered()
{
QModelIndex index = getSelectedWorld();
- if (!index.isValid())
- {
+ if (!index.isValid()) {
return;
}
- if(!worldSafetyNagQuestion(tr("Open World Datapacks Folder")))
+ if (!worldSafetyNagQuestion(tr("Open World Datapacks Folder")))
return;
auto fullPath = m_worlds->data(index, WorldList::FolderRole).toString();
@@ -234,25 +226,23 @@ void WorldListPage::on_actionDatapacks_triggered()
DesktopServices::openDirectory(FS::PathCombine(fullPath, "datapacks"), true);
}
-
void WorldListPage::on_actionReset_Icon_triggered()
{
auto proxiedIndex = getSelectedWorld();
- if(!proxiedIndex.isValid())
+ if (!proxiedIndex.isValid())
return;
- if(m_worlds->resetIcon(proxiedIndex.row())) {
+ if (m_worlds->resetIcon(proxiedIndex.row())) {
ui->actionReset_Icon->setEnabled(false);
}
}
-
QModelIndex WorldListPage::getSelectedWorld()
{
auto index = ui->worldTreeView->selectionModel()->currentIndex();
- auto proxy = (QSortFilterProxyModel *) ui->worldTreeView->model();
+ auto proxy = (QSortFilterProxyModel*)ui->worldTreeView->model();
return proxy->mapToSource(index);
}
@@ -260,8 +250,7 @@ void WorldListPage::on_actionCopy_Seed_triggered()
{
QModelIndex index = getSelectedWorld();
- if (!index.isValid())
- {
+ if (!index.isValid()) {
return;
}
int64_t seed = m_worlds->data(index, WorldList::SeedRole).toLongLong();
@@ -270,7 +259,7 @@ void WorldListPage::on_actionCopy_Seed_triggered()
void WorldListPage::on_actionMCEdit_triggered()
{
- if(m_mceditStarting)
+ if (m_mceditStarting)
return;
auto mcedit = APPLICATION->mcedit();
@@ -279,81 +268,66 @@ void WorldListPage::on_actionMCEdit_triggered()
QModelIndex index = getSelectedWorld();
- if (!index.isValid())
- {
+ if (!index.isValid()) {
return;
}
- if(!worldSafetyNagQuestion(tr("Open World in MCEdit")))
+ if (!worldSafetyNagQuestion(tr("Open World in MCEdit")))
return;
auto fullPath = m_worlds->data(index, WorldList::FolderRole).toString();
auto program = mcedit->getProgramPath();
- if(program.size())
- {
+ if (program.size()) {
#ifdef Q_OS_WIN32
- if(!QProcess::startDetached(program, {fullPath}, mceditPath))
- {
+ if (!QProcess::startDetached(program, { fullPath }, mceditPath)) {
mceditError();
}
#else
m_mceditProcess.reset(new LoggedProcess());
m_mceditProcess->setDetachable(true);
connect(m_mceditProcess.get(), &LoggedProcess::stateChanged, this, &WorldListPage::mceditState);
- m_mceditProcess->start(program, {fullPath});
+ m_mceditProcess->start(program, { fullPath });
m_mceditProcess->setWorkingDirectory(mceditPath);
m_mceditStarting = true;
#endif
- }
- else
- {
- QMessageBox::warning(
- this->parentWidget(),
- tr("No MCEdit found or set up!"),
- tr("You do not have MCEdit set up or it was moved.\nYou can set it up in the global settings.")
- );
+ } else {
+ QMessageBox::warning(this->parentWidget(), tr("No MCEdit found or set up!"),
+ tr("You do not have MCEdit set up or it was moved.\nYou can set it up in the global settings."));
}
}
void WorldListPage::mceditError()
{
- QMessageBox::warning(
- this->parentWidget(),
- tr("MCEdit failed to start!"),
- tr("MCEdit failed to start.\nIt may be necessary to reinstall it.")
- );
+ QMessageBox::warning(this->parentWidget(), tr("MCEdit failed to start!"),
+ tr("MCEdit failed to start.\nIt may be necessary to reinstall it."));
}
void WorldListPage::mceditState(LoggedProcess::State state)
{
bool failed = false;
- switch(state)
- {
+ switch (state) {
case LoggedProcess::NotRunning:
case LoggedProcess::Starting:
return;
case LoggedProcess::FailedToStart:
case LoggedProcess::Crashed:
- case LoggedProcess::Aborted:
- {
+ case LoggedProcess::Aborted: {
failed = true;
}
/* fallthrough */
case LoggedProcess::Running:
- case LoggedProcess::Finished:
- {
+ case LoggedProcess::Finished: {
m_mceditStarting = false;
break;
}
}
- if(failed)
- {
+ if (failed) {
mceditError();
}
}
-void WorldListPage::worldChanged(const QModelIndex &current, const QModelIndex &previous)
+void WorldListPage::worldChanged([[maybe_unused]] const QModelIndex& current, [[maybe_unused]] const QModelIndex& previous)
{
QModelIndex index = getSelectedWorld();
bool enable = index.isValid();
@@ -369,15 +343,11 @@ void WorldListPage::worldChanged(const QModelIndex &current, const QModelIndex &
void WorldListPage::on_actionAdd_triggered()
{
- auto list = GuiUtil::BrowseForFiles(
- displayName(),
- tr("Select a Minecraft world zip"),
- tr("Minecraft World Zip File (*.zip)"), QString(), this->parentWidget());
- if (!list.empty())
- {
+ auto list = GuiUtil::BrowseForFiles(displayName(), tr("Select a Minecraft world zip"), tr("Minecraft World Zip File (*.zip)"),
+ QString(), this->parentWidget());
+ if (!list.empty()) {
m_worlds->stopWatching();
- for (auto filename : list)
- {
+ for (auto filename : list) {
m_worlds->installWorld(QFileInfo(filename));
}
m_worlds->startWatching();
@@ -389,38 +359,35 @@ bool WorldListPage::isWorldSafe(QModelIndex)
return !m_inst->isRunning();
}
-bool WorldListPage::worldSafetyNagQuestion(const QString &actionType)
+bool WorldListPage::worldSafetyNagQuestion(const QString& actionType)
{
- if(!isWorldSafe(getSelectedWorld()))
- {
- auto result = QMessageBox::question(this, actionType, tr("Changing a world while Minecraft is running is potentially unsafe.\nDo you wish to proceed?"));
- if(result == QMessageBox::No)
- {
+ if (!isWorldSafe(getSelectedWorld())) {
+ auto result = QMessageBox::question(
+ this, actionType, tr("Changing a world while Minecraft is running is potentially unsafe.\nDo you wish to proceed?"));
+ if (result == QMessageBox::No) {
return false;
}
}
return true;
}
-
void WorldListPage::on_actionCopy_triggered()
{
QModelIndex index = getSelectedWorld();
- if (!index.isValid())
- {
+ if (!index.isValid()) {
return;
}
- if(!worldSafetyNagQuestion(tr("Copy World")))
+ if (!worldSafetyNagQuestion(tr("Copy World")))
return;
auto worldVariant = m_worlds->data(index, WorldList::ObjectRole);
- auto world = (World *) worldVariant.value<void *>();
+ auto world = (World*)worldVariant.value<void*>();
bool ok = false;
- QString name = QInputDialog::getText(this, tr("World name"), tr("Enter a new name for the copy."), QLineEdit::Normal, world->name(), &ok);
+ QString name =
+ QInputDialog::getText(this, tr("World name"), tr("Enter a new name for the copy."), QLineEdit::Normal, world->name(), &ok);
- if (ok && name.length() > 0)
- {
+ if (ok && name.length() > 0) {
world->install(m_worlds->dir().absolutePath(), name);
}
}
@@ -428,22 +395,20 @@ void WorldListPage::on_actionCopy_triggered()
void WorldListPage::on_actionRename_triggered()
{
QModelIndex index = getSelectedWorld();
- if (!index.isValid())
- {
+ if (!index.isValid()) {
return;
}
- if(!worldSafetyNagQuestion(tr("Rename World")))
+ if (!worldSafetyNagQuestion(tr("Rename World")))
return;
auto worldVariant = m_worlds->data(index, WorldList::ObjectRole);
- auto world = (World *) worldVariant.value<void *>();
+ auto world = (World*)worldVariant.value<void*>();
bool ok = false;
QString name = QInputDialog::getText(this, tr("World name"), tr("Enter a new world name."), QLineEdit::Normal, world->name(), &ok);
- if (ok && name.length() > 0)
- {
+ if (ok && name.length() > 0) {
world->rename(name);
}
}
diff --git a/launcher/ui/pages/instance/WorldListPage.h b/launcher/ui/pages/instance/WorldListPage.h
index 925521be..4f83002f 100644
--- a/launcher/ui/pages/instance/WorldListPage.h
+++ b/launcher/ui/pages/instance/WorldListPage.h
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
*
* This program is free software: you can redistribute it and/or modify
@@ -37,76 +37,58 @@
#include <QMainWindow>
-#include "minecraft/MinecraftInstance.h"
-#include "ui/pages/BasePage.h"
#include <Application.h>
#include <LoggedProcess.h>
+#include "minecraft/MinecraftInstance.h"
+#include "ui/pages/BasePage.h"
#include "settings/Setting.h"
class WorldList;
-namespace Ui
-{
+namespace Ui {
class WorldListPage;
}
-class WorldListPage : public QMainWindow, public BasePage
-{
+class WorldListPage : public QMainWindow, public BasePage {
Q_OBJECT
-public:
- explicit WorldListPage(
- BaseInstance *inst,
- std::shared_ptr<WorldList> worlds,
- QWidget *parent = 0
- );
+ public:
+ explicit WorldListPage(BaseInstance* inst, std::shared_ptr<WorldList> worlds, QWidget* parent = 0);
virtual ~WorldListPage();
- virtual QString displayName() const override
- {
- return tr("Worlds");
- }
- virtual QIcon icon() const override
- {
- return APPLICATION->getThemedIcon("worlds");
- }
- virtual QString id() const override
- {
- return "worlds";
- }
- virtual QString helpPage() const override
- {
- return "Worlds";
- }
+ virtual QString displayName() const override { return tr("Worlds"); }
+ virtual QIcon icon() const override { return APPLICATION->getThemedIcon("worlds"); }
+ virtual QString id() const override { return "worlds"; }
+ virtual QString helpPage() const override { return "Worlds"; }
virtual bool shouldDisplay() const override;
void retranslate() override;
virtual void openedImpl() override;
virtual void closedImpl() override;
-protected:
- bool eventFilter(QObject *obj, QEvent *ev) override;
- bool worldListFilter(QKeyEvent *ev);
- QMenu * createPopupMenu() override;
+ protected:
+ bool eventFilter(QObject* obj, QEvent* ev) override;
+ bool worldListFilter(QKeyEvent* ev);
+ QMenu* createPopupMenu() override;
-protected:
- BaseInstance *m_inst;
+ protected:
+ BaseInstance* m_inst;
-private:
+ private:
QModelIndex getSelectedWorld();
bool isWorldSafe(QModelIndex index);
- bool worldSafetyNagQuestion(const QString &actionType);
+ bool worldSafetyNagQuestion(const QString& actionType);
void mceditError();
-private:
- Ui::WorldListPage *ui;
+ private:
+ Ui::WorldListPage* ui;
std::shared_ptr<WorldList> m_worlds;
unique_qobject_ptr<LoggedProcess> m_mceditProcess;
bool m_mceditStarting = false;
std::shared_ptr<Setting> m_wide_bar_setting = nullptr;
-private slots:
+ private slots:
void on_actionCopy_Seed_triggered();
void on_actionMCEdit_triggered();
void on_actionRemove_triggered();
@@ -117,8 +99,8 @@ private slots:
void on_actionView_Folder_triggered();
void on_actionDatapacks_triggered();
void on_actionReset_Icon_triggered();
- void worldChanged(const QModelIndex &current, const QModelIndex &previous);
+ void worldChanged(const QModelIndex& current, const QModelIndex& previous);
void mceditState(LoggedProcess::State state);
- void ShowContextMenu(const QPoint &pos);
+ void ShowContextMenu(const QPoint& pos);
};