BuildStep: Make buildsteplist page more dynamic

Use signals from buildsteplist to add/remove/move a buildstep in the
UI.

Reviewed-by: dt
This commit is contained in:
Tobias Hunger
2011-05-11 13:12:26 +02:00
parent bf02ae6009
commit 1d77eb4af9
2 changed files with 49 additions and 30 deletions

View File

@@ -93,6 +93,10 @@ void BuildStepListWidget::init(BuildStepList *bsl)
setupUi(); setupUi();
connect(bsl, SIGNAL(stepInserted(int)), this, SLOT(addBuildStep(int)));
connect(bsl, SIGNAL(stepRemoved(int)), this, SLOT(removeBuildStep(int)));
connect(bsl, SIGNAL(stepMoved(int,int)), this, SLOT(stepMoved(int,int)));
foreach (const BuildStepsWidgetStruct &s, m_buildSteps) { foreach (const BuildStepsWidgetStruct &s, m_buildSteps) {
delete s.widget; delete s.widget;
delete s.detailsWidget; delete s.detailsWidget;
@@ -142,7 +146,7 @@ void BuildStepListWidget::updateAddBuildStepMenu()
for (it = map.constBegin(); it != end; ++it) { for (it = map.constBegin(); it != end; ++it) {
QAction *action = menu->addAction(it.key()); QAction *action = menu->addAction(it.key());
connect(action, SIGNAL(triggered()), connect(action, SIGNAL(triggered()),
this, SLOT(addBuildStep())); this, SLOT(triggerAddBuildStep()));
m_addBuildStepHash.insert(action, it.value()); m_addBuildStepHash.insert(action, it.value());
} }
} }
@@ -214,52 +218,51 @@ void BuildStepListWidget::addBuildStepWidget(int pos, BuildStep *step)
m_removeMapper, SLOT(map())); m_removeMapper, SLOT(map()));
} }
void BuildStepListWidget::addBuildStep() void BuildStepListWidget::triggerAddBuildStep()
{ {
if (QAction *action = qobject_cast<QAction *>(sender())) { if (QAction *action = qobject_cast<QAction *>(sender())) {
QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action); QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action);
BuildStep *newStep = pair.second->create(m_buildStepList, pair.first); BuildStep *newStep = pair.second->create(m_buildStepList, pair.first);
int pos = m_buildStepList->count(); int pos = m_buildStepList->count();
m_buildStepList->insertStep(pos, newStep); m_buildStepList->insertStep(pos, newStep);
addBuildStepWidget(pos, newStep);
const BuildStepsWidgetStruct s = m_buildSteps.at(pos);
s.detailsWidget->setState(Utils::DetailsWidget::Expanded);
} }
}
void BuildStepListWidget::addBuildStep(int pos)
{
BuildStep *newStep = m_buildStepList->at(pos);
addBuildStepWidget(pos, newStep);
const BuildStepsWidgetStruct s = m_buildSteps.at(pos);
s.detailsWidget->setState(Utils::DetailsWidget::Expanded);
m_noStepsLabel->setVisible(false); m_noStepsLabel->setVisible(false);
updateBuildStepButtonsState(); updateBuildStepButtonsState();
} }
void BuildStepListWidget::stepMoveUp(int pos) void BuildStepListWidget::triggerStepMoveUp(int pos)
{ {
m_buildStepList->moveStepUp(pos); m_buildStepList->moveStepUp(pos);
}
m_vbox->insertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget); void BuildStepListWidget::stepMoved(int from, int to)
{
m_vbox->insertWidget(to, m_buildSteps.at(from).detailsWidget);
m_buildSteps.swap(pos - 1, pos); Internal::BuildStepsWidgetStruct data = m_buildSteps.at(from);
m_buildSteps.removeAt(from);
m_buildSteps.insert(to, data);
updateBuildStepButtonsState(); updateBuildStepButtonsState();
} }
void BuildStepListWidget::stepMoveDown(int pos) void BuildStepListWidget::triggerStepMoveDown(int pos)
{ {
stepMoveUp(pos + 1); triggerStepMoveUp(pos + 1);
} }
void BuildStepListWidget::stepRemove(int pos) void BuildStepListWidget::triggerRemoveBuildStep(int pos)
{ {
if (m_buildStepList->removeStep(pos)) { if (!m_buildStepList->removeStep(pos)) {
BuildStepsWidgetStruct s = m_buildSteps.at(pos);
delete s.widget;
delete s.detailsWidget;
m_buildSteps.removeAt(pos);
updateBuildStepButtonsState();
bool hasSteps = m_buildStepList->isEmpty();
m_noStepsLabel->setVisible(hasSteps);
} else {
QMessageBox::warning(Core::ICore::instance()->mainWindow(), QMessageBox::warning(Core::ICore::instance()->mainWindow(),
tr("Removing Step failed"), tr("Removing Step failed"),
tr("Cannot remove build step while building"), tr("Cannot remove build step while building"),
@@ -267,6 +270,19 @@ void BuildStepListWidget::stepRemove(int pos)
} }
} }
void BuildStepListWidget::removeBuildStep(int pos)
{
BuildStepsWidgetStruct s = m_buildSteps.at(pos);
delete s.widget;
delete s.detailsWidget;
m_buildSteps.removeAt(pos);
updateBuildStepButtonsState();
bool hasSteps = m_buildStepList->isEmpty();
m_noStepsLabel->setVisible(hasSteps);
}
void BuildStepListWidget::setupUi() void BuildStepListWidget::setupUi()
{ {
if (0 != m_addButton) if (0 != m_addButton)
@@ -274,13 +290,13 @@ void BuildStepListWidget::setupUi()
m_upMapper = new QSignalMapper(this); m_upMapper = new QSignalMapper(this);
connect(m_upMapper, SIGNAL(mapped(int)), connect(m_upMapper, SIGNAL(mapped(int)),
this, SLOT(stepMoveUp(int))); this, SLOT(triggerStepMoveUp(int)));
m_downMapper = new QSignalMapper(this); m_downMapper = new QSignalMapper(this);
connect(m_downMapper, SIGNAL(mapped(int)), connect(m_downMapper, SIGNAL(mapped(int)),
this, SLOT(stepMoveDown(int))); this, SLOT(triggerStepMoveDown(int)));
m_removeMapper = new QSignalMapper(this); m_removeMapper = new QSignalMapper(this);
connect(m_removeMapper, SIGNAL(mapped(int)), connect(m_removeMapper, SIGNAL(mapped(int)),
this, SLOT(stepRemove(int))); this, SLOT(triggerRemoveBuildStep(int)));
m_vbox = new QVBoxLayout(this); m_vbox = new QVBoxLayout(this);
m_vbox->setContentsMargins(0, 0, 0, 0); m_vbox->setContentsMargins(0, 0, 0, 0);

View File

@@ -77,11 +77,14 @@ public:
private slots: private slots:
void updateAddBuildStepMenu(); void updateAddBuildStepMenu();
void addBuildStep(); void triggerAddBuildStep();
void addBuildStep(int pos);
void updateSummary(); void updateSummary();
void stepMoveUp(int pos); void triggerStepMoveUp(int pos);
void stepMoveDown(int pos); void stepMoved(int from, int to);
void stepRemove(int pos); void triggerStepMoveDown(int pos);
void triggerRemoveBuildStep(int pos);
void removeBuildStep(int pos);
private: private:
void setupUi(); void setupUi();