forked from qt-creator/qt-creator
ProjectExplorer: Streamline build step creation via menu
Change-Id: I801031d5a3d3ad8d8e5cf61766ca4e9791d7a96c Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -463,12 +463,9 @@ Utils::Id BuildStepFactory::stepId() const
|
|||||||
return m_info.id;
|
return m_info.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildStep *BuildStepFactory::create(BuildStepList *parent, Utils::Id id)
|
BuildStep *BuildStepFactory::create(BuildStepList *parent)
|
||||||
{
|
{
|
||||||
BuildStep *bs = nullptr;
|
return m_info.creator(parent);
|
||||||
if (id == m_info.id)
|
|
||||||
bs = m_info.creator(parent);
|
|
||||||
return bs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildStep *BuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
|
BuildStep *BuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ public:
|
|||||||
|
|
||||||
BuildStepInfo stepInfo() const;
|
BuildStepInfo stepInfo() const;
|
||||||
Utils::Id stepId() const;
|
Utils::Id stepId() const;
|
||||||
BuildStep *create(BuildStepList *parent, Utils::Id id);
|
BuildStep *create(BuildStepList *parent);
|
||||||
BuildStep *restore(BuildStepList *parent, const QVariantMap &map);
|
BuildStep *restore(BuildStepList *parent, const QVariantMap &map);
|
||||||
|
|
||||||
bool canHandle(BuildStepList *bsl) const;
|
bool canHandle(BuildStepList *bsl) const;
|
||||||
|
|||||||
@@ -167,7 +167,9 @@ void BuildStepList::insertStep(int position, BuildStep *step)
|
|||||||
void BuildStepList::insertStep(int position, Utils::Id stepId)
|
void BuildStepList::insertStep(int position, Utils::Id stepId)
|
||||||
{
|
{
|
||||||
for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) {
|
for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) {
|
||||||
if (BuildStep *step = factory->create(this, stepId)) {
|
if (factory->stepId() == stepId) {
|
||||||
|
BuildStep *step = factory->create(this);
|
||||||
|
QTC_ASSERT(step, break);
|
||||||
insertStep(position, step);
|
insertStep(position, step);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,39 +253,28 @@ void BuildStepListWidget::updateEnabledState()
|
|||||||
|
|
||||||
void BuildStepListWidget::updateAddBuildStepMenu()
|
void BuildStepListWidget::updateAddBuildStepMenu()
|
||||||
{
|
{
|
||||||
QMap<QString, QPair<Utils::Id, BuildStepFactory *> > map;
|
QMenu *menu = m_addButton->menu();
|
||||||
//Build up a list of possible steps and save map the display names to the (internal) name and factories.
|
menu->clear();
|
||||||
|
|
||||||
for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) {
|
for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) {
|
||||||
if (factory->canHandle(m_buildStepList)) {
|
if (!factory->canHandle(m_buildStepList))
|
||||||
|
continue;
|
||||||
|
|
||||||
const BuildStepInfo &info = factory->stepInfo();
|
const BuildStepInfo &info = factory->stepInfo();
|
||||||
if (info.flags & BuildStepInfo::Uncreatable)
|
if (info.flags & BuildStepInfo::Uncreatable)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((info.flags & BuildStepInfo::UniqueStep) && m_buildStepList->contains(info.id))
|
if ((info.flags & BuildStepInfo::UniqueStep) && m_buildStepList->contains(info.id))
|
||||||
continue;
|
continue;
|
||||||
map.insert(info.displayName, qMakePair(info.id, factory));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ask the user which one to add
|
QAction *action = menu->addAction(info.displayName);
|
||||||
QMenu *menu = m_addButton->menu();
|
connect(action, &QAction::triggered, this, [factory, this] {
|
||||||
menu->clear();
|
BuildStep *newStep = factory->create(m_buildStepList);
|
||||||
if (!map.isEmpty()) {
|
|
||||||
QMap<QString, QPair<Utils::Id, BuildStepFactory *> >::const_iterator it, end;
|
|
||||||
end = map.constEnd();
|
|
||||||
for (it = map.constBegin(); it != end; ++it) {
|
|
||||||
QAction *action = menu->addAction(it.key());
|
|
||||||
BuildStepFactory *factory = it.value().second;
|
|
||||||
Utils::Id id = it.value().first;
|
|
||||||
|
|
||||||
connect(action, &QAction::triggered, [id, factory, this]() {
|
|
||||||
BuildStep *newStep = factory->create(m_buildStepList, id);
|
|
||||||
QTC_ASSERT(newStep, return);
|
QTC_ASSERT(newStep, return);
|
||||||
int pos = m_buildStepList->count();
|
m_buildStepList->appendStep(newStep);
|
||||||
m_buildStepList->insertStep(pos, newStep);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void BuildStepListWidget::addBuildStep(int pos)
|
void BuildStepListWidget::addBuildStep(int pos)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user