summaryrefslogtreecommitdiff
path: root/src/citron/game_list.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/citron/game_list.h')
-rw-r--r--src/citron/game_list.h204
1 files changed, 204 insertions, 0 deletions
diff --git a/src/citron/game_list.h b/src/citron/game_list.h
new file mode 100644
index 000000000..79f9c7ec0
--- /dev/null
+++ b/src/citron/game_list.h
@@ -0,0 +1,204 @@
+// 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, StartGameType 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;
+};