Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }