/// <summary> /// Opens an editing project that was previously created. /// </summary> /// <param name="projectName">The user-perceived name of the project</param> /// <returns>Information describing the state of the project (null if it could not be found).</returns> internal Project OpenProject(string projectName) { if (String.IsNullOrWhiteSpace(projectName)) { throw new ArgumentNullException(); } // Obtain the project ID string projectGuid = FindProjectId(projectName); if (projectGuid == null) { throw new ApplicationException(); } // Load the project creation event Guid projectId = Guid.Parse(projectGuid); string dataFolder = CreateDataFolder(projectId); string creationFileName = Path.Combine(dataFolder, NewProjectEvent.FileName); // Read current project settings dataFolder = CreateDataFolder(projectId); string settingsFileName = Path.Combine(dataFolder, "settings.txt"); ProjectSettings ps = ProjectSettings.CreateInstance(settingsFileName); Settings.Default.LastProjectName = projectName; Settings.Default.Save(); // Now load the data Project result = new Project(this, projectId, ps); // Get rid of any undo folder that may be left over from a crashed editing session result.DeleteUndoFolder(); // Bit jumbled up here (historical reasons), should tidy up... EditingController.Current.SetProject(result); result.LoadEdits(dataFolder); //EditingController.Current.SetProject(result); EditingController.Current.SetMapModel(result.Model, null); result.Model.Load(); // Get rid of any empty sessions //result.Model.RemoveEmptySessions(); // Debug CedExporter string ptsFileName = Path.Combine(dataFolder, projectName + ".pts"); CheckPts(ptsFileName, result.Model); // Need to set it again (need to find out why)... if you don't you get a null // ref on opening last project at startup EditingController.Current.SetMapModel(result.Model, null); // Create a new editing session uint sessionId = result.AllocateId(); NewSessionEvent s = new NewSessionEvent(sessionId) { UserName = System.Environment.UserName, MachineName = System.Environment.MachineName, }; string sessionFile = Path.Combine(dataFolder, GetDataFileName(sessionId)); string sessionText = EditSerializer.GetSerializedString <Change>(DataField.Edit, s); File.WriteAllText(sessionFile, sessionText); Session session = new Session(result, s, sessionFile); result.Model.AddSession(session); result.Model.SetWorkingSession(session); result.SetLastItem(session.Id); return(result); }