File indexing completed on 2024-05-05 04:51:41

0001 /*
0002     SPDX-FileCopyrightText: 2008 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-FileCopyrightText: 2009 Gustavo Pichorim Boiko <gustavo.boiko@kdemail.net>
0004     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef _K3B_AUDIO_PROJECT_MODEL_H_
0010 #define _K3B_AUDIO_PROJECT_MODEL_H_
0011 
0012 #include <QAbstractItemModel>
0013 
0014 namespace K3b {
0015 
0016     class AudioDataSource;
0017     class AudioDoc;
0018     class AudioTrack;
0019 
0020     class AudioProjectModel : public QAbstractItemModel
0021     {
0022         Q_OBJECT
0023 
0024     public:
0025         AudioProjectModel( AudioDoc* doc, QObject* parent );
0026         ~AudioProjectModel() override;
0027 
0028         enum Columns {
0029             TrackNumberColumn = 0,
0030             TitleColumn,
0031             ArtistColumn,
0032             TypeColumn,
0033             LengthColumn,
0034             FilenameColumn,
0035             NumColumns
0036         };
0037 
0038         AudioDoc* project() const;
0039 
0040         AudioTrack* trackForIndex( const QModelIndex& index ) const;
0041         AudioDataSource* sourceForIndex( const QModelIndex& index ) const;
0042 
0043         QModelIndex indexForTrack( const AudioTrack* track ) const;
0044         QModelIndex indexForSource( AudioDataSource* source ) const;
0045 
0046         int columnCount( const QModelIndex& parent = QModelIndex() ) const override;
0047         QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override;
0048         QVariant headerData ( int section, Qt::Orientation orientation, int role ) const override;
0049         Qt::ItemFlags flags( const QModelIndex& index ) const override;
0050         QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override;
0051         QModelIndex parent( const QModelIndex& index ) const override;
0052         int rowCount( const QModelIndex& parent = QModelIndex() ) const override;
0053         bool setData( const QModelIndex& index, const QVariant& value, int role = Qt::EditRole ) override;
0054         QMimeData* mimeData( const QModelIndexList& indexes ) const override;
0055         Qt::DropActions supportedDragActions() const override;
0056         Qt::DropActions supportedDropActions() const override;
0057         QStringList mimeTypes() const override;
0058         bool dropMimeData( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ) override;
0059 
0060     private:
0061         class Private;
0062         Private* const d;
0063 
0064         Q_PRIVATE_SLOT( d, void _k_trackAboutToBeAdded( int position ) )
0065         Q_PRIVATE_SLOT( d, void _k_trackAdded() )
0066         Q_PRIVATE_SLOT( d, void _k_trackAboutToBeRemoved( int position ) )
0067         Q_PRIVATE_SLOT( d, void _k_trackRemoved() )
0068         Q_PRIVATE_SLOT( d, void _k_sourceAboutToBeAdded( K3b::AudioTrack* parent, int position ) )
0069         Q_PRIVATE_SLOT( d, void _k_sourceAdded() )
0070         Q_PRIVATE_SLOT( d, void _k_sourceAboutToBeRemoved( K3b::AudioTrack* parent, int position ) )
0071         Q_PRIVATE_SLOT( d, void _k_sourceRemoved() )
0072     };
0073 }
0074 
0075 #endif