game_list.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. // Copyright 2015 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <QFileSystemWatcher>
  6. #include <QHBoxLayout>
  7. #include <QLabel>
  8. #include <QLineEdit>
  9. #include <QList>
  10. #include <QModelIndex>
  11. #include <QSettings>
  12. #include <QStandardItem>
  13. #include <QStandardItemModel>
  14. #include <QString>
  15. #include <QToolButton>
  16. #include <QTreeView>
  17. #include <QVBoxLayout>
  18. #include <QVector>
  19. #include <QWidget>
  20. #include "common/common_types.h"
  21. #include "uisettings.h"
  22. #include "yuzu/compatibility_list.h"
  23. class GameListWorker;
  24. class GameListSearchField;
  25. class GameListDir;
  26. class GMainWindow;
  27. namespace FileSys {
  28. class ManualContentProvider;
  29. class VfsFilesystem;
  30. } // namespace FileSys
  31. enum class GameListOpenTarget {
  32. SaveData,
  33. ModData,
  34. };
  35. enum class GameListRemoveTarget {
  36. ShaderCache,
  37. CustomConfiguration,
  38. };
  39. enum class InstalledEntryType {
  40. Game,
  41. Update,
  42. AddOnContent,
  43. };
  44. class GameList : public QWidget {
  45. Q_OBJECT
  46. public:
  47. enum {
  48. COLUMN_NAME,
  49. COLUMN_COMPATIBILITY,
  50. COLUMN_ADD_ONS,
  51. COLUMN_FILE_TYPE,
  52. COLUMN_SIZE,
  53. COLUMN_COUNT, // Number of columns
  54. };
  55. explicit GameList(std::shared_ptr<FileSys::VfsFilesystem> vfs,
  56. FileSys::ManualContentProvider* provider, GMainWindow* parent = nullptr);
  57. ~GameList() override;
  58. QString getLastFilterResultItem() const;
  59. void clearFilter();
  60. void setFilterFocus();
  61. void setFilterVisible(bool visibility);
  62. bool isEmpty() const;
  63. void LoadCompatibilityList();
  64. void PopulateAsync(QVector<UISettings::GameDir>& game_dirs);
  65. void SaveInterfaceLayout();
  66. void LoadInterfaceLayout();
  67. static const QStringList supported_file_extensions;
  68. signals:
  69. void GameChosen(QString game_path);
  70. void ShouldCancelWorker();
  71. void OpenFolderRequested(GameListOpenTarget target, const std::string& game_path);
  72. void OpenTransferableShaderCacheRequested(u64 program_id);
  73. void RemoveInstalledEntryRequested(u64 program_id, InstalledEntryType type);
  74. void RemoveFileRequested(u64 program_id, GameListRemoveTarget target);
  75. void DumpRomFSRequested(u64 program_id, const std::string& game_path);
  76. void CopyTIDRequested(u64 program_id);
  77. void NavigateToGamedbEntryRequested(u64 program_id,
  78. const CompatibilityList& compatibility_list);
  79. void OpenPerGameGeneralRequested(const std::string& file);
  80. void OpenDirectory(const QString& directory);
  81. void AddDirectory();
  82. void ShowList(bool show);
  83. private slots:
  84. void onItemExpanded(const QModelIndex& item);
  85. void onTextChanged(const QString& new_text);
  86. void onFilterCloseClicked();
  87. void onUpdateThemedIcons();
  88. private:
  89. void AddDirEntry(GameListDir* entry_items);
  90. void AddEntry(const QList<QStandardItem*>& entry_items, GameListDir* parent);
  91. void ValidateEntry(const QModelIndex& item);
  92. void DonePopulating(QStringList watch_list);
  93. void RefreshGameDirectory();
  94. void PopupContextMenu(const QPoint& menu_location);
  95. void AddGamePopup(QMenu& context_menu, u64 program_id, std::string path);
  96. void AddCustomDirPopup(QMenu& context_menu, QModelIndex selected);
  97. void AddPermDirPopup(QMenu& context_menu, QModelIndex selected);
  98. std::shared_ptr<FileSys::VfsFilesystem> vfs;
  99. FileSys::ManualContentProvider* provider;
  100. GameListSearchField* search_field;
  101. GMainWindow* main_window = nullptr;
  102. QVBoxLayout* layout = nullptr;
  103. QTreeView* tree_view = nullptr;
  104. QStandardItemModel* item_model = nullptr;
  105. GameListWorker* current_worker = nullptr;
  106. QFileSystemWatcher* watcher = nullptr;
  107. CompatibilityList compatibility_list;
  108. friend class GameListSearchField;
  109. };
  110. class GameListPlaceholder : public QWidget {
  111. Q_OBJECT
  112. public:
  113. explicit GameListPlaceholder(GMainWindow* parent = nullptr);
  114. ~GameListPlaceholder();
  115. signals:
  116. void AddDirectory();
  117. private slots:
  118. void onUpdateThemedIcons();
  119. protected:
  120. void mouseDoubleClickEvent(QMouseEvent* event) override;
  121. private:
  122. QVBoxLayout* layout = nullptr;
  123. QLabel* image = nullptr;
  124. QLabel* text = nullptr;
  125. };