diff --git a/QuickMon5/Installer/Product.wxs b/QuickMon5/Installer/Product.wxs index 2ffa4479..b6f0320f 100644 --- a/QuickMon5/Installer/Product.wxs +++ b/QuickMon5/Installer/Product.wxs @@ -1,6 +1,6 @@ - + diff --git a/QuickMon5/Installer/Productx64.wxs b/QuickMon5/Installer/Productx64.wxs index e3147493..c055901b 100644 --- a/QuickMon5/Installer/Productx64.wxs +++ b/QuickMon5/Installer/Productx64.wxs @@ -1,6 +1,6 @@ - + diff --git a/QuickMon5/Installer/QuickMon5.0.0.msi.zip b/QuickMon5/Installer/QuickMon5.0.0.msi.zip deleted file mode 100644 index a9c34470..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.0.msi.zip and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.0x64.msi.zip b/QuickMon5/Installer/QuickMon5.0.0x64.msi.zip deleted file mode 100644 index f29332a3..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.0x64.msi.zip and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.1.msi b/QuickMon5/Installer/QuickMon5.0.1.msi deleted file mode 100644 index ad94be56..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.1.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.10.msi b/QuickMon5/Installer/QuickMon5.0.10.msi deleted file mode 100644 index fe370978..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.10.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.10x64.msi b/QuickMon5/Installer/QuickMon5.0.10x64.msi deleted file mode 100644 index 8cfc5384..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.10x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.1x64.msi b/QuickMon5/Installer/QuickMon5.0.1x64.msi deleted file mode 100644 index 678eea2f..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.1x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.2.msi b/QuickMon5/Installer/QuickMon5.0.2.msi deleted file mode 100644 index 54174f22..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.2.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.2x64.msi b/QuickMon5/Installer/QuickMon5.0.2x64.msi deleted file mode 100644 index 37f0748a..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.2x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.3.msi b/QuickMon5/Installer/QuickMon5.0.3.msi deleted file mode 100644 index d9a9818b..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.3.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.3x64.msi b/QuickMon5/Installer/QuickMon5.0.3x64.msi deleted file mode 100644 index 187ccb65..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.3x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.4.msi b/QuickMon5/Installer/QuickMon5.0.4.msi deleted file mode 100644 index 2ea4161e..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.4.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.4x64.msi b/QuickMon5/Installer/QuickMon5.0.4x64.msi deleted file mode 100644 index defefec4..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.4x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.5.msi b/QuickMon5/Installer/QuickMon5.0.5.msi deleted file mode 100644 index 04f103ea..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.5.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.5x64.msi b/QuickMon5/Installer/QuickMon5.0.5x64.msi deleted file mode 100644 index ac214a06..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.5x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.6.msi b/QuickMon5/Installer/QuickMon5.0.6.msi deleted file mode 100644 index ee21f8b2..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.6.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.6x64.msi b/QuickMon5/Installer/QuickMon5.0.6x64.msi deleted file mode 100644 index 3bc0e48e..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.6x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.7.msi b/QuickMon5/Installer/QuickMon5.0.7.msi deleted file mode 100644 index ef1c2e98..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.7.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.7x64.msi b/QuickMon5/Installer/QuickMon5.0.7x64.msi deleted file mode 100644 index 39eb7281..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.7x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.8.msi b/QuickMon5/Installer/QuickMon5.0.8.msi deleted file mode 100644 index b030ea40..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.8.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.8x64.msi b/QuickMon5/Installer/QuickMon5.0.8x64.msi deleted file mode 100644 index ef462624..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.8x64.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.9.msi b/QuickMon5/Installer/QuickMon5.0.9.msi deleted file mode 100644 index 48f82c4a..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.9.msi and /dev/null differ diff --git a/QuickMon5/Installer/QuickMon5.0.9x64.msi b/QuickMon5/Installer/QuickMon5.0.9x64.msi deleted file mode 100644 index 42d72019..00000000 Binary files a/QuickMon5/Installer/QuickMon5.0.9x64.msi and /dev/null differ diff --git a/QuickMon5/QuickMon5/app.manifest b/QuickMon5/QuickMon5/app.manifest index 87af36e6..368d6b90 100644 --- a/QuickMon5/QuickMon5/app.manifest +++ b/QuickMon5/QuickMon5/app.manifest @@ -1,6 +1,6 @@  - + diff --git a/QuickMon5/QuickMon5Core/Resources/ChangeLog.txt b/QuickMon5/QuickMon5Core/Resources/ChangeLog.txt index bb63310e..ca1aafb5 100644 --- a/QuickMon5/QuickMon5Core/Resources/ChangeLog.txt +++ b/QuickMon5/QuickMon5Core/Resources/ChangeLog.txt @@ -167,3 +167,9 @@ Change the Performance counter collector to also use aggregated Instance values Tweaked some templates Add Graph color/settings customisation Add setting to allow control over main window startup size/location + +Version 5.2.5 +************** +First version compiled with VS2019 +Graph control selected series can be changed by up/down keys +Graph control selected series can be selected by clicking on the legend diff --git a/QuickMon5/QuickMon5Core/VersionInfo.cs b/QuickMon5/QuickMon5Core/VersionInfo.cs index 3c5272ad..8788c6cb 100644 --- a/QuickMon5/QuickMon5Core/VersionInfo.cs +++ b/QuickMon5/QuickMon5Core/VersionInfo.cs @@ -15,5 +15,5 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("5.2.4.0059")] -[assembly: AssemblyFileVersion("5.2.4.0059")] \ No newline at end of file +[assembly: AssemblyVersion("5.2.5.0060")] +[assembly: AssemblyFileVersion("5.2.5.0060")] \ No newline at end of file diff --git a/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/GraphSeries.cs b/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/GraphSeries.cs index 0912b68c..918eba39 100644 --- a/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/GraphSeries.cs +++ b/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/GraphSeries.cs @@ -32,6 +32,12 @@ public GraphSeries(string name, Color lineColor) : this(name) public bool Enabled { get; set; } = true; public bool Selected { get; set; } = false; + #region Legend details + public string CurrentSeriesLabelText { get; set; } + public Point CurrentSeriesLabelLocation { get; set; } + public SizeF CurrentSeriesLabelSize { get; set; } + #endregion + public GraphSeries Clone() { GraphSeries newSeries = new GraphSeries(); diff --git a/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/TimeGraphControl.cs b/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/TimeGraphControl.cs index ecc0e424..d6f2b771 100644 --- a/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/TimeGraphControl.cs +++ b/QuickMon5/QuickMonCoreUI/Controls/TimeGraphControl/TimeGraphControl.cs @@ -245,6 +245,14 @@ protected override bool ProcessCmdKey(ref Message msg, Keys keyData) SetNextFromClosestPointSelected(); RefreshGraph(); break; + case Keys.Up: + SetPreviousSelectedSeries(); + RefreshGraph(); + break; + case Keys.Down: + SetNextSelectedSeries(); + RefreshGraph(); + break; default: return base.ProcessCmdKey(ref msg, keyData); } @@ -261,16 +269,38 @@ private void DataClickTest(MouseEventArgs e) { lastClickTime = DateTime.Now; - LastClickedLocation = ConvertPointToTimeValue(e.X, e.Y); - if (LastClickedLocation != null) - { - SetClosestPointSelected(); - } - else + if (ShowLegendText && e.Y > (Height - legendHeight)) //legend area { ClosestClickedTimeValue = null; foreach (GraphSeries s in Series) s.Selected = false; + + foreach (var enabledSeries in (from serie in Series + where serie.Enabled + select serie)) + { + if (enabledSeries.CurrentSeriesLabelLocation.X <= e.X && enabledSeries.CurrentSeriesLabelLocation.X + enabledSeries.CurrentSeriesLabelSize.Width > e.X) + { + if (enabledSeries.CurrentSeriesLabelLocation.Y <= e.Y && enabledSeries.CurrentSeriesLabelLocation.Y + enabledSeries.CurrentSeriesLabelSize.Height > e.Y) + { + SetSelectedSeriesByName(enabledSeries.Name); + } + } + } + } + else + { + LastClickedLocation = ConvertPointToTimeValue(e.X, e.Y); + if (LastClickedLocation != null) + { + SetClosestPointSelected(); + } + else + { + ClosestClickedTimeValue = null; + foreach (GraphSeries s in Series) + s.Selected = false; + } } SetHightlightSeries(); @@ -349,6 +379,30 @@ public GraphSeries GetSeriesByName(string name) } return null; } + public int GetSeriesIndexByName(string name) + { + for (int i = 0; i < Series.Count; i++) + { + if (Series[i].Name == name) + { + return i; + } + } + return 0; + } + public void SetSelectedSeriesByName(string name) + { + foreach (var s in Series) + { + if (s.Name == name) + { + s.Selected = true; + ClosestClickedTimeSeriesName = name; + } + else + s.Selected = false; + } + } public void SetClosestPointSelected() { if (LastClickedLocation != null) @@ -365,11 +419,6 @@ public void SetClosestPointSelected() else s.Selected = false; } - //if (HighlightClickedSeries) - - //ClosestClickedSeries = (from s in Series - // where s.Name == closetValue.Item1 - // select s).FirstOrDefault(); } else { @@ -397,6 +446,37 @@ public void SetPreviousFromClosestPointSelected() } } } + + private TimeValue GetClosestPointForSeries(GraphSeries selectedSeries, TimeValue selectedPoint) + { + TimeValue tv = null; + if (selectedPoint != null) + { + TimeValue tv1 = (from sv in selectedSeries.Values + orderby sv.Time descending + where sv.Time <= selectedPoint.Time + select sv).FirstOrDefault(); + TimeValue tv2 = (from sv in selectedSeries.Values + orderby sv.Time + where sv.Time >= selectedPoint.Time + select sv).FirstOrDefault(); + + if (tv1 != null && tv2 != null) + { + if (selectedPoint.Time.Subtract(tv1.Time) < tv2.Time.Subtract(selectedPoint.Time)) + { + tv = tv1; + } + else + tv = tv2; + } + else if (tv1 != null) + tv = tv1; + else + tv = tv2; + } + return tv; + } public void SetNextFromClosestPointSelected() { if (ClosestClickedTimeSeriesName != null && ClosestClickedTimeSeriesName != "" && ClosestClickedTimeValue != null) @@ -414,6 +494,61 @@ orderby sv.Time } } } + public void SetNextSelectedSeries() + { + if (Series.Count > 0) + { + int selectedSeriesIndex = 0; + if (ClosestClickedTimeSeriesName != null && ClosestClickedTimeSeriesName != "") + { + selectedSeriesIndex = GetSeriesIndexByName(ClosestClickedTimeSeriesName); + if (selectedSeriesIndex == Series.Count - 1) + selectedSeriesIndex = 0; + else + selectedSeriesIndex++; + } + GraphSeries selectedSeries = Series[selectedSeriesIndex]; + SetSelectedSeriesByName(selectedSeries.Name); + + if (ClosestClickedTimeValue != null) + { + TimeValue tv = GetClosestPointForSeries(selectedSeries, ClosestClickedTimeValue); + if (tv != null) + { + ClosestClickedTimeValue = tv; + LastClickedLocation = tv; + ClosestPointSelectedChanged?.Invoke(ClosestClickedTimeSeriesName, tv); + } + } + } + } + public void SetPreviousSelectedSeries() + { + if (Series.Count > 0) + { + int selectedSeriesIndex = Series.Count - 1; + if (ClosestClickedTimeSeriesName != null && ClosestClickedTimeSeriesName != "") + { + selectedSeriesIndex = GetSeriesIndexByName(ClosestClickedTimeSeriesName); + if (selectedSeriesIndex <= 0) + selectedSeriesIndex = Series.Count - 1; + else + selectedSeriesIndex--; + } + GraphSeries selectedSeries = Series[selectedSeriesIndex]; + SetSelectedSeriesByName(selectedSeries.Name); + if (ClosestClickedTimeValue != null) + { + TimeValue tv = GetClosestPointForSeries(selectedSeries, ClosestClickedTimeValue); + if (tv != null) + { + ClosestClickedTimeValue = tv; + LastClickedLocation = tv; + ClosestPointSelectedChanged?.Invoke(ClosestClickedTimeSeriesName, tv); + } + } + } + } private void SetHightlightSeries() { if (HighlightClickedSeries) @@ -428,6 +563,23 @@ private void SetHightlightSeries() private TimeValue ConvertPointToTimeValue(int x, int y, bool forceInBounds = false) { TimeValue timeValue = null; + + //if (ShowLegendText && y > (Height - legendHeight)) //legend area + //{ + // foreach (var enabledSeries in (from serie in Series + // where serie.Enabled + // select serie)) + // { + // if (enabledSeries.CurrentSeriesLabelLocation.X <= x && enabledSeries.CurrentSeriesLabelLocation.X + enabledSeries.CurrentSeriesLabelSize.Width > x) + // { + // if (enabledSeries.CurrentSeriesLabelLocation.Y <= y && enabledSeries.CurrentSeriesLabelLocation.Y + enabledSeries.CurrentSeriesLabelSize.Height > y) + // { + // System.Diagnostics.Trace.WriteLine(enabledSeries.Name); + // } + // } + // } + //} + if (forceInBounds) { if (x < LeftAxisMargin) @@ -473,6 +625,7 @@ private TimeValue ConvertPointToTimeValue(int x, int y, bool forceInBounds = fal } } } + return timeValue; } private Point ConvertTimeValueToPoint(TimeValue tv) @@ -686,7 +839,6 @@ where serie.Enabled } if (enabledSeries.Selected) { - //currentSeriesLabel = $">{currentSeriesLabel}<"; currentFont = new Font(GraphTextFont, FontStyle.Bold); } SizeF currentLabelSize = g.MeasureString(currentSeriesLabel, currentFont); @@ -695,15 +847,22 @@ where serie.Enabled if (legendXPos + currentLabelSize.Width + bufferBetweenLabels < this.Width) { g.DrawString(currentSeriesLabel, currentFont, drawBrush, legendXPos, legendYPos); - legendXPos += (int)currentLabelSize.Width + bufferBetweenLabels; + enabledSeries.CurrentSeriesLabelText = currentSeriesLabel; + enabledSeries.CurrentSeriesLabelLocation = new Point(legendXPos, legendYPos); + enabledSeries.CurrentSeriesLabelSize = currentLabelSize; + + legendXPos += (int)currentLabelSize.Width + bufferBetweenLabels; } else { legendYPos += stdLineHeight; legendXPos = bufferBetweenLabels; g.DrawString(currentSeriesLabel, currentFont, drawBrush, legendXPos, legendYPos); - legendXPos += (int)currentLabelSize.Width + bufferBetweenLabels; + enabledSeries.CurrentSeriesLabelText = currentSeriesLabel; + enabledSeries.CurrentSeriesLabelLocation = new Point(legendXPos, legendYPos); + enabledSeries.CurrentSeriesLabelSize = currentLabelSize; + legendXPos += (int)currentLabelSize.Width + bufferBetweenLabels; } } bottomMarginHeight += stdLineHeight; diff --git a/QuickMon5/QuickMonRemoteHostCMD/app.manifest b/QuickMon5/QuickMonRemoteHostCMD/app.manifest index 96caf17f..5d65f65f 100644 --- a/QuickMon5/QuickMonRemoteHostCMD/app.manifest +++ b/QuickMon5/QuickMonRemoteHostCMD/app.manifest @@ -1,6 +1,6 @@  - + diff --git a/QuickMon5/QuickMonService/app.manifest b/QuickMon5/QuickMonService/app.manifest index e3943762..692c4685 100644 --- a/QuickMon5/QuickMonService/app.manifest +++ b/QuickMon5/QuickMonService/app.manifest @@ -1,6 +1,6 @@  - +