projects.nim 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # author: Ethosa
  2. import
  3. os,
  4. nodesnim
  5. var
  6. projects_scene* = Scene("Projects")
  7. scroll_box* = Scroll()
  8. projects_box* = VBox()
  9. project_template* = ColorRect("Project")
  10. project_template_title* = Label("Title")
  11. project_template_icon* = TextureRect("Icon")
  12. default_icon*: GlTextureObj
  13. projects_scene.addChild(scroll_box)
  14. scroll_box.addChild(projects_box)
  15. scroll_box.setBackgroundColor(Color(0x1d242aff))
  16. projects_box.setChildAnchor(0, 0, 0, 0)
  17. projects_box.resize(720, 480)
  18. projects_box.separator = 0
  19. project_template.resize(10, 48)
  20. project_template.setSizeAnchor(1, 0)
  21. project_template.addChilds(project_template_title, project_template_icon)
  22. project_template_title.setText("Template title")
  23. project_template_title.setTextColor(Color(0xf2f2f7ff'u32))
  24. project_template_title.move(-2, 2)
  25. project_template_title.resize(128, 20)
  26. project_template_title.setSizeAnchor(1, 0)
  27. project_template_title.setTextAlign(1, 0, 1, 0)
  28. project_template_title.mousemode = MOUSEMODE_IGNORE
  29. project_template_title.setFont(GLUT_BITMAP_HELVETICA_18, 18)
  30. project_template_icon.resize(42, 42)
  31. project_template_icon.move(3, 3)
  32. project_template_icon.texture_mode = TEXTURE_KEEP_ASPECT_RATIO
  33. scroll_box@on_process(self):
  34. scroll_box.viewport_w = projects_scene.rect_size.x
  35. scroll_box.viewport_h = projects_scene.rect_size.y
  36. scroll_box.rect_size.x = scroll_box.viewport_w
  37. projects_box.rect_size.x = projects_scene.rect_size.x
  38. if scroll_box.rect_size.y < scroll_box.viewport_h:
  39. scroll_box.rect_size.y = scroll_box.viewport_h
  40. for child in scroll_box.getChildIter():
  41. child.calcPositionAnchor()
  42. project_template@on_process(self):
  43. var s = self.ColorRectRef
  44. if s.pressed and s.focused:
  45. s.color = Color(0x4e606eff)
  46. elif s.hovered and not mouse_pressed:
  47. s.color = Color(0x3a4652ff)
  48. else:
  49. s.color = Color(0x1d242aff)
  50. proc init* =
  51. default_icon = load("assets/project_default_icon.jpg")
  52. proc addNewProject*(name: string) =
  53. if not existsDir(nodesnim_folder / name):
  54. # files and folders
  55. createDir(nodesnim_folder / name)
  56. createDir(nodesnim_folder / name / "assets")
  57. copyFile("assets/project_default_icon.jpg", nodesnim_folder / name / "icon.jpg")
  58. var readme = open(nodesnim_folder / name / "README.md", fmWrite)
  59. readme.write("# " & name)
  60. readme.close()
  61. var gitignore = open(nodesnim_folder / name / ".gitignore", fmWrite)
  62. gitignore.write("nimcache/\nnimblecache/\nhtmldocs/\n\n*.exe\n*.log")
  63. gitignore.close()
  64. var new_project = project_template.duplicate()
  65. new_project.name = name
  66. new_project.getNode("Title").LabelRef.setText(name)
  67. new_project.getNode("Icon").TextureRectRef.setTexture(default_icon)
  68. projects_box.addChild(new_project)
  69. proc loadProject*(name: string) =
  70. var
  71. new_project = project_template.duplicate()
  72. project_icon = load(nodesnim_folder / name / "icon.jpg")
  73. new_project.name = name
  74. new_project.getNode("Title").LabelRef.setText(name)
  75. new_project.getNode("Icon").TextureRectRef.setTexture(project_icon)
  76. projects_box.addChild(new_project)
  77. proc loadProjects* =
  78. for kind, path in walkDir(nodesnim_folder):
  79. if existsDir(path) and path != nodesnim_folder / "saves":
  80. loadProject(path.lastPathPart())
  81. proc hasProject*(name: string): bool =
  82. existsDir(nodesnim_folder / name)