diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 3978b744a35..e8cc4c35537 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -37,18 +37,21 @@ #include #include -#include +#include +#include #include +#include #include #include -#include #include +#include +#include using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; /// -/// BuildSettingsPanelFactory +// BuildSettingsPanelFactory /// bool BuildSettingsPanelFactory::supports(Project *project) @@ -62,7 +65,7 @@ IPropertiesPanel *BuildSettingsPanelFactory::createPanel(Project *project) } /// -/// BuildSettingsPanel +// BuildSettingsPanel /// BuildSettingsPanel::BuildSettingsPanel(Project *project) : @@ -92,74 +95,36 @@ QIcon BuildSettingsPanel::icon() const } /// -// BuildSettingsSubWidgets -/// - -BuildSettingsSubWidgets::~BuildSettingsSubWidgets() -{ - clear(); -} - -void BuildSettingsSubWidgets::addWidget(const QString &name, QWidget *widget) -{ - QSpacerItem *item = new QSpacerItem(1, 10, QSizePolicy::Fixed, QSizePolicy::Fixed); - - QLabel *label = new QLabel(this); - label->setText(name); - QFont f = label->font(); - f.setBold(true); - f.setPointSizeF(f.pointSizeF() *1.2); - label->setFont(f); - - layout()->addItem(item); - layout()->addWidget(label); - layout()->addWidget(widget); - - m_spacerItems.append(item); - m_labels.append(label); - m_widgets.append(widget); -} - -void BuildSettingsSubWidgets::clear() -{ - foreach(QSpacerItem *item, m_spacerItems) - layout()->removeItem(item); - qDeleteAll(m_spacerItems); - qDeleteAll(m_widgets); - qDeleteAll(m_labels); - m_widgets.clear(); - m_labels.clear(); - m_spacerItems.clear(); -} - -QList BuildSettingsSubWidgets::widgets() const -{ - return m_widgets; -} - -BuildSettingsSubWidgets::BuildSettingsSubWidgets(QWidget *parent) - : QWidget(parent) -{ - new QVBoxLayout(this); - layout()->setMargin(0); -} - -/// -/// BuildSettingsWidget +// BuildSettingsWidget /// BuildSettingsWidget::~BuildSettingsWidget() { + clear(); } -BuildSettingsWidget::BuildSettingsWidget(Project *project) - : m_project(project), m_buildConfiguration(0) +BuildSettingsWidget::BuildSettingsWidget(Project *project) : + m_project(project), + m_buildConfiguration(0), + m_leftMargin(0) { + // Provide some time for our contentsmargins to get updated: + QTimer::singleShot(0, this, SLOT(init())); +} + +void BuildSettingsWidget::init() +{ + QMargins margins(contentsMargins()); + m_leftMargin = margins.left(); + margins.setLeft(0); + setContentsMargins(margins); + QVBoxLayout *vbox = new QVBoxLayout(this); - vbox->setContentsMargins(0, -1, 0, -1); + vbox->setContentsMargins(0, 0, 0, 0); { // Edit Build Configuration row QHBoxLayout *hbox = new QHBoxLayout(); + hbox->setContentsMargins(m_leftMargin, 0, 0, 0); hbox->addWidget(new QLabel(tr("Edit Build Configuration:"), this)); m_buildConfigurationComboBox = new QComboBox(this); m_buildConfigurationComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); @@ -169,6 +134,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) m_addButton->setText(tr("Add")); m_addButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); hbox->addWidget(m_addButton); + m_addButtonMenu = new QMenu(this); + m_addButton->setMenu(m_addButtonMenu); m_removeButton = new QPushButton(this); m_removeButton->setText(tr("Remove")); @@ -182,13 +149,6 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) m_makeActiveLabel->setVisible(false); vbox->addWidget(m_makeActiveLabel); - m_subWidgets = new BuildSettingsSubWidgets(this); - vbox->addWidget(m_subWidgets); - - m_addButtonMenu = new QMenu(this); - m_addButton->setMenu(m_addButtonMenu); - updateAddButtonMenu(); - m_buildConfiguration = m_project->activeBuildConfiguration(); connect(m_makeActiveLabel, SIGNAL(linkActivated(QString)), @@ -201,6 +161,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) this, SLOT(deleteConfiguration())); // TODO update on displayNameChange +// connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(const QString &)), +// this, SLOT(buildConfigurationDisplayNameChanged(const QString &))); connect(m_project, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(checkMakeActiveLabel())); @@ -208,9 +170,44 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) if (m_project->buildConfigurationFactory()) connect(m_project->buildConfigurationFactory(), SIGNAL(availableCreationTypesChanged()), SLOT(updateAddButtonMenu())); + updateAddButtonMenu(); updateBuildSettings(); } +void BuildSettingsWidget::addSubWidget(const QString &name, QWidget *widget) +{ + widget->setContentsMargins(m_leftMargin, 10, 0, 0); + + QLabel *label = new QLabel(this); + label->setText(name); + QFont f = label->font(); + f.setBold(true); + f.setPointSizeF(f.pointSizeF() * 1.2); + label->setFont(f); + + label->setContentsMargins(m_leftMargin, 10, 0, 0); + + layout()->addWidget(label); + layout()->addWidget(widget); + + m_labels.append(label); + m_subWidgets.append(widget); +} + +void BuildSettingsWidget::clear() +{ + qDeleteAll(m_subWidgets); + m_subWidgets.clear(); + qDeleteAll(m_labels); + m_labels.clear(); + +} + +QList BuildSettingsWidget::subWidgets() const +{ + return m_subWidgets; +} + void BuildSettingsWidget::makeActive() { m_project->setActiveBuildConfiguration(m_buildConfiguration); @@ -220,7 +217,7 @@ void BuildSettingsWidget::updateAddButtonMenu() { m_addButtonMenu->clear(); m_addButtonMenu->addAction(tr("&Clone Selected"), - this, SLOT(cloneConfiguration())); + this, SLOT(cloneConfiguration())); IBuildConfigurationFactory *factory = m_project->buildConfigurationFactory(); if (factory) { foreach (const QString &type, factory->availableCreationTypes()) { @@ -237,25 +234,25 @@ void BuildSettingsWidget::updateBuildSettings() // Delete old tree items bool blocked = m_buildConfigurationComboBox->blockSignals(true); m_buildConfigurationComboBox->clear(); - m_subWidgets->clear(); + clear(); // update buttons m_removeButton->setEnabled(m_project->buildConfigurations().size() > 1); // Add pages BuildConfigWidget *generalConfigWidget = m_project->createConfigWidget(); - m_subWidgets->addWidget(generalConfigWidget->displayName(), generalConfigWidget); + addSubWidget(generalConfigWidget->displayName(), generalConfigWidget); - m_subWidgets->addWidget(tr("Build Steps"), new BuildStepsPage(m_project)); - m_subWidgets->addWidget(tr("Clean Steps"), new BuildStepsPage(m_project, true)); + addSubWidget(tr("Build Steps"), new BuildStepsPage(m_project, false)); + addSubWidget(tr("Clean Steps"), new BuildStepsPage(m_project, true)); QList subConfigWidgets = m_project->subConfigWidgets(); foreach (BuildConfigWidget *subConfigWidget, subConfigWidgets) - m_subWidgets->addWidget(subConfigWidget->displayName(), subConfigWidget); + addSubWidget(subConfigWidget->displayName(), subConfigWidget); // Add tree items foreach (BuildConfiguration *bc, m_project->buildConfigurations()) { - m_buildConfigurationComboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); + m_buildConfigurationComboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); if (bc == m_buildConfiguration) m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1); } @@ -264,12 +261,13 @@ void BuildSettingsWidget::updateBuildSettings() // TODO Restore position, entry from combbox // TODO? select entry from combobox ? + activeBuildConfigurationChanged(); } void BuildSettingsWidget::currentIndexChanged(int index) { - m_buildConfiguration = (BuildConfiguration *) m_buildConfigurationComboBox->itemData(index).value(); + m_buildConfiguration = m_buildConfigurationComboBox->itemData(index).value(); activeBuildConfigurationChanged(); } @@ -281,7 +279,7 @@ void BuildSettingsWidget::activeBuildConfigurationChanged() break; } } - foreach (QWidget *widget, m_subWidgets->widgets()) { + foreach (QWidget *widget, subWidgets()) { if (BuildConfigWidget *buildStepWidget = qobject_cast(widget)) { buildStepWidget->init(m_buildConfiguration); } @@ -311,14 +309,14 @@ void BuildSettingsWidget::createConfiguration() void BuildSettingsWidget::cloneConfiguration() { - int index = m_buildConfigurationComboBox->currentIndex(); + const int index = m_buildConfigurationComboBox->currentIndex(); BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value(); cloneConfiguration(bc); } void BuildSettingsWidget::deleteConfiguration() { - int index = m_buildConfigurationComboBox->currentIndex(); + const int index = m_buildConfigurationComboBox->currentIndex(); BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value(); deleteConfiguration(bc); } @@ -328,7 +326,7 @@ void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfigura if (!sourceConfiguration) return; - QString newDisplayName = QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:")); + QString newDisplayName(QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:"))); if (newDisplayName.isEmpty()) return; diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index 652f91e116f..d71b4d2bc37 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -32,35 +32,22 @@ #include "iprojectproperties.h" -#include -#include -#include -#include -#include -#include +#include + +QT_BEGIN_NAMESPACE +class QComboBox; +class QLabel; +class QMenu; +class QPushButton; +QT_END_NAMESPACE namespace ProjectExplorer { -class IBuildStepFactory; class BuildConfiguration; +class IBuildStepFactory; namespace Internal { -class BuildSettingsSubWidgets : public QWidget -{ - Q_OBJECT -public: - BuildSettingsSubWidgets(QWidget *parent); - ~BuildSettingsSubWidgets(); - void clear(); - void addWidget(const QString &name, QWidget *widget); - QList widgets() const; -private: - QList m_widgets; - QList m_labels; - QList m_spacerItems; -}; - class BuildSettingsPanelFactory : public IPanelFactory { public: @@ -93,6 +80,10 @@ public: BuildSettingsWidget(Project *project); ~BuildSettingsWidget(); + void clear(); + void addSubWidget(const QString &name, QWidget *widget); + QList subWidgets() const; + private slots: void updateBuildSettings(); void currentIndexChanged(int index); @@ -105,18 +96,25 @@ private slots: void checkMakeActiveLabel(); void makeActive(); + void init(); + private: - void cloneConfiguration(ProjectExplorer::BuildConfiguration *toClone); - void deleteConfiguration(ProjectExplorer::BuildConfiguration *toDelete); + void cloneConfiguration(BuildConfiguration *toClone); + void deleteConfiguration(BuildConfiguration *toDelete); Project *m_project; + BuildConfiguration *m_buildConfiguration; + QPushButton *m_addButton; QPushButton *m_removeButton; QComboBox *m_buildConfigurationComboBox; - BuildSettingsSubWidgets *m_subWidgets; - BuildConfiguration *m_buildConfiguration; QMenu *m_addButtonMenu; QLabel *m_makeActiveLabel; + + QList m_subWidgets; + QList m_labels; + + int m_leftMargin; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index 0930901be9e..5e7a0e99baf 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -28,13 +28,14 @@ **************************************************************************/ #include "buildstepspage.h" -#include "project.h" #include "buildconfiguration.h" #include #include #include +#include + #include #include #include @@ -47,40 +48,11 @@ using namespace ProjectExplorer::Internal; BuildStepsPage::BuildStepsPage(Project *project, bool clean) : BuildConfigWidget(), - m_clean(clean) + m_clean(clean), + m_addButton(0), + m_leftMargin(-1) { - Q_UNUSED(project) - m_vbox = new QVBoxLayout(this); - m_vbox->setContentsMargins(0, 0, 0, 0); - m_vbox->setSpacing(0); - - m_noStepsLabel = new QLabel(tr("No Build Steps"), this); - m_vbox->addWidget(m_noStepsLabel); - - QHBoxLayout *hboxLayout = new QHBoxLayout(); - m_addButton = new QPushButton(this); - m_addButton->setText(clean ? tr("Add clean step") : tr("Add build step")); - m_addButton->setMenu(new QMenu(this)); - hboxLayout->addWidget(m_addButton); - - m_removeButton = new QPushButton(this); - m_removeButton->setText(clean ? tr("Remove clean step") : tr("Remove build step")); - m_removeButton->setMenu(new QMenu(this)); - hboxLayout->addWidget(m_removeButton); - hboxLayout->addStretch(10); - -#ifdef Q_OS_MAC - m_addButton->setAttribute(Qt::WA_MacSmallSize); - m_removeButton->setAttribute(Qt::WA_MacSmallSize); -#endif - - m_vbox->addLayout(hboxLayout); - - connect(m_addButton->menu(), SIGNAL(aboutToShow()), - this, SLOT(updateAddBuildStepMenu())); - - connect(m_removeButton->menu(), SIGNAL(aboutToShow()), - this, SLOT(updateRemoveBuildStepMenu())); + Q_UNUSED(project); } BuildStepsPage::~BuildStepsPage() @@ -112,6 +84,10 @@ QString BuildStepsPage::displayName() const void BuildStepsPage::init(BuildConfiguration *bc) { + QTC_ASSERT(bc, return); + + setupUi(); + foreach(BuildStepsWidgetStruct s, m_buildSteps) { delete s.widget; delete s.detailsWidget; @@ -120,7 +96,7 @@ void BuildStepsPage::init(BuildConfiguration *bc) m_configuration = bc; - const QList &steps = m_clean ? bc->cleanSteps() : bc->buildSteps(); + const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); int i = 0; foreach (BuildStep *bs, steps) { addBuildStepWidget(i, bs); @@ -128,7 +104,6 @@ void BuildStepsPage::init(BuildConfiguration *bc) } m_noStepsLabel->setVisible(steps.isEmpty()); - m_removeButton->setEnabled(!steps.isEmpty()); // make sure widget is updated foreach(BuildStepsWidgetStruct s, m_buildSteps) { @@ -143,7 +118,7 @@ void BuildStepsPage::updateAddBuildStepMenu() QMap > map; //Build up a list of possible steps and save map the display names to the (internal) name and factories. QList factories = ExtensionSystem::PluginManager::instance()->getObjects(); - foreach (IBuildStepFactory * factory, factories) { + foreach (IBuildStepFactory *factory, factories) { QStringList names = factory->canCreateForBuildConfiguration(m_configuration); foreach (const QString &name, names) { map.insert(factory->displayNameForName(name), QPair(name, factory)); @@ -188,114 +163,57 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step) s.upButton->setIconSize(QSize(10, 10)); s.downButton->setIconSize(QSize(10, 10)); #endif + s.removeButton = new QPushButton(this); + s.removeButton->setText(QChar('X')); + s.removeButton->setMaximumHeight(22); + s.removeButton->setMaximumWidth(22); + // layout QWidget *toolWidget = new QWidget(s.detailsWidget); toolWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - s.hbox = new QHBoxLayout(toolWidget); - s.hbox->setMargin(0); - s.hbox->setSpacing(0); - s.hbox->addWidget(s.upButton); - s.hbox->addWidget(s.downButton); + QHBoxLayout *hbox = new QHBoxLayout(); + toolWidget->setLayout(hbox); + hbox->setMargin(0); + hbox->setSpacing(0); + hbox->addWidget(s.upButton); + hbox->addWidget(s.downButton); + hbox->addWidget(s.removeButton); + s.detailsWidget->setToolWidget(toolWidget); + const int leftMargin(qMax(m_leftMargin - toolWidget->width(), 0)); + s.detailsWidget->setContentsMargins(leftMargin, 0, 0, 1); + m_buildSteps.insert(pos, s); + m_vbox->insertWidget(pos, s.detailsWidget); connect(s.widget, SIGNAL(updateSummary()), this, SLOT(updateSummary())); connect(s.upButton, SIGNAL(clicked()), - this, SLOT(upBuildStep())); + m_upMapper, SLOT(map())); connect(s.downButton, SIGNAL(clicked()), - this, SLOT(downBuildStep())); + m_downMapper, SLOT(map())); + connect(s.removeButton, SIGNAL(clicked()), + m_removeMapper, SLOT(map())); } void BuildStepsPage::addBuildStep() { if (QAction *action = qobject_cast(sender())) { - BuildConfiguration *bc = m_configuration; QPair pair = m_addBuildStepHash.value(action); - BuildStep *newStep = pair.second->create(bc, pair.first); - int pos = m_clean ? bc->cleanSteps().count() : bc->buildSteps().count(); - m_clean ? bc->insertCleanStep(pos, newStep) : bc->insertBuildStep(pos, newStep); + BuildStep *newStep = pair.second->create(m_configuration, pair.first); + int pos = m_clean ? m_configuration->cleanSteps().count() : m_configuration->buildSteps().count(); + m_clean ? m_configuration->insertCleanStep(pos, newStep) : m_configuration->insertBuildStep(pos, newStep); addBuildStepWidget(pos, newStep); const BuildStepsWidgetStruct s = m_buildSteps.at(pos); s.widget->init(); s.detailsWidget->setSummaryText(s.widget->summaryText()); + s.detailsWidget->setExpanded(true); } - updateBuildStepButtonsState(); -} -void BuildStepsPage::updateRemoveBuildStepMenu() -{ - QMenu *menu = m_removeButton->menu(); - menu->clear(); - const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); - foreach(BuildStep *step, steps) { - QAction *action = menu->addAction(step->displayName()); - if (step->immutable()) - action->setEnabled(false); - connect(action, SIGNAL(triggered()), - this, SLOT(removeBuildStep())); - } -} - -void BuildStepsPage::removeBuildStep() -{ - QAction *action = qobject_cast(sender()); - if (action) { - int pos = m_removeButton->menu()->actions().indexOf(action); - const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); - if (steps.at(pos)->immutable()) - return; - - BuildStepsWidgetStruct s = m_buildSteps.at(pos); - delete s.widget; - delete s.detailsWidget; - m_buildSteps.removeAt(pos); - m_clean ? m_configuration->removeCleanStep(pos) : m_configuration->removeBuildStep(pos); - } - updateBuildStepButtonsState(); -} - -void BuildStepsPage::upBuildStep() -{ - int pos = -1; - QToolButton *tb = qobject_cast(sender()); - if (!tb) - return; - - for (int i=0; i(sender()); - if (!tb) - return; - - for (int i=0; iinsertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget); - BuildStepsWidgetStruct tmp = m_buildSteps.at(pos -1); - m_buildSteps[pos -1] = m_buildSteps.at(pos); - m_buildSteps[pos] = tmp; + m_buildSteps.swap(pos - 1, pos); + + updateBuildStepButtonsState(); +} + +void BuildStepsPage::stepMoveDown(int pos) +{ + stepMoveUp(pos + 1); +} + +void BuildStepsPage::stepRemove(int pos) +{ + BuildStepsWidgetStruct s = m_buildSteps.at(pos); + delete s.widget; + delete s.detailsWidget; + m_buildSteps.removeAt(pos); + m_clean ? m_configuration->removeCleanStep(pos) : m_configuration->removeBuildStep(pos); + + updateBuildStepButtonsState(); +} + +void BuildStepsPage::setupUi() +{ + if (0 != m_addButton) + return; + + QMargins margins(contentsMargins()); + m_leftMargin = margins.left(); + margins.setLeft(0); + setContentsMargins(margins); + + m_upMapper = new QSignalMapper(this); + connect(m_upMapper, SIGNAL(mapped(int)), + this, SLOT(stepMoveUp(int))); + m_downMapper = new QSignalMapper(this); + connect(m_downMapper, SIGNAL(mapped(int)), + this, SLOT(stepMoveDown(int))); + m_removeMapper = new QSignalMapper(this); + connect(m_removeMapper, SIGNAL(mapped(int)), + this, SLOT(stepRemove(int))); + + m_vbox = new QVBoxLayout(this); + m_vbox->setContentsMargins(0, 0, 0, 0); + m_vbox->setSpacing(0); + + m_noStepsLabel = new QLabel(tr("No Build Steps"), this); + m_noStepsLabel->setContentsMargins(m_leftMargin, 0, 0, 0); + m_vbox->addWidget(m_noStepsLabel); + + QHBoxLayout *hboxLayout = new QHBoxLayout(); + hboxLayout->setContentsMargins(m_leftMargin, 4, 0, 0); + m_addButton = new QPushButton(this); + m_addButton->setText(m_clean ? tr("Add clean step") : tr("Add build step")); + m_addButton->setMenu(new QMenu(this)); + hboxLayout->addWidget(m_addButton); + + hboxLayout->addStretch(10); + +#ifdef Q_OS_MAC + m_addButton->setAttribute(Qt::WA_MacSmallSize); +#endif + + m_vbox->addLayout(hboxLayout); + + connect(m_addButton->menu(), SIGNAL(aboutToShow()), + this, SLOT(updateAddBuildStepMenu())); } void BuildStepsPage::updateBuildStepButtonsState() { const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); - for(int i=0; isetEnabled((i>0) && !(steps.at(i)->immutable() && steps.at(i - 1))); - s.downButton->setEnabled((i + 1< steps.count()) && !(steps.at(i)->immutable() && steps.at(i + 1)->immutable())); + s.removeButton->setEnabled(!steps.at(i)->immutable()); + m_removeMapper->setMapping(s.removeButton, i); + s.upButton->setEnabled((i > 0) && !(steps.at(i)->immutable() && steps.at(i - 1))); + m_upMapper->setMapping(s.upButton, i); + s.downButton->setEnabled((i + 1 < steps.count()) && !(steps.at(i)->immutable() && steps.at(i + 1)->immutable())); + m_downMapper->setMapping(s.downButton, i); } - m_noStepsLabel->setVisible(steps.isEmpty()); - m_removeButton->setEnabled(!steps.isEmpty()); } diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h index 1e716d4d215..09cf70a0772 100644 --- a/src/plugins/projectexplorer/buildstepspage.h +++ b/src/plugins/projectexplorer/buildstepspage.h @@ -34,18 +34,17 @@ #include QT_BEGIN_NAMESPACE -class QTreeWidgetItem; -class QHBoxLayout; class QPushButton; -class QAbstractButton; class QToolButton; class QLabel; class QVBoxLayout; +class QSignalMapper; QT_END_NAMESPACE namespace ProjectExplorer { class Project; +class BuildConfiguration; namespace Internal { @@ -59,7 +58,7 @@ struct BuildStepsWidgetStruct Utils::DetailsWidget *detailsWidget; QToolButton *upButton; QToolButton *downButton; - QHBoxLayout *hbox; + QPushButton *removeButton; }; class BuildStepsPage : public BuildConfigWidget @@ -76,29 +75,32 @@ public: private slots: void updateAddBuildStepMenu(); void addBuildStep(); - void updateRemoveBuildStepMenu(); - void removeBuildStep(); - void upBuildStep(); - void downBuildStep(); void updateSummary(); + void stepMoveUp(int pos); + void stepMoveDown(int pos); + void stepRemove(int pos); private: - void stepMoveUp(int pos); + void setupUi(); void updateBuildStepButtonsState(); void addBuildStepWidget(int pos, BuildStep *step); - BuildConfiguration *m_configuration; + BuildConfiguration * m_configuration; QHash > m_addBuildStepHash; bool m_clean; - QList m_titleLayouts; QList m_buildSteps; QVBoxLayout *m_vbox; QLabel *m_noStepsLabel; QPushButton *m_addButton; - QPushButton *m_removeButton; + + QSignalMapper *m_upMapper; + QSignalMapper *m_downMapper; + QSignalMapper *m_removeMapper; + + int m_leftMargin; }; } // Internal