diff options
author | Michael Weghorn <m.weghorn@posteo.de> | 2024-12-20 23:48:25 +0100 |
---|---|---|
committer | Michael Weghorn <m.weghorn@posteo.de> | 2024-12-21 09:31:03 +0100 |
commit | 0f3cf3091666ef393e189b539aa9a808e168df81 (patch) | |
tree | b2647e404f7f7cadf59e73e6b4465ec3c6b6e5ac | |
parent | 9c11d1f4350a1a49eb955d9d280dff0adcabf33b (diff) |
tdf#130857 qt weld: Set menu button's menu defined in .ui file
Make the existing local helper function `extractPopupMenu`
used by VclBuilder a static method in the BuilderBase base
class for reuse by QtBuilder.
Use it in QtBuilder::makeObject to evaluate
the "popup" property for a "GtkMenuButton"
object, get the corresponding QMenu and set
it for the button.
The code currently assumes that the corresponding
menu is aleady known, i.e. was defined earlier in
the .ui file than the menu button it belongs to.
VclBuilder doesn't rely on that, so a handling
similar to there could be implemented as and when
needed.
Change-Id: I95446fb7a369f2cfee0d8d51432933582bbfd570
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178972
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
-rw-r--r-- | include/vcl/builderbase.hxx | 1 | ||||
-rw-r--r-- | vcl/qt5/QtBuilder.cxx | 14 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 10 |
3 files changed, 19 insertions, 6 deletions
diff --git a/include/vcl/builderbase.hxx b/include/vcl/builderbase.hxx index 2632dd6417af..7e892b387aac 100644 --- a/include/vcl/builderbase.hxx +++ b/include/vcl/builderbase.hxx @@ -90,6 +90,7 @@ protected: static bool extractEntry(stringmap& rMap); static OUString extractIconName(stringmap& rMap); static OUString extractLabel(stringmap& rMap); + static OUString extractPopupMenu(stringmap& rMap); static bool extractShowExpanders(stringmap& rMap); static OUString extractTitle(stringmap& rMap); static OUString extractTooltipText(stringmap& rMap); diff --git a/vcl/qt5/QtBuilder.cxx b/vcl/qt5/QtBuilder.cxx index 6cfe11612b00..9e8985d04d60 100644 --- a/vcl/qt5/QtBuilder.cxx +++ b/vcl/qt5/QtBuilder.cxx @@ -278,6 +278,18 @@ QObject* QtBuilder::makeObject(QObject* pParent, std::u16string_view sName, std: pObject = pLabel; } + else if (sName == u"GtkMenuButton") + { + QToolButton* pMenuButton = new QToolButton(pParentWidget); + const OUString sMenu = extractPopupMenu(rMap); + if (!sMenu.isEmpty()) + { + QMenu* pMenu = get_menu(sMenu); + assert(pMenu && "menu button references non-existing menu"); + pMenuButton->setMenu(pMenu); + } + pObject = pMenuButton; + } else if (sName == u"GtkNotebook") { pObject = new QTabWidget(pParentWidget); @@ -318,7 +330,7 @@ QObject* QtBuilder::makeObject(QObject* pParent, std::u16string_view sName, std: { pObject = new QPlainTextEdit(pParentWidget); } - else if (sName == u"GtkToggleButton" || sName == u"GtkMenuButton") + else if (sName == u"GtkToggleButton") { pObject = new QToolButton(pParentWidget); } diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index ed59785cc791..df2df8235f68 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -878,11 +878,6 @@ namespace return extractBoolEntry(rMap, u"draw-value"_ustr, true); } - OUString extractPopupMenu(VclBuilder::stringmap& rMap) - { - return extractStringEntry(rMap, u"popup"_ustr); - } - OUString extractWidgetName(VclBuilder::stringmap& rMap) { return extractStringEntry(rMap, u"name"_ustr); @@ -3407,6 +3402,11 @@ OUString BuilderBase::extractLabel(VclBuilder::stringmap& rMap) return extractStringEntry(rMap, u"label"_ustr); } +OUString BuilderBase::extractPopupMenu(stringmap& rMap) +{ + return extractStringEntry(rMap, u"popup"_ustr); +} + bool BuilderBase::extractResizable(stringmap& rMap) { return extractBoolEntry(rMap, u"resizable"_ustr, true); |