File indexing completed on 2024-04-28 04:49:03

0001 /*
0002    SPDX-FileCopyrightText: 2021 Han Young <hanyoung@protonmail.com>
0003 
0004    SPDX-License-Identifier: LGPL-3.0-or-later
0005  */
0006 #ifndef LYRICSMODEL_H
0007 #define LYRICSMODEL_H
0008 #include "elisaLib_export.h"
0009 #include <QAbstractListModel>
0010 #include <memory>
0011 #include <vector>
0012 class ELISALIB_EXPORT LyricsModel : public QAbstractListModel
0013 {
0014     Q_OBJECT
0015     Q_PROPERTY(int highlightedIndex
0016                READ highlightedIndex
0017                NOTIFY highlightedIndexChanged)
0018     Q_PROPERTY(bool isLRC READ isLRC NOTIFY isLRCChanged)
0019 public:
0020     enum LyricsRole {Lyric = Qt::UserRole, TimeStamp};
0021     LyricsModel(QObject *parent = nullptr);
0022     ~LyricsModel() override;
0023     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0024     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0025     QHash<int, QByteArray> roleNames() const override;
0026     int highlightedIndex() const;
0027     bool isLRC() const;
0028 
0029 public Q_SLOTS:
0030     Q_INVOKABLE void setLyric(const QString &lyric);
0031     Q_INVOKABLE void setPosition(qint64 position);
0032 
0033 Q_SIGNALS:
0034     void lyricChanged();
0035     void highlightedIndexChanged();
0036     void positionChanged();
0037     void isLRCChanged();
0038 private:
0039     class LyricsModelPrivate;
0040     std::unique_ptr<LyricsModelPrivate> d;
0041 };
0042 
0043 #endif // LYRICSMODEL_H