From 6131833b256a258588b97b896bd9490d781559b7 Mon Sep 17 00:00:00 2001 From: Terry MacDonald Date: Tue, 11 May 2021 15:59:53 +1200 Subject: [PATCH] WIP] First attempt at tablelayout --- DisplayMagician/DisplayMagician.csproj | 1 + DisplayMagician/TableLayoutHelper.cs | 48 +++++++++++++++++++ .../UIForms/ShortcutForm.Designer.cs | 35 ++++++++------ DisplayMagician/UIForms/ShortcutForm.cs | 47 ++++++++++++------ 4 files changed, 102 insertions(+), 29 deletions(-) create mode 100644 DisplayMagician/TableLayoutHelper.cs diff --git a/DisplayMagician/DisplayMagician.csproj b/DisplayMagician/DisplayMagician.csproj index 86404fa..aee3386 100644 --- a/DisplayMagician/DisplayMagician.csproj +++ b/DisplayMagician/DisplayMagician.csproj @@ -128,6 +128,7 @@ + Form diff --git a/DisplayMagician/TableLayoutHelper.cs b/DisplayMagician/TableLayoutHelper.cs new file mode 100644 index 0000000..755897d --- /dev/null +++ b/DisplayMagician/TableLayoutHelper.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; +using System.Text; +using System.Threading.Tasks; + +namespace DisplayMagician +{ + + public static class TableLayoutHelper + { + public static void RemoveArbitraryRow(TableLayoutPanel panel, int rowIndex) + { + if (rowIndex >= panel.RowCount) + { + return; + } + + // delete all controls of row that we want to delete + for (int i = 0; i < panel.ColumnCount; i++) + { + var control = panel.GetControlFromPosition(i, rowIndex); + panel.Controls.Remove(control); + } + + // move up row controls that comes after row we want to remove + for (int i = rowIndex + 1; i < panel.RowCount; i++) + { + for (int j = 0; j < panel.ColumnCount; j++) + { + var control = panel.GetControlFromPosition(j, i); + if (control != null) + { + panel.SetRow(control, i - 1); + } + } + } + + var removeStyle = panel.RowCount - 1; + + if (panel.RowStyles.Count > removeStyle) + panel.RowStyles.RemoveAt(removeStyle); + + panel.RowCount--; + } + } +} diff --git a/DisplayMagician/UIForms/ShortcutForm.Designer.cs b/DisplayMagician/UIForms/ShortcutForm.Designer.cs index 719a23d..2f08b0f 100644 --- a/DisplayMagician/UIForms/ShortcutForm.Designer.cs +++ b/DisplayMagician/UIForms/ShortcutForm.Designer.cs @@ -68,7 +68,6 @@ namespace DisplayMagician.UIForms this.rb_change_audio = new System.Windows.Forms.RadioButton(); this.rb_no_change_audio = new System.Windows.Forms.RadioButton(); this.tabp_before = new System.Windows.Forms.TabPage(); - this.pnl_start_programs = new System.Windows.Forms.Panel(); this.tabp_game = new System.Windows.Forms.TabPage(); this.lbl_no_game_libraries = new System.Windows.Forms.Label(); this.p_standalone = new System.Windows.Forms.Panel(); @@ -119,6 +118,7 @@ namespace DisplayMagician.UIForms this.cb_autosuggest = new System.Windows.Forms.CheckBox(); this.btn_hotkey = new System.Windows.Forms.Button(); this.lbl_hotkey_assigned = new System.Windows.Forms.Label(); + this.tlp_start_programs = new System.Windows.Forms.TableLayoutPanel(); this.tabc_shortcut.SuspendLayout(); this.tabp_display.SuspendLayout(); this.tabp_audio.SuspendLayout(); @@ -616,7 +616,7 @@ namespace DisplayMagician.UIForms // tabp_before // this.tabp_before.BackColor = System.Drawing.Color.Black; - this.tabp_before.Controls.Add(this.pnl_start_programs); + this.tabp_before.Controls.Add(this.tlp_start_programs); this.tabp_before.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tabp_before.ForeColor = System.Drawing.Color.White; this.tabp_before.Location = new System.Drawing.Point(4, 32); @@ -626,17 +626,6 @@ namespace DisplayMagician.UIForms this.tabp_before.TabIndex = 1; this.tabp_before.Text = "3. Choose what happens before"; // - // pnl_start_programs - // - this.pnl_start_programs.AutoScroll = true; - this.pnl_start_programs.AutoScrollMargin = new System.Drawing.Size(5, 5); - this.pnl_start_programs.AutoScrollMinSize = new System.Drawing.Size(5, 5); - this.pnl_start_programs.BackColor = System.Drawing.Color.White; - this.pnl_start_programs.Location = new System.Drawing.Point(38, 126); - this.pnl_start_programs.Name = "pnl_start_programs"; - this.pnl_start_programs.Size = new System.Drawing.Size(1007, 446); - this.pnl_start_programs.TabIndex = 2; - // // tabp_game // this.tabp_game.BackColor = System.Drawing.Color.Black; @@ -1259,6 +1248,24 @@ namespace DisplayMagician.UIForms this.lbl_hotkey_assigned.Visible = false; this.lbl_hotkey_assigned.Click += new System.EventHandler(this.lbl_hotkey_assigned_Click); // + // tlp_start_programs + // + this.tlp_start_programs.AutoScroll = true; + this.tlp_start_programs.AutoScrollMinSize = new System.Drawing.Size(5, 0); + this.tlp_start_programs.BackColor = System.Drawing.Color.White; + this.tlp_start_programs.ColumnCount = 1; + this.tlp_start_programs.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlp_start_programs.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlp_start_programs.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tlp_start_programs.Location = new System.Drawing.Point(3, 112); + this.tlp_start_programs.MinimumSize = new System.Drawing.Size(900, 150); + this.tlp_start_programs.Name = "tlp_start_programs"; + this.tlp_start_programs.RowCount = 1; + this.tlp_start_programs.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlp_start_programs.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlp_start_programs.Size = new System.Drawing.Size(1076, 503); + this.tlp_start_programs.TabIndex = 0; + // // ShortcutForm // this.AcceptButton = this.btn_save; @@ -1408,6 +1415,6 @@ namespace DisplayMagician.UIForms private System.Windows.Forms.CheckBox cb_wait_alternative_game; private System.Windows.Forms.Button btn_hotkey; private System.Windows.Forms.Label lbl_hotkey_assigned; - private System.Windows.Forms.Panel pnl_start_programs; + private System.Windows.Forms.TableLayoutPanel tlp_start_programs; } } \ No newline at end of file diff --git a/DisplayMagician/UIForms/ShortcutForm.cs b/DisplayMagician/UIForms/ShortcutForm.cs index 26eaaeb..149144e 100644 --- a/DisplayMagician/UIForms/ShortcutForm.cs +++ b/DisplayMagician/UIForms/ShortcutForm.cs @@ -456,7 +456,7 @@ namespace DisplayMagician.UIForms // Scan through the list of List newStartPrograms = new List() { }; - foreach (StartProgramControl myStartProgramControl in pnl_start_programs.Controls) + foreach (StartProgramControl myStartProgramControl in tlp_start_programs.Controls) { newStartPrograms.Add(myStartProgramControl.StartProgram); } @@ -1165,27 +1165,38 @@ namespace DisplayMagician.UIForms if (_shortcutToEdit.StartPrograms is List && _shortcutToEdit.StartPrograms.Count > 0) { - int x = 5; - int y = 5; + //int x = 5; + //int y = 5; Padding startProgramMargin = new Padding(10) { }; + //Clear out the existing controls, we are generating a new table layout + tlp_start_programs.Controls.Clear(); + + //Clear out the existing row and column styles + tlp_start_programs.ColumnStyles.Clear(); + tlp_start_programs.RowStyles.Clear(); + + int myIndex = 0; // Order the inital list in order of priority foreach (StartProgram myStartProgram in _shortcutToEdit.StartPrograms.OrderBy(sp => sp.Priority)) { - StartProgramControl startProgramControl = new StartProgramControl(myStartProgram); - startProgramControl.Dock = DockStyle.None; - startProgramControl.Margin = startProgramMargin; - startProgramControl.Width = pnl_start_programs.Width - 30; + //startProgramControl.Dock = DockStyle.None; + //startProgramControl.Margin = startProgramMargin; + startProgramControl.Width = tlp_start_programs.Width - 40; + //startProgramControl.Height = 170; + //startProgramControl.Height = pnl_start_programs.Height; - startProgramControl.Location = new Point(x, y); + //startProgramControl.Location = new Point(x, y); // startProgramControl.BringToFront(); //startProgramControl.Margin = DefaultMargin; //startProgramControl.Width = pnl_start_programs.Width; - pnl_start_programs.Controls.Add(startProgramControl); + tlp_start_programs.RowStyles.Add(new RowStyle(SizeType.Absolute, 170F)); + tlp_start_programs.RowCount = myIndex + 1; + tlp_start_programs.Controls.Add(startProgramControl); // Move the next line down - y += startProgramControl.Height + 5; + //y += startProgramControl.Height + 5; } } @@ -2018,20 +2029,26 @@ namespace DisplayMagician.UIForms public void RemoveStartProgram(StartProgramControl startProgramControlToRemove) { + int rowIndex = 1; foreach (StartProgram startProgramToTest in _shortcutToEdit.StartPrograms) - { + { if (startProgramControlToRemove.StartProgram.Equals(startProgramToTest)) { // If we find the start program then we need to remove it from the list - _shortcutToEdit.StartPrograms.Remove(startProgramToTest); - // And we reove the program control passed in as well - pnl_start_programs.Controls.Remove(startProgramControlToRemove); + //_shortcutToEdit.StartPrograms.Remove(startProgramToTest); + // And we remove the program control passed in as well + tlp_start_programs.SuspendLayout(); + // And we remove the row control passed in as well + TableLayoutHelper.RemoveArbitraryRow(tlp_start_programs, rowIndex); + tlp_start_programs.ResumeLayout(); + //tlp_start_programs.PerformLayout(); break; } + rowIndex++; } // And we redraw the panel again - pnl_start_programs.Refresh(); + tlp_start_programs.Refresh(); } private void btn_hotkey_Click(object sender, EventArgs e)