CMake: Fix configurations tab bar appearance

A tab bar should span completely above the group that it "tabs", and
have no spacing to it. Otherwise there are funny visual artifacts, and
the visual correspondance is not clear.

Add an option for spacing to LayoutBuilder for that.

Change-Id: I5ca9dc713fff95599c9ec1cf90abe8473bc67c2a
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Eike Ziller
2022-02-15 10:41:13 +01:00
parent 282c3d0dab
commit 209ecc91a0
3 changed files with 41 additions and 20 deletions

View File

@@ -106,29 +106,36 @@ LayoutBuilder::LayoutItem::LayoutItem(const QString &text)
: text(text)
{}
static QLayout *createLayoutFromType(LayoutBuilder::LayoutType layoutType)
QLayout *LayoutBuilder::createLayout() const
{
switch (layoutType) {
QLayout *layout = nullptr;
switch (m_layoutType) {
case LayoutBuilder::FormLayout: {
auto formLayout = new QFormLayout;
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
return formLayout;
layout = formLayout;
break;
}
case LayoutBuilder::GridLayout: {
auto gridLayout = new QGridLayout;
return gridLayout;
layout = gridLayout;
break;
}
case LayoutBuilder::HBoxLayout: {
auto hboxLayout = new QHBoxLayout;
return hboxLayout;
layout = hboxLayout;
break;
}
case LayoutBuilder::VBoxLayout: {
auto vboxLayout = new QVBoxLayout;
return vboxLayout;
layout = vboxLayout;
break;
}
}
QTC_CHECK(false);
return nullptr;
QTC_ASSERT(layout, return nullptr);
if (m_spacing)
layout->setSpacing(*m_spacing);
return layout;
}
static void setMargins(bool on, QLayout *layout)
@@ -246,7 +253,7 @@ static void doLayoutHelper(QLayout *layout,
*/
LayoutBuilder::LayoutItem::LayoutItem(const LayoutBuilder &builder)
{
layout = createLayoutFromType(builder.m_layoutType);
layout = builder.createLayout();
doLayoutHelper(layout, builder.m_items);
setMargins(builder.m_withMargins, layout);
}
@@ -287,6 +294,12 @@ LayoutBuilder::LayoutBuilder(LayoutType layoutType, const LayoutItems &items)
addItem(item);
}
LayoutBuilder &LayoutBuilder::setSpacing(int spacing)
{
m_spacing = spacing;
return *this;
}
LayoutBuilder::LayoutBuilder() = default;
/*!
@@ -343,7 +356,7 @@ LayoutBuilder &LayoutBuilder::addItem(const LayoutItem &item)
void LayoutBuilder::doLayout(QWidget *parent)
{
QLayout *layout = createLayoutFromType(m_layoutType);
QLayout *layout = createLayout();
parent->setLayout(layout);
doLayoutHelper(layout, m_items);

View File

@@ -27,6 +27,8 @@
#include "utils_global.h"
#include "optional.h"
#include <QList>
#include <QString>
#include <QVariant>
@@ -97,6 +99,8 @@ public:
~LayoutBuilder();
LayoutBuilder &setSpacing(int spacing);
LayoutBuilder &addItem(const LayoutItem &item);
LayoutBuilder &addItems(const LayoutItems &items);
@@ -148,10 +152,12 @@ public:
protected:
explicit LayoutBuilder(); // Adds to existing layout.
QLayout *createLayout() const;
void doLayout(QWidget *parent);
LayoutItems m_items;
LayoutType m_layoutType;
Utils::optional<int> m_spacing;
bool m_withMargins = false;
};

View File

@@ -339,8 +339,9 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
qmlDebugAspect
},
m_warningMessageLabel,
Space(10),
Row{m_kitConfiguration, m_configurationStates},
m_kitConfiguration,
Column {
m_configurationStates,
Group {
cmakeConfiguration,
Row {
@@ -349,6 +350,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
},
m_reconfigureButton,
}
}.setSpacing(0)
}.attachTo(details, false);
updateAdvancedCheckBox();