GFileSystemModel.h 1.3 KB

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