using HeliosPlus.Shared; 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 Profile Adaptor /// /// A custom item adaptor for ImageListView that reads from a Profile. /// class ProfileAdaptor : ImageListView.ImageListViewItemAdaptor { private bool disposed; /// /// Initializes a new instance of the class. /// public ProfileAdaptor() { 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 profileName = key.ToString(); ProfileItem profileToUse = null; foreach (ProfileItem profileToTest in ProfileItem.AllSavedProfiles) { if (profileToTest.Name == profileName) { profileToUse = profileToTest; } } if (profileToUse == null) { profileToUse = ProfileItem.CurrentProfile; } Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(() => { return false; }); return profileToUse.ProfileBitmap.GetThumbnailImage(size.Width, size.Height, myCallback, IntPtr.Zero); } 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 profileName = (string)key; return profileName; } 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 profileName = (string)key; return profileName; } 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 profileName = (string)key; ProfileItem profileToUse = null; foreach (ProfileItem profileToTest in ProfileItem.AllSavedProfiles) { if (profileToTest.Name == profileName) { profileToUse = profileToTest; } } if (profileToUse == null) { profileToUse = ProfileItem.CurrentProfile; } // Get file info if (profileToUse.ProfileBitmap 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, "")); details.Add(new Utility.Tuple(ColumnType.FolderName, string.Empty, "")); details.Add(new Utility.Tuple(ColumnType.Dimensions, string.Empty, new Size(profileToUse.ProfileBitmap.Width, profileToUse.ProfileBitmap.Height))); details.Add(new Utility.Tuple(ColumnType.Resolution, string.Empty, new SizeF((float)profileToUse.ProfileBitmap.Width, (float)profileToUse.ProfileBitmap.Height))); details.Add(new Utility.Tuple(ColumnType.ImageDescription, string.Empty, profileToUse.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 }