diff options
Diffstat (limited to 'archived/projt-launcher/launcher/ui/MainWindow.h')
| -rw-r--r-- | archived/projt-launcher/launcher/ui/MainWindow.h | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/archived/projt-launcher/launcher/ui/MainWindow.h b/archived/projt-launcher/launcher/ui/MainWindow.h new file mode 100644 index 0000000000..650825f2b5 --- /dev/null +++ b/archived/projt-launcher/launcher/ui/MainWindow.h @@ -0,0 +1,296 @@ +// SPDX-License-Identifier: GPL-3.0-only +// SPDX-FileCopyrightText: 2026 Project Tick +// SPDX-FileContributor: Project Tick Team +/* + * ProjT Launcher - Minecraft Launcher + * Copyright (C) 2026 Project Tick + * + * 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, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * === Upstream License Block (Do Not Modify) ============================== + * + * + * + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net> + * Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me> + * + * This program is free software: you can redistribute it and/or modify + * 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, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * 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. + * + * ======================================================================== */ + +#pragma once + +#include <memory> + +#include <QMainWindow> +#include <QPointer> +#include <QProcess> +#include <QUrl> +#include <QTimer> + +#include "BaseInstance.h" +#include "minecraft/auth/MinecraftAccount.hpp" + +class LaunchController; +class NewsChecker; +class QToolButton; +class InstanceProxyModel; +class LabeledToolButton; +class QLabel; +class MinecraftLauncher; +class BaseProfilerFactory; +class InstanceView; +class KonamiCode; +class InstanceTask; +class LabeledToolButton; +class LauncherHubWidget; +class QStackedWidget; + +namespace Ui +{ + class MainWindow; +} +class MainWindow : public QMainWindow +{ + Q_OBJECT + + public: + explicit MainWindow(QWidget* parent = 0); + ~MainWindow(); + + bool eventFilter(QObject* obj, QEvent* ev) override; + void closeEvent(QCloseEvent* event) override; + void changeEvent(QEvent* event) override; + + void checkInstancePathForProblems(); + + void updatesAllowedChanged(bool allowed); + + void processURLs(QList<QUrl> urls); + signals: + void isClosing(); + + protected: + QMenu* createPopupMenu() override; + + private slots: + void onCatToggled(bool); + + void onCatChanged(int); + + void on_actionAbout_triggered(); + + void on_actionAddInstance_triggered(); + + void on_actionREDDIT_triggered(); + + void on_actionMATRIX_triggered(); + + void on_actionDISCORD_triggered(); + + void on_actionCopyInstance_triggered(); + + void on_actionChangeInstGroup_triggered(); + + void on_actionChangeInstIcon_triggered(); + + void on_actionViewLauncherRootFolder_triggered(); + + void on_actionViewInstanceFolder_triggered(); + void on_actionViewCentralModsFolder_triggered(); + + void on_actionViewIconThemeFolder_triggered(); + void on_actionViewWidgetThemeFolder_triggered(); + void on_actionViewCatPackFolder_triggered(); + void on_actionViewIconsFolder_triggered(); + void on_actionViewLogsFolder_triggered(); + void on_actionViewJavaFolder_triggered(); + + void on_actionViewSkinsFolder_triggered(); + + void on_actionViewSelectedInstFolder_triggered(); + + void refreshInstances(); + + void checkForUpdates(); + + void on_actionSettings_triggered(); + + void on_actionManageAccounts_triggered(); + + void on_actionReportBug_triggered(); + + void on_actionClearMetadata_triggered(); + +#ifdef Q_OS_MAC + void on_actionAddToPATH_triggered(); +#endif + + void on_actionOpenWiki_triggered(); + + void on_actionMoreNews_triggered(); + + void on_actionLauncherHub_triggered(); + + void newsButtonClicked(); + + void on_actionLaunchInstance_triggered(); + + void on_actionKillInstance_triggered(); + + void on_actionDeleteInstance_triggered(); + + void deleteGroup(QString group); + void renameGroup(QString group); + void undoTrashInstance(); + + inline void on_actionExportInstance_triggered() + { + on_actionExportInstanceZip_triggered(); + } + void on_actionExportInstanceZip_triggered(); + void on_actionExportInstanceMrPack_triggered(); + void on_actionExportInstanceFlamePack_triggered(); + + void on_actionManageBackups_triggered(); + + void on_actionRenameInstance_triggered(); + + void on_actionEditInstance_triggered(); + + void on_actionCreateInstanceShortcut_triggered(); + + void taskEnd(); + + /** + * called when an icon is changed in the icon model. + */ + void iconUpdated(QString); + + void showInstanceContextMenu(const QPoint&); + + void updateMainToolBar(); + + void updateLaunchButton(); + + void updateThemeMenu(); + + void instanceActivated(QModelIndex); + + void instanceChanged(const QModelIndex& current, const QModelIndex& previous); + + void instanceSelectRequest(QString id); + + void instanceDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight); + + void selectionBad(); + + void startTask(Task* task); + + void defaultAccountChanged(); + + void changeActiveAccount(); + + void repopulateAccountsMenu(); + + void updateNewsLabel(); + + void konamiTriggered(); + + void globalSettingsClosed(); + + void setStatusBarVisibility(bool); + + void lockToolbars(bool); + +#ifndef Q_OS_MAC + void keyReleaseEvent(QKeyEvent* event) override; +#endif + + void refreshCurrentInstance(); + + private: + void retranslateUi(); + + void addInstance(const QString& url = QString(), const QMap<QString, QString>& extra_info = {}); + void activateInstance(InstancePtr instance); + void setCatBackground(bool enabled); + void updateInstanceToolIcon(QString new_icon); + void setSelectedInstanceById(const QString& id); + void updateStatusCenter(); + void setInstanceActionsEnabled(bool enabled); + void showMainContent(); + void ensureLauncherHubPage(); + bool isLauncherHubVisible() const; + + void openLauncherHub(const QUrl& url = QUrl()); + + void runModalTask(Task* task); + void instanceFromInstanceTask(InstanceTask* task); + + private: + Ui::MainWindow* ui; + // these are managed by Qt's memory management model! + InstanceView* view = nullptr; + QStackedWidget* m_contentStack = nullptr; + QWidget* m_instancesPage = nullptr; + LauncherHubWidget* m_launcherHubWidget = nullptr; + InstanceProxyModel* proxymodel = nullptr; + QToolButton* newsLabel = nullptr; + QLabel* m_statusLeft = nullptr; + QLabel* m_statusCenter = nullptr; + LabeledToolButton* changeIconButton = nullptr; + LabeledToolButton* renameButton = nullptr; + QToolButton* helpMenuButton = nullptr; + KonamiCode* secretEventFilter = nullptr; + + std::shared_ptr<Setting> instanceToolbarSetting = nullptr; + + unique_qobject_ptr<NewsChecker> m_newsChecker; + + InstancePtr m_selectedInstance; + QString m_currentInstIcon; + + // managed by the application object + Task* m_versionLoadTask = nullptr; +}; |
