Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tobias Hunger
qt-creator
Commits
8697072c
Commit
8697072c
authored
Dec 06, 2010
by
dt
Browse files
ProjectExplorer: Move ITargetFactory to object pool
Makes multiple target factories per project possible Reviewed-By: hunger
parent
95d7639b
Changes
15
Hide whitespace changes
Inline
Side-by-side
src/plugins/cmakeprojectmanager/cmakeproject.cpp
View file @
8697072c
...
...
@@ -80,7 +80,6 @@ CMakeProject::CMakeProject(CMakeManager *manager, const QString &fileName)
m_fileName
(
fileName
),
m_rootNode
(
new
CMakeProjectNode
(
m_fileName
)),
m_insideFileChanged
(
false
),
m_targetFactory
(
new
CMakeTargetFactory
(
this
)),
m_lastEditor
(
0
)
{
m_file
=
new
CMakeFile
(
this
,
fileName
);
...
...
@@ -454,11 +453,6 @@ Core::IFile *CMakeProject::file() const
return
m_file
;
}
CMakeTargetFactory
*
CMakeProject
::
targetFactory
()
const
{
return
m_targetFactory
;
}
CMakeManager
*
CMakeProject
::
projectManager
()
const
{
return
m_manager
;
...
...
@@ -500,7 +494,10 @@ bool CMakeProject::fromMap(const QVariantMap &map)
bool
hasUserFile
=
activeTarget
();
if
(
!
hasUserFile
)
{
CMakeTarget
*
t
=
targetFactory
()
->
create
(
this
,
QLatin1String
(
DEFAULT_CMAKE_TARGET_ID
));
CMakeTargetFactory
*
factory
=
ExtensionSystem
::
PluginManager
::
instance
()
->
getObject
<
CMakeTargetFactory
>
();
CMakeTarget
*
t
=
factory
->
create
(
this
,
QLatin1String
(
DEFAULT_CMAKE_TARGET_ID
));
Q_ASSERT
(
t
);
Q_ASSERT
(
t
->
activeBuildConfiguration
());
...
...
src/plugins/cmakeprojectmanager/cmakeproject.h
View file @
8697072c
...
...
@@ -78,7 +78,6 @@ public:
QString
displayName
()
const
;
QString
id
()
const
;
Core
::
IFile
*
file
()
const
;
CMakeTargetFactory
*
targetFactory
()
const
;
CMakeManager
*
projectManager
()
const
;
CMakeTarget
*
activeTarget
()
const
;
...
...
@@ -142,7 +141,6 @@ private:
ProjectExplorer
::
FileWatcher
*
m_watcher
;
bool
m_insideFileChanged
;
QSet
<
QString
>
m_watchedFiles
;
CMakeTargetFactory
*
m_targetFactory
;
QFuture
<
void
>
m_codeModelFuture
;
QMap
<
QString
,
CMakeUiCodeModelSupport
*>
m_uiCodeModelSupport
;
...
...
src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp
View file @
8697072c
...
...
@@ -33,6 +33,7 @@
#include
"cmakeeditorfactory.h"
#include
"makestep.h"
#include
"cmakeprojectconstants.h"
#include
"cmaketarget.h"
#include
<coreplugin/icore.h>
#include
<coreplugin/mimedatabase.h>
...
...
@@ -67,6 +68,7 @@ bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString *
=
new
TextEditor
::
TextEditorActionHandler
(
CMakeProjectManager
::
Constants
::
C_CMAKEEDITOR
);
addAutoReleasedObject
(
new
CMakeEditorFactory
(
manager
,
editorHandler
));
addAutoReleasedObject
(
new
CMakeTargetFactory
);
return
true
;
}
...
...
src/plugins/genericprojectmanager/genericproject.cpp
View file @
8697072c
...
...
@@ -64,7 +64,6 @@ const char * const TOOLCHAIN_KEY("GenericProjectManager.GenericProject.Toolchain
GenericProject
::
GenericProject
(
Manager
*
manager
,
const
QString
&
fileName
)
:
m_manager
(
manager
),
m_fileName
(
fileName
),
m_targetFactory
(
new
GenericTargetFactory
(
this
)),
m_toolChain
(
0
)
{
QFileInfo
fileInfo
(
m_fileName
);
...
...
@@ -90,11 +89,6 @@ GenericProject::~GenericProject()
delete
m_toolChain
;
}
GenericTargetFactory
*
GenericProject
::
targetFactory
()
const
{
return
m_targetFactory
;
}
GenericTarget
*
GenericProject
::
activeTarget
()
const
{
return
static_cast
<
GenericTarget
*>
(
Project
::
activeTarget
());
...
...
@@ -444,8 +438,11 @@ bool GenericProject::fromMap(const QVariantMap &map)
}
// Add default setup:
if
(
targets
().
isEmpty
())
addTarget
(
targetFactory
()
->
create
(
this
,
QLatin1String
(
GENERIC_DESKTOP_TARGET_ID
)));
if
(
targets
().
isEmpty
())
{
GenericTargetFactory
*
factory
=
ExtensionSystem
::
PluginManager
::
instance
()
->
getObject
<
GenericTargetFactory
>
();
addTarget
(
factory
->
create
(
this
,
QLatin1String
(
GENERIC_DESKTOP_TARGET_ID
)));
}
ToolChainType
type
=
static_cast
<
ProjectExplorer
::
ToolChainType
>
...
...
src/plugins/genericprojectmanager/genericproject.h
View file @
8697072c
...
...
@@ -57,7 +57,6 @@ namespace Internal {
class
GenericBuildConfiguration
;
class
GenericProject
;
class
GenericTarget
;
class
GenericTargetFactory
;
class
GenericMakeStep
;
class
GenericProjectFile
;
...
...
@@ -76,7 +75,6 @@ public:
QString
displayName
()
const
;
QString
id
()
const
;
Core
::
IFile
*
file
()
const
;
GenericTargetFactory
*
targetFactory
()
const
;
ProjectExplorer
::
IProjectManager
*
projectManager
()
const
;
GenericTarget
*
activeTarget
()
const
;
...
...
@@ -130,7 +128,6 @@ private:
QString
m_configFileName
;
GenericProjectFile
*
m_file
;
QString
m_projectName
;
GenericTargetFactory
*
m_targetFactory
;
QStringList
m_rawFileList
;
QStringList
m_files
;
...
...
src/plugins/genericprojectmanager/genericprojectplugin.cpp
View file @
8697072c
...
...
@@ -33,6 +33,7 @@
#include
"genericprojectconstants.h"
#include
"genericprojectfileseditor.h"
#include
"genericmakestep.h"
#include
"generictarget.h"
#include
<coreplugin/icore.h>
#include
<coreplugin/mimedatabase.h>
...
...
@@ -78,6 +79,7 @@ bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage
addAutoReleasedObject
(
manager
);
addAutoReleasedObject
(
new
GenericMakeStepFactory
);
addAutoReleasedObject
(
new
GenericProjectWizard
);
addAutoReleasedObject
(
new
GenericTargetFactory
);
return
true
;
}
...
...
src/plugins/projectexplorer/project.cpp
View file @
8697072c
...
...
@@ -276,7 +276,19 @@ bool Project::fromMap(const QVariantMap &map)
qWarning
()
<<
key
<<
"was not found in data."
;
return
false
;
}
Target
*
t
(
targetFactory
()
->
restore
(
this
,
map
.
value
(
key
).
toMap
()));
QVariantMap
targetMap
=
map
.
value
(
key
).
toMap
();
QList
<
ITargetFactory
*>
factories
=
ExtensionSystem
::
PluginManager
::
instance
()
->
getObjects
<
ITargetFactory
>
();
Target
*
t
=
0
;
foreach
(
ITargetFactory
*
factory
,
factories
)
{
if
(
factory
->
canRestore
(
this
,
targetMap
))
{
t
=
factory
->
restore
(
this
,
targetMap
);
break
;
}
}
if
(
!
t
)
{
qWarning
()
<<
"Restoration of a target failed! (Continuing)"
;
continue
;
...
...
src/plugins/projectexplorer/project.h
View file @
8697072c
...
...
@@ -94,8 +94,6 @@ public:
void
setActiveTarget
(
Target
*
target
);
Target
*
target
(
const
QString
&
id
)
const
;
virtual
ITargetFactory
*
targetFactory
()
const
=
0
;
void
saveSettings
();
bool
restoreSettings
();
...
...
src/plugins/projectexplorer/targetsettingspanel.cpp
View file @
8697072c
...
...
@@ -200,7 +200,17 @@ void TargetSettingsPanelWidget::currentTargetChanged(int targetIndex, int subInd
void
TargetSettingsPanelWidget
::
addTarget
(
QAction
*
action
)
{
QString
id
=
action
->
data
().
toString
();
Target
*
target
(
m_project
->
targetFactory
()
->
create
(
m_project
,
id
));
QList
<
ITargetFactory
*>
factories
=
ExtensionSystem
::
PluginManager
::
instance
()
->
getObjects
<
ITargetFactory
>
();
Target
*
target
=
0
;
foreach
(
ITargetFactory
*
fac
,
factories
)
{
if
(
fac
->
canCreate
(
m_project
,
id
))
{
target
=
fac
->
create
(
m_project
,
id
);
break
;
}
}
if
(
!
target
)
return
;
m_project
->
addTarget
(
target
);
...
...
@@ -267,8 +277,20 @@ void TargetSettingsPanelWidget::updateTargetAddAndRemoveButtons()
m_addMenu
->
clear
();
QList
<
ITargetFactory
*>
factories
=
ExtensionSystem
::
PluginManager
::
instance
()
->
getObjects
<
ITargetFactory
>
();
foreach
(
const
QString
&
id
,
m_project
->
possibleTargetIds
())
{
QString
displayName
=
m_project
->
targetFactory
()
->
displayNameForId
(
id
);
QString
displayName
;
foreach
(
ITargetFactory
*
fac
,
factories
)
{
if
(
fac
->
supportsTargetId
(
id
))
{
displayName
=
fac
->
displayNameForId
(
id
);
break
;
}
}
if
(
displayName
.
isEmpty
())
continue
;
QAction
*
action
=
new
QAction
(
displayName
,
m_addMenu
);
action
->
setData
(
QVariant
(
id
));
bool
added
=
false
;
...
...
src/plugins/qmlprojectmanager/qmlproject.cpp
View file @
8697072c
...
...
@@ -32,6 +32,7 @@
#include
"qmlprojectmanagerconstants.h"
#include
"fileformat/qmlprojectitem.h"
#include
"qmlprojectrunconfiguration.h"
#include
"qmlprojecttarget.h"
#include
<coreplugin/icore.h>
#include
<coreplugin/messagemanager.h>
...
...
@@ -51,8 +52,7 @@ QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName)
:
m_manager
(
manager
),
m_fileName
(
fileName
),
m_modelManager
(
ExtensionSystem
::
PluginManager
::
instance
()
->
getObject
<
QmlJS
::
ModelManagerInterface
>
()),
m_fileWatcher
(
new
ProjectExplorer
::
FileWatcher
(
this
)),
m_targetFactory
(
new
Internal
::
QmlProjectTargetFactory
(
this
))
m_fileWatcher
(
new
ProjectExplorer
::
FileWatcher
(
this
))
{
setSupportedTargetIds
(
QSet
<
QString
>
()
<<
QLatin1String
(
Constants
::
QML_VIEWER_TARGET_ID
));
QFileInfo
fileInfo
(
m_fileName
);
...
...
@@ -238,11 +238,6 @@ QList<ProjectExplorer::BuildConfigWidget*> QmlProject::subConfigWidgets()
return
QList
<
ProjectExplorer
::
BuildConfigWidget
*>
();
}
Internal
::
QmlProjectTargetFactory
*
QmlProject
::
targetFactory
()
const
{
return
m_targetFactory
;
}
Internal
::
QmlProjectTarget
*
QmlProject
::
activeTarget
()
const
{
return
static_cast
<
Internal
::
QmlProjectTarget
*>
(
Project
::
activeTarget
());
...
...
@@ -264,7 +259,9 @@ bool QmlProject::fromMap(const QVariantMap &map)
return
false
;
if
(
targets
().
isEmpty
())
{
Internal
::
QmlProjectTarget
*
target
(
targetFactory
()
->
create
(
this
,
QLatin1String
(
Constants
::
QML_VIEWER_TARGET_ID
)));
Internal
::
QmlProjectTargetFactory
*
factory
=
ExtensionSystem
::
PluginManager
::
instance
()
->
getObject
<
Internal
::
QmlProjectTargetFactory
>
();
Internal
::
QmlProjectTarget
*
target
=
factory
->
create
(
this
,
QLatin1String
(
Constants
::
QML_VIEWER_TARGET_ID
));
addTarget
(
target
);
}
...
...
src/plugins/qmlprojectmanager/qmlproject.h
View file @
8697072c
...
...
@@ -72,7 +72,6 @@ public:
QString
id
()
const
;
Core
::
IFile
*
file
()
const
;
Internal
::
Manager
*
projectManager
()
const
;
Internal
::
QmlProjectTargetFactory
*
targetFactory
()
const
;
Internal
::
QmlProjectTarget
*
activeTarget
()
const
;
QList
<
ProjectExplorer
::
Project
*>
dependsOn
();
...
...
@@ -127,8 +126,6 @@ private:
ProjectExplorer
::
FileWatcher
*
m_fileWatcher
;
Internal
::
QmlProjectNode
*
m_rootNode
;
Internal
::
QmlProjectTargetFactory
*
m_targetFactory
;
};
}
// namespace QmlProjectManager
...
...
src/plugins/qmlprojectmanager/qmlprojecttarget.cpp
View file @
8697072c
...
...
@@ -132,13 +132,13 @@ QmlProjectTarget *QmlProjectTargetFactory::create(ProjectExplorer::Project *pare
if
(
!
canCreate
(
parent
,
id
))
return
0
;
QmlProject
*
qmlproject
(
static_cast
<
QmlProject
*>
(
parent
));
QmlProjectTarget
*
t
(
new
QmlProjectTarget
(
qmlproject
)
)
;
QmlProjectTarget
*
t
arget
=
new
QmlProjectTarget
(
qmlproject
);
// Add RunConfiguration (QML does not have BuildConfigurations)
QmlProjectRunConfiguration
*
runConf
(
new
QmlProjectRunConfiguration
(
t
)
);
t
->
addRunConfiguration
(
runConf
);
QmlProjectRunConfiguration
*
runConf
=
new
QmlProjectRunConfiguration
(
t
arget
);
targe
t
->
addRunConfiguration
(
runConf
);
return
t
;
return
targe
t
;
}
bool
QmlProjectTargetFactory
::
canRestore
(
ProjectExplorer
::
Project
*
parent
,
const
QVariantMap
&
map
)
const
...
...
src/plugins/qt4projectmanager/qt4project.cpp
View file @
8697072c
...
...
@@ -249,7 +249,6 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) :
m_manager
(
manager
),
m_rootProjectNode
(
0
),
m_nodesWatcher
(
new
Internal
::
Qt4NodesWatcher
(
this
)),
m_targetFactory
(
new
Qt4TargetFactory
(
this
)),
m_fileInfo
(
new
Qt4ProjectFile
(
this
,
fileName
,
this
)),
m_projectFiles
(
new
Qt4ProjectFiles
),
m_proFileOption
(
0
),
...
...
@@ -355,11 +354,6 @@ bool Qt4Project::fromMap(const QVariantMap &map)
return
true
;
}
Qt4TargetFactory
*
Qt4Project
::
targetFactory
()
const
{
return
m_targetFactory
;
}
Qt4Target
*
Qt4Project
::
activeTarget
()
const
{
return
static_cast
<
Qt4Target
*>
(
Project
::
activeTarget
());
...
...
src/plugins/qt4projectmanager/qt4project.h
View file @
8697072c
...
...
@@ -151,8 +151,6 @@ public:
ProjectExplorer
::
IProjectManager
*
projectManager
()
const
;
Qt4Manager
*
qt4ProjectManager
()
const
;
Internal
::
Qt4TargetFactory
*
targetFactory
()
const
;
Qt4Target
*
activeTarget
()
const
;
QList
<
Core
::
IFile
*>
dependencies
();
//NBS remove
...
...
@@ -239,7 +237,6 @@ private:
Qt4Manager
*
m_manager
;
Internal
::
Qt4ProFileNode
*
m_rootProjectNode
;
Internal
::
Qt4NodesWatcher
*
m_nodesWatcher
;
Internal
::
Qt4TargetFactory
*
m_targetFactory
;
Qt4ProjectFile
*
m_fileInfo
;
...
...
src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
View file @
8697072c
...
...
@@ -243,6 +243,10 @@ bool TargetSetupPage::setupProject(Qt4ProjectManager::Qt4Project *project)
Q_ASSERT
(
project
->
targets
().
isEmpty
());
QtVersionManager
*
vm
=
QtVersionManager
::
instance
();
// TODO remove again
Qt4TargetFactory
*
factory
=
ExtensionSystem
::
PluginManager
::
instance
()
->
getObject
<
Qt4TargetFactory
>
();
for
(
int
i
=
0
;
i
<
m_ui
->
versionTree
->
topLevelItemCount
();
++
i
)
{
QTreeWidgetItem
*
current
=
m_ui
->
versionTree
->
topLevelItem
(
i
);
QString
targetId
=
current
->
data
(
NAME_COLUMN
,
Qt
::
UserRole
).
toString
();
...
...
@@ -275,7 +279,7 @@ bool TargetSetupPage::setupProject(Qt4ProjectManager::Qt4Project *project)
// create the target:
Qt4Target
*
target
=
0
;
if
(
!
targetInfos
.
isEmpty
())
target
=
project
->
targetF
actory
()
->
create
(
project
,
targetId
,
targetInfos
);
target
=
f
actory
->
create
(
project
,
targetId
,
targetInfos
);
if
(
target
)
{
project
->
addTarget
(
target
);
...
...
@@ -286,7 +290,7 @@ bool TargetSetupPage::setupProject(Qt4ProjectManager::Qt4Project *project)
// Create the default target if nothing else was set up:
if
(
project
->
targets
().
isEmpty
())
{
Qt4Target
*
target
=
project
->
targetF
actory
()
->
create
(
project
,
Constants
::
DESKTOP_TARGET_ID
);
Qt4Target
*
target
=
f
actory
->
create
(
project
,
Constants
::
DESKTOP_TARGET_ID
);
if
(
target
)
project
->
addTarget
(
target
);
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment