aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Engine/WindowManager/ShiftWM.cs
diff options
context:
space:
mode:
authorAShifter <[email protected]>2017-10-01 08:23:50 -0600
committerAShifter <[email protected]>2017-10-01 08:23:50 -0600
commit46fe7eb7098dd31b186e13e228fede07c46ee064 (patch)
treee6fbc5ac67890b11293f682c279ff7670ecef8cf /ShiftOS.Engine/WindowManager/ShiftWM.cs
parentf5004702c46d6c99737a0519d7d6735307c7501a (diff)
parentf2ed0c673c2d3f0e021b0307a22792af66fd217d (diff)
downloadshiftos-rewind-46fe7eb7098dd31b186e13e228fede07c46ee064.tar.gz
shiftos-rewind-46fe7eb7098dd31b186e13e228fede07c46ee064.tar.bz2
shiftos-rewind-46fe7eb7098dd31b186e13e228fede07c46ee064.zip
Merge remote-tracking branch 'refs/remotes/ShiftOS-Rewind/master'
Diffstat (limited to 'ShiftOS.Engine/WindowManager/ShiftWM.cs')
-rw-r--r--ShiftOS.Engine/WindowManager/ShiftWM.cs97
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;
}
}