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

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 "k3bdataprojectdelegate.h"
0009 #include <QKeyEvent>
0010 #include <QFocusEvent>
0011 #include <QLineEdit>
0012 
0013 namespace K3b {
0014 
0015 DataProjectDelegate::DataProjectDelegate( QObject* parent )
0016 :
0017     QStyledItemDelegate( parent )
0018 {
0019 }
0020 
0021 
0022 QWidget* DataProjectDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const
0023 {
0024     m_current = index;
0025     QLineEdit* lineEdit = new QLineEdit( parent );
0026     lineEdit->setFrame( false );
0027     lineEdit->setAlignment( option.displayAlignment );
0028     lineEdit->installEventFilter( const_cast<DataProjectDelegate*>( this ) );
0029     return lineEdit;
0030 }
0031 
0032 
0033 bool DataProjectDelegate::eventFilter( QObject* object, QEvent* event )
0034 {
0035     if( event->type() == QEvent::FocusIn ) {
0036         if( QLineEdit* editor = qobject_cast<QLineEdit*>( object ) ) {
0037             const QString extension = m_mimeDatabase.suffixForFileName( editor->text() );
0038             // Select only filename without extension
0039             if( !extension.isEmpty() ) {
0040                 const int selectionLength = editor->text().length() - extension.length() - 1;
0041                 editor->setSelection( 0, selectionLength );
0042             }
0043             event->accept();
0044             return true;
0045         }
0046     }
0047     else if( event->type() == QEvent::KeyPress ) {
0048         QKeyEvent* keyEvent = dynamic_cast<QKeyEvent*>( event );
0049         if( keyEvent->key() == Qt::Key_Return ) {
0050             QWidget* editor = dynamic_cast<QWidget*>( object );
0051             Q_EMIT commitData( editor );
0052             if( m_current.row() < m_current.model()->rowCount( m_current.parent() ) - 1 )
0053                 Q_EMIT closeEditor( editor, EditNextItem );
0054             else
0055                 Q_EMIT closeEditor( editor, NoHint );
0056             event->accept();
0057             return true;
0058         }
0059         else if( keyEvent->key() == Qt::Key_Up ) {
0060             Q_EMIT closeEditor( dynamic_cast<QWidget*>( object ), EditPreviousItem );
0061             event->accept();
0062             return true;
0063         }
0064         else if( keyEvent->key() == Qt::Key_Down ) {
0065             Q_EMIT closeEditor( dynamic_cast<QWidget*>( object ), EditNextItem );
0066             event->accept();
0067             return true;
0068         }
0069     }
0070     return QStyledItemDelegate::eventFilter( object, event );
0071 }
0072 
0073 } // namespace K3b
0074 
0075 #include "moc_k3bdataprojectdelegate.cpp"