diff --git a/UVtools.GUI/Controls/TrackBarHighlight.cs b/UVtools.GUI/Controls/TrackBarEx.cs similarity index 78% rename from UVtools.GUI/Controls/TrackBarHighlight.cs rename to UVtools.GUI/Controls/TrackBarEx.cs index cf466bc..49dd269 100644 --- a/UVtools.GUI/Controls/TrackBarHighlight.cs +++ b/UVtools.GUI/Controls/TrackBarEx.cs @@ -14,33 +14,22 @@ using UVtools.Core.Extensions; namespace UVtools.GUI.Controls { - public class TrackBarHighlight : TrackBar + public class TrackBarEx : TrackBar { - private uint[] _highlightValues = null; - [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam); private const int TBM_GETNUMTICS = 0x0410; private const int TBM_GETTICPOS = 0x40F; - private const byte TrackerMargin = 12; + //private const byte TrackerMargin = 12; //public event PaintEventHandler PaintOver; - public Pen HighlightPen { get; set; } = new Pen(Color.FromArgb(50, Color.Red), 2); - public byte LineLength { get; set; } = 10; - - public uint[] HighlightValues + /*public TrackBarEx() { - get => _highlightValues; - set { _highlightValues = value; Invalidate(); } - } - - public TrackBarHighlight() - { - //SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw, true); - } + SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw, true); + }*/ /*protected override void OnInvalidated(InvalidateEventArgs e) { @@ -59,19 +48,19 @@ namespace UVtools.GUI.Controls using (Graphics lgGraphics = Graphics.FromHwndInternal(m.HWnd)) OnPaintOver(new PaintEventArgs(lgGraphics, ClientRectangle)); } - }*/ + } protected virtual void OnPaintOver(PaintEventArgs e) { //PaintOver?.Invoke(this, e); //Debug.WriteLine("Paint"); DrawHighlights(e.Graphics); - } + }*/ public int GetTickPos(int index) => SendMessage(Handle, TBM_GETTICPOS, index, 0); public int NumTicks => SendMessage(Handle, TBM_GETNUMTICS, 0, 0); - public void DrawHighlights(Graphics gfx = null) + /*public void DrawHighlights(Graphics gfx = null) { if (HighlightValues is null) return; if (gfx is null) gfx = CreateGraphics(); @@ -88,6 +77,6 @@ namespace UVtools.GUI.Controls int y = (Height - tickPos).Clamp(1, Height); gfx.DrawLine(HighlightPen, startX, y, endX, y); } - } + }*/ } } diff --git a/UVtools.GUI/FrmMain.Designer.cs b/UVtools.GUI/FrmMain.Designer.cs index 825a354..b98ae52 100644 --- a/UVtools.GUI/FrmMain.Designer.cs +++ b/UVtools.GUI/FrmMain.Designer.cs @@ -264,7 +264,7 @@ namespace UVtools.GUI this.toolTipInformation = new System.Windows.Forms.ToolTip(this.components); this.layerScrollTimer = new System.Windows.Forms.Timer(this.components); this.mouseHoldTimer = new System.Windows.Forms.Timer(this.components); - this.tbLayer = new UVtools.GUI.Controls.TrackBarHighlight(); + this.tbLayer = new UVtools.GUI.Controls.TrackBarEx(); this.menu.SuspendLayout(); this.mainTable.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.scCenter)).BeginInit(); @@ -2909,8 +2909,6 @@ namespace UVtools.GUI // tbLayer // this.tbLayer.Dock = System.Windows.Forms.DockStyle.Right; - this.tbLayer.HighlightValues = null; - this.tbLayer.LineLength = ((byte)(20)); this.tbLayer.Location = new System.Drawing.Point(93, 0); this.tbLayer.Margin = new System.Windows.Forms.Padding(0); this.tbLayer.Name = "tbLayer"; @@ -3103,7 +3101,7 @@ namespace UVtools.GUI private System.Windows.Forms.ToolStripButton btnLayerImageHighlightIssues; private System.Windows.Forms.ToolStripButton btnLayerImageShowCrosshairs; private System.Windows.Forms.ToolStripSeparator toolStripSeparator25; - private TrackBarHighlight tbLayer; + private TrackBarEx tbLayer; private System.Windows.Forms.TableLayoutPanel tlRight; private System.Windows.Forms.Label lbMaxLayer; private System.Windows.Forms.Label lbInitialLayer; diff --git a/UVtools.GUI/FrmMain.cs b/UVtools.GUI/FrmMain.cs index d4cd8a5..2744f46 100644 --- a/UVtools.GUI/FrmMain.cs +++ b/UVtools.GUI/FrmMain.cs @@ -2064,51 +2064,9 @@ namespace UVtools.GUI private void flvIssues_ItemsChanged(object sender, ItemsChangedEventArgs e) { - if (e.NewObjectCount == 0 || Issues is null) - { - tbLayer.HighlightValues = null; - UpdateLayerTrackerHighlightIssues(); - return; - } - - List layerIndexes = new List(); - foreach (var issue in Issues) - { - if (layerIndexes.Contains(issue.LayerIndex)) continue; - layerIndexes.Add(issue.LayerIndex); - } - tbLayer.HighlightValues = layerIndexes.ToArray(); UpdateLayerTrackerHighlightIssues(); } - void UpdateLayerTrackerHighlightIssues() - { - var highlightValues = tbLayer.HighlightValues; - - - if (highlightValues is null) - { - pbTrackerIssues.Image = null; - return; - } - - using (Mat mat = new Mat(pbTrackerIssues.Height, pbTrackerIssues.Width, DepthType.Cv8U, 3)) - { - mat.SetTo(new MCvScalar(255, 255, 255)); - var color = new MCvScalar(0, 0, 255); - - foreach (var value in highlightValues) - { - var tickPos = tbLayer.GetTickPos((int) value); - if (tickPos == -1) continue; - //int y = (int)(Height - TrackerStartMargin - (Height / Maximum * value)); - int y = (pbTrackerIssues.Height - tickPos).Clamp(0, pbTrackerIssues.Height); - CvInvoke.Line(mat, new Point(0, y), new Point(mat.Width, y), color); - } - - pbTrackerIssues.Image = mat.ToBitmap(); - } - } #endregion #region Methods @@ -4450,5 +4408,50 @@ namespace UVtools.GUI UpdateIssuesInfo(); ShowLayer(); } + + public Dictionary GetIssuesCountPerLayer() + { + if (Issues is null) return null; + Dictionary layerIndexIssueCount = new Dictionary(); + foreach (var issue in Issues) + { + if (!layerIndexIssueCount.ContainsKey(issue.LayerIndex)) + { + layerIndexIssueCount.Add(issue.LayerIndex, 1); + } + else + { + layerIndexIssueCount[issue.LayerIndex]++; + } + } + + return layerIndexIssueCount; + } + + void UpdateLayerTrackerHighlightIssues() + { + var issuesCountPerLayer = GetIssuesCountPerLayer(); + if (issuesCountPerLayer is null) + { + pbTrackerIssues.Image = null; + return; + } + + using (Mat mat = new Mat(pbTrackerIssues.Height, pbTrackerIssues.Width, DepthType.Cv8U, 3)) + { + mat.SetTo(new MCvScalar(255, 255, 255)); + var color = new MCvScalar(0, 0, 255); + + foreach (var value in issuesCountPerLayer) + { + var tickPos = tbLayer.GetTickPos((int)value.Key); + if (tickPos == -1) continue; + int y = (pbTrackerIssues.Height - tickPos).Clamp(0, pbTrackerIssues.Height); + CvInvoke.Line(mat, new Point(0, y), new Point(mat.Width, y), color); + } + + pbTrackerIssues.Image = mat.ToBitmap(); + } + } } } diff --git a/UVtools.GUI/FrmMain.resx b/UVtools.GUI/FrmMain.resx index 845ef67..4ed4c6d 100644 --- a/UVtools.GUI/FrmMain.resx +++ b/UVtools.GUI/FrmMain.resx @@ -158,7 +158,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk - FAAAAk1TRnQBSQFMAgEBBgEAASgBCgEoAQoBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + FAAAAk1TRnQBSQFMAgEBBgEAATgBCgE4AQoBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA AwABIAMAAQEBAAEgBgABIC4AAxgBIgMwAUsDMAFMAzIBUDMAAQEDJAE2AysBQqwAAyIBMQNWAbkDXQHi AwAB/wMAAf8BKgEtASgB/gNTAawDTQGVAwABARgAAwkBDAMzAVIDUAGdA1cB6AMAAf4DKwH8Ay8BSqQA AyEBMANZAewBKwEuASkB+gNRAfcDUgH0A1MB8QNIAfYDQQH5AwAB/wNPAZsDAAEBCAADFQEdAz8BbgNV diff --git a/UVtools.GUI/UVtools.GUI.csproj b/UVtools.GUI/UVtools.GUI.csproj index d20953c..1476fae 100644 --- a/UVtools.GUI/UVtools.GUI.csproj +++ b/UVtools.GUI/UVtools.GUI.csproj @@ -163,7 +163,7 @@ Component - + Component