diff options
| author | Trial97 <alexandru.tripon97@gmail.com> | 2023-08-05 19:04:53 +0300 | 
|---|---|---|
| committer | Trial97 <alexandru.tripon97@gmail.com> | 2023-08-05 19:04:53 +0300 | 
| commit | 91eb30f03795921b48360b79bdb739dcd0f10f17 (patch) | |
| tree | 1a2fccbbbf4751cf2cf6f6418cb525dcee5f2acd /launcher/ui/pages/instance | |
| parent | a3ffa6455021b69bd1940b65fefb3b6177c96730 (diff) | |
| parent | ae793f6cf11658c9abc5111e82d5ba7b3e6af127 (diff) | |
| download | PrismLauncher-91eb30f03795921b48360b79bdb739dcd0f10f17.tar.gz PrismLauncher-91eb30f03795921b48360b79bdb739dcd0f10f17.tar.bz2 PrismLauncher-91eb30f03795921b48360b79bdb739dcd0f10f17.zip | |
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLauncher into pack_changelog
Diffstat (limited to 'launcher/ui/pages/instance')
21 files changed, 649 insertions, 1057 deletions
| 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 943ff17f..687b82d7 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.cpp +++ b/launcher/ui/pages/instance/InstanceSettingsPage.cpp @@ -1,8 +1,9 @@  // 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>   *   *  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 @@ -37,8 +38,8 @@  #include "InstanceSettingsPage.h"  #include "ui_InstanceSettingsPage.h" -#include <QFileDialog>  #include <QDialog> +#include <QFileDialog>  #include <QMessageBox>  #include <sys.h> @@ -46,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" -#include "FileSystem.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(); @@ -77,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; @@ -103,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");      } @@ -117,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"); @@ -133,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"); @@ -149,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"); @@ -175,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");      } @@ -189,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");      } @@ -204,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"); @@ -220,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");      } @@ -234,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"); @@ -250,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");      } @@ -264,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");      } @@ -280,6 +245,14 @@ void InstanceSettingsPage::applySettings()          m_settings->reset("InstanceAccountId");      } +    bool overrideModLoaderSettings = ui->modLoaderSettingsGroupBox->isChecked(); +    m_settings->set("OverrideModLoaderSettings", overrideModLoaderSettings); +    if (overrideModLoaderSettings) { +        m_settings->set("DisableQuiltBeacon", ui->disableQuiltBeaconCheckBox->isChecked()); +    } else { +        m_settings->reset("DisableQuiltBeacon"); +    } +      // FIXME: This should probably be called by a signal instead      m_instance->updateRuntimeContext();  } @@ -307,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);      } @@ -323,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; @@ -337,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()); @@ -380,6 +344,10 @@ void InstanceSettingsPage::loadSettings()      ui->instanceAccountGroupBox->setChecked(m_settings->get("UseAccountForInstance").toBool());      updateAccountsMenu(); + +    // Mod loader specific settings +    ui->modLoaderSettingsGroupBox->setChecked(m_settings->get("OverrideModLoaderSettings").toBool()); +    ui->disableQuiltBeaconCheckBox->setChecked(m_settings->get("DisableQuiltBeacon").toBool());  }  void InstanceSettingsPage::on_javaDetectBtn_clicked() @@ -395,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(); @@ -412,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); @@ -434,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();  } @@ -457,7 +420,6 @@ void InstanceSettingsPage::updateAccountsMenu()          if (i == accountIndex)              ui->instanceAccountSelector->setCurrentIndex(i);      } -  }  QIcon InstanceSettingsPage::getFaceForAccount(MinecraftAccountPtr account) 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 8427965d..245433fe 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.ui +++ b/launcher/ui/pages/instance/InstanceSettingsPage.ui @@ -116,7 +116,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> @@ -542,6 +542,31 @@        </attribute>        <layout class="QVBoxLayout" name="verticalLayout_9">         <item> +        <widget class="QGroupBox" name="modLoaderSettingsGroupBox"> +         <property name="checkable"> +          <bool>true</bool> +         </property> +         <property name="checked"> +          <bool>false</bool> +         </property> +         <property name="title"> +          <string>Mod loader settings</string> +         </property> +         <layout class="QVBoxLayout" name="VerticalLayout_16"> +          <item> +           <widget class="QCheckBox" name="disableQuiltBeaconCheckBox"> +            <property name="text"> +             <string>Disable Quilt Loader Beacon</string> +            </property> +            <property name="toolTip"> +             <string>Disable Quilt loader's beacon for counting monthly active users</string> +            </property> +           </widget> +          </item> +         </layout> +        </widget> +       </item> +       <item>          <widget class="QGroupBox" name="gameTimeGroupBox">           <property name="enabled">            <bool>true</bool> 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/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..b80c08e1 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,34 +232,26 @@ 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); +    if (!failed.empty()) { +        QMessageBox* messageBox = new QMessageBox(this);          messageBox->setWindowTitle(tr("Error")); -        if(failed.size() > 5) -        { +        if (failed.size() > 5) {              messageBox->setText(tr("Couldn't delete some files!"));              messageBox->setDetailedText(failed.join('\n')); -        } -        else -        { +        } else {              messageBox->setText(tr("Couldn't delete some files:\n%1").arg(failed.join('\n')));          }          messageBox->setStandardButtons(QMessageBox::Ok); @@ -307,7 +263,6 @@ void OtherLogsPage::on_btnClean_clicked()      }  } -  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.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 4b1fa08a..07daca21 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 ¤t, const QModelIndex &previous) +void ServersPage::currentChanged(const QModelIndex& current, const QModelIndex& previous)  {      int nextServer = -1; -    if (!current.isValid()) -    { +    if (!current.isValid()) {          nextServer = -1; -    } -    else -    { +    } else {          nextServer = current.row();      }      currentServer = nextServer; @@ -702,18 +622,13 @@ void ServersPage::currentChanged(const QModelIndex ¤t, 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)  { -    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, nullptr, 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 ¤t, 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.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/WorldListPage.cpp b/launcher/ui/pages/instance/WorldListPage.cpp index b2200b1a..fe477616 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 ¤t, const QModelIndex &previous) +void WorldListPage::worldChanged(const QModelIndex& current, const QModelIndex& previous)  {      QModelIndex index = getSelectedWorld();      bool enable = index.isValid(); @@ -369,15 +343,11 @@ void WorldListPage::worldChanged(const QModelIndex ¤t, 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 ¤t, 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);  }; | 
