iOS: Inline IosBuildStepConfigWidget

In preparation of aspectification.

Change-Id: I0a97440aa6c4bc749af51219ccace519982bfaa1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-06-26 11:41:36 +02:00
parent 5d6c84777a
commit 54c82c950c
6 changed files with 110 additions and 171 deletions

View File

@@ -5,7 +5,7 @@ add_qtc_plugin(Ios
createsimulatordialog.cpp createsimulatordialog.h createsimulatordialog.ui
ios.qrc
iosbuildconfiguration.cpp iosbuildconfiguration.h
iosbuildstep.cpp iosbuildstep.h iosbuildstep.ui
iosbuildstep.cpp iosbuildstep.h
iosconfigurations.cpp iosconfigurations.h
iosconstants.h
iosdeploystep.cpp iosdeploystep.h

View File

@@ -53,7 +53,6 @@ SOURCES += \
FORMS += \
iossettingswidget.ui \
iosbuildstep.ui \
iospresetbuildstep.ui \
createsimulatordialog.ui \
simulatoroperationdialog.ui

View File

@@ -22,7 +22,6 @@ QtcPlugin {
"iosbuildconfiguration.h",
"iosbuildstep.cpp",
"iosbuildstep.h",
"iosbuildstep.ui",
"iosconfigurations.cpp",
"iosconfigurations.h",
"iosconstants.h",

View File

@@ -25,7 +25,6 @@
#include "iosbuildstep.h"
#include "iosconstants.h"
#include "ui_iosbuildstep.h"
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/target.h>
@@ -48,6 +47,12 @@
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPlainTextEdit>
#include <QPushButton>
using namespace Core;
using namespace ProjectExplorer;
using namespace Utils;
@@ -63,6 +68,109 @@ const char BUILD_USE_DEFAULT_ARGS_KEY[] = "Ios.IosBuildStep.XcodeArgumentsUseDef
const char BUILD_ARGUMENTS_KEY[] = "Ios.IosBuildStep.XcodeArguments";
const char CLEAN_KEY[] = "Ios.IosBuildStep.Clean";
//
// IosBuildStepConfigWidget
//
class IosBuildStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
{
public:
IosBuildStepConfigWidget(IosBuildStep *buildStep)
: BuildStepConfigWidget(buildStep), m_buildStep(buildStep)
{
auto buildArgumentsLabel = new QLabel(this);
buildArgumentsLabel->setText(tr("Base arguments:"));
m_buildArgumentsTextEdit = new QPlainTextEdit(this);
m_buildArgumentsTextEdit->setPlainText(QtcProcess::joinArgs(m_buildStep->baseArguments()));
m_resetDefaultsButton = new QPushButton(this);
m_resetDefaultsButton->setLayoutDirection(Qt::RightToLeft);
m_resetDefaultsButton->setText(tr("Reset Defaults"));
m_resetDefaultsButton->setEnabled(!m_buildStep->m_useDefaultArguments);
auto extraArgumentsLabel = new QLabel(this);
m_extraArgumentsLineEdit = new QLineEdit(this);
m_extraArgumentsLineEdit->setText(QtcProcess::joinArgs(m_buildStep->m_extraArguments));
auto gridLayout = new QGridLayout(this);
gridLayout->addWidget(buildArgumentsLabel, 0, 0, 1, 1);
gridLayout->addWidget(m_buildArgumentsTextEdit, 0, 1, 2, 1);
gridLayout->addWidget(m_resetDefaultsButton, 1, 2, 1, 1);
gridLayout->addWidget(extraArgumentsLabel, 2, 0, 1, 1);
gridLayout->addWidget(m_extraArgumentsLineEdit, 2, 1, 1, 1);
extraArgumentsLabel->setText(tr("Extra arguments:"));
setDisplayName(tr("iOS build", "iOS BuildStep display name."));
updateDetails();
connect(m_buildArgumentsTextEdit, &QPlainTextEdit::textChanged,
this, &IosBuildStepConfigWidget::buildArgumentsChanged);
connect(m_resetDefaultsButton, &QAbstractButton::clicked,
this, &IosBuildStepConfigWidget::resetDefaultArguments);
connect(m_extraArgumentsLineEdit, &QLineEdit::editingFinished,
this, &IosBuildStepConfigWidget::extraArgumentsChanged);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
this, &IosBuildStepConfigWidget::updateDetails);
connect(m_buildStep->target(), &Target::kitChanged,
this, &IosBuildStepConfigWidget::updateDetails);
Project *pro = m_buildStep->target()->project();
pro->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() {
if (static_cast<BuildConfiguration *>(sender())->isActive())
updateDetails();
});
connect(pro, &Project::activeProjectConfigurationChanged,
this, [this](ProjectConfiguration *pc) {
if (pc && pc->isActive())
updateDetails();
});
}
private:
void buildArgumentsChanged()
{
m_buildStep->setBaseArguments(QtcProcess::splitArgs(m_buildArgumentsTextEdit->toPlainText()));
m_resetDefaultsButton->setEnabled(!m_buildStep->m_useDefaultArguments);
updateDetails();
}
void resetDefaultArguments()
{
m_buildStep->setBaseArguments(m_buildStep->defaultArguments());
m_buildArgumentsTextEdit->setPlainText(QtcProcess::joinArgs(m_buildStep->baseArguments()));
m_resetDefaultsButton->setEnabled(!m_buildStep->m_useDefaultArguments);
}
void extraArgumentsChanged()
{
m_buildStep->setExtraArguments(QtcProcess::splitArgs(m_extraArgumentsLineEdit->text()));
}
void updateDetails()
{
BuildConfiguration *bc = m_buildStep->buildConfiguration();
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
param.setWorkingDirectory(bc->buildDirectory());
param.setEnvironment(bc->environment());
param.setCommandLine({m_buildStep->buildCommand(), m_buildStep->allArguments()});
setSummaryText(param.summary(displayName()));
}
IosBuildStep *m_buildStep;
QPlainTextEdit *m_buildArgumentsTextEdit;
QPushButton *m_resetDefaultsButton;
QLineEdit *m_extraArgumentsLineEdit;
};
IosBuildStep::IosBuildStep(BuildStepList *parent) :
AbstractProcessStep(parent, IOS_BUILD_STEP_ID)
{
@@ -199,89 +307,6 @@ QStringList IosBuildStep::baseArguments() const
return m_baseBuildArguments;
}
//
// IosBuildStepConfigWidget
//
IosBuildStepConfigWidget::IosBuildStepConfigWidget(IosBuildStep *buildStep)
: BuildStepConfigWidget(buildStep), m_buildStep(buildStep)
{
m_ui = new Ui::IosBuildStep;
m_ui->setupUi(this);
setDisplayName(tr("iOS build", "iOS BuildStep display name."));
Project *pro = m_buildStep->target()->project();
m_ui->buildArgumentsTextEdit->setPlainText(Utils::QtcProcess::joinArgs(
m_buildStep->baseArguments()));
m_ui->extraArgumentsLineEdit->setText(Utils::QtcProcess::joinArgs(
m_buildStep->m_extraArguments));
m_ui->resetDefaultsButton->setEnabled(!m_buildStep->m_useDefaultArguments);
updateDetails();
connect(m_ui->buildArgumentsTextEdit, &QPlainTextEdit::textChanged,
this, &IosBuildStepConfigWidget::buildArgumentsChanged);
connect(m_ui->resetDefaultsButton, &QAbstractButton::clicked,
this, &IosBuildStepConfigWidget::resetDefaultArguments);
connect(m_ui->extraArgumentsLineEdit, &QLineEdit::editingFinished,
this, &IosBuildStepConfigWidget::extraArgumentsChanged);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
this, &IosBuildStepConfigWidget::updateDetails);
connect(m_buildStep->target(), &Target::kitChanged,
this, &IosBuildStepConfigWidget::updateDetails);
pro->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() {
if (static_cast<BuildConfiguration *>(sender())->isActive())
updateDetails();
});
connect(pro, &Project::activeProjectConfigurationChanged,
this, [this](ProjectConfiguration *pc) {
if (pc && pc->isActive())
updateDetails();
});
}
IosBuildStepConfigWidget::~IosBuildStepConfigWidget()
{
delete m_ui;
}
void IosBuildStepConfigWidget::updateDetails()
{
BuildConfiguration *bc = m_buildStep->buildConfiguration();
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
param.setWorkingDirectory(bc->buildDirectory());
param.setEnvironment(bc->environment());
param.setCommandLine({m_buildStep->buildCommand(), m_buildStep->allArguments()});
setSummaryText(param.summary(displayName()));
}
void IosBuildStepConfigWidget::buildArgumentsChanged()
{
m_buildStep->setBaseArguments(Utils::QtcProcess::splitArgs(
m_ui->buildArgumentsTextEdit->toPlainText()));
m_ui->resetDefaultsButton->setEnabled(!m_buildStep->m_useDefaultArguments);
updateDetails();
}
void IosBuildStepConfigWidget::resetDefaultArguments()
{
m_buildStep->setBaseArguments(m_buildStep->defaultArguments());
m_ui->buildArgumentsTextEdit->setPlainText(Utils::QtcProcess::joinArgs(
m_buildStep->baseArguments()));
m_ui->resetDefaultsButton->setEnabled(!m_buildStep->m_useDefaultArguments);
}
void IosBuildStepConfigWidget::extraArgumentsChanged()
{
m_buildStep->setExtraArguments(Utils::QtcProcess::splitArgs(
m_ui->extraArgumentsLineEdit->text()));
}
//
// IosBuildStepFactory
//

View File

@@ -36,7 +36,6 @@ namespace Internal {
class IosBuildStepConfigWidget;
class IosBuildStepFactory;
namespace Ui { class IosBuildStep; }
class IosBuildStep : public ProjectExplorer::AbstractProcessStep
{
@@ -68,24 +67,6 @@ private:
bool m_clean = false;
};
class IosBuildStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
{
Q_OBJECT
public:
IosBuildStepConfigWidget(IosBuildStep *buildStep);
~IosBuildStepConfigWidget() override;
private:
void buildArgumentsChanged();
void resetDefaultArguments();
void extraArgumentsChanged();
void updateDetails();
Ui::IosBuildStep *m_ui;
IosBuildStep *m_buildStep;
};
class IosBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
public:

View File

@@ -1,65 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Ios::Internal::IosBuildStep</class>
<widget class="QWidget" name="Ios::Internal::IosBuildStep">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>756</width>
<height>183</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="buildArgumentsLabel">
<property name="text">
<string>Base arguments:</string>
</property>
</widget>
</item>
<item row="0" column="1" rowspan="2">
<widget class="QPlainTextEdit" name="buildArgumentsTextEdit"/>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="resetDefaultsButton">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string>Reset Defaults</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="extraArgumentsLabel">
<property name="text">
<string>Extra arguments:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="extraArgumentsLineEdit"/>
</item>
</layout>
<zorder>buildArgumentsTextEdit</zorder>
<zorder>resetDefaultsButton</zorder>
<zorder>extraArgumentsLabel</zorder>
<zorder>extraArgumentsLineEdit</zorder>
<zorder>buildArgumentsLabel</zorder>
</widget>
<resources/>
<connections/>
</ui>