GFileSystemModel.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. #include <LibGUI/GModel.h>
  3. class GFileSystemModel : public GModel {
  4. friend class Node;
  5. public:
  6. enum Mode { Invalid, DirectoriesOnly, FilesAndDirectories };
  7. static Retained<GFileSystemModel> create(const String& root_path = "/", Mode mode = Mode::FilesAndDirectories)
  8. {
  9. return adopt(*new GFileSystemModel(root_path, mode));
  10. }
  11. virtual ~GFileSystemModel() override;
  12. String root_path() const { return m_root_path; }
  13. String path(const GModelIndex&) const;
  14. GModelIndex index(const String& path) const;
  15. virtual int row_count(const GModelIndex& = GModelIndex()) const override;
  16. virtual int column_count(const GModelIndex& = GModelIndex()) const override;
  17. virtual GVariant data(const GModelIndex&, Role = Role::Display) const override;
  18. virtual void update() override;
  19. virtual GModelIndex parent_index(const GModelIndex&) const override;
  20. virtual GModelIndex index(int row, int column = 0, const GModelIndex& parent = GModelIndex()) const override;
  21. virtual void activate(const GModelIndex&) override;
  22. private:
  23. GFileSystemModel(const String& root_path, Mode);
  24. String m_root_path;
  25. Mode m_mode { Invalid };
  26. struct Node;
  27. Node* m_root { nullptr };
  28. GIcon m_open_folder_icon;
  29. GIcon m_closed_folder_icon;
  30. GIcon m_file_icon;
  31. };