| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- // SPDX-FileCopyrightText: 2015 Citra Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #pragma once
- #include <QFileSystemWatcher>
- #include <QLabel>
- #include <QLineEdit>
- #include <QList>
- #include <QStandardItemModel>
- #include <QString>
- #include <QTreeView>
- #include <QVBoxLayout>
- #include <QVector>
- #include <QWidget>
- #include "common/common_types.h"
- #include "core/core.h"
- #include "uisettings.h"
- #include "yuzu/compatibility_list.h"
- #include "yuzu/play_time_manager.h"
- namespace Core {
- class System;
- }
- class ControllerNavigation;
- class GameListWorker;
- class GameListSearchField;
- class GameListDir;
- class GMainWindow;
- enum class AmLaunchType;
- enum class StartGameType;
- namespace FileSys {
- class ManualContentProvider;
- class VfsFilesystem;
- } // namespace FileSys
- enum class GameListOpenTarget {
- SaveData,
- ModData,
- };
- enum class GameListRemoveTarget {
- GlShaderCache,
- VkShaderCache,
- AllShaderCache,
- CustomConfiguration,
- CacheStorage,
- };
- enum class DumpRomFSTarget {
- Normal,
- SDMC,
- };
- enum class GameListShortcutTarget {
- Desktop,
- Applications,
- };
- enum class InstalledEntryType {
- Game,
- Update,
- AddOnContent,
- };
- class GameList : public QWidget {
- Q_OBJECT
- public:
- enum {
- COLUMN_NAME,
- COLUMN_COMPATIBILITY,
- COLUMN_ADD_ONS,
- COLUMN_FILE_TYPE,
- COLUMN_SIZE,
- COLUMN_PLAY_TIME,
- COLUMN_COUNT, // Number of columns
- };
- explicit GameList(std::shared_ptr<FileSys::VfsFilesystem> vfs_,
- FileSys::ManualContentProvider* provider_,
- PlayTime::PlayTimeManager& play_time_manager_, Core::System& system_,
- GMainWindow* parent = nullptr);
- ~GameList() override;
- QString GetLastFilterResultItem() const;
- void ClearFilter();
- void SetFilterFocus();
- void SetFilterVisible(bool visibility);
- bool IsEmpty() const;
- void LoadCompatibilityList();
- void PopulateAsync(QVector<UISettings::GameDir>& game_dirs);
- void SaveInterfaceLayout();
- void LoadInterfaceLayout();
- QStandardItemModel* GetModel() const;
- /// Disables events from the emulated controller
- void UnloadController();
- static const QStringList supported_file_extensions;
- signals:
- void BootGame(const QString& game_path, u64 program_id, std::size_t program_index,
- StartGameType type, AmLaunchType launch_type);
- void GameChosen(const QString& game_path, const u64 title_id = 0);
- void OpenFolderRequested(u64 program_id, GameListOpenTarget target,
- const std::string& game_path);
- void OpenTransferableShaderCacheRequested(u64 program_id);
- void RemoveInstalledEntryRequested(u64 program_id, InstalledEntryType type);
- void RemoveFileRequested(u64 program_id, GameListRemoveTarget target,
- const std::string& game_path);
- void RemovePlayTimeRequested(u64 program_id);
- void DumpRomFSRequested(u64 program_id, const std::string& game_path, DumpRomFSTarget target);
- void VerifyIntegrityRequested(const std::string& game_path);
- void CopyTIDRequested(u64 program_id);
- void CreateShortcut(u64 program_id, const std::string& game_path,
- GameListShortcutTarget target);
- void NavigateToGamedbEntryRequested(u64 program_id,
- const CompatibilityList& compatibility_list);
- void OpenPerGameGeneralRequested(const std::string& file);
- void OpenDirectory(const QString& directory);
- void AddDirectory();
- void ShowList(bool show);
- void PopulatingCompleted();
- void SaveConfig();
- private slots:
- void OnItemExpanded(const QModelIndex& item);
- void OnTextChanged(const QString& new_text);
- void OnFilterCloseClicked();
- void OnUpdateThemedIcons();
- private:
- friend class GameListWorker;
- void WorkerEvent();
- void AddDirEntry(GameListDir* entry_items);
- void AddEntry(const QList<QStandardItem*>& entry_items, GameListDir* parent);
- void DonePopulating(const QStringList& watch_list);
- private:
- void ValidateEntry(const QModelIndex& item);
- void RefreshGameDirectory();
- void ToggleFavorite(u64 program_id);
- void AddFavorite(u64 program_id);
- void RemoveFavorite(u64 program_id);
- void PopupContextMenu(const QPoint& menu_location);
- void AddGamePopup(QMenu& context_menu, u64 program_id, const std::string& path);
- void AddCustomDirPopup(QMenu& context_menu, QModelIndex selected);
- void AddPermDirPopup(QMenu& context_menu, QModelIndex selected);
- void AddFavoritesPopup(QMenu& context_menu);
- void changeEvent(QEvent*) override;
- void RetranslateUI();
- std::shared_ptr<FileSys::VfsFilesystem> vfs;
- FileSys::ManualContentProvider* provider;
- GameListSearchField* search_field;
- GMainWindow* main_window = nullptr;
- QVBoxLayout* layout = nullptr;
- QTreeView* tree_view = nullptr;
- QStandardItemModel* item_model = nullptr;
- std::unique_ptr<GameListWorker> current_worker;
- QFileSystemWatcher* watcher = nullptr;
- ControllerNavigation* controller_navigation = nullptr;
- CompatibilityList compatibility_list;
- friend class GameListSearchField;
- const PlayTime::PlayTimeManager& play_time_manager;
- Core::System& system;
- };
- class GameListPlaceholder : public QWidget {
- Q_OBJECT
- public:
- explicit GameListPlaceholder(GMainWindow* parent = nullptr);
- ~GameListPlaceholder();
- signals:
- void AddDirectory();
- private slots:
- void onUpdateThemedIcons();
- protected:
- void mouseDoubleClickEvent(QMouseEvent* event) override;
- private:
- void changeEvent(QEvent* event) override;
- void RetranslateUI();
- QVBoxLayout* layout = nullptr;
- QLabel* image = nullptr;
- QLabel* text = nullptr;
- };
|