diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index bc4e4c59f70..2edb07c343c 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -31,6 +31,7 @@ #include #include +#include #include namespace Utils { @@ -69,7 +70,7 @@ LayoutBuilder::LayoutItem::LayoutItem() Constructs a layout item proxy for \a layout, spanning the number of cells specified by \a span in the target layout, with alignment \a align. */ -LayoutBuilder::LayoutItem::LayoutItem(QLayout *layout, int span, Qt::Alignment align) +LayoutBuilder::LayoutItem::LayoutItem(QLayout *layout, int span, Alignment align) : layout(layout), span(span), align(align) {} @@ -77,7 +78,7 @@ LayoutBuilder::LayoutItem::LayoutItem(QLayout *layout, int span, Qt::Alignment a Constructs a layout item proxy for \a widget, spanning the number of cell specified by \a span in the target layout, with alignment \a align. */ -LayoutBuilder::LayoutItem::LayoutItem(QWidget *widget, int span, Qt::Alignment align) +LayoutBuilder::LayoutItem::LayoutItem(QWidget *widget, int span, Alignment align) : widget(widget), span(span), align(align) {} @@ -269,8 +270,12 @@ LayoutBuilder &LayoutBuilder::addItem(const LayoutItem &item) item.aspect->addToLayout(*this); } else { if (m_gridLayout) { - if (auto widget = item.widget) - m_gridLayout->addWidget(widget, m_currentGridRow, m_currentGridColumn, 1, item.span, item.align); + if (auto widget = item.widget) { + Qt::Alignment align; + if (item.align == AlignAsFormLabel) + align = Qt::Alignment(widget->style()->styleHint(QStyle::SH_FormLayoutLabelAlignment)); + m_gridLayout->addWidget(widget, m_currentGridRow, m_currentGridColumn, 1, item.span, align); + } m_currentGridColumn += item.span; } else { m_pendingFormItems.append(item); diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index ddf60185181..1a2ad1f5e51 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -45,6 +45,8 @@ class QTCREATOR_UTILS_EXPORT LayoutBuilder { public: enum LayoutType { GridLayout, FormLayout }; + enum Alignment { DefaultAlignment, AlignAsFormLabel }; + explicit LayoutBuilder(QWidget *parent, LayoutType layoutType = FormLayout); explicit LayoutBuilder(QLayout *layout); // Adds to existing layout. @@ -54,8 +56,8 @@ public: { public: LayoutItem(); - LayoutItem(QLayout *layout, int span = 1, Qt::Alignment align = {}); - LayoutItem(QWidget *widget, int span = 1, Qt::Alignment align = {}); + LayoutItem(QLayout *layout, int span = 1, Alignment align = {}); + LayoutItem(QWidget *widget, int span = 1, Alignment align = {}); LayoutItem(BaseAspect *aspect); LayoutItem(const QString &text); @@ -64,7 +66,7 @@ public: BaseAspect *aspect = nullptr; QString text; int span = 1; - Qt::Alignment align; + Alignment align; }; LayoutBuilder &addItem(const LayoutItem &item); diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 70151b58002..bfbf58f57fb 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -44,12 +44,14 @@ #include #include +#include #include #include #include #include #include +#include #include #include @@ -729,6 +731,24 @@ Utils::Id KitAspectWidget::kitInformationId() const return m_kitInformation->id(); } +void KitAspectWidget::addToLayout(LayoutBuilder &builder) +{ + QTC_ASSERT(!m_label, delete m_label); + m_label = new QLabel(m_kitInformation->displayName() + ':'); + m_label->setToolTip(m_kitInformation->description()); + + builder.addRow({{m_label, 1, LayoutBuilder::AlignAsFormLabel}, mainWidget(), buttonWidget()}); +} + +void KitAspectWidget::setVisible(bool visible) +{ + mainWidget()->setVisible(visible); + if (buttonWidget()) + buttonWidget()->setVisible(visible); + QTC_ASSERT(m_label, return); + m_label->setVisible(visible); +} + QString KitAspectWidget::msgManage() { return tr("Manage..."); diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index ecf542e8518..7cbc661a5c1 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -37,9 +37,14 @@ #include +QT_BEGIN_NAMESPACE +class QLabel; +QT_END_NAMESPACE + namespace Utils { class Environment; class FilePath; +class LayoutBuilder; class MacroExpander; class OutputLineParser; } // namespace Utils @@ -136,6 +141,9 @@ public: virtual QWidget *mainWidget() const = 0; virtual QWidget *buttonWidget() const { return nullptr; } + void addToLayout(Utils::LayoutBuilder &builder); + void setVisible(bool visible); + bool isSticky() const { return m_isSticky; } static QString msgManage(); @@ -149,6 +157,7 @@ protected: Kit *m_kit; const KitAspect *m_kitInformation; bool m_isSticky; + QLabel *m_label = nullptr; }; class PROJECTEXPLORER_EXPORT KitManager : public QObject diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp index caeed15cdf8..dc0797c29e7 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp @@ -46,16 +46,11 @@ #include #include #include -#include #include #include #include -#include -#include #include -#include #include -#include static const char WORKING_COPY_KIT_ID[] = "modified kit"; @@ -71,14 +66,12 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) : m_kit(k), m_modifiedKit(std::make_unique(Utils::Id(WORKING_COPY_KIT_ID))) { - static auto alignment - = static_cast(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment)); - setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); LayoutBuilder builder(this, LayoutBuilder::GridLayout); - QLabel *label = createLabel(tr("Name:"), tr("Kit name and icon.")); - builder.addRow({{label, 1, alignment}, m_nameEdit, m_iconButton}); + QLabel *label = new QLabel(tr("Name:")); + label->setToolTip(tr("Kit name and icon.")); + builder.addRow({{label, 1, LayoutBuilder::AlignAsFormLabel}, m_nameEdit, m_iconButton}); QString toolTip = tr("

The name of the kit suitable for generating " @@ -90,8 +83,9 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) : Q_ASSERT(fileSystemFriendlyNameRegexp.isValid()); m_fileSystemFriendlyNameLineEdit->setValidator(new QRegularExpressionValidator(fileSystemFriendlyNameRegexp, m_fileSystemFriendlyNameLineEdit)); - label = createLabel(tr("File system name:"), toolTip); - builder.addRow({{label, 1, alignment}, m_fileSystemFriendlyNameLineEdit}); + label = new QLabel(tr("File system name:")); + label->setToolTip(toolTip); + builder.addRow({{label, 1, LayoutBuilder::AlignAsFormLabel}, m_fileSystemFriendlyNameLineEdit}); connect(m_fileSystemFriendlyNameLineEdit, &QLineEdit::textChanged, this, &KitManagerConfigWidget::setFileSystemFriendlyName); @@ -222,9 +216,6 @@ void KitManagerConfigWidget::addAspectToWorkingCopy(KitAspect *aspect) QTC_ASSERT(widget, return); QTC_ASSERT(!m_widgets.contains(widget), return); - const QString name = aspect->displayName() + ':'; - QString toolTip = aspect->description(); - auto action = new QAction(tr("Mark as Mutable"), nullptr); action->setCheckable(true); action->setChecked(workingCopy()->isMutable(aspect->id())); @@ -239,14 +230,9 @@ void KitManagerConfigWidget::addAspectToWorkingCopy(KitAspect *aspect) m_actions << action; - static auto alignment - = static_cast(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment)); - - QLabel *label = createLabel(name, toolTip); LayoutBuilder builder(layout()); - builder.addRow({{label, 1, alignment}, widget->mainWidget(), widget->buttonWidget()}); + widget->addToLayout(builder); m_widgets.append(widget); - m_labels.append(label); } void KitManagerConfigWidget::updateVisibility() @@ -256,10 +242,7 @@ void KitManagerConfigWidget::updateVisibility() KitAspectWidget *widget = m_widgets.at(i); const bool visible = widget->visibleInKit() && !m_modifiedKit->irrelevantAspects().contains(widget->kitInformationId()); - widget->mainWidget()->setVisible(visible); - if (widget->buttonWidget()) - widget->buttonWidget()->setVisible(visible); - m_labels.at(i)->setVisible(visible); + widget->setVisible(visible); } } @@ -410,12 +393,5 @@ void KitManagerConfigWidget::showEvent(QShowEvent *event) widget->refresh(); } -QLabel *KitManagerConfigWidget::createLabel(const QString &name, const QString &toolTip) -{ - auto label = new QLabel(name); - label->setToolTip(toolTip); - return label; -} - } // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.h b/src/plugins/projectexplorer/kitmanagerconfigwidget.h index b6e775579ea..89b74d7ee7c 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.h +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.h @@ -89,13 +89,11 @@ private: }; void showEvent(QShowEvent *event) override; - QLabel *createLabel(const QString &name, const QString &toolTip); QToolButton *m_iconButton; QLineEdit *m_nameEdit; QLineEdit *m_fileSystemFriendlyNameLineEdit; QList m_widgets; - QList m_labels; Kit *m_kit; std::unique_ptr m_modifiedKit; bool m_isDefaultKit = false;