20 QtOhos::
JsState &jsState, QOhosConsumer<std::string> clickedMenuCodeConsumer)
22 return QtOhos::registerOnOffMethodsBasedEventHandler(
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 QtOhos::makeProxyWithJsThreadDeleter(
312 std::make_shared<JsScopeData>()))
314 auto selfRef = QtOhos::makeQThreadSafeRef(
this);
317 m_jsScopeData->m_rightMenuClickListenerHandle = registerOhosRightMenuClickListener(
319 [selfRef](std::string menuCode) {
320 selfRef.visitInQtThreadIfAlive(
321 [menuCode](
auto &self) {
322 self.handleRightClickEvent(menuCode);
330 if (menuItem ==
nullptr)
333 if (before ==
nullptr) {
334 m_menuItems.append(menuItem);
338 const int idx = m_menuItems.indexOf(before);
340 m_menuItems.insert(idx, menuItem);
342 m_menuItems.append(menuItem);
421 std::vector<std::function<QOhosOptional<QNapi::Object>(QtOhos::JsState &)>> jsMenuItemsFactories;
422 for (
auto *item : m_menuItems) {
423 auto *ohosItem = qobject_cast<QOhosStatusBarMenuItem *>(item);
424 jsMenuItemsFactories.push_back(
426 ? ohosItem->makeJsStatusBarMenuItemFactory()
427 : [](QtOhos::JsState &) {
428 return QOhosOptional<QNapi::Object>();
432 return [jsMenuItemsFactories = std::move(jsMenuItemsFactories)](
QtOhos::
JsState &jsState) {
433 std::vector<QNapi::ValueWrapper> jsGroupMenusArray;
435 std::vector<QNapi::ValueWrapper> currentJsMenuItemsArray;
437 for (
const auto &jsMenuItemFactory : jsMenuItemsFactories) {
438 QOhosOptional<QNapi::Object> optJsMenuItem = jsMenuItemFactory(jsState);
439 if (optJsMenuItem.hasValue()) {
440 currentJsMenuItemsArray.push_back(optJsMenuItem.value());
442 jsGroupMenusArray.push_back(QNapi::makeArray(jsState.env(), currentJsMenuItemsArray));
443 currentJsMenuItemsArray.clear();
447 jsGroupMenusArray.push_back(QNapi::makeArray(jsState.env(), currentJsMenuItemsArray));
448 currentJsMenuItemsArray.clear();
450 return QNapi::makeArray(jsState.env(), jsGroupMenusArray);
456 std::vector<std::function<QOhosOptional<QNapi::Object>(QtOhos::JsState &)>> jsSubMenuItemsFactories;
457 for (
auto *item : m_menuItems) {
458 auto *ohosItem = qobject_cast<QOhosStatusBarMenuItem *>(item);
459 if (ohosItem !=
nullptr)
460 jsSubMenuItemsFactories.push_back(ohosItem->makeJsStatusBarSubMenuItemFactory());
463 return [jsSubMenuItemsFactories = std::move(jsSubMenuItemsFactories)](
QtOhos::
JsState &jsState) {
464 std::vector<QNapi::ValueWrapper> jsSubMenuItems;
465 for (
const auto &jsSubMenuItemsFactory : jsSubMenuItemsFactories) {
466 QOhosOptional<QNapi::Object> optJsSubMenuItem = jsSubMenuItemsFactory(jsState);
467 if (optJsSubMenuItem.hasValue())
468 jsSubMenuItems.push_back(optJsSubMenuItem.value());
470 return QNapi::makeArray(jsState.env(), jsSubMenuItems);