GFileSystemModel.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  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. virtual int row_count(const GModelIndex& = GModelIndex()) const override;
  14. virtual int column_count(const GModelIndex& = GModelIndex()) const override;
  15. virtual GVariant data(const GModelIndex&, Role = Role::Display) const override;
  16. virtual void update() override;
  17. virtual GModelIndex parent_index(const GModelIndex&) const override;
  18. virtual GModelIndex index(int row, int column = 0, const GModelIndex& = GModelIndex()) const override;
  19. virtual void activate(const GModelIndex&) override;
  20. private:
  21. GFileSystemModel(const String& root_path, Mode);
  22. String m_root_path;
  23. Mode m_mode { Invalid };
  24. struct Node;
  25. Node* m_root { nullptr };
  26. };