/// <summary> /// Tries to close the supplied document engine and returns indication of action executed or cancelled by user. /// </summary> public bool CloseComposition(CompositionEngine Engine) { if (Engine.ExistenceStatus == EExistenceStatus.Modified) { var Result = Display.DialogMessage("Confirmation", "The Composition \"" + Engine.TargetComposition.Name + "\" has been modified.\n" + (Engine.FullLocation != null ? "\nLocation: " + Engine.FullLocation.LocalPath : "") + "\n\n" + "Do you want to save changes?", EMessageType.Question, System.Windows.MessageBoxButton.YesNoCancel, System.Windows.MessageBoxResult.Yes); if (Result == System.Windows.MessageBoxResult.Cancel) { return(false); } if (Result == System.Windows.MessageBoxResult.Yes) { if (!CloseRelatedResources(Engine)) { return(false); } var Location = Engine.FullLocation; if (Location != null) { var StoreResult = Engine.Store(); if (!StoreResult.IsAbsent()) { Display.DialogMessage("Error!", "Cannot save Composition.\n\nProblem: " + StoreResult, EMessageType.Warning); return(false); } } else { Location = Display.DialogGetSaveFile("Save Composition", FileDataType.FileTypeComposition.Extension, FileDataType.FileTypeComposition.FilterForSave, Engine.TargetComposition.TechName); if (Location == null) { return(false); } var StoreResult = Engine.Store(Location); if (!StoreResult.IsAbsent()) { Display.DialogMessage("Error!", "Cannot save Composition.\n\nProblem: " + StoreResult, EMessageType.Warning); return(false); } } } } Engine.Stop(); // Show the new activated engine this.WorkspaceDirector.RemoveDocument(Engine.TargetComposition); // Finally, clears the palettes if no document remains. Application.Current.MainWindow .PostCall(win => { if (this.WorkspaceDirector.Documents.Count < 1) { ProductDirector.UpdatePalettes(null); } }, true); return(true); }