diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index ea873b6151c..3caeca5664d 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -791,6 +792,11 @@ void Widget::setCursor(Qt::CursorShape shape) access(this)->setCursor(shape); } +void Widget::setSizePolicy(const QSizePolicy &policy) +{ + access(this)->setSizePolicy(policy); +} + void Widget::activateWindow() { access(this)->activateWindow(); diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index 12349149cde..f195f30ca06 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -31,6 +31,7 @@ class QObject; class QPushButton; class QScrollArea; class QSize; +class QSizePolicy; class QSpinBox; class QSplitter; class QStackedWidget; @@ -250,6 +251,7 @@ public: void setAutoFillBackground(bool); void setLayout(const Layout &layout); void setSize(int, int); + void setSizePolicy(const QSizePolicy &policy); void setFixedSize(const QSize &); void setWindowTitle(const QString &); void setWindowFlags(Qt::WindowFlags); @@ -537,6 +539,7 @@ QTC_DEFINE_BUILDER_SETTER(widgetAttribute, setWidgetAttribute); QTC_DEFINE_BUILDER_SETTER(autoFillBackground, setAutoFillBackground); QTC_DEFINE_BUILDER_SETTER(readOnly, setReadOnly); QTC_DEFINE_BUILDER_SETTER(markdown, setMarkdown); +QTC_DEFINE_BUILDER_SETTER(sizePolicy, setSizePolicy); QTC_DEFINE_BUILDER_SETTER(basePath, setBasePath); QTC_DEFINE_BUILDER_SETTER(fixedSize, setFixedSize); diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index c9b2a9dc1e4..aae28b7ddcf 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -88,6 +88,7 @@ CREATE_HAS_FUNC(onTextChanged, nullptr, nullptr) CREATE_HAS_FUNC(onClicked, nullptr, nullptr) CREATE_HAS_FUNC(setText, QString()) CREATE_HAS_FUNC(setMarkdown, QString()) +CREATE_HAS_FUNC(setSizePolicy, QSizePolicy()) CREATE_HAS_FUNC(setReadOnly, bool()) CREATE_HAS_FUNC(setTitle, QString()) CREATE_HAS_FUNC(setValue, int()) @@ -290,6 +291,19 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject if (markdown) item->setMarkdown(*markdown); } + if constexpr (has_setSizePolicy) { + auto sizePolicy = children.get>("sizePolicy"); + if (sizePolicy) { + QTC_ASSERT( + sizePolicy->size() == 2, + throw sol::error( + "sizePolicy must be array of 2 elements: horizontalPolicy, verticalPolicy.") + ); + auto horizontalPolicy = sizePolicy->get(1); + auto verticalPolicy = sizePolicy->get(2); + item->setSizePolicy(QSizePolicy(horizontalPolicy, verticalPolicy)); + } + } if constexpr (has_setTitle) { item->setTitle(children.get_or("title", "")); } @@ -552,6 +566,9 @@ void setupGuiModule() mirrorEnum(gui, QMetaEnum::fromType()); mirrorEnum(gui, QMetaEnum::fromType()); + auto sizePolicy = gui.create_named("QSizePolicy"); + mirrorEnum(sizePolicy, QMetaEnum::fromType()); + gui.new_usertype( "Stack", sol::call_constructor, diff --git a/src/plugins/lua/meta/gui.lua b/src/plugins/lua/meta/gui.lua index 7f95709ec85..a12173f96a8 100644 --- a/src/plugins/lua/meta/gui.lua +++ b/src/plugins/lua/meta/gui.lua @@ -26,6 +26,7 @@ gui.widget = {} ---@field windowFlags? WindowType[] The window flags of the widget. ---@field widgetAttributes? WidgetAttributeMapT The widget attributes of the widget. ---@field autoFillBackground? boolean A boolean, representing whether the widget should automatically fill its background. +---@field sizePolicy? SizePolicy.Policy[] Two size policies of the widget, horizontal and vertical. gui.baseWidgetOptions = {} ---@class (exact) WidgetOptions : BaseWidgetOptions @@ -460,6 +461,20 @@ gui.CursorShape = { CustomCursor = 0 } +gui.SizePolicy = { + --- Enum representing size policy. + ---@enum Policy + Policy = { + Fixed = 0, + Minimum = 0, + Maximum = 0, + Preferred = 0, + MinimumExpanding = 0, + Expanding = 0, + Ignored = 0 + } +} + ---@class Space : Layout gui.space = {}