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

0001 /*
0002     SPDX-FileCopyrightText: 2010 Michal Malek <michalm@jabster.pl>
0003     SPDX-FileCopyrightText: 1998-2010 Sebastian Trueg <trueg@k3b.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "k3bvcdtrackkeysmodel.h"
0009 #include "k3bvcdtrack.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 #include <QIcon>
0014 
0015 Q_DECLARE_METATYPE( K3b::VcdTrack* )
0016 
0017 namespace K3b {
0018 
0019 
0020 class VcdTrackKeysModel::Private
0021 {
0022 public:
0023     Private( int kc ) : keyCount( kc ) {}
0024 
0025     Key2Track keys;
0026     int keyCount;
0027 };
0028 
0029 
0030 VcdTrackKeysModel::VcdTrackKeysModel( int keyCount, QObject* parent )
0031     : QAbstractTableModel( parent ),
0032       d( new Private( keyCount ) )
0033 {
0034 }
0035 
0036 
0037 VcdTrackKeysModel::~VcdTrackKeysModel()
0038 {
0039     delete d;
0040 }
0041 
0042 
0043 int VcdTrackKeysModel::keyCount() const
0044 {
0045     return d->keyCount;
0046 }
0047 
0048 
0049 void VcdTrackKeysModel::setKeys( const Key2Track& keys )
0050 {
0051     beginResetModel();
0052     d->keys = keys;
0053     endResetModel();
0054 }
0055 
0056 
0057 const VcdTrackKeysModel::Key2Track& VcdTrackKeysModel::keys() const
0058 {
0059     return d->keys;
0060 }
0061 
0062 
0063 Qt::ItemFlags VcdTrackKeysModel::flags( const QModelIndex& index ) const
0064 {
0065     if( index.isValid() && index.column() == PlayingColumn )
0066         return QAbstractTableModel::flags( index ) | Qt::ItemIsEditable;
0067     else
0068         return QAbstractTableModel::flags( index );
0069 }
0070 
0071 
0072 QVariant VcdTrackKeysModel::data( const QModelIndex& index, int role ) const
0073 {
0074     if( index.isValid() ) {
0075         if( role == Qt::DisplayRole || role == Qt::EditRole ) {
0076             if( index.column() == KeyColumn ) {
0077                 return index.row() + 1;
0078             }
0079             else if( index.column() == PlayingColumn ) {
0080                 Key2Track::const_iterator it = d->keys.constFind( index.row()+1 );
0081                 if( it != d->keys.constEnd() ) {
0082                     return trackName( it.value() );
0083                 }
0084             }
0085         }
0086         else if( role == Qt::DecorationRole ) {
0087             if( index.column() == PlayingColumn ) {
0088                 Key2Track::const_iterator it = d->keys.constFind( index.row()+1 );
0089                 if( it != d->keys.constEnd() ) {
0090                     return trackIcon( it.value() );
0091                 }
0092             }
0093         }
0094         else if( role == TrackRole ) {
0095             Key2Track::const_iterator it = d->keys.constFind( index.row()+1 );
0096             if( it != d->keys.constEnd() )
0097                 return QVariant::fromValue<VcdTrack*>( it.value() );
0098             else
0099                 return QVariant();
0100         }
0101     }
0102     return QVariant();;
0103 }
0104 
0105 
0106 bool VcdTrackKeysModel::setData( const QModelIndex& index, const QVariant& value, int role )
0107 {
0108     if( index.isValid() && index.column() == PlayingColumn && role == Qt::EditRole ) {
0109         if( value.isNull() ) {
0110             d->keys.remove( index.row()+1 );
0111         }
0112         else {
0113             VcdTrack* track = value.value<VcdTrack*>();
0114             d->keys[ index.row()+1 ] = track;
0115         }
0116         emit dataChanged( index, index );
0117         return true;
0118     }
0119     return false;
0120 }
0121 
0122 
0123 int VcdTrackKeysModel::columnCount( const QModelIndex& /*parent*/ ) const
0124 {
0125     return ColumnCount;
0126 }
0127 
0128 
0129 int VcdTrackKeysModel::rowCount( const QModelIndex& parent ) const
0130 {
0131     if( parent.isValid() )
0132         return 0;
0133     else
0134         return d->keyCount;
0135 }
0136 
0137 
0138 QVariant VcdTrackKeysModel::headerData( int section, Qt::Orientation orientation, int role ) const
0139 {
0140     if( orientation == Qt::Horizontal && role == Qt::DisplayRole ) {
0141         switch( section ) {
0142             case KeyColumn:     return i18n( "Key" );
0143             case PlayingColumn: return i18n( "Playing" );
0144             default:            return QVariant();
0145         }
0146     }
0147     else {
0148         return QVariant();
0149     }
0150 }
0151 
0152 
0153 QModelIndex VcdTrackKeysModel::buddy( const QModelIndex& index ) const
0154 {
0155     if( index.isValid() && index.column() == KeyColumn )
0156         return QAbstractTableModel::index( index.row(), PlayingColumn );
0157     else
0158         return index;
0159 }
0160 
0161 
0162 QString VcdTrackKeysModel::trackName( VcdTrack* track )
0163 {
0164     if( track == 0 )
0165         return i18n( "Video CD END" );
0166     else if( track->isSegment() )
0167         return i18n( "Segment-%1 - %2" , QString::number( track->index() + 1 ).rightJustified( 3, '0' ) , track->title() );
0168     else
0169         return i18n( "Sequence-%1 - %2" , QString::number( track->index() + 1 ).rightJustified( 3, '0' ) , track->title() );
0170 }
0171 
0172 
0173 QIcon VcdTrackKeysModel::trackIcon( VcdTrack* track )
0174 {
0175     if( track == 0 )
0176         return QIcon::fromTheme( "media-optical-video" );
0177     else if( track->isSegment() )
0178         return QIcon::fromTheme( "image-x-generic" );
0179     else
0180         return QIcon::fromTheme( "video-x-generic" );
0181 }
0182 
0183 } // namespace K3b