diff options
| author | John T <[email protected]> | 2017-11-11 08:53:55 -0500 |
|---|---|---|
| committer | John T <[email protected]> | 2017-11-11 08:53:55 -0500 |
| commit | 97722fbe9d474adffbba0b92e9727c48a8205234 (patch) | |
| tree | 65dfe45bbfd194ddb534cc80107ab8e6d80cf5bc /ShiftOS.Engine/Misc | |
| parent | a10440a45c40652b13e883aec832a0c8ded685e8 (diff) | |
| download | shiftos-rewind-97722fbe9d474adffbba0b92e9727c48a8205234.tar.gz shiftos-rewind-97722fbe9d474adffbba0b92e9727c48a8205234.tar.bz2 shiftos-rewind-97722fbe9d474adffbba0b92e9727c48a8205234.zip | |
Only 1/4 broken ShiftFS and WIP File Skimmer
Diffstat (limited to 'ShiftOS.Engine/Misc')
| -rw-r--r-- | ShiftOS.Engine/Misc/EventList.cs | 71 | ||||
| -rw-r--r-- | ShiftOS.Engine/Misc/Tools.cs | 75 |
2 files changed, 142 insertions, 4 deletions
diff --git a/ShiftOS.Engine/Misc/EventList.cs b/ShiftOS.Engine/Misc/EventList.cs new file mode 100644 index 0000000..e5202e7 --- /dev/null +++ b/ShiftOS.Engine/Misc/EventList.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace ShiftOS.Engine.Misc +{ + [Serializable] + public class EventList<T> : List<T> + { + public event EventHandler<EventListArgs<T>> ItemAdded; + public event EventHandler<EventListArgs<T>> ItemRemoved; + + public new void Add(T obj) + { + base.Add(obj); + ItemAdded?.Invoke(this, new EventListArgs<T>(obj)); + } + + public new void AddRange(IEnumerable<T> objs) + { + foreach (var obj in objs) + { + base.Add(obj); + ItemAdded?.Invoke(this, new EventListArgs<T>(obj)); + } + } + + public new bool Remove(T obj) + { + var b = base.Remove(obj); + + ItemRemoved?.Invoke(this, new EventListArgs<T>(obj)); + return b; + } + + public new void RemoveAt(int index) + { + base.RemoveAt(index); + ItemRemoved?.Invoke(this, new EventListArgs<T>(default)); + } + + public new void RemoveAll(Predicate<T> match) + { + //will this work + foreach (var item in this.Where(match as Func<T, bool> ?? throw new InvalidOperationException())) + { + Remove(item); + } + } + + public new void RemoveRange(int start, int end) + { + for (var i = start; i <= end; i++) + { + Remove(this[i]); + } + } + + public new void Clear() + { + RemoveAll(x => true); + } + } + + public class EventListArgs<T> : EventArgs + { + public EventListArgs(T item) => Item = item; + + public T Item { get; } + } +} diff --git a/ShiftOS.Engine/Misc/Tools.cs b/ShiftOS.Engine/Misc/Tools.cs index 6430084..11f4761 100644 --- a/ShiftOS.Engine/Misc/Tools.cs +++ b/ShiftOS.Engine/Misc/Tools.cs @@ -1,18 +1,25 @@ using System; +using System.Diagnostics; using System.Drawing; +using System.Linq; using System.Runtime.InteropServices; +using System.Windows.Forms; +using ShiftOS.Engine.Properties; +using ShiftOS.Engine.ShiftFS; +using ShiftOS.Engine.WindowManager; namespace ShiftOS.Engine.Misc { /// <summary> - /// Random class full of unassorted [but also uncategorizable] tools. + /// Random class full of unassorted [but also uncategorizable] tools. /// </summary> public static class Tools { public static Random Rnd = new Random(); - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern bool DestroyIcon(IntPtr handle); + //I wanna DESTROY this method + [DllImport("user32.dll")] + static extern bool DestroyIcon(IntPtr handle); public static Icon ToIcon(this Bitmap bm) { @@ -22,8 +29,68 @@ namespace ShiftOS.Engine.Misc //for some reason this exists DestroyIcon(tempicon.Handle); - + tempicon.Dispose(); + return newIcon; } + + public static void DisplayShiftFolder(this ListView list, ShiftDirectory dir) + { + var dirs = dir.OfType<ShiftDirectory>().ToArray(); + for (var i = 0; i < dirs.Length; i++) + { + list.Items.Add( + new ListViewItem + { + Text = dirs[i].Name, + ImageIndex = i, + StateImageIndex = i, + ImageKey = dirs[i].Guid.ToString(), + Tag = dirs[i] + }); + + list.StateImageList.Images.Add(dirs[i].Guid.ToString(), Resources.iconFileOpener_fw); + } + + var items = dir.OfType<ShiftFile>().ToArray(); + for (var i = 0; i < items.Length; i++) + { + list.Items.Add( + new ListViewItem + { + Text = items[i].Name, + ImageIndex = i, + StateImageIndex = i, + ImageKey = items[i].Guid.ToString(), + Tag = items[i], + }); + + list.StateImageList.Images.Add(items[i].Guid.ToString(), items[i].Icon ?? Resources.iconFileOpener_fw); + } + } + + public static void ShowDrivesList(this ListView list, ShiftWindow window = null) + { + var imageList = new ImageList(); + list.SmallImageList = imageList; + list.LargeImageList = imageList; + list.StateImageList = imageList; + + for (var i = 0; i < ShiftFS.ShiftFS.Drives.Count; i++) + { + list.Items.Add( + new ListViewItem + { + Text = $"{ShiftFS.ShiftFS.Drives[i].Name} ({ShiftFS.ShiftFS.Drives[i].Letter})", + ImageIndex = i, + StateImageIndex = i, + ImageKey= ShiftFS.ShiftFS.Drives[i].Guid.ToString(), + Tag = ShiftFS.ShiftFS.Drives[i] + }); + + list.StateImageList.Images.Add(ShiftFS.ShiftFS.Drives[i].Guid.ToString(), window?.Icon.ToBitmap() ?? Resources.ArtPadsave); + } + } + } }
\ No newline at end of file |
