|
@@ -0,0 +1,106 @@
|
|
|
+# author: Ethosa
|
|
|
+import
|
|
|
+ os,
|
|
|
+ nodesnim
|
|
|
+
|
|
|
+
|
|
|
+var
|
|
|
+ projects_scene* = Scene("Projects")
|
|
|
+
|
|
|
+ scroll_box* = Scroll()
|
|
|
+ projects_box* = VBox()
|
|
|
+ project_template* = ColorRect("Project")
|
|
|
+ project_template_title* = Label("Title")
|
|
|
+ project_template_icon* = TextureRect("Icon")
|
|
|
+
|
|
|
+ default_icon*: GlTextureObj
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+projects_scene.addChild(scroll_box)
|
|
|
+
|
|
|
+scroll_box.addChild(projects_box)
|
|
|
+scroll_box.setBackgroundColor(Color(0x1d242aff))
|
|
|
+
|
|
|
+projects_box.setChildAnchor(0, 0, 0, 0)
|
|
|
+projects_box.resize(720, 480)
|
|
|
+projects_box.separator = 0
|
|
|
+
|
|
|
+project_template.resize(10, 48)
|
|
|
+project_template.setSizeAnchor(1, 0)
|
|
|
+project_template.addChilds(project_template_title, project_template_icon)
|
|
|
+
|
|
|
+project_template_title.setText("Template title")
|
|
|
+project_template_title.setTextColor(Color(0xf2f2f7ff'u32))
|
|
|
+project_template_title.move(-2, 2)
|
|
|
+project_template_title.resize(128, 20)
|
|
|
+project_template_title.setSizeAnchor(1, 0)
|
|
|
+project_template_title.setTextAlign(1, 0, 1, 0)
|
|
|
+project_template_title.mousemode = MOUSEMODE_IGNORE
|
|
|
+project_template_title.setFont(GLUT_BITMAP_HELVETICA_18, 18)
|
|
|
+
|
|
|
+project_template_icon.resize(42, 42)
|
|
|
+project_template_icon.move(3, 3)
|
|
|
+project_template_icon.texture_mode = TEXTURE_KEEP_ASPECT_RATIO
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+scroll_box@on_process(self):
|
|
|
+ scroll_box.viewport_w = projects_scene.rect_size.x
|
|
|
+ scroll_box.viewport_h = projects_scene.rect_size.y
|
|
|
+ scroll_box.rect_size.x = scroll_box.viewport_w
|
|
|
+ projects_box.rect_size.x = projects_scene.rect_size.x
|
|
|
+ if scroll_box.rect_size.y < scroll_box.viewport_h:
|
|
|
+ scroll_box.rect_size.y = scroll_box.viewport_h
|
|
|
+ for child in scroll_box.getChildIter():
|
|
|
+ child.calcPositionAnchor()
|
|
|
+
|
|
|
+project_template@on_process(self):
|
|
|
+ var s = self.ColorRectRef
|
|
|
+ if s.pressed and s.focused:
|
|
|
+ s.color = Color(0x4e606eff)
|
|
|
+ elif s.hovered and not mouse_pressed:
|
|
|
+ s.color = Color(0x3a4652ff)
|
|
|
+ else:
|
|
|
+ s.color = Color(0x1d242aff)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+proc init* =
|
|
|
+ default_icon = load("assets/project_default_icon.jpg")
|
|
|
+
|
|
|
+proc addNewProject*(name: string) =
|
|
|
+ if not existsDir(nodesnim_folder / name):
|
|
|
+ # files and folders
|
|
|
+ createDir(nodesnim_folder / name)
|
|
|
+ createDir(nodesnim_folder / name / "assets")
|
|
|
+ copyFile("assets/project_default_icon.jpg", nodesnim_folder / name / "icon.jpg")
|
|
|
+ var readme = open(nodesnim_folder / name / "README.md", fmWrite)
|
|
|
+ readme.write("# " & name)
|
|
|
+ readme.close()
|
|
|
+ var gitignore = open(nodesnim_folder / name / ".gitignore", fmWrite)
|
|
|
+ gitignore.write("nimcache/\nnimblecache/\nhtmldocs/\n\n*.exe\n*.log")
|
|
|
+ gitignore.close()
|
|
|
+
|
|
|
+ var new_project = project_template.duplicate()
|
|
|
+ new_project.name = name
|
|
|
+ new_project.getNode("Title").LabelRef.setText(name)
|
|
|
+ new_project.getNode("Icon").TextureRectRef.setTexture(default_icon)
|
|
|
+ projects_box.addChild(new_project)
|
|
|
+
|
|
|
+proc loadProject*(name: string) =
|
|
|
+ var
|
|
|
+ new_project = project_template.duplicate()
|
|
|
+ project_icon = load(nodesnim_folder / name / "icon.jpg")
|
|
|
+ new_project.name = name
|
|
|
+ new_project.getNode("Title").LabelRef.setText(name)
|
|
|
+ new_project.getNode("Icon").TextureRectRef.setTexture(project_icon)
|
|
|
+ projects_box.addChild(new_project)
|
|
|
+
|
|
|
+proc loadProjects* =
|
|
|
+ for kind, path in walkDir(nodesnim_folder):
|
|
|
+ if existsDir(path) and path != nodesnim_folder / "saves":
|
|
|
+ loadProject(path.lastPathPart())
|
|
|
+
|
|
|
+proc hasProject*(name: string): bool =
|
|
|
+ existsDir(nodesnim_folder / name)
|