public static IPreviewHelper Create( string extension, List <IPreviewHelper> previewAppDescriptions ) { IPreviewHelper appDescription = null; string lowPointlessExt = extension.ToLower().Replace(@".", string.Empty); foreach (var previewAppDescription in previewAppDescriptions) { foreach (var ext in previewAppDescription.Extensions) { if (lowPointlessExt == ext) { appDescription = previewAppDescription; break; } } if (appDescription != null) { break; } } return(appDescription); }
/// <summary> /// Opens the specified file using the appropriate preview handler and displays the result in this PreviewHandlerHost. /// </summary> /// <param name="filename"></param> /// <returns></returns> public override bool Open(string filename) { _appDescription = PreviewAppDescriptionFactory.Create( Path.GetExtension(filename), PreviewAppDescriptions ); if (_appDescription != null) { _appDescription.Startup(); } UnloadPreviewHandler(); if (String.IsNullOrEmpty(filename)) { ErrorMessage = Messages.FileNotLoaded; return(false); } // try to get GUID for the preview handler Guid guid = GetPreviewHandlerGUID(filename); ErrorMessage = ""; if (guid != Guid.Empty) { try { if (guid != _currentPreviewHandlerGuid) { _currentPreviewHandlerGuid = guid; // need to instantiate a different COM type (file format has changed) if (_currentPreviewHandler != null) { Marshal.FinalReleaseComObject(_currentPreviewHandler); } // use reflection to instantiate the preview handler type Type comType = Type.GetTypeFromCLSID(_currentPreviewHandlerGuid); _currentPreviewHandler = Activator.CreateInstance(comType); } if (_currentPreviewHandler is IInitializeWithFile) { // some handlers accept a filename ((IInitializeWithFile)_currentPreviewHandler).Initialize(filename, 0); } else if (_currentPreviewHandler is IInitializeWithStream) { if (File.Exists(filename)) { // other handlers want an IStream (in this case, a file stream) _currentPreviewHandlerStream = File.Open(filename, FileMode.Open); StreamWrapper stream = new StreamWrapper(_currentPreviewHandlerStream); ((IInitializeWithStream)_currentPreviewHandler).Initialize(stream, 0); } else { ErrorMessage = Messages.FileNotFound; } } if (_currentPreviewHandler is IPreviewHandler) { // bind the preview handler to the control's bounds and preview the content Rectangle r = ClientRectangle; ((IPreviewHandler)_currentPreviewHandler).SetWindow(Handle, ref r); ((IPreviewHandler)_currentPreviewHandler).DoPreview(); return(true); } } catch (Exception ex) { ErrorMessage = Messages.PreviewError + ":\n" + ex.Message; } } else { ErrorMessage = Messages.NoPreviewAvailable; } return(false); }