ProjectExplorer: Further clean up of IProjectPanelFactory

Rename to ProjectPanelFactory, hide list of factories from .h,
rename include guards.

Change-Id: I2e0befcaf847e5c3a0b493b58e7bcf3e9263f4f9
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
hjk
2014-07-28 14:35:53 +02:00
parent 1a1ddf1d82
commit 15fcdabc1d
7 changed files with 52 additions and 60 deletions

View File

@@ -41,7 +41,7 @@
#include <cpptools/cppmodelmanager.h> #include <cpptools/cppmodelmanager.h>
#include <projectexplorer/iprojectpanelfactory.h> #include <projectexplorer/projectpanelfactory.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
#include <projectexplorer/session.h> #include <projectexplorer/session.h>
@@ -55,12 +55,12 @@ bool ClangCodeModelPlugin::initialize(const QStringList &arguments, QString *err
Q_UNUSED(arguments) Q_UNUSED(arguments)
Q_UNUSED(errorMessage) Q_UNUSED(errorMessage)
auto panelFactory = new ProjectExplorer::IProjectPanelFactory(); auto panelFactory = new ProjectExplorer::ProjectPanelFactory();
panelFactory->setPriority(60); panelFactory->setPriority(60);
panelFactory->setDisplayName(ClangProjectSettingsWidget::tr("Clang Settings")); panelFactory->setDisplayName(ClangProjectSettingsWidget::tr("Clang Settings"));
panelFactory->setSimpleCreateWidgetFunction<ClangProjectSettingsWidget>(QIcon()); panelFactory->setSimpleCreateWidgetFunction<ClangProjectSettingsWidget>(QIcon());
ProjectExplorer::IProjectPanelFactory::registerFactory(panelFactory); ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory);
ClangCodeModel::Internal::initializeClang(); ClangCodeModel::Internal::initializeClang();

View File

@@ -84,7 +84,7 @@
#include "devicesupport/devicemanager.h" #include "devicesupport/devicemanager.h"
#include "devicesupport/devicesettingspage.h" #include "devicesupport/devicesettingspage.h"
#include "targetsettingspanel.h" #include "targetsettingspanel.h"
#include "iprojectpanelfactory.h" #include "projectpanelfactory.h"
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
# include "windebuginterface.h" # include "windebuginterface.h"
@@ -321,7 +321,7 @@ ProjectExplorerPlugin::~ProjectExplorerPlugin()
// Force sequence of deletion: // Force sequence of deletion:
delete d->m_kitManager; // remove all the profile informations delete d->m_kitManager; // remove all the profile informations
delete d->m_toolChainManager; delete d->m_toolChainManager;
IProjectPanelFactory::destroyFactories(); ProjectPanelFactory::destroyFactories();
delete d; delete d;
} }
@@ -471,31 +471,31 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
addAutoReleasedObject(new CurrentProjectFilter); addAutoReleasedObject(new CurrentProjectFilter);
// ProjectPanelFactories // ProjectPanelFactories
auto editorSettingsPanelFactory = new IProjectPanelFactory; auto editorSettingsPanelFactory = new ProjectPanelFactory;
editorSettingsPanelFactory->setPriority(30); editorSettingsPanelFactory->setPriority(30);
QString displayName = QCoreApplication::translate("EditorSettingsPanelFactory", "Editor"); QString displayName = QCoreApplication::translate("EditorSettingsPanelFactory", "Editor");
editorSettingsPanelFactory->setDisplayName(displayName); editorSettingsPanelFactory->setDisplayName(displayName);
QIcon icon = QIcon(QLatin1String(":/projectexplorer/images/EditorSettings.png")); QIcon icon = QIcon(QLatin1String(":/projectexplorer/images/EditorSettings.png"));
editorSettingsPanelFactory->setSimpleCreateWidgetFunction<EditorSettingsWidget>(icon); editorSettingsPanelFactory->setSimpleCreateWidgetFunction<EditorSettingsWidget>(icon);
IProjectPanelFactory::registerFactory(editorSettingsPanelFactory); ProjectPanelFactory::registerFactory(editorSettingsPanelFactory);
auto codeStyleSettingsPanelFactory = new IProjectPanelFactory; auto codeStyleSettingsPanelFactory = new ProjectPanelFactory;
codeStyleSettingsPanelFactory->setPriority(40); codeStyleSettingsPanelFactory->setPriority(40);
displayName = QCoreApplication::translate("CodeStyleSettingsPanelFactory", "Code Style"); displayName = QCoreApplication::translate("CodeStyleSettingsPanelFactory", "Code Style");
codeStyleSettingsPanelFactory->setDisplayName(displayName); codeStyleSettingsPanelFactory->setDisplayName(displayName);
icon = QIcon(QLatin1String(":/projectexplorer/images/CodeStyleSettings.png")); icon = QIcon(QLatin1String(":/projectexplorer/images/CodeStyleSettings.png"));
codeStyleSettingsPanelFactory->setSimpleCreateWidgetFunction<CodeStyleSettingsWidget>(icon); codeStyleSettingsPanelFactory->setSimpleCreateWidgetFunction<CodeStyleSettingsWidget>(icon);
IProjectPanelFactory::registerFactory(codeStyleSettingsPanelFactory); ProjectPanelFactory::registerFactory(codeStyleSettingsPanelFactory);
auto dependenciesPanelFactory = new IProjectPanelFactory; auto dependenciesPanelFactory = new ProjectPanelFactory;
dependenciesPanelFactory->setPriority(50); dependenciesPanelFactory->setPriority(50);
displayName = QCoreApplication::translate("DependenciesPanelFactory", "Dependencies"); displayName = QCoreApplication::translate("DependenciesPanelFactory", "Dependencies");
dependenciesPanelFactory->setDisplayName(displayName); dependenciesPanelFactory->setDisplayName(displayName);
icon = QIcon(QLatin1String(":/projectexplorer/images/ProjectDependencies.png")); icon = QIcon(QLatin1String(":/projectexplorer/images/ProjectDependencies.png"));
dependenciesPanelFactory->setSimpleCreateWidgetFunction<DependenciesWidget>(icon); dependenciesPanelFactory->setSimpleCreateWidgetFunction<DependenciesWidget>(icon);
IProjectPanelFactory::registerFactory(dependenciesPanelFactory); ProjectPanelFactory::registerFactory(dependenciesPanelFactory);
auto unconfiguredProjectPanel = new IProjectPanelFactory; auto unconfiguredProjectPanel = new ProjectPanelFactory;
unconfiguredProjectPanel->setPriority(-10); unconfiguredProjectPanel->setPriority(-10);
unconfiguredProjectPanel->setDisplayName(tr("Configure Project")); unconfiguredProjectPanel->setDisplayName(tr("Configure Project"));
unconfiguredProjectPanel->setSupportsFunction([](Project *project){ unconfiguredProjectPanel->setSupportsFunction([](Project *project){
@@ -503,9 +503,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
}); });
icon = QIcon(QLatin1String(":/projectexplorer/images/unconfigured.png")); icon = QIcon(QLatin1String(":/projectexplorer/images/unconfigured.png"));
unconfiguredProjectPanel->setSimpleCreateWidgetFunction<TargetSetupPageWrapper>(icon); unconfiguredProjectPanel->setSimpleCreateWidgetFunction<TargetSetupPageWrapper>(icon);
IProjectPanelFactory::registerFactory(unconfiguredProjectPanel); ProjectPanelFactory::registerFactory(unconfiguredProjectPanel);
auto targetSettingsPanelFactory = new IProjectPanelFactory; auto targetSettingsPanelFactory = new ProjectPanelFactory;
targetSettingsPanelFactory->setPriority(-10); targetSettingsPanelFactory->setPriority(-10);
displayName = QCoreApplication::translate("TargetSettingsPanelFactory", "Build & Run"); displayName = QCoreApplication::translate("TargetSettingsPanelFactory", "Build & Run");
targetSettingsPanelFactory->setDisplayName(displayName); targetSettingsPanelFactory->setDisplayName(displayName);
@@ -516,7 +516,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
targetSettingsPanelFactory->setCreateWidgetFunction([](Project *project) { targetSettingsPanelFactory->setCreateWidgetFunction([](Project *project) {
return new TargetSettingsPanelWidget(project); return new TargetSettingsPanelWidget(project);
}); });
IProjectPanelFactory::registerFactory(targetSettingsPanelFactory); ProjectPanelFactory::registerFactory(targetSettingsPanelFactory);
addAutoReleasedObject(new ProcessStepFactory); addAutoReleasedObject(new ProcessStepFactory);

View File

@@ -149,7 +149,7 @@ HEADERS += projectexplorer.h \
xcodebuildparser.h \ xcodebuildparser.h \
propertiespanel.h \ propertiespanel.h \
panelswidget.h \ panelswidget.h \
iprojectpanelfactory.h projectpanelfactory.h
SOURCES += projectexplorer.cpp \ SOURCES += projectexplorer.cpp \
abi.cpp \ abi.cpp \
@@ -286,7 +286,7 @@ SOURCES += projectexplorer.cpp \
xcodebuildparser.cpp \ xcodebuildparser.cpp \
propertiespanel.cpp \ propertiespanel.cpp \
panelswidget.cpp \ panelswidget.cpp \
iprojectpanelfactory.cpp projectpanelfactory.cpp
FORMS += processstep.ui \ FORMS += processstep.ui \
editorsettingspropertiespage.ui \ editorsettingspropertiespage.ui \

View File

@@ -85,7 +85,6 @@ QtcPlugin {
"ipotentialkit.cpp", "ipotentialkit.cpp",
"ipotentialkit.h", "ipotentialkit.h",
"iprojectmanager.h", "iprojectmanager.h",
"iprojectpanelfactory.cpp", "iprojectpanelfactory.h",
"itaskhandler.h", "itaskhandler.h",
"kit.cpp", "kit.h", "kit.cpp", "kit.h",
"kitchooser.cpp", "kitchooser.h", "kitchooser.cpp", "kitchooser.h",
@@ -122,6 +121,7 @@ QtcPlugin {
"projectmacroexpander.cpp", "projectmacroexpander.h", "projectmacroexpander.cpp", "projectmacroexpander.h",
"projectmodels.cpp", "projectmodels.h", "projectmodels.cpp", "projectmodels.h",
"projectnodes.cpp", "projectnodes.h", "projectnodes.cpp", "projectnodes.h",
"projectpanelfactory.cpp", "projectpanelfactory.h",
"projecttreewidget.cpp", "projecttreewidget.h", "projecttreewidget.cpp", "projecttreewidget.h",
"projectwindow.cpp", "projectwindow.h", "projectwindow.cpp", "projectwindow.h",
"projectwizardpage.cpp", "projectwizardpage.h", "projectwizardpage.ui", "projectwizardpage.cpp", "projectwizardpage.h", "projectwizardpage.ui",

View File

@@ -27,74 +27,71 @@
** **
****************************************************************************/ ****************************************************************************/
#include "iprojectpanelfactory.h" #include "projectpanelfactory.h"
using namespace ProjectExplorer; namespace ProjectExplorer {
QList<IProjectPanelFactory *> IProjectPanelFactory::s_factories; static QList<ProjectPanelFactory *> s_factories;
IProjectPanelFactory::IProjectPanelFactory() ProjectPanelFactory::ProjectPanelFactory()
: m_priority(0), : m_priority(0),
m_supportsFunction(&supportsAllProjects) m_supportsFunction([] (Project *) { return true; })
{} {}
int IProjectPanelFactory::priority() const int ProjectPanelFactory::priority() const
{ {
return m_priority; return m_priority;
} }
void IProjectPanelFactory::setPriority(int priority) void ProjectPanelFactory::setPriority(int priority)
{ {
m_priority = priority; m_priority = priority;
} }
QString IProjectPanelFactory::displayName() const QString ProjectPanelFactory::displayName() const
{ {
return m_displayName; return m_displayName;
} }
void IProjectPanelFactory::setDisplayName(const QString &name) void ProjectPanelFactory::setDisplayName(const QString &name)
{ {
m_displayName = name; m_displayName = name;
} }
bool IProjectPanelFactory::supportsAllProjects(Project *) void ProjectPanelFactory::registerFactory(ProjectPanelFactory *factory)
{
return true;
}
void IProjectPanelFactory::registerFactory(IProjectPanelFactory *factory)
{ {
auto it = std::lower_bound(s_factories.begin(), s_factories.end(), factory, auto it = std::lower_bound(s_factories.begin(), s_factories.end(), factory,
[](IProjectPanelFactory *a, IProjectPanelFactory *b) { [](ProjectPanelFactory *a, ProjectPanelFactory *b) {
return (a->priority() == b->priority() && a < b) || a->priority() < b->priority(); return (a->priority() == b->priority() && a < b) || a->priority() < b->priority();
}); });
s_factories.insert(it, factory); s_factories.insert(it, factory);
} }
QList<IProjectPanelFactory *> IProjectPanelFactory::factories() QList<ProjectPanelFactory *> ProjectPanelFactory::factories()
{ {
return s_factories; return s_factories;
} }
void IProjectPanelFactory::destroyFactories() void ProjectPanelFactory::destroyFactories()
{ {
qDeleteAll(s_factories); qDeleteAll(s_factories);
s_factories.clear(); s_factories.clear();
} }
bool IProjectPanelFactory::supports(Project *project) bool ProjectPanelFactory::supports(Project *project)
{ {
return m_supportsFunction(project); return m_supportsFunction(project);
} }
void IProjectPanelFactory::setSupportsFunction(std::function<bool (Project *)> function) void ProjectPanelFactory::setSupportsFunction(std::function<bool (Project *)> function)
{ {
m_supportsFunction = function; m_supportsFunction = function;
} }
QWidget *IProjectPanelFactory::createWidget(Project *project) QWidget *ProjectPanelFactory::createWidget(Project *project)
{ {
return m_createWidgetFunction(project); return m_createWidgetFunction(project);
} }
} // namespace ProjectExplorer

View File

@@ -27,27 +27,24 @@
** **
****************************************************************************/ ****************************************************************************/
#ifndef IPROJECTPROPERTIES_H #ifndef PROJECTPANELFACTORY_H
#define IPROJECTPROPERTIES_H #define PROJECTPANELFACTORY_H
#include "projectexplorer_export.h" #include "projectexplorer_export.h"
#include "propertiespanel.h" #include "propertiespanel.h"
#include "panelswidget.h" #include "panelswidget.h"
#include <QIcon>
#include <QWidget>
#include <functional> #include <functional>
namespace ProjectExplorer { namespace ProjectExplorer {
class Project; class Project;
class ProjectExplorerPlugin; class ProjectExplorerPlugin;
class Target;
class PROJECTEXPLORER_EXPORT IProjectPanelFactory class PROJECTEXPLORER_EXPORT ProjectPanelFactory
{ {
public: public:
IProjectPanelFactory(); ProjectPanelFactory();
// simple properties // simple properties
QString displayName() const; QString displayName() const;
@@ -55,11 +52,11 @@ public:
int priority() const; int priority() const;
void setPriority(int priority); void setPriority(int priority);
// interface for users of IProjectPanelFactory // interface for users of ProjectPanelFactory
bool supports(Project *project); bool supports(Project *project);
QWidget *createWidget(ProjectExplorer::Project *project); QWidget *createWidget(Project *project);
// interface for "implementations" of IProjectPanelFactory // interface for "implementations" of ProjectPanelFactory
// by default all projects are supported, only set a custom supports function // by default all projects are supported, only set a custom supports function
// if you need something different // if you need something different
void setSupportsFunction(std::function<bool (Project *)> function); void setSupportsFunction(std::function<bool (Project *)> function);
@@ -88,11 +85,10 @@ public:
m_createWidgetFunction = function; m_createWidgetFunction = function;
} }
static bool supportsAllProjects(Project *); // This takes ownership.
static void registerFactory(ProjectPanelFactory *factory);
static void registerFactory(IProjectPanelFactory *factory); static QList<ProjectPanelFactory *> factories();
static QList<IProjectPanelFactory *> factories();
private: private:
friend class ProjectExplorerPlugin; friend class ProjectExplorerPlugin;
@@ -102,9 +98,8 @@ private:
QString m_displayName; QString m_displayName;
std::function<bool (Project *)> m_supportsFunction; std::function<bool (Project *)> m_supportsFunction;
std::function<QWidget *(Project *)> m_createWidgetFunction; std::function<QWidget *(Project *)> m_createWidgetFunction;
static QList<IProjectPanelFactory *> s_factories;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer
#endif // IPROJECTPROPERTIES_H #endif // PROJECTPANELFACTORY_H

View File

@@ -34,7 +34,7 @@
#include "kitmanager.h" #include "kitmanager.h"
#include "project.h" #include "project.h"
#include "projectexplorer.h" #include "projectexplorer.h"
#include "iprojectpanelfactory.h" #include "projectpanelfactory.h"
#include "session.h" #include "session.h"
#include "target.h" #include "target.h"
@@ -121,7 +121,7 @@ void ProjectWindow::projectUpdated(Project *p)
QStringList ProjectWindow::tabDisplayNamesFor(Project *project) QStringList ProjectWindow::tabDisplayNamesFor(Project *project)
{ {
QStringList subTabs; QStringList subTabs;
foreach (IProjectPanelFactory *panelFactory, IProjectPanelFactory::factories()) { foreach (ProjectPanelFactory *panelFactory, ProjectPanelFactory::factories()) {
if (panelFactory->supports(project)) if (panelFactory->supports(project))
subTabs << panelFactory->displayName(); subTabs << panelFactory->displayName();
} }
@@ -214,9 +214,9 @@ void ProjectWindow::showProperties(int index, int subIndex)
// Set up custom panels again: // Set up custom panels again:
int pos = 0; int pos = 0;
IProjectPanelFactory *fac = 0; ProjectPanelFactory *fac = 0;
foreach (IProjectPanelFactory *panelFactory, IProjectPanelFactory::factories()) { foreach (ProjectPanelFactory *panelFactory, ProjectPanelFactory::factories()) {
if (panelFactory->supports(project)) { if (panelFactory->supports(project)) {
if (subIndex == pos) { if (subIndex == pos) {
fac = panelFactory; fac = panelFactory;