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"