File indexing completed on 2024-05-05 04:51:41
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 "k3baudioprojectdelegate.h" 0009 #include "k3baudioprojectmodel.h" 0010 0011 #include <QIcon> 0012 #include <QKeyEvent> 0013 #include <QAbstractItemView> 0014 0015 namespace K3b { 0016 0017 0018 AudioProjectDelegate::AudioProjectDelegate( QAbstractItemView& view, QObject* parent ) 0019 : 0020 QStyledItemDelegate( parent ), 0021 m_view( view ) 0022 { 0023 } 0024 0025 0026 AudioProjectDelegate::~AudioProjectDelegate() 0027 { 0028 } 0029 0030 0031 QWidget* AudioProjectDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const 0032 { 0033 m_current = index; 0034 QWidget* widget = QStyledItemDelegate::createEditor( parent, option, index ); 0035 widget->installEventFilter( const_cast<AudioProjectDelegate*>( this ) ); 0036 return widget; 0037 } 0038 0039 0040 void AudioProjectDelegate::setPlayingTrack( const QModelIndex& index ) 0041 { 0042 if( m_playingTrack.isValid() ) { 0043 m_view.viewport()->update( m_view.visualRect( m_playingTrack ) ); 0044 } 0045 0046 if( index.isValid() ) { 0047 m_playingTrack = index.model()->index( index.row(), AudioProjectModel::TitleColumn ); 0048 m_view.viewport()->update( m_view.visualRect( m_playingTrack ) ); 0049 } 0050 else { 0051 m_playingTrack = QPersistentModelIndex(); 0052 } 0053 } 0054 0055 0056 void AudioProjectDelegate::initStyleOption( QStyleOptionViewItem* option, const QModelIndex& index ) const 0057 { 0058 QStyledItemDelegate::initStyleOption( option, index ); 0059 if( index.isValid() && index == m_playingTrack ) { 0060 option->icon = QIcon::fromTheme( "media-playback-start" ); 0061 option->features |= QStyleOptionViewItem::HasDecoration; 0062 } 0063 } 0064 0065 0066 bool AudioProjectDelegate::eventFilter( QObject* object, QEvent* event ) 0067 { 0068 if( event->type() == QEvent::KeyPress ) { 0069 QKeyEvent* keyEvent = dynamic_cast<QKeyEvent*>( event ); 0070 if( keyEvent->key() == Qt::Key_Return ) { 0071 QWidget* editor = dynamic_cast<QWidget*>( object ); 0072 Q_EMIT commitData( editor ); 0073 if( m_current.row() < m_current.model()->rowCount( m_current.parent() ) - 1 ) 0074 Q_EMIT closeEditor( editor, EditNextItem ); 0075 else 0076 Q_EMIT closeEditor( editor, NoHint ); 0077 event->accept(); 0078 return true; 0079 } 0080 else if( keyEvent->key() == Qt::Key_Up ) { 0081 Q_EMIT closeEditor( dynamic_cast<QWidget*>( object ), EditPreviousItem ); 0082 event->accept(); 0083 return true; 0084 } 0085 else if( keyEvent->key() == Qt::Key_Down ) { 0086 Q_EMIT closeEditor( dynamic_cast<QWidget*>( object ), EditNextItem ); 0087 event->accept(); 0088 return true; 0089 } 0090 } 0091 return QStyledItemDelegate::eventFilter( object, event ); 0092 } 0093 0094 } // namespace K3b 0095 0096 #include "moc_k3baudioprojectdelegate.cpp"