diff --git a/TileIconifier/Controls/IconListView/IconListViewItemFactory.cs b/TileIconifier/Controls/IconListView/IconListViewItemFactory.cs new file mode 100644 index 0000000..3afec03 --- /dev/null +++ b/TileIconifier/Controls/IconListView/IconListViewItemFactory.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TileIconifier.Core.IconExtractor; + +namespace TileIconifier.Controls.IconListView +{ + internal class IconListViewItemFactory + { + public List Create(IEnumerable icons) + { + //Build the list view items + var items = new List(); + foreach (Icon icon in icons) + { + var splitIcons = IconUtil.Split(icon); + + var largestIcon = splitIcons.OrderByDescending(k => k.Width) + .ThenByDescending(k => Math.Max(k.Height, k.Width)) + .First(); + Bitmap bmp; + try + { + bmp = IconUtil.ToBitmap(largestIcon); + } + catch + { + //icon failed to convert to bitmap + continue; + } + items.Add(new IconListViewItem(bmp)); + + //Icon cleanup + icon.Dispose(); + Array.ForEach(splitIcons, ic => ic.Dispose()); + //The listview creates its own copy of the bitmap + bmp.Dispose(); + } + return items; + } + } +} diff --git a/TileIconifier/Forms/Shared/FrmIconSelector.cs b/TileIconifier/Forms/Shared/FrmIconSelector.cs index 89d19ae..ab4c204 100644 --- a/TileIconifier/Forms/Shared/FrmIconSelector.cs +++ b/TileIconifier/Forms/Shared/FrmIconSelector.cs @@ -209,32 +209,8 @@ private void BuildListView() } //Build the list view items - var items = new List(); - foreach (Icon icon in _icons) - { - var splitIcons = IconUtil.Split(icon); - - var largestIcon = splitIcons.OrderByDescending(k => k.Width) - .ThenByDescending(k => Math.Max(k.Height, k.Width)) - .First(); - Bitmap bmp; - try - { - bmp = IconUtil.ToBitmap(largestIcon); - } - catch - { - //icon failed to convert to bitmap - continue; - } - items.Add(new IconListViewItem(bmp)); - - //Icon cleanup - icon.Dispose(); - Array.ForEach(splitIcons, ic => ic.Dispose()); - //The listview creates its own copy of the bitmap - bmp.Dispose(); - } + IconListViewItemFactory iconListViewItemFactory = new IconListViewItemFactory(); + var items = iconListViewItemFactory.Create(_icons); lvwIcons.Items.AddRange(items); } catch (Exception) diff --git a/TileIconifier/Program.cs b/TileIconifier/Program.cs index 7e62247..fae051a 100644 --- a/TileIconifier/Program.cs +++ b/TileIconifier/Program.cs @@ -29,10 +29,15 @@ using Microsoft.Win32; using System; +using System.Drawing; using System.Globalization; using System.Threading; using System.Windows.Forms; +using TileIconifier.Controls.IconListView; using TileIconifier.Core; +using TileIconifier.Core.IconExtractor; +using TileIconifier.Core.Shortcut; +using TileIconifier.Core.TileIconify; using TileIconifier.Core.Utilities; using TileIconifier.Forms.Main; using TileIconifier.Forms.Shared; @@ -51,8 +56,13 @@ internal static class Program /// The main entry point for the application. /// [STAThread] - private static void Main() + private static void Main(string[] args) { + if (args.Length > 0) + { + AutomaticTile(args); + return; + } SetUpLanguageFromConfig(); ApplySkinFromConfig(); try @@ -186,5 +196,26 @@ private static void main_LanguageChangedEvent(object sender, LocalizationEventAr _doNotExit = true; _fm?.Close(); } + + private static void AutomaticTile(string[] args) + { + // Command line args: + // Path-to-lnk Icon-index background-color + ShortcutItem shortcutItem = new ShortcutItem(args[0]); + var iconExtraction = new IconExtractor(shortcutItem.TargetInfo.FilePath); + Icon[] icons = iconExtraction.GetAllIcons(); + IconListViewItemFactory iconListViewItemFactory = new IconListViewItemFactory(); + var items = iconListViewItemFactory.Create(icons); + byte[] imageBytes = ImageUtils.ImageToByteArray(items[Int32.Parse(args[1])]?.Image); + shortcutItem.Properties.CurrentState.MediumImage.Path = shortcutItem.TargetInfo.FilePath; + shortcutItem.Properties.CurrentState.MediumImage.SetImage(imageBytes, ShortcutConstantsAndEnums.MediumShortcutDisplaySize); + + shortcutItem.Properties.CurrentState.SmallImage.Path = shortcutItem.TargetInfo.FilePath; + shortcutItem.Properties.CurrentState.SmallImage.SetImage(imageBytes, ShortcutConstantsAndEnums.SmallShortcutDisplaySize); + + shortcutItem.Properties.CurrentState.BackgroundColor = args[2]; + TileIcon tileIcon = new TileIcon(shortcutItem); + tileIcon.RunIconify(); + } } } \ No newline at end of file diff --git a/TileIconifier/TileIconifier.WinForms.csproj b/TileIconifier/TileIconifier.WinForms.csproj index 4aabd2e..2d13b79 100644 --- a/TileIconifier/TileIconifier.WinForms.csproj +++ b/TileIconifier/TileIconifier.WinForms.csproj @@ -153,6 +153,7 @@ Component +