21 #include <QDirIterator>
22 #include <QDialogButtonBox>
31 mResultsTable->setColumnCount( 2 );
33 mResultsTable->setHorizontalHeaderLabels( QStringList() << tr(
"File" ) << tr(
"Directory" ) );
34 mResultsTable->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::Stretch );
35 mResultsTable->horizontalHeader()->setSectionResizeMode( 1, QHeaderView::Stretch );
37 connect( mFindButton, &QPushButton::clicked,
this, &QgsFindFilesByPatternWidget::find );
40 mFolderWidget->setFilePath( settings.
value( QStringLiteral(
"qgis/lastFindRecursiveFolder" ) ).toString() );
41 mFindButton->setEnabled( !mFolderWidget->filePath().isEmpty() );
45 settings.
setValue( QStringLiteral(
"qgis/lastFindRecursiveFolder" ), filePath );
46 mFindButton->setEnabled( !filePath.isEmpty() );
51 void QgsFindFilesByPatternWidget::find()
53 mFindButton->setText( tr(
"Cancel" ) );
54 disconnect( mFindButton, &QPushButton::clicked,
this, &QgsFindFilesByPatternWidget::find );
55 connect( mFindButton, &QPushButton::clicked,
this, &QgsFindFilesByPatternWidget::cancel );
58 mResultsTable->setRowCount( 0 );
61 const QString pattern = mPatternLineEdit->text();
62 const QString path = mFolderWidget->filePath();
64 QDir startDir( path );
67 if ( !pattern.isEmpty() )
70 QDirIterator it( path, filter, QDir::AllEntries | QDir::NoSymLinks | QDir::NoDotAndDotDot, mRecursiveCheckBox->isChecked() ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags );
72 while ( it.hasNext() )
74 const QString fullPath = it.next();
77 QFileInfo fi( fullPath );
79 const QString toolTip = QDir::toNativeSeparators( fullPath );
80 const QString fileName = fi.fileName();
81 const QString relativeDirectory = QDir::toNativeSeparators( startDir.relativeFilePath( fi.dir().absolutePath() ) );
82 const QString fullDirectory = QDir::toNativeSeparators( fi.dir().absolutePath() );
84 QTableWidgetItem *fileNameItem =
new QTableWidgetItem( fileName );
85 fileNameItem->setToolTip( toolTip );
86 fileNameItem->setFlags( fileNameItem->flags() ^ Qt::ItemIsEditable );
88 QTableWidgetItem *directoryItem =
new QTableWidgetItem( relativeDirectory );
89 directoryItem->setToolTip( fullDirectory );
90 directoryItem->setFlags( directoryItem->flags() ^ Qt::ItemIsEditable );
92 const int row = mResultsTable->rowCount();
93 mResultsTable->insertRow( row );
94 mResultsTable->setItem( row, 0, fileNameItem );
95 mResultsTable->setItem( row, 1, directoryItem );
97 QCoreApplication::processEvents();
102 mFindButton->setText( tr(
"Find Files" ) );
103 disconnect( mFindButton, &QPushButton::clicked,
this, &QgsFindFilesByPatternWidget::cancel );
104 connect( mFindButton, &QPushButton::clicked,
this, &QgsFindFilesByPatternWidget::find );
109 void QgsFindFilesByPatternWidget::cancel()
122 setWindowTitle( tr(
"Find Files by Pattern" ) );
123 setObjectName(
"QgsFindFilesByPatternDialog" );
127 QVBoxLayout *vLayout =
new QVBoxLayout();
130 vLayout->addWidget( mWidget );
131 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal );
132 connect( mButtonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept );
133 connect( mButtonBox, &QDialogButtonBox::rejected,
this, &QDialog::reject );
134 vLayout->addWidget( mButtonBox );
135 setLayout( vLayout );
137 mButtonBox->button( QDialogButtonBox::Ok )->setEnabled(
false );
140 mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( !
files.empty() );
146 return mWidget->
files();