| File: MS\Internal\Documents\Application\FilePresentation.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\PresentationUI\PresentationUI.csproj (PresentationUI) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // Description: // Interacts with user on file based information for XpsViewer. using System; using System.IO; using System.Windows.Forms; using System.Windows.TrustUI; namespace MS.Internal.Documents.Application { /// <summary> /// Interacts with user on file based information for XpsViewer. /// </summary> /// <remarks> /// Responsibility: /// Should be the only class that interacts with the user with or for file /// location information. /// </remarks> internal static class FilePresentation { #region Internal Methods //-------------------------------------------------------------------------- // Internal Methods //-------------------------------------------------------------------------- /// <summary> /// Prompts the user for the save location for the current XpsDocument. /// </summary> /// <param name="fileToken">The token for the current document</param> /// <returns></returns> internal static bool ShowSaveFileDialog(ref CriticalFileToken fileToken) { string extension = SR.FileManagementSaveExt; Trace.SafeWrite(Trace.File, "Showing SafeFileDialog."); bool result = false; SaveFileDialog save = new SaveFileDialog(); if (fileToken != null) { save.FileName = fileToken.Location.LocalPath; } save.Filter = SR.FileManagementSaveFilter; save.DefaultExt = extension; DialogResult dialogResult; // We need to invoke the ShowDialog method specifying a parent window. // We need to specify a parent window in order to avoid a Winforms // Common Dialog issue where the wrong window is used as the parent // which causes the Save dialog to be incorrectly localized. // Get the root browser window, if it exists. IWin32Window rbw = null; if (DocumentApplicationDocumentViewer.Instance != null) { rbw = DocumentApplicationDocumentViewer.Instance.RootBrowserWindow; } if (rbw != null) { dialogResult = save.ShowDialog(rbw); } else { dialogResult = save.ShowDialog(); } if (dialogResult == DialogResult.OK) { string filePath = save.FileName; // Add .xps extension if not already present. // This must be done manually since the file save dialog will automatically // add the extension only if the filename doesn't have a known extension. // For instance, homework.1 would become homework.1.xps, but if the user // gets up to homework.386, then the dialog would just pass it through as // is, requiring us to append the extension here. if (!extension.Equals( Path.GetExtension(filePath), StringComparison.OrdinalIgnoreCase)) { filePath += extension; } Uri file = new Uri(filePath); // as this is the only place we can verify the user authorized this // particular file we construct the token here fileToken = new CriticalFileToken(file); result = true; Trace.SafeWrite(Trace.File, "A save location was selected."); } return result; } /// <summary> /// Notifies the user that the selected destination file is read-only, so /// we cannot save to that location. /// </summary> internal static void ShowDestinationIsReadOnly() { System.Windows.MessageBox.Show( SR.FileManagementDestinationIsReadOnly, SR.FileManagementTitleError, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Exclamation ); } /// <summary> /// Notifies the user of the failure to create temporary files, which /// prevents editing. /// </summary> internal static void ShowNoTemporaryFileAccess() { System.Windows.MessageBox.Show( SR.FileManagementNoTemporaryFileAccess, SR.FileManagementTitleError, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Exclamation ); } /// <summary> /// Notifies the user of the failure to open from a location. /// </summary> internal static void ShowNoAccessToSource() { System.Windows.MessageBox.Show( SR.FileManagementNoAccessToSource, SR.FileManagementTitleError, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Exclamation ); } /// <summary> /// Notifies the user of the failure to save to a location. /// </summary> internal static void ShowNoAccessToDestination() { System.Windows.MessageBox.Show( SR.FileManagementNoAccessToDestination, SR.FileManagementTitleError, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Exclamation ); } #endregion Internal Methods } }