From 8f54cf538457974415cf045c0d6685b65cf37a73 Mon Sep 17 00:00:00 2001 From: Laurent Montel Date: Tue, 22 Oct 2024 11:34:15 +0200 Subject: [PATCH] feat: return list of action menu from specific language --- src/core/rcdocument.cpp | 35 +++++++++++++++++++++++++++++++++++ src/core/rcdocument.h | 1 + 2 files changed, 36 insertions(+) diff --git a/src/core/rcdocument.cpp b/src/core/rcdocument.cpp index d7f31fe1..e8b10f15 100644 --- a/src/core/rcdocument.cpp +++ b/src/core/rcdocument.cpp @@ -157,6 +157,41 @@ RcCore::ActionList RcDocument::actionsFromMenu(const QString &menuId) const return actions; } +/*! + * \qmlmethod array RcDocument::actionsFromMenuForLanguage(string menuId, string language) + * Returns all actions used in the menu `menuId` for language `language`. + */ +RcCore::ActionList RcDocument::actionsFromMenuForLanguage(const QString &menuId, const QString &language) const +{ + LOG(menuId); + + if (!isDataValid()) + return {}; + + RcCore::ActionList actions; + + if (m_rcFile.isValid && m_rcFile.data.contains(language)) { + const RcCore::Data data = const_cast(&m_rcFile)->data[language]; + if (auto menu = data.menu(menuId)) { + const auto actionIds = menu->actionIds(); + auto actionsForLanguages = RcCore::convertActions( + data, static_cast(DEFAULT_VALUE(ConversionFlag, RcAssetFlags))); + for (const auto &id : actionIds) { + // We can't use actions() as it uses m_cacheActions + auto result = kdalgorithms::find_if(actionsForLanguages, [id](const auto &data) { + return data.id == id; + }); + if (result) { + actions.push_back(*result); + } + } + } + } else { + return {}; + } + return actions; +} + /*! * \qmlmethod array RcDocument::actionsFromToolbar(string toolBarId) * Returns all actions used in the toolbar `toolBarId`. diff --git a/src/core/rcdocument.h b/src/core/rcdocument.h index 043e7171..67a2ee8d 100644 --- a/src/core/rcdocument.h +++ b/src/core/rcdocument.h @@ -66,6 +66,7 @@ class RcDocument : public Document QList actions() const; Q_INVOKABLE RcCore::Action action(const QString &id) const; Q_INVOKABLE RcCore::ActionList actionsFromMenu(const QString &menuId) const; + Q_INVOKABLE RcCore::ActionList actionsFromMenuForLanguage(const QString &menuId, const QString &language) const; Q_INVOKABLE RcCore::ActionList actionsFromToolbar(const QString &toolBarId) const; QList toolBars() const;