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 profileToTest in Shortcut.AllSavedShortcuts)
{
if (profileToTest.Name == shortcutName)
{
shortcutToUse = profileToTest;
}
}
if (shortcutToUse == null)
{
return null;
}
Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(() => { return false; });
return shortcutToUse.ShortcutBitmap.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 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
{
//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
{
Shortcut shortcut = (Shortcut)key;
Shortcut shortcutToUse = null;
foreach (Shortcut shortcutToTest in Shortcut.AllSavedShortcuts)
{
if (shortcutToTest.Name == shortcut.Name)
{
shortcutToUse = shortcutToTest;
}
}
// Get file info
if (shortcutToUse.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, shortcutToUse.SavedShortcutIconCacheFilename));
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, 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
}