using Manina.Windows.Forms; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HeliosPlus.UIForms { #region Shortcut Adaptor /// /// A custom item adaptor for ImageListView that reads from a Profile. /// class ShortcutAdaptor : ImageListView.ImageListViewItemAdaptor { private bool disposed; /// /// Initializes a new instance of the class. /// public ShortcutAdaptor() { disposed = false; } /// /// Returns the thumbnail image for the given item. /// /// Item key. /// Requested image size. /// Embedded thumbnail usage. /// true to automatically rotate images based on Exif orientation; otherwise false. /// The thumbnail image from the given item or null if an error occurs. public override Image GetThumbnail(object key, Size size, UseEmbeddedThumbnails useEmbeddedThumbnails, bool useExifOrientation) { if (disposed) return null; try { ShortcutItem shortcut = (ShortcutItem) key; if (shortcut == null) { return null; } //Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(() => { return false; }); //return shortcut.ShortcutBitmap.GetThumbnailImage(size.Width, size.Height, myCallback, IntPtr.Zero); return shortcut.ShortcutBitmap; } catch { // If we have a problem with converting the submitted key to a profile // Then we return null return null; } return null; } /// /// Returns a unique identifier for this thumbnail to be used in persistent /// caching. /// /// Item key. /// Requested image size. /// Embedded thumbnail usage. /// true to automatically rotate images based on Exif orientation; otherwise false. /// A unique identifier string for the thumnail. public override string GetUniqueIdentifier(object key, Size size, UseEmbeddedThumbnails useEmbeddedThumbnails, bool useExifOrientation) { if (disposed) return null; try { ShortcutItem shortcutName = (ShortcutItem) key; return shortcutName.Name; } catch { // If we have a problem with converting the submitted key to a Shortcut // Then we return null return null; } } /// /// Returns the path to the source image for use in drag operations. /// /// Item key. /// The path to the source image. public override string GetSourceImage(object key) { if (disposed) return null; try { //Shortcut shortcut = (Shortcut)key; //return shortcut.SavedShortcutIconCacheFilename; string shortcutName = (string)key; /* Shortcut shortcut = (from item in Shortcut.AllSavedShortcuts where item.Name == shortcutName select item).First(); if (shortcut is Shortcut) return shortcut.SavedShortcutIconCacheFilename; else return null;*/ return shortcutName; } catch { // If we have a problem with converting the submitted key to a profile // Then we return null return null; } } /// /// Returns the details for the given item. /// /// Item key. /// An array of tuples containing item details or null if an error occurs. public override Utility.Tuple[] GetDetails(object key) { if (disposed) return null; List> details = new List>(); try { ShortcutItem shortcut = (ShortcutItem) key; // Get file info if (shortcut.ShortcutBitmap is Bitmap) { DateTime now = DateTime.Now; details.Add(new Utility.Tuple(ColumnType.DateCreated, string.Empty, now)); details.Add(new Utility.Tuple(ColumnType.DateAccessed, string.Empty, now)); details.Add(new Utility.Tuple(ColumnType.DateModified, string.Empty, now)); details.Add(new Utility.Tuple(ColumnType.FileSize, string.Empty, (long)0)); details.Add(new Utility.Tuple(ColumnType.FilePath, string.Empty, shortcut.SavedShortcutIconCacheFilename)); details.Add(new Utility.Tuple(ColumnType.FolderName, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.Dimensions, string.Empty, new Size(shortcut.ShortcutBitmap.Width, shortcut.ShortcutBitmap.Height))); details.Add(new Utility.Tuple(ColumnType.Resolution, string.Empty, new SizeF((float)shortcut.ShortcutBitmap.Width, (float)shortcut.ShortcutBitmap.Height))); details.Add(new Utility.Tuple(ColumnType.ImageDescription, string.Empty, shortcut.Name)); details.Add(new Utility.Tuple(ColumnType.EquipmentModel, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.DateTaken, string.Empty, now)); details.Add(new Utility.Tuple(ColumnType.Artist, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.Copyright, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.ExposureTime, string.Empty, (float)0)); details.Add(new Utility.Tuple(ColumnType.FNumber, string.Empty, (float)0)); details.Add(new Utility.Tuple(ColumnType.ISOSpeed, string.Empty, (ushort)0)); details.Add(new Utility.Tuple(ColumnType.UserComment, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.Rating, string.Empty, (ushort)0)); details.Add(new Utility.Tuple(ColumnType.Software, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.FocalLength, string.Empty, (float)0)); } return details.ToArray(); } catch { // If we have a problem with converting the submitted key to a profile // Then we return null return null; } } public override void Dispose() { disposed = true; } } #endregion }