From 8763d63a937b58df6fecef827fa71450a4550e04 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Mon, 9 May 2022 17:15:16 -0600 Subject: [PATCH] Better windows positioning --- Source/AppScaffolding/LibationScaffolding.cs | 4 +-- Source/LibationFileManager/Configuration.cs | 6 ++--- .../grid/DescriptionDisplay.Designer.cs | 2 +- .../grid/DescriptionDisplay.cs | 13 +++++++--- Source/LibationWinForms/grid/ProductsGrid.cs | 25 ++++++++++--------- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index 21daf970..6bde3030 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -126,8 +126,8 @@ namespace AppScaffolding if (!config.Exists(nameof(config.AutoScan))) config.AutoScan = true; - if (!config.Exists(nameof(config.HiddenGridColumns))) - config.HiddenGridColumns = new Dictionary(); + if (!config.Exists(nameof(config.GridColumnsVisibilities))) + config.GridColumnsVisibilities = new Dictionary(); if (!config.Exists(nameof(config.GridColumnsDisplayIndices))) config.GridColumnsDisplayIndices = new Dictionary(); diff --git a/Source/LibationFileManager/Configuration.cs b/Source/LibationFileManager/Configuration.cs index 874f49ab..698a5a05 100644 --- a/Source/LibationFileManager/Configuration.cs +++ b/Source/LibationFileManager/Configuration.cs @@ -181,10 +181,10 @@ namespace LibationFileManager } [Description("A Dictionary of GridView data property names and bool indicating its column's visibility in ProductsGrid")] - public Dictionary HiddenGridColumns + public Dictionary GridColumnsVisibilities { - get => persistentDictionary.GetNonString>(nameof(HiddenGridColumns)); - set => persistentDictionary.SetNonString(nameof(HiddenGridColumns), value); + get => persistentDictionary.GetNonString>(nameof(GridColumnsVisibilities)); + set => persistentDictionary.SetNonString(nameof(GridColumnsVisibilities), value); } [Description("A Dictionary of GridView data property names and int indicating its column's display index in ProductsGrid")] diff --git a/Source/LibationWinForms/grid/DescriptionDisplay.Designer.cs b/Source/LibationWinForms/grid/DescriptionDisplay.Designer.cs index 061695bf..89b553bf 100644 --- a/Source/LibationWinForms/grid/DescriptionDisplay.Designer.cs +++ b/Source/LibationWinForms/grid/DescriptionDisplay.Designer.cs @@ -58,6 +58,6 @@ #endregion - public System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox1; } } \ No newline at end of file diff --git a/Source/LibationWinForms/grid/DescriptionDisplay.cs b/Source/LibationWinForms/grid/DescriptionDisplay.cs index 0bca3fc7..9f616421 100644 --- a/Source/LibationWinForms/grid/DescriptionDisplay.cs +++ b/Source/LibationWinForms/grid/DescriptionDisplay.cs @@ -13,18 +13,17 @@ namespace LibationWinForms { public partial class DescriptionDisplay : Form { + public Point SpawnLocation { get; init; } + public string DescriptionText { get => textBox1.Text; set => textBox1.Text = value; } public DescriptionDisplay() { InitializeComponent(); textBox1.LostFocus += (_, _) => Close(); - this.Shown += DescriptionDisplay_Shown; + Shown += DescriptionDisplay_Shown; var textHeight = TextRenderer.MeasureText("\n", textBox1.Font).Height; } - [DllImport("user32.dll")] - static extern bool HideCaret(IntPtr hWnd); - private void DescriptionDisplay_Shown(object sender, EventArgs e) { textBox1.DeselectAll(); @@ -37,6 +36,12 @@ namespace LibationWinForms int lineCount = textBox1.GetLineFromCharIndex(int.MaxValue) + 2; Height = Height - textBox1.Height + lineCount * TextRenderer.MeasureText(textBox1.Text, textBox1.Font).Height; + int screenHeight = Screen.PrimaryScreen.WorkingArea.Height; + + Location = new Point(SpawnLocation.X + 10, Math.Min(SpawnLocation.Y, screenHeight - Height)); } + + [DllImport("user32.dll")] + static extern bool HideCaret(IntPtr hWnd); } } diff --git a/Source/LibationWinForms/grid/ProductsGrid.cs b/Source/LibationWinForms/grid/ProductsGrid.cs index dfac3312..91452ecc 100644 --- a/Source/LibationWinForms/grid/ProductsGrid.cs +++ b/Source/LibationWinForms/grid/ProductsGrid.cs @@ -69,16 +69,17 @@ namespace LibationWinForms else if (propertyName == tagAndDetailsGVColumn.DataPropertyName) Details_Click(getGridEntry(e.RowIndex)); else if (propertyName == descriptionGVColumn.DataPropertyName) - DescriptionClick(getGridEntry(e.RowIndex)); + DescriptionClick(getGridEntry(e.RowIndex), _dataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex,false)); } - private void DescriptionClick(GridEntry liveGridEntry) + private void DescriptionClick(GridEntry liveGridEntry, Rectangle cell) { - var displayWindow = new DescriptionDisplay(); - displayWindow.Text = $"{liveGridEntry.Title} description"; - displayWindow.Load += (_, _) => displayWindow.RestoreSizeAndLocation(Configuration.Instance); - displayWindow.FormClosing += (_, _) => displayWindow.SaveSizeAndLocation(Configuration.Instance); - displayWindow.textBox1.Text = liveGridEntry.LongDescription; + var displayWindow = new DescriptionDisplay + { + Text = $"{liveGridEntry.Title} description", + SpawnLocation = cell.Location + cell.Size, + DescriptionText = liveGridEntry.LongDescription + }; displayWindow.Show(this); } @@ -245,7 +246,7 @@ namespace LibationWinForms //Restore Grid Display Settings var config = Configuration.Instance; - var hiddenGridColumns = config.HiddenGridColumns; + var gridColumnsVisibilities = config.GridColumnsVisibilities; var displayIndices = config.GridColumnsDisplayIndices; var gridColumnsWidths = config.GridColumnsWidths; @@ -254,7 +255,7 @@ namespace LibationWinForms foreach (DataGridViewColumn column in _dataGridView.Columns) { var itemName = column.DataPropertyName; - var visible = !hiddenGridColumns.GetValueOrDefault(itemName, false); + var visible = gridColumnsVisibilities.GetValueOrDefault(itemName, true); var menuItem = new ToolStripMenuItem() { @@ -316,9 +317,9 @@ namespace LibationWinForms var config = Configuration.Instance; - var dictionary = config.HiddenGridColumns; - dictionary[propertyName] = visible; - config.HiddenGridColumns = dictionary; + var dictionary = config.GridColumnsVisibilities; + dictionary[propertyName] = column.Visible; + config.GridColumnsVisibilities = dictionary; } }