game_list.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 <QModelIndex>
  10. #include <QSettings>
  11. #include <QStandardItem>
  12. #include <QStandardItemModel>
  13. #include <QString>
  14. #include <QToolButton>
  15. #include <QTreeView>
  16. #include <QVBoxLayout>
  17. #include <QWidget>
  18. #include "common/common_types.h"
  19. #include "yuzu/compatibility_list.h"
  20. class GameListWorker;
  21. class GameListSearchField;
  22. class GMainWindow;
  23. namespace FileSys {
  24. class VfsFilesystem;
  25. }
  26. enum class GameListOpenTarget {
  27. SaveData,
  28. ModData,
  29. };
  30. class GameList : public QWidget {
  31. Q_OBJECT
  32. public:
  33. enum {
  34. COLUMN_NAME,
  35. COLUMN_COMPATIBILITY,
  36. COLUMN_ADD_ONS,
  37. COLUMN_FILE_TYPE,
  38. COLUMN_SIZE,
  39. COLUMN_COUNT, // Number of columns
  40. };
  41. explicit GameList(std::shared_ptr<FileSys::VfsFilesystem> vfs, GMainWindow* parent = nullptr);
  42. ~GameList() override;
  43. void clearFilter();
  44. void setFilterFocus();
  45. void setFilterVisible(bool visibility);
  46. void LoadCompatibilityList();
  47. void PopulateAsync(const QString& dir_path, bool deep_scan);
  48. void SaveInterfaceLayout();
  49. void LoadInterfaceLayout();
  50. static const QStringList supported_file_extensions;
  51. signals:
  52. void GameChosen(QString game_path);
  53. void ShouldCancelWorker();
  54. void OpenFolderRequested(u64 program_id, GameListOpenTarget target);
  55. void DumpRomFSRequested(u64 program_id, const std::string& game_path);
  56. void CopyTIDRequested(u64 program_id);
  57. void NavigateToGamedbEntryRequested(u64 program_id,
  58. const CompatibilityList& compatibility_list);
  59. private slots:
  60. void onTextChanged(const QString& newText);
  61. void onFilterCloseClicked();
  62. private:
  63. void AddEntry(const QList<QStandardItem*>& entry_items);
  64. void ValidateEntry(const QModelIndex& item);
  65. void DonePopulating(QStringList watch_list);
  66. void PopupContextMenu(const QPoint& menu_location);
  67. void RefreshGameDirectory();
  68. std::shared_ptr<FileSys::VfsFilesystem> vfs;
  69. GameListSearchField* search_field;
  70. GMainWindow* main_window = nullptr;
  71. QVBoxLayout* layout = nullptr;
  72. QTreeView* tree_view = nullptr;
  73. QStandardItemModel* item_model = nullptr;
  74. GameListWorker* current_worker = nullptr;
  75. QFileSystemWatcher* watcher = nullptr;
  76. CompatibilityList compatibility_list;
  77. friend class GameListSearchField;
  78. };
  79. Q_DECLARE_METATYPE(GameListOpenTarget);