diff options
Diffstat (limited to 'launcher')
| -rw-r--r-- | launcher/ui/pages/BasePage.h | 24 | ||||
| -rw-r--r-- | launcher/ui/pages/instance/ExternalResourcesPage.cpp | 54 | ||||
| -rw-r--r-- | launcher/ui/pages/instance/ExternalResourcesPage.h | 1 | ||||
| -rw-r--r-- | launcher/ui/pages/instance/ModFolderPage.cpp | 27 | ||||
| -rw-r--r-- | launcher/ui/widgets/PageContainer.cpp | 4 | 
5 files changed, 80 insertions, 30 deletions
| diff --git a/launcher/ui/pages/BasePage.h b/launcher/ui/pages/BasePage.h index ceb24040..5537c28f 100644 --- a/launcher/ui/pages/BasePage.h +++ b/launcher/ui/pages/BasePage.h @@ -35,15 +35,16 @@  #pragma once -#include <QString>  #include <QIcon> +#include <QString> +#include <functional>  #include <memory>  #include "BasePageContainer.h" -class BasePage -{ -public: +class BasePage { +   public: +    using updateExtraInfoFunc = std::function<void(QString)>;      virtual ~BasePage() {}      virtual QString id() const = 0;      virtual QString displayName() const = 0; @@ -63,17 +64,16 @@ public:      }      virtual void openedImpl() {}      virtual void closedImpl() {} -    virtual void setParentContainer(BasePageContainer * container) -    { -        m_container = container; -    }; -    virtual void retranslate() { } +    virtual void setParentContainer(BasePageContainer* container) { m_container = container; }; +    virtual void retranslate() {} -public: +   public:      int stackIndex = -1;      int listIndex = -1; -protected: -    BasePageContainer * m_container = nullptr; +    updateExtraInfoFunc updateExtraInfo; + +   protected: +    BasePageContainer* m_container = nullptr;      bool isOpened = false;  }; diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.cpp b/launcher/ui/pages/instance/ExternalResourcesPage.cpp index 1115ddc3..e50fa635 100644 --- a/launcher/ui/pages/instance/ExternalResourcesPage.cpp +++ b/launcher/ui/pages/instance/ExternalResourcesPage.cpp @@ -1,3 +1,38 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + *  Prism Launcher - Minecraft Launcher + *  Copyright (c) 2023 Trial97 <alexandru.tripon97@gmail.com> + * + *  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 + *  the Free Software Foundation, version 3. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program.  If not, see <https://www.gnu.org/licenses/>. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + *      Copyright 2013-2021 MultiMC Contributors + * + *      Licensed under the Apache License, Version 2.0 (the "License"); + *      you may not use this file except in compliance with the License. + *      You may obtain a copy of the License at + * + *          http://www.apache.org/licenses/LICENSE-2.0 + * + *      Unless required by applicable law or agreed to in writing, software + *      distributed under the License is distributed on an "AS IS" BASIS, + *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + *      See the License for the specific language governing permissions and + *      limitations under the License. + */ +  #include "ExternalResourcesPage.h"  #include "ui/dialogs/CustomMessageBox.h"  #include "ui_ExternalResourcesPage.h" @@ -9,6 +44,7 @@  #include <QKeyEvent>  #include <QMenu> +#include <algorithm>  ExternalResourcesPage::ExternalResourcesPage(BaseInstance* instance, std::shared_ptr<ResourceFolderModel> model, QWidget* parent)      : QMainWindow(parent), m_instance(instance), ui(new Ui::ExternalResourcesPage), m_model(model) @@ -43,6 +79,13 @@ ExternalResourcesPage::ExternalResourcesPage(BaseInstance* instance, std::shared      auto selection_model = ui->treeView->selectionModel();      connect(selection_model, &QItemSelectionModel::currentChanged, this, &ExternalResourcesPage::current); +    auto updateExtra = [this]() { +        if (updateExtraInfo) +            updateExtraInfo(extraHeaderInfoString()); +    }; +    connect(selection_model, &QItemSelectionModel::selectionChanged, this, updateExtra); +    connect(model.get(), &ResourceFolderModel::updateFinished, this, updateExtra); +      connect(ui->filterEdit, &QLineEdit::textChanged, this, &ExternalResourcesPage::filterTextChanged);  } @@ -248,6 +291,15 @@ bool ExternalResourcesPage::onSelectionChanged(const QModelIndex& current, const      int row = sourceCurrent.row();      Resource const& resource = m_model->at(row);      ui->frame->updateWithResource(resource); -      return true;  } + +QString ExternalResourcesPage::extraHeaderInfoString() +{ +    if (ui && ui->treeView && ui->treeView->selectionModel()) { +        auto selection = m_filterModel->mapSelectionToSource(ui->treeView->selectionModel()->selection()).indexes(); +        if (auto count = std::count_if(selection.cbegin(), selection.cend(), [](auto v) { return v.column() == 0; }); count != 0) +            return tr(" (%1 installed, %2 selected)").arg(m_model->size()).arg(count); +    } +    return tr(" (%1 installed)").arg(m_model->size()); +} diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.h b/launcher/ui/pages/instance/ExternalResourcesPage.h index d17fbb7f..fd200193 100644 --- a/launcher/ui/pages/instance/ExternalResourcesPage.h +++ b/launcher/ui/pages/instance/ExternalResourcesPage.h @@ -29,6 +29,7 @@ class ExternalResourcesPage : public QMainWindow, public BasePage {      virtual QString helpPage() const override = 0;      virtual bool shouldDisplay() const override = 0; +    QString extraHeaderInfoString();      void openedImpl() override;      void closedImpl() override; diff --git a/launcher/ui/pages/instance/ModFolderPage.cpp b/launcher/ui/pages/instance/ModFolderPage.cpp index 4548af59..1d090ef4 100644 --- a/launcher/ui/pages/instance/ModFolderPage.cpp +++ b/launcher/ui/pages/instance/ModFolderPage.cpp @@ -4,6 +4,7 @@   *  Copyright (c) 2022 Jamie Mansfield <jmansfield@cadixdev.org>   *  Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>   *  Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + *  Copyright (c) 2023 Trial97 <alexandru.tripon97@gmail.com>   *   *  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 @@ -86,28 +87,20 @@ ModFolderPage::ModFolderPage(BaseInstance* inst, std::shared_ptr<ModFolderModel>          connect(ui->actionUpdateItem, &QAction::triggered, this, &ModFolderPage::updateMods);          auto check_allow_update = [this] { -            return (!m_instance || !m_instance->isRunning()) && -                   (ui->treeView->selectionModel()->hasSelection() || !m_model->empty()); +            return (!m_instance || !m_instance->isRunning()) && (ui->treeView->selectionModel()->hasSelection() || !m_model->empty());          }; -        connect(ui->treeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, [this, check_allow_update] { -            ui->actionUpdateItem->setEnabled(check_allow_update()); -        }); +        connect(ui->treeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, +                [this, check_allow_update] { ui->actionUpdateItem->setEnabled(check_allow_update()); }); -        connect(mods.get(), &ModFolderModel::rowsInserted, this, [this, check_allow_update] { -            ui->actionUpdateItem->setEnabled(check_allow_update()); -        }); +        connect(mods.get(), &ModFolderModel::rowsInserted, this, +                [this, check_allow_update] { ui->actionUpdateItem->setEnabled(check_allow_update()); }); -        connect(mods.get(), &ModFolderModel::rowsRemoved, this, [this, check_allow_update] { -            ui->actionUpdateItem->setEnabled(check_allow_update()); -        }); +        connect(mods.get(), &ModFolderModel::rowsRemoved, this, +                [this, check_allow_update] { ui->actionUpdateItem->setEnabled(check_allow_update()); }); -        connect(mods.get(), &ModFolderModel::updateFinished, this, [this, check_allow_update, mods] { -            ui->actionUpdateItem->setEnabled(check_allow_update()); - -            // Prevent a weird crash when trying to open the mods page twice in a session o.O -            disconnect(mods.get(), &ModFolderModel::updateFinished, this, 0); -        }); +        connect(mods.get(), &ModFolderModel::updateFinished, this, +                [this, check_allow_update, mods] { ui->actionUpdateItem->setEnabled(check_allow_update()); });          connect(m_instance, &BaseInstance::runningStatusChanged, this, &ModFolderPage::runningStateChanged);          ModFolderPage::runningStateChanged(m_instance && m_instance->isRunning()); diff --git a/launcher/ui/widgets/PageContainer.cpp b/launcher/ui/widgets/PageContainer.cpp index 38a22897..34df42ec 100644 --- a/launcher/ui/widgets/PageContainer.cpp +++ b/launcher/ui/widgets/PageContainer.cpp @@ -93,6 +93,10 @@ PageContainer::PageContainer(BasePageProvider *pageProvider, QString defaultId,          page->listIndex = counter;          page->setParentContainer(this);          counter++; +        page->updateExtraInfo = [this](QString info) { +            if (m_currentPage) +                m_header->setText(m_currentPage->displayName() + info); +        };      }      m_model->setPages(pages); | 
