コード例 #1
0
        private async Task SaveDocumentAsync(JsonDocumentModel document, bool saveAs)
        {
            if (!document.HasFileLocation || saveAs)
            {
                var fileName = document.HasFileLocation ?
                               Path.GetFileNameWithoutExtension(document.FilePath) + ".json" :
                               Strings.DefaultFileName + ".json";

                var result = await Messenger.Default.SendAsync(new SaveJsonDocumentMessage(fileName));

                if (result.Success)
                {
                    AddRecentFile(result.Result);
                    document.FilePath = result.Result;
                }
                else
                {
                    return;
                }
            }

            await RunTaskAsync(async token =>
            {
                await document.SaveAsync(true);
            });
        }
コード例 #2
0
        private async Task <bool> SaveDocumentAsync(JsonDocumentModel document)
        {
            if (_strictEditingMode)
            {
                var errors = await document.Data.ValidateAsync();

                if (errors.Count() > 0)
                {
                    await Messenger.Default.SendAsync(
                        new TextMessage(
                            string.Format(Strings.MessageNotValidDocumentText, document.DisplayTitle, errors),
                            Strings.MessageNotValidDocumentTitle));

                    return(false);
                }
                else
                {
                    await SaveDocumentAsync(document, false);
                }
            }

            await SaveDocumentAsync(document, false);

            return(true);
        }
コード例 #3
0
        private void AddDocument(JsonDocumentModel document)
        {
            Documents.Add(document);
            SelectedDocument = document;

            document.UndoRedoManager.PropertyChanged += UndoRedoManagerOnPropertyChanged;
        }
コード例 #4
0
        /// <summary>Opens a document from a given file name. </summary>
        /// <param name="fileName">The file name. </param>
        /// <param name="isReadOnly">The value indicating whether the document can be changed. </param>
        /// <returns>The task. </returns>
        public async Task OpenDocumentAsync(string fileName, bool isReadOnly)
        {
            var existingDocument = Documents.SingleOrDefault(d => d.FilePath == fileName);

            if (existingDocument != null)
            {
                SelectedDocument = existingDocument;
            }
            else
            {
                await RunTaskAsync(async token =>
                {
                    var schemaPath = JsonDocumentModel.GetDefaultSchemaPath(fileName);
                    if (!File.Exists(schemaPath))
                    {
                        var result = await Messenger.Default.SendAsync(new OpenJsonDocumentMessage(Strings.OpenJsonSchemaDocumentDialog));
                        if (!result.Success)
                        {
                            return;
                        }

                        schemaPath = result.Result;
                    }

                    var document        = await JsonDocumentModel.LoadAsync(fileName, schemaPath, ServiceLocator.Default.Resolve <IDispatcher>());
                    document.IsReadOnly = isReadOnly;

                    AddDocument(document);
                    AddRecentFile(fileName);
                });
            }
        }
コード例 #5
0
 /// <summary>Creates a new document from a given JSON schema. </summary>
 /// <param name="schemaPath">The path of the JSON schema file. </param>
 /// <returns>The task. </returns>
 public async Task CreateDocumentAsync(string schemaPath)
 {
     await RunTaskAsync(async token =>
     {
         var document = await JsonDocumentModel.CreateAsync(schemaPath, ServiceLocator.Default.Resolve <IDispatcher>());
         AddDocument(document);
     });
 }
コード例 #6
0
 private async Task SaveDocumentSchemaAsAsync(JsonDocumentModel document)
 {
     var fileName = Path.GetFileNameWithoutExtension(document.FilePath) + ".schema.json";
     var result = await Messenger.Default.SendAsync(new SaveJsonDocumentMessage(fileName));
     if (result.Success)
     {
         await RunTaskAsync(async token =>
         {
             await Task.Run(() => File.WriteAllText(result.Result, document.Data.Schema.ToJson()), token);
         });
     }
 }
コード例 #7
0
        /// <summary>Opens a document from a given file name. </summary>
        /// <param name="fileName">The file name. </param>
        /// <param name="isReadOnly">The value indicating whether the document can be changed. </param>
        /// <returns>The task. </returns>
        public async Task OpenDocumentAsync(string fileName, bool isReadOnly)
        {
            var existingDocument = Documents.SingleOrDefault(d => d.FilePath == fileName);

            if (existingDocument != null)
            {
                SelectedDocument = existingDocument;
            }
            else
            {
                await RunTaskAsync(async token =>
                {
                    JsonDocumentModel document = null;

                    // First try to load the schema from the default location
                    var defaultSchemaPath = JsonDocumentModel.GetDefaultSchemaPath(fileName);
                    if (File.Exists(defaultSchemaPath))
                    {
                        document = await JsonDocumentModel.LoadAsync(fileName, defaultSchemaPath, ServiceLocator.Default.Resolve <IDispatcher>());
                    }

                    // If no schema was found, check for a "_schema" property on the document
                    if (document == null)
                    {
                        var schemaPropertyPath = JsonObjectModel.GetSchemaProperty(fileName);
                        if (!String.IsNullOrWhiteSpace(schemaPropertyPath) && File.Exists(schemaPropertyPath))
                        {
                            document = await JsonDocumentModel.LoadAsync(fileName, schemaPropertyPath, ServiceLocator.Default.Resolve <IDispatcher>());
                        }
                    }

                    // If no default schema or no schema property, prompt.
                    if (document == null)
                    {
                        var result = await Messenger.Default.SendAsync(new OpenJsonDocumentMessage(Strings.OpenJsonSchemaDocumentDialog));
                        if (!result.Success)
                        {
                            return;
                        }

                        document = await JsonDocumentModel.LoadAsync(fileName, result.Result, ServiceLocator.Default.Resolve <IDispatcher>());
                    }

                    document.IsReadOnly = isReadOnly;

                    AddDocument(document);
                    AddRecentFile(fileName);
                });
            }
        }
コード例 #8
0
 private async Task ValidateDocumentAsync(JsonDocumentModel document)
 {
     var errors = await document.Data.ValidateAsync();
     if (errors.Length == 0)
     {
         await Messenger.Default.SendAsync(
             new TextMessage(string.Format(Strings.MessageValidDocumentText, document.DisplayTitle),
                 Strings.MessageValidDocumentTitle));
     }
     else
     {
         await Messenger.Default.SendAsync(
             new TextMessage(
                 string.Format(Strings.MessageNotValidDocumentText, document.DisplayTitle, errors),
                 Strings.MessageNotValidDocumentTitle));
     }
 }
コード例 #9
0
        /// <summary>Closes the given document and saves it if needed. </summary>
        /// <param name="document">The document to close. </param>
        /// <returns>The task. </returns>
        public async Task<bool> CloseDocumentAsync(JsonDocumentModel document)
        {
            if (document.UndoRedoManager.CanUndo)
            {
                var message = new TextMessage(string.Format(Strings.MessageSaveDocumentText, document.DisplayTitle),
                    Strings.MessageSaveDocumentTitle, MessageButton.YesNoCancel);

                var result = await Messenger.Default.SendAsync(message);
                if (result.Result == MessageResult.Cancel)
                    return false;

                if (result.Result == MessageResult.Yes)
                    await SaveDocumentAsync(document);
            }

            RemoveDocument(document);
            return true;
        }
コード例 #10
0
        /// <summary>Opens a document from a given file name. </summary>
        /// <param name="fileName">The file name. </param>
        /// <param name="isReadOnly">The value indicating whether the document can be changed. </param>
        /// <returns>The task. </returns>
        public async Task OpenDocumentAsync(string fileName, bool isReadOnly)
        {
            var existingDocument = Documents.SingleOrDefault(d => d.FilePath == fileName);

            if (existingDocument != null)
            {
                SelectedDocument = existingDocument;
            }
            else
            {
                await RunTaskAsync(async token =>
                {
                    var schemaPath = JsonDocumentModel.GetDefaultSchemaPath(fileName);

                    var document        = await JsonDocumentModel.LoadAsync(fileName, schemaPath, ServiceLocator.Default.Resolve <IDispatcher>());
                    document.IsReadOnly = isReadOnly;

                    AddDocument(document);
                    AddRecentFile(fileName);
                });
            }
        }
コード例 #11
0
        /// <summary>Closes the given document and saves it if needed. </summary>
        /// <param name="document">The document to close. </param>
        /// <returns>The task. </returns>
        public async Task <bool> CloseDocumentAsync(JsonDocumentModel document)
        {
            bool saveOk = true;

            if (document.UndoRedoManager.CanUndo)
            {
                var message = new TextMessage(string.Format(Strings.MessageSaveDocumentText, document.DisplayTitle),
                                              Strings.MessageSaveDocumentTitle, MessageButton.YesNoCancel);

                var result = await Messenger.Default.SendAsync(message);

                if (result.Result == MessageResult.Cancel)
                {
                    return(false);
                }

                if (result.Result == MessageResult.Yes)
                {
                    saveOk = await SaveDocumentAsync(document);
                }
            }

            if (saveOk)
            {
                RemoveDocument(document);
            }

            if (_strictEditingMode && saveOk)
            {
                if (Documents.Count == 0)
                {
                    Environment.Exit(0);
                }
            }

            return(true);
        }
コード例 #12
0
 private Task SaveDocumentAsAsync(JsonDocumentModel document)
 {
     return(SaveDocumentAsync(document, true));
 }
コード例 #13
0
        private void RemoveDocument(JsonDocumentModel document)
        {
            Documents.Remove(document);

            document.UndoRedoManager.PropertyChanged -= UndoRedoManagerOnPropertyChanged;
        }
コード例 #14
0
 private Task SaveDocumentAsync(JsonDocumentModel document)
 {
     return SaveDocumentAsync(document, false);
 }