forked from qt-creator/qt-creator
Update build steps related panels
* Merge BuildSettingsWidget and BuildSettingsSubWidgets. I don't see much need for this separation and it makes the indention harder to do. * Override contentsmargins set by the ProjectsWindow. This enables the toolwidget to be displayed properly. * Add a remove button to the toolwidget of the buildsteps. Remove the global one. * Simplify code a bit by using QSignalMapper instead of mapping signals manually. Reviewed-by: dt
This commit is contained in:
@@ -37,18 +37,21 @@
|
|||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QtCore/QPair>
|
#include <QtCore/QMargins>
|
||||||
|
#include <QtCore/QTimer>
|
||||||
#include <QtGui/QApplication>
|
#include <QtGui/QApplication>
|
||||||
|
#include <QtGui/QComboBox>
|
||||||
#include <QtGui/QInputDialog>
|
#include <QtGui/QInputDialog>
|
||||||
#include <QtGui/QLabel>
|
#include <QtGui/QLabel>
|
||||||
#include <QtGui/QVBoxLayout>
|
|
||||||
#include <QtGui/QMenu>
|
#include <QtGui/QMenu>
|
||||||
|
#include <QtGui/QPushButton>
|
||||||
|
#include <QtGui/QVBoxLayout>
|
||||||
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
using namespace ProjectExplorer::Internal;
|
using namespace ProjectExplorer::Internal;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// BuildSettingsPanelFactory
|
// BuildSettingsPanelFactory
|
||||||
///
|
///
|
||||||
|
|
||||||
bool BuildSettingsPanelFactory::supports(Project *project)
|
bool BuildSettingsPanelFactory::supports(Project *project)
|
||||||
@@ -62,7 +65,7 @@ IPropertiesPanel *BuildSettingsPanelFactory::createPanel(Project *project)
|
|||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// BuildSettingsPanel
|
// BuildSettingsPanel
|
||||||
///
|
///
|
||||||
|
|
||||||
BuildSettingsPanel::BuildSettingsPanel(Project *project) :
|
BuildSettingsPanel::BuildSettingsPanel(Project *project) :
|
||||||
@@ -92,74 +95,36 @@ QIcon BuildSettingsPanel::icon() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
// BuildSettingsSubWidgets
|
// BuildSettingsWidget
|
||||||
///
|
|
||||||
|
|
||||||
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<QWidget *> BuildSettingsSubWidgets::widgets() const
|
|
||||||
{
|
|
||||||
return m_widgets;
|
|
||||||
}
|
|
||||||
|
|
||||||
BuildSettingsSubWidgets::BuildSettingsSubWidgets(QWidget *parent)
|
|
||||||
: QWidget(parent)
|
|
||||||
{
|
|
||||||
new QVBoxLayout(this);
|
|
||||||
layout()->setMargin(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// BuildSettingsWidget
|
|
||||||
///
|
///
|
||||||
|
|
||||||
BuildSettingsWidget::~BuildSettingsWidget()
|
BuildSettingsWidget::~BuildSettingsWidget()
|
||||||
{
|
{
|
||||||
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildSettingsWidget::BuildSettingsWidget(Project *project)
|
BuildSettingsWidget::BuildSettingsWidget(Project *project) :
|
||||||
: m_project(project), m_buildConfiguration(0)
|
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);
|
QVBoxLayout *vbox = new QVBoxLayout(this);
|
||||||
vbox->setContentsMargins(0, -1, 0, -1);
|
vbox->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
{ // Edit Build Configuration row
|
{ // Edit Build Configuration row
|
||||||
QHBoxLayout *hbox = new QHBoxLayout();
|
QHBoxLayout *hbox = new QHBoxLayout();
|
||||||
|
hbox->setContentsMargins(m_leftMargin, 0, 0, 0);
|
||||||
hbox->addWidget(new QLabel(tr("Edit Build Configuration:"), this));
|
hbox->addWidget(new QLabel(tr("Edit Build Configuration:"), this));
|
||||||
m_buildConfigurationComboBox = new QComboBox(this);
|
m_buildConfigurationComboBox = new QComboBox(this);
|
||||||
m_buildConfigurationComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
m_buildConfigurationComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
||||||
@@ -169,6 +134,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
|
|||||||
m_addButton->setText(tr("Add"));
|
m_addButton->setText(tr("Add"));
|
||||||
m_addButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
m_addButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
hbox->addWidget(m_addButton);
|
hbox->addWidget(m_addButton);
|
||||||
|
m_addButtonMenu = new QMenu(this);
|
||||||
|
m_addButton->setMenu(m_addButtonMenu);
|
||||||
|
|
||||||
m_removeButton = new QPushButton(this);
|
m_removeButton = new QPushButton(this);
|
||||||
m_removeButton->setText(tr("Remove"));
|
m_removeButton->setText(tr("Remove"));
|
||||||
@@ -182,13 +149,6 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
|
|||||||
m_makeActiveLabel->setVisible(false);
|
m_makeActiveLabel->setVisible(false);
|
||||||
vbox->addWidget(m_makeActiveLabel);
|
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();
|
m_buildConfiguration = m_project->activeBuildConfiguration();
|
||||||
|
|
||||||
connect(m_makeActiveLabel, SIGNAL(linkActivated(QString)),
|
connect(m_makeActiveLabel, SIGNAL(linkActivated(QString)),
|
||||||
@@ -201,6 +161,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
|
|||||||
this, SLOT(deleteConfiguration()));
|
this, SLOT(deleteConfiguration()));
|
||||||
|
|
||||||
// TODO update on displayNameChange
|
// TODO update on displayNameChange
|
||||||
|
// connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(const QString &)),
|
||||||
|
// this, SLOT(buildConfigurationDisplayNameChanged(const QString &)));
|
||||||
|
|
||||||
connect(m_project, SIGNAL(activeBuildConfigurationChanged()),
|
connect(m_project, SIGNAL(activeBuildConfigurationChanged()),
|
||||||
this, SLOT(checkMakeActiveLabel()));
|
this, SLOT(checkMakeActiveLabel()));
|
||||||
@@ -208,9 +170,44 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
|
|||||||
if (m_project->buildConfigurationFactory())
|
if (m_project->buildConfigurationFactory())
|
||||||
connect(m_project->buildConfigurationFactory(), SIGNAL(availableCreationTypesChanged()), SLOT(updateAddButtonMenu()));
|
connect(m_project->buildConfigurationFactory(), SIGNAL(availableCreationTypesChanged()), SLOT(updateAddButtonMenu()));
|
||||||
|
|
||||||
|
updateAddButtonMenu();
|
||||||
updateBuildSettings();
|
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<QWidget *> BuildSettingsWidget::subWidgets() const
|
||||||
|
{
|
||||||
|
return m_subWidgets;
|
||||||
|
}
|
||||||
|
|
||||||
void BuildSettingsWidget::makeActive()
|
void BuildSettingsWidget::makeActive()
|
||||||
{
|
{
|
||||||
m_project->setActiveBuildConfiguration(m_buildConfiguration);
|
m_project->setActiveBuildConfiguration(m_buildConfiguration);
|
||||||
@@ -220,7 +217,7 @@ void BuildSettingsWidget::updateAddButtonMenu()
|
|||||||
{
|
{
|
||||||
m_addButtonMenu->clear();
|
m_addButtonMenu->clear();
|
||||||
m_addButtonMenu->addAction(tr("&Clone Selected"),
|
m_addButtonMenu->addAction(tr("&Clone Selected"),
|
||||||
this, SLOT(cloneConfiguration()));
|
this, SLOT(cloneConfiguration()));
|
||||||
IBuildConfigurationFactory *factory = m_project->buildConfigurationFactory();
|
IBuildConfigurationFactory *factory = m_project->buildConfigurationFactory();
|
||||||
if (factory) {
|
if (factory) {
|
||||||
foreach (const QString &type, factory->availableCreationTypes()) {
|
foreach (const QString &type, factory->availableCreationTypes()) {
|
||||||
@@ -237,25 +234,25 @@ void BuildSettingsWidget::updateBuildSettings()
|
|||||||
// Delete old tree items
|
// Delete old tree items
|
||||||
bool blocked = m_buildConfigurationComboBox->blockSignals(true);
|
bool blocked = m_buildConfigurationComboBox->blockSignals(true);
|
||||||
m_buildConfigurationComboBox->clear();
|
m_buildConfigurationComboBox->clear();
|
||||||
m_subWidgets->clear();
|
clear();
|
||||||
|
|
||||||
// update buttons
|
// update buttons
|
||||||
m_removeButton->setEnabled(m_project->buildConfigurations().size() > 1);
|
m_removeButton->setEnabled(m_project->buildConfigurations().size() > 1);
|
||||||
|
|
||||||
// Add pages
|
// Add pages
|
||||||
BuildConfigWidget *generalConfigWidget = m_project->createConfigWidget();
|
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));
|
addSubWidget(tr("Build Steps"), new BuildStepsPage(m_project, false));
|
||||||
m_subWidgets->addWidget(tr("Clean Steps"), new BuildStepsPage(m_project, true));
|
addSubWidget(tr("Clean Steps"), new BuildStepsPage(m_project, true));
|
||||||
|
|
||||||
QList<BuildConfigWidget *> subConfigWidgets = m_project->subConfigWidgets();
|
QList<BuildConfigWidget *> subConfigWidgets = m_project->subConfigWidgets();
|
||||||
foreach (BuildConfigWidget *subConfigWidget, subConfigWidgets)
|
foreach (BuildConfigWidget *subConfigWidget, subConfigWidgets)
|
||||||
m_subWidgets->addWidget(subConfigWidget->displayName(), subConfigWidget);
|
addSubWidget(subConfigWidget->displayName(), subConfigWidget);
|
||||||
|
|
||||||
// Add tree items
|
// Add tree items
|
||||||
foreach (BuildConfiguration *bc, m_project->buildConfigurations()) {
|
foreach (BuildConfiguration *bc, m_project->buildConfigurations()) {
|
||||||
m_buildConfigurationComboBox->addItem(bc->displayName(), QVariant::fromValue(bc));
|
m_buildConfigurationComboBox->addItem(bc->displayName(), QVariant::fromValue<BuildConfiguration *>(bc));
|
||||||
if (bc == m_buildConfiguration)
|
if (bc == m_buildConfiguration)
|
||||||
m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1);
|
m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1);
|
||||||
}
|
}
|
||||||
@@ -264,12 +261,13 @@ void BuildSettingsWidget::updateBuildSettings()
|
|||||||
|
|
||||||
// TODO Restore position, entry from combbox
|
// TODO Restore position, entry from combbox
|
||||||
// TODO? select entry from combobox ?
|
// TODO? select entry from combobox ?
|
||||||
|
|
||||||
activeBuildConfigurationChanged();
|
activeBuildConfigurationChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildSettingsWidget::currentIndexChanged(int index)
|
void BuildSettingsWidget::currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
m_buildConfiguration = (BuildConfiguration *) m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
|
m_buildConfiguration = m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
|
||||||
activeBuildConfigurationChanged();
|
activeBuildConfigurationChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,7 +279,7 @@ void BuildSettingsWidget::activeBuildConfigurationChanged()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (QWidget *widget, m_subWidgets->widgets()) {
|
foreach (QWidget *widget, subWidgets()) {
|
||||||
if (BuildConfigWidget *buildStepWidget = qobject_cast<BuildConfigWidget*>(widget)) {
|
if (BuildConfigWidget *buildStepWidget = qobject_cast<BuildConfigWidget*>(widget)) {
|
||||||
buildStepWidget->init(m_buildConfiguration);
|
buildStepWidget->init(m_buildConfiguration);
|
||||||
}
|
}
|
||||||
@@ -311,14 +309,14 @@ void BuildSettingsWidget::createConfiguration()
|
|||||||
|
|
||||||
void BuildSettingsWidget::cloneConfiguration()
|
void BuildSettingsWidget::cloneConfiguration()
|
||||||
{
|
{
|
||||||
int index = m_buildConfigurationComboBox->currentIndex();
|
const int index = m_buildConfigurationComboBox->currentIndex();
|
||||||
BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
|
BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
|
||||||
cloneConfiguration(bc);
|
cloneConfiguration(bc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildSettingsWidget::deleteConfiguration()
|
void BuildSettingsWidget::deleteConfiguration()
|
||||||
{
|
{
|
||||||
int index = m_buildConfigurationComboBox->currentIndex();
|
const int index = m_buildConfigurationComboBox->currentIndex();
|
||||||
BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
|
BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value<BuildConfiguration *>();
|
||||||
deleteConfiguration(bc);
|
deleteConfiguration(bc);
|
||||||
}
|
}
|
||||||
@@ -328,7 +326,7 @@ void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfigura
|
|||||||
if (!sourceConfiguration)
|
if (!sourceConfiguration)
|
||||||
return;
|
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())
|
if (newDisplayName.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -32,35 +32,22 @@
|
|||||||
|
|
||||||
#include "iprojectproperties.h"
|
#include "iprojectproperties.h"
|
||||||
|
|
||||||
#include <QtCore/QHash>
|
#include <QtGui/QWidget>
|
||||||
#include <QtGui/QComboBox>
|
|
||||||
#include <QtGui/QPushButton>
|
QT_BEGIN_NAMESPACE
|
||||||
#include <QtGui/QLabel>
|
class QComboBox;
|
||||||
#include <QtGui/QGroupBox>
|
class QLabel;
|
||||||
#include <QtGui/QSpacerItem>
|
class QMenu;
|
||||||
|
class QPushButton;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
class IBuildStepFactory;
|
|
||||||
class BuildConfiguration;
|
class BuildConfiguration;
|
||||||
|
class IBuildStepFactory;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class BuildSettingsSubWidgets : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
BuildSettingsSubWidgets(QWidget *parent);
|
|
||||||
~BuildSettingsSubWidgets();
|
|
||||||
void clear();
|
|
||||||
void addWidget(const QString &name, QWidget *widget);
|
|
||||||
QList<QWidget *> widgets() const;
|
|
||||||
private:
|
|
||||||
QList<QWidget *> m_widgets;
|
|
||||||
QList<QLabel *> m_labels;
|
|
||||||
QList<QSpacerItem *> m_spacerItems;
|
|
||||||
};
|
|
||||||
|
|
||||||
class BuildSettingsPanelFactory : public IPanelFactory
|
class BuildSettingsPanelFactory : public IPanelFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -93,6 +80,10 @@ public:
|
|||||||
BuildSettingsWidget(Project *project);
|
BuildSettingsWidget(Project *project);
|
||||||
~BuildSettingsWidget();
|
~BuildSettingsWidget();
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void addSubWidget(const QString &name, QWidget *widget);
|
||||||
|
QList<QWidget *> subWidgets() const;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateBuildSettings();
|
void updateBuildSettings();
|
||||||
void currentIndexChanged(int index);
|
void currentIndexChanged(int index);
|
||||||
@@ -105,18 +96,25 @@ private slots:
|
|||||||
void checkMakeActiveLabel();
|
void checkMakeActiveLabel();
|
||||||
void makeActive();
|
void makeActive();
|
||||||
|
|
||||||
|
void init();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void cloneConfiguration(ProjectExplorer::BuildConfiguration *toClone);
|
void cloneConfiguration(BuildConfiguration *toClone);
|
||||||
void deleteConfiguration(ProjectExplorer::BuildConfiguration *toDelete);
|
void deleteConfiguration(BuildConfiguration *toDelete);
|
||||||
|
|
||||||
Project *m_project;
|
Project *m_project;
|
||||||
|
BuildConfiguration *m_buildConfiguration;
|
||||||
|
|
||||||
QPushButton *m_addButton;
|
QPushButton *m_addButton;
|
||||||
QPushButton *m_removeButton;
|
QPushButton *m_removeButton;
|
||||||
QComboBox *m_buildConfigurationComboBox;
|
QComboBox *m_buildConfigurationComboBox;
|
||||||
BuildSettingsSubWidgets *m_subWidgets;
|
|
||||||
BuildConfiguration *m_buildConfiguration;
|
|
||||||
QMenu *m_addButtonMenu;
|
QMenu *m_addButtonMenu;
|
||||||
QLabel *m_makeActiveLabel;
|
QLabel *m_makeActiveLabel;
|
||||||
|
|
||||||
|
QList<QWidget *> m_subWidgets;
|
||||||
|
QList<QLabel *> m_labels;
|
||||||
|
|
||||||
|
int m_leftMargin;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -28,13 +28,14 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#include "buildstepspage.h"
|
#include "buildstepspage.h"
|
||||||
#include "project.h"
|
|
||||||
#include "buildconfiguration.h"
|
#include "buildconfiguration.h"
|
||||||
|
|
||||||
#include <coreplugin/coreconstants.h>
|
#include <coreplugin/coreconstants.h>
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
|
#include <QtCore/QSignalMapper>
|
||||||
|
|
||||||
#include <QtGui/QLabel>
|
#include <QtGui/QLabel>
|
||||||
#include <QtGui/QPushButton>
|
#include <QtGui/QPushButton>
|
||||||
#include <QtGui/QMenu>
|
#include <QtGui/QMenu>
|
||||||
@@ -47,40 +48,11 @@ using namespace ProjectExplorer::Internal;
|
|||||||
|
|
||||||
BuildStepsPage::BuildStepsPage(Project *project, bool clean) :
|
BuildStepsPage::BuildStepsPage(Project *project, bool clean) :
|
||||||
BuildConfigWidget(),
|
BuildConfigWidget(),
|
||||||
m_clean(clean)
|
m_clean(clean),
|
||||||
|
m_addButton(0),
|
||||||
|
m_leftMargin(-1)
|
||||||
{
|
{
|
||||||
Q_UNUSED(project)
|
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()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildStepsPage::~BuildStepsPage()
|
BuildStepsPage::~BuildStepsPage()
|
||||||
@@ -112,6 +84,10 @@ QString BuildStepsPage::displayName() const
|
|||||||
|
|
||||||
void BuildStepsPage::init(BuildConfiguration *bc)
|
void BuildStepsPage::init(BuildConfiguration *bc)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(bc, return);
|
||||||
|
|
||||||
|
setupUi();
|
||||||
|
|
||||||
foreach(BuildStepsWidgetStruct s, m_buildSteps) {
|
foreach(BuildStepsWidgetStruct s, m_buildSteps) {
|
||||||
delete s.widget;
|
delete s.widget;
|
||||||
delete s.detailsWidget;
|
delete s.detailsWidget;
|
||||||
@@ -120,7 +96,7 @@ void BuildStepsPage::init(BuildConfiguration *bc)
|
|||||||
|
|
||||||
m_configuration = bc;
|
m_configuration = bc;
|
||||||
|
|
||||||
const QList<BuildStep *> &steps = m_clean ? bc->cleanSteps() : bc->buildSteps();
|
const QList<BuildStep *> &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (BuildStep *bs, steps) {
|
foreach (BuildStep *bs, steps) {
|
||||||
addBuildStepWidget(i, bs);
|
addBuildStepWidget(i, bs);
|
||||||
@@ -128,7 +104,6 @@ void BuildStepsPage::init(BuildConfiguration *bc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_noStepsLabel->setVisible(steps.isEmpty());
|
m_noStepsLabel->setVisible(steps.isEmpty());
|
||||||
m_removeButton->setEnabled(!steps.isEmpty());
|
|
||||||
|
|
||||||
// make sure widget is updated
|
// make sure widget is updated
|
||||||
foreach(BuildStepsWidgetStruct s, m_buildSteps) {
|
foreach(BuildStepsWidgetStruct s, m_buildSteps) {
|
||||||
@@ -143,7 +118,7 @@ void BuildStepsPage::updateAddBuildStepMenu()
|
|||||||
QMap<QString, QPair<QString, IBuildStepFactory *> > map;
|
QMap<QString, QPair<QString, IBuildStepFactory *> > map;
|
||||||
//Build up a list of possible steps and save map the display names to the (internal) name and factories.
|
//Build up a list of possible steps and save map the display names to the (internal) name and factories.
|
||||||
QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IBuildStepFactory>();
|
QList<IBuildStepFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IBuildStepFactory>();
|
||||||
foreach (IBuildStepFactory * factory, factories) {
|
foreach (IBuildStepFactory *factory, factories) {
|
||||||
QStringList names = factory->canCreateForBuildConfiguration(m_configuration);
|
QStringList names = factory->canCreateForBuildConfiguration(m_configuration);
|
||||||
foreach (const QString &name, names) {
|
foreach (const QString &name, names) {
|
||||||
map.insert(factory->displayNameForName(name), QPair<QString, IBuildStepFactory *>(name, factory));
|
map.insert(factory->displayNameForName(name), QPair<QString, IBuildStepFactory *>(name, factory));
|
||||||
@@ -188,114 +163,57 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step)
|
|||||||
s.upButton->setIconSize(QSize(10, 10));
|
s.upButton->setIconSize(QSize(10, 10));
|
||||||
s.downButton->setIconSize(QSize(10, 10));
|
s.downButton->setIconSize(QSize(10, 10));
|
||||||
#endif
|
#endif
|
||||||
|
s.removeButton = new QPushButton(this);
|
||||||
|
s.removeButton->setText(QChar('X'));
|
||||||
|
s.removeButton->setMaximumHeight(22);
|
||||||
|
s.removeButton->setMaximumWidth(22);
|
||||||
|
|
||||||
// layout
|
// layout
|
||||||
QWidget *toolWidget = new QWidget(s.detailsWidget);
|
QWidget *toolWidget = new QWidget(s.detailsWidget);
|
||||||
toolWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
toolWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
s.hbox = new QHBoxLayout(toolWidget);
|
QHBoxLayout *hbox = new QHBoxLayout();
|
||||||
s.hbox->setMargin(0);
|
toolWidget->setLayout(hbox);
|
||||||
s.hbox->setSpacing(0);
|
hbox->setMargin(0);
|
||||||
s.hbox->addWidget(s.upButton);
|
hbox->setSpacing(0);
|
||||||
s.hbox->addWidget(s.downButton);
|
hbox->addWidget(s.upButton);
|
||||||
|
hbox->addWidget(s.downButton);
|
||||||
|
hbox->addWidget(s.removeButton);
|
||||||
|
|
||||||
s.detailsWidget->setToolWidget(toolWidget);
|
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_buildSteps.insert(pos, s);
|
||||||
|
|
||||||
m_vbox->insertWidget(pos, s.detailsWidget);
|
m_vbox->insertWidget(pos, s.detailsWidget);
|
||||||
|
|
||||||
connect(s.widget, SIGNAL(updateSummary()),
|
connect(s.widget, SIGNAL(updateSummary()),
|
||||||
this, SLOT(updateSummary()));
|
this, SLOT(updateSummary()));
|
||||||
|
|
||||||
connect(s.upButton, SIGNAL(clicked()),
|
connect(s.upButton, SIGNAL(clicked()),
|
||||||
this, SLOT(upBuildStep()));
|
m_upMapper, SLOT(map()));
|
||||||
connect(s.downButton, SIGNAL(clicked()),
|
connect(s.downButton, SIGNAL(clicked()),
|
||||||
this, SLOT(downBuildStep()));
|
m_downMapper, SLOT(map()));
|
||||||
|
connect(s.removeButton, SIGNAL(clicked()),
|
||||||
|
m_removeMapper, SLOT(map()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildStepsPage::addBuildStep()
|
void BuildStepsPage::addBuildStep()
|
||||||
{
|
{
|
||||||
if (QAction *action = qobject_cast<QAction *>(sender())) {
|
if (QAction *action = qobject_cast<QAction *>(sender())) {
|
||||||
BuildConfiguration *bc = m_configuration;
|
|
||||||
QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action);
|
QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action);
|
||||||
BuildStep *newStep = pair.second->create(bc, pair.first);
|
BuildStep *newStep = pair.second->create(m_configuration, pair.first);
|
||||||
int pos = m_clean ? bc->cleanSteps().count() : bc->buildSteps().count();
|
int pos = m_clean ? m_configuration->cleanSteps().count() : m_configuration->buildSteps().count();
|
||||||
m_clean ? bc->insertCleanStep(pos, newStep) : bc->insertBuildStep(pos, newStep);
|
m_clean ? m_configuration->insertCleanStep(pos, newStep) : m_configuration->insertBuildStep(pos, newStep);
|
||||||
|
|
||||||
addBuildStepWidget(pos, newStep);
|
addBuildStepWidget(pos, newStep);
|
||||||
const BuildStepsWidgetStruct s = m_buildSteps.at(pos);
|
const BuildStepsWidgetStruct s = m_buildSteps.at(pos);
|
||||||
s.widget->init();
|
s.widget->init();
|
||||||
s.detailsWidget->setSummaryText(s.widget->summaryText());
|
s.detailsWidget->setSummaryText(s.widget->summaryText());
|
||||||
|
s.detailsWidget->setExpanded(true);
|
||||||
}
|
}
|
||||||
updateBuildStepButtonsState();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BuildStepsPage::updateRemoveBuildStepMenu()
|
|
||||||
{
|
|
||||||
QMenu *menu = m_removeButton->menu();
|
|
||||||
menu->clear();
|
|
||||||
const QList<BuildStep *> &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<QAction *>(sender());
|
|
||||||
if (action) {
|
|
||||||
int pos = m_removeButton->menu()->actions().indexOf(action);
|
|
||||||
const QList<BuildStep *> &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<QToolButton *>(sender());
|
|
||||||
if (!tb)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i=0; i<m_buildSteps.count(); ++i) {
|
|
||||||
if (m_buildSteps.at(i).upButton == tb) {
|
|
||||||
pos = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pos == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
stepMoveUp(pos);
|
|
||||||
updateBuildStepButtonsState();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BuildStepsPage::downBuildStep()
|
|
||||||
{
|
|
||||||
int pos = -1;
|
|
||||||
QToolButton *tb = qobject_cast<QToolButton *>(sender());
|
|
||||||
if (!tb)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i=0; i<m_buildSteps.count(); ++i) {
|
|
||||||
if (m_buildSteps.at(i).downButton == tb) {
|
|
||||||
pos = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pos == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
stepMoveUp(pos + 1);
|
|
||||||
updateBuildStepButtonsState();
|
updateBuildStepButtonsState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,19 +223,84 @@ void BuildStepsPage::stepMoveUp(int pos)
|
|||||||
|
|
||||||
m_vbox->insertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget);
|
m_vbox->insertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget);
|
||||||
|
|
||||||
BuildStepsWidgetStruct tmp = m_buildSteps.at(pos -1);
|
m_buildSteps.swap(pos - 1, pos);
|
||||||
m_buildSteps[pos -1] = m_buildSteps.at(pos);
|
|
||||||
m_buildSteps[pos] = tmp;
|
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()
|
void BuildStepsPage::updateBuildStepButtonsState()
|
||||||
{
|
{
|
||||||
const QList<BuildStep *> &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps();
|
const QList<BuildStep *> &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps();
|
||||||
for(int i=0; i<m_buildSteps.count(); ++i) {
|
for(int i = 0; i < m_buildSteps.count(); ++i) {
|
||||||
BuildStepsWidgetStruct s = m_buildSteps.at(i);
|
BuildStepsWidgetStruct s = m_buildSteps.at(i);
|
||||||
s.upButton->setEnabled((i>0) && !(steps.at(i)->immutable() && steps.at(i - 1)));
|
s.removeButton->setEnabled(!steps.at(i)->immutable());
|
||||||
s.downButton->setEnabled((i + 1< steps.count()) && !(steps.at(i)->immutable() && steps.at(i + 1)->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());
|
|
||||||
}
|
}
|
||||||
|
@@ -34,18 +34,17 @@
|
|||||||
#include <utils/detailswidget.h>
|
#include <utils/detailswidget.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QTreeWidgetItem;
|
|
||||||
class QHBoxLayout;
|
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
class QAbstractButton;
|
|
||||||
class QToolButton;
|
class QToolButton;
|
||||||
class QLabel;
|
class QLabel;
|
||||||
class QVBoxLayout;
|
class QVBoxLayout;
|
||||||
|
class QSignalMapper;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
class Project;
|
class Project;
|
||||||
|
class BuildConfiguration;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -59,7 +58,7 @@ struct BuildStepsWidgetStruct
|
|||||||
Utils::DetailsWidget *detailsWidget;
|
Utils::DetailsWidget *detailsWidget;
|
||||||
QToolButton *upButton;
|
QToolButton *upButton;
|
||||||
QToolButton *downButton;
|
QToolButton *downButton;
|
||||||
QHBoxLayout *hbox;
|
QPushButton *removeButton;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BuildStepsPage : public BuildConfigWidget
|
class BuildStepsPage : public BuildConfigWidget
|
||||||
@@ -76,29 +75,32 @@ public:
|
|||||||
private slots:
|
private slots:
|
||||||
void updateAddBuildStepMenu();
|
void updateAddBuildStepMenu();
|
||||||
void addBuildStep();
|
void addBuildStep();
|
||||||
void updateRemoveBuildStepMenu();
|
|
||||||
void removeBuildStep();
|
|
||||||
void upBuildStep();
|
|
||||||
void downBuildStep();
|
|
||||||
void updateSummary();
|
void updateSummary();
|
||||||
|
void stepMoveUp(int pos);
|
||||||
|
void stepMoveDown(int pos);
|
||||||
|
void stepRemove(int pos);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void stepMoveUp(int pos);
|
void setupUi();
|
||||||
void updateBuildStepButtonsState();
|
void updateBuildStepButtonsState();
|
||||||
void addBuildStepWidget(int pos, BuildStep *step);
|
void addBuildStepWidget(int pos, BuildStep *step);
|
||||||
|
|
||||||
BuildConfiguration *m_configuration;
|
BuildConfiguration * m_configuration;
|
||||||
QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash;
|
QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash;
|
||||||
bool m_clean;
|
bool m_clean;
|
||||||
|
|
||||||
QList<QHBoxLayout *> m_titleLayouts;
|
|
||||||
QList<BuildStepsWidgetStruct> m_buildSteps;
|
QList<BuildStepsWidgetStruct> m_buildSteps;
|
||||||
|
|
||||||
QVBoxLayout *m_vbox;
|
QVBoxLayout *m_vbox;
|
||||||
|
|
||||||
QLabel *m_noStepsLabel;
|
QLabel *m_noStepsLabel;
|
||||||
QPushButton *m_addButton;
|
QPushButton *m_addButton;
|
||||||
QPushButton *m_removeButton;
|
|
||||||
|
QSignalMapper *m_upMapper;
|
||||||
|
QSignalMapper *m_downMapper;
|
||||||
|
QSignalMapper *m_removeMapper;
|
||||||
|
|
||||||
|
int m_leftMargin;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
Reference in New Issue
Block a user