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;
|
||||
}
|
||||
|
||||
BuildStep *BuildStepFactory::create(BuildStepList *parent, Utils::Id id)
|
||||
BuildStep *BuildStepFactory::create(BuildStepList *parent)
|
||||
{
|
||||
BuildStep *bs = nullptr;
|
||||
if (id == m_info.id)
|
||||
bs = m_info.creator(parent);
|
||||
return bs;
|
||||
return m_info.creator(parent);
|
||||
}
|
||||
|
||||
BuildStep *BuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
|
||||
|
||||
@@ -186,7 +186,7 @@ public:
|
||||
|
||||
BuildStepInfo stepInfo() const;
|
||||
Utils::Id stepId() const;
|
||||
BuildStep *create(BuildStepList *parent, Utils::Id id);
|
||||
BuildStep *create(BuildStepList *parent);
|
||||
BuildStep *restore(BuildStepList *parent, const QVariantMap &map);
|
||||
|
||||
bool canHandle(BuildStepList *bsl) const;
|
||||
|
||||
@@ -167,7 +167,9 @@ void BuildStepList::insertStep(int position, BuildStep *step)
|
||||
void BuildStepList::insertStep(int position, Utils::Id stepId)
|
||||
{
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -253,39 +253,28 @@ void BuildStepListWidget::updateEnabledState()
|
||||
|
||||
void BuildStepListWidget::updateAddBuildStepMenu()
|
||||
{
|
||||
QMap<QString, QPair<Utils::Id, BuildStepFactory *> > map;
|
||||
//Build up a list of possible steps and save map the display names to the (internal) name and factories.
|
||||
QMenu *menu = m_addButton->menu();
|
||||
menu->clear();
|
||||
|
||||
for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) {
|
||||
if (factory->canHandle(m_buildStepList)) {
|
||||
if (!factory->canHandle(m_buildStepList))
|
||||
continue;
|
||||
|
||||
const BuildStepInfo &info = factory->stepInfo();
|
||||
if (info.flags & BuildStepInfo::Uncreatable)
|
||||
continue;
|
||||
|
||||
if ((info.flags & BuildStepInfo::UniqueStep) && m_buildStepList->contains(info.id))
|
||||
continue;
|
||||
map.insert(info.displayName, qMakePair(info.id, factory));
|
||||
}
|
||||
}
|
||||
|
||||
// Ask the user which one to add
|
||||
QMenu *menu = m_addButton->menu();
|
||||
menu->clear();
|
||||
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);
|
||||
QAction *action = menu->addAction(info.displayName);
|
||||
connect(action, &QAction::triggered, this, [factory, this] {
|
||||
BuildStep *newStep = factory->create(m_buildStepList);
|
||||
QTC_ASSERT(newStep, return);
|
||||
int pos = m_buildStepList->count();
|
||||
m_buildStepList->insertStep(pos, newStep);
|
||||
m_buildStepList->appendStep(newStep);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BuildStepListWidget::addBuildStep(int pos)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user