/// <summary> /// Create a new instance of a <see cref="ShellFolder" /> derived class /// that best matches the nature of the specified <see cref="ShellItem" />. /// </summary> /// <param name="shellItem"><see cref="ShellItem" />.</param> /// <returns>Created a new instance of <see cref="ShellFolder" /> derived class.</returns> private static ShellFolder CreateFolder(ShellItem shellItem) { Contract.Requires(shellItem != null); var shellLibrary = ShellLibraryFactory.FromShellItem(shellItem, true); if (SameItemType(shellItem.GetItemType(), ShellLibraryFactory.FileExtension) && (shellLibrary != null)) { // Library return(shellLibrary); } else if (SameItemType(shellItem, ShellSearchConnector.FileExtension)) { // Search connector return(new ShellSearchConnector(shellItem)); } else if (SameItemType(shellItem, ShellSavedSearchCollection.FileExtension)) { // Saved search collection return(new ShellSavedSearchCollection(shellItem)); } else { var knownFolderNative = GetKnownFolderNative(shellItem); if (knownFolderNative != null) { // Known folder return(new ShellKnownFolder(shellItem, knownFolderNative)); } } // Folder return(new ShellFolder(shellItem)); }
/// <summary> /// Determines wheter specified <see cref="ShellItem" /> item type and extension string have same item type. /// </summary> /// <param name="shellItem"><see cref="ShellItem" />.</param> /// <param name="extension">The extensionstring to compare, or <c>null</c>.</param> /// <returns> /// <c>true</c> if the item type of <see cref="ShellItem" /> is the same as the value of <paramref name="extension" />; /// otherwise <c>false</c>. /// </returns> private static bool SameItemType(ShellItem shellItem, string extension) { Contract.Requires(shellItem != null); return(SameItemType(shellItem.GetItemType(), extension)); }