ProjectTemplatesModel.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2021, Nick Vella <nick@nxk.io>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/NonnullPtrVector.h>
  8. #include <AK/RefPtr.h>
  9. #include <AK/WeakPtr.h>
  10. #include <DevTools/HackStudio/ProjectTemplate.h>
  11. #include <LibCore/FileWatcher.h>
  12. #include <LibGUI/Model.h>
  13. namespace HackStudio {
  14. class ProjectTemplatesModel final : public GUI::Model {
  15. public:
  16. static NonnullRefPtr<ProjectTemplatesModel> create()
  17. {
  18. return adopt_ref(*new ProjectTemplatesModel());
  19. }
  20. enum Column {
  21. Icon = 0,
  22. Id,
  23. Name,
  24. __Count
  25. };
  26. virtual ~ProjectTemplatesModel() override;
  27. RefPtr<ProjectTemplate> template_for_index(const GUI::ModelIndex& index);
  28. virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
  29. virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
  30. virtual String column_name(int) const override;
  31. virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
  32. void update();
  33. void rescan_templates();
  34. private:
  35. explicit ProjectTemplatesModel();
  36. NonnullRefPtrVector<ProjectTemplate> m_templates;
  37. Vector<ProjectTemplate*> m_mapping;
  38. RefPtr<Core::FileWatcher> m_file_watcher;
  39. };
  40. }