diff --git a/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml.cs b/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml.cs
index 74a5635988..b4eb13446e 100644
--- a/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml.cs
+++ b/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml.cs
@@ -6,6 +6,7 @@ using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using ProjectsEditor.Data;
using ProjectsEditor.Models;
using ProjectsEditor.ViewModels;
@@ -37,7 +38,15 @@ namespace ProjectsEditor
private void SaveButtonClicked(object sender, RoutedEventArgs e)
{
Project projectToSave = this.DataContext as Project;
- _mainViewModel.SaveProject(projectToSave);
+ if (projectToSave.EditorWindowTitle == Properties.Resources.CreateProject)
+ {
+ _mainViewModel.AddNewProject(projectToSave);
+ }
+ else
+ {
+ _mainViewModel.SaveProject(projectToSave);
+ }
+
_mainViewModel.SwitchToMainView();
}
@@ -49,7 +58,10 @@ namespace ProjectsEditor
private void CancelButtonClicked(object sender, RoutedEventArgs e)
{
- _mainViewModel.CancelLastEdit();
+ // delete the temp file created by the snapshot tool
+ TempProjectData parser = new TempProjectData();
+ parser.DeleteTempFile();
+
_mainViewModel.SwitchToMainView();
}
diff --git a/src/modules/Projects/ProjectsEditor/Properties/Resources.Designer.cs b/src/modules/Projects/ProjectsEditor/Properties/Resources.Designer.cs
index a0f5beb491..d08c096523 100644
--- a/src/modules/Projects/ProjectsEditor/Properties/Resources.Designer.cs
+++ b/src/modules/Projects/ProjectsEditor/Properties/Resources.Designer.cs
@@ -150,6 +150,15 @@ namespace ProjectsEditor.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Project.
+ ///
+ public static string DefaultProjectNamePrefix {
+ get {
+ return ResourceManager.GetString("DefaultProjectNamePrefix", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Remove.
///
diff --git a/src/modules/Projects/ProjectsEditor/Properties/Resources.resx b/src/modules/Projects/ProjectsEditor/Properties/Resources.resx
index 4404e223e3..60d86314ff 100644
--- a/src/modules/Projects/ProjectsEditor/Properties/Resources.resx
+++ b/src/modules/Projects/ProjectsEditor/Properties/Resources.resx
@@ -147,6 +147,9 @@
days ago
+
+ Project
+
Remove
diff --git a/src/modules/Projects/ProjectsEditor/SnapshotWindow.xaml.cs b/src/modules/Projects/ProjectsEditor/SnapshotWindow.xaml.cs
index 704e092185..44367d9bd0 100644
--- a/src/modules/Projects/ProjectsEditor/SnapshotWindow.xaml.cs
+++ b/src/modules/Projects/ProjectsEditor/SnapshotWindow.xaml.cs
@@ -2,19 +2,7 @@
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Shapes;
using ProjectsEditor.ViewModels;
namespace ProjectsEditor
@@ -41,7 +29,7 @@ namespace ProjectsEditor
private void SnapshotButtonClicked(object sender, RoutedEventArgs e)
{
Close();
- _mainViewModel.AddNewProject();
+ _mainViewModel.SnapNewProject();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
diff --git a/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs b/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs
index 71e0112ff8..b8b157aeef 100644
--- a/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs
+++ b/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs
@@ -8,9 +8,9 @@ using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
+using System.Globalization;
using System.IO;
using System.Linq;
-using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Timers;
using ManagedCommon;
@@ -127,7 +127,6 @@ namespace ProjectsEditor.ViewModels
}
private Project editedProject;
- private bool isEditedProjectNewlyCreated;
private string projectNameBeingEdited;
private MainWindow _mainWindow;
private System.Timers.Timer lastUpdatedTimer;
@@ -218,45 +217,62 @@ namespace ProjectsEditor.ViewModels
project.Name = projectNameBeingEdited;
}
- public async void AddNewProject()
+ public async void SnapNewProject()
{
CancelSnapshot();
- await Task.Run(() => RunSnapshotTool());
- if (_projectsEditorIO.ParseProjects(this).Result == true && Projects.Count != 0)
- {
- int repeatCounter = 1;
- string newName = Projects.Count != 0 ? Projects.Last().Name : "Project 1"; // TODO: localizable project name
- while (Projects.Where(x => x.Name.Equals(Projects.Last().Name, StringComparison.Ordinal)).Count() > 1)
- {
- Projects.Last().Name = $"{newName} ({repeatCounter})";
- repeatCounter++;
- }
- _projectsEditorIO.SerializeProjects(Projects.ToList());
- EditProject(Projects.Last(), true);
+ await Task.Run(() => RunSnapshotTool());
+
+ Project project = new Project();
+ if (_projectsEditorIO.ParseTempProject(out project).Result)
+ {
+ EditProject(project, true);
}
}
public void EditProject(Project selectedProject, bool isNewlyCreated = false)
{
- isEditedProjectNewlyCreated = isNewlyCreated;
var editPage = new ProjectEditor(this);
SetEditedProject(selectedProject);
- Project projectEdited = new Project(selectedProject) { EditorWindowTitle = isNewlyCreated ? Properties.Resources.CreateProject : Properties.Resources.EditProject };
- projectEdited.Initialize();
- editPage.DataContext = projectEdited;
+ if (isNewlyCreated)
+ {
+ // generate a default name for the new project
+ string defaultNamePrefix = Properties.Resources.DefaultProjectNamePrefix;
+ int nextProjectIndex = 0;
+ foreach (var proj in Projects)
+ {
+ if (proj.Name.StartsWith(defaultNamePrefix, StringComparison.CurrentCulture))
+ {
+ try
+ {
+ int index = int.Parse(proj.Name[(defaultNamePrefix.Length + 1)..], CultureInfo.CurrentCulture);
+ if (nextProjectIndex < index)
+ {
+ nextProjectIndex = index;
+ }
+ }
+ catch (Exception)
+ {
+ }
+ }
+ }
+
+ selectedProject.Name = defaultNamePrefix + " " + (nextProjectIndex + 1).ToString(CultureInfo.CurrentCulture);
+ }
+
+ selectedProject.EditorWindowTitle = isNewlyCreated ? Properties.Resources.CreateProject : Properties.Resources.EditProject;
+ selectedProject.Initialize();
+
+ editPage.DataContext = selectedProject;
_mainWindow.ShowPage(editPage);
lastUpdatedTimer.Stop();
}
- public void CancelLastEdit()
+ public void AddNewProject(Project project)
{
- if (isEditedProjectNewlyCreated)
- {
- Projects.Remove(editedProject);
- _projectsEditorIO.SerializeProjects(Projects.ToList());
- }
+ Projects.Add(project);
+ _projectsEditorIO.SerializeProjects(Projects.ToList());
}
public void DeleteProject(Project selectedProject)