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 { string shortcutName = key.ToString(); Shortcut shortcutToUse = null; foreach (Shortcut shortcutToTest in Shortcut.AllSavedShortcuts) { if (shortcutToTest.Name == shortcutName) { shortcutToUse = shortcutToTest; } } if (shortcutToUse == null) { Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(() => { return false; }); return shortcutToUse.ShortcutBitmap.GetThumbnailImage(size.Width, size.Height, myCallback, IntPtr.Zero); } else return null; } 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 { string shortcutName = (string)key; return shortcutName; } catch { // If we have a problem with converting the submitted key to a profile // 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 { string shortcutName = (string)key; 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 { string shortcutName = (string)key; Shortcut shortcutToUse = null; foreach (Shortcut shortcutToTest in Shortcut.AllSavedShortcuts) { if (shortcutToTest.Name == shortcutName) { shortcutToUse = shortcutToTest; } } // Get file info if (shortcutToUse.ShortcutBitmap is Bitmap) { details.Add(new Utility.Tuple(ColumnType.FileName, string.Empty, shortcutToUse.Name)); details.Add(new Utility.Tuple(ColumnType.DateCreated, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.DateAccessed, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.DateModified, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.FileSize, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.FilePath, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.FolderName, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.Dimensions, string.Empty, new Size(shortcutToUse.ShortcutBitmap.Width, shortcutToUse.ShortcutBitmap.Height))); details.Add(new Utility.Tuple(ColumnType.Resolution, string.Empty, new SizeF((float)shortcutToUse.ShortcutBitmap.Width, (float)shortcutToUse.ShortcutBitmap.Height))); details.Add(new Utility.Tuple(ColumnType.ImageDescription, string.Empty, shortcutToUse.Name)); details.Add(new Utility.Tuple(ColumnType.EquipmentModel, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.DateTaken, string.Empty, "")); 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 }