Core: Use FilePath in IDocumentFactory::open()

Change-Id: I369f3bba2e0d1d33fed3a29f3c1408429cc7d8f8
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2021-07-23 11:15:18 +02:00
parent 124909c802
commit 64c9384cb8
5 changed files with 17 additions and 12 deletions

View File

@@ -46,10 +46,10 @@ const QList<IDocumentFactory *> IDocumentFactory::allDocumentFactories()
return g_documentFactories; return g_documentFactories;
} }
IDocument *IDocumentFactory::open(const QString &filename) IDocument *IDocumentFactory::open(const Utils::FilePath &filePath)
{ {
QTC_ASSERT(m_opener, return nullptr); QTC_ASSERT(m_opener, return nullptr);
return m_opener(filename); return m_opener(filePath);
} }
} // namespace Core } // namespace Core

View File

@@ -33,6 +33,8 @@
#include <functional> #include <functional>
namespace Utils { class FilePath; }
namespace Core { namespace Core {
class IDocument; class IDocument;
@@ -45,8 +47,8 @@ public:
static const QList<IDocumentFactory *> allDocumentFactories(); static const QList<IDocumentFactory *> allDocumentFactories();
using Opener = std::function<IDocument *(const QString &fileName)>; using Opener = std::function<IDocument *(const Utils::FilePath &filePath)>;
IDocument *open(const QString &filename); IDocument *open(const Utils::FilePath &filePath);
QStringList mimeTypes() const { return m_mimeTypes; } QStringList mimeTypes() const { return m_mimeTypes; }

View File

@@ -892,7 +892,7 @@ IDocument *MainWindow::openFiles(const FilePaths &filePaths,
const QFileInfo fi(workingDir, fileName); const QFileInfo fi(workingDir, fileName);
const QString absoluteFilePath = fi.absoluteFilePath(); const QString absoluteFilePath = fi.absoluteFilePath();
if (IDocumentFactory *documentFactory = findDocumentFactory(documentFactories, filePath)) { if (IDocumentFactory *documentFactory = findDocumentFactory(documentFactories, filePath)) {
IDocument *document = documentFactory->open(absoluteFilePath); IDocument *document = documentFactory->open(FilePath::fromString(absoluteFilePath));
if (!document) { if (!document) {
if (flags & ICore::StopOnLoadFail) if (flags & ICore::StopOnLoadFail)
return res; return res;

View File

@@ -2081,12 +2081,15 @@ void ProjectExplorerPlugin::extensionsInitialized()
const QString filterSeparator = QLatin1String(";;"); const QString filterSeparator = QLatin1String(";;");
QStringList filterStrings; QStringList filterStrings;
dd->m_documentFactory.setOpener([](QString fileName) { dd->m_documentFactory.setOpener([](FilePath filePath) {
const QFileInfo fi(fileName); if (filePath.isDir()) {
if (fi.isDir()) const QStringList files =
fileName = FolderNavigationWidget::projectFilesInDirectory(fi.absoluteFilePath()).value(0, fileName); FolderNavigationWidget::projectFilesInDirectory(filePath.absoluteFilePath().toString());
if (!files.isEmpty())
filePath = FilePath::fromString(files.front());
}
OpenProjectResult result = ProjectExplorerPlugin::openProject(FilePath::fromString(fileName)); OpenProjectResult result = ProjectExplorerPlugin::openProject(filePath);
if (!result) if (!result)
showOpenProjectError(result); showOpenProjectError(result);
return nullptr; return nullptr;

View File

@@ -209,8 +209,8 @@ bool TaskListPlugin::initialize(const QStringList &arguments, QString *errorMess
TaskHub::addCategory(Constants::TASKLISTTASK_ID, tr("My Tasks")); TaskHub::addCategory(Constants::TASKLISTTASK_ID, tr("My Tasks"));
d->m_fileFactory.addMimeType(QLatin1String("text/x-tasklist")); d->m_fileFactory.addMimeType(QLatin1String("text/x-tasklist"));
d->m_fileFactory.setOpener([this](const QString &fileName) { d->m_fileFactory.setOpener([this](const FilePath &filePath) {
return openTasks(FilePath::fromString(fileName)); return openTasks(filePath);
}); });
connect(SessionManager::instance(), &SessionManager::sessionLoaded, connect(SessionManager::instance(), &SessionManager::sessionLoaded,