diff --git a/Elwig/Windows/ChartWindow.xaml b/Elwig/Windows/ChartWindow.xaml index 163373e..5e1332f 100644 --- a/Elwig/Windows/ChartWindow.xaml +++ b/Elwig/Windows/ChartWindow.xaml @@ -132,17 +132,20 @@ - + diff --git a/Elwig/Windows/ChartWindow.xaml.cs b/Elwig/Windows/ChartWindow.xaml.cs index 30f1f60..2f96b8f 100644 --- a/Elwig/Windows/ChartWindow.xaml.cs +++ b/Elwig/Windows/ChartWindow.xaml.cs @@ -11,7 +11,6 @@ using Elwig.Models.Entities; using ScottPlot.Plottables; using ScottPlot; using ScottPlot.Control; -using Microsoft.EntityFrameworkCore; namespace Elwig.Windows { public partial class ChartWindow : ContextWindow { @@ -25,6 +24,7 @@ namespace Elwig.Windows { public string CurrencySymbol; private PaymentVar PaymentVar; private bool HasChanged = false; + private bool Updating = false; private Scatter DataPlot; private Scatter? GebundenPlot; @@ -153,6 +153,8 @@ namespace Elwig.Windows { if (SelectedGraphEntry != null) { CopyButton.IsEnabled = true; DeleteButton.IsEnabled = true; + EnableTextBox(OechsleInput); + GebInput.IsEnabled = SelectedGraphEntry?.GebundenGraph != null; GebundenTypeFixed.IsEnabled = true; GebundenTypeGraph.IsEnabled = true; GebundenTypeNone.IsEnabled = true; @@ -164,13 +166,13 @@ namespace Elwig.Windows { CopyButton.IsEnabled = false; DeleteButton.IsEnabled = false; DisableTextBox(OechsleInput); + GebInput.IsEnabled = false; DisableOptionButtons(); } if (!PaymentVar.TestVariant) { AddButton.IsEnabled = false; CopyButton.IsEnabled = false; DeleteButton.IsEnabled = false; - DisableTextBox(OechsleInput); DisableTextBox(PriceInput); GebundenTypeFixed.IsEnabled = false; GebundenTypeGraph.IsEnabled = false; @@ -395,19 +397,16 @@ namespace Elwig.Windows { OechslePricePlot.Plot.Legend.ManualItems.Clear(); } - private void OechsleInput_TextChanged(object sender, TextChangedEventArgs evt) { - if (ActiveGraph == null || SelectedGraphEntry == null) { + private void UpdateSelectedPoint() { + if (ActiveGraph == null || SelectedGraphEntry == null) return; - } - - bool success = int.TryParse(OechsleInput.Text, out int oechsle); SecondaryMarkedPoint = -1; ChangeMarker(SecondaryMarkedPointPlot, false); - if (success) { - if (oechsle >= ActiveGraph.MinX && oechsle <= ActiveGraph.MaxX) { - PrimaryMarkedPoint = oechsle - ActiveGraph.MinX; + if (int.TryParse(OechsleInput.Text, out int oe)) { + if (oe >= ActiveGraph.MinX && oe <= ActiveGraph.MaxX) { + PrimaryMarkedPoint = oe - ActiveGraph.MinX; ChangeMarker(PrimaryMarkedPointPlot, true, ActiveGraph.GetOechsleAt(PrimaryMarkedPoint), ActiveGraph.GetPriceAt(PrimaryMarkedPoint)); PriceInput.Text = Math.Round(ActiveGraph.GetPriceAt(PrimaryMarkedPoint), Season.Precision).ToString(); @@ -428,6 +427,18 @@ namespace Elwig.Windows { DisableTextBox(PriceInput); } + private void OechsleInput_TextChanged(object sender, TextChangedEventArgs evt) { + UpdateSelectedPoint(); + } + + private void GebInput_Changed(object sender, RoutedEventArgs evt) { + if (Updating) + return; + var sel = GebInput.IsChecked == true ? SelectedGraphEntry?.GebundenGraph : SelectedGraphEntry?.DataGraph; + if (sel != ActiveGraph) ChangeActiveGraph(sel); + UpdateSelectedPoint(); + } + private void PriceInput_TextChanged(object sender, TextChangedEventArgs evt) { if (PrimaryMarkedPoint != -1 && ActiveGraph != null && PriceInput.IsKeyboardFocusWithin == true) { var res = Validator.CheckDecimal(PriceInput, true, 2, Season.Precision); @@ -486,31 +497,34 @@ namespace Elwig.Windows { } private void OechslePricePlot_MouseDown(object sender, MouseEventArgs e) { - if (GraphList.SelectedItem == null) { + if (GraphList.SelectedItem == null) return; - } if (HoverActive) { if (PaymentVar.TestVariant && Keyboard.IsKeyDown(System.Windows.Input.Key.LeftCtrl)) { - if (PrimaryMarkedPoint == -1 || ActiveGraph == null || ActiveGraph != Highlighted.Graph) { + if (SecondaryMarkedPoint == -1 || ActiveGraph == null || ActiveGraph != Highlighted.Graph) return; - } SecondaryMarkedPoint = Highlighted.Index; - ChangeMarker(SecondaryMarkedPointPlot, true, ActiveGraph.GetOechsleAt(SecondaryMarkedPoint), ActiveGraph.GetPriceAt(SecondaryMarkedPoint)); - InterpolateButton.IsEnabled = true; - return; } + Updating = true; PrimaryMarkedPoint = Highlighted.Index; - if (ActiveGraph != Highlighted.Graph) ChangeActiveGraph(Highlighted.Graph); + if (ActiveGraph != Highlighted.Graph) + ChangeActiveGraph(Highlighted.Graph); + Updating = false; + if (PrimaryMarkedPoint == -1 || ActiveGraph == null) + return; - ChangeMarker(PrimaryMarkedPointPlot, true, ActiveGraph!.GetOechsleAt(PrimaryMarkedPoint), ActiveGraph.GetPriceAt(PrimaryMarkedPoint)); + ChangeMarker(PrimaryMarkedPointPlot, true, ActiveGraph.GetOechsleAt(PrimaryMarkedPoint), ActiveGraph.GetPriceAt(PrimaryMarkedPoint)); + Updating = true; OechsleInput.Text = Highlighted.Graph!.GetOechsleAt(Highlighted.Index).ToString(); + GebInput.IsChecked = Highlighted.Graph == SelectedGraphEntry?.GebundenGraph; PriceInput.Text = Math.Round(Highlighted.Graph.GetPriceAt(Highlighted.Index), Season.Precision).ToString(); + Updating = false; EnableActionButtons(); } else { @@ -523,6 +537,7 @@ namespace Elwig.Windows { ChangeMarker(SecondaryMarkedPointPlot, false); OechsleInput.Text = ""; + GebInput.IsChecked = false; PriceInput.Text = ""; DisableTextBox(PriceInput); @@ -667,7 +682,7 @@ namespace Elwig.Windows { } private void EnableTextBox(TextBox u) { - if (PaymentVar.TestVariant) { + if (PaymentVar.TestVariant || u == OechsleInput) { u.IsEnabled = true; u.IsReadOnly = false; } @@ -683,14 +698,20 @@ namespace Elwig.Windows { EnableTextBox(OechsleInput); if (SelectedGraphEntry?.GebundenGraph != null) ChangeLineWidth(DataPlot, 4); ChangeLineWidth(GebundenPlot, 1); + GebInput.IsEnabled = SelectedGraphEntry?.GebundenGraph != null; + GebInput.IsChecked = false; } else if (g != null && g == SelectedGraphEntry?.GebundenGraph) { EnableTextBox(OechsleInput); ChangeLineWidth(GebundenPlot, 4); ChangeLineWidth(DataPlot, 1); + GebInput.IsEnabled = SelectedGraphEntry?.GebundenGraph != null; + GebInput.IsChecked = true; } else { DisableTextBox(OechsleInput); DisableTextBox(PriceInput); OechsleInput.Text = ""; + GebInput.IsEnabled = false; + GebInput.IsChecked = false; PriceInput.Text = ""; ChangeLineWidth(DataPlot, 1); ChangeLineWidth(GebundenPlot, 1);