ProjectFile.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include <Atomic/IO/Log.h>
  2. #include <Atomic/IO/File.h>
  3. #include <Atomic/Resource/JSONFile.h>
  4. #include "../ToolSystem.h"
  5. #include "Project.h"
  6. #include "ProjectFile.h"
  7. namespace ToolCore
  8. {
  9. ProjectFile::ProjectFile(Context* context) : Object(context)
  10. {
  11. }
  12. ProjectFile::~ProjectFile()
  13. {
  14. }
  15. void ProjectFile::WriteNewProject(const String& fullpath)
  16. {
  17. SharedPtr<JSONFile> jsonFile(new JSONFile(context_));
  18. JSONValue root = jsonFile->CreateRoot();
  19. root.SetInt("version", PROJECTFILE_VERSION);
  20. // project object
  21. JSONValue jproject = root.CreateChild("project");
  22. jproject.SetString("version", "1.0.0");
  23. // platforms
  24. root.CreateChild("platforms", JSON_ARRAY);
  25. SharedPtr<File> file(new File(context_, fullpath, FILE_WRITE));
  26. jsonFile->Save(*file, String(" "));
  27. file->Close();
  28. }
  29. void ProjectFile::Save(Project* project)
  30. {
  31. project_ = project;
  32. ToolSystem* tsystem = GetSubsystem<ToolSystem>();
  33. String fullpath = project->GetProjectFilePath();
  34. SharedPtr<JSONFile> jsonFile(new JSONFile(context_));
  35. JSONValue root = jsonFile->CreateRoot();
  36. root.SetInt("version", PROJECTFILE_VERSION);
  37. // project object
  38. JSONValue jproject = root.CreateChild("project");
  39. jproject.SetString("version", project_->GetVersion());
  40. // platforms
  41. JSONValue platforms = root.CreateChild("platforms", JSON_ARRAY);
  42. for (List<PlatformID>::ConstIterator i = project_->platforms_.Begin(); i != project_->platforms_.End(); ++i)
  43. {
  44. Platform* platform = tsystem->GetPlatformByID(*i);
  45. if (platform)
  46. {
  47. platforms.AddString(platform->GetName().ToLower());
  48. }
  49. }
  50. // Save to file
  51. SharedPtr<File> file(new File(context_, fullpath, FILE_WRITE));
  52. jsonFile->Save(*file, String(" "));
  53. file->Close();
  54. }
  55. bool ProjectFile::Load(Project* project)
  56. {
  57. project_ = project;
  58. ToolSystem* tsystem = GetSubsystem<ToolSystem>();
  59. String fullpath = project->GetProjectFilePath();
  60. SharedPtr<File> file(new File(context_, fullpath, FILE_READ));
  61. SharedPtr<JSONFile> jsonFile(new JSONFile(context_));
  62. if (!jsonFile->BeginLoad(*file))
  63. return false;
  64. JSONValue root = jsonFile->GetRoot();
  65. int version = root.GetInt("version");
  66. if (version != PROJECTFILE_VERSION)
  67. return false;
  68. // project object
  69. JSONValue jproject = root.GetChild("project");
  70. if (jproject.IsObject())
  71. {
  72. String pversion = jproject.GetString("version");
  73. project_->SetVersion(pversion);
  74. }
  75. JSONValue platforms = root.GetChild("platforms");
  76. if (!platforms.IsArray())
  77. return false;
  78. for (unsigned i = 0; i < platforms.GetSize(); i++)
  79. {
  80. String jplatform = platforms.GetString(i);
  81. Platform* platform = tsystem->GetPlatformByName(jplatform);
  82. if (platform)
  83. project_->AddPlatform(platform->GetPlatformID());
  84. }
  85. return true;
  86. }
  87. }