diff --git a/MainForm.cs b/MainForm.cs index 85fe7a2..f54189a 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -4,6 +4,7 @@ using Newtonsoft.Json; using RyzStudio.Windows.Forms; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Drawing; using System.IO; using System.Threading.Tasks; @@ -41,6 +42,36 @@ namespace AppLauncher this.Visible = true; } + protected override void OnClosing(CancelEventArgs e) + { + base.OnClosing(e); + + if (string.IsNullOrWhiteSpace(sessionFilename)) + { + // do nothing + } + else + { + DialogResult dr = MessageBox.Show("Save existing session?", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); + if (dr == DialogResult.Yes) + { + bool rv = saveFile(sessionFilename); + if (!rv) + { + e.Cancel = true; + } + } + else if (dr == DialogResult.No) + { + // do nothing + } + else if (dr == DialogResult.Cancel) + { + e.Cancel = true; + } + } + } + public async Task ToggleSize() { if (this.Width > collapsedWidth) diff --git a/Windows/Forms/AForm.cs b/Windows/Forms/AForm.cs index eaaed42..b394436 100644 --- a/Windows/Forms/AForm.cs +++ b/Windows/Forms/AForm.cs @@ -222,7 +222,7 @@ namespace AppLauncher.Windows.Forms this.imageBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; this.imageBox2.ErrorImage = null; this.imageBox2.Image = global::AppLauncher.Resource1.maximise_20; - this.imageBox2.ImageHover = global::AppLauncher.Resource1.maximise2_20; + this.imageBox2.ImageHover = global::AppLauncher.Resource1.maximise_20; this.imageBox2.ImageNormal = global::AppLauncher.Resource1.maximise_20; this.imageBox2.ImageSelected = global::AppLauncher.Resource1.maximise2_20; this.imageBox2.InitialImage = null; @@ -302,9 +302,9 @@ namespace AppLauncher.Windows.Forms { if (e.Button == MouseButtons.Left) { - this.WindowState = ((this.WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized); + //this.WindowState = ((this.WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized); - imageBox2.IsSelected = (this.WindowState == FormWindowState.Maximized); + //imageBox2.IsSelected = (this.WindowState == FormWindowState.Maximized); } else if (e.Button == MouseButtons.Right) { diff --git a/Windows/Forms/Tile/TTilePanelLayout.cs b/Windows/Forms/Tile/TTilePanelLayout.cs index cce0945..fdbdf78 100644 --- a/Windows/Forms/Tile/TTilePanelLayout.cs +++ b/Windows/Forms/Tile/TTilePanelLayout.cs @@ -157,11 +157,32 @@ namespace AppLauncher.Windows.Forms isChecked = !isChecked; this.Invalidate(); + await this.InvalidateContainer(); + + // exclusivity + if (isChecked) + { + if (this.Model.IsExclusive) + { + if (this.FlowLayoutPanel != null) + { + foreach (TTilePanelLayout item in this.FlowLayoutPanel.Controls.OfType()) + { + if (item.Equals(this)) + { + continue; + } + + await item.Collapse(); + } + } + } + } } else { - + // do nothing } } else if (e.Button == MouseButtons.Right) @@ -191,6 +212,8 @@ namespace AppLauncher.Windows.Forms } } + public bool EnableAnimation { get; set; } = true; + public int CollapseHeight => labelHeight + collapseHeight; public int ExpandedHeight => expandedHeight + this.Padding.Bottom; @@ -296,17 +319,23 @@ namespace AppLauncher.Windows.Forms if (isAnimating) return; isAnimating = true; + isChecked = false; - while (this.Height > this.CollapseHeight) + if (this.EnableAnimation) { - ThreadControl.SetHeight(this, (this.Height - collapseIncrement)); + while (this.Height > this.CollapseHeight) + { + ThreadControl.SetHeight(this, (this.Height - collapseIncrement)); - Thread.Sleep(10); + Thread.Sleep(10); + } } ThreadControl.SetHeight(this, this.CollapseHeight); isAnimating = false; + + this.Invalidate(); }); } @@ -317,18 +346,24 @@ namespace AppLauncher.Windows.Forms if (isAnimating) return; isAnimating = true; + isChecked = true; - while (this.Height < this.ExpandedHeight) + if (this.EnableAnimation) { - ThreadControl.SetHeight(this, (this.Height + expandIncrement)); - this.Invalidate(); + while (this.Height < this.ExpandedHeight) + { + ThreadControl.SetHeight(this, (this.Height + expandIncrement)); + this.Invalidate(); - Thread.Sleep(10); + Thread.Sleep(10); + } } ThreadControl.SetHeight(this, this.ExpandedHeight); isAnimating = false; + + this.Invalidate(); }); } @@ -393,7 +428,7 @@ namespace AppLauncher.Windows.Forms public void UpdateModel(TileGroupModel model) { groupInfo = model; - //isChecked = groupInfo.IsExpanded; + isChecked = groupInfo.IsExpanded; this.Invalidate(); } @@ -417,7 +452,6 @@ namespace AppLauncher.Windows.Forms if (confirmedPosition == null) { continue; - } // place control @@ -547,7 +581,6 @@ namespace AppLauncher.Windows.Forms expandedHeight = (this.TileSize * height) + labelHeight; - //this.Size = new Size((this.TileSize * width), expandedHeight); this.Size = new Size((this.TileSize * width), (isChecked ? this.ExpandedHeight : this.CollapseHeight)); }