GFileSystemModel.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  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. };