    updateAxisY();
  }
  
  // auto zoom on yaxis
  void ChartWidget::updateAxisY() {
    const auto axis_x = dynamic_cast<QValueAxis *>(chart_view->chart()->axisX());
    const auto axis_y = dynamic_cast<QValueAxis *>(chart_view->chart()->axisY());
    // vals is a sorted list
    auto begin = std::lower_bound(vals.begin(), vals.end(), axis_x->min(), [](auto &p, double x) { return p.x() < x; });
    if (begin == vals.end())
      return;
  
 
</s> remove void ChartWidget::rangeChanged(qreal min, qreal max) {
  auto axis_x = dynamic_cast<QValueAxis *>(chart_view->chart()->axisX());
 </s> add void ChartView::rangeChanged(qreal min, qreal max) {
  auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX()); </s> remove // LineMarker
 </s> add   if (show) {
    const auto plot_area = chart()->plotArea();
    float x = std::clamp((float)ev->pos().x(), (float)plot_area.left(), (float)plot_area.right());
    track_line->setLine(x, plot_area.top(), x, plot_area.bottom()); </s> remove   chart_view->chart()->axisX()->setRange(begin, end);
 </s> add   chart()->axisX()->setRange(begin, end); </s> remove void ChartWidget::updateState() {
  auto chart = chart_view->chart();
  auto axis_x = dynamic_cast<QValueAxis *>(chart->axisX());

  int x = chart->plotArea().left() + chart->plotArea().width() * (can->currentSec() - axis_x->min()) / (axis_x->max() - axis_x->min());
  line_marker->setX(x);
 </s> add void ChartView::updateState() {
  auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX());
  int x = chart()->plotArea().left() + chart()->plotArea().width() * (can->currentSec() - axis_x->min()) / (axis_x->max() - axis_x->min());
  line_marker->setLine(x, 0, x, height());
void ChartView::updateAxisY() {
  const auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX());
  const auto axis_y = dynamic_cast<QValueAxis *>(chart()->axisY());
    updateAxisY();
  }
  
  // auto zoom on yaxis
void ChartView::updateAxisY() {
  const auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX());
  const auto axis_y = dynamic_cast<QValueAxis *>(chart()->axisY());
void ChartView::updateAxisY() {
  const auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX());
  const auto axis_y = dynamic_cast<QValueAxis *>(chart()->axisY());
void ChartView::updateAxisY() {
  const auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX());
  const auto axis_y = dynamic_cast<QValueAxis *>(chart()->axisY());
    // vals is a sorted list
    auto begin = std::lower_bound(vals.begin(), vals.end(), axis_x->min(), [](auto &p, double x) { return p.x() < x; });
    if (begin == vals.end())
      return;
  
keep keep keep keep replace replace replace keep keep keep keep keep
 Cabana: display the (x,y) values while MouseMove on the chart (#26064) 
tools/cabana/chartswidget.cc