Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 5
0
        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();
        }