/// <summary> /// Opens a document. A fileopen dialog is brought up. /// </summary> /// <returns>A <see cref="bool"/> value indicating the success of the attempt to open a document.</returns> public bool OpenDocument() { // Add the filters for all register massspec file loaders if (AppContext.SpecFileLoaders != null && AppContext.SpecFileLoaders.Count > 0) { var openFileDialog = new CommonDialog(); foreach (ISpecFileLoader loader in AppContext.SpecFileLoaders) { FileTypeDescriptorList supportedFileTypes = loader.SupportedFileTypes; if (supportedFileTypes != null) { foreach (FileTypeDescriptor fileType in supportedFileTypes) { if (fileType.Extensions != null) { foreach (string extension in fileType.Extensions) { var filter = new FilterEntry(fileType.Description, extension); openFileDialog.Filters.Add(filter); } } } } } // proceed if at least one loader is ready to accept a file... if (openFileDialog.Filters.Count > 0) { // Add the all files filter openFileDialog.Filters.Add(new FilterEntry(Strings.AllFilesDesc, Strings.AllFilesExt)); openFileDialog.ShowOpen(); return(this.OpenDocument(openFileDialog.FileName)); } } return(false); }
/// <summary> /// Saves the current document to hard disk /// </summary> /// <returns>True or False</returns> public bool DocumentSaveAs() { var writerList = new List <IWriter>(); IView sourceView = AppContext.Application.ActiveView; if (sourceView == null) { return(false); } // Collect bitmap writer if appropriate if (sourceView is IBitmapSource) { foreach (IBitmapWriter bitmapWriter in AppContext.BitmapWriters) { writerList.Add(bitmapWriter); } } // Collect imaging data writer if appropriate if (sourceView is IImagingSource) { foreach (IImagingWriter imagingWriter in AppContext.ImagingWriters) { writerList.Add(imagingWriter); } } var saveAsFileDialog = new CommonDialog(); foreach (IWriter writer in writerList) { FileTypeDescriptorList supportedFileTypes = writer.SupportedFileTypes; if (supportedFileTypes != null) { foreach (FileTypeDescriptor fileType in supportedFileTypes) { if (fileType.Extensions != null) { foreach (string extension in fileType.Extensions) { var filter = new FilterEntry(fileType.Description, extension); saveAsFileDialog.Filters.Add(filter); } } } } } // proceed if at least one loader is ready to accept a file... if (saveAsFileDialog.Filters.Count > 0) { string filename = sourceView.Title; char[] invalidChars = Path.GetInvalidFileNameChars(); foreach (char ic in invalidChars) { filename = filename.Replace(ic, '-'); } filename = sourceView.Document.DocumentName + " - " + filename; saveAsFileDialog.FileName = filename.Replace('.', '_'); saveAsFileDialog.ShowSaveAs(); string fileName = saveAsFileDialog.FileName; if (string.IsNullOrEmpty(fileName)) { return(false); } // identify writer loader on the basis of the extension... string extension = Path.GetExtension(fileName); if (string.IsNullOrEmpty(extension)) { if (saveAsFileDialog.FilterIndex > 0 && saveAsFileDialog.FilterIndex <= saveAsFileDialog.Filters.Count + 1) { // Bug Fix - saveAsFileDialog indexing is 1 based and filterEntry is zero based but saveAsFileDialog also adds a header index for all the files types. FilterEntry filterEntry = saveAsFileDialog.Filters[saveAsFileDialog.FilterIndex - 2]; if (filterEntry != null) { extension = filterEntry.Extension; if (string.IsNullOrEmpty(extension)) { return(false); } fileName += extension; } } } IWriter theWriter = null; foreach (IWriter writer in writerList) { if (writer.SupportedFileTypes.IncludesExtension(extension)) { theWriter = writer; break; } } if (theWriter != null) { if (theWriter is IBitmapWriter) { return(((IBitmapWriter)theWriter).Write(((IBitmapSource)sourceView).GetBitmap(), fileName, false)); } if (theWriter is IImagingWriter) { return(((IImagingWriter)theWriter).Write(((IImagingSource)sourceView).GetImagingData(), fileName, false)); } } } return(false); }
/// <summary> /// Initializes a new instance of the BitmapWriter class /// </summary> protected BitmapWriter() { // Create file descriptor: this.supportedFileTypes = new FileTypeDescriptorList(); }