mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2379 import summary cases. Fix path filtering
This commit is contained in:
parent
3bcfc09baf
commit
b74dca8de8
@ -41,11 +41,19 @@
|
|||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <time.h>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
/// Internal variables
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
static QString separator = QString(QDir::separator());
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
/// Internal functions
|
/// Internal functions
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
QStringList prefixStrings(const QStringList& strings, const QString& prefix);
|
static QStringList prefixStrings(const QStringList& strings, const QString& prefix);
|
||||||
|
static QString relativePath(const QString& rootDir, const QString& dir);
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@ -131,7 +139,12 @@ QStringList RicFileHierarchyDialog::files() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
QString RicFileHierarchyDialog::rootDir() const
|
QString RicFileHierarchyDialog::rootDir() const
|
||||||
{
|
{
|
||||||
return m_rootDir->text();
|
QString rootDir = m_rootDir->text();
|
||||||
|
if (!rootDir.endsWith(separator))
|
||||||
|
{
|
||||||
|
rootDir.append(separator);
|
||||||
|
}
|
||||||
|
return QDir::toNativeSeparators(rootDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -139,7 +152,7 @@ QString RicFileHierarchyDialog::rootDir() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
QString RicFileHierarchyDialog::pathFilter() const
|
QString RicFileHierarchyDialog::pathFilter() const
|
||||||
{
|
{
|
||||||
return m_pathFilter->text();
|
return QDir::toNativeSeparators(m_pathFilter->text());
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -171,10 +184,31 @@ bool RicFileHierarchyDialog::cancelPressed() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicFileHierarchyDialog::appendToFileList(const QString& fileName)
|
void RicFileHierarchyDialog::appendToFileList(const QString& fileName)
|
||||||
{
|
{
|
||||||
|
QString text = m_fileList->toPlainText();
|
||||||
|
if (text.startsWith("Working .")) m_fileList->setText("");
|
||||||
|
|
||||||
m_fileList->append(fileName);
|
m_fileList->append(fileName);
|
||||||
QApplication::processEvents();
|
QApplication::processEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicFileHierarchyDialog::updateStatus()
|
||||||
|
{
|
||||||
|
static time_t lastStatusUpdate = 0;
|
||||||
|
time_t now = time(0);
|
||||||
|
|
||||||
|
if (now == lastStatusUpdate) return;
|
||||||
|
lastStatusUpdate = now;
|
||||||
|
|
||||||
|
QString currStatus = m_fileList->toPlainText();
|
||||||
|
if (currStatus == "") m_fileList->setText("Working .");
|
||||||
|
else if (currStatus == "Working .") m_fileList->setText("Working ..");
|
||||||
|
else if (currStatus == "Working ..") m_fileList->setText("Working ...");
|
||||||
|
else if (currStatus == "Working ...") m_fileList->setText("Working .");
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -207,40 +241,71 @@ RicFileHierarchyDialogResult RicFileHierarchyDialog::getOpenFileNames(QWidget *p
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
QStringList RicFileHierarchyDialog::findMatchingFiles(RicFileHierarchyDialog& dialog)
|
QStringList RicFileHierarchyDialog::findMatchingFiles()
|
||||||
{
|
{
|
||||||
return findFilesRecursive(dialog.rootDir(), dialog);
|
QStringList dirs = buildDirectoryListRecursive(rootDir());
|
||||||
|
|
||||||
|
return findFilesInDirs(dirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
QStringList RicFileHierarchyDialog::findFilesRecursive(const QString ¤tDir, RicFileHierarchyDialog& dialog)
|
QStringList RicFileHierarchyDialog::buildDirectoryListRecursive(const QString& currentDir)
|
||||||
{
|
{
|
||||||
QStringList allFiles;
|
QStringList allDirs;
|
||||||
|
|
||||||
if (dialog.cancelPressed()) return allFiles;
|
if (cancelPressed()) return allDirs;
|
||||||
|
|
||||||
|
updateStatus();
|
||||||
|
|
||||||
QDir qdir(currentDir);
|
QDir qdir(currentDir);
|
||||||
QStringList subDirs = qdir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
QStringList subDirs = qdir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
||||||
QStringList files = qdir.entryList(createNameFilterList(dialog.fileNameFilter(), dialog.fileExtensions()), QDir::Files);
|
|
||||||
|
|
||||||
for (QString file : files)
|
if (pathFilterMatch(currentDir))
|
||||||
{
|
{
|
||||||
QString absFilePath = qdir.absoluteFilePath(file);
|
allDirs.push_back(currentDir);
|
||||||
if (pathFilterMatch(absFilePath, dialog.pathFilter()))
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
allFiles.append(absFilePath);
|
// If there is no match and filter string does not start with a wildcard, there is no need to enter sub directories
|
||||||
dialog.appendToFileList(absFilePath);
|
if (!pathFilter().startsWith("*") && !relativePath(rootDir(), currentDir).isEmpty())
|
||||||
|
{
|
||||||
|
return QStringList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (QString subDir : subDirs)
|
for (QString subDir : subDirs)
|
||||||
{
|
{
|
||||||
QApplication::processEvents();
|
QApplication::processEvents();
|
||||||
allFiles += findFilesRecursive(qdir.absoluteFilePath(subDir), dialog);
|
allDirs += buildDirectoryListRecursive(QDir::toNativeSeparators(qdir.absoluteFilePath(subDir)));
|
||||||
}
|
}
|
||||||
return dialog.cancelPressed() ? QStringList() : allFiles;
|
return cancelPressed() ? QStringList() : allDirs;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QStringList RicFileHierarchyDialog::findFilesInDirs(const QStringList& dirs)
|
||||||
|
{
|
||||||
|
QStringList allFiles;
|
||||||
|
QStringList filters = createNameFilterList(fileNameFilter(), fileExtensions());
|
||||||
|
|
||||||
|
for (const auto& dir : dirs)
|
||||||
|
{
|
||||||
|
QDir qdir(dir);
|
||||||
|
QStringList files = qdir.entryList(filters, QDir::Files);
|
||||||
|
|
||||||
|
updateStatus();
|
||||||
|
|
||||||
|
for (QString file : files)
|
||||||
|
{
|
||||||
|
QString absFilePath = QDir::toNativeSeparators(qdir.absoluteFilePath(file));
|
||||||
|
allFiles.append(absFilePath);
|
||||||
|
appendToFileList(absFilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return allFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -268,14 +333,12 @@ QStringList RicFileHierarchyDialog::createNameFilterList(const QString &fileName
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RicFileHierarchyDialog::pathFilterMatch(const QString& file, const QString& pathFilter)
|
bool RicFileHierarchyDialog::pathFilterMatch(const QString& dir)
|
||||||
{
|
{
|
||||||
QRegExp regexp(pathFilter, Qt::CaseInsensitive, QRegExp::Wildcard);
|
QRegExp regexp(pathFilter(), Qt::CaseInsensitive, QRegExp::Wildcard);
|
||||||
|
QString relPath = relativePath(rootDir(), dir);
|
||||||
|
|
||||||
QFileInfo fileInfo(file);
|
return regexp.exactMatch(relPath);
|
||||||
QString path = fileInfo.absolutePath();
|
|
||||||
|
|
||||||
return regexp.exactMatch(path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -283,8 +346,6 @@ bool RicFileHierarchyDialog::pathFilterMatch(const QString& file, const QString&
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicFileHierarchyDialog::updateEffectiveFilter()
|
void RicFileHierarchyDialog::updateEffectiveFilter()
|
||||||
{
|
{
|
||||||
QString sep(QDir::separator());
|
|
||||||
|
|
||||||
QString effFilter = QString("%1/%2/%3%4")
|
QString effFilter = QString("%1/%2/%3%4")
|
||||||
.arg(m_rootDir->text())
|
.arg(m_rootDir->text())
|
||||||
.arg(m_pathFilter->text())
|
.arg(m_pathFilter->text())
|
||||||
@ -298,7 +359,7 @@ void RicFileHierarchyDialog::updateEffectiveFilter()
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
len = native.size();
|
len = native.size();
|
||||||
native.replace(sep + sep, sep);
|
native.replace(separator + separator, separator);
|
||||||
} while (native.size() != len);
|
} while (native.size() != len);
|
||||||
|
|
||||||
m_effectiveFilter->setText(native);
|
m_effectiveFilter->setText(native);
|
||||||
@ -318,7 +379,7 @@ void RicFileHierarchyDialog::slotFilterChanged(const QString& text)
|
|||||||
void RicFileHierarchyDialog::slotDialogOkClicked()
|
void RicFileHierarchyDialog::slotDialogOkClicked()
|
||||||
{
|
{
|
||||||
m_cancelPressed = false;
|
m_cancelPressed = false;
|
||||||
m_files = findMatchingFiles(*this);
|
m_files = findMatchingFiles();
|
||||||
accept();
|
accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -345,6 +406,10 @@ void RicFileHierarchyDialog::slotBrowseButtonClicked()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
/// Internal functions
|
/// Internal functions
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
QStringList prefixStrings(const QStringList& strings, const QString& prefix)
|
QStringList prefixStrings(const QStringList& strings, const QString& prefix)
|
||||||
{
|
{
|
||||||
QStringList prefixedStrings;
|
QStringList prefixedStrings;
|
||||||
@ -361,3 +426,22 @@ QStringList prefixStrings(const QStringList& strings, const QString& prefix)
|
|||||||
}
|
}
|
||||||
return prefixedStrings;
|
return prefixedStrings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString relativePath(const QString& rootDir, const QString& dir)
|
||||||
|
{
|
||||||
|
if (dir.startsWith(rootDir))
|
||||||
|
{
|
||||||
|
QString relPath = dir;
|
||||||
|
relPath.remove(0, rootDir.size());
|
||||||
|
|
||||||
|
if (relPath.startsWith("/") || relPath.startsWith("\\")) relPath.remove(0, 1);
|
||||||
|
return relPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -51,6 +51,7 @@ public:
|
|||||||
bool cancelPressed() const;
|
bool cancelPressed() const;
|
||||||
|
|
||||||
void appendToFileList(const QString& fileName);
|
void appendToFileList(const QString& fileName);
|
||||||
|
void updateStatus();
|
||||||
|
|
||||||
static RicFileHierarchyDialogResult getOpenFileNames(QWidget *parent = 0,
|
static RicFileHierarchyDialogResult getOpenFileNames(QWidget *parent = 0,
|
||||||
const QString& caption = QString(),
|
const QString& caption = QString(),
|
||||||
@ -60,15 +61,16 @@ public:
|
|||||||
const QStringList& fileExtensions = QStringList());
|
const QStringList& fileExtensions = QStringList());
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QStringList findMatchingFiles(RicFileHierarchyDialog& dialog);
|
QStringList findMatchingFiles();
|
||||||
|
|
||||||
static QStringList findFilesRecursive(const QString& currentDir,
|
QStringList buildDirectoryListRecursive(const QString& currentDir);
|
||||||
RicFileHierarchyDialog& dialog);
|
|
||||||
|
|
||||||
static QStringList createNameFilterList(const QString& fileNameFilter,
|
QStringList findFilesInDirs(const QStringList& dirs);
|
||||||
|
|
||||||
|
QStringList createNameFilterList(const QString& fileNameFilter,
|
||||||
const QStringList& fileExtensions);
|
const QStringList& fileExtensions);
|
||||||
|
|
||||||
static bool pathFilterMatch(const QString& file, const QString& pathFilter);
|
bool pathFilterMatch(const QString& dir);
|
||||||
|
|
||||||
void updateEffectiveFilter();
|
void updateEffectiveFilter();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user