From f3b67568cd57c818a38d73cfdbc21a1735b6e9e6 Mon Sep 17 00:00:00 2001 From: Lukasz Papierkowski Date: Thu, 22 Aug 2024 15:11:32 +0200 Subject: [PATCH] LUA: Add icon path to the widget from GUI bindings Change-Id: I4f9ac52639e4edb1b65a0637e009a6bbba6998dd Reviewed-by: Marcus Tillmanns --- src/libs/utils/layoutbuilder.cpp | 14 ++++++++++++++ src/libs/utils/layoutbuilder.h | 6 ++++++ src/plugins/lua/bindings/gui.cpp | 11 +++++++++-- src/plugins/lua/meta/gui.lua | 1 + 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index f31f4a96d0d..43554d10465 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -3,6 +3,9 @@ #include "layoutbuilder.h" +#include +#include + #include #include #include @@ -873,6 +876,17 @@ void PushButton::setText(const QString &text) access(this)->setText(text); } +void PushButton::setIconPath(const Utils::FilePath &iconPath) +{ + if (!iconPath.exists()) { + access(this)->setIcon({}); + return; + } + + Utils::Icon icon{iconPath}; + access(this)->setIcon(icon.icon()); +} + void PushButton::onClicked(const std::function &func, QObject *guard) { QObject::connect(access(this), &QAbstractButton::clicked, guard, func); diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index d041d6120d2..e66241c49e5 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -38,6 +38,11 @@ class QVBoxLayout; class QWidget; QT_END_NAMESPACE +namespace Utils +{ +class FilePath; +} // Utils + namespace Layouting { ////////////////////////////////////////////// @@ -285,6 +290,7 @@ public: PushButton(std::initializer_list ps); void setText(const QString &); + void setIconPath(const Utils::FilePath &); void onClicked(const std::function &, QObject *guard); }; diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index a5af280559e..618adb8fead 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -6,6 +6,7 @@ #include "inheritance.h" #include +#include #include #include @@ -99,10 +100,16 @@ HAS_MEM_FUNC(setSize, hasSetSize); HAS_MEM_FUNC(setWindowFlags, hasSetWindowFlags); HAS_MEM_FUNC(setWidgetAttribute, hasSetWidgetAttribute); HAS_MEM_FUNC(setAutoFillBackground, hasSetAutoFillBackground); +HAS_MEM_FUNC(setIconPath, hasSetIconPath); template -void setProperties(std::unique_ptr &item, const sol::table &children, QObject *guard) -{ +void setProperties(std::unique_ptr &item, const sol::table &children, QObject *guard) { + if constexpr (hasSetIconPath::value) { + const auto iconPath = children.get>("iconPath"); + if (iconPath) + item->setIconPath(*iconPath); + } + if constexpr (hasSetWindowFlags::value) { sol::optional windowFlags = children.get>( "windowFlags"); diff --git a/src/plugins/lua/meta/gui.lua b/src/plugins/lua/meta/gui.lua index 0bf3c54dc06..610c0a95ead 100644 --- a/src/plugins/lua/meta/gui.lua +++ b/src/plugins/lua/meta/gui.lua @@ -30,6 +30,7 @@ gui.baseWidgetOptions = {} ---@field title? string The title of the widget, if applicable. ---@field onTextChanged? function The function to be called when the text of the widget changes, if applicable. ---@field onClicked? function The function to be called when the widget is clicked, if applicable. +---@field iconPath? FilePath The path to the icon of the widget, if applicable. Empty or not existent paths set null icon. (see [QIcon](https://doc.qt.io/qt-5/qicon.html#QIcon)) ---@field text? string The text of the widget, if applicable. ---@field value? integer The value of the widget, if applicable. ---@field [1]? Layout The layout of the widget, if applicable.