using System; using System.Collections.Generic; using System.Linq; using System.Text; using RainmeterStudio.Model; using RainmeterStudio.Storage; namespace RainmeterStudio.Business { public class ProjectManager { #region Properties /// /// Gets the currently opened project /// public Project ActiveProject { get; protected set; } /// /// Gets the currently opened project's path /// public string ActiveProjectPath { get; protected set; } /// /// Gets or sets the project storage /// protected ProjectStorage Storage { get; set; } #endregion #region Callbacks /// /// Called when a project is opened or the active project closes. /// public event EventHandler ActiveProjectChanged; #endregion /// /// Initializes the project manager /// /// Project storage public ProjectManager(ProjectStorage storage) { Storage = storage; ActiveProject = null; } /// /// Creates a new project /// /// Name of project /// Path of project file public void CreateProject(string name, string path) { // If there is an opened project, close it if (ActiveProject != null) Close(); // Create project object ActiveProject = new Project(); ActiveProject.Name = name; // Save to file ActiveProjectPath = path; SaveActiveProject(); // Raise event if (ActiveProjectChanged != null) ActiveProjectChanged(this, new EventArgs()); } /// /// Opens a project from disk /// /// public void OpenProject(string path) { // If there is an opened project, close it if (ActiveProject != null) Close(); // Open using storage ActiveProject = Storage.Load(path); ActiveProjectPath = path; // Raise event if (ActiveProjectChanged != null) ActiveProjectChanged(this, new EventArgs()); } /// /// Saves the changes to the current project to disk /// public void SaveActiveProject() { // Safety check if (ActiveProject == null) throw new InvalidOperationException("Cannot save a project that is not opened."); // Save Storage.Save(ActiveProjectPath, ActiveProject); } /// /// Closes an opened project /// public void Close() { ActiveProject = null; ActiveProjectPath = null; // Raise event if (ActiveProjectChanged != null) ActiveProjectChanged(this, new EventArgs()); } } }