Ejemplo n.º 1
0
 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
 }
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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 );
        }
    }

}
Ejemplo n.º 4
0
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 );
        }

    }


}
Ejemplo n.º 5
0
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) );
}
Ejemplo n.º 6
0
    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();
    }
Ejemplo n.º 7
0
 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;
 }
Ejemplo n.º 8
0
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;
            }
        }
    }

}