diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/ShiftOS/v15/sqlite3/storage.ide b/.vs/ShiftOS/v15/sqlite3/storage.ide index 232bc17..a7bcbbb 100644 Binary files a/.vs/ShiftOS/v15/sqlite3/storage.ide and b/.vs/ShiftOS/v15/sqlite3/storage.ide differ diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..6b61141 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,6 @@ +{ + "ExpandedNodes": [ + "" + ], + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000..135556a Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/ShiftOS.Engine/ShiftOS.Engine.csproj b/ShiftOS.Engine/ShiftOS.Engine.csproj index 8683d20..2b436c1 100644 --- a/ShiftOS.Engine/ShiftOS.Engine.csproj +++ b/ShiftOS.Engine/ShiftOS.Engine.csproj @@ -20,6 +20,7 @@ DEBUG;TRACE prompt 4 + true pdbonly @@ -30,6 +31,9 @@ 4 + + ..\packages\Magick.NET-Q16-AnyCPU.7.0.7.300\lib\net40\Magick.NET-Q16-AnyCPU.dll + @@ -48,6 +52,7 @@ True Resources.resx + UserControl @@ -75,6 +80,7 @@ + diff --git a/ShiftOS.Engine/Tools.cs b/ShiftOS.Engine/Tools.cs new file mode 100644 index 0000000..eca7b59 --- /dev/null +++ b/ShiftOS.Engine/Tools.cs @@ -0,0 +1,32 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using ImageMagick; + +namespace ShiftOS.Engine +{ + /// + /// Random class full of unassorted [but also uncategorizable] tools. + /// + public static class Tools + { + public static Random Rnd = new Random(); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public extern static bool DestroyIcon(IntPtr handle); + + public static Icon ToIcon(this Bitmap bm) + { + Icon tempicon = Icon.FromHandle(bm.GetHicon()); + + Icon newIcon = tempicon.Clone() as Icon; + + //for some reason this exists + DestroyIcon(tempicon.Handle); + + return newIcon; + } + } +} diff --git a/ShiftOS.Engine/WindowManager/InfoboxTemplate.cs b/ShiftOS.Engine/WindowManager/InfoboxTemplate.cs index c1921a6..a5be129 100644 --- a/ShiftOS.Engine/WindowManager/InfoboxTemplate.cs +++ b/ShiftOS.Engine/WindowManager/InfoboxTemplate.cs @@ -1,11 +1,5 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using System.Media; using System.IO; @@ -14,38 +8,39 @@ namespace ShiftOS.Engine.WindowManager { public partial class InfoboxTemplate : UserControl { - Stream str; - public int buttonChoice; - public int buttonSelected; - public InfoboxTemplate(buttonType type) + Stream _str; + private int _buttonChoice; + private int _buttonSelected; + public InfoboxTemplate(ButtonType type) { InitializeComponent(); switch (type) { - case buttonType.OK: + case ButtonType.Ok: btnOpt1.Text = "OK"; btnOpt2.Hide(); btnOpt1.Location = new Point(109, 134); - buttonChoice = 1; + _buttonChoice = 1; break; - case buttonType.OKCancel: + case ButtonType.OkCancel: btnOpt1.Text = "OK"; btnOpt2.Text = "Cancel"; - buttonChoice = 2; + _buttonChoice = 2; break; - case buttonType.YesNo: + case ButtonType.YesNo: btnOpt1.Text = "Yes"; btnOpt2.Text = "No"; - buttonChoice = 3; + _buttonChoice = 3; break; } } - public enum buttonType + + public enum ButtonType { YesNo, - OKCancel, - OK + OkCancel, + Ok } private void btnOpt1_Click(object sender, EventArgs e) @@ -53,12 +48,12 @@ namespace ShiftOS.Engine.WindowManager switch (btnOpt1.Text) { case "OK": - buttonSelected = 1; - ParentForm.Close(); + _buttonSelected = 1; + ParentForm?.Close(); break; case "Yes": - buttonSelected = 2; - ParentForm.Close(); + _buttonSelected = 2; + ParentForm?.Close(); break; } } @@ -68,27 +63,26 @@ namespace ShiftOS.Engine.WindowManager switch (btnOpt2.Text) { case "No": - buttonSelected = 3; + _buttonSelected = 3; break; case "Cancel": - buttonSelected = 4; + _buttonSelected = 4; break; } } + public void Play() { - str = Properties.Resources.infobox; - SoundPlayer sp = new SoundPlayer(str); + _str = Properties.Resources.infobox; + SoundPlayer sp = new SoundPlayer(_str); sp.Play(); sp.Stream.Position = 0; } - private void InfoboxTemplate_Load(object sender, EventArgs e) - { - Play(); - } + private void InfoboxTemplate_Load(object sender, EventArgs e) + => Play(); - private void changeSize_Tick(object sender, EventArgs e) + private void changeSize_Tick(object sender, EventArgs e) { this.Height += label1.Height; this.Width += label1.Width; diff --git a/ShiftOS.Engine/WindowManager/ShiftWM.cs b/ShiftOS.Engine/WindowManager/ShiftWM.cs index 38537c7..539d469 100644 --- a/ShiftOS.Engine/WindowManager/ShiftWM.cs +++ b/ShiftOS.Engine/WindowManager/ShiftWM.cs @@ -1,41 +1,81 @@ -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 Windows { get; } = new ObservableCollection(); + + public static ShiftWindow GetShiftWindow(this UserControl control) + { + return Windows.First(p => (uint) control.Tag == p.Id); + } + + 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; + if (icon == null) + { + app.programIcon.Hide(); + app.programIcon.Image = Properties.Resources.nullIcon; + app.Title.Location = new Point(2, 7); + } - // Setup UC - content.Parent = app.programContent; + 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) + + 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; } } diff --git a/ShiftOS.Engine/WindowManager/ShiftWindow.Designer.cs b/ShiftOS.Engine/WindowManager/ShiftWindow.Designer.cs index f7443d6..1e0f105 100644 --- a/ShiftOS.Engine/WindowManager/ShiftWindow.Designer.cs +++ b/ShiftOS.Engine/WindowManager/ShiftWindow.Designer.cs @@ -28,220 +28,238 @@ /// private void InitializeComponent() { - this.program = new System.Windows.Forms.Panel(); - this.programContent = new System.Windows.Forms.Panel(); - this.bottomleftcorner = new System.Windows.Forms.Panel(); - this.toprightcorner = new System.Windows.Forms.Panel(); - this.bottomrightcorner = new System.Windows.Forms.Panel(); - this.topleftcorner = new System.Windows.Forms.Panel(); - this.bottom = new System.Windows.Forms.Panel(); - this.top = new System.Windows.Forms.Panel(); - this.programIcon = new System.Windows.Forms.PictureBox(); - this.maximizebutton = new System.Windows.Forms.PictureBox(); - this.minimizebutton = new System.Windows.Forms.PictureBox(); - this.Title = new System.Windows.Forms.Label(); - this.closebutton = new System.Windows.Forms.PictureBox(); - this.right = new System.Windows.Forms.Panel(); - this.left = new System.Windows.Forms.Panel(); - this.program.SuspendLayout(); - this.top.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.programIcon)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.maximizebutton)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.minimizebutton)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.closebutton)).BeginInit(); - this.SuspendLayout(); - // - // program - // - this.program.BackColor = System.Drawing.Color.White; - this.program.Controls.Add(this.programContent); - this.program.Controls.Add(this.bottomleftcorner); - this.program.Controls.Add(this.toprightcorner); - this.program.Controls.Add(this.bottomrightcorner); - this.program.Controls.Add(this.topleftcorner); - this.program.Controls.Add(this.bottom); - this.program.Controls.Add(this.top); - this.program.Controls.Add(this.right); - this.program.Controls.Add(this.left); - this.program.Dock = System.Windows.Forms.DockStyle.Fill; - this.program.Location = new System.Drawing.Point(0, 0); - this.program.Name = "program"; - this.program.Size = new System.Drawing.Size(284, 261); - this.program.TabIndex = 11; - // - // programContent - // - this.programContent.Dock = System.Windows.Forms.DockStyle.Fill; - this.programContent.Location = new System.Drawing.Point(4, 30); - this.programContent.Name = "programContent"; - this.programContent.Size = new System.Drawing.Size(276, 227); - this.programContent.TabIndex = 11; - // - // bottomleftcorner - // - this.bottomleftcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.bottomleftcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.bottomleftcorner.Location = new System.Drawing.Point(0, 257); - this.bottomleftcorner.Name = "bottomleftcorner"; - this.bottomleftcorner.Size = new System.Drawing.Size(5, 4); - this.bottomleftcorner.TabIndex = 10; - // - // toprightcorner - // - this.toprightcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.toprightcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.toprightcorner.Location = new System.Drawing.Point(278, 0); - this.toprightcorner.Name = "toprightcorner"; - this.toprightcorner.Size = new System.Drawing.Size(6, 30); - this.toprightcorner.TabIndex = 9; - // - // bottomrightcorner - // - this.bottomrightcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.bottomrightcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.bottomrightcorner.Cursor = System.Windows.Forms.Cursors.SizeNWSE; - this.bottomrightcorner.Location = new System.Drawing.Point(280, 257); - this.bottomrightcorner.Name = "bottomrightcorner"; - this.bottomrightcorner.Size = new System.Drawing.Size(4, 4); - this.bottomrightcorner.TabIndex = 4; - // - // topleftcorner - // - this.topleftcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.topleftcorner.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; - this.topleftcorner.Location = new System.Drawing.Point(0, 0); - this.topleftcorner.Name = "topleftcorner"; - this.topleftcorner.Size = new System.Drawing.Size(7, 30); - this.topleftcorner.TabIndex = 8; - // - // bottom - // - this.bottom.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.bottom.Cursor = System.Windows.Forms.Cursors.SizeNS; - this.bottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.bottom.Location = new System.Drawing.Point(4, 257); - this.bottom.Name = "bottom"; - this.bottom.Size = new System.Drawing.Size(276, 4); - this.bottom.TabIndex = 3; - // - // top - // - this.top.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.top.Controls.Add(this.programIcon); - this.top.Controls.Add(this.maximizebutton); - this.top.Controls.Add(this.minimizebutton); - this.top.Controls.Add(this.Title); - this.top.Controls.Add(this.closebutton); - this.top.Dock = System.Windows.Forms.DockStyle.Top; - this.top.ForeColor = System.Drawing.SystemColors.ControlText; - this.top.Location = new System.Drawing.Point(4, 0); - this.top.Name = "top"; - this.top.Size = new System.Drawing.Size(276, 30); - this.top.TabIndex = 0; - this.top.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Programtopbar_drag); - // - // programIcon - // - this.programIcon.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.programIcon.ErrorImage = null; - this.programIcon.InitialImage = null; - this.programIcon.Location = new System.Drawing.Point(6, 7); - this.programIcon.Name = "programIcon"; - this.programIcon.Size = new System.Drawing.Size(16, 16); - this.programIcon.TabIndex = 7; - this.programIcon.TabStop = false; - // - // maximizebutton - // - this.maximizebutton.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.maximizebutton.BackColor = System.Drawing.Color.Black; - this.maximizebutton.Location = new System.Drawing.Point(230, 4); - this.maximizebutton.Name = "maximizebutton"; - this.maximizebutton.Size = new System.Drawing.Size(21, 21); - this.maximizebutton.TabIndex = 6; - this.maximizebutton.TabStop = false; - this.maximizebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.maximizebutton_MouseDown); - this.maximizebutton.MouseEnter += new System.EventHandler(this.maximizebutton_MouseEnter); - this.maximizebutton.MouseLeave += new System.EventHandler(this.maximizebutton_MouseLeave); - this.maximizebutton.MouseUp += new System.Windows.Forms.MouseEventHandler(this.maximizebutton_MouseUp); - // - // minimizebutton - // - this.minimizebutton.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.minimizebutton.BackColor = System.Drawing.Color.Black; - this.minimizebutton.Location = new System.Drawing.Point(207, 4); - this.minimizebutton.Name = "minimizebutton"; - this.minimizebutton.Size = new System.Drawing.Size(21, 21); - this.minimizebutton.TabIndex = 5; - this.minimizebutton.TabStop = false; - this.minimizebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.minimizebutton_MouseDown); - this.minimizebutton.MouseEnter += new System.EventHandler(this.minimizebutton_MouseEnter); - this.minimizebutton.MouseLeave += new System.EventHandler(this.minimizebutton_MouseLeave); - this.minimizebutton.MouseUp += new System.Windows.Forms.MouseEventHandler(this.minimizebutton_MouseUp); - // - // Title - // - this.Title.AutoSize = true; - this.Title.BackColor = System.Drawing.Color.Transparent; - this.Title.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Title.ForeColor = System.Drawing.Color.White; - this.Title.Location = new System.Drawing.Point(25, 8); - this.Title.Name = "Title"; - this.Title.Size = new System.Drawing.Size(98, 13); - this.Title.TabIndex = 3; - this.Title.Text = "Application Title"; - this.Title.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Programtopbar_drag); - // - // closebutton - // - this.closebutton.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.closebutton.BackColor = System.Drawing.Color.Black; - this.closebutton.Location = new System.Drawing.Point(253, 4); - this.closebutton.Name = "closebutton"; - this.closebutton.Size = new System.Drawing.Size(21, 21); - this.closebutton.TabIndex = 4; - this.closebutton.TabStop = false; - this.closebutton.Click += new System.EventHandler(this.closebutton_Click); - this.closebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.closebutton_MouseDown); - this.closebutton.MouseEnter += new System.EventHandler(this.closebutton_MouseEnter); - this.closebutton.MouseLeave += new System.EventHandler(this.closebutton_MouseLeave); - this.closebutton.MouseUp += new System.Windows.Forms.MouseEventHandler(this.closebutton_MouseUp); - // - // right - // - this.right.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.right.Cursor = System.Windows.Forms.Cursors.SizeWE; - this.right.Dock = System.Windows.Forms.DockStyle.Right; - this.right.Location = new System.Drawing.Point(280, 0); - this.right.Name = "right"; - this.right.Size = new System.Drawing.Size(4, 261); - this.right.TabIndex = 2; - // - // left - // - this.left.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.left.Dock = System.Windows.Forms.DockStyle.Left; - this.left.Location = new System.Drawing.Point(0, 0); - this.left.Name = "left"; - this.left.Size = new System.Drawing.Size(4, 261); - this.left.TabIndex = 1; - // - // ShiftWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(284, 261); - this.Controls.Add(this.program); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "ShiftWindow"; - this.program.ResumeLayout(false); - this.top.ResumeLayout(false); - this.top.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.programIcon)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.maximizebutton)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.minimizebutton)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.closebutton)).EndInit(); - this.ResumeLayout(false); + this.program = new System.Windows.Forms.Panel(); + this.programContent = new System.Windows.Forms.Panel(); + this.bottomleftcorner = new System.Windows.Forms.Panel(); + this.toprightcorner = new System.Windows.Forms.Panel(); + this.bottomrightcorner = new System.Windows.Forms.Panel(); + this.topleftcorner = new System.Windows.Forms.Panel(); + this.bottom = new System.Windows.Forms.Panel(); + this.top = new System.Windows.Forms.Panel(); + this.programIcon = new System.Windows.Forms.PictureBox(); + this.maximizebutton = new System.Windows.Forms.PictureBox(); + this.minimizebutton = new System.Windows.Forms.PictureBox(); + this.Title = new System.Windows.Forms.Label(); + this.closebutton = new System.Windows.Forms.PictureBox(); + this.right = new System.Windows.Forms.Panel(); + this.left = new System.Windows.Forms.Panel(); + this.program.SuspendLayout(); + this.top.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.programIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.maximizebutton)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.minimizebutton)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.closebutton)).BeginInit(); + this.SuspendLayout(); + // + // program + // + this.program.BackColor = System.Drawing.Color.White; + this.program.Controls.Add(this.programContent); + this.program.Controls.Add(this.bottomleftcorner); + this.program.Controls.Add(this.toprightcorner); + this.program.Controls.Add(this.bottomrightcorner); + this.program.Controls.Add(this.topleftcorner); + this.program.Controls.Add(this.bottom); + this.program.Controls.Add(this.top); + this.program.Controls.Add(this.right); + this.program.Controls.Add(this.left); + this.program.Dock = System.Windows.Forms.DockStyle.Fill; + this.program.Location = new System.Drawing.Point(0, 0); + this.program.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.program.Name = "program"; + this.program.Size = new System.Drawing.Size(426, 402); + this.program.TabIndex = 11; + // + // programContent + // + this.programContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.programContent.Location = new System.Drawing.Point(6, 46); + this.programContent.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.programContent.Name = "programContent"; + this.programContent.Size = new System.Drawing.Size(414, 350); + this.programContent.TabIndex = 11; + // + // bottomleftcorner + // + this.bottomleftcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.bottomleftcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.bottomleftcorner.Location = new System.Drawing.Point(0, 395); + this.bottomleftcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.bottomleftcorner.Name = "bottomleftcorner"; + this.bottomleftcorner.Size = new System.Drawing.Size(8, 6); + this.bottomleftcorner.TabIndex = 10; + // + // toprightcorner + // + this.toprightcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.toprightcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.toprightcorner.Location = new System.Drawing.Point(417, 0); + this.toprightcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.toprightcorner.Name = "toprightcorner"; + this.toprightcorner.Size = new System.Drawing.Size(9, 46); + this.toprightcorner.TabIndex = 9; + // + // bottomrightcorner + // + this.bottomrightcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.bottomrightcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.bottomrightcorner.Cursor = System.Windows.Forms.Cursors.SizeNWSE; + this.bottomrightcorner.Location = new System.Drawing.Point(420, 395); + this.bottomrightcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.bottomrightcorner.Name = "bottomrightcorner"; + this.bottomrightcorner.Size = new System.Drawing.Size(6, 6); + this.bottomrightcorner.TabIndex = 4; + // + // topleftcorner + // + this.topleftcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.topleftcorner.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.topleftcorner.Location = new System.Drawing.Point(0, 0); + this.topleftcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.topleftcorner.Name = "topleftcorner"; + this.topleftcorner.Size = new System.Drawing.Size(10, 46); + this.topleftcorner.TabIndex = 8; + // + // bottom + // + this.bottom.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.bottom.Cursor = System.Windows.Forms.Cursors.SizeNS; + this.bottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.bottom.Location = new System.Drawing.Point(6, 396); + this.bottom.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.bottom.Name = "bottom"; + this.bottom.Size = new System.Drawing.Size(414, 6); + this.bottom.TabIndex = 3; + // + // top + // + this.top.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.top.Controls.Add(this.programIcon); + this.top.Controls.Add(this.maximizebutton); + this.top.Controls.Add(this.minimizebutton); + this.top.Controls.Add(this.Title); + this.top.Controls.Add(this.closebutton); + this.top.Dock = System.Windows.Forms.DockStyle.Top; + this.top.ForeColor = System.Drawing.SystemColors.ControlText; + this.top.Location = new System.Drawing.Point(6, 0); + this.top.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.top.Name = "top"; + this.top.Size = new System.Drawing.Size(414, 46); + this.top.TabIndex = 0; + this.top.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Programtopbar_drag); + // + // programIcon + // + this.programIcon.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.programIcon.ErrorImage = null; + this.programIcon.InitialImage = null; + this.programIcon.Location = new System.Drawing.Point(9, 11); + this.programIcon.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.programIcon.Name = "programIcon"; + this.programIcon.Size = new System.Drawing.Size(24, 25); + this.programIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.programIcon.TabIndex = 7; + this.programIcon.TabStop = false; + // + // maximizebutton + // + this.maximizebutton.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.maximizebutton.BackColor = System.Drawing.Color.Black; + this.maximizebutton.Location = new System.Drawing.Point(345, 6); + this.maximizebutton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.maximizebutton.Name = "maximizebutton"; + this.maximizebutton.Size = new System.Drawing.Size(32, 32); + this.maximizebutton.TabIndex = 6; + this.maximizebutton.TabStop = false; + this.maximizebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.maximizebutton_MouseDown); + this.maximizebutton.MouseEnter += new System.EventHandler(this.maximizebutton_MouseEnter); + this.maximizebutton.MouseLeave += new System.EventHandler(this.maximizebutton_MouseLeave); + this.maximizebutton.MouseUp += new System.Windows.Forms.MouseEventHandler(this.maximizebutton_MouseUp); + // + // minimizebutton + // + this.minimizebutton.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.minimizebutton.BackColor = System.Drawing.Color.Black; + this.minimizebutton.Location = new System.Drawing.Point(310, 6); + this.minimizebutton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.minimizebutton.Name = "minimizebutton"; + this.minimizebutton.Size = new System.Drawing.Size(32, 32); + this.minimizebutton.TabIndex = 5; + this.minimizebutton.TabStop = false; + this.minimizebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.minimizebutton_MouseDown); + this.minimizebutton.MouseEnter += new System.EventHandler(this.minimizebutton_MouseEnter); + this.minimizebutton.MouseLeave += new System.EventHandler(this.minimizebutton_MouseLeave); + this.minimizebutton.MouseUp += new System.Windows.Forms.MouseEventHandler(this.minimizebutton_MouseUp); + // + // Title + // + this.Title.AutoSize = true; + this.Title.BackColor = System.Drawing.Color.Transparent; + this.Title.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Title.ForeColor = System.Drawing.Color.White; + this.Title.Location = new System.Drawing.Point(38, 12); + this.Title.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.Title.Name = "Title"; + this.Title.Size = new System.Drawing.Size(149, 21); + this.Title.TabIndex = 3; + this.Title.Text = "Application Title"; + this.Title.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Programtopbar_drag); + // + // closebutton + // + this.closebutton.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.closebutton.BackColor = System.Drawing.Color.Black; + this.closebutton.Location = new System.Drawing.Point(380, 6); + this.closebutton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.closebutton.Name = "closebutton"; + this.closebutton.Size = new System.Drawing.Size(32, 32); + this.closebutton.TabIndex = 4; + this.closebutton.TabStop = false; + this.closebutton.Click += new System.EventHandler(this.closebutton_Click); + this.closebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.closebutton_MouseDown); + this.closebutton.MouseEnter += new System.EventHandler(this.closebutton_MouseEnter); + this.closebutton.MouseLeave += new System.EventHandler(this.closebutton_MouseLeave); + this.closebutton.MouseUp += new System.Windows.Forms.MouseEventHandler(this.closebutton_MouseUp); + // + // right + // + this.right.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.right.Cursor = System.Windows.Forms.Cursors.SizeWE; + this.right.Dock = System.Windows.Forms.DockStyle.Right; + this.right.Location = new System.Drawing.Point(420, 0); + this.right.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.right.Name = "right"; + this.right.Size = new System.Drawing.Size(6, 402); + this.right.TabIndex = 2; + // + // left + // + this.left.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.left.Dock = System.Windows.Forms.DockStyle.Left; + this.left.Location = new System.Drawing.Point(0, 0); + this.left.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.left.Name = "left"; + this.left.Size = new System.Drawing.Size(6, 402); + this.left.TabIndex = 1; + // + // ShiftWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(426, 402); + this.Controls.Add(this.program); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Name = "ShiftWindow"; + this.Text = "c"; + this.program.ResumeLayout(false); + this.top.ResumeLayout(false); + this.top.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.programIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.maximizebutton)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.minimizebutton)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.closebutton)).EndInit(); + this.ResumeLayout(false); } diff --git a/ShiftOS.Engine/WindowManager/ShiftWindow.cs b/ShiftOS.Engine/WindowManager/ShiftWindow.cs index 45aec7c..a41786a 100644 --- a/ShiftOS.Engine/WindowManager/ShiftWindow.cs +++ b/ShiftOS.Engine/WindowManager/ShiftWindow.cs @@ -1,11 +1,6 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; using System.Drawing; -using System.Data; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; @@ -13,91 +8,86 @@ namespace ShiftOS.Engine.WindowManager { public partial class ShiftWindow : Form { - public ShiftWindow() + public uint Id { get; private set; } + + public UserControl ChildControl { get; set; } + + public ShiftWindow() { InitializeComponent(); } - public const int WM_NCLBUTTONDOWN = 0xA1; - public const int HT_CAPTION = 0x2; + + public uint SetId() + { + do + { + Id = (uint)Tools.Rnd.Next(100000, 999999); + } + while (ShiftWM.Windows.FirstOrDefault(w => w.Id == Id) != null); + + return Id; + } + + private const int WM_NCLBUTTONDOWN = 0xA1; + private const int HT_CAPTION = 0x2; [DllImportAttribute("user32.dll")] - public static extern int SendMessage(IntPtr hWnd, + private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + [DllImportAttribute("user32.dll")] - public static extern bool ReleaseCapture(); + private static extern bool ReleaseCapture(); private void Programtopbar_drag(object sender, MouseEventArgs e) { - if (e.Button == MouseButtons.Left) - { - ReleaseCapture(); - SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); - } + if (e.Button != MouseButtons.Left) return; + + ReleaseCapture(); + SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); } - private void closebutton_Click(object sender, EventArgs e) - { - this.Close(); - } + private void closebutton_Click(object sender, EventArgs e) + => this.Close(); - private void closebutton_MouseEnter(object sender, EventArgs e) - { - closebutton.BackColor = Color.Gray; - } + private void closebutton_MouseEnter(object sender, EventArgs e) + => closebutton.BackColor = Color.Gray; - private void closebutton_MouseLeave(object sender, EventArgs e) - { - closebutton.BackColor = Color.Black; - } + private void closebutton_MouseLeave(object sender, EventArgs e) + => closebutton.BackColor = Color.Black; - private void maximizebutton_MouseEnter(object sender, EventArgs e) - { - maximizebutton.BackColor = Color.Gray; - } + private void maximizebutton_MouseEnter(object sender, EventArgs e) + => maximizebutton.BackColor = Color.Gray; - private void maximizebutton_MouseLeave(object sender, EventArgs e) - { - maximizebutton.BackColor = Color.Black; - } + private void maximizebutton_MouseLeave(object sender, EventArgs e) + => maximizebutton.BackColor = Color.Black; - private void minimizebutton_MouseEnter(object sender, EventArgs e) - { - minimizebutton.BackColor = Color.Gray; - } + private void minimizebutton_MouseEnter(object sender, EventArgs e) + => minimizebutton.BackColor = Color.Gray; - private void minimizebutton_MouseLeave(object sender, EventArgs e) - { - minimizebutton.BackColor = Color.Black; - } + private void minimizebutton_MouseLeave(object sender, EventArgs e) + => minimizebutton.BackColor = Color.Black; - private void closebutton_MouseDown(object sender, MouseEventArgs e) - { - closebutton.BackColor = Color.Black; - } + private void closebutton_MouseDown(object sender, MouseEventArgs e) + => closebutton.BackColor = Color.Black; - private void maximizebutton_MouseDown(object sender, MouseEventArgs e) - { - maximizebutton.BackColor = Color.Black; - } + private void maximizebutton_MouseDown(object sender, MouseEventArgs e) + => maximizebutton.BackColor = Color.Black; - private void minimizebutton_MouseDown(object sender, MouseEventArgs e) - { - minimizebutton.BackColor = Color.Black; - } + private void minimizebutton_MouseDown(object sender, MouseEventArgs e) + => minimizebutton.BackColor = Color.Black; - private void minimizebutton_MouseUp(object sender, MouseEventArgs e) - { - minimizebutton.BackColor = Color.Gray; - } + private void minimizebutton_MouseUp(object sender, MouseEventArgs e) + => minimizebutton.BackColor = Color.Gray; - private void maximizebutton_MouseUp(object sender, MouseEventArgs e) - { - maximizebutton.BackColor = Color.Gray; - } + private void maximizebutton_MouseUp(object sender, MouseEventArgs e) + => maximizebutton.BackColor = Color.Gray; - private void closebutton_MouseUp(object sender, MouseEventArgs e) - { - closebutton.BackColor = Color.Gray; - } - } + private void closebutton_MouseUp(object sender, MouseEventArgs e) + => closebutton.BackColor = Color.Gray; + } + + public interface IShiftWindowExtensions + { + void OnLoaded(ShiftWindow window); + } } diff --git a/ShiftOS.Engine/packages.config b/ShiftOS.Engine/packages.config new file mode 100644 index 0000000..d376894 --- /dev/null +++ b/ShiftOS.Engine/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ShiftOS.Main/Program.cs b/ShiftOS.Main/Program.cs index 5464d8e..10277b0 100644 --- a/ShiftOS.Main/Program.cs +++ b/ShiftOS.Main/Program.cs @@ -1,8 +1,7 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; +using ShiftOS.Main.ShiftOS; namespace ShiftOS.Main { @@ -16,7 +15,10 @@ namespace ShiftOS.Main { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new TestForm()); + + Parallel.Invoke( + () => Application.Run(new TestForm()), + () => Application.Run(new Desktop())); } } } diff --git a/ShiftOS.Main/ShiftOS.Main.csproj b/ShiftOS.Main/ShiftOS.Main.csproj index 18e842f..c814c14 100644 --- a/ShiftOS.Main/ShiftOS.Main.csproj +++ b/ShiftOS.Main/ShiftOS.Main.csproj @@ -76,6 +76,12 @@ TestForm.cs + + Form + + + Desktop.cs + HijackScreen.cs @@ -101,6 +107,9 @@ TestForm.cs + + Desktop.cs + SettingsSingleFileGenerator Settings.Designer.cs diff --git a/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.Designer.cs b/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.Designer.cs index 5c3a0de..7fd37f0 100644 --- a/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.Designer.cs +++ b/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.Designer.cs @@ -28,32 +28,47 @@ /// private void InitializeComponent() { - this.label1 = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(18, 16); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 13); - this.label1.TabIndex = 0; - this.label1.Text = "label1"; - // - // ShiftDemo - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.label1); - this.Name = "ShiftDemo"; - this.Size = new System.Drawing.Size(300, 300); - this.ResumeLayout(false); - this.PerformLayout(); + this.label1 = new System.Windows.Forms.Label(); + this.icon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.icon)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(27, 25); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(51, 20); + this.label1.TabIndex = 0; + this.label1.Text = "label1"; + // + // icon + // + this.icon.Location = new System.Drawing.Point(31, 61); + this.icon.Name = "icon"; + this.icon.Size = new System.Drawing.Size(300, 300); + this.icon.TabIndex = 1; + this.icon.TabStop = false; + // + // ShiftDemo + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.icon); + this.Controls.Add(this.label1); + this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Name = "ShiftDemo"; + this.Size = new System.Drawing.Size(450, 462); + ((System.ComponentModel.ISupportInitialize)(this.icon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } #endregion public System.Windows.Forms.Label label1; - } + private System.Windows.Forms.PictureBox icon; + } } diff --git a/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.cs b/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.cs index 1f400c8..11fc160 100644 --- a/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.cs +++ b/ShiftOS.Main/ShiftOS/Apps/ShiftDemo.cs @@ -7,14 +7,20 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using ShiftOS.Engine.WindowManager; namespace ShiftOS.Main { - public partial class ShiftDemo : UserControl + public partial class ShiftDemo : UserControl, IShiftWindowExtensions { public ShiftDemo() { InitializeComponent(); } - } + + public void OnLoaded(ShiftWindow window) + { + icon.Image = this.GetShiftWindow().Icon.ToBitmap(); + } + } } diff --git a/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/SelectColor.cs b/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/SelectColor.cs index 9062947..697e22e 100644 --- a/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/SelectColor.cs +++ b/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/SelectColor.cs @@ -1,11 +1,5 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using ShiftOS.Engine.WindowManager; @@ -13,11 +7,10 @@ namespace ShiftOS.Main.ShiftOS.Apps { public partial class SelectColor : UserControl { - ShiftWM shiftWM = new ShiftWM(); - Color finalColor; - int colorType1; - int colorType2; - int colorType3; + Color _finalColor; + int _colorType1; + int _colorType2; + int _colorType3; public SelectColor() { InitializeComponent(); @@ -28,31 +21,31 @@ namespace ShiftOS.Main.ShiftOS.Apps { try { - colorType1 = Convert.ToInt32(textBox1.Text); - colorType2 = Convert.ToInt32(textBox2.Text); - colorType3 = Convert.ToInt32(textBox3.Text); + _colorType1 = Convert.ToInt32(textBox1.Text); + _colorType2 = Convert.ToInt32(textBox2.Text); + _colorType3 = Convert.ToInt32(textBox3.Text); } - catch(Exception ex) + catch(FormatException ex) { - shiftWM.StartInfoboxSession("Error!", "Failed to parse integer. Error:\n" + ex, InfoboxTemplate.buttonType.OK); + ShiftWM.StartInfoboxSession("Error!", "Failed to parse integer. Error:\n" + ex, InfoboxTemplate.ButtonType.Ok); } - if (colorType1 > 255 || colorType2 > 255 || colorType3 > 255) + if (_colorType1 > 255 || _colorType2 > 255 || _colorType3 > 255) { - shiftWM.StartInfoboxSession("Error!", "A value cannot be greater than 255!", InfoboxTemplate.buttonType.OK); + ShiftWM.StartInfoboxSession("Error!", "A value cannot be greater than 255!", InfoboxTemplate.ButtonType.Ok); } else { try { ShiftWindow sw = new ShiftWindow(); - finalColor = Color.FromArgb(colorType1, colorType2, colorType3); - this.BackColor = finalColor; - shiftWM.StartInfoboxSession("Success!", "Changed color to:\n" + colorType1.ToString() + ", " + colorType2.ToString() + ", " + colorType3.ToString() + ".", InfoboxTemplate.buttonType.OK); + _finalColor = Color.FromArgb(_colorType1, _colorType2, _colorType3); + BackColor = _finalColor; + ShiftWM.StartInfoboxSession("Success!", "Changed color to:\n" + _colorType1.ToString() + ", " + _colorType2.ToString() + ", " + _colorType3.ToString() + ".", InfoboxTemplate.ButtonType.Ok); } - catch (Exception ex) + catch (Exception) { - shiftWM.StartInfoboxSession("Error!", "An error occured while setting the color.", InfoboxTemplate.buttonType.OK); + ShiftWM.StartInfoboxSession("Error!", "An error occured while setting the color.", InfoboxTemplate.ButtonType.Ok); } } } diff --git a/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/Shifter.cs b/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/Shifter.cs index 74b2079..098920f 100644 --- a/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/Shifter.cs +++ b/ShiftOS.Main/ShiftOS/Apps/ShifterStuff/Shifter.cs @@ -1,12 +1,6 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; +using ShiftOS.Engine; using ShiftOS.Engine.WindowManager; namespace ShiftOS.Main.ShiftOS.Apps @@ -14,7 +8,6 @@ namespace ShiftOS.Main.ShiftOS.Apps public partial class Shifter : UserControl { public int colorType; //This is a check to see what option was chosen. - ShiftWM wm = new ShiftWM(); public Shifter() { InitializeComponent(); @@ -23,7 +16,7 @@ namespace ShiftOS.Main.ShiftOS.Apps private void button1_Click(object sender, EventArgs e) { colorType = 1; - wm.Init(new SelectColor(), "Select a color", Properties.Resources.iconColourPicker_fw); + ShiftWM.Init(new SelectColor(), "Select a color", Properties.Resources.iconColourPicker_fw.ToIcon()); } } } diff --git a/ShiftOS.Main/ShiftOS/Apps/TestForm.Designer.cs b/ShiftOS.Main/ShiftOS/Apps/TestForm.Designer.cs index 7049a7e..50bcb58 100644 --- a/ShiftOS.Main/ShiftOS/Apps/TestForm.Designer.cs +++ b/ShiftOS.Main/ShiftOS/Apps/TestForm.Designer.cs @@ -28,61 +28,95 @@ /// private void InitializeComponent() { - this.textBox1 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(12, 13); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(260, 20); - this.textBox1.TabIndex = 0; - this.textBox1.Text = "Title"; - // - // textBox2 - // - this.textBox2.Location = new System.Drawing.Point(12, 39); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(260, 20); - this.textBox2.TabIndex = 1; - this.textBox2.Text = "Contents"; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(12, 65); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(128, 23); - this.button1.TabIndex = 2; - this.button1.Text = "Create Window"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.Button1_Click); - // - // button2 - // - this.button2.Location = new System.Drawing.Point(146, 65); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(126, 23); - this.button2.TabIndex = 4; - this.button2.Text = "Test Shifter"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // TestForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(284, 100); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.textBox1); - this.Name = "TestForm"; - this.Text = "TestForm"; - this.ResumeLayout(false); - this.PerformLayout(); + this.components = new System.ComponentModel.Container(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.systemIconsBindingSource = new System.Windows.Forms.BindingSource(this.components); + ((System.ComponentModel.ISupportInitialize)(this.systemIconsBindingSource)).BeginInit(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(18, 20); + this.textBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(388, 26); + this.textBox1.TabIndex = 0; + this.textBox1.Text = "Title"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(18, 60); + this.textBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(388, 26); + this.textBox2.TabIndex = 1; + this.textBox2.Text = "Contents"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(13, 149); + this.button1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(192, 35); + this.button1.TabIndex = 2; + this.button1.Text = "Create Window"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.Button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(217, 149); + this.button2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(189, 35); + this.button2.TabIndex = 4; + this.button2.Text = "Test Shifter"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "Application", + "Asterisk", + "Error", + "Exclamation", + "Hand", + "Information", + "Question", + "Shield", + "Warning", + "WinLogo"}); + this.comboBox1.Location = new System.Drawing.Point(18, 104); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(388, 28); + this.comboBox1.TabIndex = 5; + // + // systemIconsBindingSource + // + this.systemIconsBindingSource.DataSource = typeof(System.Drawing.SystemIcons); + // + // TestForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(426, 198); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Name = "TestForm"; + this.Text = "TestForm"; + ((System.ComponentModel.ISupportInitialize)(this.systemIconsBindingSource)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -92,5 +126,7 @@ private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; - } + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.BindingSource systemIconsBindingSource; + } } \ No newline at end of file diff --git a/ShiftOS.Main/ShiftOS/Apps/TestForm.cs b/ShiftOS.Main/ShiftOS/Apps/TestForm.cs index e2b5bf7..1fd3b18 100644 --- a/ShiftOS.Main/ShiftOS/Apps/TestForm.cs +++ b/ShiftOS.Main/ShiftOS/Apps/TestForm.cs @@ -1,5 +1,8 @@ using System; +using System.Drawing; +using System.Linq; using System.Windows.Forms; +using ShiftOS.Engine; using ShiftOS.Engine.WindowManager; using ShiftOS.Main.ShiftOS.Apps; @@ -7,8 +10,6 @@ namespace ShiftOS.Main { public partial class TestForm : Form { - public ShiftWM shiftWM = new ShiftWM(); - public TestForm() { InitializeComponent(); @@ -16,14 +17,16 @@ namespace ShiftOS.Main private void Button1_Click(object sender, EventArgs e) { - ShiftDemo demo = new ShiftDemo(); - demo.label1.Text = textBox2.Text; - shiftWM.Init(demo, textBox1.Text, null); - shiftWM.StartInfoboxSession(textBox1.Text, textBox2.Text, InfoboxTemplate.buttonType.OK); + ShiftDemo demo = new ShiftDemo {label1 = {Text = textBox2.Text}}; + + var item = typeof(SystemIcons).GetProperties() + .First(p => p.Name == comboBox1.SelectedItem as string); + + ShiftWM.Init(demo, textBox1.Text, (item.GetMethod.Invoke(null, new object[0]) as Icon)); + ShiftWM.StartInfoboxSession(textBox1.Text, textBox2.Text, InfoboxTemplate.ButtonType.Ok); } - private void button2_Click(object sender, EventArgs e) - { - shiftWM.Init(new Shifter(), "Shifter", Properties.Resources.iconShifter); } + private void button2_Click(object sender, EventArgs e) + => ShiftWM.Init(new Shifter(), "Shifter", Properties.Resources.iconShifter.ToIcon()); } } diff --git a/ShiftOS.Main/ShiftOS/Apps/TestForm.resx b/ShiftOS.Main/ShiftOS/Apps/TestForm.resx index 1af7de1..6dba9d3 100644 --- a/ShiftOS.Main/ShiftOS/Apps/TestForm.resx +++ b/ShiftOS.Main/ShiftOS/Apps/TestForm.resx @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/ShiftOS.Main/ShiftOS/Desktop.Designer.cs b/ShiftOS.Main/ShiftOS/Desktop.Designer.cs new file mode 100644 index 0000000..dac30c6 --- /dev/null +++ b/ShiftOS.Main/ShiftOS/Desktop.Designer.cs @@ -0,0 +1,111 @@ +namespace ShiftOS.Main.ShiftOS +{ + partial class Desktop + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.listView1 = new System.Windows.Forms.ListView(); + this.taskbar = new System.Windows.Forms.ToolStrip(); + this.toolStripDropDownButton1 = new System.Windows.Forms.ToolStripDropDownButton(); + this.taskbarClock = new System.Windows.Forms.ToolStripLabel(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.taskbar.SuspendLayout(); + this.SuspendLayout(); + // + // listView1 + // + this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.Location = new System.Drawing.Point(0, 0); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(1962, 1236); + this.listView1.TabIndex = 0; + this.listView1.UseCompatibleStateImageBehavior = false; + // + // taskbar + // + this.taskbar.Dock = System.Windows.Forms.DockStyle.Bottom; + this.taskbar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.taskbar.ImageScalingSize = new System.Drawing.Size(24, 24); + this.taskbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripDropDownButton1, + this.taskbarClock}); + this.taskbar.Location = new System.Drawing.Point(0, 1204); + this.taskbar.Name = "taskbar"; + this.taskbar.Size = new System.Drawing.Size(1962, 32); + this.taskbar.TabIndex = 1; + this.taskbar.Text = "toolStrip1"; + // + // toolStripDropDownButton1 + // + this.toolStripDropDownButton1.Image = global::ShiftOS.Main.Properties.Resources.iconWebBrowser; + this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton1.Name = "toolStripDropDownButton1"; + this.toolStripDropDownButton1.Size = new System.Drawing.Size(131, 29); + this.toolStripDropDownButton1.Tag = ((uint)(0u)); + this.toolStripDropDownButton1.Text = "Programs"; + // + // taskbarClock + // + this.taskbarClock.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.taskbarClock.Image = global::ShiftOS.Main.Properties.Resources.iconClock; + this.taskbarClock.Name = "taskbarClock"; + this.taskbarClock.Size = new System.Drawing.Size(70, 29); + this.taskbarClock.Tag = ((uint)(0u)); + this.taskbarClock.Text = "0:00"; + // + // timer1 + // + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // Desktop + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1962, 1236); + this.Controls.Add(this.taskbar); + this.Controls.Add(this.listView1); + this.Name = "Desktop"; + this.Text = "Desktop"; + this.taskbar.ResumeLayout(false); + this.taskbar.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.ToolStrip taskbar; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1; + private System.Windows.Forms.ToolStripLabel taskbarClock; + private System.Windows.Forms.Timer timer1; + } +} \ No newline at end of file diff --git a/ShiftOS.Main/ShiftOS/Desktop.cs b/ShiftOS.Main/ShiftOS/Desktop.cs new file mode 100644 index 0000000..494222a --- /dev/null +++ b/ShiftOS.Main/ShiftOS/Desktop.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ShiftOS.Engine.WindowManager; + +namespace ShiftOS.Main.ShiftOS +{ + public partial class Desktop : Form + { + public Desktop() + { + InitializeComponent(); + + timer1.Start(); + + this.Closed += (sender, args) => + { + Application.Exit(); + }; + + #region Disgusting taskbar code + + ShiftWM.Windows.CollectionChanged += (sender, args) => + { + args.NewItems?.OfType().ToList().ForEach(window => + { + taskbar.Invoke(new Action(() => + { + taskbar.Items.Add(new ToolStripButton + { + Text = window.Title.Text, + Image = window.Icon.ToBitmap(), + Tag = window.Id + }); + })); + }); + + args.OldItems?.OfType().ToList().ForEach(window => + { + taskbar.Invoke(new Action(() => + { + var tbRemovalList = taskbar.Items.OfType().Where(i => (uint) i.Tag == window.Id); + + tbRemovalList.ToList().ForEach(p => taskbar.Items.Remove(p)); + })); + }); + }; + + #endregion + } + + private void timer1_Tick(object sender, EventArgs e) => + taskbarClock.Text = $"{DateTime.Now:t}"; + } +} diff --git a/ShiftOS.Main/ShiftOS/Desktop.resx b/ShiftOS.Main/ShiftOS/Desktop.resx new file mode 100644 index 0000000..1ea96dc --- /dev/null +++ b/ShiftOS.Main/ShiftOS/Desktop.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 159, 17 + + \ No newline at end of file