forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user