/// <summary> /// Saves the project and writes all changes to files. /// </summary> public void Save() { // Save project descriptor file ProjectModel.Serialize(Path.Combine(ProjectDirectory, PROJECT_FILE), Model); // TODO Save Everything Else }
/// <summary> /// Factory Method. /// Creates a project in the specified empty directory and initializes it. /// </summary> /// <param name="dir">Directory, where to create the new project.</param> /// <returns></returns> public static void Create(String dir, String name) { // Create directory name from project name String dirName = name; foreach (var c in Path.GetInvalidPathChars()) { dirName = dirName.Replace(c, '_'); } foreach (var c in Path.GetInvalidFileNameChars()) { dirName = dirName.Replace(c, '_'); } dirName = dirName.Replace(' ', '-'); // Combine both names dir = Path.Combine(dir, dirName); // Create dir if it does not exist if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } // Check if it is empty if (Directory.GetFiles(dir).Length != 0 || Directory.GetDirectories(dir).Length != 0) { throw new Exception("New projects can only be created in an empty directory!"); } // Initialize Subdirectories Directory.CreateDirectory(Path.Combine(dir, RESOURCE_DIR)); // Create Resources Folder Directory.CreateDirectory(Path.Combine(dir, FRAMES_DIR)); // Create Frames Folder Directory.CreateDirectory(Path.Combine(dir, SEQUENCES_DIR)); // Create Sequences Folder Directory.CreateDirectory(Path.Combine(dir, EVENTS_DIR)); // Create Events Folder // Create Project Descriptor File // TODO Serialize instead of writing //File.WriteAllText(Path.Combine(dir, PROJECT_FILE), String.Format(Resources.DefaultProjectDescriptor, name)); var model = new ProjectModel() { FPS = 10, Name = name, Resources = { }, FrameFiles = { "\\frames\\default.bxframe" }, SequenceFiles = { "\\sequences\\default.bxseq" }, EventFiles = { "\\events\\default.bxevent" } }; ProjectModel.Serialize(Path.Combine(dir, PROJECT_FILE), model); // Create Default Files File.WriteAllText(Path.Combine(dir, FRAMES_DIR, "default.bxframe"), "{ }"); File.WriteAllText(Path.Combine(dir, SEQUENCES_DIR, "default.bxseq"), "{ }"); File.WriteAllText(Path.Combine(dir, EVENTS_DIR, "default.bxevent"), "{ }"); // Load Default Project instance = new AnimatProject(Path.Combine(dir, PROJECT_FILE)); }