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