forked from qt-creator/qt-creator
IProjectPanelFactores: Use own registration method instead of object pool
Change-Id: I8bfe793e5b5f2ebbb953c986249e4d30261b5e24 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
@@ -31,6 +31,8 @@
|
|||||||
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
|
|
||||||
|
QList<IProjectPanelFactory *> IProjectPanelFactory::s_factories;
|
||||||
|
|
||||||
IProjectPanelFactory::IProjectPanelFactory()
|
IProjectPanelFactory::IProjectPanelFactory()
|
||||||
: m_priority(0),
|
: m_priority(0),
|
||||||
m_supportsFunction(&supportsAllProjects)
|
m_supportsFunction(&supportsAllProjects)
|
||||||
@@ -67,6 +69,17 @@ bool IProjectPanelFactory::supportsAllProjects(Project *)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IProjectPanelFactory::registerFactory(IProjectPanelFactory *factory)
|
||||||
|
{
|
||||||
|
auto it = std::lower_bound(s_factories.begin(), s_factories.end(), factory, &IProjectPanelFactory::prioritySort);
|
||||||
|
s_factories.insert(it, factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<IProjectPanelFactory *> IProjectPanelFactory::factories()
|
||||||
|
{
|
||||||
|
return s_factories;
|
||||||
|
}
|
||||||
|
|
||||||
bool IProjectPanelFactory::supports(Project *project)
|
bool IProjectPanelFactory::supports(Project *project)
|
||||||
{
|
{
|
||||||
return m_supportsFunction(project);
|
return m_supportsFunction(project);
|
||||||
|
|||||||
@@ -34,7 +34,6 @@
|
|||||||
#include "propertiespanel.h"
|
#include "propertiespanel.h"
|
||||||
#include "panelswidget.h"
|
#include "panelswidget.h"
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
@@ -44,9 +43,8 @@ namespace ProjectExplorer {
|
|||||||
class Project;
|
class Project;
|
||||||
class Target;
|
class Target;
|
||||||
|
|
||||||
class PROJECTEXPLORER_EXPORT IProjectPanelFactory : public QObject
|
class PROJECTEXPLORER_EXPORT IProjectPanelFactory
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
IProjectPanelFactory();
|
IProjectPanelFactory();
|
||||||
// simple properties
|
// simple properties
|
||||||
@@ -93,11 +91,16 @@ public:
|
|||||||
|
|
||||||
static bool supportsAllProjects(Project *);
|
static bool supportsAllProjects(Project *);
|
||||||
|
|
||||||
|
static void registerFactory(IProjectPanelFactory *factory);
|
||||||
|
|
||||||
|
static QList<IProjectPanelFactory *> factories();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_priority;
|
int m_priority;
|
||||||
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
|
||||||
|
|||||||
@@ -321,6 +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;
|
||||||
|
qDeleteAll(IProjectPanelFactory::s_factories);
|
||||||
|
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
@@ -476,7 +477,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
|||||||
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);
|
||||||
addAutoReleasedObject(editorSettingsPanelFactory);
|
IProjectPanelFactory::registerFactory(editorSettingsPanelFactory);
|
||||||
|
|
||||||
auto codeStyleSettingsPanelFactory = new IProjectPanelFactory;
|
auto codeStyleSettingsPanelFactory = new IProjectPanelFactory;
|
||||||
codeStyleSettingsPanelFactory->setPriority(40);
|
codeStyleSettingsPanelFactory->setPriority(40);
|
||||||
@@ -484,7 +485,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
|||||||
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);
|
||||||
addAutoReleasedObject(codeStyleSettingsPanelFactory);
|
IProjectPanelFactory::registerFactory(codeStyleSettingsPanelFactory);
|
||||||
|
|
||||||
auto dependenciesPanelFactory = new IProjectPanelFactory;
|
auto dependenciesPanelFactory = new IProjectPanelFactory;
|
||||||
dependenciesPanelFactory->setPriority(50);
|
dependenciesPanelFactory->setPriority(50);
|
||||||
@@ -492,7 +493,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
|||||||
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);
|
||||||
addAutoReleasedObject(dependenciesPanelFactory);
|
IProjectPanelFactory::registerFactory(dependenciesPanelFactory);
|
||||||
|
|
||||||
auto unconfiguredProjectPanel = new IProjectPanelFactory;
|
auto unconfiguredProjectPanel = new IProjectPanelFactory;
|
||||||
unconfiguredProjectPanel->setPriority(-10);
|
unconfiguredProjectPanel->setPriority(-10);
|
||||||
@@ -502,7 +503,7 @@ 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);
|
||||||
addAutoReleasedObject(unconfiguredProjectPanel);
|
IProjectPanelFactory::registerFactory(unconfiguredProjectPanel);
|
||||||
|
|
||||||
auto targetSettingsPanelFactory = new IProjectPanelFactory;
|
auto targetSettingsPanelFactory = new IProjectPanelFactory;
|
||||||
targetSettingsPanelFactory->setPriority(-10);
|
targetSettingsPanelFactory->setPriority(-10);
|
||||||
@@ -515,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);
|
||||||
});
|
});
|
||||||
addAutoReleasedObject(targetSettingsPanelFactory);
|
IProjectPanelFactory::registerFactory(targetSettingsPanelFactory);
|
||||||
|
|
||||||
addAutoReleasedObject(new ProcessStepFactory);
|
addAutoReleasedObject(new ProcessStepFactory);
|
||||||
|
|
||||||
|
|||||||
@@ -120,10 +120,8 @@ void ProjectWindow::projectUpdated(Project *p)
|
|||||||
|
|
||||||
QStringList ProjectWindow::tabDisplayNamesFor(Project *project)
|
QStringList ProjectWindow::tabDisplayNamesFor(Project *project)
|
||||||
{
|
{
|
||||||
QList<IProjectPanelFactory *> factories = ExtensionSystem::PluginManager::getObjects<IProjectPanelFactory>();
|
|
||||||
Utils::sort(factories, &IProjectPanelFactory::prioritySort);
|
|
||||||
QStringList subTabs;
|
QStringList subTabs;
|
||||||
foreach (IProjectPanelFactory *panelFactory, factories) {
|
foreach (IProjectPanelFactory *panelFactory, IProjectPanelFactory::factories()) {
|
||||||
if (panelFactory->supports(project))
|
if (panelFactory->supports(project))
|
||||||
subTabs << panelFactory->displayName();
|
subTabs << panelFactory->displayName();
|
||||||
}
|
}
|
||||||
@@ -218,9 +216,7 @@ void ProjectWindow::showProperties(int index, int subIndex)
|
|||||||
int pos = 0;
|
int pos = 0;
|
||||||
IProjectPanelFactory *fac = 0;
|
IProjectPanelFactory *fac = 0;
|
||||||
|
|
||||||
QList<IProjectPanelFactory *> factories = ExtensionSystem::PluginManager::getObjects<IProjectPanelFactory>();
|
foreach (IProjectPanelFactory *panelFactory, IProjectPanelFactory::factories()) {
|
||||||
Utils::sort(factories, &IProjectPanelFactory::prioritySort);
|
|
||||||
foreach (IProjectPanelFactory *panelFactory, factories) {
|
|
||||||
if (panelFactory->supports(project)) {
|
if (panelFactory->supports(project)) {
|
||||||
if (subIndex == pos) {
|
if (subIndex == pos) {
|
||||||
fac = panelFactory;
|
fac = panelFactory;
|
||||||
|
|||||||
Reference in New Issue
Block a user