1048147e0Sopenharmony_ci/**
2048147e0Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3048147e0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4048147e0Sopenharmony_ci * you may not use this file except in compliance with the License.
5048147e0Sopenharmony_ci * You may obtain a copy of the License at
6048147e0Sopenharmony_ci *
7048147e0Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8048147e0Sopenharmony_ci *
9048147e0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10048147e0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11048147e0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12048147e0Sopenharmony_ci * See the License for the specific language governing permissions and
13048147e0Sopenharmony_ci * limitations under the License.
14048147e0Sopenharmony_ci */
15048147e0Sopenharmony_ciimport DeviceUtil from '../utils/DeviceUtil';
16048147e0Sopenharmony_ci
17048147e0Sopenharmony_ci/**
18048147e0Sopenharmony_ci * Custom pop-up menu buttons
19048147e0Sopenharmony_ci */
20048147e0Sopenharmony_ci@Component
21048147e0Sopenharmony_ciexport struct MoreMenu {
22048147e0Sopenharmony_ci    @StorageLink('curBp') curBp: string = 'sm'
23048147e0Sopenharmony_ci    @Consume menuItems: Array<any>;
24048147e0Sopenharmony_ci    private menuImage: Resource = $rawfile('icon/ic_public_more.svg');
25048147e0Sopenharmony_ci    private placement: Placement = Placement.Bottom;
26048147e0Sopenharmony_ci    private defaultColor: Resource = $r('sys.color.ohos_id_color_dialog_bg');
27048147e0Sopenharmony_ci    private menuText: Resource = null;
28048147e0Sopenharmony_ci    private menuTextColor: Resource = $r('sys.color.ohos_id_color_text_primary');
29048147e0Sopenharmony_ci
30048147e0Sopenharmony_ci    @Builder
31048147e0Sopenharmony_ci    PopupBuilder() {
32048147e0Sopenharmony_ci        Column() {
33048147e0Sopenharmony_ci            List() {
34048147e0Sopenharmony_ci                ForEach(this.menuItems, (item, index) => {
35048147e0Sopenharmony_ci                    ListItem() {
36048147e0Sopenharmony_ci                        Button({ type: ButtonType.Normal, stateEffect: item.enabled }) {
37048147e0Sopenharmony_ci                            Text(item.value)
38048147e0Sopenharmony_ci                                .fontSize(16)
39048147e0Sopenharmony_ci                                .lineHeight(21)
40048147e0Sopenharmony_ci                                .width('100%')
41048147e0Sopenharmony_ci                                .height(48)
42048147e0Sopenharmony_ci                                .padding({ left: 12, right: 12 })
43048147e0Sopenharmony_ci                                .fontWeight(FontWeight.Regular)
44048147e0Sopenharmony_ci                                .fontColor(item.enabled ? $r('sys.color.ohos_id_color_text_primary') :
45048147e0Sopenharmony_ci                                $r('sys.color.ohos_id_color_text_tertiary'))
46048147e0Sopenharmony_ci                        }
47048147e0Sopenharmony_ci                        .width('100%')
48048147e0Sopenharmony_ci                        .height(48)
49048147e0Sopenharmony_ci                        .borderRadius(16)
50048147e0Sopenharmony_ci                        .backgroundColor($r('sys.color.ohos_id_color_foreground_contrary'))
51048147e0Sopenharmony_ci                        .onClick(() => {
52048147e0Sopenharmony_ci                            if (item.enabled) {
53048147e0Sopenharmony_ci                                item.action();
54048147e0Sopenharmony_ci                            }
55048147e0Sopenharmony_ci                        })
56048147e0Sopenharmony_ci                    }
57048147e0Sopenharmony_ci                }, item => JSON.stringify(item))
58048147e0Sopenharmony_ci            }
59048147e0Sopenharmony_ci            .listDirection(Axis.Vertical) // Arrange Direction
60048147e0Sopenharmony_ci            .divider({
61048147e0Sopenharmony_ci                strokeWidth: 0.5,
62048147e0Sopenharmony_ci                color: $r('sys.color.ohos_id_color_list_separator'),
63048147e0Sopenharmony_ci                startMargin: 12,
64048147e0Sopenharmony_ci                endMargin: 12
65048147e0Sopenharmony_ci            }) // Demarcation line between each row
66048147e0Sopenharmony_ci            .edgeEffect(EdgeEffect.Spring) // Slide to Edge Effect
67048147e0Sopenharmony_ci            .chainAnimation(false) // Disable linkage special effects.
68048147e0Sopenharmony_ci        }
69048147e0Sopenharmony_ci        .backgroundColor(this.defaultColor)
70048147e0Sopenharmony_ci        .width(this.curBp == 'lg' ? 186 : 144)
71048147e0Sopenharmony_ci        .borderRadius(16)
72048147e0Sopenharmony_ci        .padding({ top: 4, bottom: 4, left: 4, right: 4 })
73048147e0Sopenharmony_ci    }
74048147e0Sopenharmony_ci
75048147e0Sopenharmony_ci    build() {
76048147e0Sopenharmony_ci        Column() {
77048147e0Sopenharmony_ci            Image(this.menuImage)
78048147e0Sopenharmony_ci                .width(24)
79048147e0Sopenharmony_ci                .height(24)
80048147e0Sopenharmony_ci            if (this.menuText != null) {
81048147e0Sopenharmony_ci                Text(this.menuText)
82048147e0Sopenharmony_ci                    .fontSize(10)
83048147e0Sopenharmony_ci                    .lineHeight(14)
84048147e0Sopenharmony_ci                    .fontColor(this.menuTextColor)
85048147e0Sopenharmony_ci                    .margin({ top: 3 })
86048147e0Sopenharmony_ci                    .fontSize($r('sys.float.ohos_id_text_size_caption'))
87048147e0Sopenharmony_ci                    .fontWeight(FontWeight.Medium)
88048147e0Sopenharmony_ci                    .fontColor($r('sys.color.ohos_id_color_toolbar_text'))
89048147e0Sopenharmony_ci            }
90048147e0Sopenharmony_ci        }
91048147e0Sopenharmony_ci        .bindMenu(this.PopupBuilder)
92048147e0Sopenharmony_ci    }
93048147e0Sopenharmony_ci}