diff options
Diffstat (limited to 'ShiftOS.Engine/WindowManager/ShiftWM.cs')
| -rw-r--r-- | ShiftOS.Engine/WindowManager/ShiftWM.cs | 97 |
1 files changed, 76 insertions, 21 deletions
diff --git a/ShiftOS.Engine/WindowManager/ShiftWM.cs b/ShiftOS.Engine/WindowManager/ShiftWM.cs index 38537c7..0c69fb7 100644 --- a/ShiftOS.Engine/WindowManager/ShiftWM.cs +++ b/ShiftOS.Engine/WindowManager/ShiftWM.cs @@ -1,41 +1,96 @@ -using System.Drawing; +using System; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Drawing; +using System.Linq; using System.Windows.Forms; using static ShiftOS.Engine.WindowManager.InfoboxTemplate; namespace ShiftOS.Engine.WindowManager { - public class ShiftWM + public static class ShiftWM { - public ShiftWindow Init(UserControl content, string title, Image icon, bool ShowAsInfobox = false, bool resize = true) + public static ObservableCollection<ShiftWindow> Windows { get; } = new ObservableCollection<ShiftWindow>(); + + public static ShiftWindow GetShiftWindow(this UserControl control) + { + return Windows.First(p => (uint) control.Tag == p.Id); + } + + /// <summary> + /// Shows a new Window based on a UserControl. + /// </summary> + /// <param name="content">The UserControl to use</param> + /// <param name="title">The program's title</param> + /// <param name="icon">The icon to show</param> + /// <param name="showAsInfobox">Checks if this is an infobox</param> + /// <param name="resize">Enables or disables resizing</param> + /// <returns></returns> + public static ShiftWindow Init(UserControl content, string title, Icon icon, bool showAsInfobox = false, bool resize = true) { // Setup Window - ShiftWindow app = new ShiftWindow(); - app.Text = title; - app.Title.Text = title; - app.Width = content.Width + app.left.Width + app.right.Width; + ShiftWindow app = new ShiftWindow + { + Text = title, + Title = {Text = title} + }; + + app.Width = content.Width + app.left.Width + app.right.Width; app.Height = content.Height + app.bottom.Height + app.top.Height; // Icon Setup - if (icon == null) - { - app.programIcon.Hide(); - app.programIcon.Image = Properties.Resources.nullIcon; - app.Title.Location = new Point(2, 7); - } - else app.programIcon.Image = icon; - - // Setup UC - content.Parent = app.programContent; + if (icon == null) + { + app.programIcon.Hide(); + app.programIcon.Image = Properties.Resources.nullIcon; + app.Title.Location = new Point(2, 7); + } + + else + { + app.programIcon.Image = icon.ToBitmap(); + app.Icon = icon; + } + + // Setup UC + content.Parent = app.programContent; content.BringToFront(); content.Dock = DockStyle.Fill; app.Show(); + + content.Tag = app.SetId(); + + Debug.WriteLine($"usercontrol: {content.Tag} window: {app.Id}"); + + app.Closed += (sender, args) => + { + Windows.Remove((ShiftWindow) sender); + }; + + Windows.Add(app); + + if (content is IShiftWindowExtensions extensions) + { + extensions.OnLoaded(app); + } + return app; } - public InfoboxTemplate StartInfoboxSession(string title, string body, buttonType type) + + /// <summary> + /// Shows a new infobox. + /// </summary> + /// <param name="title">The title of the infobox.</param> + /// <param name="body">The infobox's content.</param> + /// <param name="type">The ButtonType used for the infobox.</param> + /// <returns></returns> + public static InfoboxTemplate StartInfoboxSession(string title, string body, ButtonType type) { - InfoboxTemplate info = new InfoboxTemplate(type); - info.label1.Text = body; - Init(info, title, Properties.Resources.iconInfoBox_fw, true, false); + InfoboxTemplate info = new InfoboxTemplate(type) + { + label1 = { Text = body } + }; + Init(info, title, Properties.Resources.iconInfoBox_fw.ToIcon(), true, false); return info; } } |
