diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp index 441b92cef1b..2f9859d943d 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.cpp +++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include @@ -392,6 +393,20 @@ void FolderNavigationWidget::removeRootDirectory(const QString &id) setCurrentEditor(Core::EditorManager::currentEditor()); } +void FolderNavigationWidget::addNewItem() +{ + const QModelIndex current = m_listView->currentIndex(); + if (!current.isValid()) + return; + const auto filePath = Utils::FileName::fromString(m_fileSystemModel->filePath(current)); + const Utils::FileName path = filePath.toFileInfo().isDir() ? filePath : filePath.parentDir(); + Core::ICore::showNewItemDialog(ProjectExplorerPlugin::tr("New File", "Title of dialog"), + Utils::filtered(Core::IWizardFactory::allWizardFactories(), + Utils::equal(&Core::IWizardFactory::kind, + Core::IWizardFactory::FileWizard)), + path.toString()); +} + void FolderNavigationWidget::editCurrentItem() { const QModelIndex current = m_listView->currentIndex(); @@ -608,6 +623,7 @@ void FolderNavigationWidget::contextMenuEvent(QContextMenuEvent *ev) Core::EditorManager::addNativeDirAndOpenWithActions(&menu, &fakeEntry); if (hasCurrentItem) { + menu.addAction(Core::ActionManager::command(Constants::ADDNEWFILE)->action()); if (!isDir) menu.addAction(Core::ActionManager::command(Constants::REMOVEFILE)->action()); if (m_fileSystemModel->flags(current) & Qt::ItemIsEditable) @@ -772,6 +788,13 @@ void FolderNavigationWidgetFactory::registerActions() { Core::Context context(C_FOLDERNAVIGATIONWIDGET); + auto add = new QAction(this); + Core::ActionManager::registerAction(add, Constants::ADDNEWFILE, context); + connect(add, &QAction::triggered, Core::ICore::instance(), [] { + if (auto navWidget = currentFolderNavigationWidget()) + navWidget->addNewItem(); + }); + auto rename = new QAction(this); Core::ActionManager::registerAction(rename, Constants::RENAMEFILE, context); connect(rename, &QAction::triggered, Core::ICore::instance(), [] { diff --git a/src/plugins/projectexplorer/foldernavigationwidget.h b/src/plugins/projectexplorer/foldernavigationwidget.h index ba95bd3a753..7cf9900fb88 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.h +++ b/src/plugins/projectexplorer/foldernavigationwidget.h @@ -106,6 +106,7 @@ public: void insertRootDirectory(const FolderNavigationWidgetFactory::RootDirectory &directory); void removeRootDirectory(const QString &id); + void addNewItem(); void editCurrentItem(); void removeCurrentItem(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index a8568564189..ea8794cdd48 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -199,7 +199,6 @@ const char CANCELBUILD[] = "ProjectExplorer.CancelBuild"; const char RUN[] = "ProjectExplorer.Run"; const char RUNWITHOUTDEPLOY[] = "ProjectExplorer.RunWithoutDeploy"; const char RUNCONTEXTMENU[] = "ProjectExplorer.RunContextMenu"; -const char ADDNEWFILE[] = "ProjectExplorer.AddNewFile"; const char ADDEXISTINGFILES[] = "ProjectExplorer.AddExistingFiles"; const char ADDEXISTINGDIRECTORY[] = "ProjectExplorer.AddExistingDirectory"; const char ADDNEWSUBPROJECT[] = "ProjectExplorer.AddNewSubproject"; @@ -3119,7 +3118,7 @@ void ProjectExplorerPluginPrivate::addNewFile() map.insert(QLatin1String(Constants::PROJECT_KIT_IDS), QVariant::fromValue(profileIds)); map.insert(Constants::PROJECT_POINTER, QVariant::fromValue(static_cast(p))); } - ICore::showNewItemDialog(tr("New File", "Title of dialog"), + ICore::showNewItemDialog(ProjectExplorerPlugin::tr("New File", "Title of dialog"), Utils::filtered(IWizardFactory::allWizardFactories(), [](IWizardFactory *f) { return f->supportedProjectTypes().isEmpty(); diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h index e72c964cfe3..79169c59582 100644 --- a/src/plugins/projectexplorer/projectexplorerconstants.h +++ b/src/plugins/projectexplorer/projectexplorerconstants.h @@ -36,6 +36,7 @@ const char MODE_SESSION[] = "Project"; // Actions const char BUILD[] = "ProjectExplorer.Build"; const char STOP[] = "ProjectExplorer.Stop"; +const char ADDNEWFILE[] = "ProjectExplorer.AddNewFile"; const char RENAMEFILE[] = "ProjectExplorer.RenameFile"; const char REMOVEFILE[] = "ProjectExplorer.RemoveFile";