/***************************************************************************

  BionxControl
  © 2025 -2026 christoph holzheuer
  christoph.holzheuer@gmail.com

  Using:

  mhs_can_drv.c
  © 2011 - 2023 by MHS-Elektronik GmbH & Co. KG, Germany
  Klaus Demlehner, klaus@mhs-elektronik.de
  @see www.mhs-elektronik.de

  Based on Bionx data type descriptions from:

  BigXionFlasher USB V 0.2.4 rev. 97
  © 2011-2013 by Thomas Koenig <info@bigxionflasher.org>
  @see www.bigxionflasher.org

  Bionx Bike Info
  © 2018 Thorsten Schmidt (tschmidt@ts-soft.de)
  @see www.ts-soft.de

  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.
  @see https://github.com/bikemike/bionx-bikeinfo

 ***************************************************************************/


#ifndef BCANIMATEDDELEGATE_H
#define BCANIMATEDDELEGATE_H

#include <QStyledItemDelegate>

#include <bcvalue.h>

class QPropertyAnimation;
class QVariantAnimation;
class QTableView;


class BCAnimatedDelegate : public QStyledItemDelegate
{
  Q_OBJECT

public:

  explicit BCAnimatedDelegate(const BCValueList& valueList, QTableView* view );

 // QString displayText(const QVariant& dataValue, const QLocale& locale) const override;

  // Zuständig für den Edit-Modus (Doppelklick)
  QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex& index) const override;
  void setEditorData(QWidget *editor, const QModelIndex& index) const override;
  void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const override;
  void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex& index) const override;

  QSize sizeHint(const QStyleOptionViewItem &option,const QModelIndex& index) const override;
  void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex& index) const override;

  /*
  qreal highlightOpacity() const
  {
    return _opacity;
  }

  void setHighlightOpacity(qreal opacity)
  {
    _opacity = opacity;
    //qDebug() << " --- opa: " << opacity;
    // __fix! unsinn!
    emit viewUpdateNeeded();
  }
*/

  void clearAllHighlights();

public slots:

  void onHighlightRow(int row);


signals:

  //void viewUpdateNeeded();

private:

  void updateRow(int row);
  void paintHighlightRow(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;

  const BCValueList&  _valueList;
  QTableView*         _view{};

  //int                 _highlightedRow{-1};
  //qreal               _opacity{1.0};

  QPropertyAnimation* _animation{};

private:

  QHash<int, qreal>     m_rowOpacities;
  QHash<int, QVariantAnimation*> m_rowAnimations;

};


#endif // BCANIMATEDDELEGATE_H
