aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.FileSystem/FileItem.cs
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-03-25 17:43:49 +0200
committerAvi Levkovich <avi@twine-s.com>2020-03-25 17:43:49 +0200
commitd29da53d6f71f45749c0ede5b4cd7281ed3a270e (patch)
treefd83afc7771c0f4f19c581e1cf407bcf7c14818b /Software/Visual_Studio/Tango.FileSystem/FileItem.cs
parent0208e9f1800c044ec3bd002b7aa7fd00621c81be (diff)
downloadTango-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.cs132
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;
+ }
+ }
+}