From 36e6d4b087b6a2e6c962bad9fe2165ea79218f20 Mon Sep 17 00:00:00 2001 From: Lukasz Papierkowski Date: Mon, 19 Aug 2024 19:03:34 +0200 Subject: [PATCH] Lua: Add bindings for Widget:activateWindow() and windowFlags Change-Id: I5b3935bfdfe4c182de00891ea06b189a0d439688 Reviewed-by: Reviewed-by: Marcus Tillmanns --- src/libs/utils/layoutbuilder.cpp | 10 ++++ src/libs/utils/layoutbuilder.h | 3 + src/plugins/lua/bindings/gui.cpp | 94 ++++++++++++++++++++++++++++++++ src/plugins/lua/meta/gui.lua | 52 +++++++++++++++++- 4 files changed, 157 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index ae2488cfad3..5ba00f0ed54 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -711,6 +711,11 @@ void Widget::setWindowTitle(const QString &title) access(this)->setWindowTitle(title); } +void Widget::setWindowFlags(Qt::WindowFlags flags) +{ + access(this)->setWindowFlags(flags); +} + void Widget::setToolTip(const QString &title) { access(this)->setToolTip(title); @@ -736,6 +741,11 @@ void Widget::setContentsMargins(int left, int top, int right, int bottom) access(this)->setContentsMargins(left, top, right, bottom); } +void Widget::activateWindow() +{ + access(this)->activateWindow(); +} + QWidget *Widget::emerge() const { return access(this); diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index 9b7322a426e..bd0395ea4a7 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -224,10 +224,12 @@ public: void setLayout(const Layout &layout); void setSize(int, int); void setWindowTitle(const QString &); + void setWindowFlags(Qt::WindowFlags); void setToolTip(const QString &); void setNoMargins(int = 0); void setNormalMargins(int = 0); void setContentsMargins(int left, int top, int right, int bottom); + void activateWindow(); }; class QTCREATOR_UTILS_EXPORT Label : public Widget @@ -421,6 +423,7 @@ QTC_DEFINE_BUILDER_SETTER(title, setTitle) QTC_DEFINE_BUILDER_SETTER(toolTip, setToolTip) QTC_DEFINE_BUILDER_SETTER(windowTitle, setWindowTitle) QTC_DEFINE_BUILDER_SETTER(wordWrap, setWordWrap); +QTC_DEFINE_BUILDER_SETTER(windowFlags, setWindowFlags); // Nesting dispatchers diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index af872ba4fdf..b52a840c96c 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -94,10 +94,22 @@ HAS_MEM_FUNC(setText, hasSetText); HAS_MEM_FUNC(setTitle, hasSetTitle); HAS_MEM_FUNC(setValue, hasSetValue); HAS_MEM_FUNC(setSize, hasSetSize); +HAS_MEM_FUNC(setWindowFlags, hasSetWindowFlags); template void setProperties(std::unique_ptr &item, const sol::table &children, QObject *guard) { + if constexpr (hasSetWindowFlags::value) { + sol::optional windowFlags = children.get>( + "windowFlags"); + if (windowFlags) { + Qt::WindowFlags flags; + for (const auto &kv : *windowFlags) + flags.setFlag(static_cast(kv.second.as())); + item->setWindowFlags(flags); + } + } + if constexpr (hasSetSize::value) { sol::optional size = children.get>("size"); if (size) { @@ -316,9 +328,91 @@ void setupGuiModule() }), "show", &Widget::show, + "activateWindow", + &Widget::activateWindow, sol::base_classes, sol::bases()); + gui["WindowType"] = l.create_table_with( + "Widget", + Qt::Widget, + "Window", + Qt::Window, + "Dialog", + Qt::Dialog, + "Sheet", + Qt::Sheet, + "Drawer", + Qt::Drawer, + "Popup", + Qt::Popup, + "Tool", + Qt::Tool, + "ToolTip", + Qt::ToolTip, + "SplashScreen", + Qt::SplashScreen, + "Desktop", + Qt::Desktop, + "SubWindow", + Qt::SubWindow, + "ForeignWindow", + Qt::ForeignWindow, + "CoverWindow", + Qt::CoverWindow, + + "WindowType_Mask", + Qt::WindowType_Mask, + "MSWindowsFixedSizeDialogHint", + Qt::MSWindowsFixedSizeDialogHint, + "MSWindowsOwnDC", + Qt::MSWindowsOwnDC, + "BypassWindowManagerHint", + Qt::BypassWindowManagerHint, + "X11BypassWindowManagerHint", + Qt::X11BypassWindowManagerHint, + "FramelessWindowHint", + Qt::FramelessWindowHint, + "WindowTitleHint", + Qt::WindowTitleHint, + "WindowSystemMenuHint", + Qt::WindowSystemMenuHint, + "WindowMinimizeButtonHint", + Qt::WindowMinimizeButtonHint, + "WindowMaximizeButtonHint", + Qt::WindowMaximizeButtonHint, + "WindowMinMaxButtonsHint", + Qt::WindowMinMaxButtonsHint, + "WindowContextHelpButtonHint", + Qt::WindowContextHelpButtonHint, + "WindowShadeButtonHint", + Qt::WindowShadeButtonHint, + "WindowStaysOnTopHint", + Qt::WindowStaysOnTopHint, + "WindowTransparentForInput", + Qt::WindowTransparentForInput, + "WindowOverridesSystemGestures", + Qt::WindowOverridesSystemGestures, + "WindowDoesNotAcceptFocus", + Qt::WindowDoesNotAcceptFocus, + "MaximizeUsingFullscreenGeometryHint", + Qt::MaximizeUsingFullscreenGeometryHint, + + "CustomizeWindowHint", + Qt::CustomizeWindowHint, + "WindowStaysOnBottomHint", + Qt::WindowStaysOnBottomHint, + "WindowCloseButtonHint", + Qt::WindowCloseButtonHint, + "MacWindowToolBarButtonHint", + Qt::MacWindowToolBarButtonHint, + "BypassGraphicsProxyWidget", + Qt::BypassGraphicsProxyWidget, + "NoDropShadowWindowHint", + Qt::NoDropShadowWindowHint, + "WindowFullscreenButtonHint", + Qt::WindowFullscreenButtonHint); + gui.new_usertype( "Stack", sol::call_constructor, diff --git a/src/plugins/lua/meta/gui.lua b/src/plugins/lua/meta/gui.lua index ac3df927809..4e7297047f1 100644 --- a/src/plugins/lua/meta/gui.lua +++ b/src/plugins/lua/meta/gui.lua @@ -16,7 +16,12 @@ gui.Widget = {} ---@param children Layout ---@return Widget -function gui.Widget(children) end + +---Show the widget. (see [QWidget::show](https://doc.qt.io/qt-5/qwidget.html#show)) +function gui.widget:show() end + +---Sets the top-level widget containing this widget to be the active window. (see [QWidget::activateWindow](https://doc.qt.io/qt-5/qwidget.html#activateWindow)) +function gui.widget:activateWindow() end ---Column layout ---@class Column : Layout @@ -65,7 +70,6 @@ local form = {} ---@return Form function gui.Form(children) end - ---A stack of multiple widgets. ---@class Stack : Widget local stack = {} @@ -136,6 +140,7 @@ function gui.TabWidget(children) end ---@param child Layout|string|BaseAspect|function ---@return TabWidget function gui.TabWidget(name, child) end + ---A "Line break" in the gui. function gui.br() end @@ -172,4 +177,47 @@ function gui.onClicked(f) end ---Sets the onTextChanged handler of the parent object if possible. function gui.onTextChanged(f) end +--- Enum representing various window types. +---@enum WindowType +gui.WindowType = { + Widget = 0, + Window = 0, + Dialog = 0, + Sheet = 0, + Drawer = 0, + Popup = 0, + Tool = 0, + ToolTip = 0, + SplashScreen = 0, + Desktop = 0, + SubWindow = 0, + ForeignWindow = 0, + CoverWindow = 0, + WindowType_Mask = 0, + MSWindowsFixedSizeDialogHint = 0, + MSWindowsOwnDC = 0, + BypassWindowManagerHint = 0, + X11BypassWindowManagerHint = 0, + FramelessWindowHint = 0, + WindowTitleHint = 0, + WindowSystemMenuHint = 0, + WindowMinimizeButtonHint = 0, + WindowMaximizeButtonHint = 0, + WindowMinMaxButtonsHint = 0, + WindowContextHelpButtonHint = 0, + WindowShadeButtonHint = 0, + WindowStaysOnTopHint = 0, + WindowTransparentForInput = 0, + WindowOverridesSystemGestures = 0, + WindowDoesNotAcceptFocus = 0, + MaximizeUsingFullscreenGeometryHint = 0, + CustomizeWindowHint = 0, + WindowStaysOnBottomHint = 0, + WindowCloseButtonHint = 0, + MacWindowToolBarButtonHint = 0, + BypassGraphicsProxyWidget = 0, + NoDropShadowWindowHint = 0, + WindowFullscreenButtonHint = 0, +} + return gui