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"