From 6ff0a322799b58f0c5af51a21e2c83738bfabeb0 Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Tue, 14 Jun 2016 20:39:46 +0000
Subject: [PATCH] Fixed, Thing/Linedef/Sector info panels: in some cases map
 element flags were cut off by the control border.

---
 Source/Core/Builder.csproj                    |  3 +++
 .../Controls/LinedefInfoPanel.Designer.cs     |  6 ++---
 Source/Core/Controls/LinedefInfoPanel.cs      | 12 +++++++++-
 .../Core/Controls/SectorInfoPanel.Designer.cs |  8 +++----
 Source/Core/Controls/SectorInfoPanel.cs       | 12 +++++++++-
 .../Core/Controls/ThingInfoPanel.Designer.cs  |  6 ++---
 Source/Core/Controls/ThingInfoPanel.cs        | 15 ++++++++++--
 Source/Core/Controls/TransparentListView.cs   | 23 +++++++++++++++++++
 Source/Core/Windows/MainForm.Designer.cs      | 12 +++++++---
 9 files changed, 80 insertions(+), 17 deletions(-)
 create mode 100644 Source/Core/Controls/TransparentListView.cs

diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj
index 06b3c028d..9087bcad3 100644
--- a/Source/Core/Builder.csproj
+++ b/Source/Core/Builder.csproj
@@ -804,6 +804,9 @@
     <Compile Include="Controls\ToolStripNumericUpDown.cs">
       <SubType>Component</SubType>
     </Compile>
+    <Compile Include="Controls\TransparentListView.cs">
+      <SubType>Component</SubType>
+    </Compile>
     <Compile Include="Controls\TransparentPanel.cs">
       <SubType>Component</SubType>
     </Compile>
diff --git a/Source/Core/Controls/LinedefInfoPanel.Designer.cs b/Source/Core/Controls/LinedefInfoPanel.Designer.cs
index af51b4256..28072f819 100644
--- a/Source/Core/Controls/LinedefInfoPanel.Designer.cs
+++ b/Source/Core/Controls/LinedefInfoPanel.Designer.cs
@@ -109,7 +109,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.backlowname = new System.Windows.Forms.Label();
 			this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
 			this.flagsPanel = new System.Windows.Forms.GroupBox();
-			this.flags = new System.Windows.Forms.ListView();
+			this.flags = new CodeImp.DoomBuilder.Controls.TransparentListView();
 			this.infopanel.SuspendLayout();
 			this.frontpanel.SuspendLayout();
 			this.flowLayoutPanelFront.SuspendLayout();
@@ -1017,7 +1017,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.flags.Name = "flags";
 			this.flags.Scrollable = false;
 			this.flags.ShowGroups = false;
-			this.flags.Size = new System.Drawing.Size(443, 73);
+			this.flags.Size = new System.Drawing.Size(443, 88);
 			this.flags.TabIndex = 0;
 			this.flags.UseCompatibleStateImageBehavior = false;
 			this.flags.View = System.Windows.Forms.View.List;
@@ -1145,7 +1145,7 @@ namespace CodeImp.DoomBuilder.Controls
 		private System.Windows.Forms.Label labelTextureBackBottom;
 		private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
 		private System.Windows.Forms.GroupBox flagsPanel;
-		private System.Windows.Forms.ListView flags;
+		private CodeImp.DoomBuilder.Controls.TransparentListView flags;
 		private System.Windows.Forms.Label taglabel;
 		private System.Windows.Forms.Label anglelabel;
 		private System.Windows.Forms.Label lengthlabel;
diff --git a/Source/Core/Controls/LinedefInfoPanel.cs b/Source/Core/Controls/LinedefInfoPanel.cs
index 2f6b6bc12..4155cfbc3 100644
--- a/Source/Core/Controls/LinedefInfoPanel.cs
+++ b/Source/Core/Controls/LinedefInfoPanel.cs
@@ -511,7 +511,17 @@ namespace CodeImp.DoomBuilder.Controls
 			flagsPanel.Visible = (flags.Items.Count > 0);
 			if(flags.Items.Count > 0) 
 			{
-				flags.Width = flags.GetItemRect(0).Width * (int)Math.Ceiling(flags.Items.Count / 4.0f);
+				Rectangle rect = flags.GetItemRect(0);
+				int itemspercolumn = 1;
+
+				// Check how many items per column we have...
+				for(int i = 1; i < flags.Items.Count; i++)
+				{
+					if(flags.GetItemRect(i).X != rect.X) break;
+					itemspercolumn++;
+				}
+
+				flags.Width = rect.Width * (int)Math.Ceiling(flags.Items.Count / (float)itemspercolumn);
 				flagsPanel.Width = flags.Width + flags.Left * 2;
 			}
 
diff --git a/Source/Core/Controls/SectorInfoPanel.Designer.cs b/Source/Core/Controls/SectorInfoPanel.Designer.cs
index a368fb1af..27b2ad528 100644
--- a/Source/Core/Controls/SectorInfoPanel.Designer.cs
+++ b/Source/Core/Controls/SectorInfoPanel.Designer.cs
@@ -71,7 +71,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.labelFloorTextureSize = new System.Windows.Forms.Label();
 			this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
 			this.flagsPanel = new System.Windows.Forms.GroupBox();
-			this.flags = new System.Windows.Forms.ListView();
+			this.flags = new CodeImp.DoomBuilder.Controls.TransparentListView();
 			label13 = new System.Windows.Forms.Label();
 			label5 = new System.Windows.Forms.Label();
 			this.sectorinfo.SuspendLayout();
@@ -128,7 +128,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.taglabel.Text = "Tag:";
 			this.taglabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
 			// 
-			// labelEffect
+			// effectlabel
 			// 
 			this.effectlabel.Location = new System.Drawing.Point(8, 19);
 			this.effectlabel.Name = "effectlabel";
@@ -531,7 +531,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.flags.Name = "flags";
 			this.flags.Scrollable = false;
 			this.flags.ShowGroups = false;
-			this.flags.Size = new System.Drawing.Size(443, 73);
+			this.flags.Size = new System.Drawing.Size(443, 88);
 			this.flags.TabIndex = 0;
 			this.flags.UseCompatibleStateImageBehavior = false;
 			this.flags.View = System.Windows.Forms.View.List;
@@ -600,7 +600,7 @@ namespace CodeImp.DoomBuilder.Controls
 		private System.Windows.Forms.Label labelFade;
 		private System.Windows.Forms.Label labelLight;
 		private System.Windows.Forms.GroupBox flagsPanel;
-		private System.Windows.Forms.ListView flags;
+		private CodeImp.DoomBuilder.Controls.TransparentListView flags;
 		private System.Windows.Forms.Label taglabel;
 		private System.Windows.Forms.Label effectlabel;
 		private System.Windows.Forms.Label labelfloor;
diff --git a/Source/Core/Controls/SectorInfoPanel.cs b/Source/Core/Controls/SectorInfoPanel.cs
index bc0780376..2baa6c1f2 100644
--- a/Source/Core/Controls/SectorInfoPanel.cs
+++ b/Source/Core/Controls/SectorInfoPanel.cs
@@ -311,7 +311,17 @@ namespace CodeImp.DoomBuilder.Controls
 				flagsPanel.Visible = (flags.Items.Count > 0);
 				if(flags.Items.Count > 0) 
 				{
-					flags.Width = flags.GetItemRect(0).Width * (int)Math.Ceiling(flags.Items.Count / 4.0f);
+					Rectangle rect = flags.GetItemRect(0);
+					int itemspercolumn = 1;
+
+					// Check how many items per column we have...
+					for(int i = 1; i < flags.Items.Count; i++)
+					{
+						if(flags.GetItemRect(i).X != rect.X) break;
+						itemspercolumn++;
+					}
+
+					flags.Width = rect.Width * (int)Math.Ceiling(flags.Items.Count / (float)itemspercolumn);
 					flagsPanel.Width = flags.Width + flags.Left * 2;
 				}
 
diff --git a/Source/Core/Controls/ThingInfoPanel.Designer.cs b/Source/Core/Controls/ThingInfoPanel.Designer.cs
index 651e11651..b8d80dfb7 100644
--- a/Source/Core/Controls/ThingInfoPanel.Designer.cs
+++ b/Source/Core/Controls/ThingInfoPanel.Designer.cs
@@ -57,7 +57,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.panel1 = new System.Windows.Forms.Panel();
 			this.spritetex = new CodeImp.DoomBuilder.Controls.ConfigurablePictureBox();
 			this.flagsPanel = new System.Windows.Forms.GroupBox();
-			this.flags = new System.Windows.Forms.ListView();
+			this.flags = new CodeImp.DoomBuilder.Controls.TransparentListView();
 			label5 = new System.Windows.Forms.Label();
 			label4 = new System.Windows.Forms.Label();
 			label3 = new System.Windows.Forms.Label();
@@ -385,7 +385,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.flags.Name = "flags";
 			this.flags.Scrollable = false;
 			this.flags.ShowGroups = false;
-			this.flags.Size = new System.Drawing.Size(556, 73);
+			this.flags.Size = new System.Drawing.Size(556, 88);
 			this.flags.TabIndex = 0;
 			this.flags.UseCompatibleStateImageBehavior = false;
 			this.flags.View = System.Windows.Forms.View.List;
@@ -433,7 +433,7 @@ namespace CodeImp.DoomBuilder.Controls
 		private System.Windows.Forms.Label arg1;
 		private System.Windows.Forms.GroupBox infopanel;
 		private System.Windows.Forms.GroupBox flagsPanel;
-		private System.Windows.Forms.ListView flags;
+		private CodeImp.DoomBuilder.Controls.TransparentListView flags;
 		private System.Windows.Forms.Label labelaction;
 		private CodeImp.DoomBuilder.Controls.AngleControlEx anglecontrol;
 		private ConfigurablePictureBox spritetex;
diff --git a/Source/Core/Controls/ThingInfoPanel.cs b/Source/Core/Controls/ThingInfoPanel.cs
index 32cf5cdee..3a5f993ad 100644
--- a/Source/Core/Controls/ThingInfoPanel.cs
+++ b/Source/Core/Controls/ThingInfoPanel.cs
@@ -17,6 +17,7 @@
 #region ================== Namespaces
 
 using System;
+using System.Drawing;
 using System.Globalization;
 using System.Windows.Forms;
 using CodeImp.DoomBuilder.Data;
@@ -202,9 +203,19 @@ namespace CodeImp.DoomBuilder.Controls
 
 			//mxd. Flags panel visibility and size
 			flagsPanel.Visible = (flags.Items.Count > 0);
-			if(flags.Items.Count > 0) 
+			if(flags.Items.Count > 0)
 			{
-				flags.Width = flags.GetItemRect(0).Width * (int)Math.Ceiling(flags.Items.Count / 4.0f);
+				Rectangle rect = flags.GetItemRect(0);
+				int itemspercolumn = 1;
+				
+				// Check how many items per column we have...
+				for(int i = 1; i < flags.Items.Count; i++)
+				{
+					if(flags.GetItemRect(i).X != rect.X) break;
+					itemspercolumn++;
+				}
+
+				flags.Width = rect.Width * (int)Math.Ceiling(flags.Items.Count / (float)itemspercolumn);
 				flagsPanel.Width = flags.Width + flags.Left * 2;
 			}
 
diff --git a/Source/Core/Controls/TransparentListView.cs b/Source/Core/Controls/TransparentListView.cs
new file mode 100644
index 000000000..f21c1631b
--- /dev/null
+++ b/Source/Core/Controls/TransparentListView.cs
@@ -0,0 +1,23 @@
+using System.Windows.Forms;
+
+namespace CodeImp.DoomBuilder.Controls
+{
+	public class TransparentListView : ListView
+	{
+		protected override CreateParams CreateParams
+		{
+			get
+			{
+				CreateParams cp = base.CreateParams;
+				cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
+
+				return cp;
+			}
+		}
+
+		protected override void OnPaintBackground(PaintEventArgs pevent)
+		{
+			// Don't paint background
+		}
+	}
+}
diff --git a/Source/Core/Windows/MainForm.Designer.cs b/Source/Core/Windows/MainForm.Designer.cs
index 0a174e384..c0c5841b7 100644
--- a/Source/Core/Windows/MainForm.Designer.cs
+++ b/Source/Core/Windows/MainForm.Designer.cs
@@ -2402,31 +2402,37 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// linedefinfo
 			// 
+			this.linedefinfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
 			this.linedefinfo.Location = new System.Drawing.Point(3, 3);
 			this.linedefinfo.MaximumSize = new System.Drawing.Size(10000, 100);
 			this.linedefinfo.MinimumSize = new System.Drawing.Size(100, 100);
 			this.linedefinfo.Name = "linedefinfo";
-			this.linedefinfo.Size = new System.Drawing.Size(1560, 100);
+			this.linedefinfo.Size = new System.Drawing.Size(1006, 100);
 			this.linedefinfo.TabIndex = 0;
 			this.linedefinfo.Visible = false;
 			// 
 			// thinginfo
 			// 
+			this.thinginfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
 			this.thinginfo.Location = new System.Drawing.Point(3, 3);
 			this.thinginfo.MaximumSize = new System.Drawing.Size(10000, 100);
 			this.thinginfo.MinimumSize = new System.Drawing.Size(100, 100);
 			this.thinginfo.Name = "thinginfo";
-			this.thinginfo.Size = new System.Drawing.Size(1190, 100);
+			this.thinginfo.Size = new System.Drawing.Size(1006, 100);
 			this.thinginfo.TabIndex = 3;
 			this.thinginfo.Visible = false;
 			// 
 			// sectorinfo
 			// 
+			this.sectorinfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
 			this.sectorinfo.Location = new System.Drawing.Point(3, 3);
 			this.sectorinfo.MaximumSize = new System.Drawing.Size(10000, 100);
 			this.sectorinfo.MinimumSize = new System.Drawing.Size(100, 100);
 			this.sectorinfo.Name = "sectorinfo";
-			this.sectorinfo.Size = new System.Drawing.Size(1090, 100);
+			this.sectorinfo.Size = new System.Drawing.Size(1006, 100);
 			this.sectorinfo.TabIndex = 2;
 			this.sectorinfo.Visible = false;
 			// 
-- 
GitLab