From ed609dbb450f5ae2b205c9018ff51af650ad0e2d Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 15 Oct 2024 13:57:56 +0200 Subject: [PATCH] Utils: Add ScrollArea Change-Id: I772f1d7dbc1c24d16ddcb54c3d66a89d9c238bf7 Reviewed-by: hjk --- src/libs/utils/layoutbuilder.cpp | 14 ++++++++++++++ src/libs/utils/layoutbuilder.h | 11 +++++++++++ src/plugins/lua/bindings/gui.cpp | 14 ++++++++++++++ src/plugins/lua/meta/gui.lua | 7 +++++++ 4 files changed, 46 insertions(+) diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index 0e87a84d373..8c5523e0660 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -967,6 +968,19 @@ void addToStack(Stack *stack, QWidget *inner) access(stack)->addWidget(inner); } +// ScrollArea + +ScrollArea::ScrollArea(const Layout &inner) +{ + ptr = new Implementation; + access(this)->setWidget(inner.emerge()); +} + +void ScrollArea::setLayout(const Layout &inner) +{ + access(this)->setWidget(inner.emerge()); +} + // Splitter Splitter::Splitter(std::initializer_list ps) diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index 875730793e8..db17cddac6c 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -29,6 +29,7 @@ class QLabel; class QLayout; class QObject; class QPushButton; +class QScrollArea; class QSize; class QSpinBox; class QSplitter; @@ -360,6 +361,16 @@ public: void setChildrenCollapsible(bool collapsible); }; +class QTCREATOR_UTILS_EXPORT ScrollArea : public Widget +{ +public: + using Implementation = QScrollArea; + + ScrollArea(const Layout &inner); + + void setLayout(const Layout &inner); +}; + class QTCREATOR_UTILS_EXPORT Stack : public Widget { public: diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index 18b267b7de4..5afe290ec64 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -517,6 +517,20 @@ void setupGuiModule() sol::base_classes, sol::bases()); + gui.new_usertype( + "ScrollArea", + sol::call_constructor, + sol::factories( + [](const Layout &inner) { + auto item = std::make_unique(inner); + return item; + }, + [guard](const sol::table &children) { + return constructWidgetType(children, guard); + }), + sol::base_classes, + sol::bases()); + gui.new_usertype( "TextEdit", sol::call_constructor, diff --git a/src/plugins/lua/meta/gui.lua b/src/plugins/lua/meta/gui.lua index 35eda77b358..344f8a137ff 100644 --- a/src/plugins/lua/meta/gui.lua +++ b/src/plugins/lua/meta/gui.lua @@ -104,6 +104,13 @@ function gui.Form(children) end ---@class Stack : Widget local stack = {} +---A ScrollArea widget. +---@class ScrollArea : Widget + +---@param options WidgetOptions +---@return ScrollArea +function gui.ScrollArea(options) end + ---@param options WidgetOptions ---@return Stack function gui.Stack(options) end