1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "cj_menu_item_group_ffi.h"
17 #include "cj_lambda.h"
18 #include "core/components_ng/base/view_stack_processor.h"
19 #include "core/components_ng/pattern/menu/menu_item_group/menu_item_group_view.h"
20 #include "core/common/container.h"
21 
22 using namespace OHOS::Ace;
23 using namespace OHOS::Ace::Framework;
24 
25 extern "C" {
FfiOHOSAceFrameworkMenuItemGroupCreateByString(const char * header,const char * footer)26 void FfiOHOSAceFrameworkMenuItemGroupCreateByString(const char* header, const char* footer)
27 {
28     NG::MenuItemGroupView::Create();
29     std::string headerStr = header;
30     std::string footerStr = footer;
31     if (!headerStr.empty()) {
32         NG::MenuItemGroupView::SetHeader(headerStr);
33     }
34     if (!footerStr.empty()) {
35         NG::MenuItemGroupView::SetFooter(footerStr);
36     }
37 }
38 
FfiOHOSAceFrameworkMenuItemGroupCreateByBuilder(void (* header)(),void (* footer)())39 void FfiOHOSAceFrameworkMenuItemGroupCreateByBuilder(void(*header)(), void(*footer)())
40 {
41     NG::MenuItemGroupView::Create();
42     RefPtr<NG::UINode> rheader;
43     {
44         auto headerBuilderFunc = CJLambda::Create(header);
45         CHECK_NULL_VOID(headerBuilderFunc);
46         NG::ScopedViewStackProcessor builderViewStackProcessor;
47         headerBuilderFunc();
48         rheader = NG::ViewStackProcessor::GetInstance()->Finish();
49         CHECK_NULL_VOID(rheader);
50     }
51     NG::MenuItemGroupView::SetHeader(rheader);
52     RefPtr<NG::UINode> rfooter;
53     {
54         auto footerBuilderFunc = CJLambda::Create(footer);
55         CHECK_NULL_VOID(footerBuilderFunc);
56         NG::ScopedViewStackProcessor builderViewStackProcessor;
57         footerBuilderFunc();
58         rfooter = NG::ViewStackProcessor::GetInstance()->Finish();
59         CHECK_NULL_VOID(rfooter);
60     }
61     NG::MenuItemGroupView::SetFooter(rfooter);
62 }
63 }