File indexing completed on 2024-05-05 04:51:43
0001 /* 0002 SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 0008 #include "k3bdatadirtreeview.h" 0009 #include "k3bdataview.h" 0010 #include "k3bdatadoc.h" 0011 #include "k3bdataitem.h" 0012 #include "k3bdiritem.h" 0013 #include "k3bdataprojectmodel.h" 0014 #include "k3bdataurladdingdialog.h" 0015 #include "k3bview.h" 0016 #include "k3bvalidators.h" 0017 0018 #include <KLocalizedString> 0019 #include <KIconLoader> 0020 0021 #include <QDebug> 0022 #include <QList> 0023 #include <QHeaderView> 0024 0025 0026 class K3b::DataDirTreeView::Private 0027 { 0028 public: 0029 Private() { 0030 } 0031 0032 int animationCounter; 0033 QPixmap beforeAniPixmap; 0034 0035 #ifdef __GNUC__ 0036 #warning Re-enable the iso and ascii validators 0037 #endif 0038 QValidator* iso9660Validator; 0039 QValidator* asciiValidator; 0040 0041 K3b::DataProjectModel* model; 0042 }; 0043 0044 0045 K3b::DataDirTreeView::DataDirTreeView( K3b::View* view, K3b::DataDoc* doc, QWidget* parent ) 0046 : QTreeView( parent ), m_view(view) 0047 { 0048 d = new Private(); 0049 0050 setSelectionMode(QAbstractItemView::SingleSelection); 0051 0052 // setRootIsDecorated( false ); 0053 setDragDropMode( QAbstractItemView::DragDrop ); 0054 setDropIndicatorShown( true ); 0055 setDragEnabled(true); 0056 setAcceptDrops( true ); 0057 0058 header()->hide(); 0059 0060 m_doc = doc; 0061 0062 d->model = new K3b::DataProjectModel( doc, this ); 0063 //d->model->setListOnlyDirs( true ); 0064 setModel( d->model ); 0065 0066 for ( int i = K3b::DataProjectModel::TypeColumn; i < K3b::DataProjectModel::NumColumns; ++i ) { 0067 hideColumn( i ); 0068 } 0069 0070 connect( d->model, SIGNAL(addUrlsRequested(QList<QUrl>,K3b::DirItem*)), 0071 SLOT(slotAddUrlsRequested(QList<QUrl>,K3b::DirItem*)) ); 0072 connect( d->model, SIGNAL(moveItemsRequested(QList<K3b::DataItem*>,K3b::DirItem*)), 0073 SLOT(slotMoveItemsRequested(QList<K3b::DataItem*>,K3b::DirItem*)) ); 0074 connect( selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), 0075 SLOT(slotSelectionChanged(QItemSelection,QItemSelection)) ); 0076 } 0077 0078 0079 K3b::DataDirTreeView::~DataDirTreeView() 0080 { 0081 delete d; 0082 } 0083 0084 0085 K3b::DataItem* K3b::DataDirTreeView::itemAt( const QPoint& pos ) 0086 { 0087 return d->model->itemForIndex( indexAt( pos ) ); 0088 } 0089 0090 0091 K3b::DirItem* K3b::DataDirTreeView::selectedDir() const 0092 { 0093 if ( K3b::DataItem* item = d->model->itemForIndex( selectionModel()->currentIndex() ) ) { 0094 return item->getDirItem(); 0095 } 0096 // QModelIndexList indices = selectionModel()->selectedRows(); 0097 // if ( !indices.isEmpty() ) { 0098 // return d->model->itemForIndex( indices.first() )->getDirItem(); 0099 // } 0100 else { 0101 return 0; 0102 } 0103 } 0104 0105 0106 void K3b::DataDirTreeView::slotSelectionChanged( const QItemSelection& selected, const QItemSelection& ) 0107 { 0108 QModelIndexList indexes = selected.indexes(); 0109 if ( !indexes.isEmpty() ) { 0110 K3b::DirItem* dir = d->model->itemForIndex( indexes.first() )->getDirItem(); 0111 emit dirSelected( dir ); 0112 } 0113 } 0114 0115 0116 void K3b::DataDirTreeView::slotAddUrlsRequested( QList<QUrl> urls, K3b::DirItem* targetDir ) 0117 { 0118 DataUrlAddingDialog::addUrls( urls, targetDir, m_view ); 0119 } 0120 0121 0122 void K3b::DataDirTreeView::slotMoveItemsRequested( QList<K3b::DataItem*> items, K3b::DirItem* targetDir ) 0123 { 0124 DataUrlAddingDialog::moveItems( items, targetDir, m_view ); 0125 } 0126 0127 0128 void K3b::DataDirTreeView::setCurrentDir( K3b::DirItem* dirItem ) 0129 { 0130 selectionModel()->select( d->model->indexForItem( dirItem ), QItemSelectionModel::SelectCurrent ); 0131 } 0132 0133 0134 0135 #if 0 0136 void K3b::DataDirTreeView::startDropAnimation( K3b::DirItem* dir ) 0137 { 0138 stopDropAnimation(); 0139 0140 K3b::DataDirViewItem* vI = m_itemMap[dir]; 0141 if( vI ) { 0142 d->animationCounter = 0; 0143 d->animatedDirItem = vI; 0144 d->beforeAniPixmap = QPixmap( *vI->pixmap(0) ); 0145 QTimer::singleShot( 0, this, SLOT(slotDropAnimate()) ); 0146 } 0147 } 0148 0149 0150 void K3b::DataDirTreeView::slotDropAnimate() 0151 { 0152 if( d->animatedDirItem ) { 0153 if( d->animationCounter > 5 ) 0154 stopDropAnimation(); 0155 else { 0156 switch(d->animationCounter) { 0157 case 0: 0158 d->animatedDirItem->setPixmap( QIcon::fromTheme( "folder-cyan" ).pixmap( KIconLoader::SizeSmall ) ); 0159 break; 0160 case 1: 0161 d->animatedDirItem->setPixmap( QIcon::fromTheme( "folder-green" ).pixmap( KIconLoader::SizeSmall ) ); 0162 break; 0163 case 2: 0164 d->animatedDirItem->setPixmap( QIcon::fromTheme( "folder-yellow" ).pixmap( KIconLoader::SizeSmall ) ); 0165 break; 0166 case 3: 0167 d->animatedDirItem->setPixmap( QIcon::fromTheme( "folder-orange" ).pixmap( KIconLoader::SizeSmall ) ); 0168 break; 0169 case 4: 0170 d->animatedDirItem->setPixmap( QIcon::fromTheme( "folder-red" ).pixmap( KIconLoader::SizeSmall ) ); 0171 break; 0172 case 5: 0173 d->animatedDirItem->setPixmap( QIcon::fromTheme( "folder-violet" ).pixmap( KIconLoader::SizeSmall ) ); 0174 break; 0175 } 0176 0177 d->animationCounter++; 0178 QTimer::singleShot( 300, this, SLOT(slotDropAnimate()) ); 0179 } 0180 } 0181 } 0182 0183 0184 void K3b::DataDirTreeView::stopDropAnimation() 0185 { 0186 if( d->animatedDirItem ) { 0187 d->animatedDirItem->setPixmap( 0, d->beforeAniPixmap ); 0188 d->animatedDirItem = 0; 0189 } 0190 } 0191 #endif 0192 0193 #include "moc_k3bdatadirtreeview.cpp"