private void SaveBackup() { if (Project == null) { return; } var path = App.GetDirectoryPath(App.DirectorPath.AutoBackup); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string name; if (!string.IsNullOrEmpty(Project.SaveFileName)) { var fileInfo = new FileInfo(Project.SaveFileName); name = fileInfo.Name; } else { name = "unnamed"; } path = Path.Combine(path, name); ProjectIO.SaveAsBackup(Project, path); var format = Application.Current.FindResource <string>(App.ResourceKeys.ProjectAutoSavedToPromptTemplate); var message = string.Format(format, path); ShowTemporaryMessage(message); }
private void CmdFileSaveProject_Executed(object sender, ExecutedRoutedEventArgs e) { var project = Project; if (!project.IsSaved) { if (CmdFileSaveProjectAs.CanExecute(e.Parameter)) { CmdFileSaveProjectAs.Execute(e.Parameter); } else { throw new InvalidOperationException(); } } else { ProjectIO.Save(project); CmdFileSaveProject.RaiseCanExecuteChanged(); _autoSaveTimer.Stop(); _autoSaveTimer.Start(); ClearBackup(); SaveBackup(); } }
public IProject Build(string path, bool newProject) { var io = new ProjectIO(Path.GetDirectoryName(path)); var nfac = new NodeFactory(io); foreach (var p in _fileProviders) nfac.Register(p); var pprovider = FindProvider(path); if (newProject) { pprovider.CreateDefaultContents(Path.GetFileName(path), io, nfac); } return pprovider.Create(Path.GetFileName(path), io, nfac); }
private void CmdFileSaveProjectAs_Executed(object sender, ExecutedRoutedEventArgs e) { var saveDialog = new SaveFileDialog(); saveDialog.OverwritePrompt = true; saveDialog.ValidateNames = true; saveDialog.Filter = Application.Current.FindResource <string>(App.ResourceKeys.ProjectFileFilter); var result = saveDialog.ShowDialog(); if (!(result ?? false)) { return; } ProjectIO.Save(Project, saveDialog.FileName); CmdFileSaveProjectAs.RaiseCanExecuteChanged(); _autoSaveTimer.Stop(); _autoSaveTimer.Start(); ClearBackup(); SaveBackup(); }
private void LoadBackup() { var path = App.GetDirectoryPath(App.DirectorPath.AutoBackup); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var directory = new DirectoryInfo(path); var fileInfo = directory.EnumerateFiles().FirstOrDefault(); if (fileInfo == null) { return; } Project project; string format, message; try { project = ProjectIO.Load(fileInfo.FullName); } catch (Exception ex) { // In case the autosave also failed. var detailedMessage = ex.Message + Environment.NewLine + ex.StackTrace; format = Application.Current.FindResource <string>(App.ResourceKeys.AutoSaveRestorationFailedPromptTemplate); message = string.Format(format, detailedMessage); MessageBox.Show(message, App.Title, MessageBoxButton.OK, MessageBoxImage.Exclamation); project = new Project(); } Project = Editor.Project = Project.Current = project; project.IsChanged = true; project.SaveFileName = null; Editor.Score = project.GetScore(project.Difficulty); format = Application.Current.FindResource <string>(App.ResourceKeys.LoadedProjectFromAutoSavPromptTemplate); message = string.Format(format, fileInfo.FullName); ShowTemporaryMessage(message); }
private void CmdFileOpenProject_Executed(object sender, ExecutedRoutedEventArgs e) { if (ShouldPromptSaving) { var result = MessageBox.Show(Application.Current.FindResource <string>(App.ResourceKeys.ProjectChangedPrompt), App.Title, MessageBoxButton.YesNoCancel, MessageBoxImage.Exclamation); switch (result) { case MessageBoxResult.Yes: CmdFileSaveProject.Execute(null); return; case MessageBoxResult.No: break; case MessageBoxResult.Cancel: return; default: throw new ArgumentOutOfRangeException(nameof(result), result, null); } } var openDialog = new OpenFileDialog(); openDialog.CheckPathExists = true; openDialog.Multiselect = false; openDialog.ShowReadOnly = false; openDialog.ReadOnlyChecked = false; openDialog.ValidateNames = true; openDialog.Filter = Application.Current.FindResource <string>(App.ResourceKeys.ProjectFileFilter); var dialogResult = openDialog.ShowDialog(); if (!(dialogResult ?? false)) { return; } var fileName = openDialog.FileName; var projectVersion = ProjectIO.CheckProjectFileVersion(fileName); string prompt; var projectChanged = false; switch (projectVersion) { case ProjectVersion.Unknown: prompt = string.Format(Application.Current.FindResource <string>(App.ResourceKeys.ProjectVersionInvalidPromptTemplate), fileName); MessageBox.Show(prompt, Title, MessageBoxButton.OK, MessageBoxImage.Exclamation); return; case ProjectVersion.V0_1: case ProjectVersion.V0_2: prompt = string.Format(Application.Current.FindResource <string>(App.ResourceKeys.ProjectUpgradeNeededPromptTemplate), fileName); MessageBox.Show(prompt, Title, MessageBoxButton.OK, MessageBoxImage.Information); projectChanged = true; break; } var project = ProjectIO.Load(fileName, projectVersion); Project = Editor.Project = Project.Current = project; project.IsChanged = projectChanged; Editor.Score = project.GetScore(project.Difficulty); _autoSaveTimer.Stop(); _autoSaveTimer.Start(); ClearBackup(); SaveBackup(); ScrollViewer.ScrollToEnd(); }