20 QtOhos::
JsState &jsState, QOhosConsumer<std::string> clickedMenuCodeConsumer)
22 return registerQOhosOnOffMethodsBasedEventHandler(
23 jsState.eval<QNapi::Object>(
"@kit.StatusBarExtensionKit.statusBarManager"),
25 [clickedMenuCodeConsumer = std::move(clickedMenuCodeConsumer)](
const QtOhos::
CallbackInfo &info) {
26 auto eventData = info.getFirstArg<QNapi::Object>(Q_FUNC_INFO);
27 auto optMenuCode = QNapi::getOptionalPropOrEmpty<QNapi::String>(
28 QNapi::getOptionalPropOrEmpty<QNapi::Object>(eventData,
"data"),
30 if (!optMenuCode.IsEmpty()) {
31 clickedMenuCodeConsumer(optMenuCode);
34 "%s: no 'menuCode' in the event (%s), ignoring it",
35 Q_FUNC_INFO, QNapi::toJsonString(eventData).c_str());
253 return QOhosOptional<QNapi::Object>();
257 auto title = QPlatformTheme::removeMnemonics(m_text).toStdString();
259 if (m_menu ==
nullptr) {
260 return [title, menuCode = m_menuCode](
QtOhos::
JsState &jsState) {
261 return makeQOhosOptional(
262 makeJsStatusBarMenuItemWithAction(jsState, title, menuCode));
265 return [title, jsSubMenuItemsFactory = m_menu->makeJsStatusBarSubMenuItemsFactory()](
QtOhos::
JsState &jsState) {
266 return makeQOhosOptional(
267 makeJsStatusBarMenuItemWithSubMenu(jsState, title, jsSubMenuItemsFactory(jsState)));
276 "%s: separator item %p used in sub-menu, which is unsupported on OHOS, ignoring",
279 return QOhosOptional<QNapi::Object>();
283 if (m_menu !=
nullptr) {
285 "%s: nested-menu item %p used in sub-menu, which is unsupported on OHOS, ignoring",
288 return QOhosOptional<QNapi::Object>();
292 auto subTitle = QPlatformTheme::removeMnemonics(m_text).toStdString();
294 return [subTitle, menuCode = m_menuCode](
QtOhos::
JsState &jsState) {
295 return makeQOhosOptional(
296 makeJsStatusBarSubMenuItem(jsState, subTitle, menuCode));
311 auto selfRef = QtOhos::makeQThreadSafeRef(
this);
312 m_jsScopeData = QtOhos::evalInJsThread(
313 [&](QtOhos::JsState &jsState) {
314 return QtOhos::makeProxyWithJsThreadDeleter(
315 QtOhos::moveToSharedPtr(
317 .m_rightMenuClickListenerHandle = registerOhosRightMenuClickListener(
319 [selfRef](std::string menuCode) {
320 selfRef.visitInQtThreadIfAlive(
321 [menuCode](
auto &self) {
322 self.handleRightClickEvent(menuCode);
332 if (menuItem ==
nullptr)
335 if (before ==
nullptr) {
336 m_menuItems.append(menuItem);
340 const int idx = m_menuItems.indexOf(before);
342 m_menuItems.insert(idx, menuItem);
344 m_menuItems.append(menuItem);
423 std::vector<std::function<QOhosOptional<QNapi::Object>(QtOhos::JsState &)>> jsMenuItemsFactories;
424 for (
auto *item : m_menuItems) {
425 auto *ohosItem = qobject_cast<QOhosStatusBarMenuItem *>(item);
426 jsMenuItemsFactories.push_back(
428 ? ohosItem->makeJsStatusBarMenuItemFactory()
429 : [](QtOhos::JsState &) {
430 return QOhosOptional<QNapi::Object>();
434 return [jsMenuItemsFactories = std::move(jsMenuItemsFactories)](
QtOhos::
JsState &jsState) {
435 std::vector<QNapi::ValueWrapper> jsGroupMenusArray;
437 std::vector<QNapi::ValueWrapper> currentJsMenuItemsArray;
439 for (
const auto &jsMenuItemFactory : jsMenuItemsFactories) {
440 QOhosOptional<QNapi::Object> optJsMenuItem = jsMenuItemFactory(jsState);
441 if (optJsMenuItem.has_value()) {
442 currentJsMenuItemsArray.push_back(optJsMenuItem.value());
444 jsGroupMenusArray.push_back(QNapi::makeArray(jsState.env(), currentJsMenuItemsArray));
445 currentJsMenuItemsArray.clear();
449 jsGroupMenusArray.push_back(QNapi::makeArray(jsState.env(), currentJsMenuItemsArray));
450 currentJsMenuItemsArray.clear();
452 return QNapi::makeArray(jsState.env(), jsGroupMenusArray);
458 std::vector<std::function<QOhosOptional<QNapi::Object>(QtOhos::JsState &)>> jsSubMenuItemsFactories;
459 for (
auto *item : m_menuItems) {
460 auto *ohosItem = qobject_cast<QOhosStatusBarMenuItem *>(item);
461 if (ohosItem !=
nullptr)
462 jsSubMenuItemsFactories.push_back(ohosItem->makeJsStatusBarSubMenuItemFactory());
465 return [jsSubMenuItemsFactories = std::move(jsSubMenuItemsFactories)](
QtOhos::
JsState &jsState) {
466 std::vector<QNapi::ValueWrapper> jsSubMenuItems;
467 for (
const auto &jsSubMenuItemsFactory : jsSubMenuItemsFactories) {
468 QOhosOptional<QNapi::Object> optJsSubMenuItem = jsSubMenuItemsFactory(jsState);
469 if (optJsSubMenuItem.has_value())
470 jsSubMenuItems.push_back(optJsSubMenuItem.value());
472 return QNapi::makeArray(jsState.env(), jsSubMenuItems);