diff options
author | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2022-05-31 11:16:44 +0200 |
---|---|---|
committer | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2022-07-21 13:14:01 +0000 |
commit | 3462bc67be64d8caf59ed2f9a0ba6f5edddba3b9 (patch) | |
tree | 3c1b78f5a1709e754b1567be5bf5edd73f5288b0 /src/plugins/coreplugin/mainwindow.cpp | |
parent | a5d44fb32b7d66448d3b1a4f871957eff02107f5 (diff) | |
download | qt-creator-3462bc67be64d8caf59ed2f9a0ba6f5edddba3b9.tar.gz |
filesystem: Add QFSEngine for filepaths
Change-Id: Ibd0c88c69863c0877138d8cc45541530c359bd9c
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/coreplugin/mainwindow.cpp')
-rw-r--r-- | src/plugins/coreplugin/mainwindow.cpp | 68 |
1 files changed, 59 insertions, 9 deletions
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index 7c1641ee78..44b7233d5f 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -72,6 +72,8 @@ #include <coreplugin/settingsdatabase.h> #include <extensionsystem/pluginmanager.h> #include <utils/algorithm.h> +#include <utils/fsengine/fileiconprovider.h> +#include <utils/fsengine/fsengine.h> #include <utils/historycompleter.h> #include <utils/hostosinfo.h> #include <utils/mimeutils.h> @@ -83,6 +85,7 @@ #include <utils/touchbar/touchbar.h> #include <utils/utilsicons.h> +#include <QAbstractProxyModel> #include <QActionGroup> #include <QApplication> #include <QBrush> @@ -93,11 +96,13 @@ #include <QDialogButtonBox> #include <QDir> #include <QFileInfo> +#include <QFileSystemModel> #include <QMenu> #include <QMenuBar> #include <QMessageBox> #include <QPrinter> #include <QSettings> +#include <QSortFilterProxyModel> #include <QStatusBar> #include <QStyleFactory> #include <QSyntaxHighlighter> @@ -114,6 +119,17 @@ using namespace Utils; namespace Core { namespace Internal { +static const char settingsGroup[] = "MainWindow"; +static const char colorKey[] = "Color"; +static const char askBeforeExitKey[] = "AskBeforeExit"; +static const char windowGeometryKey[] = "WindowGeometry"; +static const char windowStateKey[] = "WindowState"; +static const char modeSelectorLayoutKey[] = "ModeSelectorLayout"; +static const char openFromDeviceDialogKey[] = "OpenFromDeviceDialog"; + +static const bool askBeforeExitDefault = false; + + enum { debugMainWindow = 0 }; MainWindow::MainWindow() @@ -583,6 +599,14 @@ void MainWindow::registerDefaultActions() mfile->addAction(cmd, Constants::G_FILE_OPEN); connect(m_openWithAction, &QAction::triggered, this, &MainWindow::openFileWith); + if (FSEngine::isAvailable()) { + // Open From Device Action + m_openFromDeviceAction = new QAction(Tr::tr("Open From Device..."), this); + cmd = ActionManager::registerAction(m_openFromDeviceAction, Constants::OPEN_FROM_DEVICE); + mfile->addAction(cmd, Constants::G_FILE_OPEN); + connect(m_openFromDeviceAction, &QAction::triggered, this, &MainWindow::openFileFromDevice); + } + // File->Recent Files Menu ActionContainer *ac = ActionManager::createMenu(Constants::M_FILE_RECENTFILES); mfile->addMenu(ac, Constants::G_FILE_OPEN); @@ -1043,6 +1067,41 @@ void MainWindow::openFileWith() } } +void MainWindow::openFileFromDevice() +{ + QSettings *settings = PluginManager::settings(); + settings->beginGroup(QLatin1String(settingsGroup)); + QVariant dialogSettings = settings->value(QLatin1String(openFromDeviceDialogKey)); + + QFileDialog dialog; + dialog.setOption(QFileDialog::DontUseNativeDialog); + if (!dialogSettings.isNull()) { + dialog.restoreState(dialogSettings.toByteArray()); + } + QList<QUrl> sideBarUrls = Utils::transform(Utils::filtered(FSEngine::registeredDeviceRoots(), + [](const auto &filePath) { + return filePath.exists(); + }), + [](const auto &filePath) { + return QUrl::fromLocalFile(filePath.toFSPathString()); + }); + dialog.setSidebarUrls(sideBarUrls); + dialog.setFileMode(QFileDialog::AnyFile); + + dialog.setIconProvider(FileIconProvider::iconProvider()); + + if (dialog.exec()) { + FilePaths filePaths = Utils::transform(dialog.selectedFiles(), [](const auto &path) { + return FilePath::fromString(path); + }); + + openFiles(filePaths, ICore::SwitchMode); + } + + settings->setValue(QLatin1String(openFromDeviceDialogKey), dialog.saveState()); + settings->endGroup(); +} + IContext *MainWindow::contextObject(QWidget *widget) const { const auto it = m_contextWidgets.find(widget); @@ -1126,15 +1185,6 @@ void MainWindow::aboutToShutdown() hide(); } -static const char settingsGroup[] = "MainWindow"; -static const char colorKey[] = "Color"; -static const char askBeforeExitKey[] = "AskBeforeExit"; -static const char windowGeometryKey[] = "WindowGeometry"; -static const char windowStateKey[] = "WindowState"; -static const char modeSelectorLayoutKey[] = "ModeSelectorLayout"; - -static const bool askBeforeExitDefault = false; - void MainWindow::readSettings() { QSettings *settings = PluginManager::settings(); |