bool lessThan(const QModelIndex &left, const QModelIndex &right) const { QFileSystemModel *model = dynamic_cast<QFileSystemModel*>(sourceModel()); if (!model->isDir(left) && model->isDir(right)) return false; else if (model->isDir(left) && !model->isDir(right)) return true; else return left.data().toString().toLower() < right.data().toString().toLower(); // for files and dirs }
bool QFileFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); QFileSystemModel *fs = qobject_cast<QFileSystemModel *>(sourceModel()); if(!fs) { qCritical() << "Expected a QFileSystemModel as the source model!"; return true; } if(fs->isDir(idx)) return true; QFile::Permissions permissions = (QFile::Permissions)sourceModel()->data(idx, QFileSystemModel::FilePermissions).toInt(); if((m_requireMask & QDir::Readable) && !(permissions & QFile::ReadUser)) return false; if((m_requireMask & QDir::Writable) && !(permissions & QFile::WriteUser)) return false; if((m_requireMask & QDir::Executable) && !(permissions & QFile::ExeUser)) return false; if((m_excludeMask & QDir::Readable) && (permissions & QFile::ReadUser)) return false; if((m_excludeMask & QDir::Writable) && (permissions & QFile::WriteUser)) return false; if((m_excludeMask & QDir::Executable) && (permissions & QFile::ExeUser)) return false; return true; }
void TagEditor::addFiles(){ QModelIndexList indexes = TreeView->selectionModel()->selectedRows(0); QFileSystemModel *m = static_cast<QFileSystemModel*>(TreeView->model()); for(int i=0;i<indexes.size();i++){ QModelIndex index = indexes[i]; qDebug()<<index.row()<<index.column(); bool isdir = m->isDir(index); if(isdir){ QString folder = m->filePath(index); QList<QFileInfo> info = Global::getDirContent( folder, extensions, subfolders ); for(int j=0;j<info.size();j++){ TagItem *newItem = new TagItem( info[j].filePath() ); TreeWidget_->addItem( newItem ); } }else{ QFileInfo f(m->filePath(index)); TagItem *newItem = new TagItem( f.filePath() ); TreeWidget_->addItem( newItem ); } } }
void TagEditor::searchAndAddFiles(){ QModelIndexList indexes = TreeView->selectionModel()->selectedRows(0); QFileSystemModel *m = (QFileSystemModel *)TreeView->model(); QList<QFileInfo> infos; for(int i=0;i<indexes.size();i++){ QModelIndex index = indexes[i]; bool isdir = m->isDir(index); if(isdir){ QString folder = m->filePath(index); QList<QFileInfo> info = Global::getDirContent( folder, extensions, subfolders ); infos.append(info); }else{ infos.append( QFileInfo(m->filePath(index)) ); } } SearchForTagsDialog r(infos,this); if( r.exec()==QDialog::Accepted){ QList<QFileInfo> files = r.files(); for(int j=0;j<files.size();j++){ TagItem *newItem = new TagItem( files[j].filePath() ); TreeWidget_->addItem( newItem ); } } }
bool MainWindow::isDir(const QModelIndex &indexProxy) const { const QSortFilterProxyModel *proxyModel = 0; QFileSystemModel *sourceModel = 0; if ( !( proxyModel = dynamic_cast<const QSortFilterProxyModel*>(indexProxy.model()) ) || !( sourceModel = dynamic_cast<QFileSystemModel*>(proxyModel->sourceModel()) ) ) return false; return sourceModel->isDir( proxyModel->mapToSource(indexProxy) ); }
virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const { QFileSystemModel* model = static_cast<QFileSystemModel*>(sourceModel()); QModelIndex index = sourceModel()->index(source_row, 0, source_parent); if(model->isDir(index)) return true; m_reader.setFileName(model->filePath(index)); return m_reader.canRead(); }
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { QFileSystemModel *model = dynamic_cast<QFileSystemModel*>(sourceModel()); QModelIndex index = model->index(source_row, 0, source_parent); return model->isDir(index) ? true : false; }
void TagEditor::searchOnline(){ QModelIndexList indexes = TreeView->selectionModel()->selectedRows(0); if(indexes.size()==0){ QMessageBox msgBox; msgBox.setText("No rows selected"); msgBox.exec(); return; } QModelIndex index = indexes[0]; QFileSystemModel *m = (QFileSystemModel *)TreeView->model(); bool isdir = m->isDir(index); QString query; QList<QFileInfo> info; QList<TagItem*> items; if(isdir){ //folder/album QString folder = m->filePath(index); info = Global::getDirContent( folder, extensions, subfolders ); }else{ for(int i=0;i<indexes.size();i++){ info.append( m->fileInfo( indexes[i] ) ); } } if(info.size()==0){ QMessageBox msgBox; msgBox.setText("Empty folder..."); msgBox.exec(); return; } for(int i=0;i<info.size();i++){ items.append(new TagItem(info[i].absoluteFilePath())); } SearchDialog d( items, this ); //d.setModal(false); d.exec(); /* if( d.exec()>=0 ){ //save settings anyway //settings = d.getSettings(); } */ //delete tag data from these files if they exist in TreeWidget_, since the tag data now might get changed for(int i=0;i<TreeWidget_->topLevelItemCount();i++){ if( info.size()==0 ){ break; } TagItem *item = (TagItem*)TreeWidget_->topLevelItem(i); for(int j=0;j<info.size();j++){ if( item->data(0,TreeWidget::FULLFILE)==info.at(j).absoluteFilePath() ){ item->clearTags(); info.removeAt( j ); break; } } } }