diff --git a/Terminal.Gui/Views/GraphView/GraphView.cs b/Terminal.Gui/Views/GraphView/GraphView.cs index c0c01ef13..24961516d 100644 --- a/Terminal.Gui/Views/GraphView/GraphView.cs +++ b/Terminal.Gui/Views/GraphView/GraphView.cs @@ -2,7 +2,7 @@ namespace Terminal.Gui; /// View for rendering graphs (bar, scatter, etc...). -public class GraphView : View +public class GraphView : View, IDesignable { /// Creates a new graph with a 1 to 1 graph space with absolute layout. public GraphView () @@ -346,4 +346,48 @@ public class GraphView : View /// otherwise. /// public void SetDriverColorToGraphColor () { Driver?.SetAttribute (GraphColor ?? GetNormalColor ()); } + + bool IDesignable.EnableForDesign () + { + Title = "Sine Wave"; + + var points = new ScatterSeries (); + var line = new PathAnnotation (); + + // Draw line first so it does not draw over top of points or axis labels + line.BeforeSeries = true; + + // Generate line graph with 2,000 points + for (float x = -500; x < 500; x += 0.5f) + { + points.Points.Add (new (x, (float)Math.Sin (x))); + line.Points.Add (new (x, (float)Math.Sin (x))); + } + + Series.Add (points); + Annotations.Add (line); + + // How much graph space each cell of the console depicts + CellSize = new (0.1f, 0.1f); + + // leave space for axis labels + MarginBottom = 2; + MarginLeft = 3; + + // One axis tick/label per + AxisX.Increment = 0.5f; + AxisX.ShowLabelsEvery = 2; + AxisX.Text = "X →"; + AxisX.LabelGetter = v => v.Value.ToString ("N2"); + + AxisY.Increment = 0.2f; + AxisY.ShowLabelsEvery = 2; + AxisY.Text = "↑Y"; + AxisY.LabelGetter = v => v.Value.ToString ("N2"); + + ScrollOffset = new (-2.5f, -1); + + return true; + } + }