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);
331 if (menuItem ==
nullptr)
334 if (before ==
nullptr) {
335 m_menuItems.append(menuItem);
339 const int idx = m_menuItems.indexOf(before);
341 m_menuItems.insert(idx, menuItem);
343 m_menuItems.append(menuItem);
422 std::vector<std::function<QOhosOptional<QNapi::Object>(QtOhos::JsState &)>> jsMenuItemsFactories;
423 for (
auto *item : m_menuItems) {
424 auto *ohosItem = qobject_cast<QOhosStatusBarMenuItem *>(item);
425 jsMenuItemsFactories.push_back(
427 ? ohosItem->makeJsStatusBarMenuItemFactory()
428 : [](QtOhos::JsState &) {
429 return QOhosOptional<QNapi::Object>();
433 return [jsMenuItemsFactories = std::move(jsMenuItemsFactories)](
QtOhos::
JsState &jsState) {
434 std::vector<QNapi::ValueWrapper> jsGroupMenusArray;
436 std::vector<QNapi::ValueWrapper> currentJsMenuItemsArray;
438 for (
const auto &jsMenuItemFactory : jsMenuItemsFactories) {
439 QOhosOptional<QNapi::Object> optJsMenuItem = jsMenuItemFactory(jsState);
440 if (optJsMenuItem.has_value()) {
441 currentJsMenuItemsArray.push_back(optJsMenuItem.value());
443 jsGroupMenusArray.push_back(QNapi::makeArray(jsState.env(), currentJsMenuItemsArray));
444 currentJsMenuItemsArray.clear();
448 jsGroupMenusArray.push_back(QNapi::makeArray(jsState.env(), currentJsMenuItemsArray));
449 currentJsMenuItemsArray.clear();
451 return QNapi::makeArray(jsState.env(), jsGroupMenusArray);
457 std::vector<std::function<QOhosOptional<QNapi::Object>(QtOhos::JsState &)>> jsSubMenuItemsFactories;
458 for (
auto *item : m_menuItems) {
459 auto *ohosItem = qobject_cast<QOhosStatusBarMenuItem *>(item);
460 if (ohosItem !=
nullptr)
461 jsSubMenuItemsFactories.push_back(ohosItem->makeJsStatusBarSubMenuItemFactory());
464 return [jsSubMenuItemsFactories = std::move(jsSubMenuItemsFactories)](
QtOhos::
JsState &jsState) {
465 std::vector<QNapi::ValueWrapper> jsSubMenuItems;
466 for (
const auto &jsSubMenuItemsFactory : jsSubMenuItemsFactories) {
467 QOhosOptional<QNapi::Object> optJsSubMenuItem = jsSubMenuItemsFactory(jsState);
468 if (optJsSubMenuItem.has_value())
469 jsSubMenuItems.push_back(optJsSubMenuItem.value());
471 return QNapi::makeArray(jsState.env(), jsSubMenuItems);