From dc5717bd0669f91c265eedf3db00a3e7217e287d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 21 Oct 2021 15:39:28 +0200 Subject: [PATCH] Move File System view to Core plugin So it can be accessed from a wider range of places. Change-Id: I282883addecf7bb070a65d9f4f7b8e6e2e4b5e47 Reviewed-by: Qt CI Bot Reviewed-by: David Schulz --- src/plugins/coreplugin/CMakeLists.txt | 2 ++ src/plugins/coreplugin/coreplugin.cpp | 4 ++++ src/plugins/coreplugin/coreplugin.h | 5 ++++ src/plugins/coreplugin/coreplugin.pro | 6 +++-- src/plugins/coreplugin/coreplugin.qbs | 2 ++ .../foldernavigationwidget.cpp | 21 +++++++++------- .../foldernavigationwidget.h | 23 ++++++++++-------- src/plugins/projectexplorer/CMakeLists.txt | 1 - .../projectexplorer/projectexplorer.cpp | 15 ++++++------ .../projectexplorer/projectexplorer.pro | 2 -- .../projectexplorer/projectexplorer.qbs | 1 - src/plugins/projectexplorer/session.cpp | 2 +- src/plugins/texteditor/texteditorplugin.cpp | 24 +++++++++++++++---- 13 files changed, 71 insertions(+), 37 deletions(-) rename src/plugins/{projectexplorer => coreplugin}/foldernavigationwidget.cpp (99%) rename src/plugins/{projectexplorer => coreplugin}/foldernavigationwidget.h (91%) diff --git a/src/plugins/coreplugin/CMakeLists.txt b/src/plugins/coreplugin/CMakeLists.txt index 29598a3ca18..9f88488c29d 100644 --- a/src/plugins/coreplugin/CMakeLists.txt +++ b/src/plugins/coreplugin/CMakeLists.txt @@ -83,6 +83,8 @@ add_qtc_plugin(Core find/searchresultwindow.cpp find/searchresultwindow.h find/textfindconstants.h findplaceholder.cpp findplaceholder.h + foldernavigationwidget.cpp + foldernavigationwidget.h generalsettings.cpp generalsettings.h generalsettings.ui generatedfile.cpp generatedfile.h helpitem.cpp helpitem.h diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp index 3043a7dd1e6..f4019500157 100644 --- a/src/plugins/coreplugin/coreplugin.cpp +++ b/src/plugins/coreplugin/coreplugin.cpp @@ -26,6 +26,7 @@ #include "coreplugin.h" #include "designmode.h" #include "editmode.h" +#include "foldernavigationwidget.h" #include "helpmanager.h" #include "icore.h" #include "idocument.h" @@ -104,6 +105,7 @@ CorePlugin::~CorePlugin() Find::destroy(); delete m_locator; + delete m_folderNavigationWidgetFactory; delete m_editMode; DesignMode::destroyModeIfRequired(); @@ -176,6 +178,8 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage) m_editMode = new EditMode; ModeManager::activateMode(m_editMode->id()); + m_folderNavigationWidgetFactory = new FolderNavigationWidgetFactory; + IWizardFactory::initialize(); // Make sure we respect the process's umask when creating new files diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h index 36a368c6c0f..0e8394eeeb6 100644 --- a/src/plugins/coreplugin/coreplugin.h +++ b/src/plugins/coreplugin/coreplugin.h @@ -25,6 +25,7 @@ #pragma once +#include "foldernavigationwidget.h" #include #include @@ -39,6 +40,9 @@ class PathChooser; } namespace Core { + +class FolderNavigationWidgetFactory; + namespace Internal { class EditMode; @@ -92,6 +96,7 @@ private: MainWindow *m_mainWindow = nullptr; EditMode *m_editMode = nullptr; Locator *m_locator = nullptr; + FolderNavigationWidgetFactory *m_folderNavigationWidgetFactory; Utils::Environment m_startupSystemEnvironment; Utils::EnvironmentItems m_environmentChanges; }; diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index 39f2476a30e..3a08ec5dbda 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -111,7 +111,8 @@ SOURCES += corejsextensions.cpp \ menubarfilter.cpp \ welcomepagehelper.cpp \ dialogs/codecselector.cpp \ - plugininstallwizard.cpp + plugininstallwizard.cpp \ + foldernavigationwidget.cpp HEADERS += corejsextensions.h \ mainwindow.h \ @@ -225,7 +226,8 @@ HEADERS += corejsextensions.h \ editormanager/ieditorfactory_p.h \ welcomepagehelper.h \ dialogs/codecselector.h \ - plugininstallwizard.h + plugininstallwizard.h \ + foldernavigationwidget.h FORMS += dialogs/newdialog.ui \ dialogs/saveitemsdialog.ui \ diff --git a/src/plugins/coreplugin/coreplugin.qbs b/src/plugins/coreplugin/coreplugin.qbs index 177ed1a1f53..cb8cb2977f9 100644 --- a/src/plugins/coreplugin/coreplugin.qbs +++ b/src/plugins/coreplugin/coreplugin.qbs @@ -71,6 +71,8 @@ Project { "fileutils.h", "findplaceholder.cpp", "findplaceholder.h", + "foldernavigationwidget.cpp", + "foldernavigationwidget.h", "generalsettings.cpp", "generalsettings.h", "generalsettings.ui", diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/coreplugin/foldernavigationwidget.cpp similarity index 99% rename from src/plugins/projectexplorer/foldernavigationwidget.cpp rename to src/plugins/coreplugin/foldernavigationwidget.cpp index 00ce540697b..931505d137d 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.cpp +++ b/src/plugins/coreplugin/foldernavigationwidget.cpp @@ -90,8 +90,7 @@ const char ADDNEWFILE[] = "QtCreator.FileSystem.AddNewFile"; const char RENAMEFILE[] = "QtCreator.FileSystem.RenameFile"; const char REMOVEFILE[] = "QtCreator.FileSystem.RemoveFile"; -namespace ProjectExplorer { -namespace Internal { +namespace Core { static FolderNavigationWidgetFactory *m_instance = nullptr; @@ -100,6 +99,13 @@ QVector Utils::FilePath FolderNavigationWidgetFactory::m_fallbackSyncFilePath; +FolderNavigationWidgetFactory *FolderNavigationWidgetFactory::instance() +{ + return m_instance; +} + +namespace Internal { + static QWidget *createHLine() { auto widget = new QFrame; @@ -240,6 +246,10 @@ static bool isChildOf(const QModelIndex &index, const QModelIndex &parent) return false; } +} // namespace Internal + +using namespace Internal; + /*! \class FolderNavigationWidget @@ -686,12 +696,6 @@ void FolderNavigationWidget::contextMenuEvent(QContextMenuEvent *ev) if (m_fileSystemModel->flags(current) & Qt::ItemIsEditable) menu.addAction(Core::ActionManager::command(RENAMEFILE)->action()); newFolder = menu.addAction(tr("New Folder")); - if (!isDir && Core::DiffService::instance()) { - menu.addAction( - TextEditor::TextDocument::createDiffAgainstCurrentFileAction(&menu, [filePath]() { - return filePath; - })); - } } menu.addSeparator(); @@ -956,5 +960,4 @@ void DelayedFileCrumbLabel::setScrollBarOnce() const that->m_bar.clear(); } -} // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/foldernavigationwidget.h b/src/plugins/coreplugin/foldernavigationwidget.h similarity index 91% rename from src/plugins/projectexplorer/foldernavigationwidget.h rename to src/plugins/coreplugin/foldernavigationwidget.h index 8b823a63e19..dbc3baec370 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.h +++ b/src/plugins/coreplugin/foldernavigationwidget.h @@ -25,7 +25,9 @@ #pragma once -#include +#include "core_global.h" +#include "inavigationwidgetfactory.h" + #include #include @@ -51,12 +53,13 @@ class QModelIndex; class QSortFilterProxyModel; QT_END_NAMESPACE -namespace ProjectExplorer { +namespace Core { + namespace Internal { - class DelayedFileCrumbLabel; +} // namespace Internal -class FolderNavigationWidgetFactory : public Core::INavigationWidgetFactory +class CORE_EXPORT FolderNavigationWidgetFactory : public Core::INavigationWidgetFactory { Q_OBJECT @@ -69,6 +72,8 @@ public: QIcon icon; }; + static FolderNavigationWidgetFactory *instance(); + FolderNavigationWidgetFactory(); Core::NavigationView createWidget() override; @@ -99,7 +104,7 @@ private: static Utils::FilePath m_fallbackSyncFilePath; }; -class FolderNavigationWidget : public QWidget +class CORE_EXPORT FolderNavigationWidget : public QWidget { Q_OBJECT Q_PROPERTY(bool autoSynchronization READ autoSynchronization WRITE setAutoSynchronization) @@ -136,8 +141,7 @@ private: void setRootAutoSynchronization(bool sync); void setHiddenFilesFilter(bool filter); void selectBestRootForFile(const Utils::FilePath &filePath); - void handleCurrentEditorChanged(Core::IEditor *editor); - void selectFile(const Utils::FilePath &filePath); + void handleCurrentEditorChanged(Core::IEditor *editor); void selectFile(const Utils::FilePath &filePath); void setRootDirectory(const Utils::FilePath &directory); int bestRootForFile(const Utils::FilePath &filePath); void openItem(const QModelIndex &index); @@ -155,11 +159,10 @@ private: QToolButton *m_toggleRootSync = nullptr; QComboBox *m_rootSelector = nullptr; QWidget *m_crumbContainer = nullptr; - DelayedFileCrumbLabel *m_crumbLabel = nullptr; + Internal::DelayedFileCrumbLabel *m_crumbLabel = nullptr; // FolderNavigationWidgetFactory needs private members to build a menu friend class FolderNavigationWidgetFactory; }; -} // namespace Internal -} // namespace ProjectExplorer +} // namespace Core diff --git a/src/plugins/projectexplorer/CMakeLists.txt b/src/plugins/projectexplorer/CMakeLists.txt index 5454d11da75..2dcfabdae9f 100644 --- a/src/plugins/projectexplorer/CMakeLists.txt +++ b/src/plugins/projectexplorer/CMakeLists.txt @@ -82,7 +82,6 @@ add_qtc_plugin(ProjectExplorer filesinallprojectsfind.h filesinallprojectsfind.cpp filterkitaspectsdialog.cpp filterkitaspectsdialog.h - foldernavigationwidget.cpp foldernavigationwidget.h gccparser.cpp gccparser.h gcctoolchain.cpp gcctoolchain.h gcctoolchainfactories.h diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index c9fcf0ff269..934a7b87b5d 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -63,7 +63,6 @@ #include "devicesupport/sshsettingspage.h" #include "editorsettingspropertiespage.h" #include "filesinallprojectsfind.h" -#include "foldernavigationwidget.h" #include "jsonwizard/jsonwizardfactory.h" #include "jsonwizard/jsonwizardgeneratorfactory.h" #include "jsonwizard/jsonwizardpagefactory_p.h" @@ -117,6 +116,7 @@ #include #include #include +#include #include #include #include @@ -665,7 +665,6 @@ public: CustomParsersSettingsPage m_customParsersSettingsPage; ProjectTreeWidgetFactory m_projectTreeFactory; - FolderNavigationWidgetFactory m_folderNavigationWidgetFactory; DefaultDeployConfigurationFactory m_defaultDeployConfigFactory; IDocumentFactory m_documentFactory; @@ -2934,7 +2933,8 @@ ProjectExplorerPluginPrivate::ProjectExplorerPluginPrivate() {} void ProjectExplorerPluginPrivate::extendFolderNavigationWidgetFactory() { - connect(&m_folderNavigationWidgetFactory, + auto folderNavigationWidgetFactory = FolderNavigationWidgetFactory::instance(); + connect(folderNavigationWidgetFactory, &FolderNavigationWidgetFactory::aboutToShowContextMenu, this, [this](QMenu *menu, const FilePath &filePath, bool isDir) { @@ -2955,7 +2955,7 @@ void ProjectExplorerPluginPrivate::extendFolderNavigationWidgetFactory() }); } }); - connect(&m_folderNavigationWidgetFactory, + connect(folderNavigationWidgetFactory, &FolderNavigationWidgetFactory::fileRenamed, this, [](const FilePath &before, const FilePath &after) { @@ -2979,7 +2979,7 @@ void ProjectExplorerPluginPrivate::extendFolderNavigationWidgetFactory() }); } }); - connect(&m_folderNavigationWidgetFactory, + connect(folderNavigationWidgetFactory, &FolderNavigationWidgetFactory::aboutToRemoveFile, this, [](const FilePath &filePath) { @@ -3846,8 +3846,9 @@ void ProjectExplorerPluginPrivate::showInFileSystemPane() { Node *currentNode = ProjectTree::currentNode(); QTC_ASSERT(currentNode, return ); - QWidget *widget = NavigationWidget::activateSubWidget(m_folderNavigationWidgetFactory.id(), - Side::Left); + QWidget *widget + = NavigationWidget::activateSubWidget(FolderNavigationWidgetFactory::instance()->id(), + Side::Left); if (auto *navWidget = qobject_cast(widget)) navWidget->syncWithFilePath(currentNode->filePath()); } diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 48b46c69e7f..3e18ef3d785 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -85,7 +85,6 @@ HEADERS += projectexplorer.h \ applicationlauncher.h \ runsettingspropertiespage.h \ projecttreewidget.h \ - foldernavigationwidget.h \ buildprogress.h \ projectnodes.h \ sessiondialog.h \ @@ -239,7 +238,6 @@ SOURCES += projectexplorer.cpp \ applicationlauncher.cpp \ runsettingspropertiespage.cpp \ projecttreewidget.cpp \ - foldernavigationwidget.cpp \ buildprogress.cpp \ projectnodes.cpp \ sessiondialog.cpp \ diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs index dc078bacda0..32585f22741 100644 --- a/src/plugins/projectexplorer/projectexplorer.qbs +++ b/src/plugins/projectexplorer/projectexplorer.qbs @@ -74,7 +74,6 @@ Project { "fileinsessionfinder.cpp", "fileinsessionfinder.h", "filesinallprojectsfind.cpp", "filesinallprojectsfind.h", "filterkitaspectsdialog.cpp", "filterkitaspectsdialog.h", - "foldernavigationwidget.cpp", "foldernavigationwidget.h", "gccparser.cpp", "gccparser.h", "gcctoolchain.cpp", "gcctoolchain.h", "gcctoolchainfactories.h", diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 32b72b8508d..e94debf9048 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -28,7 +28,6 @@ #include "buildconfiguration.h" #include "deployconfiguration.h" #include "editorconfiguration.h" -#include "foldernavigationwidget.h" #include "kit.h" #include "project.h" #include "projectexplorer.h" @@ -37,6 +36,7 @@ #include #include +#include #include #include #include diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp index 977173424c6..6613b43a70e 100644 --- a/src/plugins/texteditor/texteditorplugin.cpp +++ b/src/plugins/texteditor/texteditorplugin.cpp @@ -34,15 +34,18 @@ #include "outlinefactory.h" #include "plaintexteditorfactory.h" #include "snippets/snippetprovider.h" +#include "textdocument.h" #include "texteditor.h" #include "texteditoractionhandler.h" #include "texteditorsettings.h" -#include -#include #include +#include #include +#include #include +#include +#include #include #include @@ -165,13 +168,26 @@ bool TextEditorPlugin::initialize(const QStringList &arguments, QString *errorMe tr("Text", "SnippetProvider")); d->createStandardContextMenu(); + return true; } void TextEditorPluginPrivate::extensionsInitialized() { - connect(&settings, &TextEditorSettings::fontSettingsChanged, - this, &TextEditorPluginPrivate::updateSearchResultsFont); + connect(FolderNavigationWidgetFactory::instance(), + &FolderNavigationWidgetFactory::aboutToShowContextMenu, + this, + [](QMenu *menu, const FilePath &filePath, bool isDir) { + if (!isDir && Core::DiffService::instance()) { + menu->addAction(TextEditor::TextDocument::createDiffAgainstCurrentFileAction( + menu, [filePath]() { return filePath; })); + } + }); + + connect(&settings, + &TextEditorSettings::fontSettingsChanged, + this, + &TextEditorPluginPrivate::updateSearchResultsFont); updateSearchResultsFont(TextEditorSettings::fontSettings());