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 "k3bvcdtrackkeysdelegate.h"
0009 #include "k3bvcdtrackkeysmodel.h"
0010 #include "k3bvcdtrack.h"
0011 
0012 #include <QComboBox>
0013 
0014 Q_DECLARE_METATYPE( K3b::VcdTrack* )
0015 
0016 namespace K3b {
0017 
0018 
0019 class VcdTrackKeysDelegate::Private
0020 {
0021 public:
0022     Private( QList<VcdTrack*>& t ) : tracks( t ) {}
0023     
0024     QList<VcdTrack*>& tracks;
0025 };
0026 
0027 
0028 VcdTrackKeysDelegate::VcdTrackKeysDelegate( QList<VcdTrack*>& tracks, QObject* parent )
0029     : QStyledItemDelegate( parent ),
0030       d( new Private( tracks ) )
0031 {
0032 }
0033 
0034 
0035 VcdTrackKeysDelegate::~VcdTrackKeysDelegate()
0036 {
0037     delete d;
0038 }
0039 
0040 
0041 QWidget* VcdTrackKeysDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem& /*option*/, const QModelIndex& index ) const
0042 {
0043     if( index.isValid() && index.column() == VcdTrackKeysModel::PlayingColumn ) {
0044         QComboBox* combobox = new QComboBox( parent );
0045         combobox->addItem( QString(), QVariant() );
0046         Q_FOREACH( VcdTrack* track, d->tracks ) {
0047             combobox->addItem(
0048                 VcdTrackKeysModel::trackIcon( track ),
0049                 VcdTrackKeysModel::trackName( track ),
0050                 QVariant::fromValue( track ) );
0051         }
0052         combobox->addItem(
0053             VcdTrackKeysModel::trackIcon( 0 ),
0054             VcdTrackKeysModel::trackName( 0 ),
0055             QVariant::fromValue<VcdTrack*>( 0 ) );
0056         return combobox;
0057     }
0058     else {
0059         return 0;
0060     }
0061 }
0062 
0063 
0064 void VcdTrackKeysDelegate::setEditorData( QWidget* editor, const QModelIndex& index ) const
0065 {
0066     if( QComboBox* combobox = qobject_cast<QComboBox*>( editor ) ) {
0067         QVariant data = index.data( VcdTrackKeysModel::TrackRole );
0068         combobox->setCurrentIndex( combobox->findData( data ) );
0069     }
0070 }
0071 
0072 
0073 void VcdTrackKeysDelegate::setModelData( QWidget* editor, QAbstractItemModel* model, const QModelIndex& index ) const
0074 {
0075     if( QComboBox* combobox = qobject_cast<QComboBox*>( editor ) ) {
0076         model->setData( index, combobox->itemData( combobox->currentIndex() ) );
0077     }
0078 }
0079 
0080 
0081 void VcdTrackKeysDelegate::updateEditorGeometry( QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& /*index*/ ) const
0082 {
0083     editor->setGeometry( option.rect );
0084 }
0085 
0086 } // namespace K3b