From 209ecc91a0119bbac6f5fa685c70dbdb072c810f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 15 Feb 2022 10:41:13 +0100 Subject: [PATCH] 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: Reviewed-by: hjk Reviewed-by: Alessandro Portale --- src/libs/utils/layoutbuilder.cpp | 33 +++++++++++++------ src/libs/utils/layoutbuilder.h | 6 ++++ .../cmakebuildconfiguration.cpp | 22 +++++++------ 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index d82617ea463..9a2c067cb29 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -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); diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index a258690416e..5953fa09f95 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -27,6 +27,8 @@ #include "utils_global.h" +#include "optional.h" + #include #include #include @@ -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 m_spacing; bool m_withMargins = false; }; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 69e4d01dd09..abf3d4f552d 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -339,16 +339,18 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) qmlDebugAspect }, m_warningMessageLabel, - Space(10), - Row{m_kitConfiguration, m_configurationStates}, - Group { - cmakeConfiguration, - Row { - bc->aspect(), - bc->aspect() - }, - m_reconfigureButton, - } + m_kitConfiguration, + Column { + m_configurationStates, + Group { + cmakeConfiguration, + Row { + bc->aspect(), + bc->aspect() + }, + m_reconfigureButton, + } + }.setSpacing(0) }.attachTo(details, false); updateAdvancedCheckBox();