Project.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "Project.h"
  2. #include <LibCore/CFile.h>
  3. class ProjectModel final : public GModel {
  4. public:
  5. explicit ProjectModel(Project& project)
  6. : m_project(project)
  7. {
  8. }
  9. virtual int row_count(const GModelIndex& = GModelIndex()) const override { return m_project.m_files.size(); }
  10. virtual int column_count(const GModelIndex& = GModelIndex()) const override { return 1; }
  11. virtual GVariant data(const GModelIndex& index, Role role = Role::Display) const override
  12. {
  13. int row = index.row();
  14. if (role == Role::Display) {
  15. return m_project.m_files.at(row);
  16. }
  17. if (role == Role::Font) {
  18. extern String g_currently_open_file;
  19. if (m_project.m_files.at(row) == g_currently_open_file)
  20. return Font::default_bold_font();
  21. return {};
  22. }
  23. return {};
  24. }
  25. virtual void update() override {}
  26. private:
  27. Project& m_project;
  28. };
  29. Project::Project(Vector<String>&& files)
  30. : m_files(move(files))
  31. {
  32. m_model = adopt(*new ProjectModel(*this));
  33. }
  34. OwnPtr<Project> Project::load_from_file(const String& path)
  35. {
  36. auto file = CFile::construct(path);
  37. if (!file->open(CFile::ReadOnly))
  38. return nullptr;
  39. Vector<String> files;
  40. for (;;) {
  41. auto line = file->read_line(1024);
  42. if (line.is_null())
  43. break;
  44. files.append(String::copy(line, Chomp));
  45. }
  46. return OwnPtr(new Project(move(files)));
  47. }