From 50971ea04e7ad7a7ae9dcbbe911b7b8bcf5dd7d3 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 4 Feb 2017 13:21:38 -0500 Subject: Implement maximizing and minimizing Fixes #24 and makes panel buttons useful. --- ShiftOS.WinForms/WinformsDesktop.cs | 93 +++++++++++++++++++++++++++++-------- 1 file changed, 74 insertions(+), 19 deletions(-) (limited to 'ShiftOS.WinForms/WinformsDesktop.cs') diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs index 9490850..c45feee 100644 --- a/ShiftOS.WinForms/WinformsDesktop.cs +++ b/ShiftOS.WinForms/WinformsDesktop.cs @@ -35,6 +35,7 @@ using ShiftOS.Engine; using static ShiftOS.Engine.SkinEngine; using ShiftOS.WinForms.Tools; using ShiftOS.WinForms.Applications; +using Newtonsoft.Json; /// /// Winforms desktop. @@ -125,6 +126,26 @@ namespace ShiftOS.WinForms { if (form.Visible == true) { + EventHandler onClick = (o, a) => + { + if(form == focused) + { + if (form.IsMinimized) + { + RestoreWindow(form); + } + else + { + MinimizeWindow(form); + } + } + else + { + form.BringToFront(); + focused = form; + } + }; + var pnlbtn = new Panel(); pnlbtn.Margin = new Padding(2, LoadedSkin.PanelButtonFromTop, 0, 0); pnlbtn.BackColor = LoadedSkin.PanelButtonColor; @@ -151,6 +172,12 @@ namespace ShiftOS.WinForms this.panelbuttonholder.Controls.Add(pnlbtn); pnlbtn.Show(); pnlbtntext.Show(); + + if (Shiftorium.UpgradeInstalled("useful_panel_buttons")) + { + pnlbtn.Click += onClick; + pnlbtntext.Click += onClick; + } } } } @@ -342,6 +369,11 @@ namespace ShiftOS.WinForms public void ShowWindow(IWindowBorder border) { var brdr = border as Form; + focused = border; + brdr.GotFocus += (o, a) => + { + focused = border; + }; brdr.FormBorderStyle = FormBorderStyle.None; brdr.Show(); brdr.TopMost = true; @@ -354,17 +386,26 @@ namespace ShiftOS.WinForms /// Border. public void KillWindow(IWindowBorder border) { - throw new NotImplementedException(); + border.Close(); } - /// - /// Minimizes the window. - /// - /// The window. - /// Brdr. + private IWindowBorder focused = null; + + + /// + /// Minimizes the window. + /// + /// Brdr. public void MinimizeWindow(IWindowBorder brdr) { - throw new NotImplementedException(); + var loc = (brdr as WindowBorder).Location; + var sz = (brdr as WindowBorder).Size; + (brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new + { + Size = sz, + Location = loc + }); + (brdr as WindowBorder).Location = new Point(this.GetSize().Width * 2, this.GetSize().Height * 2); } /// @@ -374,24 +415,38 @@ namespace ShiftOS.WinForms /// Brdr. public void MaximizeWindow(IWindowBorder brdr) { - throw new NotImplementedException(); + int startY = (LoadedSkin.DesktopPanelPosition == 1) ? 0 : LoadedSkin.DesktopPanelHeight; + int h = this.GetSize().Height - LoadedSkin.DesktopPanelHeight; + var loc = (brdr as WindowBorder).Location; + var sz = (brdr as WindowBorder).Size; + (brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new + { + Size = sz, + Location = loc + }); + (brdr as WindowBorder).Location = new Point(0, startY); + (brdr as WindowBorder).Size = new Size(this.GetSize().Width, h); + } - /// - /// Restores the window. - /// - /// The window. - /// Brdr. + /// + /// Restores the window. + /// + /// The window. + /// Brdr. public void RestoreWindow(IWindowBorder brdr) { - throw new NotImplementedException(); + dynamic tag = JsonConvert.DeserializeObject((brdr as WindowBorder).Tag.ToString()); + (brdr as WindowBorder).Location = tag.Location; + (brdr as WindowBorder).Size = tag.Size; + } - /// - /// Invokes the on worker thread. - /// - /// The on worker thread. - /// Act. + /// + /// Invokes the on worker thread. + /// + /// The on worker thread. + /// Act. public void InvokeOnWorkerThread(Action act) { this.Invoke(act); -- cgit v1.2.3