//  Copyright (C) 2020-2024  Jiří Maier

//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.

//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.

//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <https://www.gnu.org/licenses/>.

#include "mydial.h"

myDial::myDial(QWidget* parent) : QDial(parent) {
  lastPosition = this->value();
  connect(this, &QDial::valueChanged, this, &myDial::positionChanged);
}

void myDial::positionChanged(int position) {
  if (var) {
    if (position > lastPosition)
      position--;
    var = false;
  }
  if (position == this->maximum())
    position = this->maximum() - 1;
  lastPosition = position;
  this->setValue(position);
  emit realValueChanged(logaritmicSettings[position]);
}

void myDial::updatePosition(double value) {
  int newPos = roundToStandardValue(value);
  lastPosition = newPos;
  blockSignals(true);
  this->setValue(newPos);
  blockSignals(false);
  var = true;
  for (int i = 0; i < LOG_SET_SIZE; i++)
    if (value == logaritmicSettings[i])
      var = false;
}

int myDial::roundToStandardValue(double value) {
  for (int i = 0; i < LOG_SET_SIZE; i++)
    if (value <= logaritmicSettings[i])
      return i;
  return 30;
}
