diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-03-25 17:43:49 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-03-25 17:43:49 +0200 |
| commit | d29da53d6f71f45749c0ede5b4cd7281ed3a270e (patch) | |
| tree | fd83afc7771c0f4f19c581e1cf407bcf7c14818b /Software/Visual_Studio/Tango.FileSystem/FileItem.cs | |
| parent | 0208e9f1800c044ec3bd002b7aa7fd00621c81be (diff) | |
| download | Tango-d29da53d6f71f45749c0ede5b4cd7281ed3a270e.tar.gz Tango-d29da53d6f71f45749c0ede5b4cd7281ed3a270e.zip | |
merge
Diffstat (limited to 'Software/Visual_Studio/Tango.FileSystem/FileItem.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.FileSystem/FileItem.cs | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.FileSystem/FileItem.cs b/Software/Visual_Studio/Tango.FileSystem/FileItem.cs new file mode 100644 index 000000000..cbc90ce06 --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/FileItem.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Interop; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using Tango.Core.IO; + +namespace Tango.FileSystem +{ + public class FileItem : FileSystemItem + { + private static Dictionary<String, BitmapSource> iconCache; + private static Dictionary<String, BitmapSource> smallIconCache; + private static Dictionary<String, String> typeDescriptionCache; + + static FileItem() + { + iconCache = new Dictionary<string, BitmapSource>(); + smallIconCache = new Dictionary<string, BitmapSource>(); + typeDescriptionCache = new Dictionary<string, string>(); + } + + public FileItem() + { + Type = FileSystemItemType.File; + } + + public String Extension + { + get { return System.IO.Path.GetExtension(Path); } + } + + private BitmapSource _icon; + public BitmapSource Icon + { + get + { + if (_icon == null) + { + _icon = GetFileIcon(); + } + + return _icon; + } + } + + private BitmapSource _smallIcon; + public BitmapSource SmallIcon + { + get + { + if (_smallIcon == null) + { + _smallIcon = GetSmallFileIcon(); + } + + return _smallIcon; + } + } + + public override string Description + { + get + { + if (typeDescriptionCache.ContainsKey(Extension)) + { + return typeDescriptionCache[Extension]; + } + else + { + var tempFile = TemporaryManager.Default.CreateFile(Extension); + var shellFile = Microsoft.WindowsAPICodePack.Shell.ShellFile.FromFilePath(tempFile); + var text = shellFile.Properties.System.ItemTypeText.Value.ToStringSafe(); + shellFile.Dispose(); + tempFile.Delete(); + typeDescriptionCache.Add(Extension, text); + return text; + } + } + } + + protected BitmapSource GetFileIcon() + { + if (iconCache.ContainsKey(Extension)) + { + return iconCache[Extension]; + } + else + { + var tempFile = TemporaryManager.Default.CreateFile(Extension); + var shellFile = Microsoft.WindowsAPICodePack.Shell.ShellFile.FromFilePath(tempFile); + var source = shellFile.Thumbnail.MediumBitmapSource; + shellFile.Dispose(); + tempFile.Delete(); + iconCache.Add(Extension, source); + return source; + } + } + + private BitmapSource GetSmallFileIcon() + { + if (smallIconCache.ContainsKey(Extension)) + { + return smallIconCache[Extension]; + } + else + { + var tempFile = TemporaryManager.Default.CreateFile(Extension); + var shellFile = Microsoft.WindowsAPICodePack.Shell.ShellFile.FromFilePath(tempFile); + var source = shellFile.Thumbnail.SmallBitmapSource; + shellFile.Dispose(); + tempFile.Delete(); + smallIconCache.Add(Extension, source); + return source; + } + } + + private BitmapSource IconToBitmapSource(Icon icon) + { + var imageSource = Imaging.CreateBitmapSourceFromHIcon( + icon.Handle, + Int32Rect.Empty, + BitmapSizeOptions.FromEmptyOptions()); + return imageSource; + } + } +} |
