From 31fe1fd5c9ed35794846fd24ab13993988f4ab50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=BC=AA?= <15575970019@163.com> Date: Mon, 14 Oct 2024 14:52:12 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=A7=E4=BB=A3?= =?UTF-8?q?=E7=A0=81&&=E6=96=B0=E5=A2=9Eatomicservicetabs=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 连漪 <15575970019@163.com> --- interface/filter/BUILD.gn => BUILD.gn | 36 +- README.md | 19 +- README_zh.md | 21 +- .../interfaces}/BUILD.gn | 105 +- .../interfaces/atomicservicetabs.cpp | 26 +- .../interfaces/atomicservicetabs.js | 205 + .../source/atomicservicetabs.ets | 92 + bundle.json | 20 +- doc/Readme-CN.md | 15 - doc/figures/20230728-101201.png | Bin 151067 -> 0 bytes doc/figures/20230728-101236.png | Bin 168917 -> 0 bytes doc/figures/20230728-101306.png | Bin 63668 -> 0 bytes doc/figures/20230728-101355.png | Bin 63306 -> 0 bytes doc/figures/20230728-111325.png | Bin 386745 -> 0 bytes doc/figures/Snipaste_2023-07-24_11-35-40.png | Bin 8727 -> 0 bytes doc/figures/zh-cn_image_0000001616913438.png | Bin 6746 -> 0 bytes doc/figures/zh-cn_image_0000001616916278.png | Bin 10633 -> 0 bytes doc/figures/zh-cn_image_0000001616957408.png | Bin 36003 -> 0 bytes doc/figures/zh-cn_image_0000001616959836.png | Bin 11967 -> 0 bytes doc/figures/zh-cn_image_0000001617073302.png | Bin 4458 -> 0 bytes doc/figures/zh-cn_image_0000001617116972.png | Bin 37679 -> 0 bytes doc/figures/zh-cn_image_0000001617233250.png | Bin 42024 -> 0 bytes doc/figures/zh-cn_image_0000001617393174.png | Bin 16834 -> 0 bytes doc/figures/zh-cn_image_0000001617439304.png | Bin 43405 -> 0 bytes doc/figures/zh-cn_image_0000001658655445.png | Bin 32131 -> 0 bytes doc/figures/zh-cn_image_0000001664546481.png | Bin 10339 -> 0 bytes doc/figures/zh-cn_image_0000001664713029.png | Bin 15962 -> 0 bytes doc/figures/zh-cn_image_0000001664822257.png | Bin 28178 -> 0 bytes doc/figures/zh-cn_image_0000001665393297.png | Bin 4570 -> 0 bytes doc/figures/zh-cn_image_0000001665513149.png | Bin 14110 -> 0 bytes doc/figures/zh-cn_image_0000001665553957.png | Bin 66898 -> 0 bytes doc/figures/zh-cn_image_0000001665793709.png | Bin 3746 -> 0 bytes doc/figures/zh-cn_image_0000001665809293.png | Bin 44525 -> 0 bytes doc/figures/zh-cn_image_2023072902.png | Bin 6446 -> 0 bytes doc/figures/zh-cn_image_2023072903.PNG | Bin 7653 -> 0 bytes doc/figures/zh-cn_image_2023072904.PNG | Bin 8117 -> 0 bytes doc/figures/zh-cn_image_2023072905.PNG | Bin 6483 -> 0 bytes doc/figures/zh-cn_image_2023072906.PNG | Bin 11526 -> 0 bytes doc/figures/zh-cn_image_202307291.png | Bin 4263 -> 0 bytes doc/public_sys-resources/icon-caution.gif | Bin 580 -> 0 bytes doc/public_sys-resources/icon-danger.gif | Bin 580 -> 0 bytes doc/public_sys-resources/icon-note.gif | Bin 394 -> 0 bytes doc/public_sys-resources/icon-notice.gif | Bin 406 -> 0 bytes doc/public_sys-resources/icon-tip.gif | Bin 253 -> 0 bytes doc/public_sys-resources/icon-warning.gif | Bin 580 -> 0 bytes doc/ts-composite-components-arkdialog.md | 414 -- ...ts-composite-components-composelistitem.md | 240 -- ...ts-composite-components-composetitlebar.md | 177 - ...s-composite-components-editabletitlebar.md | 130 - doc/ts-composite-components-filter.md | 119 - doc/ts-composite-components-progressbutton.md | 152 - doc/ts-composite-components-selecttitlebar.md | 186 - doc/ts-composite-components-splitlayout.md | 88 - doc/ts-composite-components-subheader.md | 168 - doc/ts-composite-components-swiperefresher.md | 63 - doc/ts-composite-components-tabtitlebar.md | 126 - doc/ts-composite-components-toolbar.md | 135 - doc/ts-composite-components-treeview.md | 379 -- interface/arkdialog/BUILD.gn | 46 - interface/arkdialog/arkdialog.cpp | 53 - interface/arkdialog/arkdialog.js | 1604 -------- interface/composelistitem/BUILD.gn | 46 - interface/composelistitem/composelistitem.cpp | 49 - interface/composelistitem/composelistitem.js | 799 ---- interface/composetitlebar/BUILD.gn | 46 - interface/composetitlebar/composetitlebar.cpp | 49 - interface/composetitlebar/composetitlebar.js | 714 ---- .../editabletitlebar/editabletitlebar.cpp | 49 - .../editabletitlebar/editabletitlebar.js | 435 -- interface/filter/filter.cpp | 53 - interface/filter/filter.js | 2169 ---------- interface/progressbutton/BUILD.gn | 46 - interface/progressbutton/progressbutton.cpp | 53 - interface/progressbutton/progressbutton.js | 236 -- interface/selecttitlebar/BUILD.gn | 46 - interface/selecttitlebar/selecttitlebar.cpp | 49 - interface/selecttitlebar/selecttitlebar.js | 785 ---- interface/splitlayout/BUILD.gn | 46 - interface/splitlayout/splitlayout.cpp | 48 - interface/splitlayout/splitlayout.js | 524 --- interface/subheader/BUILD.gn | 46 - interface/subheader/subheader.cpp | 54 - interface/subheader/subheader.js | 1141 ----- interface/swiperefresher/BUILD.gn | 46 - interface/swiperefresher/swiperefresher.cpp | 49 - interface/swiperefresher/swiperefresher.js | 119 - interface/tabtitlebar/BUILD.gn | 46 - interface/tabtitlebar/tabtitlebar.cpp | 49 - interface/tabtitlebar/tabtitlebar.js | 930 ----- interface/toolbar/BUILD.gn | 46 - interface/toolbar/toolbar.cpp | 53 - interface/toolbar/toolbar.js | 477 --- interface/treeview/BUILD.gn | 48 - interface/treeview/treeview.js | 3666 ----------------- source/ArkDialog/ArkDialog.ets | 417 -- source/ComposeListItem/ComposeListItem.ets | 488 --- source/ComposeTitleBar/ComposeTitleBar.ets | 369 -- source/EditableTitleBar/EditableTitleBar.ets | 282 -- source/Filter/Filter.ets | 1025 ----- source/ProgressButton/ProgressButton.ets | 95 - source/SelectTitleBar/SelectTitleBar.ets | 383 -- source/SplitLayout/SplitLayout.ets | 167 - source/SubHeader/SubHeader.ets | 399 -- source/Swiperefresher/SwipeRefresher.ets | 47 - source/TabTitleBar/TabTitleBar.ets | 478 --- source/ToolBar/ToolBar.ets | 178 - source/TreeView/TreeView.ets | 3327 --------------- 107 files changed, 390 insertions(+), 24896 deletions(-) rename interface/filter/BUILD.gn => BUILD.gn (38%) rename {interface/editabletitlebar => atomicservicetabs/interfaces}/BUILD.gn (36%) mode change 100755 => 100644 rename interface/treeview/treeview.cpp => atomicservicetabs/interfaces/atomicservicetabs.cpp (58%) create mode 100644 atomicservicetabs/interfaces/atomicservicetabs.js create mode 100644 atomicservicetabs/source/atomicservicetabs.ets delete mode 100644 doc/Readme-CN.md delete mode 100644 doc/figures/20230728-101201.png delete mode 100644 doc/figures/20230728-101236.png delete mode 100644 doc/figures/20230728-101306.png delete mode 100644 doc/figures/20230728-101355.png delete mode 100644 doc/figures/20230728-111325.png delete mode 100644 doc/figures/Snipaste_2023-07-24_11-35-40.png delete mode 100644 doc/figures/zh-cn_image_0000001616913438.png delete mode 100644 doc/figures/zh-cn_image_0000001616916278.png delete mode 100644 doc/figures/zh-cn_image_0000001616957408.png delete mode 100644 doc/figures/zh-cn_image_0000001616959836.png delete mode 100644 doc/figures/zh-cn_image_0000001617073302.png delete mode 100644 doc/figures/zh-cn_image_0000001617116972.png delete mode 100644 doc/figures/zh-cn_image_0000001617233250.png delete mode 100644 doc/figures/zh-cn_image_0000001617393174.png delete mode 100644 doc/figures/zh-cn_image_0000001617439304.png delete mode 100644 doc/figures/zh-cn_image_0000001658655445.png delete mode 100644 doc/figures/zh-cn_image_0000001664546481.png delete mode 100644 doc/figures/zh-cn_image_0000001664713029.png delete mode 100644 doc/figures/zh-cn_image_0000001664822257.png delete mode 100644 doc/figures/zh-cn_image_0000001665393297.png delete mode 100644 doc/figures/zh-cn_image_0000001665513149.png delete mode 100644 doc/figures/zh-cn_image_0000001665553957.png delete mode 100644 doc/figures/zh-cn_image_0000001665793709.png delete mode 100644 doc/figures/zh-cn_image_0000001665809293.png delete mode 100644 doc/figures/zh-cn_image_2023072902.png delete mode 100644 doc/figures/zh-cn_image_2023072903.PNG delete mode 100644 doc/figures/zh-cn_image_2023072904.PNG delete mode 100644 doc/figures/zh-cn_image_2023072905.PNG delete mode 100644 doc/figures/zh-cn_image_2023072906.PNG delete mode 100644 doc/figures/zh-cn_image_202307291.png delete mode 100644 doc/public_sys-resources/icon-caution.gif delete mode 100644 doc/public_sys-resources/icon-danger.gif delete mode 100644 doc/public_sys-resources/icon-note.gif delete mode 100644 doc/public_sys-resources/icon-notice.gif delete mode 100644 doc/public_sys-resources/icon-tip.gif delete mode 100644 doc/public_sys-resources/icon-warning.gif delete mode 100644 doc/ts-composite-components-arkdialog.md delete mode 100644 doc/ts-composite-components-composelistitem.md delete mode 100644 doc/ts-composite-components-composetitlebar.md delete mode 100644 doc/ts-composite-components-editabletitlebar.md delete mode 100644 doc/ts-composite-components-filter.md delete mode 100644 doc/ts-composite-components-progressbutton.md delete mode 100644 doc/ts-composite-components-selecttitlebar.md delete mode 100644 doc/ts-composite-components-splitlayout.md delete mode 100644 doc/ts-composite-components-subheader.md delete mode 100644 doc/ts-composite-components-swiperefresher.md delete mode 100644 doc/ts-composite-components-tabtitlebar.md delete mode 100644 doc/ts-composite-components-toolbar.md delete mode 100644 doc/ts-composite-components-treeview.md delete mode 100644 interface/arkdialog/BUILD.gn delete mode 100644 interface/arkdialog/arkdialog.cpp delete mode 100644 interface/arkdialog/arkdialog.js delete mode 100644 interface/composelistitem/BUILD.gn delete mode 100644 interface/composelistitem/composelistitem.cpp delete mode 100644 interface/composelistitem/composelistitem.js delete mode 100755 interface/composetitlebar/BUILD.gn delete mode 100644 interface/composetitlebar/composetitlebar.cpp delete mode 100644 interface/composetitlebar/composetitlebar.js delete mode 100644 interface/editabletitlebar/editabletitlebar.cpp delete mode 100644 interface/editabletitlebar/editabletitlebar.js delete mode 100644 interface/filter/filter.cpp delete mode 100644 interface/filter/filter.js delete mode 100644 interface/progressbutton/BUILD.gn delete mode 100644 interface/progressbutton/progressbutton.cpp delete mode 100644 interface/progressbutton/progressbutton.js delete mode 100755 interface/selecttitlebar/BUILD.gn delete mode 100644 interface/selecttitlebar/selecttitlebar.cpp delete mode 100644 interface/selecttitlebar/selecttitlebar.js delete mode 100644 interface/splitlayout/BUILD.gn delete mode 100644 interface/splitlayout/splitlayout.cpp delete mode 100644 interface/splitlayout/splitlayout.js delete mode 100644 interface/subheader/BUILD.gn delete mode 100644 interface/subheader/subheader.cpp delete mode 100644 interface/subheader/subheader.js delete mode 100644 interface/swiperefresher/BUILD.gn delete mode 100644 interface/swiperefresher/swiperefresher.cpp delete mode 100644 interface/swiperefresher/swiperefresher.js delete mode 100755 interface/tabtitlebar/BUILD.gn delete mode 100644 interface/tabtitlebar/tabtitlebar.cpp delete mode 100644 interface/tabtitlebar/tabtitlebar.js delete mode 100644 interface/toolbar/BUILD.gn delete mode 100644 interface/toolbar/toolbar.cpp delete mode 100644 interface/toolbar/toolbar.js delete mode 100644 interface/treeview/BUILD.gn delete mode 100644 interface/treeview/treeview.js delete mode 100644 source/ArkDialog/ArkDialog.ets delete mode 100644 source/ComposeListItem/ComposeListItem.ets delete mode 100755 source/ComposeTitleBar/ComposeTitleBar.ets delete mode 100755 source/EditableTitleBar/EditableTitleBar.ets delete mode 100644 source/Filter/Filter.ets delete mode 100644 source/ProgressButton/ProgressButton.ets delete mode 100755 source/SelectTitleBar/SelectTitleBar.ets delete mode 100644 source/SplitLayout/SplitLayout.ets delete mode 100644 source/SubHeader/SubHeader.ets delete mode 100644 source/Swiperefresher/SwipeRefresher.ets delete mode 100755 source/TabTitleBar/TabTitleBar.ets delete mode 100644 source/ToolBar/ToolBar.ets delete mode 100644 source/TreeView/TreeView.ets diff --git a/interface/filter/BUILD.gn b/BUILD.gn similarity index 38% rename from interface/filter/BUILD.gn rename to BUILD.gn index e06d1b7..f01339f 100644 --- a/interface/filter/BUILD.gn +++ b/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. +# Copyright (c) 2024 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,36 +11,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_filter_abc") { - src_js = rebase_path("filter.js") - dst_file = rebase_path(target_out_dir + "/filter.abc") - in_puts = [ "filter.js" ] - out_puts = [ target_out_dir + "/filter.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("filter_abc") { - input = get_label_info(":gen_filter_abc", "target_out_dir") + "/filter.abc" - output = target_out_dir + "/filter_abc.o" - dep = ":gen_filter_abc" -} - -ohos_shared_library("filter") { - sources = [ "filter.cpp" ] - - deps = [ ":filter_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" +group("as_advanced_ui_component") { + deps = [ "atomicservicetabs/interfaces:atomicservicetabs" ] } diff --git a/README.md b/README.md index 6ea1082..46fbe93 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ advanced_ui is an ArkTS-based UI framework that offers efficient UI combinations **Figure 1** Relationship between advanced_ui and ArkUI ![](figures/advanced_ui_en.png "Relationship between advanced_ui and ArkUI") + **Figure 2** advanced_ui architecture ![](figures/advanced_ui_sub_en.png "advanced_ui architecture") @@ -16,20 +17,12 @@ The following figure shows the directory structure. ``` /arkui_advanced_ui_component -├── interface # APIs -│ ├── arkdialog # Components -│ └── composelistitem -│ └── ..... - -├── source # Framework source code -│ ├── arkdialog # Components -│ └── composelistitem -│ └── ..... +├── atomicservicetabs # Components +│ └── interface # APIs +│ └── source # framework sorce work +├── ..... + ``` ## When to Use With advanced_ui, you can develop your application UI must faster, leveraging its diverse array of UI component combinations with consistent design and style definitions. You can use and reuse any component anywhere as needed. - -## How to Use -> See the [doc folder](https://gitee.com/openharmony-sig/arkui_advanced_ui_component/tree/master/doc). - diff --git a/README_zh.md b/README_zh.md index d311683..48e0ba0 100644 --- a/README_zh.md +++ b/README_zh.md @@ -4,9 +4,12 @@ advanced_ui 是基于使用场景设计,为应用提供高效的UI组合,接口封闭、风格一致,开箱即用的组件接口;使用ArkTS语言开发,依赖系统的public API ## 软件架构 -**图 1** advanced_ui和ArkUI架构关系 +**图 1** advanced_ui和ArkUI架构关系 + ![](figures/advanced_ui.png "advanced_ui和ArkUI架构关系") -**图 2** advanced_ui架构设计 + +**图 2** advanced_ui架构设计 + ![](figures/advanced_ui_sub.png "advanced_ui架构设计") ## 目录 @@ -14,15 +17,11 @@ advanced_ui 是基于使用场景设计,为应用提供高效的UI组合,接 ``` /arkui_advanced_ui_component -├── interface # 接口目录 -│ ├── arkdialog # 各个组件目录 -│ └── composelistitem -│ └── ..... - -├── source # 框架源码 -│ ├── arkdialog # 各个组件目录 -│ └── composelistitem -│ └── ..... +├── atomicservicetabs # Components +│ └── interface # APIs +│ └── source # framework sorce work +├── ..... + ``` ## 使用场景 diff --git a/interface/editabletitlebar/BUILD.gn b/atomicservicetabs/interfaces/BUILD.gn old mode 100755 new mode 100644 similarity index 36% rename from interface/editabletitlebar/BUILD.gn rename to atomicservicetabs/interfaces/BUILD.gn index 2a7a013..dead4b3 --- a/interface/editabletitlebar/BUILD.gn +++ b/atomicservicetabs/interfaces/BUILD.gn @@ -1,46 +1,59 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_editabletitlebar_abc") { - src_js = rebase_path("editabletitlebar.js") - dst_file = rebase_path(target_out_dir + "/editabletitlebar.abc") - in_puts = [ "editabletitlebar.js" ] - out_puts = [ target_out_dir + "/editabletitlebar.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("editabletitlebar_abc") { - input = get_label_info(":gen_editabletitlebar_abc", "target_out_dir") + "/editabletitlebar.abc" - output = target_out_dir + "/editabletitlebar_abc.o" - dep = ":gen_editabletitlebar_abc" -} - -ohos_shared_library("editabletitlebar") { - sources = [ "editabletitlebar.cpp" ] - - deps = [ ":editabletitlebar_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/config/components/ets_frontend/es2abc_config.gni") +import("//build/ohos.gni") +import("//foundation/arkui/ace_engine/ace_config.gni") +import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") +import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") + +es2abc_gen_abc("gen_atomicservicetabs_abc") { + src_js = rebase_path("atomicservicetabs.js") + dst_file = rebase_path(target_out_dir + "/atomicservicetabs.abc") + in_puts = [ "atomicservicetabs.js" ] + out_puts = [ target_out_dir + "/atomicservicetabs.abc" ] + extra_args = [ "--module" ] +} + +gen_js_obj("atomicservicetabs_abc") { + input = get_label_info(":gen_atomicservicetabs_abc", "target_out_dir") + + "/atomicservicetabs.abc" + output = target_out_dir + "/atomicservicetabs_abc.o" + dep = ":gen_atomicservicetabs_abc" +} + +gen_obj("atomicservicetabs_abc_preview") { + input = get_label_info(":gen_atomicservicetabs_abc", "target_out_dir") + + "/atomicservicetabs.abc" + output = target_out_dir + "/atomicservicetabs_abc.c" + snapshot_dep = [ ":gen_atomicservicetabs_abc" ] +} + +ohos_shared_library("atomicservicetabs") { + sources = [ "atomicservicetabs.cpp" ] + + if (use_mingw_win || use_mac || use_linux) { + deps = [ ":gen_obj_src_atomicservicetabs_abc_preview" ] + } else { + deps = [ ":atomicservicetabs_abc" ] + } + + external_deps = [ + "hilog:libhilog", + "napi:ace_napi", + ] + + relative_install_dir = "module/atomicservice" + subsystem_name = "arkui" + part_name = "as_advanced_ui_component" +} diff --git a/interface/treeview/treeview.cpp b/atomicservicetabs/interfaces/atomicservicetabs.cpp similarity index 58% rename from interface/treeview/treeview.cpp rename to atomicservicetabs/interfaces/atomicservicetabs.cpp index 1c51ddb..456bea6 100644 --- a/interface/treeview/treeview.cpp +++ b/atomicservicetabs/interfaces/atomicservicetabs.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. + * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,43 +13,39 @@ * limitations under the License. */ -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" #include "napi/native_node_api.h" -extern const char _binary_treeview_abc_start[]; -extern const char _binary_treeview_abc_end[]; +extern const char _binary_atomicservicetabs_abc_start[]; +extern const char _binary_atomicservicetabs_abc_end[]; // Napi get abc code function extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_TreeView_GetABCCode(const char **buf, int *buflen) +void NAPI_atomicservice_AtomicServiceTabs_GetABCCode(const char **buf, int *buflen) { - if (buf != nullptr) { - *buf = _binary_treeview_abc_start; + *buf = _binary_atomicservicetabs_abc_start; } if (buflen != nullptr) { - *buflen = _binary_treeview_abc_end - _binary_treeview_abc_start; + *buflen = _binary_atomicservicetabs_abc_end - _binary_atomicservicetabs_abc_start; } } /* * Module define */ -static napi_module treeviewModule = { +static napi_module AtomicServiceTabsModule = { .nm_version = 1, .nm_flags = 0, .nm_filename = nullptr, - .nm_modname = "arkui.advanced.TreeView", + .nm_modname = "atomicservice.AtomicServiceTabs", .nm_priv = ((void*)0), .reserved = { 0 }, }; /* - * Module register function + * Module registerfunction */ -extern "C" __attribute__((constructor)) void treeviewRegisterModule(void) +extern "C" __attribute__((constructor)) void AtomicServiceTabsRegisterModule(void) { - napi_module_register(&treeviewModule); + napi_module_register(&AtomicServiceTabsModule); } \ No newline at end of file diff --git a/atomicservicetabs/interfaces/atomicservicetabs.js b/atomicservicetabs/interfaces/atomicservicetabs.js new file mode 100644 index 0000000..172d3fb --- /dev/null +++ b/atomicservicetabs/interfaces/atomicservicetabs.js @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if (!("finalizeConstruction" in ViewPU.prototype)) { + Reflect.set(ViewPU.prototype, "finalizeConstruction", () => { }); +} +const DEFAULT_BAR_WIDTH = 96; +const DEFAULT_BAR_HEIGHT = 52; +export class AtomicServiceTabs extends ViewPU { + constructor(m1, n1, o1, p1 = -1, q1 = undefined, r1) { + super(m1, o1, p1, r1); + if (typeof q1 === "function") { + this.paramsGenerator_ = q1; + } + this.tabContents = undefined; + this.__tabBarOptionsArray = new SynchedPropertyObjectOneWayPU(n1.tabBarOptionsArray, this, "tabBarOptionsArray"); + this.__tabBarPosition = new SynchedPropertySimpleOneWayPU(n1.tabBarPosition, this, "tabBarPosition"); + this.__barBackgroundColor = new SynchedPropertyObjectOneWayPU(n1.barBackgroundColor, this, "barBackgroundColor"); + this.__index = new SynchedPropertyObjectOneWayPU(n1.index, this, "index"); + this.__barOverlap = new SynchedPropertySimpleOneWayPU(n1.barOverlap, this, "barOverlap"); + this.controller = new TabsController(); + this.onChange = undefined; + this.onTabBarClick = undefined; + this.onContentWillChange = undefined; + this.setInitiallyProvidedValue(n1); + this.finalizeConstruction(); + } + setInitiallyProvidedValue(l1) { + if (l1.tabContents !== undefined) { + this.tabContents = l1.tabContents; + } + if (l1.tabBarPosition === undefined) { + this.__tabBarPosition.set(TabBarPosition.BOTTOM); + } + if (l1.barBackgroundColor === undefined) { + this.__barBackgroundColor.set(Color.Transparent); + } + if (l1.index === undefined) { + this.__index.set(0); + } + if (l1.barOverlap === undefined) { + this.__barOverlap.set(true); + } + if (l1.controller !== undefined) { + this.controller = l1.controller; + } + if (l1.onChange !== undefined) { + this.onChange = l1.onChange; + } + if (l1.onTabBarClick !== undefined) { + this.onTabBarClick = l1.onTabBarClick; + } + if (l1.onContentWillChange !== undefined) { + this.onContentWillChange = l1.onContentWillChange; + } + } + updateStateVars(k1) { + this.__tabBarOptionsArray.reset(k1.tabBarOptionsArray); + this.__tabBarPosition.reset(k1.tabBarPosition); + this.__barBackgroundColor.reset(k1.barBackgroundColor); + this.__index.reset(k1.index); + this.__barOverlap.reset(k1.barOverlap); + } + purgeVariableDependenciesOnElmtId(j1) { + this.__tabBarOptionsArray.purgeDependencyOnElmtId(j1); + this.__tabBarPosition.purgeDependencyOnElmtId(j1); + this.__barBackgroundColor.purgeDependencyOnElmtId(j1); + this.__index.purgeDependencyOnElmtId(j1); + this.__barOverlap.purgeDependencyOnElmtId(j1); + } + aboutToBeDeleted() { + this.__tabBarOptionsArray.aboutToBeDeleted(); + this.__tabBarPosition.aboutToBeDeleted(); + this.__barBackgroundColor.aboutToBeDeleted(); + this.__index.aboutToBeDeleted(); + this.__barOverlap.aboutToBeDeleted(); + SubscriberManager.Get().delete(this.id__()); + this.aboutToBeDeletedInternal(); + } + get tabBarOptionsArray() { + return this.__tabBarOptionsArray.get(); + } + set tabBarOptionsArray(i1) { + this.__tabBarOptionsArray.set(i1); + } + get tabBarPosition() { + return this.__tabBarPosition.get(); + } + set tabBarPosition(h1) { + this.__tabBarPosition.set(h1); + } + get barBackgroundColor() { + return this.__barBackgroundColor.get(); + } + set barBackgroundColor(g1) { + this.__barBackgroundColor.set(g1); + } + get index() { + return this.__index.get(); + } + set index(f1) { + this.__index.set(f1); + } + get barOverlap() { + return this.__barOverlap.get(); + } + set barOverlap(e1) { + this.__barOverlap.set(e1); + } + initialRender() { + this.observeComponentCreation2((c1, d1) => { + Tabs.create({ + barPosition: this.tabBarPosition === TabBarPosition.LEFT ? BarPosition.Start : BarPosition.End, + index: this.index, + controller: this.controller + }); + Tabs.barBackgroundColor(ObservedObject.GetRawObject(this.barBackgroundColor)); + Tabs.divider(null); + Tabs.vertical(this.tabBarPosition === TabBarPosition.LEFT ? true : false); + Tabs.scrollable(false); + Tabs.barOverlap(this.barOverlap); + Tabs.barBackgroundBlurStyle(BlurStyle.COMPONENT_THICK); + Tabs.onChange(this.onChange); + Tabs.onTabBarClick(this.onTabBarClick); + Tabs.onContentWillChange(this.onContentWillChange); + Tabs.width((!this.tabContents && this.tabBarPosition === TabBarPosition.LEFT) ? DEFAULT_BAR_WIDTH : '100%'); + Tabs.height((!this.tabContents && this.tabBarPosition === TabBarPosition.BOTTOM) ? DEFAULT_BAR_HEIGHT : '100%'); + }, Tabs); + this.observeComponentCreation2((h, i) => { + ForEach.create(); + const j = (l, m) => { + const n = l; + this.observeComponentCreation2((p, q) => { + If.create(); + if (n) { + this.ifElseBranchUpdateFunction(0, () => { + this.observeComponentCreation2((u, v) => { + TabContent.create(() => { + this.observeComponentCreation2((y, z) => { + If.create(); + if (this.tabContents && this.tabContents[m]) { + this.ifElseBranchUpdateFunction(0, () => { + this.tabContents[m]?.bind(this)?.(this); + }); + } + else { + this.ifElseBranchUpdateFunction(1, () => { + }); + } + }, If); + If.pop(); + }); + TabContent.tabBar(BottomTabBarStyle.of(n.icon, n.text) + .labelStyle({ unselectedColor: n.unselectedColor, selectedColor: n.selectedColor }) + .iconStyle({ unselectedColor: n.unselectedColor, selectedColor: n.selectedColor })); + TabContent.width((!this.tabContents && this.tabBarPosition === TabBarPosition.LEFT) ? DEFAULT_BAR_WIDTH : '100%'); + TabContent.height((!this.tabContents && this.tabBarPosition === TabBarPosition.BOTTOM) ? DEFAULT_BAR_HEIGHT : '100%'); + }, TabContent); + TabContent.pop(); + }); + } + else { + this.ifElseBranchUpdateFunction(1, () => { + }); + } + }, If); + If.pop(); + }; + this.forEachUpdateFunction(h, this.tabBarOptionsArray, j, undefined, true, false); + }, ForEach); + ForEach.pop(); + Tabs.pop(); + } + rerender() { + this.updateDirtyElements(); + } +} +export class TabBarOptions { + constructor(b, c, d, e) { + this.icon = b; + this.text = c; + this.unselectedColor = d; + this.selectedColor = e; + } +} + +export var TabBarPosition; +(function (a) { + a[a["LEFT"] = 0] = "LEFT"; + a[a["BOTTOM"] = 1] = "BOTTOM"; +})(TabBarPosition || (TabBarPosition = {})); + +export default { AtomicServiceTabs, TabBarOptions, TabBarPosition}; \ No newline at end of file diff --git a/atomicservicetabs/source/atomicservicetabs.ets b/atomicservicetabs/source/atomicservicetabs.ets new file mode 100644 index 0000000..8598e28 --- /dev/null +++ b/atomicservicetabs/source/atomicservicetabs.ets @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const DEFAULT_BAR_WIDTH: number = 96; +const DEFAULT_BAR_HEIGHT: number = 52; + +@Component +export struct AtomicServiceTabs { + @BuilderParam tabContents?: [TabContentBuilder?, + TabContentBuilder?, + TabContentBuilder?, + TabContentBuilder?, + TabContentBuilder?]; + @Prop tabBarOptionsArray: [TabBarOptions, TabBarOptions, TabBarOptions?, TabBarOptions?, TabBarOptions?]; + @Prop tabBarPosition?: TabBarPosition = TabBarPosition.BOTTOM; + @Prop barBackgroundColor?: ResourceColor = Color.Transparent; + @Prop index?: number | undefined = 0; + @Prop barOverlap?: boolean = true; + controller?: TabsController = new TabsController(); + onChange?: Callback; + onTabBarClick?: Callback; + onContentWillChange?: OnContentWillChangeCallback; + + build() { + Tabs({ + barPosition: this.tabBarPosition === TabBarPosition.LEFT ? BarPosition.Start : BarPosition.End, + index: this.index, + controller: this.controller + }) { + ForEach(this.tabBarOptionsArray, (item: TabBarOptions, index: number) => { + if (item) { + TabContent() { + if (this.tabContents && this.tabContents[index]) { + this.tabContents[index]?.() + } + } + .tabBar(BottomTabBarStyle.of(item.icon, item.text) + .labelStyle({ unselectedColor: item.unselectedColor, selectedColor: item.selectedColor }) + .iconStyle({ unselectedColor: item.unselectedColor, selectedColor: item.selectedColor })) + .width((!this.tabContents && this.tabBarPosition === TabBarPosition.LEFT) ? DEFAULT_BAR_WIDTH : '100%') + .height((!this.tabContents && this.tabBarPosition === TabBarPosition.BOTTOM) ? DEFAULT_BAR_HEIGHT : '100%') + } + }) + } + .barBackgroundColor(this.barBackgroundColor) + .divider(null) + .vertical(this.tabBarPosition === TabBarPosition.LEFT ? true : false) + .scrollable(false) + .barOverlap(this.barOverlap) + .barBackgroundBlurStyle(BlurStyle.COMPONENT_THICK) + .onChange(this.onChange) + .onTabBarClick(this.onTabBarClick) + .onContentWillChange(this.onContentWillChange) + .width((!this.tabContents && this.tabBarPosition === TabBarPosition.LEFT) ? DEFAULT_BAR_WIDTH : '100%') + .height((!this.tabContents && this.tabBarPosition === TabBarPosition.BOTTOM) ? DEFAULT_BAR_HEIGHT : '100%') + } +} + +export class TabBarOptions { + public icon: ResourceStr | TabBarSymbol; + public text: ResourceStr; + public unselectedColor?: ResourceColor; + public selectedColor?: ResourceColor; + + constructor(icon: ResourceStr | TabBarSymbol, text: ResourceStr, + unselectedColor?: ResourceColor, selectedColor?: ResourceColor) { + this.icon = icon; + this.text = text; + this.unselectedColor = unselectedColor; + this.selectedColor = selectedColor; + } +} + +export enum TabBarPosition { + LEFT = 0, + BOTTOM = 1 +} + +export type TabContentBuilder = () => void; +export type OnContentWillChangeCallback = (currentIndex: number, comingIndex: number) => boolean; \ No newline at end of file diff --git a/bundle.json b/bundle.json index c1bf0a6..b9a2d95 100644 --- a/bundle.json +++ b/bundle.json @@ -1,13 +1,13 @@ { "name": "@ohos/advanced_ui_component", "version": "1.0.0", - "description": "advanced_ui_component", + "description": "as_advanced_ui_component", "publishAs": "code-segment", "segment": { - "destPath": "foundation/arkui/advanced_ui_component" + "destPath": "foundation/arkui/as_advanced_ui_component" }, "component": { - "name": "advanced_ui_component", + "name": "as_advanced_ui_component", "subsystem": "arkui", "syscap": [], "features": [], @@ -25,19 +25,7 @@ }, "build": { "sub_component": [ - "//foundation/arkui/advanced_ui_component/interface/filter:filter", - "//foundation/arkui/advanced_ui_component/interface/composetitlebar:composetitlebar", - "//foundation/arkui/advanced_ui_component/interface/editabletitlebar:editabletitlebar", - "//foundation/arkui/advanced_ui_component/interface/selecttitlebar:selecttitlebar", - "//foundation/arkui/advanced_ui_component/interface/tabtitlebar:tabtitlebar", - "//foundation/arkui/advanced_ui_component/interface/splitlayout:splitlayout", - "//foundation/arkui/advanced_ui_component/interface/subheader:subheader", - "//foundation/arkui/advanced_ui_component/interface/treeview:treeview", - "//foundation/arkui/advanced_ui_component/interface/composelistitem:composelistitem", - "//foundation/arkui/advanced_ui_component/interface/swiperefresher:swiperefresher", - "//foundation/arkui/advanced_ui_component/interface/arkdialog:arkdialog", - "//foundation/arkui/advanced_ui_component/interface/toolbar:toolbar", - "//foundation/arkui/advanced_ui_component/interface/progressbutton:progressbutton" + "//foundation/arkui/arkui_advanced_ui_component/atomicservicetabs/interfaces:atomicservicetabs" ], "inner_kits": [], "test": [] diff --git a/doc/Readme-CN.md b/doc/Readme-CN.md deleted file mode 100644 index 0728c2b..0000000 --- a/doc/Readme-CN.md +++ /dev/null @@ -1,15 +0,0 @@ -# 组件目录 - -- [Dialog](ts-composite-components-arkdialog.md) -- [SplitLayout](ts-composite-components-splitlayout.md) -- [ToolBar](ts-composite-components-toolbar.md) -- [ProgressButton](ts-composite-components-progressbutton.md) -- [SubHeader](ts-composite-components-subheader.md) -- [Filter](ts-composite-components-filter.md) -- [TreeView](ts-composite-components-treeview.md) -- [ComposeListItem](ts-composite-components-composelistitem.md) -- [EditableTitleBar](ts-composite-components-editabletitlebar.md) -- [ComposeTitleBar](ts-composite-components-composetitlebar.md) -- [SelectTitleBar](ts-composite-components-selecttitlebar.md) -- [TabTitleBar](ts-composite-components-tabtitlebar.md) -- [SwipeRefresher](ts-composite-components-swiperefresher.md) diff --git a/doc/figures/20230728-101201.png b/doc/figures/20230728-101201.png deleted file mode 100644 index 614c1695ed63cc22075243b2ab5ba876323e598c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151067 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%0D|=4kgkaoc>s)# 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 mFj(oOo$b@ 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 QDd4d`a>BaQ%InI%0kN^Wj{pDw diff --git a/doc/figures/20230728-101306.png b/doc/figures/20230728-101306.png deleted file mode 100644 index 0070b5776bac9214fa050fc03e31731dbadfc475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63668 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 diff --git a/doc/figures/20230728-101355.png b/doc/figures/20230728-101355.png deleted file mode 100644 index 8d840d101314b8f7f3b832958f6db519a18dc16e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63306 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 VW;7_$=NI5lQ%&z`-j&-A{vW{R%6I?( diff --git a/doc/figures/20230728-111325.png b/doc/figures/20230728-111325.png deleted file mode 100644 index 53aefe6ed573aeaaad2c8940a63dbdaa02c66550..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386745 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 z 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 diff --git a/doc/figures/Snipaste_2023-07-24_11-35-40.png b/doc/figures/Snipaste_2023-07-24_11-35-40.png deleted file mode 100644 index 742fccf1fdd00a1ab5677089e0ddf2aec95aae6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8727 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 Wspn%0Q$Bd819+tJ1W}@79`s+79ItKw diff --git a/doc/figures/zh-cn_image_0000001616913438.png b/doc/figures/zh-cn_image_0000001616913438.png deleted file mode 100644 index f36a02570f611f1cabb87d2e0d6d0550ea3fe13f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6746 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 diff --git a/doc/figures/zh-cn_image_0000001616916278.png b/doc/figures/zh-cn_image_0000001616916278.png deleted file mode 100644 index c4b0a4336e59dfc6b445bde282f6aec7582fe066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10633 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 X6(oOs;@SmAEHPe7D2SK5Gz$1Xj8ID` diff --git a/doc/figures/zh-cn_image_0000001616957408.png b/doc/figures/zh-cn_image_0000001616957408.png deleted file mode 100644 index 2a0835b3c57e24de75bc5e73209a1787d5768307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36003 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 P{HLw1uU4XB6Z-!FR}ThL diff --git a/doc/figures/zh-cn_image_0000001616959836.png b/doc/figures/zh-cn_image_0000001616959836.png deleted file mode 100644 index 8bf1753dbcc2bbe6118ce494c8657797d04e551c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11967 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 E555FK^8f$< diff --git a/doc/figures/zh-cn_image_0000001617233250.png b/doc/figures/zh-cn_image_0000001617233250.png deleted file mode 100644 index b4ea8f87bf29aecca9cdb2ff3d01a56a5cef4fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42024 zcmeFZkbyS}n=q?B)Wp(z+nBq1?zv$d$SRCV{S1Ma6S{ameYi>-dX zOV;i_dS|qX{4btJxJ1#2f4YK&<@Wsf^9;G%F|qc53t!(wV|gVdcX(-GZ@Jqui%!sv z?8eQTeZv`|lgQ~?SXHi4tG53u&uQuF1 zpR2Vd$ZC8!oGwgNKHC#<133?q(JaXdhUgWMUnOs|z9WZda$nz)pd%saL{5G%iL*9M z-7Q*QU*CA$>1%V(6>RMPe$2oiN&kl=n?F(hX$J@Ma8QZv+lkT5&CO$lHMlY~)Zafp zKX4zIJbZYIG#rI`(BRO-&39WpMMgSX%Kxmbk6PG?8ujgaPlSz)&3kS>c#QZc!w*k? z`p3>TI-8xHe(MZ|BmL-)M=Q2kR!~qlRTeGUpn3NeU?i0~=+K3b$|N?!=Hovu-3 zh8P$?FI&<%aqEN8L_x}8u@%tIes6?MU zSRd7BH;vcod&Fmi++LT%4Q+?T779B5!`Q`b+Qhcd{k_hFI2L&h@|Ay=yZ=10{{9}7 z*7$W36CLeS6iviZz~AAGHRa`& z+WbnTX=|xxi~Ve+6)Usu+j~92OV2P$^j^PyjaTO|r?Xpsw&l6x^YY>^hSn*g zN!v3D3~a(Fzlt_LlXs7v8>#jmF9k-w%?_Xx6cog&VrOHUVCTPetJ9+JV`nGYI06{`?sUck=w=c&X*D zS&aqmLsA(K3ovWTcCnwF8k)T%I+?%yof<&XN~mCb3iId&z){e`vB0ksDW zm7AM;cw%4G`s(FN%&fQmaHE&k*F&=dFO7EHo;T~~!7~=Cg00&NcWZ2HEQsr2^Vo{K zRQS#J0T*I&ckk|hyr$VPKCb;%JyrdacqRAimHcR_uI;M!DA?qWHYW;Edcl`Zq9s3l zaGEOCCdR=OasB>s(XYjGoBX2O>EW1Hrf+NI!w=+8ECrn(;S&*s1_xtA(Mp!yw=y=S zycpUHcXE09R8dh8%Yu(W%yUaV`r7Fh%h}kNmb{{(IqY9w%Tl_kva(5^;rFg9@2rL? z3knM#fBzVc($l{C(d|~EDjMqd`e<)g$kl3i)1=8w!5UM^)wNoMgss5z@9}PQTpTH? z1IjV46qh8eEG))Gw?fN zLQeh)ig&tR)maiDIy!nxLIP&B;TtH}lnfy1l(0srLK77_ym)?YD?gW@>pt8ji`AieFh->3zQ68<|vA6@LQ< z)5Xngg3?5A)s-4MTpqnpCp;#GINl=8sEXy!pFhZ(2Uo@uRK)zER@CF(mi@xd)V)I{ zww<^lA|fW1#>CITp}y{_Q)SUmY}&>GzW^@;9V#+Q|5T&iV{2>d+qZ95_|7J2ySg{RXM(S^QMhf(VBCTYN43rz^a?Kw|5GYu79dRvbu&D zk%kW(5dKj2=Bg!gv2agsc0u7SI1a5NL9u+zPfku=bk~?Ze);m{hQuYT+fUsXx~jDF z@R<}5R|Y;lzITtiu}~eQ`eomCcHY3A6%Ic>-I^{#Lp^A8>RBC39&h%ve|EAQii3~; zvEw-gFI0}Q0e26N0zQ>F=tD2s+og>g9OjsgMeL^T)Ise9gmLmcf*XZG)*>|x4IE&b zrDFEv#2eYohbhs~M2b<=;VSVgM*3N;t&)kSn{Tu8N=xye0^Ws^O-w@aT>9VnWa$BF zTHW_(YdS`?Fhx303Y9qbb$pzJmX=mSr;6R6JV>3Tdvo&b{@>kp46W%hDA2xtc5FRU z<#J=UKC?rhTd)19w6zo)aKYQR9t*VUP0m3ojW+F zZ=0Jcfp;H1q=9PUz4o+gqEL;5j?Q_?Rr{K_xHwxp50p#zY-e{j1|Y8Y-urnYy8(Nh z*dkuPGUmeb#JqmJfuli5enso|XU=+mr*>2>S1YHkj_kH(*3{YJ>F@P@Xgb>NjiNDr zP+1vwKljBljza-CKYzx=!eZyY3zy#uJHJ@^WeHA*99#U*0$t#_>zPAYX{pQ6mVPE- zEWh>0$M%1h_6@8pmV-%QuV3daHwLkh3A3@`!Kx`Q$A5b-bK=a@)Rfks-0(S+{L~AM z+Zt&v;mi(q=Hh81Ucc`8T>a!$e7}~Vp>m>(XM@w%*Jc5yJv$b5=+A>@%HWBj5*6s- zc+j#HVE@(B)Oft28BOKKR*I$-6rcLCxM*4y8S@uQuZ^#HF|)Z@jKj3$=KV?&-VdgZ z)w@le+e!L=X%&CJWMvjoH8P@LU}W?Z+aSq~^jh@kE#+%JKTyM`6u@D>U-^RuV6CgG zYl^5l3n879gMMnXlkv*X>W-#(6?-=Xcc|C2I*@}z>T7B2m!_*0I{i(|7zS9tiaWYsgp z^w;C!3zeBj<>lqSh1@V58wg5EN_qu1nFKJmfqzm+NXW+ITOw26P38*srNDoZb|Bafrc_}!UB9~GhprB zbwgtr);Tun{A|0bWyN|ltG<+44z_3U=+$sGdXo=N2~fq8`GVg>2xDVoQ915KN)yA| z5pp$T=6JJj`n0^FJUl$=(j=^{t+!5!xiC=mFH7@RBNEQsL5YKjZZ|wuXR=YFY80$gxcm4si#lsHuR)b*q--$Oe$>Mzw~&A} zkto6<3@m(`x|Xvu-=Q?YtFU~SA99Zl53i0<-o2gIH1LMTwT@9OtDM|+ z0hr{ker@)=8h=|;(cGM&NIexDWn8OP<8U1cDUWDo$cGoWY*ab< zuk$(U?8gHMtPzDa~p24-X3lr6QLB z$a@g8#EPc%Up)P_fZHLUWT@*+c9yj!ucCr0b^7BP+?leAYj`0iYw6DA4ef@y9SNjV zE9uT{var+O5dwO;`mG&}Qp+=@V0`OpKYu9fX*f3`@uxdMZ{OZNn!11NN*^rjQ%yC9 z!1?lW4ze3JCJFDm|K_ZD<;00SJ}UJW9}t@sTcUtwKV0|bDcoJkGu60A!6X{-r}R=% zwD<1aJ2WEc!A5bJwW&+nD?Tyoik7|%b6+1>2GC9ulz^Po)rgPQh-86hIb{) z@0Vy6eiv{Gw4f|!4k{rB88ez2}OB^ zSpE4vxVG@`-_840-AZvv*iAbEUyna#MaJXnWiA&Ur}+6AO!hh2>M} zsvC7EP_wj*ggx1@@`K`Yv-Zx#&+@7tX`{5?47)?tM zB<&qXxEM!4(d&8wrH|L;o6OEqdp4~XbR^s~<-W}3-dT;8vUn9NLq4!)kU_wR4Q8`Ed4@DX_^Oa2DQTn{Hs{cGM>5(2wS5%Xl@E^L;e z&lyc>iQgKHI~lKY`a17msmT(53!WgL+HYS&BO104Qf@UTgwtV zV50h@{1?H&+D1ky$6N!WqqCdu%TKe?UvM5tS`e|>A4?7=!mockQJ@0r1enq%xNFGS zj{Tl^!_5pALr zDf61|GEhv-*V|i<56Mol@`#AsynQbt=WnjWzw_Up-@7sb_4nVMTbd;#Du&}QB<^k1MuNrr&JhqvfoE$ohy5M!D zZ|z2J0sJT&mD0w_z4tw0laQ1|D}JU(dhMDI28~MAQP)-O6wcj^@%$8FXWHG*A9mX! zU?okI*TL!*;WBw2H2GHZ$$XtHp!>Jl*IwxiZ!?OC8Qaf&hfXdqo?JPX?3>4{RxS$* zd3Jy?E-eku%*+hc0q>GfQ4M|>eAQBw#PM|j$_RANA2d{wz5+rHpJl8MfYNmXunB4P zJJtz#Zb2hhHySOqHj-IZF97|63;!lhP+P>v$Owo4GCn?{@(d)->1YQn!<`0yvoz9$ zj4F0*D~Z|HMy3C~nKcWf3G#fl187JkdGO-m!gY6165zPqX^^B%T45p6?c3M@F+ss` zad!_kf5~i_5FL- zmz&w%OdqZ=iaF{qjJIbyt$^xU&|ZsRk@iZ~NbUao>8P!0`~6y88&-v8(=91l zi)ae9a~0**=BB1x&+VB*5pCt5e;iUqoH8v&KHSmsne=|vxFO|SRes40ngt|Uof4r+w=k!q5Dc%0I_>X!yb zP90*0>fKx9>h?#H!?DnvDNC!^ONWe!El1O0&1drFSef}!-!uyPIyzQ#KGbwfy>gZO z8!T1<<_|1RPEJ!Qao&aTQL?i`3uNEFe~(E@Dr$T(?(tqP`?>MNspsaz6{{C!K*3|5U3R?2}nT!l-l&CZ}_cp$m-F z-(oBYI%Yt5wo$}|wSd43BBLfh zrjfjwDKcVZRxKorii$$o<<8Ha!}o4l*duFpcci{C`T*)bDuW>{Xwhg_SROh zv|O1%g*W+iT@oBjMRD?)I;0kc$jM^!kp|duwY9Zj={8{GsLnMm1zbf5#HKLM(90C! zP|W|uL1iW^wD`oYDZ6@jOl|Mj;~%L+bA??8dW{B;)+(+3@GA*kh@w{m%ebBe|K0Dm zEyAU7_iPR&hbe|Hx@eixB6Z^8;^f3JxVgDAzXVCYiJ6;^q!O+(KS{^qQ#NgTmMYe4 zWR53%eF6n=Oe89Q=Bhtci4g`L`v>Uu&WbY$#BUb?ET^+QS`(X23sz=&k(o&&5_MNW z;fjBfbIZPBd_NOm9q>3yOG`c0YO5$xjlP4WkgGR};|q8dig@3D_%M0k?&kK+bK3xw zbc&UVSIq?tacXu}*Ir9kEU5HYa%(21=tlq)<|}IXmI4>mX&A$w#_Kh+r36F)QEKN4 z^)xTJP+PmcxhU4o-y7s^r|0C1Tw|tR+Zf9(w8TUmnSPkTT8Ok zXZWrgW4C}DrZ`g6)z$_B>|kSK^FGxU@G6+T(xf!8rXIo}%tnT1_u2_~^Ek6Xs=AeH z>%D9#nycg-GElBP=lLz0Hhz8mK;BP=gSi0|1$08dn6kp7{LFdb7I%ca-f1oAMN6oG z0+>Hw`s8mGXd#j@ZR-G)1kWxBSid7BshZ5s1ID_$gB_h+5LRLfH=v%jL zi9Fr8+11^>N!e7g{X1#k+39NX{)8I0EEDPYTq~=Zo@(KQc`B8#lRR+4;l&5NIzGTG zML;nF@nEn2b~cJf^2eM`DpK#ET8%e2J}|E0Za=RX-*u(7t{&oUJ3*I~m5mu(t;6@k zHt|m>`%zNswQK6JyO?QAys)sKewI~u{Q0eBHun7Svws)Is5i%w0M^1HBNYq{Q%tkD zWD;YzSXpuTt%k-v;2Qyi$PPHeg}niQpj7_=+bB3Ehn{k3`P;W3sJ9efc~8%dwmm4O z(tDbo#9Rn^qSbMIo`NmPXbk=EKY6Z{ESmNO%7{apm2vS{#q;7hoe9335f)Gcs@ zFN`?80>l8>_R!}T*jsgWDJvZ+Lz4ikuygRF1z)!L2}}=de*Z2vTdI;$o=af_UF2{; zK#;#wnF$@0#oVu@x*HaTlc{aFW?{}eLr2PL&XL&)KehHd=kiNm9J-2&m5ot%Pme;C zx^6{oKtOfM0J38>#_PK9-c?L^i@$d{M&xtcMuOLp|NY(i zXw@Z*;-q(AT%Z**3<sjVs*EVh&x)7(Ej$d4M1X0FceS?9 z7CF~*nV@uG=dCwF^tTGAd-pAX)g`wPq0~$74}X+t-qL4?9sBVlJUqO`541wDpYLJy zI_j90gA*_|dbXv1L3#Jc&aUVlANzG2Oh89?;!2tVItQ%k)mY?BwNl$Pw z(OXA#{QWRJQ(Q;q#weQ6Y%j>>xI#AhsW-$vSdm z7BbUoJ?6YEEiHAGx}!B22?-Xus^OsP07(JRrqS>or~nbHPTOn$__i6oIk-s5b0yzp zB3*_}htlI84CQ3vxOEHdfAt>N{D=+=g^-b*Jz}I-V|AwDL5rZZ{~KD#w923Hiqak% zS|59QQfW#+Pp~xDS%8ZN* zm)~m|2}wyHago5i;q%L{gB6@EQ1)!M^*AOz9wS#P4B$M5*6Ih5z{{37K8=$5HP2IF zA#6cc+WiD40{W3toHIUxhYf43BFDGc*x3=u5~QL0ckf~>@Y!DaWW(!MH!Ag(cBDFC|j`=%yYuH;EHJ7D-J{MJ$Z zGYm48PWS0>j&6}h>@T>FcFxUF0NfQwJpcKnvHDRbdd1f;0@sth$MGE8L=To~U6$p} z4+gnWdapCM*i-e`6re02I!|XX_7nK4SZ@MS9>DcL%bBewl z(O`>MXs;+i3E8ra3zP}2HZQ`}Y8VGL2thHFsGvUKW{q#V5IlTb+9d=^UGqIPdL!B4 zL|Z&S1I4hdrpxYc@`4)K+#4mzry;od_wV1yowS$WyWwEIU@4nz^Z#pSbUTULj4;P` zOP`*&V{$S+Ic#`jgb)}CXmR{%MJ3C9pdtZKnLewOp%03VjyB@csF(#A_wihfWy=#L zGZoz__8h$YOOSEBd$WAjC~BAJbkEgLiPuFK8H26;-8?-*wC;dG6be82aK`WRSr({u zk9uBT$EpHE@Z)EALA3CqcfLyg>6mEXu`t6h)@$Lyl68q zRCnddm6P+|quOR>2=!A>6X<9AP)un)oF@4G*(o2i^>iUeVj7y^LEm|@A&{$pQXw)q z5Hue98IH1@u(D{s<6no&U?NEjt9pbp)Y#U!Ja~d&Ic`qjXq!PXa)q!nnTc zaC0(UVtgu3AwtW<1Rqv02=gG5sI5=DsDBsIW(}$q`MRf1%Ht$bDt*;~!9fyA%K1B* zp1P;d1NV?qXrlhl`Nr=Ak>O$6{{Fu0(+`(?|M}iF)D0vrD}rH9f+PWdK$kYAJ|6kc z3D5U=RI3^e+9|aCM?jEM)n9@22WUllBfIB+J`w)Ts1Q@j=X`d0TJ{cE9+cy`UsyxP zd#?(~$jK)XG1M*v3nfi(y#6l>kl$WkZ3{mWg3V5bM>)tvj5BmEbr|^xMfaZR>FMtm z&Zs?7&3Q4Qssv(0ZKK4q8Bla=xaZ)&QEAfDC2pXr8w~1~u?g**PZHQAk6eA1!AG=P zT?8^D;<=TeAg&3-m<*(eZ#24WiQqH7GUO2Y&=PTjn?Xp(psXb!fh;0n25jvLP|NQ6 z`igO5l$C&LMUT8&S!vcDm61VRJ6KjyBJ1E#Zcusv|15a>HvJ*(9QR8LPG&MPvN24T zHTw8|Vk#;SK=Bs$LD^`&(kkjg9s2pRA=&lo`%%e>iOb*&TP0%`&*P{FC>6ughVIJ2 zrTKetYkS*u=QD4_Ktx1DKI;!$km$iJty1t)rIC7e6ZCEV-4vaYk6@V8*U+SQ0l)Ta zXc|oBelWEL`=zjU7>b3hHUgXE>YU)E% zC#On-15S7a;iUpNNeKxy%qk#Q0Ys@+u7>`%PaiB#KdI7T*!9?BvZKW74QCn;9yH&Q6xhq7cSo=9stfXXxH5i z3P~#>aEv{jFbp>SKhWrGV*`y;Rq+7I`1Hb}t`7Vc5b=e&-$4!7a|h_Mm4z9pUG?^} zE^vfJUTD8iJMH^=Agw{SFt`%-kB(JL}jyLw$X?dw?+`t!(`D zc)i{pg@&)yjvfB91x5~aJSI6A8&Gk2M74pEGTuWG;SN?_Hk z8-YS-@3>~wX9s)o>dEQpGT6_ZJ9D-5Bi0rcdw)3g4-WWj)r-dL0Tc{combHM$M`c1p3v_QJ zOY&-}dXalD@37Z9;CNWaF_cozL=lRnfN7rPo21 zIZRsr`ICT-jt)Ba=7Qoapd@cmK7M|T5)vlPK61IlaL0R+I3IZYdK{OYK3L24zPXul zL4Zi>XR{x4Iec0P!)+6g_MQ36t*t}BO1;TZ75MM+y~ieL(Y?&l={2zV!4xg6}XZ`7uPdo*4ed8<;m)!PK{b-%&$t-I^x;_{wbWrjo6{nZ7yOj~-Yhy>nO3rfPo z)i*I|ePcsew}DRTS&Hz+@y?v? zTb(?uI~$~G^75E~=adFP$H@QNZSvj)4U!MJOIPvmCQ1@qsFlRmkXHP2zP?W4Tl>_y zkB?7_7>MRmB?-mJ!U5;r;KtDe<0u!n5K9CWgD zN(4Sg)LgZ*vtyfYbRK2bbgz|=DU{#PQC0SVB+R?o+HMd%i76;->kzMIQx9IJ?(GC) zKk(w{#w#K^r@9spH8%8Ar?TJH*7B2*lJfW*SeW_*J*Dyi4Z)L**}OW1>oLHQWl)5? zcdC0)#X{|j!O4}8CmyWKKtSr2_V)K>!4&>aO5^NK(M{7dJLRRayrBPwWdEcOA*3oVCKHfxGKVMIqusKT~B^RXe=;P>Vs>w>Zo%9! zEmH@**op`YSa9WmSAoe5&Yzg|YoatzBv!zB>3DJFDyrDZ%|hte!4DNE*WII|n)Z%q zJ6HF&%Bu3f6gc#T*1fmrw>xe$3ABGB4Z5zFL4|Qhz{Q!ZCuTtlY{$o2QzeJ*tE#vG z%iKHuPYD4vNDHt7ltQ3d%ZSNS^Csp1bhZfaarQ?l%-U&@iVbW+%g87k4F44{D4-P? z*4tfQ^j;x2^B+FwI~E)i_t+r5Jlp0D>oIru{O{TckL?+a zL20E{{NaNnu7|IoLqp_ha!Ec(8umme@I=mkxzHcY0Vp0)9#L$E(gh$0!qmqiXbD8w z^NWkvl$1X9U3jD-9vd+u2a5rJ9pRvnzwXxBPO>zcRD)V^a&~6N+0V?vqC-(#UEM;l zS7$rP15n*=_)DWR-PaT+aO@HN7?e+MgZFRV;Gd0fn6+gz&JKYk$!j@4hPcG2Aka&{ zA!1|@Vy)b-G7U*iz5#l{@ZZRS7JzOTh(Ig3SZ{y7<@bnq-7v@~W^lk;I+_+F5|`Keo=bw>-7MSlY5kB}Fzj-|sy zou!B6n}WEUpjy}iv4pore+zVM^9LDK<>AGT=G8r`v3y~q2pWdGSMVx@A4|cAvJW94 zVI*5sO-)=|FnH0#cp+GW{8n*QB_+A4w~b7ZY|&z&@xwv&t*Pnh@um9@9)QRk2GwZG zgyBk^Fy=IPJT~=BXc$-<57&5R)|9EV*%Iq60AX)d+T9HnTJS>;^6jl*$s1Z zb9gMVNlBmBcR?rtF;%$q2N)@oyu7@7zkh>}C#SBCpPizfgSd!beO@Oc1pafV^>*30E(~QX-x9)*#!Il5+D6r63-P_}aB#XeLm>BkXm++Yu2tU-dK)qRpb^?}5%K?}ck%VK=BH>iLfvBQTK;>9jz+nev zK!zoL`~XrCu3J;A@znEh84wSkLuolq($dgGLi_+~iK!0=(=42ppFV!n8vF{I3khK? zeDI3q@`()u|AmK@&u%0`^yEjpCJF_=fOc&-JrtG`fY`kOao@u``a<~o&@9c798u7} zi`_uOIvbMGvN9wyXzBx?DDRXCpBHHCydq>TgJ55fnO7tJ{BmM46mSqdC}|EE85nGQ zVDry>S%Z5xZ0EkXxQIhYs0jCr3@^kWot>3c*3Pa}yRaXe9k|qug(iOg_RNfoy7>$} zww^+@8l$dQt>3RFmt>Imy2^j-@j zTBABTIuut~K})^~5e2wcHh=*eH6mo|=?orENj64CaGEK!DW6 z-%pWLk@NCS5RhpRz=aS(q@DY4s&m^Z76fpNcZ&rfA%=;EhsOgLs4Ur$AgxtrB18KQ z8E_>X z{F{#qe1ZmI?=i%7bapO#p9DNHMeD>gU@Xg1CAv5`INwfrVw#xC+ai zZvcJpsYS++i|?*@&}idf@bsyWB-9)A%#h(_SOa%hS)b?UGjc24)6pS?lBm61$pSs> zKYEp}rluBLR#rCW`0H`!?Cg!IwzJZnCY8erDqi!K8cKq5zqtLvZe5}Up6_D|InK*l zqkpUeSq>B;5)zWfIz9y}nyRXDK!PEo*V5W*ONfHD0G*GLpoh_g8aqVpIasIV#`Snm z3UQ$AK|py!5Z2Sie0^E}s-S=Xh@mSH+-)*oRv>P1t-OVWMGnAvmPG6zv3^b{qNk^) z-rvJ-d)Mwkm}W17E>f0S@CM{nU<0V9@H`jpKuGYkXq@HiXsI(C$dU8_VDs_uoXXEq ze~zD({ph>^opH&LL68cy!uTLFg#0}<&Xz^+M1NxO6{ejgmD{{pczSf1gzJVPh2wD5re z)x)jnh#OgcKj#I5mxt40yw)IV(GA>@7xu#9M+QN`=|>`sECs`y#&tLp6ck7j?sY`O zrVk&WdQyX9!+0ZOk82cV3Cg$2`*n{baNQgA$6pb&79a~Ps> zwQ#(=yfUN%X`g(0lY1|NsbHEID!V+mBdEmCKXJ@zNVE>{4YKe(Xl@3n(9DC`Y4al- zwj79^%g|gP7VQ9()r+%V_Hh`<0Kb#Am4EcWDMOr0Gg^&_)O0FN3YzI~1j7lCv$0Zr zb`WWvK$hL(m65Tr>V+Xbh+LzCxcpwfOguKm(17?85D*lXmBE5!2kagK@n}j;&0MXq zVhU7PRFooeEi@(Nit-arP?`!1`q{W zEdRR*VXgIOk!ruLrep~2H5QbXXdgK_IRgg=K0xmmjg5`k%%LkHknc)idwKU2ekVv< zXvK@!(5^ABT)8DKPKExwgGp@?uDhgbzSYkQWUh#$WJpwjprhqeRM!N2e?mS8L`x*} z_fqZ_cquN+U00y@zMctX4fZfGq1Hd~_xIn2*kBh_9phP3@8v7L6|AbCfhTP0WPniH zcJloy5E7~_Xc@5TwK&T=(s;Ho~10<;-&me1Llse9& z6U0W!Bp^Tr77}W2iCzxtN!$jTu<#9dXhOzW;9Ela0EwlcO4l)ppOt`qzM(G2$vOOp zle_9c?fObR>|9q4;iVcwmL>ZrNglqEROSaxsFcI z?WgiAM-0&6N^bI5;2780pn*SoR*CFWV~f6B4=*oaV^f%w7=uX(Wc5Pqp>8;qS`=j? zWUI>{29e+~F!!2GwpUg#f~5OFR(++;lE3@*mU7%DBnsaV=on=<`_Y^?(oTnH*h+$u zr|^f=wd>avtmC$jUsBom7V26{gCvByO$jmOfG9y=1{c)Mf&!-a*(krGtq??z8DtlS zNDHJQfrLTvQ+V_!N9B?-Q_K^IVpmS5#zj>?XdO~JF0QV;{d(-A;fPLLVTqcEg@n9L zAc3yf9yzD+Hwe1Uilc6jlk2RGBpB7fqmVk^yW46|03oi@g;dJ#$KWt-=)D6A-p76q zj?Y)p0uC27!nVa0L2@!}qt?ZK3G7pwSvwO5o}DL1mAU<&-|R!0Y(my7^IoQycG;uH zk8eRx)keohw@7__ZVhsivGMVD{okq|EmJ~d1xa#MtRM+VU=NVrghaeU+$xdQ^l#Xe z_46ixWOB9cAbIqUALU_trcSMaWr|4Jwnnka=_M5v3Lq39W~QAxn4KvQx^%3?%zJ-d zUtc@)zV3Vm)DElBtcv4{cK3C{qbhqY?L_=-M1sx*^#a0%K;~0ZQ?11JY~?83EiIWx zvZY7UnT^ml9e|sGHZZl3;sa6}Y}Ic7+CdD`$>$d$jgSLTkYLz>130asfdM(lwN3(u zb7W_KentQ~0esfAxY#ysNeG!xfEjn#*kCye42CM+0LP|(|)K%t#>Slnb;SWH7QY2D#{hqN4ARG&b1(w=q?64N!4xVxncD zP_In@Pj(#38lV{@@;md%JPr1g1Z4cD$QFt;s4{0Cwg=FFcFAu{n^Th)(`mF+UXhoF z4zEDWr^x8?kk_J*7;Xyi(2Wd=YY3c&WM3Me5uHUU;PJ_(`5&(AVB_(u!fqwDJ{a(6I zC_aE|uz?7*ied+x?<>VKFu*E+I67R-mFF@!UNLiZw%1^(MlRMu0f69R$?rU=f6*|Y z^$pO0qVQ)2uvfEuw^+BTay4TmJ-5ixrHW&y!2@Wk|^WA6ectd13!Ek2HVnSsmF&kLY)^BERlVYD#PHFKj)yr^P+` zxkEKh{A-&(6^I&BV!NPsC0%)aqV)08C!KX=PfYaZMyn**(Lg1(Onk@mvvU1_V=KD2 z@JL-8>b9zuTlu`Q%7(B%fZYx-zdghhw$J=u2^|AyK?2nX=xw#~9zF>B7t94iRlG1# zl_BnRZ@QdVAFO}PuhhVsP6hS^ z1A^dJco>T-Fp$8du!_dBXvjgN6C6%Y<5ytsdaqKbRSH501d#!_;l@JH*n*H!!awM^ zTP9skB+hvX3vkB;c}f|Hagdg~IPwm-1SkdIloFt(#dus*pRGg+zZn=B8ba*$%_Z1< zAkztu#KZWSXP1CQCcPitDukKyjQbp7cXXFGHp2e>ZU2XXI^3SstU8uV{kjOWHCZp> z<(tymPyIl#{BLx|cRS|92NBH{Ta32Pfj4jBrzEVetray&keb6pPJNsKTItKXOmg2V z8W&$cRC05`QjJ!M&_K`sWIEG>DDL#kjHKj;az( z@%yXcdzV{3pF!{iBou-q>o+j=F=>DI?p>$>o=I=BHin6j(2xeDqE$olfbJ6QA~8hr zuWHz>t*-X?C2g&iuybySOWV7Fuq!45SJyc`tzRYqfgf<(##)G8>2zmH`X#;n2!266 z41Xod4}pOX<7*zod_QE;p{@c`dVNVlOdJFz+oChb3E=1+rrg?wG07_$&xwjT(14_j zod(1_`IK~X>Web$F$f6f{x?4&Y2{F&)!G7j=hW2H#xs_p1@0W30_6k^m`;Vs!`{Jr z_{C&YZbLDicv_Af%G3&ehZ|_&^5*X(o*W%RXkJ%o2GBQTv@%yy=U*XmYuW}64-YY9 z-#Ik>F%&=L2M76)xt~bM0Eom1mwy4&4QN+-H{2!d`}ac;bwZp4y;N(kw3H3Vukr4i zerj+@wRCh|fbV|rHF98vI`}o|FkZ2kAlSQmaMn()s zZa^o|&CmP?7D4ff6HI0djiAa@U>C!u?JBO-e?!oZukjSV{BMBzl?DXY|L<*G)&Ci|{*0;4`uP98<7d4@MPdF9qmlTCebVczk72a$<{ofoIXZi5IwL4g~q z{1T!i#tM)nAWvjXRIMNR2TRnTY8I5mV9PeJkcq?Py;l?Om$SrAffRI6^!pszC`=^B z#Kb(h?gKRDkQO4C;9#<_O#CJd|H#G%;Xw0ureI*W!x=!>vxDsb^{DG5E*uHc(^(_G zk-18s3IP{K_sjY%cxXLSbSCg&4u$%{L{HDd%wqn_7Yr1P$m~W)fOA?ZvcR31uM}OB z4I0^QggRd_t#kl2U+PXBZz|EYHZXC0vX(VOa8|XQ8Kc!&+n;a)I%O7Hyc3ymmhGceKEHVe}jJ| zmGMys3JQ4tgr@B|z^MAF}ni}}>RGB}wKJ-G`H=X%+>+vE63MM0azIkq`Ii&rA zeypCfzP_#`O;wAd01iaLEExCkt7si5yiZUl*uu89wpdluUeVI$d%;G0v*kt@sJ_ur zVef~&zRjkoVEpnJAt^Sn3W-pkTm2e4?UT99D(@GGdi+{Q4UlsC5oWYx$#b*0I&e%n zC^sESOqPBDP!|+rn_n@jCCS{;+l)u(D}+cLuBRfp6PTo%OP80I$Z!it59`=i#IPQ-Y67=CA~pAtzh^K z7;N>_9TOXy5r!!McfA66Oi~I!3dDFGC|H3!tcmLhp_;pQF{J+P@FM|9+Qy_1WthN* zxN~kGWJJz<#`6>a&taj!H8vjhje`go95(av=h_+;N(2<_-BwC486hcedp#AVFjneA zfM(^u(4g6~{VPzHm7|xq2dUth-um_{H1nLK5XRa-RD=GltgeoUI^12N3mWKmgVZwo zTOLj&(=kGx0qXBE5WBV0xQ!<;>)IkK#KlEO7jSY5hWuT@;#4lw!KV=;3mSN~gpBZi z0jv4jw{IvAr_Vl2iTn5i{y(rf2d}yZ(o_3jJ0jj;2lVrOm|MyNVe#_^FYZJ$Lqi;t z4cO?gy51o(0w6FJBRh#Rn~1MWLsb_rGLTZ}LW9>WCh)1A+c)Rm%i;_ynSC zhr1gaHq;_6C|IVw2djgw7iXR=kRC+LelW}s4uN8mW-Qdfg{%oY0CNayd0!mOY8aQ^ z8hx2#R0X2PM_2&wAhibN0|j6hv)A=KFuvV0(BTp9L~%9b)vNE&xej*$kHI`67BF}S z>X3nkJbD|lfiQ0h$^|kTSf3Rx&j4KWF_M&nsH=7=L`}O8T=Ea%*`i>SVL((1W_svA zzq$#L22`SDXp0(ba=088cvdfc(f`&hw`DTj32vcZg)5i>9_D4O=U zPEKyz6WR^oG!R`NOftr1MgwFYG7#`>8)I|jg-GWGrVnv7EKBkmH!yB8KaP8-Zlo zA?yPhBQ>Od!@|OB;^xTrud{M+4^S9KgZDlY@Rk0-h2qhOz5*j~JN(cwy6aW_^O^SKPl*?E_xWVWM22F!FhAk=X2 zL8Yb`=;%DaQp*PQs%Al>mSaoof;$AB(B9tOqc%o-#cSQv59#PZwvvPCF=tLG$U1}5 zgpP8de#?(}0ysrkMP<3-OS&q&9Ty+JN$F=}a|ixXZQg^2VlzWcoR+!69z?QAoTGDd zsRK+q^YvHZOC~&oDn+lcAX60NAztvEAsFx)qAp851rIGl%0KP0g8g6>06UTaRY+oU zi-uvKb($}bB}OIchuu-$$`Ez`l;>grG?^`)qtG9Qy}=bJQX_%xDOSM(iN8YCccL(f z!yqb}x=t4#6Vu@bz_+5fxB~``>&u@OA^8Uw&-s0>1t)ClL|mv-qRZRly^jo34<+3u z!?SITTP;SEDLA(&k_T*wTSKF6d*5W6%OO?A5e###13(*zVNwL~ytfy?a(j6@`&rx# zEL#GE?gQ22FnO=FO})=bA6#A!ts3mK+7YzBf&c!}A;BJfAE*|{%X77FXM+48Vgu<$ zT-c=zr9&`Wc?Fa=Wa6rR#Q$vb?M(;_5qzm9hZkkx8MvGtSXQ_rUxI+Bj*!bJ>xZ=0 zE3inx;;&D-3m35m{Wc$Fg$&}ci^-w^@#cUtXS^;2AOeZ;D$*K7KrLcqV#0()HYs*| z`FA%TwkVQX(zoQh8BGd9pxR;{8#%|+{oQ+DOd9L6RA6=ul8pt1B zBKKVplsgv9tReBDO*)w*arJN$-Vku`9$lOr)y0nv4gC;3Dj6-VxLzX$lLqh|C}ZdB z5EA{KDGiZNRL7SuU)T=7XDW7+shPG@)Q&kk-nvyAc?%XdWOH+Khavmpn_OC6xZ@8t zHa@F+Upor|+PzAS21BZ{QNHW!@ghg60as6|`OL0*LJyTp(Ig;m1!KUq1*xyn1_( zA5s^$CCy+M5W4}iXdz<+Nap3|BU%Hb<-xc^gXB7cWS^-3%*hjOL_P*|bOPN92^nbY zrm_43riXz-9=|XmP6dF{@M1*-ydg9g=OoHGxJFOTz}F{~w4UWh2qxw$ApZ5F#kVna zmoWM$@w#AVz4JY?v#_+h#lV0b^z`K<#L3VMHF3Ab^RYq4BaB+v&O8}^tIR7GfQ zp)&Lc+|&ODP-aFjf0EJebkL^5&2Hyh{z0?28Zr40A6>Urv&~L#9DMmXs zgGL5qvM*?rzXoh40HD~&u*j}Ri8QH@TGDltR__Bf>mb0XDFU`}Gy6~|jam8?Wa(93 z`z{i?!}Rz&10B(*6)j!eyVy!ckyBxLw~2AQQ^hnCxRReh^E7V5`XSXP$(SBykQWk~qwtb3`L-f%bi@RYOd z^2~mb_q%}Fvr4FBN~5ubRKVd)m1|272NkM7_ROc4wBVP`2kw{WKB!m84=I` zxl+T7rEQU}{g0gY*${Gt-#WRZc>)`|BoNKWNvn||=G6^KO1r0_?C>o+Vj5t1QHyzm zji9h0t_LvS8&n&C%{ln7|Gp_iSdBJEb)|BXn-7`<=sKxu3j4o*-?g=6MJ9WJ6Xd~H zTxrkbz(ZGOf7=VR0a3QmQJxn1(WVSDtdPH`tsn=-4}^_ru{KDCZe{bqurFe>Azv?Z z4pkB@=tlJuHh`RKo{K?j%U@uR+^fI)(P{HM|cA9bK06Oh>Wk%Eqn2z7WN7z)1J z3i6dwH1?B41ccNgGWi*xxVvsnFax>@IxCO)Nyp)n6wUWhhmwp;J{yTFZ~Xd^#HGy* zJ|mzU^qe$xBzXe5To>T#ioLS*EGVtt;GQ9=a}|~FMciAdCWc?MFJ&iMrj!H~BPkWE zXOM{!jgB-7_^yRt)47#BWq;#i?g3QDvKs=+4ILGcr!$po8m1nr{PDr|?U@kxwRZky z_YcE(JviGr9yGj3F6M+n-4V#*!e{RW%*gW*;YS~Xuj}9HXH6%4IJHmuYF<@ZIDFE& zPdF`ICO#BL6FyymBY%sT9LrtHEa29$=#x+Qi*8r6?NpT1$pj%51nxsBr|#@iESMUf z7QM=x)CjRE3>5e@(EW&UiW%}vtF{L1neuMK7quwr#$G&C{$uX06?j=-icLg2H26q; zegg#m`Zi}rrM=Kp$XDAv=4&w1esThA7p=J5c9 z)Hh!;EE-#z3rMw%z&#tA;<*FhW6`4SYdP=Ujcste{*ipkfD}xOh-ZfIypX$3xp0RY z1f-6@UDmmj(TR&xPvogHQin+a>3{%T@D=vWl{Ly9W=-Dk>c7D{7;Z%JfYP z8$BbIRPF8I8$A4;zkYz`B`YtR^t#3}B-SS&@Q2s0wV0O~FN0)vkGEIV+(!C6v)$vw z*PE-F%zIv|PGVm{M>85Xz^9$MpZ=Wa-*Mo-`n_W$(u-f=niZy)ek5xOEGDx;xYXfGkDXkP6-w9`N(N+Kdn%~MlKMSB-fDYS=* zCX%Mg$cd7S=l!|v`+hxtKmR=U>-WcfX`Sc!{eF+nalF^TKR-@-7;}dk98%4$Tw4bM z8&iIo4}D-VR6ribGF|WWYVRB)5si^T@GWx#MeZ~|Xr?NhyYj!WFaAM?eA$j2Di4bI zA?1fhu5VCxpD6tl0V6x*huq@R*CBo_(Oe~Ga)dUnJ@!Evs!!oxXv4zz`?jDd7v^(a zyLbVrikEIOVJ?}&yQcMD6~30y0Db0F^XTEj6yu=MYW;!)R@?*S4=*f!NH!OEKf;)* z%ej5KR>~q>>9MVm5->Vz7#nHjn9KzS`T_aG%PDWKHkyt)I8+#gqtM%gTV_-084Opf z!DI9D9bQuAtOIQNKml=pkk&P5d4T(1sSbU7e7rs=d$E(#51M{Fc}RciZM{w*-!x+l zEfdcbMY>E11S5%?p~QrjY150!t)TU~&)+|R_5#K0#hHU~ zE>?{0_ZSk#5yHyCb&&6(=|Nvu-X7_zw`A)6IhQPJ<7TzDLL6(l;IMcTcWCJ=u?l+=i1@xlIku2#H-n&FiNJu&`4O4hep}7?1u#NGGx8LS~koF4* zFm;<1+qbU;X0|AiHk@~^FLQfE>&`ENIl|l!Ir?gH(lLT9zET|m34CB{p+Tv#SkJ-| zZ8|`8=+_K`)NKvdg&^n{hDJtUiK#Xb=986`Wvsebf7c0>;{vTskn*Q%AlJj!)5XPf zirO5*bA;kb--{;%RFr7lX8=6sTcr6nT+@+5w<1G{p?3)pKNEFO5vNAOch)uifWr)U96KUb(Z;ATp1Qk0ILVu3Wkp0B@dwW5|y-8P@i3-O%zckvj%?L?DBU<0Hv#%U@_A z%mKB+y2{A#@N%=TuPGQ*Ax1V);AS(TC8BPa zmkCAJOAJe!<0iZHd*o0qn^y8yC{*V@3O(}w>P$&_ZWGXn+s&I^WBK)9c(G{Upiq3< zv9sZ*U^DC==hDD2P02VnJ(T*{{IWPte>l*(%8lClg>upwBcq1Z$&p{^uPD-cB|b`E zrjb7}c%iuLPQ(;kL5gqfLhO$1%S3;0x*4KIVSRb9R{l}uUdFkf>)jsR7kN~Iu~x9% z!pT+6!;xM6RHDZK=gZ0yhTTc1yXooaX%1BkU;j;43TulOoNs+$x~iBL7J4DRpu1I+ z{ikf$ND7?D=Ix@~&Ert6;{G!|IQ9d4t7~6&Slg%9BUg+?_?e%c-olz=VD5R?eP0A@ zPly`;x5I`w54sF<4$y2_&aL4Rbhtrl4TvLC)9p$r({%`NUb^|_I5@kw%zr2mYf4lT zh_?es>x#D_*!>LL4`!W4phfHJmmpOis|D~=(<`=1+0btmCoTX4ZeKo>ZOH3-S1crw zn)ybf9zL&jNJ49GRqMAYNZ_u@+wdm_q}=S|j{s~muap3^C0~a10IDC7&&E6)3erqS zHpo!riFjQ$JuR8x7e^u5l0cuE%R<%yYTk!pG2cfr*|v6 zoi~7GI&TR&$k!uCE|B9#9r0r`P-M!#t>OEOaYu8xPUN}Syk)jl}Az5+@Q z2CBnFCh^o?=n@O6e)M5_`vR47kRAKb(9jr&eF=;B%>2k53aqHvt24sNz;)jrKA`ub zL7W+4p~IgFpp+v(bc<@z5o9`z`p@k2wtWld1)v+Q{+|bIN{`bC|J}E7ZRy#M7Jca% z4_!xV6_VlHl_fAG(A)yg+L`CKccUv~ehQX2!~g3vunLbV5fx&rAu2v)AKRJEB{4|!i6ISh^WzIT3dx61Zj^f@+UurpoP#P zdKUdR180m(XW?+2Iu9{d=qj9*xS6Ej2eugy6irxe$6B~j-?7W++# z5-2I(^gk*aq35aic>}+a=^9OO;eGG!J4w2|jm9FlM z?lcE>Mt**NlkEv+)}>JjUB8zeI=H(>R8~rlcW;Vl0!HfB=F${xk%`aYjz;0zFAxu= z^$k_ULTv@Rh)*@~IRc}0KClY%6?y)AIvxH2^9twW?>+F`Z@xzp%<$(X&!{t1ZWPo$ zj5+PY&Em|?ok@1yrgjv<#{x$^GpPfAHew)T&23=CxADi3E@*6_!vmcjF0>-cEV{Qs ztC~JXe^@C1)Asr2VnWuxH?)ll(<%_c?5x(1kdV38YYt*+0K_|6xq(QdanBwvAI~!> zK-^5W;mB`H&`JBx6`O~3uAw#IXVB`i1x(~#fH zOZy*P=9vU8AIS1uhe~;f;zzgRuxya}PmCpc1^v)_9QgG1@!#@)wf1@3 zH@XRv!)%c=R3vSheK@<&1>=RS$`GFDx~uZu0KsGpzwY^f+_jlmJjB3^}CaNt5kkvSUh z)TRZ5Ed1H+HG47XQ5rDuL+!hv`|OdZmZ2r!b2CIE4I5DG(?7O)dO;A9c#oR)avJH6 z0t-8h`2pzJCPN|7e{&3GjaH-uN?`AVZEGW-W{nAPlXQ!sfmsKPi;v%X>O60ENR?=A zZjK9~7Al3#`cd2ruTGr;%dfiXdm%G z0Bik(nSTf~#}$P2y>B(lGkV50Q0wo5Zy3iZx4Pk$4_It<0Q>&7=nBNW##MLvkN6a$ zaR$H9FmwCThM@g3Zc-jjHa@SfP1ExCI4{LXd%*Wi8dQUCJ8h>g7kI# z0AD&EWQ+j0d6yE^EHA40Lw~3ac@c=))ggALe||f`YI=IQlSBIC>!d8JvYF$@Mlb#O z%Js6ql*MPdlV|4HS+0Zln-FlGQIv9*>wg7IRgi(?94^pk!q&I@z##EHXa(1V8U@u0fu9SZhk)@Q8^;7J5H@@zZ{`03YBHO7G9$IZoAI~`uNTco=NEREz01QQ#P1dYp(Dm~*S3jcK@ zppH_%FZMVfS&7Lf8j04m;rqnIo)O|2$g<=%P(xx~?Isb>SVM|?Z;;05x@B{S-55ez zFiL|GFJNXWuF_nWk^BK7lm^KE3J10r$D-qMfKVR@KPy356)$V@v35u6060R-oonTC z64ddsCtrsmrkIDDJ1EHyv5yKCr?FfCr%hx^AOsIQ-wOVXpGJw=uNI(oJ2ln4RE0MJzk>V_?kGZ`!-g_h4`}7avb?CM*3sFQ zE$IDY6BDnaG!X~`sPcg5XFN5S>DKM@hnO?zK!EJleKwI8TIqWp9IHGufsb|LHbW;d zK-Az>z*Ibi%ewW5_1;7uD;WsKp1m>RczfaNdM_vNP3vJ&r${I3jl7-3hbw(*^mVSr zMMw_mcLC#!(JAPf5YU74?T5dCD&i)%r$2%yIG zW-WqE>_Nq+c|wEz4CSgb?i?7LTVh${lmM6^tu+d*Rxkuh-qq0VbQE?9QT%@WDC)J;WzPwcu&wCx2}%y*6rTZ29On4NxpFsi^GQ$zt~S{t(Bw2|fU|r5Hx)>Y`wJfHB>eOb@NAmRM4rJi>}Ty(ll`%@!Aj00YbyzHd^I; zsH^CvbDv)GG+oq&qAhOz(%Ep%vI>zm69yBPez6<@aMNifG=k* z{xB=JE(|ML7CMI3t}gz@+hWr%#oD{OLy$FXB*Ny>4e*QzPXs!!p@DnJI-uLh+4&AU zTKI>(dx-=owks|n!DtW5N%sugxX{%Uc?ZUY|AoP}2Q?ru(0|M349zwz$G?Am{{RpW z+9tPW&-x(eegHwPG?qzdqQzmQ!h8yO1a;L!UcZ}?KW!Bb5*dwAbVU;Iec(|BROhp+ z4}{VCzMOwfnPa%jGqOjS6%rFu#Z7-KXfFj#5#gBx+8Ba>BkY!t*n~Pi<|spyVz~us z+Xp`X0{=>U1b*m4<(o!H%D90ZyXYyL(CiS+cjbJs131ThioD4nb@RO52+JjiPTOMh2x7Ced z`oUOFj5D0luF7so`1r#L&zr|f-uAe+ZJ!M{?jO89xOSdF_yv!Na_3CL;{uz5#aGZ1 zAz>yHk1Qn!7XnJ!OdP?J^*0fU0JI9hg0O;bVR~H`kSMf+*iqq2fu{Pf=7kFW34#b^ z(I{O<3h>q_LHI05QXI5R$Js;7xKSlrwbEf~L_gb`XDG<~FPzNyI-I|Jb)eZ&5>ME2 zZydvli|pnW)QGWn@8~eWfy0QIdx*bLdyr-E*HF+K61$BPIt2Oy)bX(Lb5reX4{&Bt z*SK1pDqI=I9V^g&22Ve94aaW0)4Fg$scaIWznD%1*mof0wT%gcFvW0`}sB28DtuwR|6g zEV9pafB!JN8SUwDc1FU7i@68gohzzWfV}oP9u_pnuj>O-@4L^!AoAp{PHHG`b02JU zxke%=(x9*y@cGCosE4cMdFth4hxF=7^xp-T0}RS>s@S@=ZHGT%Kdz#lff9sNxnX}p zPmI!lb~@Tr6u{Wy7CuwN*MPePuL1Vi>79>`w~p*)4Z}@x88sx?=-vHtlNsP2z$fqM z{$=xd-U|nKG}j@4Pc`{AK2TlBN3j?DOs;ev+yE1H_GKI6$5MF41k`@O3g^G(Q>AadiBV37pkgSUXhgaz;C#sVd1rht~f@Ad?}v)?0&$gUb3zG?7QnEsT% zX7DOgg1^5L{l!M;G%5}Aaf6~A$~4H!Fe%X3oD)u-TBr>bqh5Z~FR?iQag%b60f*Ih zWKO{;&nqWqdau<`O-V@!^m24xU!P_L6PB|e{R-@?fRV_IhIy;N!2d$$J2Zo6 zOeE5k{I8&A->&otMA$^X1TsfiP*P9;3Z?%z;AE-ge73x@G6BiM1Mex#obNJ7scJ1y zzDb;C=?5YJiL609Gviwyr25#D?ZCw+2rS?ZR5oUdV)W40A@bnV5hgqcr;Ho1PKYx* z^mwyD&IlqbYxWg(wh$C5?}D4qpWR4J$JhEqCahvLDRPk?LjoqQ*s3MID2qktKP?$z!oS9g$baCseSKEnK2iI-=!*wvk z3J;&uw!vLchAE239>>lZ<50zX;P>a3!oBNJ2f_B0IkvGrYiZeT^d3Ke`Vo8k_H*Ix zdo0_xZx^$ExCP59vfJI%P-yi{Ow{Xxo9B4;0CmA#jMu&J?c2-Y=iL&9(+K&vX0=z2 zeQi3&imBl+Uk6b6@=FW}+WZj`QkbNjw5u2ED1Tr->WbRn+e7VseFTwB?LU-wb z5^~eU^2UZ{>*KH-$gKr=d4nxT$H~c>5n8pRWl_-&&%~L*3xV0b*RXB7nYo!+C?vgo zv)g)B-71gzEAqsG73cN6f}*qGg4>l^i-U&Us(v0f?H8ej8#cvQ*A?`;8T@mVIs-~V zFa2zRf1vdRYin!Y$#uXT(dpX0k0;Myc^!_j>~(2n^ZkM)klCUu<#~ngLliINvhs2K zWL-4wKwZVti18v+1TW;N9KL9&jM5iZVD6KjK}E2J+-{>k(zuk?E_cSF&F=n<=T8Zt zQd*O+jBUz^jIPD&&^^D1PCry_%~-d>$H=`$kZ$T-C9ATf79>uSy9>?v%@cCZ&{CkJ5TXDl;}|6T5*B#_diSiAH)opzu>e>}vQ7bW56=E_ z4=27XKquVz^EhX*53fk~-e|ayhu*y|ycF_O&4rNQQ+3j>a%lfOh}06Knh|^em;fI5 zbwCS>jYgp^Ti<*N!2ARlLSTGHutWnpL9RfsV=~g?{bS)BX3(V3Kp+H90K@=`1JHXJ zZG;`pl(e(6Y_q*t*GH8tl?|UyB6uH6O9Q(2GSnmNJ*(`i=WjmGb>evqA~g^XLCyX) zmsS30fO4)o3Z&Hkgec1T)#4-shNVBdTtx7;3#z;1UsAqNg>G%j}Vx+@M0 zp*77y+oE{588h{o4Lcf8hP3l%j$|6ip}yEb)^;yX;%p@jriGj~kt$|FGcU|9KHAZ{+@aS$c)^`3e8MER`~*-2W)OElf=! z8JZ{@ax5tE6+=mXm!Dr6`}{c?7yA91 zOOvge$oh>Ru(*iH3Is&q;wY}5K$7Q%WIR2;edvCxAJ9uj?Ha4%iod|b$Ph?MT14a; z3Rr#~hq(z{V3N&r6L@Kv1gZ-YZu=dFE?Ry5gJc=9-S3#Tc4ey{1X`1v2*B}OJQVnI z3&hZk0iWyEf0)>XD#KgZ75DLljgJt{k zAF@~hdTMwdiA%abX&1#i3KNsdZM5$AA!f=@t-sXrBavJqEGsR5{s_JSN(LHmQi5qo z@FY`j_=7*%q2#v_3@~|19v=Did(n`nV#lY=YB~z!a;qq0Q6g$@zS6EB%@PrRvRA2#KRaJ;{E4-r)o+b0O=u!?Sc@*}E!w z4MitKn&(o9dBt7z<}^tsCW>;A2`o{M@n16TTPabigYA;sxSqdxbL*FJs=TSEak~;J%LkNoAc|TzsoEXoXStKm-K}a2Di`E=c%)Y z0Bz1}45UK677o}jW)L?3$;83dw9`lO6-1iLLW!;m7ct z5wZgZj#@R@(aGEU*!C8hr8);B&$93QisNVU6g1AXbFe!>>q6&hwI8GGyV~bHGMp82 zt&WngTg456%pvnM47LbjV}MMU!r2kED1)QD;!p?DT#ybCHwel^1^G-QED_OKaUXGM z-aUvR%=3*C?(UYeeiYaxmAfPC*ipPQ;1z=sT8Vi$_^wB&ah${~MG3+w6z2&Sj5=g`1T(Du{q4oSr_Y>uhIn8C zQ`ePOGDu-qy8-3H{0;{+ktEGqgvta$N8lBd2`m&KRI4e#Jna7bT6P^S=ZD|&d+}&R zdAT@L&oo7BVud10v4teU0xH1>(hM|-j^bUDCUr0)%ry2GA6$iuM~h`~UJ6`7jLGR; zek1Q6l@QPyAHBYwo^mzGI|6_D19JHFHx$r9(C!1~1~qWzMp;!=6XK^aDS%H_t*%%y zenl^P>CXj70X9NtV)pP%-l#;?^C=|c_HFOPuoXZgWaJUTQ9^M|pvanBHRfa4sYo*L z2uOk)x^$b>P;YyxGE&fdYk&4HTk^$#qi;^yD*1rBm^=@z-bY@y zF{lI2M-!1le!@!%;GN9^+LVSsKXv4KgP2Qmz;GW0^{~&y)~-fayzphRYUijhERu3F z5725Mm~A`R5BkjBi`tCTUO{k(6u?~uP==jpR)XA=GDZSj`ur&0Mh5}Y+>*flqJM#6 z8v8>=4N0B=gcGL|;=(7&USX?X7%HRbiB15R4)D$5O7SyYL-FPKiUx^nCqf2jlt|Q? zUjc;e)J%xOv3N@Y;j#=AWWnoFTM*)i_hKfDtAA8Q`Gd2%38KedgpTZVk2=`7^97RIBHNrF z0iol-X3Ldf2!JF=zy1xA-1eViW&cfe)Z$oAgSv zriPZ*k+=1M3bPGjaE6hg(tpe%9C3>90CAGoyY707l20L&L>f@}`y?Qn5-Bq7cjbfz z@NamGB{&^VFrj}YQGn=s&e-pT5T61G7BmG<@0f%DBP1v|rl=Rga$vwn>^f8&Teq`N zh`@#>9S+$LJmd= zu+~T6dqBdN!U{=RQI6l~&}LkR_YR8s+uaFlWu>Q}B0H3Qp^#dHMo6$<0lO1$PROMJ zLj%T_X(WQC@X7EwBsNk~K8R>NY!ceiUa-dZtr-WfNO>>=f{dBDxd{BeTIQ`-UAg1P{E0V<$4W0ozg?Ut)RT5kN(i4xYs19udibd|P0; zr1J=kjC_Xg7KhlR{4d@*MVju>O}#~=a4vp&6M-fr0~icOXk{ECg4a^Jj=7=Pq_zZ5 ze?YG0qVJD3dT`~<9X+?rxDJvy6ZG$&w2s`le=C3!b?Cr!)0H&NzeJO|sp8S?+qTpe zEd;>>RUiq{xJ40HkNCekKzYH-tfrLHuy=#nynbN{C#W*QGRRImNi|#q`4*xhqa639 zlRZL^Viaa_uEJ+`1+e-Aa(q;Uk#<|e8us>JX@ZeEG;}l^Q4EvTozz6c~F(#szG{NZb1;BKi!w|h2 zS+jvpfQ{@m1DtKVryNsTAdlT2yS8zxf~T0WiI+JWK}3~#6nL|cGD$r7`!BfmGJFrk3KzU)M9}7qD`ipz^?wx+dTY9p9kg+n(7`E2&IX_2RtSmyc$LN+xCB2fDAn$EP6d`aCZ2K z3kpwKVIg1@nq0y0l!BhE;Q#Ao8y?FTVD-x3z9I15UH&X9J1fpG8+m2}k5lD=>If1B z-j(y;-rMyZx{2W>rp6y7z+#)8*v7To8`pl5?Rt5)wl?iStZ>QRsu2T8*!m5=S5~j? z0h2?PiGs69`v~9CGtiyK;o%);uIxyH&thkgI){`oS(Zm4+*?Ettw4;=2IF~((T#jKuVm z9rxL6(Vm3}8{R#gvK@qVq2>Jz!HnzaGiDFRgY`uNc?X{rAVTAEM&kP<{zDf_Akk!@ z^UEU3#0TtERPK*VjUxxVY>tvK0EacAsfd@BUCNmm*iV>R`S`g3_Ci{tiQhq#yHVVI z6i(9(+XGB2OYh&m4ut2uNug=UE<_GT-F;~2mTuwx-=cAeFK{`v^6s>8X9aFlXU-4T zqza5}lwYYTmcWe!#&P=5xn2>}QR8EseV~CL&M@Rr#SN_=2rtFrByZ+d*F!#Tc3=Yh z_hR@g)>3`LdY!_UA@5HgsxVwYKzaniO~82q(X(@N`4xMlr4tG@t0s)hoNli7mTBSS z+rsqSME#bO%Z7CVPDN`+SbPWUv#m1|_u-=S&sO6Ru_yGAnTA=;XCy#Vq?zbfZb`Lp zzJvz-mM3;t3w{#vj9>{kSt!#Q_x+5UD5&|>8Oyci=L-2bAXo8vz7u25DY=vGsyPOY za8d?2pX4l0VxPbMJzo+j?D!xFBVM?)jg2k#?Fb;Ee{SEJ%A;zwp$q&1RGgl25pcQ1 ztFTIlv67VhCGUN>kHmq!rI5L4=I|a)Dioa}fnDy}fPRr&bmY`|k%iApKY`X!r0eX> zpujst^FwJ@N3@NIXF|(ES+kt0RgB9&ek8FW1k~M>nEj|{jhz3XmYo!D>Il`i93Q`v$11lJ0Rs+xi)~G%`b(kh zB#GYWZ}J-*%xXZ}tfKVMU#@zl9|VQATl@j^wRg-aB4piLnwuE`_)gYBBeBPVF+)}g z=?}CE$F#JhhGmu}+cu*@#tagC?{Ue1W|5&L4(`_WQl@cx)f3_? zFdX>Mo$|CRstRX^bZ!h~%yF60fO6l-dDL9?om`3%CnQQZW&YLrzvK z?U&FMYUiLllwo+VspT6q7s0@{I9@;B%I=_{qr)#cj7`$XO6kZ{fSRx~Y)|gmR2^!1 z`i8N$?lN-ouz(yK0_~DBAS#>Wiv}gF%si1b=VzJGqM6S4`}eKu+P6kDrR~xx5e0)% z)VK2eJG0cltzS-t1qpFD3gS|gu#C3i^}4F{i;bXgy1w+AUT8I51N{V_a#env9~?2f zO6R|=g(94(!Zz@`aaB~Cg&+=~PKj-%M(z2*sLuem7jhPi^N zM~th6nbSTXq?$Q#O0FVjci%PQDiqDG20E?>I2-y28~_mmg84;8GEJ6mPig5W?ax;! z($~ZiUY+rs=zfBchrG;xJN5)w-mt2QcDc(8Lp$Fe`-3O9$aaLtyh){h^b>#}qk_vp zol$6P5q*3e3GeaE1%3xS+NEwwbk&sFXA;ffFA;>Xh$B z<$6+3lPuFH9yvTc50My&GJ;-#q0Qb-N>Kz6@Gn0|409V{IBDm^7o(qfKQ&@CEwd%McfE9yo| z&q`QYmY&accDZ+GzK??va_=Q23@3> zKF_A4oy&8)0fATvdp1;!7R&*uyT;xjQL z`~CbT%*e9KeI&4M9)O5`DPh7jU=g(@_a_`FMUYq3`+vSS;g0yai`&xgC zYIA;yvhqIZOI3@sU@C~LS?k}Ow-0eq7I2vPbR#R;%cSMz!xB6+(nVzHN#n}T0n1Zg zI4kTq@77CH&37A}wOzKjRap{m$6hB)^;q>6hl~7-ql3fK<;EGGD7M&+DaEA}J9YzA zPnhJ>BtCxlAkWf=Q!M`5dyE;diOg4RB?L)Ovqd@VK!w(iOlFe6tHz3DL7oVlpx{!* z_xHUF2qJoln@iryfocayE)o2S36yXmVjW5XO!e6(H%;}oxKZO!vfg39rq5_A_wT=A zVJ>y5zLfuRRut1wyETMeF!y=oDJ#c3PF zM$t5HML}q*%6nN)Xi~LWirL{?h4f6lBr_>eFH3B>z=W!{5x@W%5cDjk7V1C{H=r|V zorfNHA$$RCA&`L}NVo5~6(KSbV`!0F`|T;{T&9W9W+q$M%`yVA24==_knzz%`|wE%g6s_Z5BtJWiv2G4|U=7IM42)HkRq;oU1Vd4xWTt#JNrA4#k^zGuk za36}pa?@Q6fX1{y_$)9PMdRJes}7_@;IHGM$gOC%6E!ng!y2Y~^u*VN1@T7-`?)ZK zXj!?7^$*Xef%Y#bsqfQ2UYR;(&WYA6&O9rMpHpCQuKynt{3bZdZ$OmwV(daBfEVxw zWT^q`H=9_r=yu2tC6XFobvhB%{q%VFd=<~mKQ*Yk4{uCR*^`tync3ZJVXFIb^qvFn zkyon#hlPYqvcA!vBzPaLVvhf_D5BD^`n#`hgL*3u0^kH`mw<23$c9M?A0m8g!MBA6qKqvxDLQWN zp%U5zNd;-2v1$+>>Jr4~|IraV-Zj6fB8|`Yms&uHj>(OPv&mH405Y3Qafn8${qO>D z^IIaYKjFPd&9=qQZ~wM$)stEc=}3N3ExlQl0X+p&QwzN3rvcUzk1nCKyk}I&i`fcO z+h60^-yUN>=fe&1uENOOZ{5XGLy0ZlN;#&z@*Ic3jJXL|CVNN8N9L^0`&!>_4E1`5Z|HUFS~$w6Sr& zwyNjM6Q=-8uxwbSHd!$L#HJb?6YO2HyfG4*k@F12D0__t&PZNMi5n1^mobLbBBgKF@WQO?3?WrTN7|#H&| z&L@`swu7$2ev^L*Z;8+CByh3VDYdDiBYCT+X$2LRK-~W4^!W&l4^G90eeO(<0%LjZs2BLp5XgpT4{>4wDY40+ zA%y(~n#I@~GoPLOPQzQ1!M^oEZfOePJJ!OOtXs78>=zGX*HCzoLu;x@C1{^bl z!e<-g>4v%ENqE86m!wo(Y7Ct>bTE%{J2t3Y(PtVA_y+Am}FP{udOO z^)C$HTj+!QPMKKm-+&Fn7O~1^cdQnI--2lUWkv5+Tb@8B9}++{6@AZvUh~4$}frE#@3r7&bOhQn0umJrX(7>6re?&`wkPxJRqElsz z91u+7?_fO3)^x=Oh9>}J93mkK1;^Zg=yNP^IJ0OhLXBy2WLNO!J2_gbkzX@CIT<54 z2@ej0se>n)@4e}``te4A34{ia1Vg1jEDQ(@`PNQ42s9{V8D-k(O6Es*ef=w1a)Vuh z9@;{%A0g;Ufj|onCC0|m0d6GQVs@VbvCcRJ{ty@{Jv_!dlCb5py(Pj=Jk<&`c;+&8 zv-DhWA^Wf7_wS#;V6Muz!r|iNgcu&9qcs2}IFk#-+ohD59xf1b|u;n(us=a4p%2a*KIm-ZSpUEB?SFv%4Jtw*5% zn;WVR+)vTjHU@Nj44U01Xl1{(7d*)KMSdWpqF&ItP*Se9gUf0CgWpPaVbf24I060;V{P#d}MFpeCzi8 zXA3oGKbJm}T?`N|F}hWy?B0jSK4Oy5u(^FOuqWd%!<_`z4q}@E_Tdso@YPD!UX_ws z+yM<89UXlBgr~sO^a2x3X~6sw##-&vu~izvSp$EzU?WUW5#R?&Ry?H?30bHd6oS#n z!PEk%=;iSj)$L*$1J6MJ5Wg}vo;7@Q0)y_tgiE;dqt30^^9WLX4L+ZRm;y9jyk-Yl zE&y;c{%%{O@`&wZ_Vg<_%V3G>KlYhLOB`BcX56170tl`T34kmVvXxRkSsqFeurBHq z#CjZwarOVq62vX1oYm>t;b6+tJSl^A0J|{=lM1m`*_GO*(SWq2@&kI2PAtfr=0?yD z**yaNoW@MC5YBU(yeQ~b$U=0)F_Lb-kol*@@Vw7EBUQ|A_;$?Jq%CZ5)8BMW#ZLOp zTcA1kcEXm!Ns3WhW%Q|0D<`I*+WPzC3ozIbf85D8igy}J5(MMh{Bl%6u3jY!JO+Yh zoch`iWm84T#rj`I32u#J?e=Q^pyq4azmNtCK236}iNk|U8!oTAW(LVLg3;V{1iC>< zEI`3B0p3m?2@+Me?qjhFnwosIY8g9^?|6V%uoef0&1S9LO+WLDFBktL;%T(q?pSQl+R2jFDm;PfIG3aYnLYD*4@UZ41s6lYnYM@}gIe*b zNoq$C!Pu{6^B6-odNkR*fFfC(LPtO)`&*;i1Mr&kdt&R39oi;;gQhQ|lQD91c240x z1;<%hkPQZUoGQsXvyl@Tj!e1J)#xLl%zCt)fcZYV(jtksgKggJV*ZFG1*0nL@(PYa zBG$ZFo7e;?0&vh#xA?!n=^qbVE@s1sg;h@%i@a@XKfOGklUg9;h2*cd^z)1eTn-t4tvfxXg%A2JBFfOfpgPB2r++FACrJ~= zN6$F0a7vvxTfqn8@qUK(wzVGBjsTbfZHBm=P~r8Fv9T<%@AGwd*v`)Opv4DGA&neUn1CSU~aJ zivn;#HA6$wTWWU%pQ?RcT*nkedU!Qamt2OZI}%nQm{j3jEhp^jmpv8Jzo88Sq!)bH zY6L$KC!30ZSAbju{zf12pHrZVn8PxlJR^Q#1@%ll zvi+%c62KhU)sBY_j<6753Q!?-rzq4UL0%`aT0hrJ1W2n@o0OLO}1&~nEpynqulK+T{4yP=S=x=D#k;U;P zj%@WougVc5Q0fmg3g6C~)NNc`&sQ$rhU~8!Gyg8cL-ChU$_5@1T{?U=rpBG1@6q!! z^qAEiT%O#_y3+XY{VpXxN|{-wD7&=?HSQ}e`YypgLRcwAS@`kAfs(?M_S7IBz=jBGQ_#~m? zR(yroU$@W>om=f5JFHV`Ag`brt#+8u81$3x_C%{>zTA~-VDKO2s1tzobk`tvhKLk( zh}eQ`XwXrAPZ_GKtHaU+f(&3n_%!wu&rDu$Fdk5NRgQ^R&|)!&^TZze_6hr`ngHe<(-YzH#{#VkwG5PF zgw_gd8kMhvO&Ufc7G&$r{IxjgEA0&008MxxJNzUTt(s6=3kuaP4~#fApke_Z!NMno0`%eraummMX;aKVp@3++3>mXeed zlX&DcR%qb$Y3t}5Udv-z!BmGoWI0h>)ZvA(p{cn!#QXbawC&yXeSPD}GyP{yM5UZ^ zcdz)!$Y+Ba|Byq}*p+*NQQ<#kN&{AaAFWP-OEhd{f7jLy@Ah0-*=4|kDZ z8e(_+{CQ55wNBH0eXNlDc^Jl342$79V9nME%c9C^)8i9jy>FZDOv;Ju*fsSmrLH_Z zl|o^t&`>>W?) ze^*x*#!ZuH`6=_jeUKVdO~KEry}V=EW%9P2rR@yhyy{v#q3q6%=cg4NN{WiAre+@& zcXr&~G?6ga)5CqJC!=Ksb|4f=ZPf1Df@K*`FL|vMFA^2>30ZAKUZdVJr=_J4!32+`THcY1R@(_4s?RIeuT<63>3Tv^0?bD}|PNS#=;QqqlP+7|(E+w`5 z6qj#1!}Qvge}4(jr;q656)5Ay-&Z0{ILef?Mmn?E7vii(QbJM2)qfBgBqA4k|f z+=E|zzKl2RkunOh`ZE0XEerSHufmazX9c;-$fhWDo~x(R29Y%&uAop;^lBmO z{n94$?zg|Q6!-6sZF4-0ByH?oKknqDwjtl!zH6;M6agxVx73k!PTWEsvh#}0Bch*S z!8Wt90!1*ImC5S>Q<6v)PLz#XZR6I|@@U^u5nVz1uT2Z*tm{I=L z)z0ql)*39uaXoda1*4>OfCpYN^*6RRiDDf6vHVpK8+(Bpl{pO_7kpSO8llMh^OT*w z3WB-n8!WE?N^RX{mH<&r?7mVVq%ZT@9{=Aj-nohf=E7yQbr?IA=_6S2HQMT}{P@Ai jf5bHLwf`?ac+J*0@W;;tuU*L${GW!Ju4=K$@hkriO{7Ng diff --git a/doc/figures/zh-cn_image_0000001617393174.png b/doc/figures/zh-cn_image_0000001617393174.png deleted file mode 100644 index 739a1cb4ff6ecdb4d2a4e67c77871dd25daadfc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16834 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 E0NkvhB>(^b diff --git a/doc/figures/zh-cn_image_0000001658655445.png b/doc/figures/zh-cn_image_0000001658655445.png deleted file mode 100644 index 4c01b6d9ec9f718768815ef282dfe995509bd351..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32131 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⁣df|S@$|N` v%Z?4(-9IHYO}6;A4>WDoID0mvRd2eD%eyY diff --git a/doc/figures/zh-cn_image_0000001664546481.png b/doc/figures/zh-cn_image_0000001664546481.png deleted file mode 100644 index 6e383ed2c18d97d420bd8a057910e9a747db5d85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10339 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 W1t7S0GvzEPbT_ diff --git a/doc/figures/zh-cn_image_0000001665513149.png b/doc/figures/zh-cn_image_0000001665513149.png deleted file mode 100644 index 00230be6617822ae5fa1bf3218be7f4f4888c3cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14110 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

-NHHl6*hG)RYiGu5>8IMU<0)X8|dhSfTuM% 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 VSKh)7zW0WB@>oTtSjx!%{{i%uQ%3** diff --git a/doc/figures/zh-cn_image_0000001665553957.png b/doc/figures/zh-cn_image_0000001665553957.png deleted file mode 100644 index 23685e015de39f78aff0ff747ec4908a75f21e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66898 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

~%b04a(FsBTkrb6wp4NCrlUzTF!|}>ZlIA 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 Eg6*goLI3~& diff --git a/doc/figures/zh-cn_image_0000001665793709.png b/doc/figures/zh-cn_image_0000001665793709.png deleted file mode 100644 index 6511f95354d114df16f4c4871ff78e508adbb203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3746 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 kTUDmWE&pN({3Jn%C$vNXK6+vWV<0Bw%VAOHXW diff --git a/doc/figures/zh-cn_image_2023072902.png b/doc/figures/zh-cn_image_2023072902.png deleted file mode 100644 index 2ddd83b5d3f695c7db10f4ff8503af570f19b12c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6446 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 diff --git a/doc/figures/zh-cn_image_2023072904.PNG b/doc/figures/zh-cn_image_2023072904.PNG deleted file mode 100644 index 49d6c2a5ca2f802f942589677d47e76493509932..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8117 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 diff --git a/doc/figures/zh-cn_image_2023072905.PNG b/doc/figures/zh-cn_image_2023072905.PNG deleted file mode 100644 index 31ea0da1431401157e90e18cd2419bc7524e84ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6483 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 BJ`ex^ diff --git a/doc/figures/zh-cn_image_2023072906.PNG b/doc/figures/zh-cn_image_2023072906.PNG deleted file mode 100644 index 1c937421c10ebcc6c58f5769b9cda94e9789f8a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11526 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 diff --git a/doc/figures/zh-cn_image_202307291.png b/doc/figures/zh-cn_image_202307291.png deleted file mode 100644 index 9b1e6b767f37c3f3c816dbe4a8aeca1468b065e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4263 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 U)lUP(xMTqIwDDRM8V=$A2O=He!vFvP diff --git a/doc/public_sys-resources/icon-caution.gif b/doc/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 diff --git a/doc/public_sys-resources/icon-danger.gif b/doc/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 diff --git a/doc/public_sys-resources/icon-note.gif b/doc/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmZ?wbhEHblx7fPSjxcg=ii?@_wH=jwxy=7CMGH-B`L+l$wfv=#>UF#$gv|VY%C^b zCQFtrnKN(Bo_%|sJbO}7RAORe!otL&qo<>yq_Sq+8Xqqo5h0P3w3Lvb5E(g{p01vl zxR@)KuDH0l^z`+-dH3eaw=XqSH7aTIx{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|> diff --git a/doc/public_sys-resources/icon-notice.gif b/doc/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk6Nk%w1VIu$@0J8u9|NsB@_xJDb@8;&_*4Ea}&d#;9wWXz{jEszHYim+c zQaU<1At50E0000000000A^8Le000gEEC2ui03!e%000R7038S%NU)&51O^i-Tu6`s z0)`MFE@;3YqD6xSC^kTNu_J>91{PH8XfZ(p1pp2-SU@u3#{mEUC}_}tg3+I#{z}{Ok@D_ZUDg- zt0stin4;pC8M{WLSlRH*1pzqEw1}3oOskyNN?j;7HD{BBZ*OEcv4HK!6Bk6beR+04 z&8}k>SkTusVTDmkyOz#5fCA$JTPGJVQvr3uZ?QzzPQFvD0rGf_PdrcF`pMs}p^BcF zKtKTd`0wipR%nKN&Wj+V}pX;WC3SdJV!a_8Qi zE7z`U*|Y^H0^}fB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 diff --git a/doc/ts-composite-components-arkdialog.md b/doc/ts-composite-components-arkdialog.md deleted file mode 100644 index 791271f..0000000 --- a/doc/ts-composite-components-arkdialog.md +++ /dev/null @@ -1,414 +0,0 @@ -# Dialog - - -弹出框是一种模态窗口,通常用于在保持当前的上下文环境时,临时展示用户需关注的信息或待处理的操作,用户在模态弹出框内完成上述交互任务。模态弹出框需要用户进行交互才能够退出模态模式。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { TipsDialog, SelectDialog, ConfirmDialog, AlertDialog, LoadingDialog } from '@ohos.arkui.advanced.Dialog' -``` - - -## 子组件 - -无 - - -## TipsDialog - - -TipsDialog({controller: CustomDialogController, imageRes: Resource, imageSize: SizeOptions, title: ResourceStr, content?: ResourceStr, checkTips?: ResourceStr, ischecked?: boolean, primaryButton?: ButtonOptions, secondaryButton?: ButtonOptions}) - - -提示弹出框,即为带图形确认框,必要时可通过图形化方式展现确认框。 - - -**装饰器类型:**\@CustomDialog - - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - - -**参数:** - - -| 参数名 | 参数类型 | 必填 | 装饰器类型 | 描述 | -| -------- | -------- | -------- | -------- | -------- | -| controller | [CustomDialogController](https://docs.openharmony.cn/pages/v3.2/en/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md/) | 是 | - | 提示弹出框控制器。 | -| imageRes | [Resource](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resource) | 是 | - | 展示的图片。 | -| imageSize | [SizeOptions](https://docs.openharmony.cn/pages/v4.0/en/application-dev/reference/arkui-ts/ts-types.md/#sizeoptions) | 是 | - | 自定义图片尺寸。 | -| title | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | - | 提示弹出框标题。 | -| content | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | - | 提示弹出框内容。 | -| checkTips | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | - | checkbox的提示内容。 | -| isChecked | boolean | 否 | \@Prop | value为true时,表示checkbox已选中,value为false时,表示未选中。
默认值:false。 | -| primaryButton | [ButtonOptions](#buttonoptions) | 否 | - | 提示框左侧按钮。 | -| secondaryButton | [ButtonOptions](#buttonoptions) | 否 | - | 提示框右侧按钮。 | - - -## SelectDialog - -SelectDialog({controller: CustomDialogController, title: ResourceStr, content?: ResourceStr, selectedIndex?: number, confirm?: ButtonOptions, radioContent?: Array<SheetInfo>}) - -选择类弹出框,弹框中以列表或网格的形式提供可选的的内容。 - -**装饰器类型:**\@CustomDialog - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必填 | 描述 | -| -------- | -------- | -------- | -------- | -| controller | CustomDialogController | 是 | 选择弹出框控制器。 | -| title | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 选择弹出框标题。 | -| content | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 选择弹出框内容。 | -| selectedIndex | number | 否 | 选择弹出框的选中项。 | -| confirm | boolean | 否 | 确认按钮。 | -| radioContent | Array<[SheetInfo](https://docs.openharmony.cn/pages/v3.2/en/application-dev/reference/arkui-ts/ts-methods-action-sheet.md/)> | 否 | 选择弹出框的子项内容列表,每个选择项支持设置图片、文本和选中的回调事件。 | - - -## ConfirmDialog - -ConfirmDialog({controller: CustomDialogController, title: ResourceStr, content?: ResourceStr, checkTips?: ResourceStr, ischecked?: boolean, primaryButton?: ButtonOptions, secondaryButton?: ButtonOptions}) - -信息确认类弹出框,操作未正确执行(如网络错误、电池电量过低),或未正确操作时(如指纹录入),反馈的错误或提示信息。 - -**装饰器类型:**\@CustomDialog - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 装饰器类型 | 参数描述 | -| -------- | -------- | -------- | -------- | -------- | -| controller | CustomDialogController | 是 | - | 确认弹出框控制器。 | -| title | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | - | 确认弹出框标题。 | -| content | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | - | 确认弹出框内容。 | -| checkTips | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | - | checkbox的提示内容。 | -| isChecked | boolean | 否 | \@Prop | value为true时,表示checkbox已选中,value为false时,表示未选中。
默认值:false。 | -| primaryButton | [ButtonOptions](#buttonoptions) | 否 | - | 确认框左侧按钮。 | -| secondaryButton | [ButtonOptions](#buttonoptions) | 否 | - | 确认框右侧按钮。 | - - -## AlertDialog - -AlertDialog({controller: CustomDialogController, content?: ResourceStr, primaryButton?: ButtonOptions, secondaryButton?: ButtonOptions}) - -操作确认类弹出框,触发一个将产生严重后果的不可逆操作时,如删除、重置、取消编辑、停止等。 - -**装饰器类型:**\@CustomDialog - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 参数描述 | -| -------- | -------- | -------- | -------- | -| controller | CustomDialogController | 是 | 确认弹出框控制器。 | -| content | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 确认弹出框内容。 | -| primaryButton | [ButtonOptions](#buttonoptions) | 否 | 确认框左侧按钮。 | -| secondaryButton | [ButtonOptions](#buttonoptions) | 否 | 确认框右侧按钮。 | - - -## LoadingDialog - -LoadingDialog({controller: CustomDialogController, content?: ResourceStr}) - -**参数:** - -| 参数名 | 参数类型 | 必选 | 参数描述 | -| -------- | -------- | -------- | -------- | -| controller | CustomDialogController | 是 | 加载弹出框控制器。 | -| content | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 加载弹出框内容。 | - - -## ButtonOptions - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -| 名称 | 类型 | 必填 | 描述 | -| -------- | -------- | -------- | -------- | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 按钮的内容。 | -| action | () => void | 否 | 按钮的点击事件。 | -| background | [ResourceColor](https://docs.openharmony.cn/pages/v3.2/en/application-dev/reference/arkui-ts/ts-types.md/#resourcecolor) | 否 | 按钮的背景。 | -| fontColor | [ResourceColor](https://docs.openharmony.cn/pages/v3.2/en/application-dev/reference/arkui-ts/ts-types.md/#resourcecolor) | 否 | 按钮的字体颜色。 | - - -## 示例 - - -### 示例1 - -``` -import { TipsDialog } from '@ohos.arkui.advanced.Dialog' -@Entry -@Component -struct Index { - radioIndex = 0; - isChecked = false; - dialogControllerImage: CustomDialogController = new CustomDialogController({ - builder: TipsDialog({ - imageRes: $r('app.media.icon'), - title: '文本标题', - content: '文本文本文本文本文本文本文本文本文本', - isChecked: this.isChecked, - checkTips: '不再提示', - primaryButton: { - value: '取消', - action: () => { - console.info('Callback when the CheckBox is clicked') - }, - }, - secondaryButton: { - value: '确定', - action: () => { - console.info('Callback when the second button is clicked') - } - }, - }), - autoCancel: true, - customStyle: true, - alignment: DialogAlignment.Bottom - }) - - build() { - Row() { - Stack() { - Column(){ - Button("上图下文弹出框") - .width(96) - .height(40) - .onClick(() => { - this.dialogControllerImage.open() - }) - }.margin({bottom: 300}) - }.align(Alignment.Bottom) - .width('100%').height('100%') - } - .backgroundImageSize({ width: '100%', height: '100%' }) - .height('100%') - } -} -``` - -![20230728-111325](figures/20230728-111325.png) - - -### 示例2 - -``` -import { SelectDialog } from '@ohos.arkui.advanced.Dialog' -@Entry -@Component -struct Index { - radioIndex = 0; - isChecked = false; -dialogControllerList: CustomDialogController = new CustomDialogController({ - builder: SelectDialog({ - title: '文本标题', - selectedIndex: this.radioIndex, - confirm: { - value: '取消', - action: () => null, - }, - radioContent: [ - { - title: '文本文本文本文本文本', - action: () => { - this.radioIndex = 0 - } - }, - { - title: '文本文本文本文本', - action: () => { - this.radioIndex = 1 - } - }, - { - title: '文本文本文本文本', - action: () => { - this.radioIndex = 2 - } - }, - ] - }), - customStyle: true, - alignment: DialogAlignment.Bottom, - autoCancel: false -}) - - build() { - Row() { - Stack() { - Column(){ - Button("纯列表弹出框") - .width(96) - .height(40) - .onClick(() => { - this.dialogControllerList.open() - }) - }.margin({bottom: 300}) - }.align(Alignment.Bottom) - .width('100%').height('100%') - } - .backgroundImageSize({ width: '100%', height: '100%' }) - .height('100%') - } -} -``` - -![20230728-101201](figures/20230728-101201.png) - - -### 示例3 - -``` -import { ConfirmDialog } from '@ohos.arkui.advanced.Dialog' -@Entry -@Component -struct Index { - radioIndex = 0; - isChecked = false; -dialogControllerCheckBox: CustomDialogController = new CustomDialogController({ - builder: CheckBoxDialog({ - title: '文本标题', - content: '文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本', - isChecked: this.isChecked, - checkTips: '禁止后不再提示', - primaryButton: { - value: '禁止', - action: () => null, - }, - secondaryButton: { - value: '允许', - action: () => { - this.isChecked = false - console.info('Callback when the second button is clicked') - } - }, - }), - autoCancel: true, - customStyle: true, - alignment: DialogAlignment.Bottom -}) - - build() { - Row() { - Stack() { - Column(){ - Button("文本+勾选弹出框") - .width(96) - .height(40) - .onClick(() => { - this.dialogControllerCheckBox.open() - }) - }.margin({bottom: 300}) - }.align(Alignment.Bottom) - .width('100%').height('100%') - } - .backgroundImageSize({ width: '100%', height: '100%' }) - .height('100%') - } -} -``` - -![20230728-101236](figures/20230728-101236.png) - - -### 示例4 - -``` -import { AlertDialog } from '@ohos.arkui.advanced.Dialog' -@Entry -@Component -struct Index { - radioIndex = 0; - isChecked = false; -dialogControllerConfirm: CustomDialogController = new CustomDialogController({ - builder: AlertDialog({ - content: '文本文本文本文本文本', - primaryButton: { - value: '取消', - action: () => null, - }, - secondaryButton: { - value: '确认', - fontColor: $r('sys.color.ohos_id_color_warning'), - action: () => { - console.info('Callback when the second button is clicked') - } - }, - }), - autoCancel: true, - customStyle: true, - alignment: DialogAlignment.Bottom -}) - - build() { - Row() { - Stack() { - Column(){ - Button("纯文本弹出框") - .width(96) - .height(40) - .onClick(() => { - this.dialogControllerConfirm.open() - }) - }.margin({bottom: 300}) - }.align(Alignment.Bottom) - .width('100%').height('100%') - } - .backgroundImageSize({ width: '100%', height: '100%' }) - .height('100%') - } -} -``` - -![20230728-101355](figures/20230728-101355.png) - - -### 示例5 - -``` -import { LoadingDialog } from '@ohos.arkui.advanced.Dialog' -@Entry -@Component -struct Index { - radioIndex = 0; - isChecked = false; -dialogControllerProgress: CustomDialogController = new CustomDialogController({ - builder: ProgressDialog({ - content: '文本文本文本文本文本...', - }), - autoCancel: true, - customStyle: true, - alignment: DialogAlignment.Bottom -}) - - build() { - Row() { - Stack() { - Column(){ - Button("进度条弹出框") - .width(96) - .height(40) - .onClick(() => { - this.dialogControllerProgress.open() - }) - }.margin({bottom: 300}) - }.align(Alignment.Bottom) - .width('100%').height('100%') - } - .backgroundImageSize({ width: '100%', height: '100%' }) - .height('100%') - } -} -``` - -![20230728-101306](figures/20230728-101306.png) diff --git a/doc/ts-composite-components-composelistitem.md b/doc/ts-composite-components-composelistitem.md deleted file mode 100644 index 17aa3d6..0000000 --- a/doc/ts-composite-components-composelistitem.md +++ /dev/null @@ -1,240 +0,0 @@ -# ComposeListItem - - -列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { ComposeListItem } from "@ohos.arkui.advanced.ComposeListItem" -``` - - -## 子组件 - -无 - - -## 接口 - -ComposeListItem({contentItem?: ContentItem, operateItem?: OperateItem}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - - -**参数:** - - -| 参数名 | 参数类型 | 必填 | 装饰器类型 | 参数描述 | -| -------- | -------- | -------- | -------- | -------- | -| contentItem | [ContentItem](#contentitem) | 否 | \@Prop | 定义左侧以及中间元素。 | -| operateItem | [OperateItem](#operateitem) | 否 | \@Prop | 定义右侧元素。 | - - -## ContentItem - -| 名称 | 值 | 必填 | 描述 | -| -------- | -------- | -------- | -------- | -| iconStyle | [IconType](#icontype枚举说明) | 否 | 左侧元素-图标样式。 | -| icon | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 左侧元素-图标。 | -| primaryText | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 中间元素-标题内容。 | -| secondaryText | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 中间元素-副标题内容。 | -| description | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 中间元素-描述内容。 | - - -## IconType枚举说明 - -| 名称 | 描述 | -| -------- | -------- | -| BADGE | 左侧图标为badge类型,图标大小为8\*8dp。 | -| NORMAL_ICON | 左侧图标为小图标类型,图标大小为16\*16dp。 | -| SYSTEM_ICON | 左侧图标为系统图标类型,图标大小为24\*24dp。 | -| HEAD_SCULPTURE | 左侧图标为头像类型,图标大小为40\*40dp。 | -| APP_ICON | 左侧图标为应用图标类型,图标大小为64\*64dp。 | -| PREVIEW | 左侧图标为预览图类型,图标大小为96\*96dp。 | -| LONGITUDINAL | 左侧图标为横向特殊比例(宽比高大),保持最长边为96dp。 | -| VERTICAL | 左侧图标为竖向特殊比例(高比宽大),保持最长边为96dp。 | - - -## OperateItem - -| 名称 | 值 | 必填 | 描述 | -| -------- | -------- | -------- | -------- | -| arrow | [OperateIcon](#operateicon) | 否 | 右侧元素-箭头,大小为12\*24dp。 | -| icon | [OperateIcon](#operateicon) | 否 | 右侧元素-第一个图标,大小为24\*24dp。 | -| subIcon | [OperateIcon](#operateicon) | 否 | 右侧元素-第二个图标,大小为24\*24dp。 | -| button | [OperateButton](#operatebutton) | 否 | 右侧元素-按钮。 | -| switch | [OperateCheck](https://gitee.com/openharmony-sig/arkui_advanced_ui_component/blob/master/doc/ts-composite-components-composelistitem.md#switchcheckboxradio-operatecheck) | 否 | 右侧元素-开关。 | -| checkbox | [OperateCheck](https://gitee.com/openharmony-sig/arkui_advanced_ui_component/blob/master/doc/ts-composite-components-composelistitem.md#switchcheckboxradio-operatecheck) | 否 | 右侧元素-多选框,大小为24\*24dp。 | -| radio | [OperateCheck](https://gitee.com/openharmony-sig/arkui_advanced_ui_component/blob/master/doc/ts-composite-components-composelistitem.md#switchcheckboxradio-operatecheck) | 否 | 右侧元素-单选,大小为24\*24dp。 | -| image | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 右侧元素-图片,大小为48\*48dp。 | -| text | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 右侧元素-文字。 | - - -## OperateIcon - -| 名称 | 值 | 必填 | 描述 | -| -------- | -------- | -------- | -------- | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 右侧元素-图标/箭头。 | -| action | ()=>void | 否 | 右侧元素-图标/箭头点击事件。 | - - -## OperateButton - -| 名称 | 值 | 必填 | 描述 | -| -------- | -------- | -------- | -------- | -| text | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 右侧元素-按钮文字。 | - - -## Switch/CheckBox/Radio-OperateCheck - -| 名称 | 值 | 必填 | 描述 | -| -------- | -------- | -------- | -------- | -| isCheck | boolean | 否 | 右侧元素-右侧Switch/CheckBox/Radio选中状态。 | -| onChange | (value: boolean)=>void | 否 | 右侧元素-右侧Switch/CheckBox/Radio选中状态改变时触发回调。 | - - -## 示例1-纯文本 - -```ts -import { ComposeListItem } from '@ohos.arkui.advanced.ComposeListItem'; -import { ContentItem } from '@ohos.arkui.advanced.ComposeListItem'; - -@Entry -@Component -struct ComposeListItemExample { - build() { - Column() { - List() { - ListItem(){ - ComposeListItem({ - contentItem: ({ - primaryText: '单行列表' - }) - }) - } - } - } - } -} -``` - - -![示例1-纯文本](figures/zh-cn_image_2023072903.PNG) - - -## 示例2-左侧元素+文本 - -```ts -import { ComposeListItem } from '@ohos.arkui.advanced.ComposeListItem'; -import { IconType } from '@ohos.arkui.advanced.ComposeListItem'; -import { ContentItem } from '@ohos.arkui.advanced.ComposeListItem'; - -@Entry -@Component -struct ComposeListItemExample { - build() { - Column() { - List() { - ListItem(){ - ComposeListItem({ - contentItem: ({ - iconStyle: IconType.NORMAL_ICON, - icon: $r('sys.media.ohos_app_icon'), - primaryText: '双行列表', - secondaryText: '辅助文字' - }) - }) - } - } - } - } -} -``` - - -![示例2-左侧元素+文本](figures/zh-cn_image_2023072904.PNG) - - -## 示例3-右侧元素 - -```ts -import { ComposeListItem } from '@ohos.arkui.advanced.ComposeListItem'; -import { OperateItem } from '@ohos.arkui.advanced.ComposeListItem'; -import promptAction from '@ohos.promptAction' - -@Entry -@Component -struct ComposeListItemExample { - build() { - Column() { - List() { - ListItem() { - ComposeListItem({ - operateItem: ({ - icon: { - value: $r('sys.media.ohos_app_icon'), - action: () => { - promptAction.showToast({ message: 'icon' }) - } - }, - text: '右侧文本' - }) - }) - } - } - } - } -} -``` - - -![示例3-右侧元素](figures/zh-cn_image_2023072905.PNG) - - -## 示例4-左右元素+文本 - -```ts -import { ComposeListItem } from '@ohos.arkui.advanced.ComposeListItem'; -import { IconType } from '@ohos.arkui.advanced.ComposeListItem'; -import { ContentItem } from '@ohos.arkui.advanced.ComposeListItem'; -import { OperateItem } from '@ohos.arkui.advanced.ComposeListItem'; -import promptAction from '@ohos.promptAction' - -@Entry -@Component -struct ComposeListItemExample { - build() { - Column() { - List() { - ListItem() { - ComposeListItem({ - contentItem: ({ - iconStyle: IconType.NORMAL_ICON, - icon: $r('sys.media.ohos_app_icon'), - primaryText: '双行列表', - secondaryText: '辅助文字' - }), - operateItem: ({ - icon: { - value: $r('sys.media.ohos_app_icon'), - action: () => { - promptAction.showToast({ message: 'icon' }) - } }, - text: '右侧文本' - }) - }) - } - } - } - } -``` - -![示例4-左右元素+文本](figures/zh-cn_image_2023072906.PNG) diff --git a/doc/ts-composite-components-composetitlebar.md b/doc/ts-composite-components-composetitlebar.md deleted file mode 100644 index fd6143f..0000000 --- a/doc/ts-composite-components-composetitlebar.md +++ /dev/null @@ -1,177 +0,0 @@ -# ComposeTitleBar - - -普通型标题栏的一种,支持设置标题、头像(可选)、副标题(可选);可用于一级页面、二级及其以上界面(配置返回键)。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { ComposeTitleBar } from "@ohos.arkui.advanced.ComposeTitleBar" -``` - - -## 子组件 - -无 - - -## 接口 - -ComposeTitleBar({item?: ComposeTitleBarMenuItem, title: ResourceStr, subtitle?: ResourceStr, menuItems?: Array<ComposeTitleBarMenuItem>}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 参数描述 | -| -------- | -------- | -------- | -------- | -| item | [ERROR:Invalid link:zh-cn_topic_0000001617072014.xml#xref1948916525328,link:zh-cn_topic_0000001609264184.xml#section478410410453](zh-cn_topic_0000001609264184.xml#section478410410453) | 否 | 用于左侧头像的单个菜单项目 | -| title | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 标题 | -| subtitle | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 副标题 | -| menuItems | Array<[ERROR:Invalid link:zh-cn_topic_0000001617072014.xml#xref33563123310,link:zh-cn_topic_0000001609264184.xml#section478410410453](zh-cn_topic_0000001609264184.xml#section478410410453)> | 否 | 右侧菜单项目列表 | - - -### ComposeTitleBarMenuItem - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 图标资源 | -| isEnabled | boolean | 是 | 是否启用,默认启用 | -| action | () => void | 否 | 触发时的动作闭包 | - - -## 示例 1 - 单行文本 - -``` -import { ComposeTitleBar } from "@ohos.arkui.advanced.ComposeTitleBar" - -@Entry -@Component -struct Index { - build() { - Row() { - Column() { - ComposeTitleBar({ - title: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦" - }) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001616913438](figures/zh-cn_image_0000001616913438.png) - - -## 示例 2 - 双行文本 - -``` -import { ComposeTitleBar } from "@ohos.arkui.advanced.ComposeTitleBar" - -@Entry -@Component -struct Index { - build() { - Row() { - Column() { - ComposeTitleBar({ - title: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - subtitle: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦" - }) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001665513149](figures/zh-cn_image_0000001665513149.png) - - -## 示例 3 - 双行文本带菜单 - -``` -import { ComposeTitleBar } from "@ohos.arkui.advanced.ComposeTitleBar" -import Prompt from '@system.prompt' - -@Entry -@Component -struct Index { - menuItems: { value: Resource, isEnabled: boolean, action: () => void }[] = - [ { isEnabled: true, value: $r('app.media.ic_public_save'), - action: () => prompt.showToast({ message: "show toast index 1" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_reduce'), - action: () => prompt.showToast({ message: "show toast index 2" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_edit'), - action: () => prompt.showToast({ message: "show toast index 3" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_reduce'), - action: () => prompt.showToast({ message: "show toast index 4" }) - } ] - build() { - Row() { - Column() { - Divider().height(2).color(0xCCCCCC) - ComposeTitleBar({ - title: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - subtitle: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - menuItems: this.menuItems.slice(0, 1), - }) - Divider().height(2).color(0xCCCCCC) - ComposeTitleBar({ - title: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - subtitle: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - menuItems: this.menuItems.slice(0, 2), - }) - Divider().height(2).color(0xCCCCCC) - ComposeTitleBar({ - title: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - subtitle: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - menuItems: this.menuItems, - }) - Divider().height(2).color(0xCCCCCC) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001617233250](figures/zh-cn_image_0000001617233250.png) - - -## 示例 4 - 头像+双行文本带菜单 - -``` -import { ComposeTitleBar } from "@ohos.arkui.advanced.ComposeTitleBar" -import Prompt from '@system.prompt' - -@Entry -@Component -struct Index { - build() { - Row() { - Column() { - ComposeTitleBar({ - menuItems: [ { isEnabled: true, value: $r('app.media.ic_public_save'), - action: () => Prompt.showToast({ message: "show toast index 1" }) - } ], - title: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - subtitle: "啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦", - item: { isEnabled: true, value: $r('app.media.app_icon'), - action: () => Prompt.showToast({message:"show toast index portrait"}) - } }) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001617393174](figures/zh-cn_image_0000001617393174.png) diff --git a/doc/ts-composite-components-editabletitlebar.md b/doc/ts-composite-components-editabletitlebar.md deleted file mode 100644 index f82a255..0000000 --- a/doc/ts-composite-components-editabletitlebar.md +++ /dev/null @@ -1,130 +0,0 @@ -# EditableTitleBar - - -编辑型标题栏,适用于多选界面或者内容的编辑界面,一般采取左叉右勾的形式。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { EditableTitleBar } from "@ohos.arkui.advanced.EditableTitleBar" -``` - - -## 子组件 - -无 - - -## 接口 - -EditableTitleBar({leftIconType: EditableLeftIconType, title: ResourceStr, menuItems?: Array<EditableTitleBarMenuItem>, onSave?: () => void, onCancel?: () =>void}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 参数描述 | -| -------- | -------- | -------- | -------- | -| leftIconStyle | [ERROR:Invalid link:zh-cn_topic_0000001665632009.xml#xref19441410133613,link:zh-cn_topic_0000001658583341.xml#section1340683083317](zh-cn_topic_0000001658583341.xml#section1340683083317) | 是 | 左侧按钮类型 | -| title | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 标题 | -| menuItems | Array<[ERROR:Invalid link:zh-cn_topic_0000001665632009.xml#xref81499144365,link:zh-cn_topic_0000001658583341.xml#section1287821819325](zh-cn_topic_0000001658583341.xml#section1287821819325)> | 否 | 右侧菜单项目列表 | -| onSave | () => void | 否 | 保存时的动作闭包 | -| onCancel | () => void | 否 | 当左侧按钮类型为 Left,触发取消时的动作闭包 | - - -### EditableLeftIconType - -| 名称 | 描述 | -| -------- | -------- | -| Back | 返回按钮 | -| Cancel | 取消按钮 | - - -### EditableTitleBarMenuItem - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 图标资源 | -| isEnabled | boolean | 是 | 是否启用,默认启用 | -| action | () => void | 否 | 触发时的动作闭包 | - - -## 示例 1 - -``` -import { EditableLeftIconType } from "@ohos.arkui.advanced.EditableTitleBar" -import { EditableTitleBar } from "@ohos.arkui.advanced.EditableTitleBar" -import Prompt from '@system.prompt' - -@Entry -@Component -struct Index { - build() { - Row() { - Column() { - EditableTitleBar({ - leftIconStyle: EditableLeftIconType.Cancel, - title: "编辑页面", - menuItems: [], - onCancel: () => { - Prompt.showToast({ message: "on cancel" }) - }, - onSave: () => { - Prompt.showToast({ message: "on save" }) - } - }) - }.width('100%') - }.height('100%') - } -} -``` - - -![zh-cn_image_0000001617073302](figures/zh-cn_image_0000001617073302.png) - - -## 示例 2 - -``` -import { EditableLeftIconType } from "@ohos.arkui.advanced.EditableTitleBar" -import { EditableTitleBar } from "@ohos.arkui.advanced.EditableTitleBar" -import Prompt from '@system.prompt' - -@Entry -@Component -struct Index { - build() { - Row() { - Column() { - EditableTitleBar({ - leftIconStyle: EditableLeftIconType.Back, - title: "编辑页面", - menuItems: [ - { value: $r('app.media.ic_public_reduce'), - isEnabled: false, - action: () => { - Prompt.showToast({ message: "show toast index 2" }) - } - } - ], - onCancel: () => { - Prompt.showToast({ message: "on cancel" }) - }, - onSave: () => { - Prompt.showToast({ message: "on save" }) - } - }) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001665393297](figures/zh-cn_image_0000001665393297.png) diff --git a/doc/ts-composite-components-filter.md b/doc/ts-composite-components-filter.md deleted file mode 100644 index f6118c8..0000000 --- a/doc/ts-composite-components-filter.md +++ /dev/null @@ -1,119 +0,0 @@ -# Filter - - -多条件筛选,帮助用户在大量信息中找到所需内容,应结合具体场景选择合适筛选方式。多条件筛选控件由筛选器与悬浮条构成,悬浮条可下拉展示悬浮筛选器。筛选器样式可分为多行可折叠类型与多行列表类型,并可以在筛选器最后一行附加快捷筛选器。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { Filter } from '@ohos.arkui.advanced.Filter' -``` - - -## 子组件 - -无 - - -## Filter - -Filter({ multiFilters: Array<FilterParams>, additionFilters: FilterParams, filterType: FilterType, onFilterChanged: (Array<FilterResult>) => void }) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - - -| 参数名 | 参数类型 | 必选 | 装饰器类型 | 参数描述 | -| -------- | -------- | -------- | -------- | -------- | -| multiFilters | Array<[FilterParams](#filterparams)> | 是 | \@Prop | 多条件筛选列表。 | -| additionFilters | [FilterParams](#filterparams) | 否 | \@Prop | 附加快捷筛选项。 | -| filterType | [FilterType](#filtertype) | 否 | \@Prop | 筛选器的样式类型。 | -| onFilterChanged | (Array<[FilterResult](#filterresult)>) => void | 是 | \@Prop | 用户点击后的回调事件。回调函数的参数为选中的筛选项结果列表。 | -| container | ()=>void | 否 | \@BuilderParam | 筛选结果展示区域自定义内容,通过尾随闭包形式传入。 | - - -## FilterParams - -| 名称 | 值 | 是否必选 | 描述 | -| -------- | -------- | -------- | -------- | -| name | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 筛选项维度名称。 | -| options | Array<[ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr)> | 是 | 筛选项维度可选项列表。 | - - -## FilterType - -| 参数名 | 描述 | -| -------- | -------- | -| MULTI_LINE_FILTER | 多行可折叠类型筛选器。 | -| LIST_FILTER | 多行列表类型筛选器。 | - - -## FilterResult - -| 名称 | 值 | 是否必选 | 描述 | -| -------- | -------- | -------- | -------- | -| name | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 筛选项维度名称。 | -| index | number | 是 | 该维度筛选项选中项目的索引值。
默认值:-1 | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 该维度筛选项选中项目的值。
默认值:"" | - - -## 示例 - -多行可折叠Filter:内容区可完全自定义。 - -``` -import { Filter, FilterParams, FilterResult, FilterType } from '@ohos.arkui.advanced.Filter' - -@Entry -@Component -struct Index { - private filterParam: Array = [{name: '月份', options: ['全部','1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']}, - {name: '年份', options: ['全部','2023','2022','2021','2020','2019','2018','2017','2016','2015','2014','2013','2012','2011','2010','2009','2008']}, - {name: '节气', options: ['全部','立春','雨水','惊蛰','春分','清明','谷雨','立夏','小满','芒种','夏至','小暑','大暑','立秋','处暑','白露','秋分','寒露','霜降','立冬','小雪','大雪','冬至','小寒','大寒']}] - private additionParam: FilterParams = { name: '您还可以搜', options: ['运营栏目1','运营栏目2','运营栏目3','运营栏目4','运营栏目5','运营栏目6']} - private arr: number[] = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10]; - build() { - Column() { - Filter({ - multiFilters: this.filterParam, - additionFilters: this.additionParam, - filterType: FilterType.MULTI_LINE_FILTER, - onFilterChanged: (select: Array) => { - console.log('rec filter change') - for (let filter of select) { - console.log('name:' + filter.name + ',index:' + filter.index + ',value:' + filter.value) - } - } - }){ - List({ initialIndex: 0 }) { - ForEach(this.arr, (item, index: number) => { - ListItem() { - Text(item.toString()) - .width("100%") - .height(100) - .fontSize(16) - .textAlign(TextAlign.Center) - .borderRadius(10) - .backgroundColor(Color.White) - .margin({ top:10, bottom: 10 }) - } - }) - }.backgroundColor(Color.Gray) - .padding({ left: 20, right: 20 }) - } - } - .height('100%') - .width('100%') - } -} -``` - -![zh-cn_image_0000001665809293](figures/zh-cn_image_0000001665809293.png) diff --git a/doc/ts-composite-components-progressbutton.md b/doc/ts-composite-components-progressbutton.md deleted file mode 100644 index 171c800..0000000 --- a/doc/ts-composite-components-progressbutton.md +++ /dev/null @@ -1,152 +0,0 @@ -# ProgressButton - - -文本下载按钮,可显示具体下载进度。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { ProgressButton } from '@ohos.arkui.advanced.ProgressButton' -``` - - -## ProgressButton - -ProgressButton({progress: number, content: string, progressButtonWidth?: Length, clickCallback: () => void, enable: boolean}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必填 | 装饰器类型 | 描述 | -| -------- | -------- | -------- | -------- | -------- | -| progress | number | 是 | \@Prop | 下载按钮的当前进度值。 | -| content | string | 是 | | 下载按钮的文本。 | -| progressButtonWidth | Length | 否 | - | 下载按钮的宽度。 | -| clickCallback | void | 是 | | 下载按钮的点击回调。 | -| enable | boolean | 是 | | 下载按钮是否可以点击,
默认为true。 | - - -## 示例 - -``` -import { ProgressButton } from '@ohos.arkui.advanced.ProgressButton' -@Entry -@Component -struct Index { - @State halfProgress: number = 50 - @State smallProgress: number = 8 - @State bigProgress: number = 51 - @State textState1: string = '下载' - @State textState2: string = '下载' - @State textState3: string = '下载' - @State isRunning1: boolean = false - @State isRunning2: boolean = false - @State isRunning3: boolean = false - @State enableState1: boolean = true - @State enableState2: boolean = true - @State enableState3: boolean = true - build() { - Column({space: 20}) { - Text('6、下载按钮:') - ProgressButton({ - progress: this.halfProgress, - progressButtonWidth: "60", - content: this.textState1, - enable: this.enableState1, - clickCallback: () => { - if (this.textState1 && !this.isRunning1 && this.halfProgress < 100) { - this.textState1 = '继续' - } - this.isRunning1 = !this.isRunning1 - let timer = setInterval(() => { - if (this.isRunning1) { - if (this.halfProgress === 100) { - } else { - this.halfProgress++ - if (this.halfProgress === 100) { - // this.halfProgress = 0 - this.textState1 = '已完成' - this.enableState1 = false - } - console.info('x progress++ = ' + this.halfProgress) - } - } else { - console.info('x isRunning = ' + false) - clearInterval(timer) - } - }, 100) - } - }) - ProgressButton({ - progress: this.smallProgress, - progressButtonWidth: "100", - content: this.textState2, - enable: this.enableState2, - clickCallback: () => { - if (this.textState2 && !this.isRunning2 && this.smallProgress < 100) { - this.textState2 = '继续' - } - this.isRunning2 = !this.isRunning2 - let timer = setInterval(() => { - if (this.isRunning2) { - if (this.smallProgress === 100) { - - } else { - this.smallProgress++ - if (this.smallProgress === 100) { - this.textState2 = '已完成' - this.enableState2 = false - } - console.info('x progress++ = ' + this.smallProgress) - } - } else { - console.info('x isRunning = ' + false) - clearInterval(timer) - } - }, 100) - } - }) - ProgressButton({ - progress: this.bigProgress, - progressButtonWidth: '300', - content: this.textState3, - enable: this.enableState3, - clickCallback: () => { - this.isRunning3 = !this.isRunning3 - if (!this.isRunning3 && this.textState3 && this.bigProgress < 100) { - this.textState3 = '继续' - } - - let timer = setInterval(() => { - if (this.isRunning3) { - if (this.bigProgress === 100) { - } else { - this.bigProgress++ - if (this.bigProgress === 100) { - this.textState3 = '已完成' - this.enableState3 = false - } - console.info('x progress++ = ' + this.bigProgress) - } - } else { - console.info('x isRunning = ' + false) - clearInterval(timer) - } - }, 100) - } - }) - }.alignItems(HorizontalAlign.Center).width('100%') - } -} -``` - - -![zh-cn_image_0000001664713029](figures/zh-cn_image_0000001664713029.png) diff --git a/doc/ts-composite-components-selecttitlebar.md b/doc/ts-composite-components-selecttitlebar.md deleted file mode 100644 index 84af742..0000000 --- a/doc/ts-composite-components-selecttitlebar.md +++ /dev/null @@ -1,186 +0,0 @@ -# SelectTitleBar - - -普通型标题栏的一种,含有一个 Select 控件,可用于页面之间的切换;可用于一级页面、二级及其以上界面(配置返回键)。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { SelectTitleBar } from "@ohos.arkui.advanced.SelectTitleBar" -``` - - -## 子组件 - -无 - - -## 接口 - -SelectTitleBar({selected: number, options: Array<SelectOption>, menuItems?: Array<SelectTitleBarMenuItem>, subtitle?: ResourceStr, badgeValue?: number, hidesBackButton?: boolean, onSelected?: (index: number) => void}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 装饰器类型 | 参数描述 | -| -------- | -------- | -------- | -------- | -------- | -| selected | number | 是 | \@Prop | 当前选中项目的索引 | -| options | Array<SelectOption> | 是 | - | 下拉菜单中的项目 | -| menuItems | Array Prompt.showToast({ message: 'page index ' + index }), - hidesBackButton: true - }) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001665793709](figures/zh-cn_image_0000001665793709.png) - - -## 示例 2 - 二级页面下拉菜单 - -``` -import { SelectTitleBar } from "@ohos.arkui.advanced.SelectTitleBar" -import Prompt from '@system.prompt' - -@Entry -@Component -struct Index { - build() { - Row() { - Column() { - Divider().height(2).color(0xCCCCCC) - SelectTitleBar({ - options: [ - { value: '所有照片' }, - { value: '本地(设备)' }, - { value: '本地本地本地本地本地(储存卡)' } - ], - selected: 0, - onSelected: (index) => Prompt.showToast({ message: 'page index ' + index }), - hidesBackButton: false - }) - Divider().height(2).color(0xCCCCCC) - SelectTitleBar({ - options: [ - { value: '所有照片' }, - { value: '本地(设备)' }, - { value: '本地本地本地本地本地(储存卡)' } - ], - selected: 1, - onSelected: (index) => Prompt.showToast({ message: 'page index ' + index }), - subtitle: "example@openharmony.cn" - }) - Divider().height(2).color(0xCCCCCC) - SelectTitleBar({ - options: [ - { value: '所有照片' }, - { value: '本地(设备)' }, - { value: '本地本地本地本地本地(储存卡)' } - ], - selected: 1, - onSelected: (index) => Prompt.showToast({ message: 'page index ' + index }), - subtitle: "example@openharmony.cn", - menuItems: [ { isEnabled: true, value: $r('app.media.ic_public_save'), - action: () => Prompt.showToast({ message: "show toast index 1" }) - } ] - }) - Divider().height(2).color(0xCCCCCC) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001617439304](figures/zh-cn_image_0000001617439304.png) - - -## 示例 3 - 新事件标记 - -``` -import { SelectTitleBar } from "@ohos.arkui.advanced.SelectTitleBar" -import Prompt from '@system.prompt' - -@Entry -@Component -struct Index { - menuItems: { value: Resource, isEnabled: boolean, action: () => void }[] = - [ { isEnabled: true, value: $r('app.media.ic_public_save'), - action: () => prompt.showToast({ message: "show toast index 1" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_reduce'), - action: () => prompt.showToast({ message: "show toast index 2" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_edit'), - action: () => prompt.showToast({ message: "show toast index 3" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_reduce'), - action: () => prompt.showToast({ message: "show toast index 4" }) - } ] - build() { - Row() { - Column() { - SelectTitleBar({ - options: [ - { value: '所有照片' }, - { value: '本地(设备)' }, - { value: '本地本地本地本地本地(储存卡)' } - ], - selected: 0, - onSelected: (index) => Prompt.showToast({ message: 'page index ' + index }), - subtitle: "example@openharmony.cn", - menuItems: this.menuItems, - badgeValue: 99, - hidesBackButton: true - }) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001616959836](figures/zh-cn_image_0000001616959836.png) diff --git a/doc/ts-composite-components-splitlayout.md b/doc/ts-composite-components-splitlayout.md deleted file mode 100644 index 4206e22..0000000 --- a/doc/ts-composite-components-splitlayout.md +++ /dev/null @@ -1,88 +0,0 @@ -# SplitLayout - - -上下结构布局介绍了常用的页面布局样式。主要分为上下文本和上下图文两种类型。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { SplitLayout } from '@ohos.arkui.advanced.SplitLayout' -``` - - -## 子组件 - -无 - - -## 接口 - -SplitLayout({mainImage: Resource, primaryText: string, secondaryText?: string, tertiaryText?: string}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 参数描述 | -| -------- | -------- | -------- | -------- | -| mainImage | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 传入图片。 | -| primaryText | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 标题内容。 | -| secondaryText | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 副标题内容。 | -| tertiaryText | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 辅助文本。 | -| container | () => void | 否 | 容器内组件。 | - - -## 示例 - -``` -import { SplitLayout } from '@ohos.arkui.advanced.SplitLayout' -@Entry -@Component -struct Index { - @State demoImage: Resource = $r("app.media.music") - @State primaryText: string = "主标题" - @State secondaryText: string = "副标题" - - build() { - Column() { - SplitLayout({ - mainImage: this.demoImage, - primaryText: '新歌推荐', - secondaryText: '私人订制新歌精选站,为你推荐专属优质新歌;', - tertiaryText: "每日更新", - }) { - Text('示例:空白区域容器内可添加组件') - .margin({top:36}) - } - } - .justifyContent(FlexAlign.SpaceBetween) - .height('100%') - .width('100%') - } -} -``` - - -小于600Vp布局: - - -![zh-cn_image_0000001665553957](figures/zh-cn_image_0000001665553957.png) - - -大于600Vp小于840Vp布局: - - -![zh-cn_image_0000001616957408](figures/zh-cn_image_0000001616957408.png) - - -大于840Vp布局: - - -![zh-cn_image_0000001617116972](figures/zh-cn_image_0000001617116972.png) diff --git a/doc/ts-composite-components-subheader.md b/doc/ts-composite-components-subheader.md deleted file mode 100644 index d7b226b..0000000 --- a/doc/ts-composite-components-subheader.md +++ /dev/null @@ -1,168 +0,0 @@ -# SubHeader - - -子标题,用于列表项顶部,将该组列表划分为一个区块,子标题名称用来概括该区块内容;也可以用于内容项顶部,子标题名称用来概括该区块内容。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -```ts -import { SubHeader } from '@ohos.arkui.advanced.SubHeader' -``` - - -## 子组件 - -无 - - -## 接口 - -SubHeader({primaryTitle?: ResourceStr, secondaryTitle?: ResourceStr, icon?: ResourceStr, select?: SelectOptions, operationType?: OperationType, operationItem?: Array<OperationOption>}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - - -**参数:** - - -| 参数名 | 参数类型 | 必填 | 装饰器类型 | 参数描述 | -| -------- | -------- | -------- | -------- | -------- | -| primaryTitle | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | \@Prop | 标题内容。 | -| secondaryTitle | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | \@Prop | 副标题内容。 | -| icon | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | \@Prop | 图标设置项。 | -| select | SelectOptions | 否 | - | select内容以及事件。 | -| operationType | OperationType | 否 | \@Prop | 操作区(右侧)元素样式。
默认值:OperationType.BUTTON | -| operationItem | Array<OperationOption> | 否 | - | 操作区(右侧)的设置项。 | - - -## OperationType枚举说明 - -| 名称 | 描述 | -| -------- | -------- | -| TEXT_ARROW | 文本按钮(带右箭头)。 | -| BUTTON | 文本按钮(不带右箭头)。 | -| ICON_GROUP | 图标按钮(最多支持配置三张图标)。 | -| LOADING | 加载动画。 | - - -## SelectOptions - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| options | Array<[SelectOption](https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-select.md/)> | 是 | 下拉选项内容。 | -| selected | number | 否 | 设置下拉菜单初始选项的索引。
第一项的索引为0。
当不设置selected属性时,
默认选择值为-1,菜单项不选中。 | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 设置下拉按钮本身的文本内容。 | -| onSelect | callback: (index: number, value?: string) => void | 否 | 下拉菜单选中某一项的回调。
- index:选中项的索引。
- value:选中项的值。 | - - -## OperationOption - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 文本内容。 | -| action | ()=>void | 否 | 事件。 | - - -## 示例 - -```ts -import promptAction from '@ohos.promptAction' -import { OperationType, SubHeader } from '@ohos.arkui.advanced.SubHeader' - -@Entry -@Component -struct SubHeaderExample { - build() { - Column() { - SubHeader({ - icon: $r('app.media.ic_public_community_messages'), - primaryTitle: '子标题', - operationType: OperationType.BUTTON, - operationItem: [{ value: '操作', - action: () => { - promptAction.showToast({ message: 'demo' }) - } - }] - }) - } - } -} -``` - -![子标题3](figures/zh-cn_image_202307291.png) - -```ts -import promptAction from '@ohos.promptAction' -import { OperationType, SubHeader } from '@ohos.arkui.advanced.SubHeader' - -@Entry -@Component -struct SubHeaderExample { - build() { - Column() { - SubHeader({ - primaryTitle: '标题', - secondaryTitle: '副文本副文本副文本副文本', - operationType: OperationType.TEXT_ARROW, - operationItem: [{ value: '更多', - action: () => { - promptAction.showToast({ message: 'demo' }) - } - }] - }) - } - } -} -``` - -![zh-cn_image_0000001664546481](figures/zh-cn_image_0000001664546481.png) - -```ts -import promptAction from '@ohos.promptAction' -import { OperationType, SubHeader } from '@ohos.arkui.advanced.SubHeader' - -@Entry -@Component -struct SubHeaderExample { - build() { - Column() { - SubHeader({ - select: { - options: [{ value: 'aaa' }, { value: 'bbb' }, { value: 'ccc' }], - value: 'selectdemo', - selected: 2, - onSelect: (index: number, value?: string) => { - promptAction.showToast({ message: 'demo' }) - } - }, - operationType: OperationType.ICON_GROUP, - operationItem: [{ - value: $r('app.media.ic_public_community_messages'), - action: () => { - promptAction.showToast({ message: 'demo' }) - } - }, { - value: $r('app.media.ic_public_community_messages'), - action: () => { - promptAction.showToast({ message: 'demo' }) - } - }, { - value: $r('app.media.ic_public_community_messages'), - action: () => { - promptAction.showToast({ message: 'demo' }) - } - } - }) - } - } -} -``` - -![子标题5](figures/zh-cn_image_2023072902.png) diff --git a/doc/ts-composite-components-swiperefresher.md b/doc/ts-composite-components-swiperefresher.md deleted file mode 100644 index a8c1616..0000000 --- a/doc/ts-composite-components-swiperefresher.md +++ /dev/null @@ -1,63 +0,0 @@ -# SwipeRefresher - - -内容加载指获取内容并加载出来。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件及其子组件从 API Version 10 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { SwipeRefresher } from '@ohos.arkui.advacned.SwipeRefresher' -``` - - -## 子组件 - -无 - - -## 接口 - -SwipeRefresher ({content: string, isLoading: boolean}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数值 | 参数类型 | 必填 | 装饰器类型 | 参数描述 | -| -------- | -------- | -------- | -------- | -------- | -| content | string | 否 | \@Prop | 内容加载时显示的文本。 | -| isLoading | boolean | 是 | \@Prop | 当前是否正在加载。 | - - -## 示例 - -``` -import { SwipeRefresher } from '@ohos.arkui.advacned.SwipeRefresher'; - -@Entry -@Component -struct Index { - build() { - Column() { - SwipeRefresher({ - content: '正在加载中', - isLoading: true }) - - SwipeRefresher({ - isLoading: true }) - SwipeRefresher({ - content: '正在加载中', - isLoading: false }) - } - } -} -``` - -![Snipaste_2023-07-24_11-35-40](figures/Snipaste_2023-07-24_11-35-40.png) diff --git a/doc/ts-composite-components-tabtitlebar.md b/doc/ts-composite-components-tabtitlebar.md deleted file mode 100644 index e079515..0000000 --- a/doc/ts-composite-components-tabtitlebar.md +++ /dev/null @@ -1,126 +0,0 @@ -# TabTitleBar - - -页签型标题栏,用于页面之间的切换;仅一级页面适用。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { TabTitleBar } from "@ohos.arkui.advanced.TabTitleBar" -``` - - -## 子组件 - -无 - - -## 接口 - -TabTitleBar({tabItems: Array<TabTitleBarTabItem>, menuItems?: Array<TabTitleBarMenuItem>, swiperContent: () => void}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 装饰器类型 | 参数描述 | -| -------- | -------- | -------- | -------- | -------- | -| tabItems | Array<[TabTitleBarTabItem](https://gitee.com/openharmony-sig/arkui_advanced_ui_component/blob/master/doc/ts-composite-components-tabtitlebar.md/#tabtitlebartabitem)> | 是 | - | 左侧页签项目列表,定义标题栏左侧的页签项目。 | -| menuItems | Array<[TabTitleBarMenuItem](https://gitee.com/openharmony-sig/arkui_advanced_ui_component/blob/master/doc/ts-composite-components-tabtitlebar.md/#tabtitlebarmenuitem)> | 否 | - | 右侧菜单项目列表,定义标题栏右侧的菜单项目 | -| swiperContent | () => void | 否 | \@BuilderParam | 页签列表关联的页面内容构造器 | - - -### TabTitleBarMenuItem - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| value | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 图标资源 | -| isEnabled | boolean | 是 | 是否启用 | -| action | () => void | 否 | 触发时的动作闭包 | - - -### TabTitleBarTabItem - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| title | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 文字页签 | -| icon | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 否 | 图片页签资源 | - - -## 示例 - -``` -import { TabTitleBar } from "@ohos.arkui.advanced.TabTitleBar" -import Prompt from '@system.prompt' - -@Entry -@Component -struct Index { - @Builder componentBuilder() { - Text("#1ABC9C\nTURQUOISE") - .fontWeight(FontWeight.Bold) - .fontSize(14) - .width("100%") - .textAlign(TextAlign.Center) - .fontColor("#CCFFFFFF") - .backgroundColor("#1ABC9C") - Text("#16A085\nGREEN SEA") - .fontWeight(FontWeight.Bold) - .fontSize(14) - .width("100%") - .textAlign(TextAlign.Center) - .fontColor("#CCFFFFFF") - .backgroundColor("#16A085") - Text("#2ECC71\nEMERALD") - .fontWeight(FontWeight.Bold) - .fontSize(14) - .width("100%") - .textAlign(TextAlign.Center) - .fontColor("#CCFFFFFF") - .backgroundColor("#2ECC71") - Text("#27AE60\nNEPHRITIS") - .fontWeight(FontWeight.Bold) - .fontSize(14) - .width("100%") - .textAlign(TextAlign.Center) - .fontColor("#CCFFFFFF") - .backgroundColor("#27AE60") - } - private readonly tabItems: { title: ResourceStr, icon?: ResourceStr }[] = - [ { title: "页签1" }, - { title: "页签2" }, - { title: "页签3" }, - { title: "Happy", - icon: $r('app.media.emoji_happy') } ] - private readonly menuItems: { value: Resource, isEnabled: boolean, action: () => void }[] = - [ { isEnabled: true, value: $r('app.media.ic_public_reduce'), - action: () => Prompt.showToast({ message: "on item click! index 0" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_edit'), - action: () => Prompt.showToast({ message: "on item click! index 1" }) - }, - { isEnabled: true, value: $r('app.media.ic_public_save'), - action: () => Prompt.showToast({ message: "on item click! index 2" }) - } ] - build() { - Row() { - Column() { - TabTitleBar({ - swiperContent: this.componentBuilder, - tabItems: this.tabItems, - menuItems: this.menuItems, - }) - }.width('100%') - }.height('100%') - } -} -``` - -![zh-cn_image_0000001616916278](figures/zh-cn_image_0000001616916278.png) diff --git a/doc/ts-composite-components-toolbar.md b/doc/ts-composite-components-toolbar.md deleted file mode 100644 index f460ee9..0000000 --- a/doc/ts-composite-components-toolbar.md +++ /dev/null @@ -1,135 +0,0 @@ -# ToolBar - - -工具栏用于展示针对当前界面内容的操作选项,在界面底部显示。底部最多显示5个入口,超过则收纳入“更多”子项中,在最右侧显示。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { ToolBar, ToolBarOptions } from '@ohos.arkui.advanced.ToolBar' -``` - - -## 子组件 - -无 - - -## 接口 - -Toolbar({toolBarList: ToolBarOptions, activateIndex?: number, controller: TabsController}) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 参数类型 | 必选 | 参数描述 | -| -------- | -------- | -------- | -------- | -| toolBarList | [ToolBarOptions](#toolbaroptions) | 是 | 工具栏列表。 | -| activateIndex | number | 否 | 激活态的子项。
默认值为-1。 | -| controller | [TabsController](https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/reference/arkui-ts/ts-container-tabs.md/#Tabscontroller) | 是 | 筛选器的样式类型。 | - - -## ToolBarOptions - -继承自Array<ToolBarOption> - -**ToolBarOption:** - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| content | [ResourceStr](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resourcestr) | 是 | 工具栏子项的文本。 | -| action | void | 否 | 工具栏子项点击事件。 | -| icon | [Resource](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/arkui-ts/ts-types.md/#resource) | 否 | 工具栏子项的图标。 | -| state | [ItemState](#itemstate) | 否 | 工具栏子项的状态,默认为ENABLE。 | - - -## ItemState - -| 名称 | 描述 | -| -------- | -------- | -| ENABLE | 工具栏子项为正常可点击状态。 | -| DISABLE | 工具栏子项为不可点击状态。 | -| ACTIVATE | 工具栏子项为激活状态,可点击。 | - - -## 示例 - -``` -import { ToolBar, ToolBarOptions } from '@ohos.arkui.advanced.ToolBar' -@Entry -@Component -struct Index { - @State toolbarList: ToolBarOptions = new ToolBarOptions() - aboutToAppear() { - this.toolbarList.push({ text: '剪贴我是超超超超超超超超超长样式', - icon: $r('sys.media.ohos_ic_public_share'), - action: () => { - }, - }) - this.toolbarList.push({ text: '拷贝', - icon: $r('sys.media.ohos_ic_public_copy'), - action: () => { - }, - state:2 - }) - this.toolbarList.push({ text: '粘贴', - icon: $r('sys.media.ohos_ic_public_paste'), - action: () => { - }, - state:3 - }) - this.toolbarList.push({ text: '全选', - icon: $r('sys.media.ohos_ic_public_select_all'), - action: () => { - }, - }) - this.toolbarList.push({ text: '分享', - icon: $r('sys.media.ohos_ic_public_share'), - action: () => { - }, - }) - this.toolbarList.push({ text: '分享', - icon: $r('sys.media.ohos_ic_public_share'), - action: () => { - }, - }) - } - build() { - Row() { - Stack() { - Column(){ - Button("修改减少item") - .width(96) - .height(40) - .onClick(() => { - this.toolbarList.pop() - }) - Button("修改增加item") - .width(96) - .height(40) - .onClick(() => { - this.toolbarList.push(this.toolbarList[1]) - }) - }.margin({bottom: 300}) - Column() { - ToolBar({ - currentIndex: 2, - hwToolBarList: this.toolbarList, - }) - } - }.align(Alignment.Bottom) - .width('100%').height('100%') - } - } -} -``` - -![zh-cn_image_0000001658655445](figures/zh-cn_image_0000001658655445.png) diff --git a/doc/ts-composite-components-treeview.md b/doc/ts-composite-components-treeview.md deleted file mode 100644 index 0a8ddae..0000000 --- a/doc/ts-composite-components-treeview.md +++ /dev/null @@ -1,379 +0,0 @@ -# TreeView - - -树视图作为一种分层显示的列表,适合显示嵌套结构。拥有父列表项和子列表项,可展开或折叠。子列表项支持选中一项或多项。 - - -用于效率型应用,如备忘录、电子邮件、图库中的侧边导航栏中。 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -## 导入模块 - -``` -import { TreeView } from "@ohos.arkui.advanced.TreeView" -``` - - -## 子组件 - -无 - - -## 接口 - -TreeView({ treeController: TreeController }) - -**装饰器类型:**\@Component - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - - -**参数:** - - -| 参数名 | 参数类型 | 必填 | 参数描述 | -| -------- | -------- | -------- | -------- | -| treeController | [TreeController](#treecontroller) | 是 | 树视图节点信息。 | - - -## TreeController - -树视图组件的控制器,可以将此对象绑定至树视图组件,然后通过它控制树的节点信息,同一个控制器不可以控制多个树视图组件。 - - -### 导入对象 - -``` -treeController: TreeController = new TreeController() -``` - - -### addNode - - -addNode(nodeParam?: NodeParam): void - - -点击某个节点后,调用该方法可以触发新增孩子节点 - - -**参数:** - - -| 参数名 | 参数类型 | 必填 | 参数描述 | -| -------- | -------- | -------- | -------- | -| nodeParam | [NodeParam](#nodeparam) | 否 | 节点信息。 | - - -### removeNode - -removeNode(): void - -点击某个节点后,调用该方法可以触发删除该节点 - - -### modifyNode - - -modifyNode(): void - - -点击某个节点后,调用该方法可以触发修改该节点 - - -### buildDone - -buildDone(): void - -建立树视图。节点增加完毕后,必须调用该方法,触发树信息的保存 - - -### refreshNode - -refreshNode(parentId: number, parentSubTitle: ResourceStr, currentSubtitle: ResourceStr): void - -**参数:** - -| 参数名 | 参数类型 | 必填 | 参数描述 | -| -------- | -------- | -------- | -------- | -| parentId | number | 是 | 父节点Id。 | -| parentSubTitle | ResourceStr | 是 | 父节点副文本 | -| currentSubtitle | ResourceStr | 是 | 当前节点副文本 | - - -## NodeParam - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| parentNodeId | number | 否 | 父亲节点 | -| currentNodeId | number | 否 | 当前孩子节点 | -| isFolder | boolean | 否 | 是否是目录 | -| icon | ResourceStr | 否 | 图标 | -| selectedIcon | ResourceStr | 否 | 选中图标 | -| editIcon | ResourceStr | 否 | 编辑图标 | -| primaryTitle | ResourceStr | 否 | 主标题 | -| secondaryTitle | ResourceStr | 否 | 副标题 | -| container | () => void | 否 | 绑定在节点上的子组件,子组件由[@Builder](https://docs.openharmony.cn/pages/v3.1/en/application-dev/ui/ts-component-based-builder.md/)修饰 | - - -## TreeListenerManager对象说明 - -树视图组件的监听器,可以将此对象绑定至树视图组件,然后通过它监听树的节点的变化,同一个监听器不可以控制多个树视图组件。 - - -### 导入对象 - -``` -import { TreeListenerManager } from '@ohos.arkui.advanced.TreeView' -``` - - -### getInstance - -getInstance(): TreeListenerManager - -获取监听管理器单例对象 - - -### getTreeListener() - -getTreeListener(): TreeListener - -获取监听器 - - -## TreeListener对象说明 - -树视图组件的监听器,可以将此对象绑定至树视图组件,然后通过它监听树的节点的变化,同一个监听器不可以控制多个树视图组件。 - - -### 导入对象 - -``` -treeListener: TreeListener = TreeListenerManager.getInstance().getTreeListener() -``` - - -### on - -on(type: TreeListenType, callback: (callbackParam: CallbackParam) => void): void; - -注册监听 - -**参数:** - -| 参数名 | 参数类型 | 必填 | 参数描述 | -| -------- | -------- | -------- | -------- | -| type | [TreeListenType](#treelistentype) | 是 | 监听类型 | -| nodeParam | [NodeParam](#nodeparam) | 是 | 节点信息。 | - - -### once - -once(type: TreeListenType, callback: (callbackParam: CallbackParam) => void): void; - -注册一次监听 - -**参数:** - -| 参数名 | 参数类型 | 必填 | 参数描述 | -| -------- | -------- | -------- | -------- | -| type | [TreeListenType](#treelistentype) | 是 | 监听类型 | -| nodeParam | [NodeParam](#nodeparam) | 是 | 节点信息。 | - - -### off - - -off(type: TreeListenType, callback?: (callbackParam: CallbackParam) => void): void; - - -取消监听 - - -**参数:** - - -| 参数名 | 参数类型 | 必填 | 参数描述 | -| -------- | -------- | -------- | -------- | -| type | [TreeListenType](#treelistentype) | 是 | 监听类型 | -| nodeParam | [NodeParam](#nodeparam) | 是 | 节点信息。 | - - -## TreeListenType - -| 名称 | 描述 | -| -------- | -------- | -| NODE_CLICK | 监听节点点击事件 | -| NODE_ADD | 监听节点增加事件 | -| NODE_DELETE | 监听节点删除事件 | -| NODE_MODIFY | 监听节点修改事件 | -| NODE_MOVE | 监听节点移动事件 | - - -## CallbackParam - -| 名称 | 值 | 是否必填 | 描述 | -| -------- | -------- | -------- | -------- | -| currentNodeId | number | 是 | 当前孩子节点 | -| parentNodeId | number | 否 | 父亲节点表 | -| childIndex: number | number | 否 | 孩子索引 | - - -## 示例 - -``` -import { TreeController, TreeListener, TreeListenerManager, TreeListenType, NodeParam, TreeView, CallbackParam } from '@ohos.arkui.advanced.TreeView' - -@Entry -@Component -struct TreeViewDemo { - private listTreeNode: TreeController = new TreeController(); - private appEventBus: TreeListener = TreeListenerManager.getInstance().getTreeListener(); - @State clickNodeId: number = 0; - @State numbers: string[] = ['one', 'two', 'three', 'four', 'five', 'six']; - - aboutToDisappear(): void { - this.appEventBus.off(TreeListenType.NODE_CLICK, null); - this.appEventBus.off(TreeListenType.NODE_ADD, null); - this.appEventBus.off(TreeListenType.NODE_DELETE, null); - } - - @Builder menuBuilder0() { - Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { - Text('删除').fontSize(16).width(100).height(30).textAlign(TextAlign.Center) - .onClick((event: ClickEvent) => { - this.listTreeNode.removeNode(); - }) - }.width(100).border({width: 1, color: 0x80808a, radius: '16dp'}) - } - - @Builder menuBuilder1() { - Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { - Text('新增').fontSize(16).width(100).height(30).textAlign(TextAlign.Center) - .onClick((event: ClickEvent) => { - this.listTreeNode.addNode(); - }) - Divider() - Text('删除').fontSize(16).width(100).height(30).textAlign(TextAlign.Center) - .onClick((event: ClickEvent) => { - this.listTreeNode.removeNode(); - }) - Divider() - Text('重命名').fontSize(16).width(100).height(30).textAlign(TextAlign.Center) - .onClick((event: ClickEvent) => { - this.listTreeNode.modifyNode(); - }) - }.width(100).border({width: 1, color: 0x80808a, radius: '16dp'}) - } - - aboutToAppear(): void { - this.appEventBus.on(TreeListenType.NODE_MOVE, (callbackParam: CallbackParam) => { - }) - this.appEventBus.on(TreeListenType.NODE_CLICK, (callbackParam: CallbackParam) => { - }) - - let normalResource: Resource = $r('app.media.ic_public_collect_normal'); - let selectedResource: Resource = $r('app.media.ic_public_collect_selected'); - let editResource: Resource = $r('app.media.ic_public_collect_edit'); - let nodeParam: NodeParam = { parentNodeId:-1, currentNodeId: 1, isFolder: true, icon: normalResource, selectedIcon: selectedResource, - editIcon: editResource, primaryTitle: "目录1验证悬浮框自适应效果是否OK", - menu: this.menuBuilder1.bind(this), secondaryTitle: "6" }; - this.listTreeNode - .addNode(nodeParam) - .addNode({parentNodeId:1, currentNodeId: 2, isFolder: false, primaryTitle: "项目1_1" }) - .addNode({ parentNodeId:-1, currentNodeId: 7, isFolder: true, primaryTitle: "目录2", menu: this.menuBuilder1.bind(this) }) - .addNode({ parentNodeId:-1, currentNodeId: 23, isFolder: true, icon: normalResource, selectedIcon: selectedResource, - editIcon: editResource, primaryTitle: "目录3", menu: this.menuBuilder1.bind(this) }) - .addNode({ parentNodeId:-1, currentNodeId: 24, isFolder: false, primaryTitle: "项目4", menu: this.menuBuilder1.bind(this) }) - .addNode({ parentNodeId:-1, currentNodeId: 31, isFolder: true, icon: normalResource, selectedIcon: selectedResource, - editIcon: editResource, primaryTitle: "目录5", menu: this.menuBuilder1.bind(this), secondaryTitle: "0" }) - .addNode({ parentNodeId:-1, currentNodeId: 32, isFolder: true, icon: normalResource, selectedIcon: selectedResource, - editIcon: editResource, primaryTitle: "目录6", menu: this.menuBuilder1.bind(this), secondaryTitle: "0" }) - .addNode({ parentNodeId:32, currentNodeId: 35, isFolder: true, icon: normalResource, selectedIcon: selectedResource, - editIcon: editResource, primaryTitle: "目录6-1", menu: this.menuBuilder1.bind(this), secondaryTitle: "0" }) - .addNode({ parentNodeId:-1, currentNodeId: 33, isFolder: true, icon: normalResource, selectedIcon: selectedResource, - editIcon: editResource, primaryTitle: "目录7", menu: this.menuBuilder1.bind(this), secondaryTitle: "0" }) - .addNode({ parentNodeId:33, currentNodeId: 34, isFolder: false, primaryTitle: "项目8" }) - .addNode({ parentNodeId:-1, currentNodeId: 36, isFolder: false, primaryTitle: "项目9" }) - .buildDone(); - } - - @Builder subfieldPopup(item: any) { - Column() { - Text(item) - .width('50%').height(60).fontSize(16).borderRadius(10) - .textAlign(TextAlign.Center).backgroundColor(Color.Yellow) - } - } - - build() { - SideBarContainer(SideBarContainerType.Embed) - { - TreeView({ treeController: this.listTreeNode }) - Row() { - Divider().vertical(true).strokeWidth(2).color(0x000000).lineCap(LineCapStyle.Round) - Column() { - Row() { - Text('ClickNodeId=' + this.clickNodeId).fontSize('16fp') - Button('Add', { type: ButtonType.Normal, stateEffect: true }) - .borderRadius(8).backgroundColor(0x317aff).width(90) - .onClick((event: ClickEvent) => { - this.listTreeNode.addNode(); - }) - Button('Modify', { type: ButtonType.Normal, stateEffect: true }) - .borderRadius(8).backgroundColor(0x317aff).width(90) - .onClick((event: ClickEvent) => { - this.listTreeNode.modifyNode(); - }) - Button('Remove', { type: ButtonType.Normal, stateEffect: true }) - .borderRadius(8).backgroundColor(0x317aff).width(120) - .onClick((event: ClickEvent) => { - this.listTreeNode.removeNode(); - }) - } - - /* drag item. */ - List({ space: 10, initialIndex: 0 }) { - ForEach(this.numbers, (item) => { - ListItem() { - Text('' + item) - .width('100%').height(38).fontSize(16).borderRadius(10) - .textAlign(TextAlign.Center).backgroundColor(0xAFEEEE) - } - .onSelect((isSelected: boolean) => { - console.log('listItem selected') - }) - .onDragStart(() => { - this.listTreeNode.refreshNode(1,'选择节点','目标节点') - return this.subfieldPopup(item) - }) - }, item => item) - } - .editMode(true) - .multiSelectable(true) - .onDrop((event: DragEvent, extraParams: string) => { - console.log('outer onDrop') - }) - - }.height('100%').width('70%').alignItems(HorizontalAlign.Start) - } - } - .focusable(true) - .sideBarWidth(240) - .minSideBarWidth(0) - .maxSideBarWidth(900) - .showControlButton(false) - .showSideBar(true) - .onChange((value: boolean) => { - console.info('status:' + value); - }) - } -} -``` - -![zh-cn_image_0000001664822257](figures/zh-cn_image_0000001664822257.png) diff --git a/interface/arkdialog/BUILD.gn b/interface/arkdialog/BUILD.gn deleted file mode 100644 index 6c5b90f..0000000 --- a/interface/arkdialog/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_arkdialog_abc") { - src_js = rebase_path("arkdialog.js") - dst_file = rebase_path(target_out_dir + "/arkdialog.abc") - in_puts = [ "arkdialog.js" ] - out_puts = [ target_out_dir + "/arkdialog.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("arkdialog_abc") { - input = get_label_info(":gen_arkdialog_abc", "target_out_dir") + "/arkdialog.abc" - output = target_out_dir + "/arkdialog_abc.o" - dep = ":gen_arkdialog_abc" -} - -ohos_shared_library("arkdialog") { - sources = [ "arkdialog.cpp" ] - - deps = [ ":arkdialog_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} diff --git a/interface/arkdialog/arkdialog.cpp b/interface/arkdialog/arkdialog.cpp deleted file mode 100644 index 0db1e88..0000000 --- a/interface/arkdialog/arkdialog.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_arkdialog_abc_start[]; -extern const char _binary_arkdialog_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_ArkDialog_GetABCCode(const char **buf, int *buflen) -{ - if (buf != nullptr) { - *buf = _binary_arkdialog_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_arkdialog_abc_end - _binary_arkdialog_abc_start; - } -} - -/* - * Module define - */ -static napi_module arkdialogModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.ArkDialog", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; -/* - * Module register function - */ -extern "C" __attribute__((constructor)) void arkdialogRegisterModule(void) -{ - napi_module_register(&arkdialogModule); -} diff --git a/interface/arkdialog/arkdialog.js b/interface/arkdialog/arkdialog.js deleted file mode 100644 index 36e355f..0000000 --- a/interface/arkdialog/arkdialog.js +++ /dev/null @@ -1,1604 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const CHECKBOX_CONTAINER_HEIGHT = 48; -const CONTENT_MAX_LINES = 2; -const DIVIDER_CONTAINER_WIDTH = 16; -const DIVIDER_HEIGHT = 24; -const DIVIDER_WIDTH = 2; -const LOADING_PROGRESS_WIDTH = 40; -const LOADING_PROGRESS_HEIGHT = 48; -const ITEM_TEXT_SIZE = 14; - -export class TipsDialog extends ViewPU { - constructor(e, o, t, r = -1) { - super(e, t, r); - this.controller = void 0; - this.imageRes = void 0; - this.imageSize = { width: '100%', height: 180 }; - this.title = ''; - this.content = ''; - this.checkTips = ''; - this.__isChecked = new ObservedPropertySimplePU(!1, this, 'isChecked'); - this.primaryButton = { value: '' }; - this.secondaryButton = { value: '' }; - this.setInitiallyProvidedValue(o); - } - - setInitiallyProvidedValue(e) { - void 0 !== e.controller && (this.controller = e.controller); - void 0 !== e.imageRes && (this.imageRes = e.imageRes); - void 0 !== e.imageSize && (this.imageSize = e.imageSize); - void 0 !== e.title && (this.title = e.title); - void 0 !== e.content && (this.content = e.content); - void 0 !== e.checkTips && (this.checkTips = e.checkTips); - void 0 !== e.isChecked && (this.isChecked = e.isChecked); - void 0 !== e.primaryButton && (this.primaryButton = e.primaryButton); - void 0 !== e.secondaryButton && (this.secondaryButton = e.secondaryButton); - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - this.__isChecked.purgeDependencyOnElmtId(e); - } - - aboutToBeDeleted() { - this.__isChecked.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal(); - } - - setController(e) { - this.controller = e; - } - - get isChecked() { - return this.__isChecked.get(); - } - - set isChecked(e) { - this.__isChecked.set(e); - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.backgroundBlurStyle(BlurStyle.Thick); - Column.borderRadius({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_corner_radius_dialog'], - bundleName: '', - moduleName: '' - }); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_start'], - bundleName: '', - moduleName: '' - }, - right: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_end'], - bundleName: '', - moduleName: '' - }, - bottom: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_bottom'], - bundleName: '', - moduleName: '' - } - }); - Column.backgroundColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_dialog_bg'], - bundleName: '', - moduleName: '' - }); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width('100%'); - Row.padding({ left: 24, right: 24 }); - Row.margin({ top: 24 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.layoutWeight(1); - Column.clip(!0); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.imageRes); - Image.size(this.imageSize); - Image.objectFit(ImageFit.Fill); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Column.pop(); - Row.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.padding({ left: 24, right: 24 }); - Row.margin({ top: 16 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.title); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_headline8'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.textAlign(TextAlign.Center); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.content ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.padding({ left: 24, right: 24, top: 8, bottom: 8 }); - Row.width('100%'); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.content); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body2'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.textAlign(TextAlign.Center); - Text.minFontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body3'], - bundleName: '', - moduleName: '' - }); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.height(CHECKBOX_CONTAINER_HEIGHT); - Row.width('100%'); - Row.padding({ left: 24, right: 24, top: 8, bottom: 8 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Checkbox.create({ name: 'checkbox', group: 'checkboxGroup' }); - Checkbox.select(this.isChecked); - Checkbox.onChange((e => { - this.isChecked = e; - })); - Checkbox.margin({ left: 0, right: 8 }); - o || Checkbox.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Checkbox.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.checkTips); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body2'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.maxLines(CONTENT_MAX_LINES); - Text.layoutWeight(1); - Text.focusOnTouch(!0); - Text.onClick((() => { - this.isChecked = !this.isChecked; - })); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width('100%'); - Row.padding({ left: 16, right: 16, top: 16, bottom: 16 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.primaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithLabel(this.primaryButton.value); - Button.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button1'], - bundleName: '', - moduleName: '' - }); - Button.fontWeight(FontWeight.Medium); - Button.layoutWeight(1); - Button.backgroundColor(this.primaryButton.background ? this.primaryButton.background : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_background_transparent'], - bundleName: '', - moduleName: '' - }); - Button.fontColor(this.primaryButton.fontColor ? this.primaryButton.fontColor : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - }); - Button.onClick((() => { - this.primaryButton.action && this.primaryButton.action(); - this.controller.close(); - })); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Button.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.value && this.primaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width(DIVIDER_CONTAINER_WIDTH); - Column.alignItems(HorizontalAlign.Center); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.background ? If.branchId(1) : this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.width(DIVIDER_WIDTH); - Divider.height(DIVIDER_HEIGHT); - Divider.color({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_list_separator'], - bundleName: '', - moduleName: '' - }); - Divider.vertical(!0); - o || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - })); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Column.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithLabel(this.secondaryButton.value); - Button.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button1'], - bundleName: '', - moduleName: '' - }); - Button.fontWeight(FontWeight.Medium); - Button.layoutWeight(1); - Button.backgroundColor(this.secondaryButton.background ? this.secondaryButton.background : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_background_transparent'], - bundleName: '', - moduleName: '' - }); - Button.fontColor(this.secondaryButton.fontColor ? this.secondaryButton.fontColor : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - }); - Button.onClick((() => { - this.secondaryButton.action && this.secondaryButton.action(); - this.controller.close(); - })); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Button.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Row.pop(); - Column.pop(); - } - - rerender() { - this.updateDirtyElements(); - } -} - -export class SelectDialog extends ViewPU { - constructor(e, o, t, r = -1) { - super(e, t, r); - this.controller = void 0; - this.title = ''; - this.content = ''; - this.selectedIndex = -1; - this.confirm = { value: '' }; - this.radioContent = []; - this.setInitiallyProvidedValue(o); - } - - setInitiallyProvidedValue(e) { - void 0 !== e.controller && (this.controller = e.controller); - void 0 !== e.title && (this.title = e.title); - void 0 !== e.content && (this.content = e.content); - void 0 !== e.selectedIndex && (this.selectedIndex = e.selectedIndex); - void 0 !== e.confirm && (this.confirm = e.confirm); - void 0 !== e.radioContent && (this.radioContent = e.radioContent); - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - } - - aboutToBeDeleted() { - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal(); - } - - setController(e) { - this.controller = e; - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.backgroundBlurStyle(BlurStyle.Thick); - Column.borderRadius({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_corner_radius_dialog'], - bundleName: '', - moduleName: '' - }); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_start'], - bundleName: '', - moduleName: '' - }, - right: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_end'], - bundleName: '', - moduleName: '' - }, - bottom: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_bottom'], - bundleName: '', - moduleName: '' - } - }); - Column.backgroundColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_dialog_bg'], - bundleName: '', - moduleName: '' - }); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.padding({ left: 24, right: 24, top: 24 }); - Row.constraintSize({ minHeight: 56 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.title); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_dialog_tittle'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.maxLines(CONTENT_MAX_LINES); - Text.minFontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_sub_title1'], - bundleName: '', - moduleName: '' - }); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.textAlign(TextAlign.Start); - Text.width('100%'); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.content ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.padding({ left: 24, right: 24, top: 8, bottom: 8 }); - Row.width('100%'); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.content); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body2'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.maxLines(CONTENT_MAX_LINES); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.minFontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body3'], - bundleName: '', - moduleName: '' - }); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - List.create({ space: 1 }); - List.width('100%'); - List.padding({ left: 24, right: 24, top: 8, bottom: 8 }); - List.clip(!1); - o || List.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.radioContent, ((e, o) => { - const t = e; - { - const e = !0; - const r = (o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - ListItem.create(i, e); - t || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording(); - }; - const s = () => { - this.observeComponentCreation(r); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.constraintSize({ minHeight: 48 }); - Row.clip(!1); - Row.onClick((() => { - t.action && t.action(); - this.controller.close(); - })); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(t.title); - Text.fontSize(ITEM_TEXT_SIZE); - Text.fontWeight(FontWeight.Regular); - Text.maxLines(CONTENT_MAX_LINES); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.layoutWeight(1); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - this.observeComponentCreation(((e, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Radio.create({ value: 'item.title', group: 'radioGroup' }); - Radio.checked(this.selectedIndex === o); - Radio.onChange((() => { - t.action && t.action(); - this.controller.close(); - })); - Radio.onClick((() => { - t.action && t.action(); - this.controller.close(); - })); - r || Radio.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - o < this.radioContent.length - 1 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.color({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_list_separator'], - bundleName: '', - moduleName: '' - }); - o || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Column.pop(); - ListItem.pop(); - }; - const i = (e, s) => { - r(e, s); - this.updateFuncByElmtId.set(e, r); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.constraintSize({ minHeight: 48 }); - Row.clip(!1); - Row.onClick((() => { - t.action && t.action(); - this.controller.close(); - })); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(t.title); - Text.fontSize(ITEM_TEXT_SIZE); - Text.fontWeight(FontWeight.Regular); - Text.maxLines(CONTENT_MAX_LINES); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.layoutWeight(1); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - this.observeComponentCreation(((e, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Radio.create({ value: 'item.title', group: 'radioGroup' }); - Radio.checked(this.selectedIndex === o); - Radio.onChange((() => { - t.action && t.action(); - this.controller.close(); - })); - Radio.onClick((() => { - t.action && t.action(); - this.controller.close(); - })); - r || Radio.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - o < this.radioContent.length - 1 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.color({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_list_separator'], - bundleName: '', - moduleName: '' - }); - o || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Column.pop(); - ListItem.pop(); - }; - e ? (() => { - this.observeComponentCreation(r); - ListItem.pop(); - })() : s(); - } - }), void 0, !0, !1); - o || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - ForEach.pop(); - List.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width('100%'); - Row.padding({ left: 16, right: 16, top: 16, bottom: 16 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.confirm.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithLabel(this.confirm.value); - Button.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button1'], - bundleName: '', - moduleName: '' - }); - Button.fontWeight(FontWeight.Medium); - Button.layoutWeight(1); - Button.backgroundColor(this.confirm.background ? this.confirm.background : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_background_transparent'], - bundleName: '', - moduleName: '' - }); - Button.fontColor(this.confirm.fontColor ? this.confirm.fontColor : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - }); - Button.onClick((() => { - this.confirm.action && this.confirm.action(); - this.controller.close(); - })); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Button.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Row.pop(); - Column.pop(); - } - - rerender() { - this.updateDirtyElements(); - } -} - -export class ConfirmDialog extends ViewPU { - constructor(e, o, t, r = -1) { - super(e, t, r); - this.controller = void 0; - this.title = ''; - this.content = ''; - this.checkTips = ''; - this.__isChecked = new ObservedPropertySimplePU(!1, this, 'isChecked'); - this.primaryButton = { value: '' }; - this.secondaryButton = { value: '' }; - this.setInitiallyProvidedValue(o); - } - - setInitiallyProvidedValue(e) { - void 0 !== e.controller && (this.controller = e.controller); - void 0 !== e.title && (this.title = e.title); - void 0 !== e.content && (this.content = e.content); - void 0 !== e.checkTips && (this.checkTips = e.checkTips); - void 0 !== e.isChecked && (this.isChecked = e.isChecked); - void 0 !== e.primaryButton && (this.primaryButton = e.primaryButton); - void 0 !== e.secondaryButton && (this.secondaryButton = e.secondaryButton); - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - this.__isChecked.purgeDependencyOnElmtId(e); - } - - aboutToBeDeleted() { - this.__isChecked.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal(); - } - - setController(e) { - this.controller = e; - } - - get isChecked() { - return this.__isChecked.get(); - } - - set isChecked(e) { - this.__isChecked.set(e); - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.backgroundBlurStyle(BlurStyle.Thick); - Column.borderRadius({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_corner_radius_dialog'], - bundleName: '', - moduleName: '' - }); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_start'], - bundleName: '', - moduleName: '' - }, - right: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_end'], - bundleName: '', - moduleName: '' - }, - bottom: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_bottom'], - bundleName: '', - moduleName: '' - } - }); - Column.backgroundColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_dialog_bg'], - bundleName: '', - moduleName: '' - }); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.padding({ left: 24, right: 24, top: 24 }); - Row.constraintSize({ minHeight: 56 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.title); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_dialog_tittle'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.maxLines(CONTENT_MAX_LINES); - Text.minFontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_sub_title1'], - bundleName: '', - moduleName: '' - }); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.textAlign(TextAlign.Start); - Text.width('100%'); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.content ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.padding({ left: 24, right: 24, top: 8, bottom: 8 }); - Row.width('100%'); - Row.constraintSize({ minHeight: 36 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.content); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body1'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.maxLines(CONTENT_MAX_LINES); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.minFontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body3'], - bundleName: '', - moduleName: '' - }); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.height(CHECKBOX_CONTAINER_HEIGHT); - Row.width('100%'); - Row.padding({ left: 24, right: 24, top: 8, bottom: 8 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Checkbox.create({ name: 'checkbox', group: 'checkboxGroup' }); - Checkbox.select(this.isChecked); - Checkbox.onChange((e => { - this.isChecked = e; - })); - Checkbox.margin({ left: 0, right: 8 }); - o || Checkbox.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Checkbox.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.checkTips); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body2'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.maxLines(CONTENT_MAX_LINES); - Text.layoutWeight(1); - Text.focusOnTouch(!0); - Text.onClick((() => { - this.isChecked = !this.isChecked; - })); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width('100%'); - Row.padding({ left: 16, right: 16, top: 16, bottom: 16 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.primaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithLabel(this.primaryButton.value); - Button.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button1'], - bundleName: '', - moduleName: '' - }); - Button.fontWeight(FontWeight.Medium); - Button.layoutWeight(1); - Button.backgroundColor(this.primaryButton.background ? this.primaryButton.background : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_background_transparent'], - bundleName: '', - moduleName: '' - }); - Button.fontColor(this.primaryButton.fontColor ? this.primaryButton.fontColor : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - }); - Button.onClick((() => { - this.primaryButton.action && this.primaryButton.action(); - this.controller.close(); - })); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Button.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.value && this.primaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width(DIVIDER_CONTAINER_WIDTH); - Column.alignItems(HorizontalAlign.Center); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.background ? If.branchId(1) : this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.width(DIVIDER_WIDTH); - Divider.height(DIVIDER_HEIGHT); - Divider.color({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_list_separator'], - bundleName: '', - moduleName: '' - }); - Divider.vertical(!0); - o || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - })); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Column.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithLabel(this.secondaryButton.value); - Button.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button1'], - bundleName: '', - moduleName: '' - }); - Button.fontWeight(FontWeight.Medium); - Button.layoutWeight(1); - Button.backgroundColor(this.secondaryButton.background ? this.secondaryButton.background : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_background_transparent'], - bundleName: '', - moduleName: '' - }); - Button.fontColor(this.secondaryButton.fontColor ? this.secondaryButton.fontColor : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - }); - Button.onClick((() => { - this.secondaryButton.action && this.secondaryButton.action(); - this.controller.close(); - })); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Button.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Row.pop(); - Column.pop(); - } - - rerender() { - this.updateDirtyElements(); - } -} - -export class AlertDialog extends ViewPU { - constructor(e, o, t, r = -1) { - super(e, t, r); - this.controller = void 0; - this.content = ''; - this.primaryButton = { value: '' }; - this.secondaryButton = { value: '' }; - this.setInitiallyProvidedValue(o); - } - - setInitiallyProvidedValue(e) { - void 0 !== e.controller && (this.controller = e.controller); - void 0 !== e.content && (this.content = e.content); - void 0 !== e.primaryButton && (this.primaryButton = e.primaryButton); - void 0 !== e.secondaryButton && (this.secondaryButton = e.secondaryButton); - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - } - - aboutToBeDeleted() { - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal(); - } - - setController(e) { - this.controller = e; - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.backgroundBlurStyle(BlurStyle.Thick); - Column.borderRadius({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_corner_radius_dialog'], - bundleName: '', - moduleName: '' - }); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_start'], - bundleName: '', - moduleName: '' - }, - right: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_end'], - bundleName: '', - moduleName: '' - }, - bottom: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_bottom'], - bundleName: '', - moduleName: '' - } - }); - Column.backgroundColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_dialog_bg'], - bundleName: '', - moduleName: '' - }); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.padding({ left: 24, right: 24, top: 24 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.content); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body1'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width('100%'); - Row.padding({ left: 16, right: 16, top: 16, bottom: 16 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.primaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithLabel(this.primaryButton.value); - Button.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button1'], - bundleName: '', - moduleName: '' - }); - Button.fontWeight(FontWeight.Medium); - Button.layoutWeight(1); - Button.backgroundColor(this.primaryButton.background ? this.primaryButton.background : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_background_transparent'], - bundleName: '', - moduleName: '' - }); - Button.fontColor(this.primaryButton.fontColor ? this.primaryButton.fontColor : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - }); - Button.onClick((() => { - this.primaryButton.action && this.primaryButton.action(); - this.controller.close(); - })); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Button.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.value && this.primaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width(DIVIDER_CONTAINER_WIDTH); - Column.alignItems(HorizontalAlign.Center); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.background ? If.branchId(1) : this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.width(DIVIDER_WIDTH); - Divider.height(DIVIDER_HEIGHT); - Divider.color({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_list_separator'], - bundleName: '', - moduleName: '' - }); - Divider.vertical(!0); - o || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - })); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Column.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.secondaryButton.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithLabel(this.secondaryButton.value); - Button.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button1'], - bundleName: '', - moduleName: '' - }); - Button.fontWeight(FontWeight.Medium); - Button.layoutWeight(1); - Button.backgroundColor(this.secondaryButton.background ? this.secondaryButton.background : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_background_transparent'], - bundleName: '', - moduleName: '' - }); - Button.fontColor(this.secondaryButton.fontColor ? this.secondaryButton.fontColor : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - }); - Button.onClick((() => { - this.secondaryButton.action && this.secondaryButton.action(); - this.controller.close(); - })); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Button.pop(); - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Row.pop(); - Column.pop(); - } - - rerender() { - this.updateDirtyElements(); - } -} - -export class LoadingDialog extends ViewPU { - constructor(e, o, t, r = -1) { - super(e, t, r); - this.controller = void 0; - this.content = ''; - this.setInitiallyProvidedValue(o); - } - - setInitiallyProvidedValue(e) { - void 0 !== e.controller && (this.controller = e.controller); - void 0 !== e.content && (this.content = e.content); - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - } - - aboutToBeDeleted() { - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal(); - } - - setController(e) { - this.controller = e; - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.backgroundBlurStyle(BlurStyle.Thick); - Column.borderRadius({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_corner_radius_dialog'], - bundleName: '', - moduleName: '' - }); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_start'], - bundleName: '', - moduleName: '' - }, - right: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_end'], - bundleName: '', - moduleName: '' - }, - bottom: { - id: -1, - type: 10002, - params: ['sys.float.ohos_id_dialog_margin_bottom'], - bundleName: '', - moduleName: '' - } - }); - Column.backgroundColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_dialog_bg'], - bundleName: '', - moduleName: '' - }); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ left: 24, right: 24, top: 24, bottom: 24 }); - Row.constraintSize({ minHeight: 48 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.content); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_body1'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - }); - Text.layoutWeight(1); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - LoadingProgress.create(); - LoadingProgress.width(LOADING_PROGRESS_WIDTH); - LoadingProgress.height(LOADING_PROGRESS_HEIGHT); - LoadingProgress.margin({ left: 16 }); - o || LoadingProgress.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Row.pop(); - Column.pop(); - } - - rerender() { - this.updateDirtyElements(); - } -} -export default { TipsDialog, ConfirmDialog, SelectDialog, AlertDialog, LoadingDialog }; \ No newline at end of file diff --git a/interface/composelistitem/BUILD.gn b/interface/composelistitem/BUILD.gn deleted file mode 100644 index a70c722..0000000 --- a/interface/composelistitem/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_composelistitem_abc") { - src_js = rebase_path("composelistitem.js") - dst_file = rebase_path(target_out_dir + "/composelistitem.abc") - in_puts = [ "composelistitem.js" ] - out_puts = [ target_out_dir + "/composelistitem.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("composelistitem_abc") { - input = get_label_info(":gen_composelistitem_abc", "target_out_dir") + "/composelistitem.abc" - output = target_out_dir + "/composelistitem_abc.o" - dep = ":gen_composelistitem_abc" -} - -ohos_shared_library("composelistitem") { - sources = [ "composelistitem.cpp" ] - - deps = [ ":composelistitem_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} diff --git a/interface/composelistitem/composelistitem.cpp b/interface/composelistitem/composelistitem.cpp deleted file mode 100644 index bf795fc..0000000 --- a/interface/composelistitem/composelistitem.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_composelistitem_abc_start[]; -extern const char _binary_composelistitem_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_ComposeListItem_GetABCCode(const char **buf, int *buflen) - { - if (buf != nullptr) { - *buf = _binary_composelistitem_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_composelistitem_abc_end - _binary_composelistitem_abc_start; - } - } - - -static napi_module composelistitemModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.ComposeListItem", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void composelistitemRegisterModule(void) -{ - napi_module_register(&composelistitemModule); -} \ No newline at end of file diff --git a/interface/composelistitem/composelistitem.js b/interface/composelistitem/composelistitem.js deleted file mode 100644 index 09de65f..0000000 --- a/interface/composelistitem/composelistitem.js +++ /dev/null @@ -1,799 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export var IconType; -!function(e){ - e[e.BADGE=1] = "BADGE"; - e[e.NORMAL_ICON=2] = "NORMAL_ICON"; - e[e.SYSTEM_ICON=3] = "SYSTEM_ICON"; - e[e.HEAD_SCULPTURE=4] = "HEAD_SCULPTURE"; - e[e.APP_ICON=5] = "APP_ICON"; - e[e.PREVIEW=6] = "PREVIEW"; - e[e.LONGITUDINAL=7] = "LONGITUDINAL"; - e[e.VERTICAL=8] = "VERTICAL" -}(IconType || (IconType = {})); -var ItemHeight; -!function(e){ - e[e.FIRST_HEIGHT=48] = "FIRST_HEIGHT"; - e[e.SECOND_HEIGHT=56] = "SECOND_HEIGHT"; - e[e.THIRD_HEIGHT=64] = "THIRD_HEIGHT"; - e[e.FOURTH_HEIGHT=72] = "FOURTH_HEIGHT"; - e[e.FIFTH_HEIGHT=96] = "FIFTH_HEIGHT" -}(ItemHeight || (ItemHeight = {})); -const LISTITEMCARD_BORDER_HIDDEN = 0; -const TEXT_MAX_LINE = 1; -const LISTITEMCARD_BORDER_SHOWN = 2; -const TEXT_COLUMN_SPACE = 2; -const TEXT_SAFE_MARGIN = 8; -const BADGE_SIZE = 8; -const SMALL_ICON_SIZE = 16; -const SYSTEM_ICON_SIZE = 24; -const SAFE_LIST_PADDING = 32; -const HEADSCULPTURE_SIZE = 40; -const BUTTON_SIZE = 28; -const APP_ICON_SIZE = 64; -const PREVIEW_SIZE = 96; -const LONGITUDINAL_SIZE = 96; -const VERTICAL_SIZE = 96; -const NORMAL_ITEM_ROW_SPACE = 16; -const SPECIAL_ITEM_ROW_SPACE = 0; -const SPECIAL_ICON_SIZE = 0; -const DEFAULT_ROW_SPACE = 0; -const SPECICAL_ROW_SPACE = 4; -const OPERATEITEM_ICONLIKE_SIZE = 24; -const OPERATEITEM_ARROW_WIDTH = 12; -const OPERATEITEM_ICON_CLICKABLE_SIZE = 48; -const OPERATEITEM_IMAGE_SIZE = 48; -const HOVERING_COLOR = "#0d000000"; -const TOUCH_DOWN_COLOR = "#1a000000"; -const ACTIVED_COLOR = "#1a0a59f7"; - -class ContentItemStruct extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.iconStyle = null; - this.icon = null; - this.title = null; - this.subtitle = null; - this.description = null; - this.iconSizeMap = new Map([[IconType.BADGE, 8], [IconType.NORMAL_ICON, 16], [IconType.SYSTEM_ICON, 24], [IconType.HEAD_SCULPTURE, 40], [IconType.APP_ICON, 64], [IconType.PREVIEW, 96], [IconType.LONGITUDINAL, 96], [IconType.VERTICAL, 96]]); - this.itemHeight = ItemHeight.FIRST_HEIGHT; - this.itemRowSpace = 16; - this.setInitiallyProvidedValue(t) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.iconStyle && (this.iconStyle = e.iconStyle); - void 0 !== e.icon && (this.icon = e.icon); - void 0 !== e.title && (this.title = e.title); - void 0 !== e.subtitle && (this.subtitle = e.subtitle); - void 0 !== e.description && (this.description = e.description); - void 0 !== e.iconSizeMap && (this.iconSizeMap = e.iconSizeMap); - void 0 !== e.itemHeight && (this.itemHeight = e.itemHeight); - void 0 !== e.itemRowSpace && (this.itemRowSpace = e.itemRowSpace) - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - } - - aboutToBeDeleted() { - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - aboutToAppear() { - null == this.subtitle && null == this.description ? null == this.icon ? this.itemHeight = ItemHeight.FIRST_HEIGHT : this.itemHeight = this.iconStyle <= IconType.HEAD_SCULPTURE ? ItemHeight.SECOND_HEIGHT : ItemHeight.THIRD_HEIGHT : null == this.description ? null == this.icon || null != this.icon && this.iconStyle <= IconType.SYSTEM_ICON ? this.itemHeight = ItemHeight.THIRD_HEIGHT : this.itemHeight = ItemHeight.FOURTH_HEIGHT : this.itemHeight = ItemHeight.FIFTH_HEIGHT; - null == this.icon && null == this.iconStyle && (this.itemRowSpace = 0); - this.iconSizeMap.get(this.iconStyle) >= this.itemHeight && (this.itemHeight = this.iconSizeMap.get(this.iconStyle) + 32) - } - - createIcon(e = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.icon && null != this.iconStyle ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.iconStyle <= IconType.PREVIEW ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.icon); - Image.objectFit(ImageFit.Contain); - Image.width(this.iconSizeMap.get(this.iconStyle)); - Image.height(this.iconSizeMap.get(this.iconStyle)); - Image.borderRadius({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_default_m"], - bundleName: "", - moduleName: "" - }); - Image.focusable(!0); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.icon); - Image.objectFit(ImageFit.Contain); - Image.constraintSize({ - minWidth: 0, - maxWidth: this.iconSizeMap.get(this.iconStyle), - minHeight: 0, - maxHeight: this.iconSizeMap.get(this.iconStyle) - }); - Image.borderRadius({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_default_m"], - bundleName: "", - moduleName: "" - }); - Image.focusable(!0); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - } - - createText(e = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create({ space: 2 }); - Column.margin({ top: 8, bottom: 8 }); - Column.alignItems(HorizontalAlign.Start); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.title); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.focusable(!0); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.subtitle ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.subtitle); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.focusable(!0); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.description ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.description); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.focusable(!0); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Column.pop() - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create({ space: this.itemRowSpace }); - Row.height(this.itemHeight); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.createIcon.bind(this)(); - this.createText.bind(this)(); - Row.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -class OperateItemStruct extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.arrow = null; - this.icon = null; - this.subIcon = null; - this.button = null; - this.switch = null; - this.checkBox = null; - this.radio = null; - this.image = null; - this.text = null; - this.__switchState = new ObservedPropertySimplePU(!1, this, "switchState"); - this.__radioState = new ObservedPropertySimplePU(!1, this, "radioState"); - this.__checkBoxState = new ObservedPropertySimplePU(!1, this, "checkBoxState"); - this.rowSpace = 0; - this.setInitiallyProvidedValue(t) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.arrow && (this.arrow = e.arrow); - void 0 !== e.icon && (this.icon = e.icon); - void 0 !== e.subIcon && (this.subIcon = e.subIcon); - void 0 !== e.button && (this.button = e.button); - void 0 !== e.switch && (this.switch = e.switch); - void 0 !== e.checkBox && (this.checkBox = e.checkBox); - void 0 !== e.radio && (this.radio = e.radio); - void 0 !== e.image && (this.image = e.image); - void 0 !== e.text && (this.text = e.text); - void 0 !== e.switchState && (this.switchState = e.switchState); - void 0 !== e.radioState && (this.radioState = e.radioState); - void 0 !== e.checkBoxState && (this.checkBoxState = e.checkBoxState); - void 0 !== e.rowSpace && (this.rowSpace = e.rowSpace) - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - this.__switchState.purgeDependencyOnElmtId(e); - this.__radioState.purgeDependencyOnElmtId(e); - this.__checkBoxState.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__switchState.aboutToBeDeleted(); - this.__radioState.aboutToBeDeleted(); - this.__checkBoxState.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get switchState() { - return this.__switchState.get() - } - - set switchState(e) { - this.__switchState.set(e) - } - - get radioState() { - return this.__radioState.get() - } - - set radioState(e) { - this.__radioState.set(e) - } - - get checkBoxState() { - return this.__checkBoxState.get() - } - - set checkBoxState(e) { - this.__checkBoxState.set(e) - } - - aboutToAppear() { - null != this.switch && (this.switchState = this.switch.isCheck); - null != this.radio && (this.radioState = this.radio.isCheck); - null != this.checkBox && (this.checkBoxState = this.checkBox.isCheck); - (null == this.button && null == this.image && null != this.icon && null != this.text || null == this.button && null == this.image && null == this.icon && null != this.arrow && null != this.text) && (this.rowSpace = 4) - } - - createButton(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Button.createWithLabel(e); - Button.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_button3"], - bundleName: "", - moduleName: "" - }); - Button.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated_transparent"], - bundleName: "", - moduleName: "" - }); - Button.height(28); - Button.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_button_normal"], - bundleName: "", - moduleName: "" - }); - Button.labelStyle({ maxLines: 1 }); - o || Button.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Button.pop() - } - - createIcon(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Row.create(); - Row.height(48); - Row.width(48); - Row.justifyContent(FlexAlign.Center); - Row.onClick(e.action); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Image.create(e.value); - Image.height(24); - Image.width(24); - Image.focusable(!0); - Image.fillColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary"], - bundleName: "", - moduleName: "" - }); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - } - - createImage(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Image.create(e); - Image.height(48); - Image.width(48); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - } - - createText(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Text.create(e); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.focusable(!0); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - } - - createArrow(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Image.create(e.value); - Image.height(24); - Image.width(12); - Image.focusable(!0); - Image.fillColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_fourth"], - bundleName: "", - moduleName: "" - }); - Image.onClick(e.action); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - } - - createRadio(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Radio.create({ value: null, group: null }); - Radio.checked(this.radioState); - Radio.onChange(e.onChange); - Radio.height(24); - Radio.width(24); - o || Radio.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - } - - createCheckBox(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Checkbox.create(); - Checkbox.select(this.checkBoxState); - Checkbox.onChange(e.onChange); - Checkbox.height(24); - Checkbox.height(24); - o || Checkbox.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Checkbox.pop() - } - - createSwitch(e, t = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.height(48); - Row.width(48); - Row.justifyContent(FlexAlign.Center); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Toggle.create({ type: ToggleType.Switch, isOn: this.switchState }); - Toggle.onChange(e.onChange); - Toggle.onClick((() => { - this.switchState = !this.switchState - })); - o || Toggle.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Toggle.pop(); - Row.pop() - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create({ space: this.rowSpace }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.button ? this.ifElseBranchUpdateFunction(0, (() => { - this.createButton.bind(this)(this.button.text) - })) : null != this.image ? this.ifElseBranchUpdateFunction(1, (() => { - this.createImage.bind(this)(this.image) - })) : null != this.icon && null != this.text ? this.ifElseBranchUpdateFunction(2, (() => { - this.createText.bind(this)(this.text); - this.createIcon.bind(this)(this.icon) - })) : null != this.arrow && null == this.text ? this.ifElseBranchUpdateFunction(3, (() => { - this.createArrow.bind(this)(this.arrow) - })) : null != this.arrow && null != this.text ? this.ifElseBranchUpdateFunction(4, (() => { - this.createText.bind(this)(this.text); - this.createArrow.bind(this)(this.arrow) - })) : null != this.text ? this.ifElseBranchUpdateFunction(5, (() => { - this.createText.bind(this)(this.text) - })) : null != this.radio ? this.ifElseBranchUpdateFunction(6, (() => { - this.createRadio.bind(this)(this.radio) - })) : null != this.checkBox ? this.ifElseBranchUpdateFunction(7, (() => { - this.createCheckBox.bind(this)(this.checkBox) - })) : null != this.switch ? this.ifElseBranchUpdateFunction(8, (() => { - this.createSwitch.bind(this)(this.switch) - })) : null != this.icon && this.ifElseBranchUpdateFunction(9, (() => { - this.createIcon.bind(this)(this.icon); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.subIcon ? this.ifElseBranchUpdateFunction(0, (() => { - this.createIcon.bind(this)(this.subIcon) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Row.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -export class ComposeListItem extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.__contentItem = new SynchedPropertyObjectOneWayPU(t.contentItem, this, "contentItem"); - this.__operateItem = new SynchedPropertyObjectOneWayPU(t.operateItem, this, "operateItem"); - this.__frontColor = new ObservedPropertySimplePU(Color.Transparent.toString(), this, "frontColor"); - this.__borderSize = new ObservedPropertySimplePU(0, this, "borderSize"); - this.isActive = !1; - this.setInitiallyProvidedValue(t) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.contentItem ? this.__contentItem.set(e.contentItem) : this.__contentItem.set(null); - void 0 !== e.operateItem ? this.__operateItem.set(e.operateItem) : this.__operateItem.set(null); - void 0 !== e.frontColor && (this.frontColor = e.frontColor); - void 0 !== e.borderSize && (this.borderSize = e.borderSize); - void 0 !== e.isActive && (this.isActive = e.isActive) - } - - updateStateVars(e) { - this.__contentItem.reset(e.contentItem); - this.__operateItem.reset(e.operateItem) - } - - purgeVariableDependenciesOnElmtId(e) { - this.__contentItem.purgeDependencyOnElmtId(e); - this.__operateItem.purgeDependencyOnElmtId(e); - this.__frontColor.purgeDependencyOnElmtId(e); - this.__borderSize.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__contentItem.aboutToBeDeleted(); - this.__operateItem.aboutToBeDeleted(); - this.__frontColor.aboutToBeDeleted(); - this.__borderSize.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get contentItem() { - return this.__contentItem.get() - } - - set contentItem(e) { - this.__contentItem.set(e) - } - - get operateItem() { - return this.__operateItem.get() - } - - set operateItem(e) { - this.__operateItem.set(e) - } - - get frontColor() { - return this.__frontColor.get() - } - - set frontColor(e) { - this.__frontColor.set(e) - } - - get borderSize() { - return this.__borderSize.get() - } - - set borderSize(e) { - this.__borderSize.set(e) - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.padding({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_start"], - bundleName: "", - moduleName: "" - }, - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_end"], - bundleName: "", - moduleName: "" - } - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Flex.create({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }); - Flex.focusable(!0); - Flex.border({ - width: this.borderSize, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - } - }); - Flex.borderRadius({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_default_m"], - bundleName: "", - moduleName: "" - }); - Flex.backgroundColor(this.frontColor); - Flex.onFocus((() => { - this.borderSize = 2 - })); - Flex.onBlur((() => { - this.borderSize = 0 - })); - Flex.onHover((e => { - this.frontColor = e ? "#0d000000" : this.isActive ? "#1a0a59f7" : Color.Transparent.toString() - })); - Flex.onTouch((e => { - e.type == TouchType.Down && (this.frontColor = "#1a000000"); - e.type == TouchType.Up && (this.frontColor = this.isActive ? "#1a0a59f7" : Color.Transparent.toString()) - })); - Flex.onClick((() => { - this.isActive = !this.isActive; - this.frontColor = this.isActive ? "#1a0a59f7" : Color.Transparent.toString() - })); - t || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null == this.contentItem ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ContentItemStruct(this, { - title: null - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.contentItem ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ContentItemStruct(this, { - icon: "string" == typeof this.contentItem.icon ? null : this.contentItem.icon, - iconStyle: this.contentItem.iconStyle, - title: "string" == typeof this.contentItem.primaryText ? this.contentItem.primaryText : null, - subtitle: "string" == typeof this.contentItem.secondaryText ? this.contentItem.secondaryText : null, - description: "string" == typeof this.contentItem.description ? this.contentItem.description : null - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.operateItem ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new OperateItemStruct(this, { - icon: this.operateItem.icon, - subIcon: this.operateItem.subIcon, - button: this.operateItem.button, - switch: this.operateItem.switch, - checkBox: this.operateItem.checkbox, - radio: this.operateItem.radio, - image: "string" == typeof this.operateItem.image ? null : this.operateItem.image, - text: "string" == typeof this.operateItem.text ? this.operateItem.text : null, - arrow: "string" == typeof this.operateItem.arrow ? null : this.operateItem.arrow - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Flex.pop(); - Column.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -export default { IconType, ComposeListItem }; \ No newline at end of file diff --git a/interface/composetitlebar/BUILD.gn b/interface/composetitlebar/BUILD.gn deleted file mode 100755 index f953441..0000000 --- a/interface/composetitlebar/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_composetitlebar_abc") { - src_js = rebase_path("composetitlebar.js") - dst_file = rebase_path(target_out_dir + "/composetitlebar.abc") - in_puts = [ "composetitlebar.js" ] - out_puts = [ target_out_dir + "/composetitlebar.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("composetitlebar_abc") { - input = get_label_info(":gen_composetitlebar_abc", "target_out_dir") + "/composetitlebar.abc" - output = target_out_dir + "/composetitlebar_abc.o" - dep = ":gen_composetitlebar_abc" -} - -ohos_shared_library("composetitlebar") { - sources = [ "composetitlebar.cpp" ] - - deps = [ ":composetitlebar_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} diff --git a/interface/composetitlebar/composetitlebar.cpp b/interface/composetitlebar/composetitlebar.cpp deleted file mode 100644 index efe49d9..0000000 --- a/interface/composetitlebar/composetitlebar.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_composetitlebar_abc_start[]; -extern const char _binary_composetitlebar_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_ComposeTitleBar_GetABCCode(const char **buf, int *buflen) - { - if (buf != nullptr) { - *buf = _binary_composetitlebar_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_composetitlebar_abc_end - _binary_composetitlebar_abc_start; - } - } - - -static napi_module composetitlebarModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.ComposeTitleBar", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void composetitlebarRegisterModule(void) -{ - napi_module_register(&composetitlebarModule); -} \ No newline at end of file diff --git a/interface/composetitlebar/composetitlebar.js b/interface/composetitlebar/composetitlebar.js deleted file mode 100644 index cff24b9..0000000 --- a/interface/composetitlebar/composetitlebar.js +++ /dev/null @@ -1,714 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var __decorate = this && this.__decorate || function(e, t, o, i) { - var s, r = arguments.length, - n = r < 3 ? t : null === i ? i = Object.getOwnPropertyDescriptor(t, o) : i; - if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) n = Reflect.decorate(e, t, o, i); - else - for (var c = e.length - 1; c >= 0; c--)(s = e[c]) && (n = (r < 3 ? s(n) : r > 3 ? s(t, o, n) : s(t, o)) || n); - return r > 3 && n && Object.defineProperty(t, o, n), n -}; -const KeyCode = requireNapi('multimodalInput.keyCode').KeyCode; -const PUBLIC_MORE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABEZJREFUeNrt3D1rFFEUBuAxhmAhFlYpUohYiYWFRcAmKAhWK2pjo1iKf8BCMIKFf8BarCyMhVj4VZhGSKEg2FqJyCKWIhYWnstMINgYsh+cmfs88BICydxw7jmzu2HvNg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBN+3r6dx+LXIqsRpa7FF8j48hm5Fn3Peo9mAEYRdYjJ3f582Vj7nZfUe/eDsCRyMPI2h5/fyNyI/JDT6v3Tvt7sBllE15ETkxwjeORi5G3ke/6W737MgBnI68jh6ZwrcORq5HnhkC9+zAA5YXXy8jBKV5zKXIu8jjyS7+rd+YBeNVtyrSVO9PRyBM9r94LSTfjWuTUDK9/eYIXeENUbb0zDsBi5PYc1rmj79U74wCszuih+F/ljrSi/+uud8YBGA10rayqrnfGAVgb6FpZVV3vjAOwPNC1sqq63hkHYGWga2VVdb0XKt/8Rf1fd70zDsB4jmt5u3Tl9a59AMb6v+56ZxyArYGulVXV9c44ABtzXOup/q+73hkH4N2cHio/Rj7r/7rrnXEAfkfuz2Gddb2v3ln/DfpgxneLzaY9xE3l9c46AH8iVyI/Z3Dt8nB/Xc+rd5H5QMy3yJemPVs6zY0edc9HUe/0Z4I/dQ/N5Vjd0oTXKp9QcKFpD2qj3r0YgO1NeRM507TH6/bifeR85IMeV++d+vTBWOV9JDcjt5rdv6uw3M3uRR7pa/Xu+wBsOxA53bTnTP/3UX1b3fNQ1BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqyr6d/97HIpchqZLlL8TUyjmxGnnXfo96DGYBRZD1ycpc/XzbmbvcV9e7tAByJPIys7fH3NyI3Ij/0tHrvtL8Hm1E24UXkxATXOB65GHkb+a6/1bsvA3A28jpyaArXOhy5GnluCNS7DwNQXni9jByc4jWXIucijyO/9Lt6Zx6AV92mTFu5Mx2NPNHz6r2QdDOuRU7N8PqXJ3iBN0TV1jvjACxGbs9hnTv6Xr0zDsDqjB6K/1XuSCv6v+56ZxyA0UDXyqrqemccgLWBrpVV1fXOOADLA10rq6rrnXEAVga6VlZV13uh8s1f1P911zvjAIznuJa3S1de79oHYKz/6653xgHYGuhaWVVd74wDsDHHtZ7q/7rrnXEA3s3pofJj5LP+r7veGQfgd+T+HNZZ1/vqnfXfoA9mfLfYbNpD3FRe76wD8CdyJfJzBtcuD/fX9bx6F5kPxHyLfGnas6XT3OhR93wU9U5/JvhT99BcjtUtTXit8gkFF5r2oDbq3YsB2N6UN5EzTXu8bi/eR85HPuhx9d6pTx+MVd5HcjNyq9n9uwrL3exe5JG+Vu++D8C2A5HTTXvO9H8f1bfVPQ9FvQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCn7C9HjBtwWfXpKAAAAAElFTkSuQmCC"; -const PUBLIC_BACK = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA8VJREFUeNrt3LFLlHEYwPFXz0GiIZpEoikkwsFRIiK3gqCigxIC/4Kmhv6OoChouaGoqKCgCKducGh0cDAIamhwiCaHCIeelztpUszee/vl8/nAM3Vd8nufr+fddVYVAAAAAAAAAAAAAAAAAAAAAABQijFH0KhrMd2Y2ZitmNWYRzHLjkYAB9lUzMOYizv8eS/mZsymoypLxxE0svzvY07vcpu5mOmY145LAAdx+U/u4bZzwx+JPjq2cow7glaWf1vXsQkg6/JvPwoggJTLjwDSL/8nRyiAzN/5nzpGAWRd/n7MM0cpgIzLvx6z6CjL453gdpZ/IWbDcQrA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD8CMDyIwDLjwAsPwKw/AjA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD85A3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPLz3xlv6H4mYp5YfrI+AizF9BwnI/AlZi3mbsxy03feaeh+HsQcc60YgSMxMzE3YmZj3sX8LOlHoPoLnHedaEE35n5pzwF856dN9SPBpZICmHRNaNnlkgL46nrQsvmSAqhftlx1TWjR4ZICqPVcE1q0XloA96rBa7XQhl5pAWzFXKm8i8vo9WMeN3VnnQa/sO8xL2POxEy7Toxo+RdjNpu6w1F9HuBqNXi99lw1eKMM9utHzIeYV8MftbccCQAAAAAAsBdt/XLc+sPy9W+MmPqL+1iJuVA1+C4gdFr6d77FvK0GH2nb739lPR5zNuZ51eBnQhFAJQIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE8M8jmBlGgABSRnAqZiXms+MUQNYIDnkUKMu4I/gj6zELMRv7/PsnHKEAMkcw6fgEkDmCNUcngMwRvHFsngRnfWJcL/9tRyaAgxrB+ZijO9ymH7MUs+m4yjLmCBozEXMr5nr1+9We1ZgXMXccDwAAAAAAAAAAAAAAAAAAAAAAwO5+AfVgtqHKRnawAAAAAElFTkSuQmCC"; -export class ComposeTitleBar extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.item = void 0; - this.title = void 0; - this.subtitle = void 0; - this.menuItems = void 0; - this.__titleMaxWidth = new ObservedPropertySimplePU(0, this, "titleMaxWidth"); - this.__isItemOnFocus = new ObservedPropertySimplePU(!1, this, "isItemOnFocus"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.item && (this.item = e.item); - void 0 !== e.title && (this.title = e.title); - void 0 !== e.subtitle && (this.subtitle = e.subtitle); - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.titleMaxWidth && (this.titleMaxWidth = e.titleMaxWidth); - void 0 !== e.isItemOnFocus && (this.isItemOnFocus = e.isItemOnFocus) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__titleMaxWidth.purgeDependencyOnElmtId(e); - this.__isItemOnFocus.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__titleMaxWidth.aboutToBeDeleted(); - this.__isItemOnFocus.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get titleMaxWidth() { - return this.__titleMaxWidth.get() - } - set titleMaxWidth(e) { - this.__titleMaxWidth.set(e) - } - get isItemOnFocus() { - return this.__isItemOnFocus.get() - } - set isItemOnFocus(e) { - this.__isItemOnFocus.set(e) - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Flex.create({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }); - Flex.width("100%"); - Flex.height(ComposeTitleBar.totalHeight); - Flex.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }); - Flex.onAreaChange(((e, t) => { - let o = Number(t.width); - if (void 0 !== this.menuItems) { - let e = this.menuItems.length; - e >= CollapsibleMenuSection.maxCountOfVisibleItems ? o -= ImageMenuItem.imageHotZoneWidth * CollapsibleMenuSection.maxCountOfVisibleItems : e > 0 && (o -= ImageMenuItem.imageHotZoneWidth * e) - } - this.titleMaxWidth = o; - this.titleMaxWidth -= ComposeTitleBar.leftPadding; - this.titleMaxWidth -= ImageMenuItem.imageHotZoneWidth; - void 0 !== this.item && (this.titleMaxWidth -= ComposeTitleBar.portraitImageLeftPadding + ComposeTitleBar.portraitImageSize + ComposeTitleBar.portraitImageRightPadding); - this.titleMaxWidth -= ComposeTitleBar.rightPadding - })); - t || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_start"], - bundleName: "", - moduleName: "" - } - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Navigator.create(); - t || Navigator.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: { - value: PUBLIC_BACK, - isEnabled: !0 - } - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })); - Navigator.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.item ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.item.value); - Image.width(ComposeTitleBar.portraitImageSize); - Image.height(ComposeTitleBar.portraitImageSize); - Image.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_paragraph_margin_xs"], - bundleName: "", - moduleName: "" - }, - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_paragraph_margin_m"], - bundleName: "", - moduleName: "" - } - }); - Image.focusable(this.item.isEnabled); - Image.borderRadius(ImageMenuItem.buttonBorderRadius); - Image.onFocus((() => this.isItemOnFocus = !0)); - Image.onBlur((() => this.isItemOnFocus = !1)); - Image.border(this.isItemOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Image.onClick((() => this.item.isEnabled && this.item.action && this.item.action())); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.justifyContent(FlexAlign.Start); - Column.alignItems(HorizontalAlign.Start); - Column.constraintSize({ - maxWidth: this.titleMaxWidth - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.title ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.justifyContent(FlexAlign.Start); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.title); - Text.fontWeight(FontWeight.Medium); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline8"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_text"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(void 0 !== this.subtitle ? 1 : 2); - Text.textOverflow({ - overflow: TextOverflow.Ellipsis - }); - Text.constraintSize({ - maxWidth: this.titleMaxWidth - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.subtitle ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.justifyContent(FlexAlign.Start); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.subtitle); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_over_line"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_subtitle_text"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.textOverflow({ - overflow: TextOverflow.Ellipsis - }); - Text.constraintSize({ - maxWidth: this.titleMaxWidth - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Column.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.menuItems && this.menuItems.length > 0 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new CollapsibleMenuSection(this, { - menuItems: this.menuItems - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Flex.pop() - } - rerender() { - this.updateDirtyElements() - } -} -ComposeTitleBar.totalHeight = 56; -ComposeTitleBar.leftPadding = 12; -ComposeTitleBar.rightPadding = 12; -ComposeTitleBar.portraitImageSize = 40; -ComposeTitleBar.portraitImageLeftPadding = 4; -ComposeTitleBar.portraitImageRightPadding = 16; -class CollapsibleMenuSection extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.menuItems = void 0; - this.__isPopupShown = new ObservedPropertySimplePU(!1, this, "isPopupShown"); - this.__isMoreIconOnFocus = new ObservedPropertySimplePU(!1, this, "isMoreIconOnFocus"); - this.__isMoreIconOnHover = new ObservedPropertySimplePU(!1, this, "isMoreIconOnHover"); - this.__isMoreIconOnClick = new ObservedPropertySimplePU(!1, this, "isMoreIconOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.isPopupShown && (this.isPopupShown = e.isPopupShown); - void 0 !== e.isMoreIconOnFocus && (this.isMoreIconOnFocus = e.isMoreIconOnFocus); - void 0 !== e.isMoreIconOnHover && (this.isMoreIconOnHover = e.isMoreIconOnHover); - void 0 !== e.isMoreIconOnClick && (this.isMoreIconOnClick = e.isMoreIconOnClick) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__isPopupShown.purgeDependencyOnElmtId(e); - this.__isMoreIconOnFocus.purgeDependencyOnElmtId(e); - this.__isMoreIconOnHover.purgeDependencyOnElmtId(e); - this.__isMoreIconOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__isPopupShown.aboutToBeDeleted(); - this.__isMoreIconOnFocus.aboutToBeDeleted(); - this.__isMoreIconOnHover.aboutToBeDeleted(); - this.__isMoreIconOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get isPopupShown() { - return this.__isPopupShown.get() - } - set isPopupShown(e) { - this.__isPopupShown.set(e) - } - get isMoreIconOnFocus() { - return this.__isMoreIconOnFocus.get() - } - set isMoreIconOnFocus(e) { - this.__isMoreIconOnFocus.set(e) - } - get isMoreIconOnHover() { - return this.__isMoreIconOnHover.get() - } - set isMoreIconOnHover(e) { - this.__isMoreIconOnHover.set(e) - } - get isMoreIconOnClick() { - return this.__isMoreIconOnClick.get() - } - set isMoreIconOnClick(e) { - this.__isMoreIconOnClick.set(e) - } - getMoreIconFgColor() { - return this.isMoreIconOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon_pressed"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon"], - bundleName: "", - moduleName: "" - } - } - getMoreIconBgColor() { - return this.isMoreIconOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isMoreIconOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.height("100%"); - Column.margin({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_end"], - bundleName: "", - moduleName: "" - } - }); - Column.justifyContent(FlexAlign.Center); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.menuItems.length <= CollapsibleMenuSection.maxCountOfVisibleItems ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems, (e => { - const t = e; - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new ImageMenuItem(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems.slice(0, CollapsibleMenuSection.maxCountOfVisibleItems - 1), (e => { - const t = e; - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new ImageMenuItem(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(ImageMenuItem.imageHotZoneWidth); - Row.height(ImageMenuItem.imageHotZoneWidth); - Row.borderRadius(ImageMenuItem.buttonBorderRadius); - Row.foregroundColor(this.getMoreIconFgColor()); - Row.backgroundColor(this.getMoreIconBgColor()); - Row.justifyContent(FlexAlign.Center); - Row.border(this.isMoreIconOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Row.onFocus((() => this.isMoreIconOnFocus = !0)); - Row.onBlur((() => this.isMoreIconOnFocus = !1)); - Row.onHover((e => this.isMoreIconOnHover = e)); - Row.onKeyEvent((e => { - if (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE) { - e.type === KeyType.Down && (this.isMoreIconOnClick = !0); - e.type === KeyType.Up && (this.isMoreIconOnClick = !1) - } - })); - Row.onTouch((e => { - e.type === TouchType.Down && (this.isMoreIconOnClick = !0); - e.type === TouchType.Up && (this.isMoreIconOnClick = !1) - })); - Row.onClick((() => this.isPopupShown = !0)); - Row.bindPopup(this.isPopupShown, { - builder: { - builder: this.popupBuilder.bind(this) - }, - placement: Placement.Bottom, - popupColor: Color.White, - enableArrow: !1, - onStateChange: e => this.isPopupShown = e.isVisible - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(PUBLIC_MORE); - Image.width(ImageMenuItem.imageSize); - Image.height(ImageMenuItem.imageSize); - Image.focusable(!0); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Row.pop(); - Column.pop() - } - popupBuilder(e = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width(ImageMenuItem.imageHotZoneWidth + CollapsibleMenuSection.focusPadding * CollapsibleMenuSection.marginsNum); - Column.margin({ - top: CollapsibleMenuSection.focusPadding, - bottom: CollapsibleMenuSection.focusPadding - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems.slice(CollapsibleMenuSection.maxCountOfVisibleItems - 1, this.menuItems.length), ((e, t) => { - const o = e; - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: o - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - }), void 0, !0, !1); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - Column.pop() - } - rerender() { - this.updateDirtyElements() - } -} -CollapsibleMenuSection.maxCountOfVisibleItems = 3; -CollapsibleMenuSection.focusPadding = 4; -CollapsibleMenuSection.marginsNum = 2; -__decorate([], CollapsibleMenuSection.prototype, "popupBuilder", null); -class ImageMenuItem extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.item = void 0; - this.__isOnFocus = new ObservedPropertySimplePU(!1, this, "isOnFocus"); - this.__isOnHover = new ObservedPropertySimplePU(!1, this, "isOnHover"); - this.__isOnClick = new ObservedPropertySimplePU(!1, this, "isOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.item && (this.item = e.item); - void 0 !== e.isOnFocus && (this.isOnFocus = e.isOnFocus); - void 0 !== e.isOnHover && (this.isOnHover = e.isOnHover); - void 0 !== e.isOnClick && (this.isOnClick = e.isOnClick) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__isOnFocus.purgeDependencyOnElmtId(e); - this.__isOnHover.purgeDependencyOnElmtId(e); - this.__isOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__isOnFocus.aboutToBeDeleted(); - this.__isOnHover.aboutToBeDeleted(); - this.__isOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get isOnFocus() { - return this.__isOnFocus.get() - } - set isOnFocus(e) { - this.__isOnFocus.set(e) - } - get isOnHover() { - return this.__isOnHover.get() - } - set isOnHover(e) { - this.__isOnHover.set(e) - } - get isOnClick() { - return this.__isOnClick.get() - } - set isOnClick(e) { - this.__isOnClick.set(e) - } - getFgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon_pressed"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon"], - bundleName: "", - moduleName: "" - } - } - getBgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(ImageMenuItem.imageHotZoneWidth); - Row.height(ImageMenuItem.imageHotZoneWidth); - Row.borderRadius(ImageMenuItem.buttonBorderRadius); - Row.foregroundColor(this.getFgColor()); - Row.backgroundColor(this.getBgColor()); - Row.justifyContent(FlexAlign.Center); - Row.opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity); - Row.border(this.isOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Row.onFocus((() => { - this.item.isEnabled && (this.isOnFocus = !0) - })); - Row.onBlur((() => this.isOnFocus = !1)); - Row.onHover((e => { - this.item.isEnabled && (this.isOnHover = e) - })); - Row.onKeyEvent((e => { - if (this.item.isEnabled && (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE)) { - e.type === KeyType.Down && (this.isOnClick = !0); - e.type === KeyType.Up && (this.isOnClick = !1) - } - })); - Row.onTouch((e => { - if (this.item.isEnabled) { - e.type === TouchType.Down && (this.isOnClick = !0); - e.type === TouchType.Up && (this.isOnClick = !1) - } - })); - Row.onClick((() => this.item.isEnabled && this.item.action && this.item.action())); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.item.value); - Image.width(ImageMenuItem.imageSize); - Image.height(ImageMenuItem.imageSize); - Image.focusable(this.item.isEnabled); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - } - rerender() { - this.updateDirtyElements() - } -} -ImageMenuItem.imageSize = 24; -ImageMenuItem.imageHotZoneWidth = 48; -ImageMenuItem.buttonBorderRadius = 8; -ImageMenuItem.focusBorderWidth = 2; -ImageMenuItem.disabledImageOpacity = .4; -export default { - ComposeTitleBar: ComposeTitleBar -}; \ No newline at end of file diff --git a/interface/editabletitlebar/editabletitlebar.cpp b/interface/editabletitlebar/editabletitlebar.cpp deleted file mode 100644 index 2630a0d..0000000 --- a/interface/editabletitlebar/editabletitlebar.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_editabletitlebar_abc_start[]; -extern const char _binary_editabletitlebar_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_EditableTitleBar_GetABCCode(const char **buf, int *buflen) - { - if (buf != nullptr) { - *buf = _binary_editabletitlebar_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_editabletitlebar_abc_end - _binary_editabletitlebar_abc_start; - } - } - - -static napi_module editabletitlebarModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.EditableTitleBar", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void editabletitlebarRegisterModule(void) -{ - napi_module_register(&editabletitlebarModule); -} \ No newline at end of file diff --git a/interface/editabletitlebar/editabletitlebar.js b/interface/editabletitlebar/editabletitlebar.js deleted file mode 100644 index d3e9b68..0000000 --- a/interface/editabletitlebar/editabletitlebar.js +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const KeyCode = requireNapi('multimodalInput.keyCode').KeyCode; -export var EditableLeftIconType; -! function(e) { - e[e.Back = 0] = "Back"; - e[e.Cancel = 1] = "Cancel" -}(EditableLeftIconType || (EditableLeftIconType = {})); -const PUBLIC_CANCEL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABKpJREFUeNrt3bFrlHccx/Ff4o2dgkOQ4JzR4SYJgksnbYcGOrTQsUPtpE4d/RNcFBeFlg7NUlTSTrXQQgsKGV0KHTs4ODiJSL8PdxaUGJK7pPc893m94TvleZLnnt/7fcc9z5FrDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnDQrPTuej2u2a87VvKp5XLNT87OlGiSf1lx6Zz2/q3kkgLdZr7k5lX8/7tZ8XfOCU4OgW887U/n341bN9T6s56menLAfaj464OfdM8iF6XYv+dV7+X+pOX/ANuOatZqHAmjti5prh9jurAgGI//mIbbtIvi15u9FHvBqD07a50fYdqtmt+YDrg1a/jd8tuiD7kMA4yNuL4LlkH+WtV/KAEYz7COC4cs/69ovXQB7M+4ngmHLP8/aL1UAD+bYVwTDlX/etT8W+nAV6M82uQS6PuP+rg4NV/5vBNDa6za5HLY9xzO5CIYl/9OaT5obYf/xrE1uioggQ/6LNf/04QGd6tHJFQH5owMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDSI6A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI1gjfyLY8UpmJnNqbjrc/yO32pOk98rQPIrwWnyCyA5AvILQATkF4AIyC8AEZBfACIgvwBEQH4BiID8J8qqU3BiPJ8O+XuMO8Eng8/2CID85BcA+ckvAPKT35tg8h+n/KP2/3/2SADojfzf1+yKYH7cBxim/N39hWX8RnsBkP9Q8r9BBAKIlV8EAoiXXwQCiJdfBAKIl18EAoiXXwQz4D5A/+Tv2KjZmuPvdfu6T+AVYJDyd3Qfo17Gb7QXAPkPzTMRCCBVfhEIIF5+EQggXn4RCCBefhEIIF5+EQggXn4RCCBefhEIIF5+EQggXn4RCCBefhEIIF5+EQggXn4RCCBefhEIIF5+EQggXn4RCCBefhEIwD+qFUFuAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBdAD3a8bkj4rgTM2PAmjty5or5I+L4FzNHzV/LfKB9OGb4rfJP0iO49xvL/pB9CGAMfljIxgLoLUR+WMjGAmgtT3yx0awJ4DWdsgfG8HOog+6D1eBntR8WLNB/sFzlKtDnfw3BNDa65rfp2+I3hfBo5rL5B9UBFttcoNzP35qk8vfLxZ9sCs9OnHdG6Kvps8e3TXiVzWPp88Ut3k1OLr1vFpz6Z31/LbmntMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAO/wLvsR65mx80NAAAAABJRU5ErkJggg=="; -const PUBLIC_OK = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA+lJREFUeNrt3bFrFgccx+GLlSDi4JDBITiJZHBwEBGRIoqKoIu6iVMd3OosCg6W0sm/wEFUDDgpCDoIDoqOKqIoHUrp4CDFoUMRB39HLotoeXMpMXff54EfFE0ivv1+kpQGrmkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBJTHkJGIhddT/V7ajbUPey7l7dlbpPAmCs1tb9Wne2++cvPa07Vfd7nw/+g9eXVT7+m3Wn69Z8421m6w7WXa37KADGNv4TE7ztTN36uvtL/UPWeJ0Z+PgXnejzBwmAMYx/8VuhTQIgcfy9CYCxjP9D3TsBkPqZf95XAFLH3372vyAAEsf/T93Ruvd93tn/CWbo4z9c96jvBxAAseMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eP/HgG0z3f9uVl45uu2ZuGBBu3zXn9rej7mEuMfSgDtA46v1c195ff+rbtU94stGv9KWqnHpLaPsXxSt/k//iXsq9vY9HjUJca/2gNoH2e/c4K32yUC4x9bAOvqrjeTP41GBMY/qgC2151Z4vuIwPhXxEo8I2xdz/c7W3fZXo1/6F8B/q471/N9fSUw/sEH8LEb8hYRGH9iAK3HdafrpkVg/IkBtA8yflt3bBn/3SEC4x9sAK3Xda9EYPypAYjA+OMDEIHxxwcgAuOPD0AExh8fgAiMPz4AERh/fAAiMP74AERg/PEBiMD44wMQgfHHByAC448PQATGHx+ACIw/PgARGH98AMkRGL8AYiMwfgHERmD8AoiNwPgFEBuB8QsgNgLjF0BsBMYvgNgIjF8AsREYvwBiIzB+AcRGYPwCiI3A+AUQG4HxCyA2AuMXQGwExi+A2AiMXwCxERi/AGIjMH4BjDaCTXUP6j59423aJ2PeMH4BjDWCHd24n9f9+cXvHa+7U7fb+Fe/qeC/ezvU+e5bleX40A11pm6u+xapMX5fARK+Eix+u7O1brbp/1Bw4xfAoCP4Pxi/AGIjMH4BxEZg/AKIjcD4BRAbgfELIDYC4xdAbATGL4DYCIxfAIOL4EXdkbrpZX6sd3WH6p56WQUwJG/qbtX92Cz8EFwfD+sO1L31cq4uU16CibU/M3Sy7nzdlgnf51ndxbrbXj4BjCmEPXX76/Y2Cz8DNNP9+l91f3Sf8e92AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzKZwK1uX4kZ6mnAAAAAElFTkSuQmCC"; -const PUBLIC_BACK = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA8VJREFUeNrt3LFLlHEYwPFXz0GiIZpEoikkwsFRIiK3gqCigxIC/4Kmhv6OoChouaGoqKCgCKducGh0cDAIamhwiCaHCIeelztpUszee/vl8/nAM3Vd8nufr+fddVYVAAAAAAAAAAAAAAAAAAAAAABQijFH0KhrMd2Y2ZitmNWYRzHLjkYAB9lUzMOYizv8eS/mZsymoypLxxE0svzvY07vcpu5mOmY145LAAdx+U/u4bZzwx+JPjq2cow7glaWf1vXsQkg6/JvPwoggJTLjwDSL/8nRyiAzN/5nzpGAWRd/n7MM0cpgIzLvx6z6CjL453gdpZ/IWbDcQrA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD8CMDyIwDLjwAsPwKw/AjA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD85A3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPLz3xlv6H4mYp5YfrI+AizF9BwnI/AlZi3mbsxy03feaeh+HsQcc60YgSMxMzE3YmZj3sX8LOlHoPoLnHedaEE35n5pzwF856dN9SPBpZICmHRNaNnlkgL46nrQsvmSAqhftlx1TWjR4ZICqPVcE1q0XloA96rBa7XQhl5pAWzFXKm8i8vo9WMeN3VnnQa/sO8xL2POxEy7Toxo+RdjNpu6w1F9HuBqNXi99lw1eKMM9utHzIeYV8MftbccCQAAAAAAsBdt/XLc+sPy9W+MmPqL+1iJuVA1+C4gdFr6d77FvK0GH2nb739lPR5zNuZ51eBnQhFAJQIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE8M8jmBlGgABSRnAqZiXms+MUQNYIDnkUKMu4I/gj6zELMRv7/PsnHKEAMkcw6fgEkDmCNUcngMwRvHFsngRnfWJcL/9tRyaAgxrB+ZijO9ymH7MUs+m4yjLmCBozEXMr5nr1+9We1ZgXMXccDwAAAAAAAAAAAAAAAAAAAAAAwO5+AfVgtqHKRnawAAAAAElFTkSuQmCC"; -export class EditableTitleBar extends ViewPU { - constructor(e, t, A, i = -1) { - super(e, A, i); - this.leftIconStyle = void 0; - this.title = void 0; - this.menuItems = void 0; - this.onSave = void 0; - this.onCancel = void 0; - this.__titleMaxWidth = new ObservedPropertySimplePU(0, this, "titleMaxWidth"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.leftIconStyle && (this.leftIconStyle = e.leftIconStyle); - void 0 !== e.title && (this.title = e.title); - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.onSave && (this.onSave = e.onSave); - void 0 !== e.onCancel && (this.onCancel = e.onCancel); - void 0 !== e.titleMaxWidth && (this.titleMaxWidth = e.titleMaxWidth) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__titleMaxWidth.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__titleMaxWidth.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get titleMaxWidth() { - return this.__titleMaxWidth.get() - } - set titleMaxWidth(e) { - this.__titleMaxWidth.set(e) - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Flex.create({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }); - Flex.width("100%"); - Flex.height(EditableTitleBar.totalHeight); - Flex.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }); - Flex.onAreaChange(((e, t) => { - let A = Number(t.width); - A = A - EditableTitleBar.leftPadding - EditableTitleBar.rightPadding - EditableTitleBar.titlePadding; - A = A - ImageMenuItem.imageHotZoneWidth - ImageMenuItem.imageHotZoneWidth; - void 0 !== this.menuItems ? this.menuItems.length > EditableTitleBar.maxCountOfExtraItems ? this.titleMaxWidth = A - ImageMenuItem.imageHotZoneWidth * EditableTitleBar.maxCountOfExtraItems : this.titleMaxWidth = A - ImageMenuItem.imageHotZoneWidth * this.menuItems.length : this.titleMaxWidth = A - })); - t || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_start"], - bundleName: "", - moduleName: "" - } - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.leftIconStyle == EditableLeftIconType.Back ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Navigator.create(); - t || Navigator.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: { - value: PUBLIC_BACK, - isEnabled: !0 - } - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })); - Navigator.pop() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: { - value: PUBLIC_CANCEL, - isEnabled: !0, - action: () => this.onCancel && this.onCancel() - } - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.justifyContent(FlexAlign.Start); - Column.alignItems(HorizontalAlign.Start); - Column.constraintSize({ - maxWidth: this.titleMaxWidth - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.title); - Text.fontWeight(FontWeight.Medium); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline8"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_text"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.textOverflow({ - overflow: TextOverflow.Ellipsis - }); - Text.constraintSize({ - maxWidth: this.titleMaxWidth - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Column.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new EditableTitleBarMenuSection(this, { - menuItems: this.menuItems, - onSave: this.onSave - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })); - Flex.pop() - } - rerender() { - this.updateDirtyElements() - } -} -EditableTitleBar.maxCountOfExtraItems = 2; -EditableTitleBar.totalHeight = 56; -EditableTitleBar.leftPadding = 12; -EditableTitleBar.rightPadding = 12; -EditableTitleBar.titlePadding = 16; -class EditableTitleBarMenuSection extends ViewPU { - constructor(e, t, A, i = -1) { - super(e, A, i); - this.menuItems = void 0; - this.onSave = void 0; - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.onSave && (this.onSave = e.onSave) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) {} - aboutToBeDeleted() { - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_elements_margin_vertical_l"], - bundleName: "", - moduleName: "" - }, - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_end"], - bundleName: "", - moduleName: "" - } - }); - Column.justifyContent(FlexAlign.Center); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.menuItems && this.menuItems.length > 0 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems.slice(0, EditableTitleBar.maxCountOfExtraItems), (e => { - const t = e; - this.observeComponentCreation(((e, A) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - A ? ViewPU.create(new ImageMenuItem(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: { - value: PUBLIC_OK, - isEnabled: !0, - action: () => this.onSave && this.onSave() - } - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop(); - Column.pop() - } - rerender() { - this.updateDirtyElements() - } -} -class ImageMenuItem extends ViewPU { - constructor(e, t, A, i = -1) { - super(e, A, i); - this.item = void 0; - this.__isOnFocus = new ObservedPropertySimplePU(!1, this, "isOnFocus"); - this.__isOnHover = new ObservedPropertySimplePU(!1, this, "isOnHover"); - this.__isOnClick = new ObservedPropertySimplePU(!1, this, "isOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.item && (this.item = e.item); - void 0 !== e.isOnFocus && (this.isOnFocus = e.isOnFocus); - void 0 !== e.isOnHover && (this.isOnHover = e.isOnHover); - void 0 !== e.isOnClick && (this.isOnClick = e.isOnClick) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__isOnFocus.purgeDependencyOnElmtId(e); - this.__isOnHover.purgeDependencyOnElmtId(e); - this.__isOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__isOnFocus.aboutToBeDeleted(); - this.__isOnHover.aboutToBeDeleted(); - this.__isOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get isOnFocus() { - return this.__isOnFocus.get() - } - set isOnFocus(e) { - this.__isOnFocus.set(e) - } - get isOnHover() { - return this.__isOnHover.get() - } - set isOnHover(e) { - this.__isOnHover.set(e) - } - get isOnClick() { - return this.__isOnClick.get() - } - set isOnClick(e) { - this.__isOnClick.set(e) - } - getFgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon_pressed"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon"], - bundleName: "", - moduleName: "" - } - } - getBgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(ImageMenuItem.imageHotZoneWidth); - Row.height(ImageMenuItem.imageHotZoneWidth); - Row.borderRadius(ImageMenuItem.buttonBorderRadius); - Row.foregroundColor(this.getFgColor()); - Row.backgroundColor(this.getBgColor()); - Row.justifyContent(FlexAlign.Center); - Row.opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity); - Row.border(this.isOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Row.onFocus((() => { - this.item.isEnabled && (this.isOnFocus = !0) - })); - Row.onBlur((() => this.isOnFocus = !1)); - Row.onHover((e => { - this.item.isEnabled && (this.isOnHover = e) - })); - Row.onKeyEvent((e => { - if (this.item.isEnabled && (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE)) { - e.type === KeyType.Down && (this.isOnClick = !0); - e.type === KeyType.Up && (this.isOnClick = !1) - } - })); - Row.onTouch((e => { - if (this.item.isEnabled) { - e.type === TouchType.Down && (this.isOnClick = !0); - e.type === TouchType.Up && (this.isOnClick = !1) - } - })); - Row.onClick((() => this.item.isEnabled && this.item.action && this.item.action())); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.item.value); - Image.width(ImageMenuItem.imageSize); - Image.height(ImageMenuItem.imageSize); - Image.focusable(this.item.isEnabled); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - } - rerender() { - this.updateDirtyElements() - } -} -ImageMenuItem.imageSize = 24; -ImageMenuItem.imageHotZoneWidth = 48; -ImageMenuItem.buttonBorderRadius = 8; -ImageMenuItem.focusBorderWidth = 2; -ImageMenuItem.disabledImageOpacity = .4; -export default { - EditableLeftIconType: EditableLeftIconType, - EditableTitleBar: EditableTitleBar -}; \ No newline at end of file diff --git a/interface/filter/filter.cpp b/interface/filter/filter.cpp deleted file mode 100644 index c3321f4..0000000 --- a/interface/filter/filter.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_filter_abc_start[]; -extern const char _binary_filter_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_Filter_GetABCCode(const char **buf, int *buflen) -{ - if (buf != nullptr) { - *buf = _binary_filter_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_filter_abc_end - _binary_filter_abc_start; - } -} - -/* - * Module define - */ -static napi_module filterModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.Filter", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; -/* - * Module register function - */ -extern "C" __attribute__((constructor)) void filterRegisterModule(void) -{ - napi_module_register(&filterModule); -} diff --git a/interface/filter/filter.js b/interface/filter/filter.js deleted file mode 100644 index efb762d..0000000 --- a/interface/filter/filter.js +++ /dev/null @@ -1,2169 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const curves = requireNativeModule('ohos.curves'); -const measure = requireNapi('measure'); - -var __decorate = this && this.__decorate || function (o, e, t, r) { - var i, s = arguments.length, n = s < 3 ? e : null === r ? r = Object.getOwnPropertyDescriptor(e, t) : r; - if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) n = Reflect.decorate(o, e, t, r); else for (var a = o.length - 1;a >= 0; a--) (i = o[a]) && (n = (s < 3 ? i(n) : s > 3 ? i(e, t, n) : i(e, t)) || n); - return s > 3 && n && Object.defineProperty(e, t, n), n -}; - -const TEXT_HOT_AREA_WIDTH = 8; -const LIST_ROW_HEIGHT = 40; -const ARROW_IMG_SIZE = 24; -const MULTI_LINE_PADDING = 24; -const BAR_ANIMATION_DURATION = 150; -const ARROW_ANIMATION_DURATION = 200; -const ANIMATION_DURATION_250 = 250; -const ANIMATION_DURATION_100 = 100; -const FILTER_TOP_PADDING = 8; -const SEPARATOR_HEIGHT = 16; -const SEPARATOR_WIDTH = 1; -const FLOAT_OPACITY = .95; -const FILTER_FONT_SIZE = 12; -const FOCUS_BORDER_WIDTH = 2; -const ARROW_SHOW_DELAY = 300; -const PERCENT_100 = "100%"; -const SHARP_CUBIC_BEZIER = curves.cubicBezierCurve(.33, 0, .67, 1); -const INTER_POLATING_SPRING = curves.interpolatingSpring(0, 1, 328, 34); -const FRICTION_CUBIC_BEZIER = curves.cubicBezierCurve(.2, 0, .2, 1); -const TRANS_COLOR = "#00FFFFFF"; -const KEYCODE_SPACE = 2050; -const KEYCODE_ENTER = 2054; - -export var FilterType; -!function(o){ - o[o.MULTI_LINE_FILTER=0] = "MULTI_LINE_FILTER"; - o[o.LIST_FILTER=1] = "LIST_FILTER" -}(FilterType || (FilterType = {})); -let FontWeightArray = class extends Array { -}; -FontWeightArray = __decorate([Observed], FontWeightArray); -let ResourceArray = class extends Array { -}; -ResourceArray = __decorate([Observed], ResourceArray); -let BooleanArray = class extends Array { -}; -BooleanArray = __decorate([Observed], BooleanArray); -let ObservedBoolean = class { - constructor(o) { - this.value = o - } -}; -ObservedBoolean = __decorate([Observed], ObservedBoolean); - -export { ObservedBoolean }; -let ObservedNumber = class { - constructor(o) { - this.value = o - } -}; -ObservedNumber = __decorate([Observed], ObservedNumber); - -class ListFilterRow extends ViewPU { - constructor(o, e, t, r = -1) { - super(o, t, r); - this.__colorRow = new SynchedPropertyNesedObjectPU(e.colorRow, this, "colorRow"); - this.__fontWeightRow = new SynchedPropertyNesedObjectPU(e.fontWeightRow, this, "fontWeightRow"); - this.__backgroundColorRow = new SynchedPropertyNesedObjectPU(e.backgroundColorRow, this, "backgroundColorRow"); - this.__isBackgroundHoverRow = new SynchedPropertyNesedObjectPU(e.isBackgroundHoverRow, this, "isBackgroundHoverRow"); - this.filterRow = void 0; - this.onItemClick = void 0; - this.setInitiallyProvidedValue(e) - } - - setInitiallyProvidedValue(o) { - this.__colorRow.set(o.colorRow); - this.__fontWeightRow.set(o.fontWeightRow); - this.__backgroundColorRow.set(o.backgroundColorRow); - this.__isBackgroundHoverRow.set(o.isBackgroundHoverRow); - void 0 !== o.filterRow && (this.filterRow = o.filterRow); - void 0 !== o.onItemClick && (this.onItemClick = o.onItemClick) - } - - updateStateVars(o) { - this.__colorRow.set(o.colorRow); - this.__fontWeightRow.set(o.fontWeightRow); - this.__backgroundColorRow.set(o.backgroundColorRow); - this.__isBackgroundHoverRow.set(o.isBackgroundHoverRow) - } - - purgeVariableDependenciesOnElmtId(o) { - this.__colorRow.purgeDependencyOnElmtId(o); - this.__fontWeightRow.purgeDependencyOnElmtId(o); - this.__backgroundColorRow.purgeDependencyOnElmtId(o); - this.__isBackgroundHoverRow.purgeDependencyOnElmtId(o) - } - - aboutToBeDeleted() { - this.__colorRow.aboutToBeDeleted(); - this.__fontWeightRow.aboutToBeDeleted(); - this.__backgroundColorRow.aboutToBeDeleted(); - this.__isBackgroundHoverRow.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get colorRow() { - return this.__colorRow.get() - } - - get fontWeightRow() { - return this.__fontWeightRow.get() - } - - get backgroundColorRow() { - return this.__backgroundColorRow.get() - } - - get isBackgroundHoverRow() { - return this.__isBackgroundHoverRow.get() - } - - initialRender() { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - List.create(); - List.listDirection(Axis.Horizontal); - List.margin({ left: -16 }); - List.scrollBar(BarState.Off); - List.width("100%"); - List.height(40); - List.align(Alignment.Start); - e || List.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - ForEach.create(); - this.forEachUpdateFunction(o, this.filterRow.options, ((o, e) => { - const t = o; - { - const o = !0; - const r = (t, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - ListItem.create(s, o); - ListItem.height("100%"); - ListItem.onClick((() => { - this.onItemClick(e) - })); - ListItem.focusable(!0); - ViewStackProcessor.visualState("focused"); - ListItem.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 2, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - }); - ListItem.padding({ left: 6, right: 6 }); - ViewStackProcessor.visualState("normal"); - ListItem.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 0 - }); - ListItem.padding({ left: 8, right: 8 }); - ViewStackProcessor.visualState(); - ListItem.backgroundColor(this.isBackgroundHoverRow[e] ? this.backgroundColorRow[e] : "#00FFFFFF"); - ListItem.onHover((o => { - Context.animateTo({ curve: FRICTION_CUBIC_BEZIER, duration: 250 }, (() => { - if (o) { - this.backgroundColorRow[e] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }; - this.isBackgroundHoverRow[e] = !0 - } else this.isBackgroundHoverRow[e] = !1 - })) - })); - ListItem.onTouch((o => { - o.type === TouchType.Down ? Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.backgroundColorRow[e] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - }; - this.isBackgroundHoverRow[e] = !0 - })) : o.type === TouchType.Up && Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.isBackgroundHoverRow[e] = !1 - })) - })); - r || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording() - }; - const i = () => { - this.observeComponentCreation(r); - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(t.toString()); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.fontColor(this.colorRow[e]); - Text.fontWeight(this.fontWeightRow[e]); - Text.focusable(!0); - r || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - ListItem.pop() - }; - const s = (o, i) => { - r(o, i); - this.updateFuncByElmtId.set(o, r); - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(t.toString()); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.fontColor(this.colorRow[e]); - Text.fontWeight(this.fontWeightRow[e]); - Text.focusable(!0); - r || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - ListItem.pop() - }; - o ? (() => { - this.observeComponentCreation(r); - ListItem.pop() - })() : i() - } - }), void 0,!0,!1); - e || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - List.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -class MultiFilterRow extends ViewPU { - constructor(o, e, t, r = -1) { - super(o, t, r); - this.__colorRow = new SynchedPropertyNesedObjectPU(e.colorRow, this, "colorRow"); - this.__fontWeightRow = new SynchedPropertyNesedObjectPU(e.fontWeightRow, this, "fontWeightRow"); - this.__backgroundColorRow = new SynchedPropertyNesedObjectPU(e.backgroundColorRow, this, "backgroundColorRow"); - this.__isBackgroundHoverRow = new SynchedPropertyNesedObjectPU(e.isBackgroundHoverRow, this, "isBackgroundHoverRow"); - this.__twoLineModeItemNumRow = new SynchedPropertyNesedObjectPU(e.twoLineModeItemNumRow, this, "twoLineModeItemNumRow"); - this.__twoLineModeItemNumRecordRow = new SynchedPropertyNesedObjectPU(e.twoLineModeItemNumRecordRow, this, "twoLineModeItemNumRecordRow"); - this.__arrowShowStateRow = new SynchedPropertyNesedObjectPU(e.arrowShowStateRow, this, "arrowShowStateRow"); - this.__isArrowIconDown = new SynchedPropertyNesedObjectPU(e.isArrowIconDown, this, "isArrowIconDown"); - this.filterRow = null; - this.onItemClick = void 0; - this.__arrowBgColorRow = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }, this, "arrowBgColorRow"); - this.__isArrowBgHoverRow = new ObservedPropertySimplePU(!1, this, "isArrowBgHoverRow"); - this.filterColumnWidth = 0; - this.setInitiallyProvidedValue(e) - } - - setInitiallyProvidedValue(o) { - this.__colorRow.set(o.colorRow); - this.__fontWeightRow.set(o.fontWeightRow); - this.__backgroundColorRow.set(o.backgroundColorRow); - this.__isBackgroundHoverRow.set(o.isBackgroundHoverRow); - this.__twoLineModeItemNumRow.set(o.twoLineModeItemNumRow); - this.__twoLineModeItemNumRecordRow.set(o.twoLineModeItemNumRecordRow); - this.__arrowShowStateRow.set(o.arrowShowStateRow); - this.__isArrowIconDown.set(o.isArrowIconDown); - void 0 !== o.filterRow && (this.filterRow = o.filterRow); - void 0 !== o.onItemClick && (this.onItemClick = o.onItemClick); - void 0 !== o.arrowBgColorRow && (this.arrowBgColorRow = o.arrowBgColorRow); - void 0 !== o.isArrowBgHoverRow && (this.isArrowBgHoverRow = o.isArrowBgHoverRow); - void 0 !== o.filterColumnWidth && (this.filterColumnWidth = o.filterColumnWidth) - } - - updateStateVars(o) { - this.__colorRow.set(o.colorRow); - this.__fontWeightRow.set(o.fontWeightRow); - this.__backgroundColorRow.set(o.backgroundColorRow); - this.__isBackgroundHoverRow.set(o.isBackgroundHoverRow); - this.__twoLineModeItemNumRow.set(o.twoLineModeItemNumRow); - this.__twoLineModeItemNumRecordRow.set(o.twoLineModeItemNumRecordRow); - this.__arrowShowStateRow.set(o.arrowShowStateRow); - this.__isArrowIconDown.set(o.isArrowIconDown) - } - - purgeVariableDependenciesOnElmtId(o) { - this.__colorRow.purgeDependencyOnElmtId(o); - this.__fontWeightRow.purgeDependencyOnElmtId(o); - this.__backgroundColorRow.purgeDependencyOnElmtId(o); - this.__isBackgroundHoverRow.purgeDependencyOnElmtId(o); - this.__twoLineModeItemNumRow.purgeDependencyOnElmtId(o); - this.__twoLineModeItemNumRecordRow.purgeDependencyOnElmtId(o); - this.__arrowShowStateRow.purgeDependencyOnElmtId(o); - this.__isArrowIconDown.purgeDependencyOnElmtId(o); - this.__arrowBgColorRow.purgeDependencyOnElmtId(o); - this.__isArrowBgHoverRow.purgeDependencyOnElmtId(o) - } - - aboutToBeDeleted() { - this.__colorRow.aboutToBeDeleted(); - this.__fontWeightRow.aboutToBeDeleted(); - this.__backgroundColorRow.aboutToBeDeleted(); - this.__isBackgroundHoverRow.aboutToBeDeleted(); - this.__twoLineModeItemNumRow.aboutToBeDeleted(); - this.__twoLineModeItemNumRecordRow.aboutToBeDeleted(); - this.__arrowShowStateRow.aboutToBeDeleted(); - this.__isArrowIconDown.aboutToBeDeleted(); - this.__arrowBgColorRow.aboutToBeDeleted(); - this.__isArrowBgHoverRow.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get colorRow() { - return this.__colorRow.get() - } - - get fontWeightRow() { - return this.__fontWeightRow.get() - } - - get backgroundColorRow() { - return this.__backgroundColorRow.get() - } - - get isBackgroundHoverRow() { - return this.__isBackgroundHoverRow.get() - } - - get twoLineModeItemNumRow() { - return this.__twoLineModeItemNumRow.get() - } - - get twoLineModeItemNumRecordRow() { - return this.__twoLineModeItemNumRecordRow.get() - } - - get arrowShowStateRow() { - return this.__arrowShowStateRow.get() - } - - get isArrowIconDown() { - return this.__isArrowIconDown.get() - } - - get arrowBgColorRow() { - return this.__arrowBgColorRow.get() - } - - set arrowBgColorRow(o) { - this.__arrowBgColorRow.set(o) - } - - get isArrowBgHoverRow() { - return this.__isArrowBgHoverRow.get() - } - - set isArrowBgHoverRow(o) { - this.__isArrowBgHoverRow.set(o) - } - - calcMultiFilterRowItemNum() { - var o = this.filterColumnWidth - vp2px(24); - var e = 0; - var t = 1; - for (var r = 0;r < this.filterRow.options.length; r++) { - let i = this.filterRow.options[r]; - let s = measure.measureText({ textContent: i, fontSize: 12 }); - if (0 !== r) { - s += vp2px(16); - if (o - s > 0) { - o -= s; - e += 1 - } else { - if (0 === e) { - e++; - o = 0 - } - if (1 !== t) break; - t += 1; - o = this.filterColumnWidth - vp2px(24) - vp2px(24); - r-- - } - } - } - return e - } - - DownAndUpArrow(o = null) { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - } - }); - Row.height(40); - Row.width(24); - Row.backgroundColor(this.isArrowBgHoverRow ? this.arrowBgColorRow : "#00FFFFFF"); - Row.focusable(!0); - Row.visibility(this.arrowShowStateRow.value ? Visibility.Visible : Visibility.Hidden); - Row.onHover((o => { - Context.animateTo({ curve: FRICTION_CUBIC_BEZIER, duration: 250 }, (() => { - if (o) { - this.arrowBgColorRow = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }; - this.isArrowBgHoverRow = !0 - } else this.isArrowBgHoverRow = !1 - })) - })); - Row.onTouch((o => { - o.type === TouchType.Down ? Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.arrowBgColorRow = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - }; - this.isArrowBgHoverRow = !0 - })) : o.type === TouchType.Up && Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.isArrowBgHoverRow = !1 - })) - })); - Row.onClick((() => { - if (this.isArrowIconDown.value) { - this.isArrowIconDown.value = !1; - this.arrowShowStateRow.value = !1; - Context.animateTo({ curve: INTER_POLATING_SPRING }, (() => { - this.twoLineModeItemNumRow.value = this.filterRow.options.length - })); - Context.animateTo({ delay: 300, duration: 200, curve: SHARP_CUBIC_BEZIER }, (() => { - this.arrowShowStateRow.value = !0 - })) - } else { - this.isArrowIconDown.value = !0; - this.arrowShowStateRow.value = !1; - Context.animateTo({ curve: INTER_POLATING_SPRING }, (() => { - this.twoLineModeItemNumRow.value = this.twoLineModeItemNumRecordRow.value - })); - Context.animateTo({ delay: 300, duration: 200, curve: SHARP_CUBIC_BEZIER }, (() => { - this.arrowShowStateRow.value = !0 - })) - } - })); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Image.create(this.isArrowIconDown.value ? { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_down"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_up"], - bundleName: "", - moduleName: "" - }); - Image.width(24); - Image.height(40); - Image.fillColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_tertiary"], - bundleName: "", - moduleName: "" - }); - Image.focusable(!0); - ViewStackProcessor.visualState("focused"); - Image.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 2, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - }); - Image.width(28); - Image.offset({ x: -2 }); - ViewStackProcessor.visualState("normal"); - Image.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 0 - }); - Image.width(24); - Image.offset({ x: 0 }); - ViewStackProcessor.visualState(); - e || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - } - - initialRender() { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.width("100%"); - Row.alignItems(VerticalAlign.Top); - Row.padding({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_start"], - bundleName: "", - moduleName: "" - }, - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_end"], - bundleName: "", - moduleName: "" - } - }); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - If.create(); - this.filterRow.options && this.filterRow.options.length > 0 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(this.filterRow.options[0].toString()); - Text.height(40); - Text.width(px2vp(measure.measureText({ - textContent: this.filterRow.options[0].toString(), - fontSize: 12 - })) + 16); - Text.margin({ left: -8 }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.fontColor(this.colorRow[0]); - Text.fontWeight(this.fontWeightRow[0]); - Text.backgroundColor(this.isBackgroundHoverRow[0] ? this.backgroundColorRow[0] : "#00FFFFFF"); - Text.onClick((() => { - this.onItemClick(0) - })); - Text.focusable(!0); - Text.onHover((o => { - Context.animateTo({ curve: FRICTION_CUBIC_BEZIER, duration: 250 }, (() => { - if (o) { - this.backgroundColorRow[0] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }; - this.isBackgroundHoverRow[0] = !0 - } else this.isBackgroundHoverRow[0] = !1 - })) - })); - Text.onTouch((o => { - o.type === TouchType.Down ? Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.backgroundColorRow[0] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - }; - this.isBackgroundHoverRow[0] = !0 - })) : o.type === TouchType.Up && Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.isBackgroundHoverRow[0] = !1 - })) - })); - ViewStackProcessor.visualState("focused"); - Text.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 2, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - }); - Text.padding({ left: 6, right: 6 }); - ViewStackProcessor.visualState("normal"); - Text.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 0 - }); - Text.padding({ left: 8, right: 8 }); - ViewStackProcessor.visualState(); - e || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - e || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.width("100%"); - Row.padding({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_end"], - bundleName: "", - moduleName: "" - } - }); - Row.onAreaChange(((o, e) => { - this.filterColumnWidth = vp2px(parseInt(e.width.toString(), 0)); - if (0 === this.twoLineModeItemNumRow.value) { - var t = this.calcMultiFilterRowItemNum(); - this.twoLineModeItemNumRow.value = t; - this.twoLineModeItemNumRecordRow.value = t; - t < this.filterRow.options.length - 1 ? this.arrowShowStateRow.value = !0 : this.arrowShowStateRow.value = !1 - } - })); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Flex.create({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap }); - Flex.alignSelf(ItemAlign.Stretch); - e || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - ForEach.create(); - this.forEachUpdateFunction(o, this.filterRow.options.slice(0, this.twoLineModeItemNumRow.value + 1), ((o, e) => { - const t = o; - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - If.create(); - e > 0 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(t.toString()); - Text.transition(TransitionEffect.OPACITY); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.height(40); - Text.fontColor(this.colorRow[e]); - Text.fontWeight(this.fontWeightRow[e]); - Text.backgroundColor(this.isBackgroundHoverRow[e] ? this.backgroundColorRow[e] : "#00FFFFFF"); - Text.onClick((() => { - this.onItemClick(e) - })); - Text.onHover((o => { - Context.animateTo({ curve: FRICTION_CUBIC_BEZIER, duration: 250 }, (() => { - if (o) { - this.backgroundColorRow[e] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }; - this.isBackgroundHoverRow[e] = !0 - } else this.isBackgroundHoverRow[e] = !1 - })) - })); - Text.onTouch((o => { - o.type === TouchType.Down ? Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.backgroundColorRow[e] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - }; - this.isBackgroundHoverRow[e] = !0 - })) : o.type === TouchType.Up && Context.animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: 100 - }, (() => { - this.isBackgroundHoverRow[e] = !1 - })) - })); - Text.focusable(!0); - ViewStackProcessor.visualState("focused"); - Text.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 2, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - }); - Text.padding({ left: 6, right: 6 }); - ViewStackProcessor.visualState("normal"); - Text.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 0 - }); - Text.padding({ left: 8, right: 8 }); - ViewStackProcessor.visualState(); - r || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - r || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - }), void 0,!0,!1); - e || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - this.DownAndUpArrow.bind(this)(); - Flex.pop(); - Row.pop(); - Row.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -export class Filter extends ViewPU { - constructor(o, e, t, r = -1) { - super(o, t, r); - this.container = void 0; - this.__multiFilters = new SynchedPropertyObjectOneWayPU(e.multiFilters, this, "multiFilters"); - this.__additionFilters = new SynchedPropertyObjectOneWayPU(e.additionFilters, this, "additionFilters"); - this.onFilterChanged = null; - this.__filterType = new SynchedPropertySimpleOneWayPU(e.filterType, this, "filterType"); - this.selectedFilters = null; - this.__colorArr = new ObservedPropertyObjectPU(null, this, "colorArr"); - this.__fontWeightArr = new ObservedPropertyObjectPU(null, this, "fontWeightArr"); - this.__backgroundColorArr = new ObservedPropertyObjectPU(null, this, "backgroundColorArr"); - this.__isBackgroundHover = new ObservedPropertyObjectPU(null, this, "isBackgroundHover"); - this.__floatArrowBgColor = new ObservedPropertyObjectPU(null, this, "floatArrowBgColor"); - this.__isFloatArrowBgHover = new ObservedPropertySimplePU(!1, this, "isFloatArrowBgHover"); - this.__isArrowIconDownArr = new ObservedPropertyObjectPU(null, this, "isArrowIconDownArr"); - this.__additionColorArr = new ObservedPropertyObjectPU(null, this, "additionColorArr"); - this.__additionFontWeightArr = new ObservedPropertyObjectPU(null, this, "additionFontWeightArr"); - this.__additionBackgroundColorArr = new ObservedPropertyObjectPU(null, this, "additionBackgroundColorArr"); - this.__isAdditionBackgroundHover = new ObservedPropertyObjectPU(null, this, "isAdditionBackgroundHover"); - this.__colorRefresh = new ObservedPropertySimplePU(!1, this, "colorRefresh"); - this.__isFloatBarShow = new ObservedPropertySimplePU(!1, this, "isFloatBarShow"); - this.isFloatBarShowWithoutAnimation = !1; - this.__isFloatShowAllFilter = new ObservedPropertySimplePU(!1, this, "isFloatShowAllFilter"); - this.isFloatShowAllFilterWithoutAnimation = !1; - this.__floatFilterPosition = new ObservedPropertySimplePU(0, this, "floatFilterPosition"); - this.__floatFilterBarHeight = new ObservedPropertySimplePU(0, this, "floatFilterBarHeight"); - this.__floatFilterBarPosition = new ObservedPropertySimplePU(0, this, "floatFilterBarPosition"); - this.filterDynamicHeight = 0; - this.__twoLineModeItemNum = new ObservedPropertyObjectPU(null, this, "twoLineModeItemNum"); - this.__twoLineModeItemNumRecord = new ObservedPropertyObjectPU(null, this, "twoLineModeItemNumRecord"); - this.__downArrowShowState = new ObservedPropertyObjectPU(null, this, "downArrowShowState"); - this.listScroller = new Scroller; - this.setInitiallyProvidedValue(e) - } - - setInitiallyProvidedValue(o) { - void 0 !== o.container && (this.container = o.container); - void 0 !== o.multiFilters ? this.__multiFilters.set(o.multiFilters) : this.__multiFilters.set([]); - void 0 !== o.additionFilters ? this.__additionFilters.set(o.additionFilters) : this.__additionFilters.set(null); - void 0 !== o.onFilterChanged && (this.onFilterChanged = o.onFilterChanged); - void 0 !== o.filterType ? this.__filterType.set(o.filterType) : this.__filterType.set(FilterType.LIST_FILTER); - void 0 !== o.selectedFilters && (this.selectedFilters = o.selectedFilters); - void 0 !== o.colorArr && (this.colorArr = o.colorArr); - void 0 !== o.fontWeightArr && (this.fontWeightArr = o.fontWeightArr); - void 0 !== o.backgroundColorArr && (this.backgroundColorArr = o.backgroundColorArr); - void 0 !== o.isBackgroundHover && (this.isBackgroundHover = o.isBackgroundHover); - void 0 !== o.floatArrowBgColor && (this.floatArrowBgColor = o.floatArrowBgColor); - void 0 !== o.isFloatArrowBgHover && (this.isFloatArrowBgHover = o.isFloatArrowBgHover); - void 0 !== o.isArrowIconDownArr && (this.isArrowIconDownArr = o.isArrowIconDownArr); - void 0 !== o.additionColorArr && (this.additionColorArr = o.additionColorArr); - void 0 !== o.additionFontWeightArr && (this.additionFontWeightArr = o.additionFontWeightArr); - void 0 !== o.additionBackgroundColorArr && (this.additionBackgroundColorArr = o.additionBackgroundColorArr); - void 0 !== o.isAdditionBackgroundHover && (this.isAdditionBackgroundHover = o.isAdditionBackgroundHover); - void 0 !== o.colorRefresh && (this.colorRefresh = o.colorRefresh); - void 0 !== o.isFloatBarShow && (this.isFloatBarShow = o.isFloatBarShow); - void 0 !== o.isFloatBarShowWithoutAnimation && (this.isFloatBarShowWithoutAnimation = o.isFloatBarShowWithoutAnimation); - void 0 !== o.isFloatShowAllFilter && (this.isFloatShowAllFilter = o.isFloatShowAllFilter); - void 0 !== o.isFloatShowAllFilterWithoutAnimation && (this.isFloatShowAllFilterWithoutAnimation = o.isFloatShowAllFilterWithoutAnimation); - void 0 !== o.floatFilterPosition && (this.floatFilterPosition = o.floatFilterPosition); - void 0 !== o.floatFilterBarHeight && (this.floatFilterBarHeight = o.floatFilterBarHeight); - void 0 !== o.floatFilterBarPosition && (this.floatFilterBarPosition = o.floatFilterBarPosition); - void 0 !== o.filterDynamicHeight && (this.filterDynamicHeight = o.filterDynamicHeight); - void 0 !== o.twoLineModeItemNum && (this.twoLineModeItemNum = o.twoLineModeItemNum); - void 0 !== o.twoLineModeItemNumRecord && (this.twoLineModeItemNumRecord = o.twoLineModeItemNumRecord); - void 0 !== o.downArrowShowState && (this.downArrowShowState = o.downArrowShowState); - void 0 !== o.listScroller && (this.listScroller = o.listScroller) - } - - updateStateVars(o) { - this.__multiFilters.reset(o.multiFilters); - this.__additionFilters.reset(o.additionFilters); - this.__filterType.reset(o.filterType) - } - - purgeVariableDependenciesOnElmtId(o) { - this.__multiFilters.purgeDependencyOnElmtId(o); - this.__additionFilters.purgeDependencyOnElmtId(o); - this.__filterType.purgeDependencyOnElmtId(o); - this.__colorArr.purgeDependencyOnElmtId(o); - this.__fontWeightArr.purgeDependencyOnElmtId(o); - this.__backgroundColorArr.purgeDependencyOnElmtId(o); - this.__isBackgroundHover.purgeDependencyOnElmtId(o); - this.__floatArrowBgColor.purgeDependencyOnElmtId(o); - this.__isFloatArrowBgHover.purgeDependencyOnElmtId(o); - this.__isArrowIconDownArr.purgeDependencyOnElmtId(o); - this.__additionColorArr.purgeDependencyOnElmtId(o); - this.__additionFontWeightArr.purgeDependencyOnElmtId(o); - this.__additionBackgroundColorArr.purgeDependencyOnElmtId(o); - this.__isAdditionBackgroundHover.purgeDependencyOnElmtId(o); - this.__colorRefresh.purgeDependencyOnElmtId(o); - this.__isFloatBarShow.purgeDependencyOnElmtId(o); - this.__isFloatShowAllFilter.purgeDependencyOnElmtId(o); - this.__floatFilterPosition.purgeDependencyOnElmtId(o); - this.__floatFilterBarHeight.purgeDependencyOnElmtId(o); - this.__floatFilterBarPosition.purgeDependencyOnElmtId(o); - this.__twoLineModeItemNum.purgeDependencyOnElmtId(o); - this.__twoLineModeItemNumRecord.purgeDependencyOnElmtId(o); - this.__downArrowShowState.purgeDependencyOnElmtId(o) - } - - aboutToBeDeleted() { - this.__multiFilters.aboutToBeDeleted(); - this.__additionFilters.aboutToBeDeleted(); - this.__filterType.aboutToBeDeleted(); - this.__colorArr.aboutToBeDeleted(); - this.__fontWeightArr.aboutToBeDeleted(); - this.__backgroundColorArr.aboutToBeDeleted(); - this.__isBackgroundHover.aboutToBeDeleted(); - this.__floatArrowBgColor.aboutToBeDeleted(); - this.__isFloatArrowBgHover.aboutToBeDeleted(); - this.__isArrowIconDownArr.aboutToBeDeleted(); - this.__additionColorArr.aboutToBeDeleted(); - this.__additionFontWeightArr.aboutToBeDeleted(); - this.__additionBackgroundColorArr.aboutToBeDeleted(); - this.__isAdditionBackgroundHover.aboutToBeDeleted(); - this.__colorRefresh.aboutToBeDeleted(); - this.__isFloatBarShow.aboutToBeDeleted(); - this.__isFloatShowAllFilter.aboutToBeDeleted(); - this.__floatFilterPosition.aboutToBeDeleted(); - this.__floatFilterBarHeight.aboutToBeDeleted(); - this.__floatFilterBarPosition.aboutToBeDeleted(); - this.__twoLineModeItemNum.aboutToBeDeleted(); - this.__twoLineModeItemNumRecord.aboutToBeDeleted(); - this.__downArrowShowState.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get multiFilters() { - return this.__multiFilters.get() - } - - set multiFilters(o) { - this.__multiFilters.set(o) - } - - get additionFilters() { - return this.__additionFilters.get() - } - - set additionFilters(o) { - this.__additionFilters.set(o) - } - - get filterType() { - return this.__filterType.get() - } - - set filterType(o) { - this.__filterType.set(o) - } - - get colorArr() { - return this.__colorArr.get() - } - - set colorArr(o) { - this.__colorArr.set(o) - } - - get fontWeightArr() { - return this.__fontWeightArr.get() - } - - set fontWeightArr(o) { - this.__fontWeightArr.set(o) - } - - get backgroundColorArr() { - return this.__backgroundColorArr.get() - } - - set backgroundColorArr(o) { - this.__backgroundColorArr.set(o) - } - - get isBackgroundHover() { - return this.__isBackgroundHover.get() - } - - set isBackgroundHover(o) { - this.__isBackgroundHover.set(o) - } - - get floatArrowBgColor() { - return this.__floatArrowBgColor.get() - } - - set floatArrowBgColor(o) { - this.__floatArrowBgColor.set(o) - } - - get isFloatArrowBgHover() { - return this.__isFloatArrowBgHover.get() - } - - set isFloatArrowBgHover(o) { - this.__isFloatArrowBgHover.set(o) - } - - get isArrowIconDownArr() { - return this.__isArrowIconDownArr.get() - } - - set isArrowIconDownArr(o) { - this.__isArrowIconDownArr.set(o) - } - - get additionColorArr() { - return this.__additionColorArr.get() - } - - set additionColorArr(o) { - this.__additionColorArr.set(o) - } - - get additionFontWeightArr() { - return this.__additionFontWeightArr.get() - } - - set additionFontWeightArr(o) { - this.__additionFontWeightArr.set(o) - } - - get additionBackgroundColorArr() { - return this.__additionBackgroundColorArr.get() - } - - set additionBackgroundColorArr(o) { - this.__additionBackgroundColorArr.set(o) - } - - get isAdditionBackgroundHover() { - return this.__isAdditionBackgroundHover.get() - } - - set isAdditionBackgroundHover(o) { - this.__isAdditionBackgroundHover.set(o) - } - - get colorRefresh() { - return this.__colorRefresh.get() - } - - set colorRefresh(o) { - this.__colorRefresh.set(o) - } - - get isFloatBarShow() { - return this.__isFloatBarShow.get() - } - - set isFloatBarShow(o) { - this.__isFloatBarShow.set(o) - } - - get isFloatShowAllFilter() { - return this.__isFloatShowAllFilter.get() - } - - set isFloatShowAllFilter(o) { - this.__isFloatShowAllFilter.set(o) - } - - get floatFilterPosition() { - return this.__floatFilterPosition.get() - } - - set floatFilterPosition(o) { - this.__floatFilterPosition.set(o) - } - - get floatFilterBarHeight() { - return this.__floatFilterBarHeight.get() - } - - set floatFilterBarHeight(o) { - this.__floatFilterBarHeight.set(o) - } - - get floatFilterBarPosition() { - return this.__floatFilterBarPosition.get() - } - - set floatFilterBarPosition(o) { - this.__floatFilterBarPosition.set(o) - } - - get twoLineModeItemNum() { - return this.__twoLineModeItemNum.get() - } - - set twoLineModeItemNum(o) { - this.__twoLineModeItemNum.set(o) - } - - get twoLineModeItemNumRecord() { - return this.__twoLineModeItemNumRecord.get() - } - - set twoLineModeItemNumRecord(o) { - this.__twoLineModeItemNumRecord.set(o) - } - - get downArrowShowState() { - return this.__downArrowShowState.get() - } - - set downArrowShowState(o) { - this.__downArrowShowState.set(o) - } - - textColor(o, e) { - return this.selectedFilters.length > o && this.selectedFilters[o].index === e ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - } - } - - aboutToAppear() { - this.initParams() - } - - filterItemClick(o, e) { - let t = this.multiFilters[o].options[e]; - if (e != this.selectedFilters[o].index) { - this.colorArr[o][e] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated"], - bundleName: "", - moduleName: "" - }; - this.colorArr[o][this.selectedFilters[o].index] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }; - this.fontWeightArr[o][e] = FontWeight.Medium; - this.fontWeightArr[o][this.selectedFilters[o].index] = FontWeight.Regular; - this.colorRefresh = !this.colorRefresh; - this.selectedFilters[o].value = t; - this.selectedFilters[o].index = e; - this.onFilterChanged && this.onFilterChanged(this.selectedFilters) - } - } - - initParams() { - if (!this.selectedFilters) { - this.selectedFilters = []; - for (let e of this.multiFilters) { - var o = { name: e.name, index: -1, value: null }; - if (e.options.length > 0) { - o.index = 0; - o.value = e.options[0] - } - this.selectedFilters.push(o) - } - if (this.additionFilters && this.additionFilters.name) { - o = { name: this.additionFilters.name, index: -1, value: null }; - this.selectedFilters.push(o) - } - } - if (!this.colorArr) { - this.colorArr = []; - this.backgroundColorArr = []; - this.isBackgroundHover = []; - this.fontWeightArr = []; - this.isArrowIconDownArr = []; - this.floatArrowBgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }; - for (let o of this.multiFilters) { - var e = new ResourceArray; - var t = new FontWeightArray; - var r = new ResourceArray; - var i = new BooleanArray; - for (let i of o.options.keys()) { - if (0 === i) { - e.push({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated"], - bundleName: "", - moduleName: "" - }); - t.push(FontWeight.Medium) - } else { - e.push({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - t.push(FontWeight.Regular) - } - r.push({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }) - } - this.colorArr.push(e); - this.fontWeightArr.push(t); - this.backgroundColorArr.push(r); - this.isBackgroundHover.push(i); - this.isArrowIconDownArr.push(new ObservedBoolean(!0)) - } - } - if (this.additionFilters && this.additionFilters.options) { - this.additionColorArr = []; - this.additionFontWeightArr = []; - this.additionBackgroundColorArr = []; - this.isAdditionBackgroundHover = []; - for (let o = 0;o < this.additionFilters.options.length; o++) { - this.additionColorArr.push({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - this.additionFontWeightArr.push(FontWeight.Regular); - this.additionBackgroundColorArr.push({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }); - this.isAdditionBackgroundHover.push(!1) - } - } - if (!this.twoLineModeItemNum) { - this.twoLineModeItemNum = []; - this.twoLineModeItemNumRecord = []; - this.downArrowShowState = []; - for (let o = 0;o < this.multiFilters.length; o++) { - this.twoLineModeItemNum.push(new ObservedNumber(0)); - this.twoLineModeItemNumRecord.push(new ObservedNumber(0)); - this.downArrowShowState.push(new ObservedBoolean(!1)) - } - } - } - - ListFilter(o = null) { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Column.create(); - Column.width("100%"); - Column.align(Alignment.Start); - Column.padding({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_start"], - bundleName: "", - moduleName: "" - } - }); - Column.onAreaChange(((o, e) => { - if (!this.isFloatShowAllFilterWithoutAnimation && !this.isFloatBarShowWithoutAnimation) { - null != this.additionFilters ? this.filterDynamicHeight = parseInt(e.height.toString(), 0) + 40 + 8 : this.filterDynamicHeight = parseInt(e.height.toString(), 0) + 8; - this.floatFilterPosition = -this.filterDynamicHeight - } - })); - e || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - ForEach.create(); - this.forEachUpdateFunction(o, this.multiFilters, ((o, e) => { - const t = o; - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - r ? ViewPU.create(new ListFilterRow(this, { - colorRow: this.colorArr[e], - fontWeightRow: this.fontWeightArr[e], - backgroundColorRow: this.backgroundColorArr[e], - isBackgroundHoverRow: this.isBackgroundHover[e], - filterRow: t, - onItemClick: o => { - this.filterItemClick(e, o) - } - }, void 0, o)) : this.updateStateVarsOfChildByElmtId(o, { - colorRow: this.colorArr[e], - fontWeightRow: this.fontWeightArr[e], - backgroundColorRow: this.backgroundColorArr[e], - isBackgroundHoverRow: this.isBackgroundHover[e] - }); - ViewStackProcessor.StopGetAccessRecording() - })) - }), void 0,!0,!1); - e || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - Column.pop() - } - - MultiLineFilter(o = null) { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Column.create(); - Column.width("100%"); - Column.onAreaChange(((o, e) => { - null != this.additionFilters ? this.filterDynamicHeight = parseInt(e.height.toString(), 0) + 40 + 8 : this.filterDynamicHeight = parseInt(e.height.toString(), 0) + 8; - this.isFloatBarShowWithoutAnimation || this.isFloatShowAllFilterWithoutAnimation || (this.floatFilterPosition = -this.filterDynamicHeight) - })); - e || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - ForEach.create(); - this.forEachUpdateFunction(o, this.multiFilters, ((o, e) => { - const t = o; - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - r ? ViewPU.create(new MultiFilterRow(this, { - colorRow: this.colorArr[e], - fontWeightRow: this.fontWeightArr[e], - backgroundColorRow: this.backgroundColorArr[e], - isBackgroundHoverRow: this.isBackgroundHover[e], - arrowShowStateRow: this.downArrowShowState[e], - twoLineModeItemNumRow: this.twoLineModeItemNum[e], - twoLineModeItemNumRecordRow: this.twoLineModeItemNumRecord[e], - isArrowIconDown: this.isArrowIconDownArr[e], - filterRow: t, - onItemClick: o => { - this.filterItemClick(e, o) - } - }, void 0, o)) : this.updateStateVarsOfChildByElmtId(o, { - colorRow: this.colorArr[e], - fontWeightRow: this.fontWeightArr[e], - backgroundColorRow: this.backgroundColorArr[e], - isBackgroundHoverRow: this.isBackgroundHover[e], - arrowShowStateRow: this.downArrowShowState[e], - twoLineModeItemNumRow: this.twoLineModeItemNum[e], - twoLineModeItemNumRecordRow: this.twoLineModeItemNumRecord[e], - isArrowIconDown: this.isArrowIconDownArr[e] - }); - ViewStackProcessor.StopGetAccessRecording() - })) - }), void 0,!0,!1); - e || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - Column.pop() - } - - additionItemClick(o) { - let e = this.multiFilters.length; - if (this.selectedFilters[e].index != o) if (-1 === this.selectedFilters[e].index) { - this.additionColorArr[o] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated"], - bundleName: "", - moduleName: "" - }; - this.additionFontWeightArr[o] = FontWeight.Medium; - this.selectedFilters[e].value = this.additionFilters.options[o]; - this.selectedFilters[e].index = o - } else { - let t = this.selectedFilters[e].index; - this.additionColorArr[t] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }; - this.additionColorArr[o] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated"], - bundleName: "", - moduleName: "" - }; - this.additionFontWeightArr[t] = FontWeight.Regular; - this.additionFontWeightArr[o] = FontWeight.Medium; - this.selectedFilters[e].value = this.additionFilters.options[o]; - this.selectedFilters[e].index = o - } else { - this.additionColorArr[o] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }; - this.additionFontWeightArr[o] = FontWeight.Regular; - this.selectedFilters[e].value = null; - this.selectedFilters[e].index = -1 - } - this.onFilterChanged && this.onFilterChanged(this.selectedFilters); - this.colorRefresh = !this.colorRefresh - } - - AdditionFilterList(o = null) { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - If.create(); - this.additionFilters && this.additionFilters.name && this.additionFilters.options && 0 != this.additionFilters.options.length ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - List.create(); - List.listDirection(Axis.Horizontal); - List.scrollBar(BarState.Off); - List.padding({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_start"], - bundleName: "", - moduleName: "" - } - }); - List.margin({ left: -16 }); - List.width("100%"); - List.height(40); - e || List.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - { - const o = !0; - const e = (e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ListItem.create(r, o); - ListItem.height("100%"); - t || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording() - }; - const t = () => { - this.observeComponentCreation(e); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(this.additionFilters.name.toString()); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ left: 8, right: 8 }); - e || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.width(1); - Row.height(16); - Row.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_list_separator"], - bundleName: "", - moduleName: "" - }); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop(); - Row.pop(); - ListItem.pop() - }; - const r = (o, t) => { - e(o, t); - this.updateFuncByElmtId.set(o, e); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(this.additionFilters.name.toString()); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ left: 8, right: 8 }); - e || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.width(1); - Row.height(16); - Row.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_list_separator"], - bundleName: "", - moduleName: "" - }); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop(); - Row.pop(); - ListItem.pop() - }; - o ? (() => { - this.observeComponentCreation(e); - ListItem.pop() - })() : t() - } - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - ForEach.create(); - this.forEachUpdateFunction(o, this.additionFilters.options, ((o, e) => { - const t = o; - { - const o = !0; - const r = (t, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - ListItem.create(s, o); - ListItem.height("100%"); - ListItem.backgroundColor(this.isAdditionBackgroundHover[e] ? this.additionBackgroundColorArr[e] : "#00FFFFFF"); - ListItem.onHover((o => { - Context.animateTo({ curve: FRICTION_CUBIC_BEZIER, duration: 250 }, (() => { - if (o) { - this.additionBackgroundColorArr[e] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }; - this.isAdditionBackgroundHover[e] = !0 - } else this.isAdditionBackgroundHover[e] = !1 - })) - })); - ListItem.onTouch((o => { - o.type === TouchType.Down ? Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.additionBackgroundColorArr[e] = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - }; - this.isAdditionBackgroundHover[e] = !0 - })) : o.type === TouchType.Up && Context.animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: 100 - }, (() => { - this.isAdditionBackgroundHover[e] = !1 - })) - })); - ListItem.focusable(!0); - ViewStackProcessor.visualState("focused"); - ListItem.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 2, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - }); - ListItem.padding({ left: 6, right: 6 }); - ViewStackProcessor.visualState("normal"); - ListItem.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 0 - }); - ListItem.padding({ left: 8, right: 8 }); - ViewStackProcessor.visualState(); - ListItem.onClick((() => { - this.additionItemClick(e) - })); - r || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording() - }; - const i = () => { - this.observeComponentCreation(r); - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(t.toString()); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.fontColor(this.additionColorArr[e]); - Text.fontWeight(this.additionFontWeightArr[e]); - Text.focusable(!0); - r || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - ListItem.pop() - }; - const s = (o, i) => { - r(o, i); - this.updateFuncByElmtId.set(o, r); - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(t.toString()); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - Text.fontColor(this.additionColorArr[e]); - Text.fontWeight(this.additionFontWeightArr[e]); - Text.focusable(!0); - r || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - ListItem.pop() - }; - o ? (() => { - this.observeComponentCreation(r); - ListItem.pop() - })() : i() - } - }), void 0,!0,!1); - e || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - List.pop() - })) : If.branchId(1); - e || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - } - - FilterHeader(o = null) { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Column.create(); - Column.padding({ top: 8 }); - Column.onVisibleAreaChange([0, 1], ((o, e) => { - if (e > 0) { - this.isFloatShowAllFilter = !1; - this.isFloatShowAllFilterWithoutAnimation = !1; - this.isFloatBarShowWithoutAnimation = !1; - Context.animateTo({ curve: INTER_POLATING_SPRING, onFinish: () => { - this.isFloatBarShowWithoutAnimation || (this.isFloatBarShow = !1) - } }, (() => { - this.floatFilterBarHeight = 0 - })) - } else { - this.isFloatBarShow = !0; - this.isFloatBarShowWithoutAnimation = !0; - Context.animateTo({ curve: INTER_POLATING_SPRING }, (() => { - this.floatFilterBarHeight = 48 - })) - } - })); - e || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - If.create(); - this.filterType === FilterType.LIST_FILTER ? this.ifElseBranchUpdateFunction(0, (() => { - this.ListFilter.bind(this)() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.MultiLineFilter.bind(this)() - })); - e || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.AdditionFilterList.bind(this)(); - Column.pop() - } - - FloatFilterHeader(o = null) { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Column.create(); - Column.padding({ top: 8 }); - Column.width("100%"); - Column.clip(!0); - Column.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }); - Column.opacity(.95); - Column.backgroundBlurStyle(BlurStyle.Thin); - Column.visibility(this.isFloatShowAllFilter ? Visibility.Visible : Visibility.Hidden); - Column.position({ x: 0, y: this.floatFilterPosition }); - Column.zIndex(2); - e || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - If.create(); - this.filterType === FilterType.LIST_FILTER ? this.ifElseBranchUpdateFunction(0, (() => { - this.ListFilter.bind(this)() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.MultiLineFilter.bind(this)() - })); - e || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.AdditionFilterList.bind(this)(); - Column.pop() - } - - FloatFilterBar(o = null) { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.width("100%"); - Row.padding({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_end"], - bundleName: "", - moduleName: "" - } - }); - Row.height(this.floatFilterBarHeight); - Row.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }); - Row.opacity(.95); - Row.clip(!0); - Row.backgroundBlurStyle(BlurStyle.Thin); - Row.visibility(this.isFloatBarShow ? Visibility.Visible : Visibility.Hidden); - Row.alignItems(VerticalAlign.Bottom); - Row.position({ x: 0, y: this.floatFilterBarPosition }); - Row.zIndex(1); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Column.create(); - Column.alignItems(HorizontalAlign.Center); - Column.width("100%"); - Column.height(40); - e || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.height("100%"); - Row.alignItems(VerticalAlign.Center); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - ForEach.create(); - this.forEachUpdateFunction(o, this.selectedFilters.slice(0, (this.colorRefresh, this.selectedFilters.length)), ((o, e) => { - const t = o; - this.observeComponentCreation(((o, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - If.create(); - 0 != e && null != t.value ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create("/"); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - e || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - r || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(t.value); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body3"], - bundleName: "", - moduleName: "" - }); - e || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - }), void 0,!0,!1); - e || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - Row.pop(); - Column.pop(); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.height(40); - Row.margin({ left: -24 }); - Row.backgroundColor(this.isFloatArrowBgHover ? this.floatArrowBgColor : "#00FFFFFF"); - Row.focusable(!0); - ViewStackProcessor.visualState("focused"); - Row.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 2, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - }); - Row.width(28); - Row.offset({ x: -2 }); - ViewStackProcessor.visualState("normal"); - Row.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - width: 0 - }); - Row.width(24); - Row.offset({ x: 0 }); - ViewStackProcessor.visualState(); - Row.onHover((o => { - o ? Context.animateTo({ curve: FRICTION_CUBIC_BEZIER, duration: 250 }, (() => { - this.floatArrowBgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }; - this.isFloatArrowBgHover = !0 - })) : Context.animateTo({ curve: FRICTION_CUBIC_BEZIER, duration: 250 }, (() => { - this.isFloatArrowBgHover = !1 - })) - })); - Row.onTouch((o => { - o.type === TouchType.Down ? Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.floatArrowBgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - }; - this.isFloatArrowBgHover = !0 - })) : o.type === TouchType.Up && Context.animateTo({ curve: SHARP_CUBIC_BEZIER, duration: 100 }, (() => { - this.isFloatArrowBgHover = !1 - })) - })); - Row.onClick((() => { - Context.animateTo({ duration: 150, curve: SHARP_CUBIC_BEZIER }, (() => { - this.isFloatBarShow = !1; - this.isFloatBarShowWithoutAnimation = !1 - })); - this.isFloatShowAllFilter = !0; - this.isFloatShowAllFilterWithoutAnimation = !0; - Context.animateTo({ curve: INTER_POLATING_SPRING }, (() => { - this.floatFilterPosition = 0; - this.floatFilterBarPosition = this.filterDynamicHeight - })) - })); - e || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Image.create({ - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_down"], - bundleName: "", - moduleName: "" - }); - Image.width(24); - Image.height(24); - Image.fillColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_tertiary"], - bundleName: "", - moduleName: "" - }); - Image.focusable(!0); - e || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop(); - Row.pop() - } - - initialRender() { - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Stack.create({ alignContent: Alignment.Top }); - Stack.clip(!0); - e || Stack.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.FloatFilterBar.bind(this)(); - this.FloatFilterHeader.bind(this)(); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Column.create(); - Column.zIndex(0); - e || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, e) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - List.create({ initialIndex: 0, scroller: this.listScroller }); - List.listDirection(Axis.Vertical); - List.width("100%"); - List.height("100%"); - List.edgeEffect(EdgeEffect.Spring); - List.onScroll(((o, e) => { - if (this.isFloatShowAllFilterWithoutAnimation && e == ScrollState.Scroll) { - this.isFloatBarShowWithoutAnimation = !0; - this.isFloatShowAllFilterWithoutAnimation = !1; - Context.animateTo({ duration: 150, curve: SHARP_CUBIC_BEZIER }, (() => { - this.isFloatBarShow = !0 - })); - Context.animateTo({ curve: INTER_POLATING_SPRING, onFinish: () => { - this.isFloatShowAllFilterWithoutAnimation || (this.isFloatShowAllFilter = !1) - } }, (() => { - this.floatFilterPosition = -this.filterDynamicHeight; - this.floatFilterBarPosition = 0 - })) - } - })); - e || List.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - { - const o = !0; - const e = (e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ListItem.create(r, o); - ListItem.focusable(!0); - ListItem.onFocus((() => { - this.listScroller.scrollToIndex(0,!0) - })); - t || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording() - }; - const t = () => { - this.observeComponentCreation(e); - this.FilterHeader.bind(this)(); - ListItem.pop() - }; - const r = (o, t) => { - e(o, t); - this.updateFuncByElmtId.set(o, e); - this.FilterHeader.bind(this)(); - ListItem.pop() - }; - o ? (() => { - this.observeComponentCreation(e); - ListItem.pop() - })() : t() - } - { - const o = !0; - const e = (e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ListItem.create(r, o); - ListItem.focusable(!0); - ListItem.onFocus((() => { - this.listScroller.scrollToIndex(1,!0) - })); - t || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording() - }; - const t = () => { - this.observeComponentCreation(e); - this.container.bind(this)(); - ListItem.pop() - }; - const r = (o, t) => { - e(o, t); - this.updateFuncByElmtId.set(o, e); - this.container.bind(this)(); - ListItem.pop() - }; - o ? (() => { - this.observeComponentCreation(e); - ListItem.pop() - })() : t() - } - List.pop(); - Column.pop(); - Stack.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -export default { - Filter, FilterType -}; \ No newline at end of file diff --git a/interface/progressbutton/BUILD.gn b/interface/progressbutton/BUILD.gn deleted file mode 100644 index 411fb32..0000000 --- a/interface/progressbutton/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_progressbutton_abc") { - src_js = rebase_path("progressbutton.js") - dst_file = rebase_path(target_out_dir + "/progressbutton.abc") - in_puts = [ "progressbutton.js" ] - out_puts = [ target_out_dir + "/progressbutton.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("progressbutton_abc") { - input = get_label_info(":gen_progressbutton_abc", "target_out_dir") + "/progressbutton.abc" - output = target_out_dir + "/progressbutton_abc.o" - dep = ":gen_progressbutton_abc" -} - -ohos_shared_library("progressbutton") { - sources = [ "progressbutton.cpp" ] - - deps = [ ":progressbutton_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} diff --git a/interface/progressbutton/progressbutton.cpp b/interface/progressbutton/progressbutton.cpp deleted file mode 100644 index 4a3fc1d..0000000 --- a/interface/progressbutton/progressbutton.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_progressbutton_abc_start[]; -extern const char _binary_progressbutton_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_ProgressButton_GetABCCode(const char **buf, int *buflen) -{ - if (buf != nullptr) { - *buf = _binary_progressbutton_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_progressbutton_abc_end - _binary_progressbutton_abc_start; - } -} - -/* - * Module define - */ -static napi_module progressbuttonModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.ProgressButton", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; -/* - * Module register function - */ -extern "C" __attribute__((constructor)) void progressbuttonRegisterModule(void) -{ - napi_module_register(&progressbuttonModule); -} diff --git a/interface/progressbutton/progressbutton.js b/interface/progressbutton/progressbutton.js deleted file mode 100644 index 9a3bd18..0000000 --- a/interface/progressbutton/progressbutton.js +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const EMPTY_STRING = ''; -const MAX_PROGRESS = 100; -const MAX_PERCENTAGE = '100%'; -const MIN_PERCENTAGE = '0%'; -const TEXT_OPACITY = 0.4; -const BUTTON_NORMARL_WIDTH = 44; -const BUTTON_NORMARL_HEIGHT = 28; -const BUTTON_BORDER_RADIUS = 14; -const BUTTON_BORDER_WIDTH = 0.5; - -export class ProgressButton extends ViewPU { - constructor(e, t, s, r = -1) { - super(e, s, r); - this.__progress = new SynchedPropertySimpleOneWayPU(t.progress, this, 'progress'); - this.__textProgress = new ObservedPropertySimplePU('', this, 'textProgress'); - this.__content = new SynchedPropertySimpleOneWayPU(t.content, this, 'content'); - this.__isLoading = new ObservedPropertySimplePU(!1, this, 'isLoading'); - this.__enable = new SynchedPropertySimpleOneWayPU(t.enable, this, 'enable'); - this.progressButtonWidth = 44; - this.clickCallback = null; - this.setInitiallyProvidedValue(t); - this.declareWatch('progress', this.getProgressContext); - } - - setInitiallyProvidedValue(e) { - void 0 !== e.textProgress && (this.textProgress = e.textProgress); - void 0 !== e.content ? this.__content.set(e.content) : this.__content.set(''); - void 0 !== e.isLoading && (this.isLoading = e.isLoading); - void 0 !== e.enable ? this.__enable.set(e.enable) : this.__enable.set(!0); - void 0 !== e.progressButtonWidth && (this.progressButtonWidth = e.progressButtonWidth); - void 0 !== e.clickCallback && (this.clickCallback = e.clickCallback); - } - - updateStateVars(e) { - this.__progress.reset(e.progress); - this.__content.reset(e.content); - this.__enable.reset(e.enable); - } - - purgeVariableDependenciesOnElmtId(e) { - this.__progress.purgeDependencyOnElmtId(e); - this.__textProgress.purgeDependencyOnElmtId(e); - this.__content.purgeDependencyOnElmtId(e); - this.__isLoading.purgeDependencyOnElmtId(e); - this.__enable.purgeDependencyOnElmtId(e); - } - - aboutToBeDeleted() { - this.__progress.aboutToBeDeleted(); - this.__textProgress.aboutToBeDeleted(); - this.__content.aboutToBeDeleted(); - this.__isLoading.aboutToBeDeleted(); - this.__enable.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal(); - } - - get progress() { - return this.__progress.get(); - } - - set progress(e) { - this.__progress.set(e); - } - - get textProgress() { - return this.__textProgress.get(); - } - - set textProgress(e) { - this.__textProgress.set(e); - } - - get content() { - return this.__content.get(); - } - - set content(e) { - this.__content.set(e); - } - - get isLoading() { - return this.__isLoading.get(); - } - - set isLoading(e) { - this.__isLoading.set(e); - } - - get enable() { - return this.__enable.get(); - } - - set enable(e) { - this.__enable.set(e); - } - - getButtonProgress() { - return this.progress < 0 ? 0 : this.progress > MAX_PROGRESS ? MAX_PROGRESS : this.progress; - } - - getProgressContext() { - if (this.progress < 0) { - this.isLoading = !1; - this.textProgress = '0%'; - } else if (this.progress >= MAX_PROGRESS) { - this.isLoading = !1; - this.textProgress = '100%'; - } else { - this.textProgress = Math.floor(this.progress / MAX_PROGRESS * MAX_PROGRESS).toString() + '%'; - } - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Button.createWithChild(); - Button.borderRadius(BUTTON_BORDER_RADIUS); - Button.clip(!1); - Button.hoverEffect(HoverEffect.None); - Button.backgroundColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_foreground_contrary'], - bundleName: '', - moduleName: '' - }); - Button.border({ - width: BUTTON_BORDER_WIDTH, - color: this.enable ? { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_text_actived'], - bundleName: '', - moduleName: '' - } : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_foreground_contrary_disable'], - bundleName: '', - moduleName: '' - } - }); - Button.constraintSize({ minWidth: 44 }); - Button.width(this.progressButtonWidth < BUTTON_NORMARL_WIDTH ? BUTTON_NORMARL_WIDTH : this.progressButtonWidth); - Button.stateEffect(this.enable); - Button.onClick((() => { - if (this.enable) { - this.progress < MAX_PROGRESS && (this.isLoading = !this.isLoading); - this.clickCallback && this.clickCallback(); - } - })); - t || Button.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Stack.create(); - t || Stack.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Progress.create({ value: this.getButtonProgress(), total: MAX_PROGRESS, style: ProgressStyle.Capsule }); - Progress.height(BUTTON_NORMARL_HEIGHT); - Progress.borderRadius(BUTTON_BORDER_RADIUS); - Progress.width('100%'); - Progress.hoverEffect(HoverEffect.None); - Progress.clip(!1); - Progress.enabled(this.enable); - t || Progress.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.isLoading ? this.textProgress : this.content); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_button3'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - Text.fontColor(this.isLoading ? { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary'], - bundleName: '', - moduleName: '' - } : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_emphasize'], - bundleName: '', - moduleName: '' - }); - Text.maxLines(1); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.padding({ left: 8, right: 8 }); - Text.opacity(this.enable ? 1 : TEXT_OPACITY); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Row.pop(); - Stack.pop(); - Button.pop(); - } - - rerender() { - this.updateDirtyElements(); - } -} -export default { ProgressButton }; \ No newline at end of file diff --git a/interface/selecttitlebar/BUILD.gn b/interface/selecttitlebar/BUILD.gn deleted file mode 100755 index 2b37576..0000000 --- a/interface/selecttitlebar/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_selecttitlebar_abc") { - src_js = rebase_path("selecttitlebar.js") - dst_file = rebase_path(target_out_dir + "/selecttitlebar.abc") - in_puts = [ "selecttitlebar.js" ] - out_puts = [ target_out_dir + "/selecttitlebar.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("selecttitlebar_abc") { - input = get_label_info(":gen_selecttitlebar_abc", "target_out_dir") + "/selecttitlebar.abc" - output = target_out_dir + "/selecttitlebar_abc.o" - dep = ":gen_selecttitlebar_abc" -} - -ohos_shared_library("selecttitlebar") { - sources = [ "selecttitlebar.cpp" ] - - deps = [ ":selecttitlebar_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} diff --git a/interface/selecttitlebar/selecttitlebar.cpp b/interface/selecttitlebar/selecttitlebar.cpp deleted file mode 100644 index 9d11696..0000000 --- a/interface/selecttitlebar/selecttitlebar.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_selecttitlebar_abc_start[]; -extern const char _binary_selecttitlebar_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_SelectTitleBar_GetABCCode(const char **buf, int *buflen) - { - if (buf != nullptr) { - *buf = _binary_selecttitlebar_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_selecttitlebar_abc_end - _binary_selecttitlebar_abc_start; - } - } - - -static napi_module selecttitlebarModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.SelectTitleBar", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void selecttitlebarRegisterModule(void) -{ - napi_module_register(&selecttitlebarModule); -} \ No newline at end of file diff --git a/interface/selecttitlebar/selecttitlebar.js b/interface/selecttitlebar/selecttitlebar.js deleted file mode 100644 index 08d5151..0000000 --- a/interface/selecttitlebar/selecttitlebar.js +++ /dev/null @@ -1,785 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var __decorate = this && this.__decorate || function(e, t, o, i) { - var s, r = arguments.length, - n = r < 3 ? t : null === i ? i = Object.getOwnPropertyDescriptor(t, o) : i; - if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) n = Reflect.decorate(e, t, o, i); - else - for (var c = e.length - 1; c >= 0; c--)(s = e[c]) && (n = (r < 3 ? s(n) : r > 3 ? s(t, o, n) : s(t, o)) || n); - return r > 3 && n && Object.defineProperty(t, o, n), n -}; -const KeyCode = requireNapi('multimodalInput.keyCode').KeyCode; -const PUBLIC_MORE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABEZJREFUeNrt3D1rFFEUBuAxhmAhFlYpUohYiYWFRcAmKAhWK2pjo1iKf8BCMIKFf8BarCyMhVj4VZhGSKEg2FqJyCKWIhYWnstMINgYsh+cmfs88BICydxw7jmzu2HvNg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBN+3r6dx+LXIqsRpa7FF8j48hm5Fn3Peo9mAEYRdYjJ3f582Vj7nZfUe/eDsCRyMPI2h5/fyNyI/JDT6v3Tvt7sBllE15ETkxwjeORi5G3ke/6W737MgBnI68jh6ZwrcORq5HnhkC9+zAA5YXXy8jBKV5zKXIu8jjyS7+rd+YBeNVtyrSVO9PRyBM9r94LSTfjWuTUDK9/eYIXeENUbb0zDsBi5PYc1rmj79U74wCszuih+F/ljrSi/+uud8YBGA10rayqrnfGAVgb6FpZVV3vjAOwPNC1sqq63hkHYGWga2VVdb0XKt/8Rf1fd70zDsB4jmt5u3Tl9a59AMb6v+56ZxyArYGulVXV9c44ABtzXOup/q+73hkH4N2cHio/Rj7r/7rrnXEAfkfuz2Gddb2v3ln/DfpgxneLzaY9xE3l9c46AH8iVyI/Z3Dt8nB/Xc+rd5H5QMy3yJemPVs6zY0edc9HUe/0Z4I/dQ/N5Vjd0oTXKp9QcKFpD2qj3r0YgO1NeRM507TH6/bifeR85IMeV++d+vTBWOV9JDcjt5rdv6uw3M3uRR7pa/Xu+wBsOxA53bTnTP/3UX1b3fNQ1BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqyr6d/97HIpchqZLlL8TUyjmxGnnXfo96DGYBRZD1ycpc/XzbmbvcV9e7tAByJPIys7fH3NyI3Ij/0tHrvtL8Hm1E24UXkxATXOB65GHkb+a6/1bsvA3A28jpyaArXOhy5GnluCNS7DwNQXni9jByc4jWXIucijyO/9Lt6Zx6AV92mTFu5Mx2NPNHz6r2QdDOuRU7N8PqXJ3iBN0TV1jvjACxGbs9hnTv6Xr0zDsDqjB6K/1XuSCv6v+56ZxyA0UDXyqrqemccgLWBrpVV1fXOOADLA10rq6rrnXEAVga6VlZV13uh8s1f1P911zvjAIznuJa3S1de79oHYKz/6653xgHYGuhaWVVd74wDsDHHtZ7q/7rrnXEA3s3pofJj5LP+r7veGQfgd+T+HNZZ1/vqnfXfoA9mfLfYbNpD3FRe76wD8CdyJfJzBtcuD/fX9bx6F5kPxHyLfGnas6XT3OhR93wU9U5/JvhT99BcjtUtTXit8gkFF5r2oDbq3YsB2N6UN5EzTXu8bi/eR85HPuhx9d6pTx+MVd5HcjNyq9n9uwrL3exe5JG+Vu++D8C2A5HTTXvO9H8f1bfVPQ9FvQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCn7C9HjBtwWfXpKAAAAAElFTkSuQmCC"; -const PUBLIC_BACK = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA8VJREFUeNrt3LFLlHEYwPFXz0GiIZpEoikkwsFRIiK3gqCigxIC/4Kmhv6OoChouaGoqKCgCKducGh0cDAIamhwiCaHCIeelztpUszee/vl8/nAM3Vd8nufr+fddVYVAAAAAAAAAAAAAAAAAAAAAABQijFH0KhrMd2Y2ZitmNWYRzHLjkYAB9lUzMOYizv8eS/mZsymoypLxxE0svzvY07vcpu5mOmY145LAAdx+U/u4bZzwx+JPjq2cow7glaWf1vXsQkg6/JvPwoggJTLjwDSL/8nRyiAzN/5nzpGAWRd/n7MM0cpgIzLvx6z6CjL453gdpZ/IWbDcQrA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD8CMDyIwDLjwAsPwKw/AjA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD85A3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPLz3xlv6H4mYp5YfrI+AizF9BwnI/AlZi3mbsxy03feaeh+HsQcc60YgSMxMzE3YmZj3sX8LOlHoPoLnHedaEE35n5pzwF856dN9SPBpZICmHRNaNnlkgL46nrQsvmSAqhftlx1TWjR4ZICqPVcE1q0XloA96rBa7XQhl5pAWzFXKm8i8vo9WMeN3VnnQa/sO8xL2POxEy7Toxo+RdjNpu6w1F9HuBqNXi99lw1eKMM9utHzIeYV8MftbccCQAAAAAAsBdt/XLc+sPy9W+MmPqL+1iJuVA1+C4gdFr6d77FvK0GH2nb739lPR5zNuZ51eBnQhFAJQIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE8M8jmBlGgABSRnAqZiXms+MUQNYIDnkUKMu4I/gj6zELMRv7/PsnHKEAMkcw6fgEkDmCNUcngMwRvHFsngRnfWJcL/9tRyaAgxrB+ZijO9ymH7MUs+m4yjLmCBozEXMr5nr1+9We1ZgXMXccDwAAAAAAAAAAAAAAAAAAAAAAwO5+AfVgtqHKRnawAAAAAElFTkSuQmCC"; -export class SelectTitleBar extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.__selected = new ObservedPropertySimplePU(0, this, "selected"); - this.options = void 0; - this.menuItems = void 0; - this.subtitle = void 0; - this.badgeValue = void 0; - this.hidesBackButton = void 0; - this.onSelected = void 0; - this.__selectMaxWidth = new ObservedPropertySimplePU(0, this, "selectMaxWidth"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.selected && (this.selected = e.selected); - void 0 !== e.options && (this.options = e.options); - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.subtitle && (this.subtitle = e.subtitle); - void 0 !== e.badgeValue && (this.badgeValue = e.badgeValue); - void 0 !== e.hidesBackButton && (this.hidesBackButton = e.hidesBackButton); - void 0 !== e.onSelected && (this.onSelected = e.onSelected); - void 0 !== e.selectMaxWidth && (this.selectMaxWidth = e.selectMaxWidth) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__selected.purgeDependencyOnElmtId(e); - this.__selectMaxWidth.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__selected.aboutToBeDeleted(); - this.__selectMaxWidth.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get selected() { - return this.__selected.get() - } - set selected(e) { - this.__selected.set(e) - } - get selectMaxWidth() { - return this.__selectMaxWidth.get() - } - set selectMaxWidth(e) { - this.__selectMaxWidth.set(e) - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Flex.create({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }); - Flex.width("100%"); - Flex.height(SelectTitleBar.totalHeight); - Flex.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }); - Flex.onAreaChange(((e, t) => { - let o = Number(t.width); - if (!this.hidesBackButton) { - o -= ImageMenuItem.imageHotZoneWidth; - o += SelectTitleBar.leftPadding; - o -= SelectTitleBar.leftPaddingWithBack - } - if (void 0 !== this.menuItems) { - let e = this.menuItems.length; - e >= CollapsibleMenuSection.maxCountOfVisibleItems ? o -= ImageMenuItem.imageHotZoneWidth * CollapsibleMenuSection.maxCountOfVisibleItems : e > 0 && (o -= ImageMenuItem.imageHotZoneWidth * e) - } - void 0 !== this.badgeValue ? this.selectMaxWidth = o - SelectTitleBar.badgeSize - SelectTitleBar.leftPadding - SelectTitleBar.rightPadding - SelectTitleBar.badgePadding : this.selectMaxWidth = o - SelectTitleBar.leftPadding - SelectTitleBar.rightPadding - })); - t || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ - left: this.hidesBackButton ? { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_start"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_start"], - bundleName: "", - moduleName: "" - } - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.hidesBackButton ? If.branchId(1) : this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Navigator.create(); - t || Navigator.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: { - value: PUBLIC_BACK, - isEnabled: !0 - } - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })); - Navigator.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.justifyContent(FlexAlign.Start); - Column.alignItems(HorizontalAlign.Start); - Column.constraintSize({ - maxWidth: this.selectMaxWidth - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.badgeValue ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Badge.create({ - count: this.badgeValue, - position: BadgePosition.Right, - style: { - badgeSize: SelectTitleBar.badgeSize, - badgeColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - borderColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - borderWidth: 0 - } - }); - t || Badge.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.justifyContent(FlexAlign.Start); - Row.margin({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_elements_margin_horizontal_l"], - bundleName: "", - moduleName: "" - } - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Select.create(this.options); - Select.selected(this.selected); - Select.value(this.selected < this.options.length ? this.options[this.selected].value.toString() : ""); - Select.font({ - size: this.hidesBackButton && void 0 === this.subtitle ? { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline7"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline8"], - bundleName: "", - moduleName: "" - } - }); - Select.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_text"], - bundleName: "", - moduleName: "" - }); - Select.backgroundColor(Color.Transparent); - Select.onSelect(this.onSelected); - Select.constraintSize({ - maxWidth: this.selectMaxWidth - }); - Select.offset({ - x: -4 - }); - t || Select.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Select.pop(); - Row.pop(); - Badge.pop() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.justifyContent(FlexAlign.Start); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Select.create(this.options); - Select.selected(this.selected); - Select.value(this.selected < this.options.length ? this.options[this.selected].value.toString() : ""); - Select.font({ - size: this.hidesBackButton && void 0 === this.subtitle ? { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline7"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline8"], - bundleName: "", - moduleName: "" - } - }); - Select.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_text"], - bundleName: "", - moduleName: "" - }); - Select.backgroundColor(Color.Transparent); - Select.onSelect(this.onSelected); - Select.constraintSize({ - maxWidth: this.selectMaxWidth - }); - Select.offset({ - x: -4 - }); - t || Select.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Select.pop(); - Row.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.subtitle ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.justifyContent(FlexAlign.Start); - Row.margin({ - left: SelectTitleBar.subtitleLeftPadding - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.subtitle); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_over_line"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_subtitle_text"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.textOverflow({ - overflow: TextOverflow.Ellipsis - }); - Text.constraintSize({ - maxWidth: this.selectMaxWidth - }); - Text.offset({ - y: -4 - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Column.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.menuItems && this.menuItems.length > 0 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new CollapsibleMenuSection(this, { - menuItems: this.menuItems - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Flex.pop() - } - rerender() { - this.updateDirtyElements() - } -} -SelectTitleBar.badgeSize = 16; -SelectTitleBar.totalHeight = 56; -SelectTitleBar.leftPadding = 24; -SelectTitleBar.leftPaddingWithBack = 12; -SelectTitleBar.rightPadding = 24; -SelectTitleBar.badgePadding = 16; -SelectTitleBar.subtitleLeftPadding = 4; -class CollapsibleMenuSection extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.menuItems = void 0; - this.__isPopupShown = new ObservedPropertySimplePU(!1, this, "isPopupShown"); - this.__isMoreIconOnFocus = new ObservedPropertySimplePU(!1, this, "isMoreIconOnFocus"); - this.__isMoreIconOnHover = new ObservedPropertySimplePU(!1, this, "isMoreIconOnHover"); - this.__isMoreIconOnClick = new ObservedPropertySimplePU(!1, this, "isMoreIconOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.isPopupShown && (this.isPopupShown = e.isPopupShown); - void 0 !== e.isMoreIconOnFocus && (this.isMoreIconOnFocus = e.isMoreIconOnFocus); - void 0 !== e.isMoreIconOnHover && (this.isMoreIconOnHover = e.isMoreIconOnHover); - void 0 !== e.isMoreIconOnClick && (this.isMoreIconOnClick = e.isMoreIconOnClick) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__isPopupShown.purgeDependencyOnElmtId(e); - this.__isMoreIconOnFocus.purgeDependencyOnElmtId(e); - this.__isMoreIconOnHover.purgeDependencyOnElmtId(e); - this.__isMoreIconOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__isPopupShown.aboutToBeDeleted(); - this.__isMoreIconOnFocus.aboutToBeDeleted(); - this.__isMoreIconOnHover.aboutToBeDeleted(); - this.__isMoreIconOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get isPopupShown() { - return this.__isPopupShown.get() - } - set isPopupShown(e) { - this.__isPopupShown.set(e) - } - get isMoreIconOnFocus() { - return this.__isMoreIconOnFocus.get() - } - set isMoreIconOnFocus(e) { - this.__isMoreIconOnFocus.set(e) - } - get isMoreIconOnHover() { - return this.__isMoreIconOnHover.get() - } - set isMoreIconOnHover(e) { - this.__isMoreIconOnHover.set(e) - } - get isMoreIconOnClick() { - return this.__isMoreIconOnClick.get() - } - set isMoreIconOnClick(e) { - this.__isMoreIconOnClick.set(e) - } - getMoreIconFgColor() { - return this.isMoreIconOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon_pressed"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon"], - bundleName: "", - moduleName: "" - } - } - getMoreIconBgColor() { - return this.isMoreIconOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isMoreIconOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.height("100%"); - Column.margin({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_end"], - bundleName: "", - moduleName: "" - } - }); - Column.justifyContent(FlexAlign.Center); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.menuItems.length <= CollapsibleMenuSection.maxCountOfVisibleItems ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems, (e => { - const t = e; - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new ImageMenuItem(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems.slice(0, CollapsibleMenuSection.maxCountOfVisibleItems - 1), (e => { - const t = e; - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new ImageMenuItem(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(ImageMenuItem.imageHotZoneWidth); - Row.height(ImageMenuItem.imageHotZoneWidth); - Row.borderRadius(ImageMenuItem.buttonBorderRadius); - Row.foregroundColor(this.getMoreIconFgColor()); - Row.backgroundColor(this.getMoreIconBgColor()); - Row.justifyContent(FlexAlign.Center); - Row.border(this.isMoreIconOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Row.onFocus((() => this.isMoreIconOnFocus = !0)); - Row.onBlur((() => this.isMoreIconOnFocus = !1)); - Row.onHover((e => this.isMoreIconOnHover = e)); - Row.onKeyEvent((e => { - if (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE) { - e.type === KeyType.Down && (this.isMoreIconOnClick = !0); - e.type === KeyType.Up && (this.isMoreIconOnClick = !1) - } - })); - Row.onTouch((e => { - e.type === TouchType.Down && (this.isMoreIconOnClick = !0); - e.type === TouchType.Up && (this.isMoreIconOnClick = !1) - })); - Row.onClick((() => this.isPopupShown = !0)); - Row.bindPopup(this.isPopupShown, { - builder: { - builder: this.popupBuilder.bind(this) - }, - placement: Placement.Bottom, - popupColor: Color.White, - enableArrow: !1, - onStateChange: e => this.isPopupShown = e.isVisible - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(PUBLIC_MORE); - Image.width(ImageMenuItem.imageSize); - Image.height(ImageMenuItem.imageSize); - Image.focusable(!0); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Row.pop(); - Column.pop() - } - popupBuilder(e = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width(ImageMenuItem.imageHotZoneWidth + CollapsibleMenuSection.focusPadding * CollapsibleMenuSection.marginsNum); - Column.margin({ - top: CollapsibleMenuSection.focusPadding, - bottom: CollapsibleMenuSection.focusPadding - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems.slice(CollapsibleMenuSection.maxCountOfVisibleItems - 1, this.menuItems.length), ((e, t) => { - const o = e; - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: o - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - }), void 0, !0, !1); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - Column.pop() - } - rerender() { - this.updateDirtyElements() - } -} -CollapsibleMenuSection.maxCountOfVisibleItems = 3; -CollapsibleMenuSection.focusPadding = 4; -CollapsibleMenuSection.marginsNum = 2; -__decorate([], CollapsibleMenuSection.prototype, "popupBuilder", null); -class ImageMenuItem extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.item = void 0; - this.__isOnFocus = new ObservedPropertySimplePU(!1, this, "isOnFocus"); - this.__isOnHover = new ObservedPropertySimplePU(!1, this, "isOnHover"); - this.__isOnClick = new ObservedPropertySimplePU(!1, this, "isOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.item && (this.item = e.item); - void 0 !== e.isOnFocus && (this.isOnFocus = e.isOnFocus); - void 0 !== e.isOnHover && (this.isOnHover = e.isOnHover); - void 0 !== e.isOnClick && (this.isOnClick = e.isOnClick) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__isOnFocus.purgeDependencyOnElmtId(e); - this.__isOnHover.purgeDependencyOnElmtId(e); - this.__isOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__isOnFocus.aboutToBeDeleted(); - this.__isOnHover.aboutToBeDeleted(); - this.__isOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get isOnFocus() { - return this.__isOnFocus.get() - } - set isOnFocus(e) { - this.__isOnFocus.set(e) - } - get isOnHover() { - return this.__isOnHover.get() - } - set isOnHover(e) { - this.__isOnHover.set(e) - } - get isOnClick() { - return this.__isOnClick.get() - } - set isOnClick(e) { - this.__isOnClick.set(e) - } - getFgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon_pressed"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon"], - bundleName: "", - moduleName: "" - } - } - getBgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(ImageMenuItem.imageHotZoneWidth); - Row.height(ImageMenuItem.imageHotZoneWidth); - Row.borderRadius(ImageMenuItem.buttonBorderRadius); - Row.foregroundColor(this.getFgColor()); - Row.backgroundColor(this.getBgColor()); - Row.justifyContent(FlexAlign.Center); - Row.opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity); - Row.border(this.isOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Row.onFocus((() => { - this.item.isEnabled && (this.isOnFocus = !0) - })); - Row.onBlur((() => this.isOnFocus = !1)); - Row.onHover((e => { - this.item.isEnabled && (this.isOnHover = e) - })); - Row.onKeyEvent((e => { - if (this.item.isEnabled && (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE)) { - e.type === KeyType.Down && (this.isOnClick = !0); - e.type === KeyType.Up && (this.isOnClick = !1) - } - })); - Row.onTouch((e => { - if (this.item.isEnabled) { - e.type === TouchType.Down && (this.isOnClick = !0); - e.type === TouchType.Up && (this.isOnClick = !1) - } - })); - Row.onClick((() => this.item.isEnabled && this.item.action && this.item.action())); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.item.value); - Image.width(ImageMenuItem.imageSize); - Image.height(ImageMenuItem.imageSize); - Image.focusable(this.item.isEnabled); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - } - rerender() { - this.updateDirtyElements() - } -} -ImageMenuItem.imageSize = 24; -ImageMenuItem.imageHotZoneWidth = 48; -ImageMenuItem.buttonBorderRadius = 8; -ImageMenuItem.focusBorderWidth = 2; -ImageMenuItem.disabledImageOpacity = .4; -export default { - SelectTitleBar: SelectTitleBar -}; \ No newline at end of file diff --git a/interface/splitlayout/BUILD.gn b/interface/splitlayout/BUILD.gn deleted file mode 100644 index 8a0a21c..0000000 --- a/interface/splitlayout/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_splitlayout_abc") { - src_js = rebase_path("splitlayout.js") - dst_file = rebase_path(target_out_dir + "/splitlayout.abc") - in_puts = [ "splitlayout.js" ] - out_puts = [ target_out_dir + "/splitlayout.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("splitlayout_abc") { - input = get_label_info(":gen_splitlayout_abc", "target_out_dir") + "/splitlayout.abc" - output = target_out_dir + "/splitlayout_abc.o" - dep = ":gen_splitlayout_abc" -} - -ohos_shared_library("splitlayout") { - sources = [ "splitlayout.cpp" ] - - deps = [ ":splitlayout_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} \ No newline at end of file diff --git a/interface/splitlayout/splitlayout.cpp b/interface/splitlayout/splitlayout.cpp deleted file mode 100644 index 154b774..0000000 --- a/interface/splitlayout/splitlayout.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_splitlayout_abc_start[]; -extern const char _binary_splitlayout_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_splitlayout_GetABCCode(const char **buf, int *buflen) -{ - if (buf != nullptr) { - *buf = _binary_splitlayout_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_splitlayout_abc_end - _binary_splitlayout_abc_start; - } -} - -static napi_module splitlayoutModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "splitlayout", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void splitlayoutRegisterModule(void) -{ - napi_module_register(&splitlayoutModule); -} \ No newline at end of file diff --git a/interface/splitlayout/splitlayout.js b/interface/splitlayout/splitlayout.js deleted file mode 100644 index 85792d4..0000000 --- a/interface/splitlayout/splitlayout.js +++ /dev/null @@ -1,524 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export class splitlayout extends ViewPU { - constructor(e, t, o, r = -1) { - super(e, o, r); - this.container = void 0; - this.__sizeValue = new ObservedPropertySimplePU("", this, "sizeValue"); - this.__areaWidth = new ObservedPropertySimplePU(0, this, "areaWidth"); - this.__imageBackgroundColor = new ObservedPropertySimplePU("#FFFFFF", this, "imageBackgroundColor"); - this.__mainImage = new SynchedPropertyObjectOneWayPU(t.mainImage, this, "mainImage"); - this.__primaryText = new SynchedPropertySimpleOneWayPU(t.primaryText, this, "primaryText"); - this.secondaryText = "私人订制新歌精选站,为你推荐专属优质新歌;为你推荐专属优质新歌"; - this.tertiaryText = "每日更新"; - this.setInitiallyProvidedValue(t) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.container && (this.container = e.container); - void 0 !== e.sizeValue && (this.sizeValue = e.sizeValue); - void 0 !== e.areaWidth && (this.areaWidth = e.areaWidth); - void 0 !== e.imageBackgroundColor && (this.imageBackgroundColor = e.imageBackgroundColor); - void 0 !== e.mainImage ? this.__mainImage.set(e.mainImage) : this.__mainImage.set({ - id: -1, - type: 2e4, - params: ["app.media.music"], - bundleName: "", - moduleName: "" - }); - void 0 !== e.primaryText ? this.__primaryText.set(e.primaryText) : this.__primaryText.set("新歌推荐"); - void 0 !== e.secondaryText && (this.secondaryText = e.secondaryText); - void 0 !== e.tertiaryText && (this.tertiaryText = e.tertiaryText) - } - - updateStateVars(e) { - this.__mainImage.reset(e.mainImage); - this.__primaryText.reset(e.primaryText) - } - - purgeVariableDependenciesOnElmtId(e) { - this.__sizeValue.purgeDependencyOnElmtId(e); - this.__areaWidth.purgeDependencyOnElmtId(e); - this.__imageBackgroundColor.purgeDependencyOnElmtId(e); - this.__mainImage.purgeDependencyOnElmtId(e); - this.__primaryText.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__sizeValue.aboutToBeDeleted(); - this.__areaWidth.aboutToBeDeleted(); - this.__imageBackgroundColor.aboutToBeDeleted(); - this.__mainImage.aboutToBeDeleted(); - this.__primaryText.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get sizeValue() { - return this.__sizeValue.get() - } - - set sizeValue(e) { - this.__sizeValue.set(e) - } - - get areaWidth() { - return this.__areaWidth.get() - } - - set areaWidth(e) { - this.__areaWidth.set(e) - } - - get imageBackgroundColor() { - return this.__imageBackgroundColor.get() - } - - set imageBackgroundColor(e) { - this.__imageBackgroundColor.set(e) - } - - get mainImage() { - return this.__mainImage.get() - } - - set mainImage(e) { - this.__mainImage.set(e) - } - - get primaryText() { - return this.__primaryText.get() - } - - set primaryText(e) { - this.__primaryText.set(e) - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.onAreaChange(((e, t) => { - console.info(`Ace: on area change, oldValue is ${JSON.stringify(e)} value is ${JSON.stringify(t)}`); - this.sizeValue = JSON.stringify(t); - this.areaWidth = parseInt(t.width.toString(), 0); - console.info("pingAce: on area change, oldValue is" + this.areaWidth); - console.info("pingAce: on area change, oldValue is" + parseInt(t.height.toString(), 0)) - })); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.areaWidth < 600 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - GridRow.create({ - columns: 4, - breakpoints: { reference: BreakpointsReference.WindowSize }, - direction: GridRowDirection.Row - }); - t || GridRow.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - GridCol.create({ span: { xs: 4, sm: 4, md: 4, lg: 4 } }); - t || GridCol.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Stack.create({ alignContent: Alignment.Bottom }); - Stack.height("34%"); - Stack.width("100%"); - t || Stack.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.mainImage); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.alignItems(HorizontalAlign.Center); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_start"], - bundleName: "", - moduleName: "" - }, - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_end"], - bundleName: "", - moduleName: "" - } - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.primaryText); - Text.textAlign(TextAlign.Center); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline7"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.secondaryText); - Text.textAlign(TextAlign.Center); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ top: 4, bottom: 8 }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.tertiaryText); - Text.textAlign(TextAlign.Center); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_caption"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ bottom: 24 }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Column.pop(); - Stack.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.height("66%"); - Column.width("100%"); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.container.bind(this)(); - Column.pop(); - Column.pop(); - GridCol.pop(); - GridRow.pop() - })) : 600 < this.areaWidth && this.areaWidth < 840 ? this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - GridRow.create({ - columns: 8, - breakpoints: { reference: BreakpointsReference.WindowSize }, - direction: GridRowDirection.Row - }); - t || GridRow.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - GridCol.create({ span: { xs: 8, sm: 8, md: 8, lg: 8 } }); - t || GridCol.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(this.imageBackgroundColor); - Row.height("34%"); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.mainImage); - Image.margin({ left: 96, right: 36 }); - Image.height("60%"); - Image.width("20%"); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.alignItems(HorizontalAlign.Start); - Column.margin({ right: 96 }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.primaryText); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline7"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.secondaryText); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ top: 4, bottom: 8 }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.tertiaryText); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_caption"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Column.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.height("66%"); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.container.bind(this)(); - Column.pop(); - Column.pop(); - GridCol.pop(); - GridRow.pop() - })) : this.areaWidth > 840 && this.ifElseBranchUpdateFunction(2, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - GridRow.create({ - columns: 12, - breakpoints: { reference: BreakpointsReference.WindowSize }, - direction: GridRowDirection.Row - }); - t || GridRow.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - GridCol.create({ span: { xs: 4, sm: 4, md: 4, lg: 4 } }); - GridCol.height("100%"); - t || GridCol.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.height("100%"); - Column.backgroundColor(this.imageBackgroundColor); - Column.justifyContent(FlexAlign.Center); - Column.alignItems(HorizontalAlign.Center); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.mainImage); - Image.height("17%"); - Image.width("34%"); - Image.margin({ bottom: 36 }); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.primaryText); - Text.textAlign(TextAlign.Center); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline7"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ left: 48, right: 48 }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.secondaryText); - Text.textAlign(TextAlign.Center); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ top: 4, bottom: 8, left: 48, right: 48 }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.tertiaryText); - Text.textAlign(TextAlign.Center); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.margin({ bottom: 24, left: 48, right: 48 }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Column.pop(); - GridCol.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - GridCol.create({ span: { xs: 8, sm: 8, md: 8, lg: 8 } }); - t || GridCol.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.container.bind(this)(); - GridCol.pop(); - GridRow.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Column.pop() - } - - rerender() { - this.updateDirtyElements() - } -} \ No newline at end of file diff --git a/interface/subheader/BUILD.gn b/interface/subheader/BUILD.gn deleted file mode 100644 index 926d6ed..0000000 --- a/interface/subheader/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_subheader_abc") { - src_js = rebase_path("subheader.js") - dst_file = rebase_path(target_out_dir + "/subheader.abc") - in_puts = [ "subheader.js" ] - out_puts = [ target_out_dir + "/subheader.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("subheader_abc") { - input = get_label_info(":gen_subheader_abc", "target_out_dir") + "/subheader.abc" - output = target_out_dir + "/subheader_abc.o" - dep = ":gen_subheader_abc" -} - -ohos_shared_library("subheader") { - sources = [ "subheader.cpp" ] - - deps = [ ":subheader_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} \ No newline at end of file diff --git a/interface/subheader/subheader.cpp b/interface/subheader/subheader.cpp deleted file mode 100644 index 89d8b92..0000000 --- a/interface/subheader/subheader.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_subheader_abc_start[]; -extern const char _binary_subheader_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_SubHeader_GetABCCode(const char **buf, int *buflen) -{ - if (buf != nullptr) { - *buf = _binary_subheader_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_subheader_abc_end - _binary_subheader_abc_start; - } -} - -/* - * Module define - */ -static napi_module subheaderModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.SubHeader", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -/* - * Module register function - */ -extern "C" __attribute__((constructor)) void subheaderRegisterModule(void) -{ - napi_module_register(&subheaderModule); -} \ No newline at end of file diff --git a/interface/subheader/subheader.js b/interface/subheader/subheader.js deleted file mode 100644 index 651a883..0000000 --- a/interface/subheader/subheader.js +++ /dev/null @@ -1,1141 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const SPACE_MARGIN = 8; -const MARGIN_NUM = 4; -const IMAGE_WIDTH_NUM = 16; -const IMAGE_HEIGHT_NUM = 24; -const BUTTON_SIZE = 32; -const SINGLE_LINE_HEIGHT = 48; -const DOUBLE_LINE_HEIGHT = 64; -const BUTTON_HEIGHT = 28; -const IMAGE_WIDTH = 12; -const BORDER_WIDTH = 2; -const SINGLE_LINE_NUM = 1; -const DOUBLE_LINE_NUM = 2; -const MIN_FONT_SIZE = 14; -const MAIN_TEXT_SIZE = 10; -const MIN_CONSTRAINT_WIDTH = 3; - -export var OperationType; -!function(e){ - e[e.TEXT_ARROW=0] = "TEXT_ARROW"; - e[e.BUTTON=1] = "BUTTON"; - e[e.ICON_GROUP=2] = "ICON_GROUP"; - e[e.LOADING=3] = "LOADING" -}(OperationType || (OperationType = {})); - -class ButtonStyle extends ViewPU { - constructor(e, o, t, s = -1) { - super(e, t, s); - this.__buttonBgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "buttonBgColor"); - this.__isButtonFocus = new ObservedPropertySimplePU(!1, this, "isButtonFocus"); - this.button = void 0; - this.focusBorderWidth = 2; - this.setInitiallyProvidedValue(o) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.buttonBgColor && (this.buttonBgColor = e.buttonBgColor); - void 0 !== e.isButtonFocus && (this.isButtonFocus = e.isButtonFocus); - void 0 !== e.button && (this.button = e.button); - void 0 !== e.focusBorderWidth && (this.focusBorderWidth = e.focusBorderWidth) - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - this.__buttonBgColor.purgeDependencyOnElmtId(e); - this.__isButtonFocus.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__buttonBgColor.aboutToBeDeleted(); - this.__isButtonFocus.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get buttonBgColor() { - return this.__buttonBgColor.get() - } - - set buttonBgColor(e) { - this.__buttonBgColor.set(e) - } - - get isButtonFocus() { - return this.__isButtonFocus.get() - } - - set isButtonFocus(e) { - this.__isButtonFocus.set(e) - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.align(Alignment.End); - Row.justifyContent(FlexAlign.Center); - Row.focusable(!0); - Row.height(28); - Row.margin({ left: 8, right: 8 }); - Row.borderRadius(16); - Row.backgroundColor(ObservedObject.GetRawObject(this.buttonBgColor)); - Row.onTouch((e => { - if (e.type === TouchType.Down) { - this.button.action && this.button.action(); - this.buttonBgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } - } - e.type === TouchType.Up && (this.buttonBgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }) - })); - Row.onHover((e => { - this.buttonBgColor = e ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - } - })); - Row.border(this.isButtonFocus ? { - width: this.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { width: 0 }); - Row.onFocus((() => { - this.isButtonFocus = !0 - })); - Row.onBlur((() => { - this.isButtonFocus = !1 - })); - Row.onKeyEvent((e => { - 2054 !== e.keyCode && 2050 !== e.keyCode || this.button.action && this.button.action() - })); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.button.value); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_button2"], - bundleName: "", - moduleName: "" - }); - Text.fontWeight(FontWeight.Medium); - Text.margin({ left: 8, right: 8 }); - Text.focusable(!0); - Text.maxLines(2); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -class IconGroup extends ViewPU { - constructor(e, o, t, s = -1) { - super(e, t, s); - this.__bgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "bgColor"); - this.__isFocus = new ObservedPropertySimplePU(!1, this, "isFocus"); - this.item = void 0; - this.focusBorderWidth = 2; - this.setInitiallyProvidedValue(o) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.bgColor && (this.bgColor = e.bgColor); - void 0 !== e.isFocus && (this.isFocus = e.isFocus); - void 0 !== e.item && (this.item = e.item); - void 0 !== e.focusBorderWidth && (this.focusBorderWidth = e.focusBorderWidth) - } - - updateStateVars(e) { - } - - purgeVariableDependenciesOnElmtId(e) { - this.__bgColor.purgeDependencyOnElmtId(e); - this.__isFocus.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__bgColor.aboutToBeDeleted(); - this.__isFocus.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get bgColor() { - return this.__bgColor.get() - } - - set bgColor(e) { - this.__bgColor.set(e) - } - - get isFocus() { - return this.__isFocus.get() - } - - set isFocus(e) { - this.__isFocus.set(e) - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.focusable(!0); - Row.width(32); - Row.height(32); - Row.margin({ right: 8 }); - Row.justifyContent(FlexAlign.Center); - Row.borderRadius({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }); - Row.backgroundColor(ObservedObject.GetRawObject(this.bgColor)); - Row.onTouch((e => { - if (e.type === TouchType.Down) { - this.item.action && this.item.action(); - this.bgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } - } - e.type === TouchType.Up && (this.bgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }) - })); - Row.onHover((e => { - this.bgColor = e ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - } - })); - Row.border(this.isFocus ? { - width: this.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { width: 0 }); - Row.onFocus((() => { - this.isFocus = !0 - })); - Row.onBlur((() => { - this.isFocus = !1 - })); - Row.onKeyEvent((e => { - 2054 !== e.keyCode && 2050 !== e.keyCode || this.item.action && this.item.action() - })); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.item.value); - Image.fillColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary"], - bundleName: "", - moduleName: "" - }); - Image.width(24); - Image.height(24); - Image.focusable(!0); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -export class SubHeader extends ViewPU { - constructor(e, o, t, s = -1) { - super(e, t, s); - this.__icon = new SynchedPropertyObjectOneWayPU(o.icon, this, "icon"); - this.__primaryTitle = new SynchedPropertySimpleOneWayPU(o.primaryTitle, this, "primaryTitle"); - this.__secondaryTitle = new SynchedPropertySimpleOneWayPU(o.secondaryTitle, this, "secondaryTitle"); - this.__select = new SynchedPropertyObjectOneWayPU(o.select, this, "select"); - this.__operationType = new SynchedPropertySimpleOneWayPU(o.operationType, this, "operationType"); - this.operationItem = void 0; - this.__isDuplicateLine = new ObservedPropertySimplePU(!1, this, "isDuplicateLine"); - this.__textArrowBgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "textArrowBgColor"); - this.__buttonBgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "buttonBgColor"); - this.__iconBgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "iconBgColor"); - this.__firstIconBgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "firstIconBgColor"); - this.__SecondaryIconBgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "SecondaryIconBgColor"); - this.__thirdIconBgColor = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }, this, "thirdIconBgColor"); - this.__flag = new ObservedPropertySimplePU(!1, this, "flag"); - this.__isTextArrowFocus = new ObservedPropertySimplePU(!1, this, "isTextArrowFocus"); - this.focusBorderWidth = 2; - this.setInitiallyProvidedValue(o) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.operationType ? this.__operationType.set(e.operationType) : this.__operationType.set(OperationType.BUTTON); - void 0 !== e.operationItem && (this.operationItem = e.operationItem); - void 0 !== e.isDuplicateLine && (this.isDuplicateLine = e.isDuplicateLine); - void 0 !== e.textArrowBgColor && (this.textArrowBgColor = e.textArrowBgColor); - void 0 !== e.buttonBgColor && (this.buttonBgColor = e.buttonBgColor); - void 0 !== e.iconBgColor && (this.iconBgColor = e.iconBgColor); - void 0 !== e.firstIconBgColor && (this.firstIconBgColor = e.firstIconBgColor); - void 0 !== e.SecondaryIconBgColor && (this.SecondaryIconBgColor = e.SecondaryIconBgColor); - void 0 !== e.thirdIconBgColor && (this.thirdIconBgColor = e.thirdIconBgColor); - void 0 !== e.flag && (this.flag = e.flag); - void 0 !== e.isTextArrowFocus && (this.isTextArrowFocus = e.isTextArrowFocus); - void 0 !== e.focusBorderWidth && (this.focusBorderWidth = e.focusBorderWidth) - } - - updateStateVars(e) { - this.__icon.reset(e.icon); - this.__primaryTitle.reset(e.primaryTitle); - this.__secondaryTitle.reset(e.secondaryTitle); - this.__select.reset(e.select); - this.__operationType.reset(e.operationType) - } - - purgeVariableDependenciesOnElmtId(e) { - this.__icon.purgeDependencyOnElmtId(e); - this.__primaryTitle.purgeDependencyOnElmtId(e); - this.__secondaryTitle.purgeDependencyOnElmtId(e); - this.__select.purgeDependencyOnElmtId(e); - this.__operationType.purgeDependencyOnElmtId(e); - this.__isDuplicateLine.purgeDependencyOnElmtId(e); - this.__textArrowBgColor.purgeDependencyOnElmtId(e); - this.__buttonBgColor.purgeDependencyOnElmtId(e); - this.__iconBgColor.purgeDependencyOnElmtId(e); - this.__firstIconBgColor.purgeDependencyOnElmtId(e); - this.__SecondaryIconBgColor.purgeDependencyOnElmtId(e); - this.__thirdIconBgColor.purgeDependencyOnElmtId(e); - this.__flag.purgeDependencyOnElmtId(e); - this.__isTextArrowFocus.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__icon.aboutToBeDeleted(); - this.__primaryTitle.aboutToBeDeleted(); - this.__secondaryTitle.aboutToBeDeleted(); - this.__select.aboutToBeDeleted(); - this.__operationType.aboutToBeDeleted(); - this.__isDuplicateLine.aboutToBeDeleted(); - this.__textArrowBgColor.aboutToBeDeleted(); - this.__buttonBgColor.aboutToBeDeleted(); - this.__iconBgColor.aboutToBeDeleted(); - this.__firstIconBgColor.aboutToBeDeleted(); - this.__SecondaryIconBgColor.aboutToBeDeleted(); - this.__thirdIconBgColor.aboutToBeDeleted(); - this.__flag.aboutToBeDeleted(); - this.__isTextArrowFocus.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get icon() { - return this.__icon.get() - } - - set icon(e) { - this.__icon.set(e) - } - - get primaryTitle() { - return this.__primaryTitle.get() - } - - set primaryTitle(e) { - this.__primaryTitle.set(e) - } - - get secondaryTitle() { - return this.__secondaryTitle.get() - } - - set secondaryTitle(e) { - this.__secondaryTitle.set(e) - } - - get select() { - return this.__select.get() - } - - set select(e) { - this.__select.set(e) - } - - get operationType() { - return this.__operationType.get() - } - - set operationType(e) { - this.__operationType.set(e) - } - - get isDuplicateLine() { - return this.__isDuplicateLine.get() - } - - set isDuplicateLine(e) { - this.__isDuplicateLine.set(e) - } - - get textArrowBgColor() { - return this.__textArrowBgColor.get() - } - - set textArrowBgColor(e) { - this.__textArrowBgColor.set(e) - } - - get buttonBgColor() { - return this.__buttonBgColor.get() - } - - set buttonBgColor(e) { - this.__buttonBgColor.set(e) - } - - get iconBgColor() { - return this.__iconBgColor.get() - } - - set iconBgColor(e) { - this.__iconBgColor.set(e) - } - - get firstIconBgColor() { - return this.__firstIconBgColor.get() - } - - set firstIconBgColor(e) { - this.__firstIconBgColor.set(e) - } - - get SecondaryIconBgColor() { - return this.__SecondaryIconBgColor.get() - } - - set SecondaryIconBgColor(e) { - this.__SecondaryIconBgColor.set(e) - } - - get thirdIconBgColor() { - return this.__thirdIconBgColor.get() - } - - set thirdIconBgColor(e) { - this.__thirdIconBgColor.set(e) - } - - get flag() { - return this.__flag.get() - } - - set flag(e) { - this.__flag.set(e) - } - - get isTextArrowFocus() { - return this.__isTextArrowFocus.get() - } - - set isTextArrowFocus(e) { - this.__isTextArrowFocus.set(e) - } - - ListTextStyle(e, o = null) { - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(e.content); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title3"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(2); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_end"], - bundleName: "", - moduleName: "" - }, - bottom: 8, - right: 4 - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - } - - ListIconStyle(e, o, t = null) { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_end"], - bundleName: "", - moduleName: "" - }, - bottom: 8, - right: 4 - }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(o); - Image.width(16); - Image.height(16); - Image.margin({ right: 8 }); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(e.content); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title3"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(2); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - } - - ContentTextStyle(e, o = null) { - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(e.content); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title2"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(2); - Text.maxFontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title2"], - bundleName: "", - moduleName: "" - }); - Text.minFontSize(14); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_start"], - bundleName: "", - moduleName: "" - }, - right: 4, - bottom: 8 - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - } - - SubTextStyle(e, o = null) { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.alignItems(HorizontalAlign.Start); - Column.onAppear((() => { - this.isDuplicateLine = !0 - })); - Column.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_start"], - bundleName: "", - moduleName: "" - }, - right: 4, - bottom: 8 - }); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(e.content); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title2"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.maxFontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title2"], - bundleName: "", - moduleName: "" - }); - Text.minFontSize(14); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(e.subContent); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title3"], - bundleName: "", - moduleName: "" - }); - Text.maxLines(1); - Text.maxFontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_sub_title3"], - bundleName: "", - moduleName: "" - }); - Text.minFontSize(10); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Column.pop() - } - - SelectStyle(e, o = null) { - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Select.create(e.options); - Select.selected(e.selected); - Select.value(e.value); - Select.onSelect(((o, t) => { - e.onSelect && e.onSelect(o, t) - })); - Select.margin({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_start"], - bundleName: "", - moduleName: "" - }, - right: 4 - }); - t || Select.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Select.pop() - } - - LoadingProcessStyle(e = null) { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - LoadingProgress.create(); - LoadingProgress.width(24); - LoadingProgress.height(24); - LoadingProgress.focusable(!0); - LoadingProgress.margin({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_end"], - bundleName: "", - moduleName: "" - } - }); - o || LoadingProgress.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - } - - TextArrowStyle(e, o = null) { - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.focusable(!0); - Row.margin({ left: 4, right: 4, bottom: 4 }); - Row.borderRadius({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_subtab"], - bundleName: "", - moduleName: "" - }); - Row.backgroundColor(ObservedObject.GetRawObject(this.textArrowBgColor)); - Row.onTouch((o => { - if (o.type === TouchType.Down) { - e.action && e.action(); - this.textArrowBgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } - } - o.type === TouchType.Up && (this.textArrowBgColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }) - })); - Row.onHover((e => { - this.textArrowBgColor = e ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - } - })); - Row.border(this.isTextArrowFocus ? { - width: this.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { width: 0 }); - Row.onFocus((() => { - this.isTextArrowFocus = !0 - })); - Row.onBlur((() => { - this.isTextArrowFocus = !1 - })); - Row.onKeyEvent((o => { - 2054 !== o.keyCode && 2050 !== o.keyCode || e.action && e.action() - })); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ left: 8, right: 8 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Text.create(e.value); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.margin({ right: 4 }); - Text.focusable(!0); - Text.maxLines(2); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create({ - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_right"], - bundleName: "", - moduleName: "" - }); - Image.fillColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_tertiary"], - bundleName: "", - moduleName: "" - }); - Image.width(12); - Image.height(24); - Image.focusable(!0); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop(); - Row.pop() - } - - initialRender() { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Flex.create({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.End }); - Flex.padding({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_default_padding_end"], - bundleName: "", - moduleName: "" - } - }); - Flex.height(this.isDuplicateLine ? 64 : 48); - o || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - null != this.secondaryTitle && null != this.icon ? this.ifElseBranchUpdateFunction(0, (() => { - this.ListIconStyle.bind(this)({ content: this.secondaryTitle }, ObservedObject.GetRawObject(this.icon)) - })) : null != this.secondaryTitle && null != this.primaryTitle ? this.ifElseBranchUpdateFunction(1, (() => { - this.SubTextStyle.bind(this)(makeBuilderParameterProxy("SubTextStyle", { - content: () => this.__primaryTitle ? this.__primaryTitle : this.primaryTitle, - subContent: () => this.__secondaryTitle ? this.__secondaryTitle : this.secondaryTitle - })) - })) : null != this.secondaryTitle ? this.ifElseBranchUpdateFunction(2, (() => { - this.ListTextStyle.bind(this)(makeBuilderParameterProxy("ListTextStyle", { - content: () => this.__secondaryTitle ? this.__secondaryTitle : this.secondaryTitle - })) - })) : null != this.select ? this.ifElseBranchUpdateFunction(3, (() => { - this.SelectStyle.bind(this)(ObservedObject.GetRawObject(this.select)) - })) : null != this.primaryTitle && this.ifElseBranchUpdateFunction(4, (() => { - this.ContentTextStyle.bind(this)(makeBuilderParameterProxy("ContentTextStyle", { - content: () => this.__primaryTitle ? this.__primaryTitle : this.primaryTitle - })) - })); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.operationType === OperationType.BUTTON && null != this.operationItem ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - __Common__.create(); - __Common__.margin({ bottom: 4 }); - o || __Common__.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new ButtonStyle(this, { - button: this.operationItem[0] - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })); - __Common__.pop() - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.operationType === OperationType.ICON_GROUP && null != this.operationItem ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ bottom: 4 }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.operationItem, ((e, o) => { - const t = e; - this.observeComponentCreation(((e, s) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - 0 == o ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new IconGroup(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - s || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, s) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - 1 == o ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new IconGroup(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - s || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, s) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - 2 == o ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new IconGroup(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - s || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - }), void 0,!0,!1); - o || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - Row.pop() - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.operationType === OperationType.TEXT_ARROW && null != this.operationItem ? this.ifElseBranchUpdateFunction(0, (() => { - this.TextArrowStyle.bind(this)(this.operationItem[0]) - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.operationType === OperationType.LOADING ? this.ifElseBranchUpdateFunction(0, (() => { - this.LoadingProcessStyle.bind(this)() - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Flex.pop() - } - - rerender() { - this.updateDirtyElements() - } -} - -export default { OperationStyle, SubHeader } \ No newline at end of file diff --git a/interface/swiperefresher/BUILD.gn b/interface/swiperefresher/BUILD.gn deleted file mode 100644 index 785f9a4..0000000 --- a/interface/swiperefresher/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_swiperefresher_abc") { - src_js = rebase_path("swiperefresher.js") - dst_file = rebase_path(target_out_dir + "/swiperefresher.abc") - in_puts = [ "swiperefresher.js" ] - out_puts = [ target_out_dir + "/swiperefresher.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("swiperefresher_abc") { - input = get_label_info(":gen_swiperefresher_abc", "target_out_dir") + "/swiperefresher.abc" - output = target_out_dir + "/swiperefresher_abc.o" - dep = ":gen_swiperefresher_abc" -} - -ohos_shared_library("swiperefresher") { - sources = [ "swiperefresher.cpp" ] - - deps = [ ":swiperefresher_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} diff --git a/interface/swiperefresher/swiperefresher.cpp b/interface/swiperefresher/swiperefresher.cpp deleted file mode 100644 index 8d5726b..0000000 --- a/interface/swiperefresher/swiperefresher.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_swiperefresher_abc_start[]; -extern const char _binary_swiperefresher_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_swiperefresher_GetABCCode(const char **buf, int *buflen) - { - if (buf != nullptr) { - *buf = _binary_swiperefresher_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_swiperefresher_abc_end - _binary_swiperefresher_abc_start; - } - } - - -static napi_module swiperefresherModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.SwipeRefresher", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void swiperefresherRegisterModule(void) -{ - napi_module_register(&swiperefresherModule); -} \ No newline at end of file diff --git a/interface/swiperefresher/swiperefresher.js b/interface/swiperefresher/swiperefresher.js deleted file mode 100644 index d34c05f..0000000 --- a/interface/swiperefresher/swiperefresher.js +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const LOADINGPROGRESS_SIZE = 24; -const DEFAULT_MARGIN = 16; -const ITEM_SPACE = 4; - -export class SwipeRefresher extends ViewPU { - constructor(e, t, o, s = -1) { - super(e, o, s); - this.__content = new SynchedPropertySimpleOneWayPU(t.content, this, "content"); - this.__isLoading = new SynchedPropertySimpleOneWayPU(t.isLoading, this, "isLoading"); - this.setInitiallyProvidedValue(t) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.content ? this.__content.set(e.content) : this.__content.set(null); - void 0 !== e.isLoading ? this.__isLoading.set(e.isLoading) : this.__isLoading.set(!1) - } - - updateStateVars(e) { - this.__content.reset(e.content); - this.__isLoading.reset(e.isLoading) - } - - purgeVariableDependenciesOnElmtId(e) { - this.__content.purgeDependencyOnElmtId(e); - this.__isLoading.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__content.aboutToBeDeleted(); - this.__isLoading.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get content() { - return this.__content.get() - } - - set content(e) { - this.__content.set(e) - } - - get isLoading() { - return this.__isLoading.get() - } - - set isLoading(e) { - this.__isLoading.set(e) - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Flex.create({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }); - Flex.margin({ top: 16, bottom: 16 }); - t || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.isLoading ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - LoadingProgress.create(); - LoadingProgress.height(24); - LoadingProgress.width(24); - LoadingProgress.margin({ right: 4 }); - t || LoadingProgress.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.content); - Text.fontColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Flex.pop() - } - - rerender() { - this.updateDirtyElements() - } -} \ No newline at end of file diff --git a/interface/tabtitlebar/BUILD.gn b/interface/tabtitlebar/BUILD.gn deleted file mode 100755 index 5a1effe..0000000 --- a/interface/tabtitlebar/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_tabtitlebar_abc") { - src_js = rebase_path("tabtitlebar.js") - dst_file = rebase_path(target_out_dir + "/tabtitlebar.abc") - in_puts = [ "tabtitlebar.js" ] - out_puts = [ target_out_dir + "/tabtitlebar.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("tabtitlebar_abc") { - input = get_label_info(":gen_tabtitlebar_abc", "target_out_dir") + "/tabtitlebar.abc" - output = target_out_dir + "/tabtitlebar_abc.o" - dep = ":gen_tabtitlebar_abc" -} - -ohos_shared_library("tabtitlebar") { - sources = [ "tabtitlebar.cpp" ] - - deps = [ ":tabtitlebar_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} diff --git a/interface/tabtitlebar/tabtitlebar.cpp b/interface/tabtitlebar/tabtitlebar.cpp deleted file mode 100644 index 8cc4eb3..0000000 --- a/interface/tabtitlebar/tabtitlebar.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_tabtitlebar_abc_start[]; -extern const char _binary_tabtitlebar_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_TabTitleBar_GetABCCode(const char **buf, int *buflen) - { - if (buf != nullptr) { - *buf = _binary_tabtitlebar_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_tabtitlebar_abc_end - _binary_tabtitlebar_abc_start; - } - } - - -static napi_module tabtitlebarModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.TabTitleBar", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void tabtitlebarRegisterModule(void) -{ - napi_module_register(&tabtitlebarModule); -} \ No newline at end of file diff --git a/interface/tabtitlebar/tabtitlebar.js b/interface/tabtitlebar/tabtitlebar.js deleted file mode 100644 index f2b8bc1..0000000 --- a/interface/tabtitlebar/tabtitlebar.js +++ /dev/null @@ -1,930 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var __decorate = this && this.__decorate || function(e, t, o, i) { - var s, r = arguments.length, - n = r < 3 ? t : null === i ? i = Object.getOwnPropertyDescriptor(t, o) : i; - if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) n = Reflect.decorate(e, t, o, i); - else - for (var c = e.length - 1; c >= 0; c--)(s = e[c]) && (n = (r < 3 ? s(n) : r > 3 ? s(t, o, n) : s(t, o)) || n); - return r > 3 && n && Object.defineProperty(t, o, n), n -}; -const KeyCode = requireNapi('multimodalInput.keyCode').KeyCode; -const PUBLIC_MORE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABEZJREFUeNrt3D1rFFEUBuAxhmAhFlYpUohYiYWFRcAmKAhWK2pjo1iKf8BCMIKFf8BarCyMhVj4VZhGSKEg2FqJyCKWIhYWnstMINgYsh+cmfs88BICydxw7jmzu2HvNg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBN+3r6dx+LXIqsRpa7FF8j48hm5Fn3Peo9mAEYRdYjJ3f582Vj7nZfUe/eDsCRyMPI2h5/fyNyI/JDT6v3Tvt7sBllE15ETkxwjeORi5G3ke/6W737MgBnI68jh6ZwrcORq5HnhkC9+zAA5YXXy8jBKV5zKXIu8jjyS7+rd+YBeNVtyrSVO9PRyBM9r94LSTfjWuTUDK9/eYIXeENUbb0zDsBi5PYc1rmj79U74wCszuih+F/ljrSi/+uud8YBGA10rayqrnfGAVgb6FpZVV3vjAOwPNC1sqq63hkHYGWga2VVdb0XKt/8Rf1fd70zDsB4jmt5u3Tl9a59AMb6v+56ZxyArYGulVXV9c44ABtzXOup/q+73hkH4N2cHio/Rj7r/7rrnXEAfkfuz2Gddb2v3ln/DfpgxneLzaY9xE3l9c46AH8iVyI/Z3Dt8nB/Xc+rd5H5QMy3yJemPVs6zY0edc9HUe/0Z4I/dQ/N5Vjd0oTXKp9QcKFpD2qj3r0YgO1NeRM507TH6/bifeR85IMeV++d+vTBWOV9JDcjt5rdv6uw3M3uRR7pa/Xu+wBsOxA53bTnTP/3UX1b3fNQ1BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqyr6d/97HIpchqZLlL8TUyjmxGnnXfo96DGYBRZD1ycpc/XzbmbvcV9e7tAByJPIys7fH3NyI3Ij/0tHrvtL8Hm1E24UXkxATXOB65GHkb+a6/1bsvA3A28jpyaArXOhy5GnluCNS7DwNQXni9jByc4jWXIucijyO/9Lt6Zx6AV92mTFu5Mx2NPNHz6r2QdDOuRU7N8PqXJ3iBN0TV1jvjACxGbs9hnTv6Xr0zDsDqjB6K/1XuSCv6v+56ZxyA0UDXyqrqemccgLWBrpVV1fXOOADLA10rq6rrnXEAVga6VlZV13uh8s1f1P911zvjAIznuJa3S1de79oHYKz/6653xgHYGuhaWVVd74wDsDHHtZ7q/7rrnXEA3s3pofJj5LP+r7veGQfgd+T+HNZZ1/vqnfXfoA9mfLfYbNpD3FRe76wD8CdyJfJzBtcuD/fX9bx6F5kPxHyLfGnas6XT3OhR93wU9U5/JvhT99BcjtUtTXit8gkFF5r2oDbq3YsB2N6UN5EzTXu8bi/eR85HPuhx9d6pTx+MVd5HcjNyq9n9uwrL3exe5JG+Vu++D8C2A5HTTXvO9H8f1bfVPQ9FvQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCn7C9HjBtwWfXpKAAAAAElFTkSuQmCC"; -export class TabTitleBar extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.tabItems = void 0; - this.menuItems = void 0; - this.swiperContent = void 0; - this.__tabWidth = new ObservedPropertySimplePU(0, this, "tabWidth"); - this.__currentIndex = new ObservedPropertySimplePU(0, this, "currentIndex"); - this.menuSectionWidth = 0; - this.scroller = new Scroller; - this.swiperController = new SwiperController; - this.settings = new RenderingContextSettings(!0); - this.leftContext2D = new CanvasRenderingContext2D(this.settings); - this.rightContext2D = new CanvasRenderingContext2D(this.settings); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.tabItems && (this.tabItems = e.tabItems); - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.swiperContent && (this.swiperContent = e.swiperContent); - void 0 !== e.tabWidth && (this.tabWidth = e.tabWidth); - void 0 !== e.currentIndex && (this.currentIndex = e.currentIndex); - void 0 !== e.menuSectionWidth && (this.menuSectionWidth = e.menuSectionWidth); - void 0 !== e.scroller && (this.scroller = e.scroller); - void 0 !== e.swiperController && (this.swiperController = e.swiperController); - void 0 !== e.settings && (this.settings = e.settings); - void 0 !== e.leftContext2D && (this.leftContext2D = e.leftContext2D); - void 0 !== e.rightContext2D && (this.rightContext2D = e.rightContext2D) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__tabWidth.purgeDependencyOnElmtId(e); - this.__currentIndex.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__tabWidth.aboutToBeDeleted(); - this.__currentIndex.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get tabWidth() { - return this.__tabWidth.get() - } - set tabWidth(e) { - this.__tabWidth.set(e) - } - get currentIndex() { - return this.__currentIndex.get() - } - set currentIndex(e) { - this.__currentIndex.set(e) - } - GradientMask(e, t, o, i, s, r = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width(TabTitleBar.gradientMaskWidth); - Column.height(TabTitleBar.totalHeight); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((r, n) => { - ViewStackProcessor.StartGetAccessRecordingFor(r); - Canvas.create(e); - Canvas.width(TabTitleBar.gradientMaskWidth); - Canvas.height(TabTitleBar.totalHeight); - Canvas.onReady((() => { - var r = e.createLinearGradient(t, o, i, s); - r.addColorStop(0, "#ffffffff"); - r.addColorStop(1, "#00ffffff"); - e.fillStyle = r; - e.fillRect(0, 0, TabTitleBar.gradientMaskWidth, TabTitleBar.totalHeight) - })); - n || Canvas.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Canvas.pop(); - Column.pop() - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Flex.create({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }); - Flex.backgroundColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }); - Flex.margin({ - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_max_padding_end"], - bundleName: "", - moduleName: "" - } - }); - Flex.onAreaChange(((e, t) => { - this.tabWidth = Number(t.width) - this.menuSectionWidth - })); - t || Flex.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Stack.create({ - alignContent: Alignment.End - }); - t || Stack.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Stack.create({ - alignContent: Alignment.Start - }); - t || Stack.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - List.create({ - initialIndex: 0, - scroller: this.scroller, - space: 0 - }); - List.width("100%"); - List.height(TabTitleBar.totalHeight); - List.constraintSize({ - maxWidth: this.tabWidth - }); - List.edgeEffect(EdgeEffect.Spring); - List.listDirection(Axis.Horizontal); - List.scrollBar(BarState.Off); - t || List.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.tabItems, ((e, t) => { - const o = e; - { - const e = !0; - const i = (t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - ListItem.create(r, e); - o || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording() - }; - const s = () => { - this.observeComponentCreation(i); - this.observeComponentCreation(((e, i) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - i ? ViewPU.create(new TabContentItem(this, { - item: o, - index: t, - maxIndex: this.tabItems.length - 1, - currentIndex: this.currentIndex, - onCustomClick: () => this.currentIndex = t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, { - currentIndex: this.currentIndex - }); - ViewStackProcessor.StopGetAccessRecording() - })); - ListItem.pop() - }; - const r = (e, s) => { - i(e, s); - this.updateFuncByElmtId.set(e, i); - this.observeComponentCreation(((e, i) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - i ? ViewPU.create(new TabContentItem(this, { - item: o, - index: t, - maxIndex: this.tabItems.length - 1, - currentIndex: this.currentIndex, - onCustomClick: () => this.currentIndex = t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, { - currentIndex: this.currentIndex - }); - ViewStackProcessor.StopGetAccessRecording() - })); - ListItem.pop() - }; - e ? (() => { - this.observeComponentCreation(i); - ListItem.pop() - })() : s() - } - }), void 0, !0, !1); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - List.pop(); - Column.pop(); - this.GradientMask.bind(this)(this.leftContext2D, 0, TabTitleBar.totalHeight / 2, TabTitleBar.gradientMaskWidth, TabTitleBar.totalHeight / 2); - Stack.pop(); - this.GradientMask.bind(this)(this.rightContext2D, TabTitleBar.gradientMaskWidth, TabTitleBar.totalHeight / 2, 0, TabTitleBar.totalHeight / 2); - Stack.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 !== this.menuItems && this.menuItems.length > 0 ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - __Common__.create(); - __Common__.height(TabTitleBar.totalHeight); - __Common__.onAreaChange(((e, t) => { - this.menuSectionWidth = Number(t.width) - })); - t || __Common__.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new CollapsibleMenuSection(this, { - menuItems: this.menuItems - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })); - __Common__.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Flex.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Swiper.create(this.swiperController); - Swiper.index(this.currentIndex); - Swiper.itemSpace(0); - Swiper.indicator(!1); - Swiper.width("100%"); - Swiper.height("100%"); - Swiper.curve(Curve.Friction); - Swiper.onChange((e => { - this.currentIndex = e; - this.scroller.scrollToIndex(this.currentIndex); - this.scroller.scrollBy(TabTitleBar.correctionOffset, 0) - })); - Swiper.onAppear((() => { - this.scroller.scrollToIndex(this.currentIndex); - this.scroller.scrollBy(TabTitleBar.correctionOffset, 0) - })); - t || Swiper.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.swiperContent.bind(this)(); - Swiper.pop(); - Column.pop(); - Column.pop() - } - rerender() { - this.updateDirtyElements() - } -} -TabTitleBar.totalHeight = 56; -TabTitleBar.correctionOffset = -40; -TabTitleBar.gradientMaskWidth = 24; -__decorate([], TabTitleBar.prototype, "GradientMask", null); -class CollapsibleMenuSection extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.menuItems = void 0; - this.__isPopupShown = new ObservedPropertySimplePU(!1, this, "isPopupShown"); - this.__isMoreIconOnFocus = new ObservedPropertySimplePU(!1, this, "isMoreIconOnFocus"); - this.__isMoreIconOnHover = new ObservedPropertySimplePU(!1, this, "isMoreIconOnHover"); - this.__isMoreIconOnClick = new ObservedPropertySimplePU(!1, this, "isMoreIconOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.menuItems && (this.menuItems = e.menuItems); - void 0 !== e.isPopupShown && (this.isPopupShown = e.isPopupShown); - void 0 !== e.isMoreIconOnFocus && (this.isMoreIconOnFocus = e.isMoreIconOnFocus); - void 0 !== e.isMoreIconOnHover && (this.isMoreIconOnHover = e.isMoreIconOnHover); - void 0 !== e.isMoreIconOnClick && (this.isMoreIconOnClick = e.isMoreIconOnClick) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__isPopupShown.purgeDependencyOnElmtId(e); - this.__isMoreIconOnFocus.purgeDependencyOnElmtId(e); - this.__isMoreIconOnHover.purgeDependencyOnElmtId(e); - this.__isMoreIconOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__isPopupShown.aboutToBeDeleted(); - this.__isMoreIconOnFocus.aboutToBeDeleted(); - this.__isMoreIconOnHover.aboutToBeDeleted(); - this.__isMoreIconOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get isPopupShown() { - return this.__isPopupShown.get() - } - set isPopupShown(e) { - this.__isPopupShown.set(e) - } - get isMoreIconOnFocus() { - return this.__isMoreIconOnFocus.get() - } - set isMoreIconOnFocus(e) { - this.__isMoreIconOnFocus.set(e) - } - get isMoreIconOnHover() { - return this.__isMoreIconOnHover.get() - } - set isMoreIconOnHover(e) { - this.__isMoreIconOnHover.set(e) - } - get isMoreIconOnClick() { - return this.__isMoreIconOnClick.get() - } - set isMoreIconOnClick(e) { - this.__isMoreIconOnClick.set(e) - } - getMoreIconFgColor() { - return this.isMoreIconOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon_pressed"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon"], - bundleName: "", - moduleName: "" - } - } - getMoreIconBgColor() { - return this.isMoreIconOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isMoreIconOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.height("100%"); - Column.justifyContent(FlexAlign.Center); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.menuItems.length <= CollapsibleMenuSection.maxCountOfVisibleItems ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems, (e => { - const t = e; - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new ImageMenuItem(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems.slice(0, CollapsibleMenuSection.maxCountOfVisibleItems - 1), (e => { - const t = e; - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - o ? ViewPU.create(new ImageMenuItem(this, { - item: t - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(ImageMenuItem.imageHotZoneWidth); - Row.height(ImageMenuItem.imageHotZoneWidth); - Row.borderRadius(ImageMenuItem.buttonBorderRadius); - Row.foregroundColor(this.getMoreIconFgColor()); - Row.backgroundColor(this.getMoreIconBgColor()); - Row.justifyContent(FlexAlign.Center); - Row.border(this.isMoreIconOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Row.onFocus((() => this.isMoreIconOnFocus = !0)); - Row.onBlur((() => this.isMoreIconOnFocus = !1)); - Row.onHover((e => this.isMoreIconOnHover = e)); - Row.onKeyEvent((e => { - if (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE) { - e.type === KeyType.Down && (this.isMoreIconOnClick = !0); - e.type === KeyType.Up && (this.isMoreIconOnClick = !1) - } - })); - Row.onTouch((e => { - e.type === TouchType.Down && (this.isMoreIconOnClick = !0); - e.type === TouchType.Up && (this.isMoreIconOnClick = !1) - })); - Row.onClick((() => this.isPopupShown = !0)); - Row.bindPopup(this.isPopupShown, { - builder: { - builder: this.popupBuilder.bind(this) - }, - placement: Placement.Bottom, - popupColor: Color.White, - enableArrow: !1, - onStateChange: e => this.isPopupShown = e.isVisible - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(PUBLIC_MORE); - Image.width(ImageMenuItem.imageSize); - Image.height(ImageMenuItem.imageSize); - Image.focusable(!0); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Row.pop(); - Column.pop() - } - popupBuilder(e = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width(ImageMenuItem.imageHotZoneWidth + CollapsibleMenuSection.focusPadding * CollapsibleMenuSection.marginsNum); - Column.margin({ - top: CollapsibleMenuSection.focusPadding, - bottom: CollapsibleMenuSection.focusPadding - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.menuItems.slice(CollapsibleMenuSection.maxCountOfVisibleItems - 1, this.menuItems.length), ((e, t) => { - const o = e; - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - t ? ViewPU.create(new ImageMenuItem(this, { - item: o - }, void 0, e)) : this.updateStateVarsOfChildByElmtId(e, {}); - ViewStackProcessor.StopGetAccessRecording() - })) - }), void 0, !0, !1); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - ForEach.pop(); - Column.pop() - } - rerender() { - this.updateDirtyElements() - } -} -CollapsibleMenuSection.maxCountOfVisibleItems = 1; -CollapsibleMenuSection.focusPadding = 4; -CollapsibleMenuSection.marginsNum = 2; -__decorate([], CollapsibleMenuSection.prototype, "popupBuilder", null); -class TabContentItem extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.item = void 0; - this.index = void 0; - this.maxIndex = void 0; - this.onCustomClick = void 0; - this.__currentIndex = new SynchedPropertySimpleOneWayPU(t.currentIndex, this, "currentIndex"); - this.__isOnFocus = new ObservedPropertySimplePU(!1, this, "isOnFocus"); - this.__isOnHover = new ObservedPropertySimplePU(!1, this, "isOnHover"); - this.__isOnClick = new ObservedPropertySimplePU(!1, this, "isOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.item && (this.item = e.item); - void 0 !== e.index && (this.index = e.index); - void 0 !== e.maxIndex && (this.maxIndex = e.maxIndex); - void 0 !== e.onCustomClick && (this.onCustomClick = e.onCustomClick); - void 0 !== e.isOnFocus && (this.isOnFocus = e.isOnFocus); - void 0 !== e.isOnHover && (this.isOnHover = e.isOnHover); - void 0 !== e.isOnClick && (this.isOnClick = e.isOnClick) - } - updateStateVars(e) { - this.__currentIndex.reset(e.currentIndex) - } - purgeVariableDependenciesOnElmtId(e) { - this.__currentIndex.purgeDependencyOnElmtId(e); - this.__isOnFocus.purgeDependencyOnElmtId(e); - this.__isOnHover.purgeDependencyOnElmtId(e); - this.__isOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__currentIndex.aboutToBeDeleted(); - this.__isOnFocus.aboutToBeDeleted(); - this.__isOnHover.aboutToBeDeleted(); - this.__isOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get currentIndex() { - return this.__currentIndex.get() - } - set currentIndex(e) { - this.__currentIndex.set(e) - } - get isOnFocus() { - return this.__isOnFocus.get() - } - set isOnFocus(e) { - this.__isOnFocus.set(e) - } - get isOnHover() { - return this.__isOnHover.get() - } - set isOnHover(e) { - this.__isOnHover.set(e) - } - get isOnClick() { - return this.__isOnClick.get() - } - set isOnClick(e) { - this.__isOnClick.set(e) - } - getBgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.height(TabTitleBar.totalHeight); - Row.alignItems(VerticalAlign.Center); - Row.justifyContent(FlexAlign.Center); - Row.margin({ - left: 0 === this.index ? 16 : 0, - right: this.index === this.maxIndex ? 12 : 0 - }); - Row.borderRadius(TabContentItem.buttonBorderRadius); - Row.backgroundColor(this.getBgColor()); - Row.border(this.isOnFocus ? { - width: TabContentItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.justifyContent(FlexAlign.Center); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - void 0 === this.item.icon ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.item.title); - Text.fontSize(this.index === this.currentIndex ? { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline7"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_headline9"], - bundleName: "", - moduleName: "" - }); - Text.fontColor(this.index === this.currentIndex ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_text"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_text_off"], - bundleName: "", - moduleName: "" - }); - Text.fontWeight(FontWeight.Medium); - Text.focusable(!0); - Text.padding({ - top: this.index === this.currentIndex ? 6 : 10, - left: 8, - bottom: 2, - right: 8 - }); - Text.onFocus((() => this.isOnFocus = !0)); - Text.onBlur((() => this.isOnFocus = !1)); - Text.onHover((e => this.isOnHover = e)); - Text.onKeyEvent((e => { - if (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE) { - e.type === KeyType.Down && (this.isOnClick = !0); - e.type === KeyType.Up && (this.isOnClick = !1) - } - })); - Text.onTouch((e => { - e.type === TouchType.Down && (this.isOnClick = !0); - e.type === TouchType.Up && (this.isOnClick = !1) - })); - Text.onClick((() => this.onCustomClick && this.onCustomClick())); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(TabContentItem.imageHotZoneWidth); - Row.height(TabContentItem.imageHotZoneWidth); - Row.justifyContent(FlexAlign.Center); - Row.onFocus((() => this.isOnFocus = !0)); - Row.onBlur((() => this.isOnFocus = !1)); - Row.onHover((e => this.isOnHover = e)); - Row.onKeyEvent((e => { - if (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE) { - e.type === KeyType.Down && (this.isOnClick = !0); - e.type === KeyType.Up && (this.isOnClick = !1) - } - })); - Row.onTouch((e => { - e.type === TouchType.Down && (this.isOnClick = !0); - e.type === TouchType.Up && (this.isOnClick = !1) - })); - Row.onClick((() => this.onCustomClick && this.onCustomClick())); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.item.icon); - Image.alt(this.item.title); - Image.height(TabContentItem.imageSize); - Image.focusable(!0); - Image.scale({ - x: this.index === this.currentIndex ? TabContentItem.imageMagnificationFactor : 1, - y: this.index === this.currentIndex ? TabContentItem.imageMagnificationFactor : 1 - }); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Column.pop(); - Row.pop() - } - rerender() { - this.updateDirtyElements() - } -} -TabContentItem.imageSize = 24; -TabContentItem.imageHotZoneWidth = 48; -TabContentItem.imageMagnificationFactor = 1.4; -TabContentItem.buttonBorderRadius = 8; -TabContentItem.focusBorderWidth = 2; -class ImageMenuItem extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.item = void 0; - this.__isOnFocus = new ObservedPropertySimplePU(!1, this, "isOnFocus"); - this.__isOnHover = new ObservedPropertySimplePU(!1, this, "isOnHover"); - this.__isOnClick = new ObservedPropertySimplePU(!1, this, "isOnClick"); - this.setInitiallyProvidedValue(t) - } - setInitiallyProvidedValue(e) { - void 0 !== e.item && (this.item = e.item); - void 0 !== e.isOnFocus && (this.isOnFocus = e.isOnFocus); - void 0 !== e.isOnHover && (this.isOnHover = e.isOnHover); - void 0 !== e.isOnClick && (this.isOnClick = e.isOnClick) - } - updateStateVars(e) {} - purgeVariableDependenciesOnElmtId(e) { - this.__isOnFocus.purgeDependencyOnElmtId(e); - this.__isOnHover.purgeDependencyOnElmtId(e); - this.__isOnClick.purgeDependencyOnElmtId(e) - } - aboutToBeDeleted() { - this.__isOnFocus.aboutToBeDeleted(); - this.__isOnHover.aboutToBeDeleted(); - this.__isOnClick.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - get isOnFocus() { - return this.__isOnFocus.get() - } - set isOnFocus(e) { - this.__isOnFocus.set(e) - } - get isOnHover() { - return this.__isOnHover.get() - } - set isOnHover(e) { - this.__isOnHover.set(e) - } - get isOnClick() { - return this.__isOnClick.get() - } - set isOnClick(e) { - this.__isOnClick.set(e) - } - getFgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon_pressed"], - bundleName: "", - moduleName: "" - } : { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_titlebar_icon"], - bundleName: "", - moduleName: "" - } - } - getBgColor() { - return this.isOnClick ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - } : this.isOnHover ? { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - } : Color.Transparent - } - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.width(ImageMenuItem.imageHotZoneWidth); - Row.height(ImageMenuItem.imageHotZoneWidth); - Row.borderRadius(ImageMenuItem.buttonBorderRadius); - Row.foregroundColor(this.getFgColor()); - Row.backgroundColor(this.getBgColor()); - Row.justifyContent(FlexAlign.Center); - Row.opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity); - Row.border(this.isOnFocus ? { - width: ImageMenuItem.focusBorderWidth, - color: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }, - style: BorderStyle.Solid - } : { - width: 0 - }); - Row.onFocus((() => { - this.item.isEnabled && (this.isOnFocus = !0) - })); - Row.onBlur((() => this.isOnFocus = !1)); - Row.onHover((e => { - this.item.isEnabled && (this.isOnHover = e) - })); - Row.onKeyEvent((e => { - if (this.item.isEnabled && (e.keyCode === KeyCode.KEYCODE_ENTER || e.keyCode === KeyCode.KEYCODE_SPACE)) { - e.type === KeyType.Down && (this.isOnClick = !0); - e.type === KeyType.Up && (this.isOnClick = !1) - } - })); - Row.onTouch((e => { - if (this.item.isEnabled) { - e.type === TouchType.Down && (this.isOnClick = !0); - e.type === TouchType.Up && (this.isOnClick = !1) - } - })); - Row.onClick((() => this.item.isEnabled && this.item.action && this.item.action())); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(this.item.value); - Image.width(ImageMenuItem.imageSize); - Image.height(ImageMenuItem.imageSize); - Image.focusable(this.item.isEnabled); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - } - rerender() { - this.updateDirtyElements() - } -} -ImageMenuItem.imageSize = 24; -ImageMenuItem.imageHotZoneWidth = 48; -ImageMenuItem.buttonBorderRadius = 8; -ImageMenuItem.focusBorderWidth = 2; -ImageMenuItem.disabledImageOpacity = .4; -export default { - TabTitleBar: TabTitleBar -}; \ No newline at end of file diff --git a/interface/toolbar/BUILD.gn b/interface/toolbar/BUILD.gn deleted file mode 100644 index 956cede..0000000 --- a/interface/toolbar/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_toolbar_abc") { - src_js = rebase_path("toolbar.js") - dst_file = rebase_path(target_out_dir + "/toolbar.abc") - in_puts = [ "toolbar.js" ] - out_puts = [ target_out_dir + "/toolbar.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("toolbar_abc") { - input = get_label_info(":gen_toolbar_abc", "target_out_dir") + "/toolbar.abc" - output = target_out_dir + "/toolbar_abc.o" - dep = ":gen_toolbar_abc" -} - -ohos_shared_library("toolbar") { - sources = [ "toolbar.cpp" ] - - deps = [ ":toolbar_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} \ No newline at end of file diff --git a/interface/toolbar/toolbar.cpp b/interface/toolbar/toolbar.cpp deleted file mode 100644 index db4ee6e..0000000 --- a/interface/toolbar/toolbar.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "native_engine/native_engine.h" - -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -extern const char _binary_toolbar_abc_start[]; -extern const char _binary_toolbar_abc_end[]; - -// Napi get abc code function -extern "C" __attribute__((visibility("default"))) -void NAPI_arkui_advanced_ToolBar_GetABCCode(const char **buf, int *buflen) -{ - if (buf != nullptr) { - *buf = _binary_toolbar_abc_start; - } - if (buflen != nullptr) { - *buflen = _binary_toolbar_abc_end - _binary_toolbar_abc_start; - } -} - -/* - * Module define - */ -static napi_module toolbarModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_modname = "arkui.advanced.ToolBar", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; -/* - * Module register function - */ -extern "C" __attribute__((constructor)) void toolbarRegisterModule(void) -{ - napi_module_register(&toolbarModule); -} diff --git a/interface/toolbar/toolbar.js b/interface/toolbar/toolbar.js deleted file mode 100644 index 5c34c87..0000000 --- a/interface/toolbar/toolbar.js +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const REFLECT_MAX_COUNT = 3; -const IMAGE_SIZE_WIDTH_HEIGHT = 24; -const TEXT_MIN_SIZE = 9; -const DISABLE_OPACITY = 0.4; -const TEXT_MAX_LINES = 2; -const TOOLBAR_LIST_LENGTH = 5; -const TOOLBAR_LIST_NORMORL = 4; -const ITEM_DISABLE_STATE = 2; -const ITEM_DISABLE_ACTIVATE = 3; - -let __decorate = this && this.__decorate || function (e, t, o, r) { - let s; - let i = arguments.length; - let a = i < REFLECT_MAX_COUNT ? t : null === r ? r = Object.getOwnPropertyDescriptor(t, o) : r; - if ('object' === typeof Reflect && 'function' === typeof Reflect.decorate) { - a = Reflect.decorate(e, t, o, r); - } else { - for (let n = e.length - 1; n >= 0; n--) { - (s = e[n]) && (a = (i < REFLECT_MAX_COUNT ? s(a) : i > REFLECT_MAX_COUNT ? s(t, o, a) : s(t, o)) || a); - } - } - return i > REFLECT_MAX_COUNT && a && Object.defineProperty(t, o, a), a; -}; -export let ItemState; -!function(e) { - e[e.ENABLE = 1] = 'ENABLE'; - e[e.DISABLE = 2] = 'DISABLE'; - e[e.ACTIVATE = 3] = 'ACTIVATE'; -}(ItemState || (ItemState = {})); -const PUBLIC_MORE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAA' + - 'IGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IAr' + - 's4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAYFJREFUeNrt3CFLQ1EUB/CpCwYRo8' + - 'G4j2IwCNrUYjH4AfwcfgBBwWZRMNgtFqPdILJgEhGDweAZvDjmJnfv3I3fD/5l3DfOfWdv23vhdDoAAAAAAAAwzxa' + - 'm9L5rkePIdmSjee05chu5iHxXej5ar3saDdiJXDabGaYfOYg8VHbyU+peKryJvch1ZHnEmtXIYeQ+8lrJyU+re7Hg' + - 'JtYj52Ou7Uau/thwW1LrLtmAk8jKBOsH37FHFTQgte6SDdht6ZjSUusu2YBeS8eUllr3YvLmuzP6971bYwP6/zjmpY' + - 'KTmVp3yQbctXRMaal1l2zAaeRngvUfkbMKGpBad8kbsffIZ2RrzPX7kacKGpBad+k74cfmE7I54ur6au4obyr6UU2r' + - 'e1oP43rNDc6wh1qDS/6t0n83s1o3AAAAAAAAAAAAAEAysyKS6zYrIrlusyKS6zYrwqyIdGZFJDMrIplZETPIrIh5qdu' + - 'sCLMi0pkVkcysiAqYFVEJsyIAAAAAAAAAKOYXUlF8EUcdfbsAAAAASUVORK5CYII='; -let ToolBarOption = class { - constructor() { - this.state = 1; - } -}; -ToolBarOption = __decorate([Observed], ToolBarOption); - -export { ToolBarOption }; -let ToolBarOptions = class extends Array { -}; -ToolBarOptions = __decorate([Observed], ToolBarOptions); - -export { ToolBarOptions }; - -export class ToolBar extends ViewPU { - constructor(e, t, o, r = -1) { - super(e, o, r); - this.__toolBarList = new SynchedPropertyNesedObjectPU(t.toolBarList, this, 'toolBarList'); - this.controller = void 0; - this.__activateIndex = new SynchedPropertySimpleOneWayPU(t.activateIndex, this, 'activateIndex'); - this.__menuContent = new ObservedPropertyObjectPU([], this, 'menuContent'); - this.toolBarItemBackground = []; - this.__itemBackground = new ObservedPropertyObjectPU({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_bg'], - bundleName: '', - moduleName: '' - }, this, 'itemBackground'); - this.setInitiallyProvidedValue(t); - } - - setInitiallyProvidedValue(e) { - this.__toolBarList.set(e.toolBarList); - void 0 !== e.controller && (this.controller = e.controller); - void 0 !== e.activateIndex ? this.__activateIndex.set(e.activateIndex) : this.__activateIndex.set(-1); - void 0 !== e.menuContent && (this.menuContent = e.menuContent); - void 0 !== e.toolBarItemBackground && (this.toolBarItemBackground = e.toolBarItemBackground); - void 0 !== e.itemBackground && (this.itemBackground = e.itemBackground); - } - - updateStateVars(e) { - this.__toolBarList.set(e.toolBarList); - this.__activateIndex.reset(e.activateIndex); - } - - purgeVariableDependenciesOnElmtId(e) { - this.__toolBarList.purgeDependencyOnElmtId(e); - this.__activateIndex.purgeDependencyOnElmtId(e); - this.__menuContent.purgeDependencyOnElmtId(e); - this.__itemBackground.purgeDependencyOnElmtId(e); - } - - aboutToBeDeleted() { - this.__toolBarList.aboutToBeDeleted(); - this.__activateIndex.aboutToBeDeleted(); - this.__menuContent.aboutToBeDeleted(); - this.__itemBackground.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal(); - } - - get toolBarList() { - return this.__toolBarList.get(); - } - - get activateIndex() { - return this.__activateIndex.get(); - } - - set activateIndex(e) { - this.__activateIndex.set(e); - } - - get menuContent() { - return this.__menuContent.get(); - } - - set menuContent(e) { - this.__menuContent.set(e); - } - - get itemBackground() { - return this.__itemBackground.get(); - } - - set itemBackground(e) { - this.__itemBackground.set(e); - } - - MoreTabBuilder(e, t = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width('100%'); - Column.height('100%'); - Column.bindMenu(ObservedObject.GetRawObject(this.menuContent), { offset: { x: 5, y: -10 } }); - Column.padding({ left: 4, right: 4 }); - Column.borderRadius({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_corner_radius_clicked'], - bundleName: '', - moduleName: '' - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(PUBLIC_MORE); - Image.width(IMAGE_SIZE_WIDTH_HEIGHT); - Image.height(IMAGE_SIZE_WIDTH_HEIGHT); - Image.fillColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_icon'], - bundleName: '', - moduleName: '' - }); - Image.margin({ top: 8, bottom: 2 }); - Image.objectFit(ImageFit.Contain); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create({ - id: -1, - type: 10003, - params: ['app.string.id_string_more'], - bundleName: '', - moduleName: '' - }); - Text.fontColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_text'], - bundleName: '', - moduleName: '' - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_caption'], - bundleName: '', - moduleName: '' - }); - Text.fontWeight(FontWeight.Medium); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Column.pop(); - } - - TabBuilder(e, t = null) { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Column.create(); - Column.width('100%'); - Column.height('100%'); - Column.focusable(!(ITEM_DISABLE_STATE === this.toolBarList[e].state)); - Column.focusOnTouch(!(ITEM_DISABLE_STATE === this.toolBarList[e].state)); - Column.padding({ left: 4, right: 4 }); - Column.borderRadius({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_corner_radius_clicked'], - bundleName: '', - moduleName: '' - }); - Column.backgroundColor(ObservedObject.GetRawObject(this.itemBackground)); - Column.onClick((() => { - ITEM_DISABLE_ACTIVATE === this.toolBarList[e].state && (this.activateIndex === e ? this.activateIndex = -1 : this.activateIndex = e); - ITEM_DISABLE_STATE !== this.toolBarList[e].state && this.toolBarList[e].action && this.toolBarList[e].action(); - })); - Column.onHover((t => { - this.toolBarItemBackground[e] = t ? ITEM_DISABLE_STATE === this.toolBarList[e].state ? { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_bg'], - bundleName: '', - moduleName: '' - } : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_hover'], - bundleName: '', - moduleName: '' - } : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_bg'], - bundleName: '', - moduleName: '' - }; - this.itemBackground = this.toolBarItemBackground[e]; - })); - ViewStackProcessor.visualState('pressed'); - Column.backgroundColor(ITEM_DISABLE_STATE === this.toolBarList[e].state ? this.toolBarItemBackground[e] : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_click_effect'], - bundleName: '', - moduleName: '' - }); - ViewStackProcessor.visualState('normal'); - Column.backgroundColor(this.toolBarItemBackground[e]); - ViewStackProcessor.visualState(); - o || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Image.create(this.toolBarList[e].icon); - Image.width(IMAGE_SIZE_WIDTH_HEIGHT); - Image.height(IMAGE_SIZE_WIDTH_HEIGHT); - Image.fillColor(this.activateIndex === e && ITEM_DISABLE_STATE !== this.toolBarList[e].state ? { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_text_primary_activated'], - bundleName: '', - moduleName: '' - } : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_primary'], - bundleName: '', - moduleName: '' - }); - Image.opacity(ITEM_DISABLE_STATE === this.toolBarList[e].state ? DISABLE_OPACITY : 1); - Image.margin({ top: 8, bottom: 2 }); - Image.objectFit(ImageFit.Contain); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Text.create(this.toolBarList[e].content); - Text.fontColor(this.activateIndex === e && ITEM_DISABLE_STATE !== this.toolBarList[e].state ? { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_text_actived'], - bundleName: '', - moduleName: '' - } : { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_text'], - bundleName: '', - moduleName: '' - }); - Text.fontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_caption'], - bundleName: '', - moduleName: '' - }); - Text.maxFontSize({ - id: -1, - type: 10002, - params: ['sys.float.ohos_id_text_size_caption'], - bundleName: '', - moduleName: '' - }); - Text.minFontSize(TEXT_MIN_SIZE); - Text.fontWeight(FontWeight.Medium); - Text.maxLines(TEXT_MAX_LINES); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.opacity(ITEM_DISABLE_STATE === this.toolBarList[e].state ? DISABLE_OPACITY : 1); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - Text.pop(); - Column.pop(); - } - - refreshData() { - this.menuContent = []; - for (let e = 0; e < this.toolBarList.length; e++) { - if (e >= TOOLBAR_LIST_NORMORL && this.toolBarList.length > TOOLBAR_LIST_LENGTH) { - this.menuContent[e - TOOLBAR_LIST_NORMORL] = { - value: this.toolBarList[e].content, - action: this.toolBarList[e].action - }; - } else { - this.toolBarItemBackground[e] = { - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_bg'], - bundleName: '', - moduleName: '' - }; - this.menuContent = []; - } - } - return !0; - } - - aboutToAppear() { - this.refreshData(); - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.width('100%'); - Divider.height(1); - t || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.width('100%'); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Tabs.create({ barPosition: BarPosition.End, controller: this.controller }); - Tabs.vertical(!1); - Tabs.constraintSize({ minHeight: 56, maxHeight: 56 }); - Tabs.barMode(BarMode.Fixed); - Tabs.onChange((e => { - })); - Tabs.width('100%'); - Tabs.backgroundColor({ - id: -1, - type: 10001, - params: ['sys.color.ohos_id_color_toolbar_bg'], - bundleName: '', - moduleName: '' - }); - t || Tabs.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - ForEach.create(); - this.forEachUpdateFunction(e, this.toolBarList, ((e, t) => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.toolBarList.length <= TOOLBAR_LIST_LENGTH ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - TabContent.create(); - TabContent.tabBar({ - builder: () => { - this.TabBuilder.call(this, t); - } - }); - TabContent.enabled(!(ITEM_DISABLE_STATE === this.toolBarList[t].state)); - TabContent.focusOnTouch(!(ITEM_DISABLE_STATE === this.toolBarList[t].state)); - r || TabContent.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - TabContent.pop(); - })) : t < TOOLBAR_LIST_NORMORL && this.ifElseBranchUpdateFunction(1, (() => { - this.observeComponentCreation(((e, r) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - TabContent.create(); - TabContent.tabBar({ - builder: () => { - this.TabBuilder.call(this, t); - } - }); - TabContent.enabled(!(ITEM_DISABLE_STATE === this.toolBarList[t].state)); - TabContent.focusOnTouch(!(ITEM_DISABLE_STATE === this.toolBarList[t].state)); - r || TabContent.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - TabContent.pop(); - })); - r || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - }), void 0, !0, !1); - t || ForEach.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - ForEach.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.refreshData() && this.toolBarList.length > TOOLBAR_LIST_LENGTH ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - TabContent.create(); - TabContent.tabBar({ - builder: () => { - this.MoreTabBuilder.call(this, TOOLBAR_LIST_NORMORL); - } - }); - t || TabContent.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - TabContent.pop(); - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording(); - })); - If.pop(); - Tabs.pop(); - Column.pop(); - Column.pop(); - } - - rerender() { - this.updateDirtyElements(); - } -} -export default { ToolBarOptions, ToolBar }; \ No newline at end of file diff --git a/interface/treeview/BUILD.gn b/interface/treeview/BUILD.gn deleted file mode 100644 index d8bdb0c..0000000 --- a/interface/treeview/BUILD.gn +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) 2023-2023 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") - -es2abc_gen_abc("gen_treeview_abc") { - src_js = rebase_path("treeview.js") - dst_file = rebase_path(target_out_dir + "/treeview.abc") - in_puts = [ "treeview.js" ] - out_puts = [ target_out_dir + "/treeview.abc" ] - extra_args = [ "--module" ] -} - -gen_js_obj("treeview_abc") { - input = get_label_info(":gen_treeview_abc", "target_out_dir") + "/treeview.abc" - output = target_out_dir + "/treeview_abc.o" - dep = ":gen_treeview_abc" -} - -ohos_shared_library("treeview") { - sources = [ "treeview.cpp" ] - - deps = [ ":treeview_abc" ] - - external_deps = [ - "hilog:libhilog", - "napi:ace_napi", - ] - - subsystem_name = "arkui" - part_name = "advanced_ui_component" - - relative_install_dir = "module/arkui/advanced" -} - - diff --git a/interface/treeview/treeview.js b/interface/treeview/treeview.js deleted file mode 100644 index 25425d8..0000000 --- a/interface/treeview/treeview.js +++ /dev/null @@ -1,3666 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var __decorate = this && this.__decorate || function (e, t, o, i) { - var s, a = arguments.length, d = a < 3 ? t : null === i ? i = Object.getOwnPropertyDescriptor(t, o) : i; - if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) d = Reflect.decorate(e, t, o, i); else for (var r = e.length - 1;r >= 0; r--) (s = e[r]) && (d = (a < 3 ? s(d) : a > 3 ? s(t, o, d) : s(t, o)) || d); - return a > 3 && d && Object.defineProperty(t, o, d), d -}; - -export var TreeView; -!function(e){ - const t = "#00000000"; - const o = "#FFFFFF"; - - class i { - constructor() { - this._events = [] - } - - on(e, t) { - if (Array.isArray(e)) for (let o = 0, - i = e.length;o < i; o++) this.on(e[o], t); else (this._events[e] || (this._events[e] = [])).push(t) - } - - once(e, t) { - let o = this; - - function i() { - o.off(e, i); - t.apply(null, [e, t]) - } - - i.callback = t; - this.on(e, i) - } - - off(e, t) { - null == e && (this._events = []); - if (Array.isArray(e)) for (let o = 0, i = e.length;o < i; o++) this.off(e[o], t); - const o = this._events[e]; - if (!o) return; - null == t && (this._events[e] = null); - let i, s = o.length; - for (; s--; ) { - i = o[s]; - if (i === t || i.callback === t) { - o.splice(s, 1); - break - } - } - } - - emit(e, t) { - let o = this; - if (!this._events[e]) return; - let i = [...this._events[e]]; - if (i) for (let e = 0, s = i.length;e < s; e++) try { - i[e].apply(o, t) - } catch (e) { - new Error(e) - } - } - } - - e.TreeListener = i; - let s; - !function(e){ - e.NODE_ADD = "NodeAdd"; - e.NODE_DELETE = "NodeDelete"; - e.NODE_MODIFY = "NodeModify"; - e.NODE_MOVE = "NodeMove"; - e.NODE_CLICK = "NodeClick" - }(s = e.TreeListenType || (e.TreeListenType = {})); - - class a { - constructor() { - this.appEventBus = new i - } - - static getInstance() { - null == AppStorage.Get(this.APP_KEY_EVENT_BUS) && AppStorage.SetOrCreate(this.APP_KEY_EVENT_BUS, new a); - return AppStorage.Get(this.APP_KEY_EVENT_BUS) - } - - getTreeListener() { - return this.appEventBus - } - } - - a.APP_KEY_EVENT_BUS = "app_key_event_bus"; - e.TreeListenerManager = a; - - class d { - constructor() { - this.listeners = [] - } - - totalCount() { - return 0 - } - - getData(e) { - } - - registerDataChangeListener(e) { - this.listeners.indexOf(e) < 0 && this.listeners.push(e) - } - - unregisterDataChangeListener(e) { - const t = this.listeners.indexOf(e); - t >= 0 && this.listeners.splice(t, 1) - } - - notifyDataReload() { - this.listeners.forEach((e => { - e.onDataReloaded() - })) - } - - notifyDataAdd(e) { - this.listeners.forEach((t => { - t.onDataAdd(e) - })) - } - - notifyDataChange(e) { - this.listeners.forEach((t => { - t.onDataChange(e) - })) - } - - notifyDataDelete(e) { - this.listeners.forEach((t => { - t.onDataDelete(e) - })) - } - - notifyDataMove(e, t) { - this.listeners.forEach((o => { - o.onDataMove(e, t) - })) - } - } - - let r; - !function(e){ - e[e.TOUCH_DOWN=0] = "TOUCH_DOWN"; - e[e.TOUCH_UP=1] = "TOUCH_UP"; - e[e.HOVER=3] = "HOVER"; - e[e.HOVER_OVER=4] = "HOVER_OVER"; - e[e.FOCUS=5] = "FOCUS"; - e[e.BLUR=6] = "BLUR"; - e[e.MOUSE_BUTTON_RIGHT=7] = "MOUSE_BUTTON_RIGHT"; - e[e.DRAG=8] = "DRAG" - }(r = e.Event || (e.Event = {})); - let n; - !function(e){ - e[e.ADD_NODE=0] = "ADD_NODE"; - e[e.REMOVE_NODE=1] = "REMOVE_NODE"; - e[e.MODIFY_NODE=2] = "MODIFY_NODE"; - e[e.COMMIT_NODE=3] = "COMMIT_NODE" - }(n = e.MenuOperation || (e.MenuOperation = {})); - let l; - !function(e){ - e[e.HINTS=0] = "HINTS"; - e[e.WARNINGS=1] = "WARNINGS" - }(l = e.PopUpType || (e.PopUpType = {})); - let h; - !function(e){ - e[e.INVALID_ERROR=0] = "INVALID_ERROR"; - e[e.LENGTH_ERROR=1] = "LENGTH_ERROR"; - e[e.NONE=2] = "NONE" - }(h = e.InputError || (e.InputError = {})); - let g; - !function(e){ - e[e.DOWN_FLAG=0] = "DOWN_FLAG"; - e[e.UP_FLAG=1] = "UP_FLAG"; - e[e.NONE=2] = "NONE" - }(g = e.Flag || (e.Flag = {})); - - class c { - constructor(e) { - this.data = e; - this.nodeLevel = -1; - this.parentNodeId = -1; - this.nodeItem = { imageNode: null, mainTitleNode: null, imageCollapse: null }; - this.childNodeInfo = { isHasChildNode: !1, childNum: 0, allChildNum: 0 }; - this.menu = e.menu; - e.icon && (this.nodeItem.imageNode = new p(e.icon, e.selectedIcon, e.editIcon, { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_alpha_content_fourth"], - bundleName: "", - moduleName: "" - }, 24, 24)); - e.primaryTitle && (this.nodeItem.mainTitleNode = new m(e.primaryTitle)); - this.children = [] - } - - addImageCollapse(e) { - if (e) { - this.nodeItem.imageCollapse = new p({ - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_right"], - bundleName: "", - moduleName: "" - }, null, null, { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_alpha_content_tertiary"], - bundleName: "", - moduleName: "" - }, 24, 24); - this.nodeItem.imageCollapse.itemRightMargin = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_paragraph_margin_xs"], - bundleName: "", - moduleName: "" - } - } else this.nodeItem.imageCollapse = null - } - - getNodeItem() { - return this.nodeItem - } - - getChildNodeInfo() { - return this.childNodeInfo - } - - getMenu() { - return this.menu - } - - getCurrentNodeId() { - return this.currentNodeId - } - - getIsFolder() { - return this.data.isFolder - } - } - - e.NodeItem = c; - - class N { - constructor() { - } - - set itemWidth(e) { - this.width = e - } - - get itemWidth() { - return this.width - } - - set itemHeight(e) { - this.height = e - } - - get itemHeight() { - return this.height - } - - set itemRightMargin(e) { - this.rightMargin = e - } - - get itemRightMargin() { - return this.rightMargin - } - } - - let I; - !function(e){ - e[e.Expand=0] = "Expand"; - e[e.Collapse=1] = "Collapse" - }(I = e.NodeStatus || (e.NodeStatus = {})); - let u; - !function(e){ - e[e.Normal=0] = "Normal"; - e[e.Selected=1] = "Selected"; - e[e.Edit=2] = "Edit"; - e[e.FinishEdit=3] = "FinishEdit"; - e[e.DragInsert=4] = "DragInsert"; - e[e.FinishDragInsert=5] = "FinishDragInsert" - }(u = e.InteractionStatus || (e.InteractionStatus = {})); - - class p extends N { - constructor(e, t, o, i, s, a) { - super(); - this.rightMargin = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_elements_margin_horizontal_m"], - bundleName: "", - moduleName: "" - }; - this.imageSource = e; - this.imageNormalSource = e; - this.imageSelectedSource = null != t ? t : this.imageNormalSource; - this.imageEditSource = null != o ? o : this.imageNormalSource; - this.imageOpacity = i; - this.itemWidth = s; - this.itemHeight = a; - this.imageCollapseSource = e; - this.imageCollapseDownSource = { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_down"], - bundleName: "", - moduleName: "" - }; - this.imageCollapseRightSource = { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_right"], - bundleName: "", - moduleName: "" - }; - this.isImageCollapse = !0 - } - - get source() { - return this.imageSource - } - - get normalSource() { - return this.imageNormalSource - } - - get selectedSource() { - return this.imageSelectedSource - } - - get editSource() { - return this.imageEditSource - } - - get opacity() { - return this.imageOpacity - } - - get noOpacity() { - return 1 - } - - get collapseSource() { - return this.imageCollapseSource - } - - get isCollapse() { - return this.isImageCollapse - } - - changeImageCollapseSource(e) { - e == I.Expand ? this.imageCollapseSource = this.imageCollapseDownSource : e == I.Collapse && (this.imageCollapseSource = this.imageCollapseRightSource) - } - - setImageCollapseSource(e, t) { - if (e === u.Edit || e === u.DragInsert) { - this.imageCollapseDownSource = { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_down"], - bundleName: "", - moduleName: "" - }; - this.imageCollapseRightSource = { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_right"], - bundleName: "", - moduleName: "" - }; - this.isImageCollapse = !1 - } else if (e === u.FinishEdit || e === u.FinishDragInsert) { - this.imageCollapseDownSource = { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_down"], - bundleName: "", - moduleName: "" - }; - this.imageCollapseRightSource = { - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_right"], - bundleName: "", - moduleName: "" - }; - this.isImageCollapse = !0 - } - this.imageCollapseSource = t == I.Collapse ? this.imageCollapseRightSource : this.imageCollapseDownSource - } - - setImageSource(e) { - switch (e) { - case u.Normal: - this.imageSource = this.imageNormalSource; - this.currentInteractionStatus = e; - break; - case u.Selected: - if (this.currentInteractionStatus !== u.Edit) { - this.imageSource = this.imageSelectedSource; - this.currentInteractionStatus = e - } - break; - case u.Edit: - this.imageSource = this.imageEditSource; - this.currentInteractionStatus = e; - break; - case u.FinishEdit: - this.imageSource = this.imageSelectedSource; - this.currentInteractionStatus = e; - break; - case u.DragInsert: - this.imageSource = this.imageEditSource; - this.currentInteractionStatus = e; - break; - case u.FinishDragInsert: - this.imageSource = this.imageNormalSource; - this.currentInteractionStatus = e - } - } - } - - e.ImageNode = p; - - class m extends N { - constructor(e) { - super(); - this.mainTitleName = e; - this.itemWidth = 0; - this.itemHeight = 44; - this.rightMargin = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_paragraph_margin_xs"], - bundleName: "", - moduleName: "" - }; - this.mainTitleSetting = { - fontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Normal - }; - this.showPopUpTimeout = 0 - } - - setMainTitleSelected(e) { - this.mainTitleSetting = e ? { - fontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary_activated"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Regular - } : { - fontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Normal - } - } - - set title(e) { - this.mainTitleName = e - } - - get title() { - return this.mainTitleName - } - - set popUpTimeout(e) { - this.showPopUpTimeout = e - } - - get popUpTimeout() { - return this.showPopUpTimeout - } - - get color() { - return this.mainTitleSetting.fontColor - } - - get size() { - return this.mainTitleSetting.fontSize - } - - get weight() { - return this.mainTitleSetting.fontWeight - } - - setMainTitleHighLight(e) { - this.mainTitleSetting = e ? { - fontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary_contrary"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Regular - } : { - fontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Normal - } - } - } - - e.MainTitleNode = m; - - class f extends N { - constructor() { - super(); - this.statusColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }; - this.editItemColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_emphasize"], - bundleName: "", - moduleName: "" - }; - this.radius = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_default_xs"], - bundleName: "", - moduleName: "" - }; - this.itemWidth = 0; - this.itemHeight = 32; - this.rightMargin = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_paragraph_margin_xs"], - bundleName: "", - moduleName: "" - }; - this.inputTextSetting = { - fontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_primary"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Normal - } - } - - get color() { - return this.inputTextSetting.fontColor - } - - get size() { - return this.inputTextSetting.fontSize - } - - get weight() { - return this.inputTextSetting.fontWeight - } - - get borderRadius() { - return this.radius - } - - get backgroundColor() { - return this.statusColor - } - - get editColor() { - return this.editItemColor - } - - get textInputStatusColor() { - return this.status - } - } - - e.InputText = f; - - class S { - constructor(e) { - this.borderWidth = { has: 2, none: 0 }; - this.canShowFlagLine = !1; - this.isOverBorder = !1; - this.canShowBottomFlagLine = !1; - this.isHighLight = !1; - this.isModify = !1; - this.childNodeInfo = e.getChildNodeInfo(); - this.nodeItem = { imageNode: null, inputText: null, mainTitleNode: null, imageCollapse: null }; - this.popUpInfo = { - popUpIsShow: !1, - popUpEnableArrow: !1, - popUpColor: null, - popUpText: "", - popUpTextColor: null - }; - this.nodeItem.imageNode = e.getNodeItem().imageNode; - this.nodeItem.inputText = new f; - this.nodeItem.mainTitleNode = e.getNodeItem().mainTitleNode; - this.nodeItem.imageCollapse = e.getNodeItem().imageCollapse; - this.menu = e.menu; - this.parentNodeId = e.parentNodeId; - this.currentNodeId = e.currentNodeId; - this.nodeHeight = 44; - this.nodeLevel = e.nodeLevel; - this.nodeLeftPadding = 12 * e.nodeLevel + 8; - this.nodeColor = { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }; - this.nodeIsShow = !(this.nodeLevel > 0); - this.listItemHeight = this.nodeLevel > 0 ? 0 : 48; - this.isShowTitle = !0; - this.isShowInputText = !1; - this.isSelected = !1; - this.status = { - normal: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background_transparent"], - bundleName: "", - moduleName: "" - }, - hover: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_hover"], - bundleName: "", - moduleName: "" - }, - press: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_click_effect"], - bundleName: "", - moduleName: "" - }, - selected: "#1A0A59F7", - highLight: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_activated"], - bundleName: "", - moduleName: "" - } - }; - this.nodeBorder = { - borderWidth: 0, - borderColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_focused_outline"], - bundleName: "", - moduleName: "" - }, - borderRadius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - } - }; - this.flagLineLeftMargin = 12 * e.nodeLevel + 8; - this.node = e; - this.nodeParam = e.data - } - - getPopUpInfo() { - return this.popUpInfo - } - - setPopUpIsShow(e) { - this.popUpInfo.popUpIsShow = e - } - - setPopUpEnableArrow(e) { - this.popUpInfo.popUpEnableArrow = e - } - - setPopUpColor(e) { - this.popUpInfo.popUpColor = e - } - - setPopUpText(e) { - this.popUpInfo.popUpText = e - } - - setPopUpTextColor(e) { - this.popUpInfo.popUpTextColor = e - } - - getIsShowTitle() { - return this.isShowTitle - } - - getIsShowInputText() { - return this.isShowInputText - } - - setTitleAndInputTextStatus(e) { - if (e) { - this.isShowTitle = !1; - this.isShowInputText = !0 - } else { - this.isShowTitle = !0; - this.isShowInputText = !1 - } - } - - handleImageCollapseAfterAddNode(e) { - if (e) { - this.nodeItem.imageCollapse = new p({ - id: -1, - type: 2e4, - params: ["sys.media.ohos_ic_public_arrow_down"], - bundleName: "", - moduleName: "" - }, null, null, { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_alpha_content_tertiary"], - bundleName: "", - moduleName: "" - }, 24, 24); - this.nodeItem.imageCollapse.itemRightMargin = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_paragraph_margin_xs"], - bundleName: "", - moduleName: "" - } - } else this.nodeItem.imageCollapse = null - } - - setNodeColor(e) { - this.nodeColor = e - } - - getNodeColor() { - return this.nodeColor - } - - setListItemHeight(e) { - this.listItemHeight = e - } - - getListItemHeight() { - return this.listItemHeight - } - - getNodeCurrentNodeId() { - return this.currentNodeId - } - - getNodeParentNodeId() { - return this.parentNodeId - } - - getNodeLeftPadding() { - return this.nodeLeftPadding - } - - getNodeHeight() { - return this.nodeHeight - } - - setNodeIsShow(e) { - this.nodeIsShow = e - } - - getNodeIsShow() { - return this.nodeIsShow - } - - getNodeItem() { - return this.nodeItem - } - - getNodeStatus() { - return this.status - } - - getNodeBorder() { - return this.nodeBorder - } - - setNodeBorder(e) { - this.nodeBorder.borderWidth = e ? this.borderWidth.has : this.borderWidth.none - } - - getChildNodeInfo() { - return this.childNodeInfo - } - - getCurrentNodeId() { - return this.currentNodeId - } - - getMenu() { - return this.menu - } - - setIsSelected(e) { - this.isSelected = e - } - - getIsSelected() { - return this.isSelected - } - - getNodeInfoData() { - return this.nodeParam - } - - getNodeInfoNode() { - return this.node - } - - getIsFolder() { - return this.nodeParam.isFolder - } - - setCanShowFlagLine(e) { - this.canShowFlagLine = e - } - - getCanShowFlagLine() { - return this.canShowFlagLine - } - - setFlagLineLeftMargin(e) { - this.flagLineLeftMargin = 12 * e + 8 - } - - getFlagLineLeftMargin() { - return this.flagLineLeftMargin - } - - getNodeLevel() { - return this.nodeLevel - } - - setIsOverBorder(e) { - this.isOverBorder = e - } - - getIsOverBorder() { - return this.isOverBorder - } - - setCanShowBottomFlagLine(e) { - this.canShowBottomFlagLine = e - } - - getCanShowBottomFlagLine() { - return this.canShowBottomFlagLine - } - - setIsHighLight(e) { - this.isHighLight = e - } - - getIsHighLight() { - return this.isHighLight - } - - setIsModify(e) { - this.isModify = e - } - - getIsModify() { - return this.isModify - } - } - - e.NodeInfo = S; - - class C { - constructor() { - this.MaxNodeLevel = 50; - this.MAX_CN_LENGTH = 254; - this.MAX_EN_LENGTH = 255; - this.INITIAL_INVALID_VALUE = -1; - this._root = new c({}); - this._root.nodeLevel = -1; - this._root.parentNodeId = -1; - this._root.currentNodeId = -1 - } - - getNewNodeId() { - return this.addNewNodeId - } - - traverseNodeDF(e, t = this._root) { - let o = [], i = !1; - o.unshift(t); - let s = o.shift(); - for (;!i && s; ) { - i = !0 === e(s); - if (!i) { - o.unshift(...s.children); - s = o.shift() - } - } - } - - traverseNodeBF(e) { - let t = []; - let o = !1; - t.push(this._root); - let i = t.shift(); - for (;!o && i; ) { - try { - o = e(i) - } catch (e) { - e.name, e.message - } - if (!o) { - t.push(...i.children); - i = t.shift() - } - } - } - - contains(e, t) { - t.call(this, e,!0) - } - - updateParentChildNum(e, t, o) { - let i = e.parentNodeId; - for (; i >= 0; ) this.traverseNodeDF((e => { - if (e.currentNodeId == i) { - e.getChildNodeInfo().allChildNum = t ? e.getChildNodeInfo().allChildNum + o : e.getChildNodeInfo() - .allChildNum - o; - i = e.parentNodeId; - return !1 - } - return !1 - })) - } - - findParentNodeId(e) { - let t = null; - this.contains((function (o) { - if (o.currentNodeId == e) { - t = o; - return !0 - } - return !1 - }), this.traverseNodeBF); - return t.parentNodeId - } - - addNode(e, t, o) { - if (null === this._root) { - this._root = new c({}); - this._root.nodeLevel = -1; - this._root.parentNodeId = -1; - this._root.currentNodeId = -1 - } - let i = null; - this.contains((function (t) { - if (t.currentNodeId == e) { - i = t; - return !0 - } - return !1 - }), this.traverseNodeBF); - if (i) { - let s = new c(o); - if (i.nodeLevel > this.MaxNodeLevel) throw new Error("ListNodeUtils[addNode]: The level of the tree view cannot exceed 50."); - s.nodeLevel = i.nodeLevel + 1; - s.parentNodeId = e; - s.currentNodeId = t; - i.children.push(s); - i.getChildNodeInfo().isHasChildNode = !0; - i.getChildNodeInfo().childNum = i.children.length; - i.getChildNodeInfo().allChildNum += 1; - i.addImageCollapse(i.getChildNodeInfo().isHasChildNode); - this.updateParentChildNum(i,!0, 1); - return this - } - throw new Error("ListNodeUtils[addNode]: Parent node not found.") - } - - findNodeIndex(e, t) { - let o = this.INITIAL_INVALID_VALUE; - for (let i = 0, s = e.length;i < s; i++) if (e[i].currentNodeId === t) { - o = i; - break - } - return o - } - - freeNodeMemory(e, t) { - let o = []; - this.traverseNodeDF((function (e) { - o.push(e); - return !1 - }), e); - o.forEach((e => { - t.push(e.currentNodeId); - e = null - })) - } - - removeNode(e, t, o) { - let i = null; - this.contains((function (e) { - if (e.currentNodeId == t) { - i = e; - return !0 - } - return !1 - }), o); - if (i) { - let t = []; - let o = this.findNodeIndex(i.children, e); - if (o < 0) throw new Error("Node does not exist."); - { - var s = i.children[o].getChildNodeInfo().allChildNum + 1; - this.freeNodeMemory(i.children[o], t); - let e = i.children.splice(o, 1); - e = null; - 0 == i.children.length && i.addImageCollapse(!1) - } - i.getChildNodeInfo().childNum = i.children.length; - i.getChildNodeInfo().allChildNum -= s; - this.updateParentChildNum(i,!1, s); - return t - } - throw new Error("Parent does not exist.") - } - - getNewNodeInfo(e) { - let t = null; - this.contains((function (o) { - if (o.currentNodeId == e) { - t = o; - return !0 - } - return !1 - }), this.traverseNodeBF); - let o = { - isFolder: !0, - icon: null, - selectedIcon: null, - editIcon: null, - menu: null, - secondaryTitle: "" - }; - if (t) if (0 === t.children.length) if (null != t.getNodeItem().imageNode) { - o.icon = t.getNodeItem().imageNode.normalSource; - o.selectedIcon = t.getNodeItem().imageNode.selectedSource; - o.editIcon = t.getNodeItem().imageNode.editSource; - o.menu = t.getMenu() - } else { - o.icon = null; - o.selectedIcon = null; - o.editIcon = null; - o.menu = t.getMenu() - } else if (t.children.length > 0) if (null != t.getNodeItem().imageNode) { - o.icon = null != t.children[0].getNodeItem().imageNode ? t.children[0].getNodeItem() - .imageNode - .normalSource : null; - o.selectedIcon = null != t.children[0].getNodeItem().imageNode ? t.children[0].getNodeItem() - .imageNode - .selectedSource : null; - o.editIcon = null != t.children[0].getNodeItem().imageNode ? t.children[0].getNodeItem() - .imageNode - .editSource : null; - o.menu = t.children[0].getMenu() - } else { - o.icon = null; - o.selectedIcon = null; - o.editIcon = null; - o.menu = t.children[0].getMenu() - } - return o - } - - getClickChildId(e) { - let t = null; - this.contains((function (o) { - if (o.currentNodeId == e) { - t = o; - return !0 - } - return !1 - }), this.traverseNodeBF); - if (t) { - if (0 === t.children.length) return []; - if (t.children.length > 0) { - var o = new Array(t.children.length); - for (let e = 0;e < o.length; e++) o[e] = 0; - for (let e = 0;e < t.children.length && e < o.length; e++) o[e] = t.children[e].currentNodeId; - return o - } - } - return [] - } - - getClickNodeChildrenInfo(e) { - let t = null; - this.contains((function (o) { - if (o.currentNodeId == e) { - t = o; - return !0 - } - return !1 - }), this.traverseNodeBF); - if (t) { - if (0 === t.children.length) return []; - if (t.children.length > 0) { - var o = new Array(t.children.length); - for (let e = 0;e < o.length; e++) o[e] = { itemId: null, itemIcon: null, itemTitle: null, isFolder: null }; - for (let e = 0;e < t.children.length && e < o.length; e++) { - o[e].itemId = t.children[e].currentNodeId; - t.children[e].getNodeItem().imageNode && (o[e].itemIcon = t.children[e].getNodeItem().imageNode.source); - t.children[e].getNodeItem().mainTitleNode && (o[e].itemTitle = t.children[e].getNodeItem() - .mainTitleNode - .title); - o[e].isFolder = t.children[e].getIsFolder() - } - return o - } - } - return [] - } - - checkMainTitleIsValid(e) { - let t = /^[\u4e00-\u9fa5]+$/; - return!/[\\\/:*?"<>|]/.test(e) && !(t.test(e) && e.length > this.MAX_CN_LENGTH || !t.test(e) && e.length > this.MAX_EN_LENGTH) - } - - dragTraverseNodeDF(e, t = this._root, o) { - let i = [], s = !1; - i.unshift(t); - let a = i.shift(); - for (;!s && a; ) { - s = !0 === e(a, o); - if (!s) { - i.unshift(...a.children); - a = i.shift() - } - } - } - - addDragNode(e, t, o, i, s) { - if (null === this._root) { - this._root = new c({}); - this._root.nodeLevel = this.INITIAL_INVALID_VALUE; - this._root.parentNodeId = this.INITIAL_INVALID_VALUE; - this._root.currentNodeId = this.INITIAL_INVALID_VALUE - } - let a = null; - this.contains((function (t) { - if (t.currentNodeId == e) { - a = t; - return !0 - } - return !1 - }), this.traverseNodeBF); - if (a) { - let d = new c(s); - if (a.nodeLevel > this.MaxNodeLevel) throw new Error("ListNodeUtils[addNode]: The level of the tree view cannot exceed 50."); - d.nodeLevel = a.nodeLevel + 1; - d.parentNodeId = e; - d.currentNodeId = t; - let r = this.INITIAL_INVALID_VALUE; - if (a.children.length) { - for (let e = 0;e < a.children.length; e++) if (a.children[e].getCurrentNodeId() == o) { - r = e; - break - } - i ? a.children.splice(r + 1, 0, d) : a.children.splice(r, 0, d) - } else a.children.push(d); - a.getChildNodeInfo().isHasChildNode = !0; - a.getChildNodeInfo().childNum = a.children.length; - a.getChildNodeInfo().allChildNum += 1; - a.addImageCollapse(a.getChildNodeInfo().isHasChildNode); - this.updateParentChildNum(a,!0, 1); - return this - } - throw new Error("ListNodeUtils[addNode]: Parent node not found.") - } - } - - e.ListNodeUtils = C; - - class D extends d { - constructor() { - super(...arguments); - this.ROOT_NODE_ID = -1; - this.listNodeUtils = new C; - this.listNode = []; - this.INITIAL_INVALID_VALUE = -1; - this.lastIndex = -1; - this.thisIndex = -1; - this.modifyNodeIndex = -1; - this.modifyNodeId = -1; - this.expandAndCollapseInfo = new Map; - this.loadedNodeIdAndIndexMap = new Map; - this.isTouchDown = !1; - this.appEventBus = a.getInstance().getTreeListener(); - this.isInnerDrag = !1; - this.isDrag = !1; - this.draggingCurrentNodeId = this.INITIAL_INVALID_VALUE; - this.draggingParentNodeId = this.INITIAL_INVALID_VALUE; - this.currentNodeInfo = null; - this.listItemOpacity = 1; - this.lastPassIndex = this.INITIAL_INVALID_VALUE; - this.lastPassId = this.INITIAL_INVALID_VALUE; - this.thisPassIndex = this.INITIAL_INVALID_VALUE; - this.lastDelayExpandIndex = this.INITIAL_INVALID_VALUE; - this.timeoutExpandId = this.INITIAL_INVALID_VALUE; - this.lastTimeoutExpandId = this.INITIAL_INVALID_VALUE; - this.clearTimeoutExpandId = this.INITIAL_INVALID_VALUE; - this.timeoutHighLightId = this.INITIAL_INVALID_VALUE; - this.lastTimeoutHighLightId = this.INITIAL_INVALID_VALUE; - this.clearTimeoutHighLightId = this.INITIAL_INVALID_VALUE; - this.lastDelayHighLightIndex = this.INITIAL_INVALID_VALUE; - this.lastDelayHighLightId = this.INITIAL_INVALID_VALUE; - this.nodeIdAndSubtitleMap = new Map; - this.flag = g.NONE; - this.selectedParentNodeId = this.INITIAL_INVALID_VALUE; - this.selectedParentNodeSubtitle = ""; - this.insertNodeSubtitle = ""; - this.currentFocusNodeId = this.INITIAL_INVALID_VALUE; - this.lastFocusNodeId = this.INITIAL_INVALID_VALUE; - this.addFocusNodeId = this.INITIAL_INVALID_VALUE; - this.FLAG_LINE = { - flagLineHeight: "1.5vp", - flagLineColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_activated"], - bundleName: "", - moduleName: "" - }, - xOffset: "0vp", - yTopOffset: "2.75vp", - yBottomOffset: "-1.25vp", - yBasePlateOffset: "1.5vp" - }; - this.DRAG_POPUP = { - floorConstraintSize: { minWidth: "128vp", maxWidth: "208vp" }, - textConstraintSize: { minWidth1: "80vp", maxWidth1: "160vp", minWidth2: "112vp", maxWidth2: "192vp" }, - padding: { left: "8vp", right: "8vp" }, - backgroundColor: o, - height: "48", - shadow: { - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_default_m"], - bundleName: "", - moduleName: "" - }, - color: "#00001E", - offsetX: 0, - offsetY: 10 - }, - borderRadius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_corner_radius_clicked"], - bundleName: "", - moduleName: "" - }, - fontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body1"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Regular, - imageOpacity: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_alpha_content_fourth"], - bundleName: "", - moduleName: "" - } - }; - this.subTitle = { - normalFontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_secondary"], - bundleName: "", - moduleName: "" - }, - highLightFontColor: { - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_primary_contrary"], - bundleName: "", - moduleName: "" - }, - fontSize: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }, - fontWeight: FontWeight.Regular, - margin: { left: "4vp", right: "24" } - } - } - - changeNodeColor(e, t) { - this.listNode[e].setNodeColor(t) - } - - getNodeColor(e) { - return this.listNode[e].getNodeColor() - } - - handleFocusEffect(e, t) { - this.listNode[e].getNodeIsShow() && this.listNode[e].setNodeBorder(t) - } - - setImageSource(e, t) { - let o = this.listNode[e]; - o.setIsSelected(t === u.Selected || t === u.Edit || t === u.FinishEdit); - null != o.getNodeItem().mainTitleNode && t != u.DragInsert && t != u.FinishDragInsert && o.getNodeItem() - .mainTitleNode - .setMainTitleSelected(t === u.Selected || t === u.FinishEdit); - null != o.getNodeItem().imageNode && o.getNodeItem().imageNode.setImageSource(t) - } - - setImageCollapseSource(e, t) { - let o = this.listNode[e]; - null != o.getNodeItem().imageCollapse && o.getNodeItem() - .imageCollapse - .setImageCollapseSource(t, this.expandAndCollapseInfo.get(o.getCurrentNodeId())) - } - - clearLastIndexStatus() { - if (!(-1 == this.lastIndex || this.lastIndex >= this.listNode.length)) { - this.setImageSource(this.lastIndex, u.Normal); - this.changeNodeColor(this.lastIndex, this.listNode[this.lastIndex].getNodeStatus().normal); - this.handleFocusEffect(this.lastIndex,!1); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(this.listNode[this.lastIndex].getCurrentNodeId())) - } - } - - changeNodeStatus(e) { - let t = e; - let o = this.ListNode; - let i = o[e].getCurrentNodeId(); - if (this.expandAndCollapseInfo.get(i) == I.Expand) { - this.expandAndCollapseInfo.set(i, I.Collapse); - o[t].getNodeItem().imageCollapse.changeImageCollapseSource(I.Collapse) - } else if (this.expandAndCollapseInfo.get(i) == I.Collapse) { - this.expandAndCollapseInfo.set(i, I.Expand); - o[t].getNodeItem().imageCollapse.changeImageCollapseSource(I.Expand) - } - } - - handleExpandAndCollapse(e) { - let t = e; - let o = this.ListNode; - let i = o[t].getCurrentNodeId(); - if (!this.expandAndCollapseInfo.has(i)) return; - let s = this.expandAndCollapseInfo.get(i); - if (o[t].getChildNodeInfo().isHasChildNode && s == I.Collapse) { - for (var a = 0;a < o[t].getChildNodeInfo().allChildNum; a++) { - o[t + 1+a].setNodeIsShow(!1); - o[t + 1+a].setListItemHeight(0) - } - this.notifyDataReload(); - return - } - let d = new Array(o[t].getChildNodeInfo().childNum); - d[0] = t + 1; - let r = 1; - for (; r < o[t].getChildNodeInfo().childNum; ) { - d[r] = d[r-1] + o[d[r-1]].getChildNodeInfo().allChildNum + 1; - r++ - } - if (s == I.Expand) for (a = 0; a < d.length; a++) { - o[d[a]].setNodeIsShow(!0); - o[d[a]].setListItemHeight(48); - let e = o[d[a]].getCurrentNodeId(); - this.expandAndCollapseInfo.get(e) == I.Expand && this.handleExpandAndCollapse(d[a]) - } - d = null; - this.notifyDataReload() - } - - init(e) { - let t = 0; - this.listNode = []; - this.listNodeUtils = e; - this.loadedNodeIdAndIndexMap.clear(); - this.listNodeUtils.traverseNodeDF((e => { - if (e.currentNodeId >= 0) { - var o = new S(e); - this.listNode.push(o); - o.getChildNodeInfo().isHasChildNode && this.expandAndCollapseInfo.set(o.getCurrentNodeId(), I.Collapse); - o.getNodeIsShow() && this.loadedNodeIdAndIndexMap.set(o.getCurrentNodeId(), t++); - o.getIsFolder() && this.nodeIdAndSubtitleMap.set(o.getCurrentNodeId(), o.getNodeInfoData() - .secondaryTitle || 0 == o.getNodeInfoData() - .secondaryTitle ? o.getNodeInfoData().secondaryTitle : "") - } - return !1 - })) - } - - refreshRemoveNodeData(e, t) { - let o = []; - for (let t = 0;t < e.length; t++) for (let i = 0;i < this.listNode.length; i++) if (this.listNode[i].getNodeCurrentNodeId() == e[t]) { - let s = this.listNode[i].getNodeCurrentNodeId(); - this.loadedNodeIdAndIndexMap.has(s) && o.push(this.loadedNodeIdAndIndexMap.get(s)); - let a = this.listNode.splice(i, 1); - a = null; - this.expandAndCollapseInfo.has(e[t]) && this.expandAndCollapseInfo.delete(e[t]); - break - } - o.forEach((e => { - this.notifyDataDelete(e); - this.notifyDataChange(e) - })); - for (let e = 0;e < this.listNode.length; e++) if (this.listNode[e].getNodeCurrentNodeId() == t.getNodeCurrentNodeId()) { - if (null == t.getNodeItem().imageCollapse) { - this.listNode[e].handleImageCollapseAfterAddNode(!1); - this.expandAndCollapseInfo.delete(t.getNodeCurrentNodeId()); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(this.listNode[e].getNodeCurrentNodeId())) - } - break - } - let i = { currentNodeId: t.getNodeCurrentNodeId(), parentNodeId: t.getNodeParentNodeId() }; - this.appEventBus.emit(s.NODE_DELETE, [i]) - } - - refreshAddNodeData(e) { - var t; - this.listNodeUtils.traverseNodeDF((o => { - if (o.currentNodeId === e[0]) { - t = new S(o); - return !0 - } - return !1 - })); - t.setIsModify(!0); - let o = 0; - for (let e = 0;e < this.listNode.length; e++) if (this.listNode[e].getNodeCurrentNodeId() == t.getNodeParentNodeId()) { - o = e; - if (null == this.listNode[e].getNodeItem().imageCollapse) { - this.listNode[e].handleImageCollapseAfterAddNode(!0); - this.notifyDataChange(o) - } else this.expandAndCollapseInfo.get(this.listNode[e].getNodeCurrentNodeId()) == I.Collapse && this.changeNodeStatus(o); - this.listNode.splice(e + 1, 0, t); - this.listNode[e+1].setTitleAndInputTextStatus(!0); - this.listNode[e+1].setNodeIsShow(!0); - this.listNode[e+1].setListItemHeight(48); - this.setImageSource(e + 1, u.Edit); - this.currentOperation = n.ADD_NODE; - this.notifyDataAdd(e + 1); - this.notificationNodeInfo(e + 1, this.currentOperation); - break - } - this.modifyNodeIndex = o + 1; - this.expandAndCollapseInfo.set(t.getNodeParentNodeId(), I.Expand); - this.handleExpandAndCollapse(o) - } - - refreshData(e, t, o, i) { - let s; - this.listNodeUtils = e; - this.listNodeUtils.traverseNodeDF((e => { - if (e.currentNodeId == o) { - s = new S(e); - return !0 - } - return !1 - })); - if (t === n.REMOVE_NODE) { - this.nodeIdAndSubtitleMap.set(o, this.selectedParentNodeSubtitle); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(o)); - this.refreshRemoveNodeData(i, s) - } - if (t === n.ADD_NODE) { - this.addFocusNodeId = i[0]; - this.nodeIdAndSubtitleMap.set(this.getClickNodeId(), this.selectedParentNodeSubtitle); - this.nodeIdAndSubtitleMap.set(i[0], this.insertNodeSubtitle); - this.refreshAddNodeData(i) - } - } - - setClickIndex(e) { - this.thisIndex = e - } - - getClickNodeId() { - return this.thisIndex < 0 || this.thisIndex >= this.ListNode.length ? -1 : this.ListNode[this.thisIndex].getCurrentNodeId() - } - - expandAndCollapseNode(e) { - this.changeNodeStatus(e); - this.handleExpandAndCollapse(e) - } - - getIsTouchDown() { - return this.isTouchDown - } - - getLastIndex() { - return this.lastIndex - } - - handleEvent(e, t) { - if (this.isDrag) return; - e !== r.TOUCH_DOWN && e !== r.TOUCH_UP && e !== r.MOUSE_BUTTON_RIGHT || t != this.lastIndex && this.clearLastIndexStatus(); - let o = this.loadedNodeIdAndIndexMap.get(this.listNode[t].getCurrentNodeId()); - switch (e) { - case r.TOUCH_DOWN: - this.isTouchDown = !0; - this.changeNodeColor(t, this.listNode[t].getNodeStatus().press); - break; - case r.TOUCH_UP: { - this.isInnerDrag && (this.isInnerDrag = !1); - this.isTouchDown = !1; - let e = this.listNode[t]; - this.setImageSource(t, u.Selected); - this.lastIndex = t; - this.changeNodeColor(t, e.getNodeStatus().selected); - this.notifyDataChange(o); - break - } - case r.HOVER: - if (this.getNodeColor(t) != this.listNode[t].getNodeStatus().selected) { - this.changeNodeColor(t, this.listNode[t].getNodeStatus().hover); - this.notifyDataChange(o) - } - break; - case r.HOVER_OVER: - if (this.getNodeColor(t) != this.listNode[t].getNodeStatus().selected) { - this.changeNodeColor(t, this.listNode[t].getNodeStatus().normal); - this.notifyDataChange(o) - } - break; - case r.FOCUS: - this.handleFocusEffect(t,!0); - this.notifyDataChange(o); - break; - case r.BLUR: - this.handleFocusEffect(t,!1); - this.notifyDataChange(o); - break; - case r.MOUSE_BUTTON_RIGHT: - this.lastIndex = t; - this.finishEditing(); - break; - case r.DRAG: - this.isTouchDown = !1; - let e = this.listNode[t]; - this.setImageSource(t, u.Selected); - this.lastIndex = t; - this.changeNodeColor(t, e.getNodeStatus().selected); - this.notifyDataChange(o) - } - } - - notificationNodeInfo(e, t) { - if (t === n.MODIFY_NODE) { - let e = this.listNode[this.modifyNodeIndex]; - let t = { currentNodeId: e.getNodeCurrentNodeId(), parentNodeId: e.getNodeParentNodeId() }; - this.appEventBus.emit(s.NODE_MODIFY, [t]) - } else if (t === n.ADD_NODE) { - let t = this.listNode[e]; - null != t.getNodeItem().imageNode && t.getNodeItem().imageNode.source; - null != t.getNodeItem().imageNode && t.getNodeItem().imageNode.selectedSource; - null != t.getNodeItem().imageNode && t.getNodeItem().imageNode.editSource; - let o = { currentNodeId: t.getNodeCurrentNodeId(), parentNodeId: t.getNodeParentNodeId() }; - this.appEventBus.emit(s.NODE_ADD, [o]) - } - } - - finishEditing() { - if (-1 != this.modifyNodeIndex) { - this.setImageSource(this.modifyNodeIndex, u.FinishEdit); - this.setImageCollapseSource(this.modifyNodeIndex, u.FinishEdit); - this.listNode[this.modifyNodeIndex].setIsModify(!1); - this.listNode[this.modifyNodeIndex].setTitleAndInputTextStatus(!1); - this.notificationNodeInfo(this.modifyNodeIndex, this.currentOperation); - this.notifyDataChange(this.modifyNodeIndex) - } - } - - setItemVisibilityOnEdit(e, t) { - let o = -1; - if (-1 != e) { - if (t === n.MODIFY_NODE) { - for (let t = 0;t < this.listNode.length; t++) if (this.listNode[t].getCurrentNodeId() == e) { - o = t; - break - } - let t = this.listNode[o]; - t.setIsModify(!0); - if (null === t.getNodeItem().mainTitleNode) return; - this.currentOperation = n.MODIFY_NODE; - t.setTitleAndInputTextStatus(!0); - this.setImageSource(o, u.Edit); - this.setImageCollapseSource(o, u.Edit); - this.modifyNodeIndex = o; - t.getNodeItem().inputText && (null != t.getNodeItem().imageCollapse ? t.getNodeItem() - .inputText - .rightMargin = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_paragraph_margin_xs"], - bundleName: "", - moduleName: "" - } : t.getNodeItem().inputText.rightMargin = { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_elements_margin_horizontal_m"], - bundleName: "", - moduleName: "" - }); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(e)) - } - o = e; - if (t === n.COMMIT_NODE) { - let e = this.listNode[o]; - e.setTitleAndInputTextStatus(!1); - e.setIsModify(!1); - this.setImageSource(o, u.FinishEdit); - this.setImageCollapseSource(o, u.FinishEdit); - this.notificationNodeInfo(this.modifyNodeIndex, this.currentOperation); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(e.getCurrentNodeId())) - } - } - } - - setPopUpInfo(e, t, o, i) { - let s = this.listNode[i]; - s.setPopUpIsShow(o); - let a = this.loadedNodeIdAndIndexMap.get(s.getCurrentNodeId()); - if (o) { - if (e === l.HINTS) { - if (null != s.getNodeItem().mainTitleNode) s.setPopUpText(s.getNodeItem().mainTitleNode.title); else { - s.setPopUpText(""); - s.setPopUpIsShow(!1) - } - s.setPopUpEnableArrow(!1); - s.setPopUpColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_background"], - bundleName: "", - moduleName: "" - }); - s.setPopUpTextColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_secondary"], - bundleName: "", - moduleName: "" - }) - } else if (e === l.WARNINGS && null != s.getNodeItem().inputText) { - t === h.INVALID_ERROR ? s.setPopUpText("invalid error") : t === h.LENGTH_ERROR && s.setPopUpText("length error"); - s.setPopUpEnableArrow(!0); - s.setPopUpColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_help_tip_bg"], - bundleName: "", - moduleName: "" - }); - s.setPopUpTextColor({ - id: -1, - type: 10001, - params: ["sys.color.ohos_id_color_text_hint_contrary"], - bundleName: "", - moduleName: "" - }) - } - this.notifyDataChange(a) - } else this.notifyDataChange(a) - } - - setShowPopUpTimeout(e, t) { - null != this.listNode[t].getNodeItem().mainTitleNode && (this.listNode[t].getNodeItem() - .mainTitleNode - .popUpTimeout = e); - let o = this.loadedNodeIdAndIndexMap.get(this.listNode[t].getCurrentNodeId()); - this.notifyDataChange(o) - } - - setMainTitleNameOnEdit(e, t) { - this.modifyNodeIndex = e; - if (null != this.listNode[e].getNodeItem().mainTitleNode) { - this.listNode[e].getNodeItem().mainTitleNode.title = t; - let o = this.loadedNodeIdAndIndexMap.get(this.listNode[e].getCurrentNodeId()); - this.notifyDataChange(o) - } - } - - get ListNode() { - return this.listNode - } - - totalCount() { - let e = 0; - let t = 0; - this.loadedNodeIdAndIndexMap.clear(); - for (let o = 0;o < this.listNode.length; o++) if (this.listNode[o].getNodeIsShow()) { - this.loadedNodeIdAndIndexMap.set(this.listNode[o].getCurrentNodeId(), t++); - e++ - } - return e - } - - getData(e) { - let t = 0; - for (let o = 0;o < this.listNode.length; o++) if (this.listNode[o].getNodeIsShow()) { - if (e == t) return this.listNode[o]; - t++ - } - return null - } - - addData(e, t) { - this.listNode.splice(e, 0, t); - this.notifyDataAdd(e) - } - - pushData(e) { - this.listNode.push(e); - this.notifyDataAdd(this.listNode.length - 1) - } - - setIsInnerDrag(e) { - this.isInnerDrag = e - } - - getIsInnerDrag() { - return this.isInnerDrag - } - - setIsDrag(e) { - this.isDrag = e - } - - getIsDrag() { - return this.isDrag - } - - setCurrentNodeInfo(e) { - this.currentNodeInfo = e - } - - getCurrentNodeInfo() { - return this.currentNodeInfo - } - - setDraggingParentNodeId(e) { - this.draggingParentNodeId = e - } - - getDraggingParentNodeId() { - return this.draggingParentNodeId - } - - getDraggingCurrentNodeId() { - return this.draggingCurrentNodeId - } - - setDraggingCurrentNodeId(e) { - this.draggingCurrentNodeId = e - } - - setListItemOpacity(e) { - this.listItemOpacity = e - } - - getListItemOpacity(e) { - return e.getCurrentNodeId() == this.getDraggingCurrentNodeId() ? this.listItemOpacity : 1 - } - - getDragPopupPara() { - return this.DRAG_POPUP - } - - setLastPassIndex(e) { - this.lastPassIndex = e - } - - getLastPassIndex() { - return this.lastPassIndex - } - - getIsParentOfInsertNode(e) { - let t = this.currentNodeInfo.getNodeInfoNode(); - let o = !1; - this.listNodeUtils.traverseNodeDF((function (t) { - if (t.currentNodeId == e) { - o = !0; - return !0 - } - return !1 - }), t); - return o - } - - setPassIndex(e) { - this.thisPassIndex = e - } - - getPassIndex() { - return this.thisPassIndex - } - - clearTimeOutAboutDelayHighLightAndExpand(e) { - if (this.lastPassId != this.INITIAL_INVALID_VALUE && this.loadedNodeIdAndIndexMap.has(this.lastPassId)) { - let e = this.loadedNodeIdAndIndexMap.get(this.lastPassId); - let t = this; - this.ListNode.forEach((function (e) { - e.getNodeCurrentNodeId() == t.lastPassId && e.setCanShowFlagLine(!1) - })); - this.notifyDataChange(e) - } - if (this.lastTimeoutHighLightId != this.INITIAL_INVALID_VALUE && this.clearTimeoutHighLightId != this.lastTimeoutHighLightId) { - clearTimeout(this.lastTimeoutHighLightId); - if (this.lastDelayHighLightIndex != this.INITIAL_INVALID_VALUE) { - this.clearHighLight(this.lastDelayHighLightIndex); - let e = this.loadedNodeIdAndIndexMap.get(this.listNode[this.lastDelayHighLightIndex].getCurrentNodeId()); - this.notifyDataChange(e) - } - this.clearTimeoutHighLightId = this.lastTimeoutHighLightId - } - this.lastTimeoutHighLightId = this.timeoutHighLightId; - this.lastDelayHighLightIndex = e; - if (this.lastTimeoutExpandId != this.INITIAL_INVALID_VALUE && this.clearTimeoutExpandId != this.lastTimeoutExpandId) { - clearTimeout(this.lastTimeoutExpandId); - this.clearTimeoutExpandId = this.lastTimeoutExpandId - } - this.lastTimeoutExpandId = this.timeoutExpandId; - this.lastDelayExpandIndex = this.INITIAL_INVALID_VALUE - } - - clearHighLight(e) { - this.changeNodeColor(e, this.listNode[e].getNodeStatus().normal); - this.changeNodeHighLightColor(e,!1); - this.setImageSource(e, u.FinishDragInsert); - this.setImageCollapseSource(e, u.FinishDragInsert); - this.listNode[e].setIsHighLight(!1) - } - - changeNodeHighLightColor(e, t) { - this.listNode[e].getNodeItem() - .mainTitleNode && this.listNode[e].getIsShowTitle() && this.listNode[e].getNodeItem() - .mainTitleNode - .setMainTitleHighLight(t) - } - - setVisibility(e, t, o) { - let i = this.thisPassIndex != t || this.flag != e; - this.thisPassIndex = t; - if ((i || o) && this.isInnerDrag) { - this.flag = e; - let o = this.getData(t).getCurrentNodeId(); - let i = this.expandAndCollapseInfo.get(o) == I.Expand && this.flag == g.DOWN_FLAG ? this.getData(t) - .getNodeLevel() + 1 : this.getData(t) - .getNodeLevel(); - if (this.lastPassId != this.INITIAL_INVALID_VALUE && this.loadedNodeIdAndIndexMap.has(this.lastPassId)) { - let e = this.loadedNodeIdAndIndexMap.get(this.lastPassId); - let t = this; - this.ListNode.forEach((function (e) { - e.getNodeCurrentNodeId() == t.lastPassId && e.setCanShowFlagLine(!1) - })); - this.notifyDataChange(e) - } - if (this.flag == g.DOWN_FLAG && t < this.totalCount() - 1) { - this.getData(t).setCanShowFlagLine(!1); - this.getData(t + 1).setCanShowFlagLine(!0); - this.getData(t).setCanShowBottomFlagLine(!1); - this.getData(t + 1).setFlagLineLeftMargin(i); - this.notifyDataChange(t); - this.notifyDataChange(t + 1); - this.lastPassId = this.getData(t + 1).getNodeCurrentNodeId() - } else if (this.flag == g.UP_FLAG && t < this.totalCount() - 1) { - this.getData(t).setCanShowFlagLine(!0); - this.getData(t + 1).setCanShowFlagLine(!1); - this.getData(t).setCanShowBottomFlagLine(!1); - this.getData(t).setFlagLineLeftMargin(i); - this.notifyDataChange(t); - this.notifyDataChange(t + 1); - this.lastPassId = this.getData(t).getNodeCurrentNodeId() - } else if (t >= this.totalCount() - 1) { - if (this.flag == g.DOWN_FLAG) { - this.getData(t).setCanShowFlagLine(!1); - this.getData(t).setCanShowBottomFlagLine(!0) - } else { - this.getData(t).setCanShowFlagLine(!0); - this.getData(t).setCanShowBottomFlagLine(!1) - } - this.getData(t).setFlagLineLeftMargin(i); - this.notifyDataChange(t); - this.lastPassId = this.getData(t).getNodeCurrentNodeId() - } - } - } - - delayHighLightAndExpandNode(e, t, o) { - let i = e != this.lastDelayExpandIndex; - let s = this.getData(o).getIsOverBorder(); - this.lastDelayExpandIndex = s ? this.INITIAL_INVALID_VALUE : e; - if (s || i) { - let i = this; - if (!s && (!this.isInnerDrag || this.expandAndCollapseInfo.get(t) == I.Collapse && this.isInnerDrag || !this.expandAndCollapseInfo.has(t) && this.listNode[e].getIsFolder())) { - this.changeNodeColor(e, this.listNode[e].getNodeStatus().hover); - this.notifyDataChange(o); - let t = this.isInnerDrag ? 1e3 : 0; - this.timeoutHighLightId = setTimeout((function () { - i.delayHighLight(e) - }), t) - } - if (s || this.lastTimeoutHighLightId != this.INITIAL_INVALID_VALUE && this.clearTimeoutHighLightId != this.lastTimeoutHighLightId) { - clearTimeout(this.lastTimeoutHighLightId); - if (this.lastDelayHighLightIndex != this.INITIAL_INVALID_VALUE) { - this.clearHighLight(this.lastDelayHighLightIndex); - this.notifyDataReload() - } - this.clearTimeoutHighLightId = this.lastTimeoutHighLightId - } - this.lastTimeoutHighLightId = this.timeoutHighLightId; - this.lastDelayHighLightIndex = e; - if (!s && this.expandAndCollapseInfo.get(t) == I.Collapse) { - let t = this.getData(o).getNodeInfoNode().children[0].currentNodeId; - let s = 2e3; - this.timeoutExpandId = setTimeout((function () { - i.clearHighLight(i.lastDelayHighLightIndex); - i.alterFlagLineAndExpandNode(e, t) - }), s) - } - if (s || this.lastTimeoutExpandId != this.INITIAL_INVALID_VALUE && this.clearTimeoutExpandId != this.lastTimeoutExpandId) { - clearTimeout(this.lastTimeoutExpandId); - this.clearTimeoutExpandId = this.lastTimeoutExpandId - } - this.lastTimeoutExpandId = this.timeoutExpandId - } - } - - delayHighLight(e) { - let t = this; - this.ListNode.forEach((function (e) { - if (e.getNodeCurrentNodeId() == t.lastPassId) { - e.setCanShowFlagLine(!1); - e.setCanShowBottomFlagLine(!1) - } - })); - this.changeNodeColor(e, this.listNode[e].getNodeStatus().highLight); - this.listNode[e].setIsHighLight(!0); - this.changeNodeHighLightColor(e,!0); - this.setImageSource(e, u.DragInsert); - this.setImageCollapseSource(e, u.DragInsert); - this.notifyDataReload() - } - - alterFlagLineAndExpandNode(e, t) { - let o = this; - this.ListNode.forEach((function (e) { - if (e.getNodeCurrentNodeId() == o.lastPassId) { - e.setCanShowFlagLine(!1); - e.setCanShowBottomFlagLine(!1) - } - })); - this.ListNode.forEach((function (e) { - o.isInnerDrag && e.getNodeCurrentNodeId() == t && e.setCanShowFlagLine(!0) - })); - this.changeNodeStatus(e); - this.handleExpandAndCollapse(e); - this.lastPassId = t - } - - hideLastLine() { - if (this.lastPassId != this.INITIAL_INVALID_VALUE && this.loadedNodeIdAndIndexMap.has(this.lastPassId)) { - let e = this; - this.ListNode.forEach((function (t) { - if (t.getNodeCurrentNodeId() == e.lastPassId) { - t.setCanShowFlagLine(!1); - t.setCanShowBottomFlagLine(!1) - } - })); - let t = this.loadedNodeIdAndIndexMap.get(this.lastPassId); - this.notifyDataChange(t) - } - } - - clearLastTimeoutHighLight() { - if (this.lastTimeoutHighLightId != this.INITIAL_INVALID_VALUE && this.clearTimeoutHighLightId != this.lastTimeoutHighLightId) { - clearTimeout(this.lastTimeoutHighLightId); - this.lastDelayHighLightIndex != this.INITIAL_INVALID_VALUE && this.clearHighLight(this.lastDelayHighLightIndex) - } - } - - clearLastTimeoutExpand() { - this.lastTimeoutExpandId != this.INITIAL_INVALID_VALUE && this.clearTimeoutExpandId != this.lastTimeoutExpandId && clearTimeout(this.lastTimeoutExpandId) - } - - getSubtitle(e) { - return this.nodeIdAndSubtitleMap.has(e) ? "number" == typeof this.nodeIdAndSubtitleMap.get(e) ? this.nodeIdAndSubtitleMap.get(e) - .toString() : this.nodeIdAndSubtitleMap.get(e) : "" - } - - hasSubtitle(e) { - return this.nodeIdAndSubtitleMap.has(e) - } - - initialParameterAboutDelayHighLightAndExpandIndex() { - this.lastDelayHighLightIndex = this.INITIAL_INVALID_VALUE; - this.lastDelayExpandIndex = this.INITIAL_INVALID_VALUE; - this.lastPassIndex = this.INITIAL_INVALID_VALUE; - this.draggingCurrentNodeId = this.INITIAL_INVALID_VALUE; - this.flag = g.NONE - } - - refreshSubtitle(e) { - this.nodeIdAndSubtitleMap.set(this.selectedParentNodeId, this.selectedParentNodeSubtitle); - this.nodeIdAndSubtitleMap.set(e, this.insertNodeSubtitle); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(this.selectedParentNodeId)); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(e)) - } - - setNodeSubtitlePara(e, t, o) { - this.selectedParentNodeId = e; - this.selectedParentNodeSubtitle = t; - this.insertNodeSubtitle = o - } - - getInsertNodeSubtitle() { - return this.insertNodeSubtitle - } - - getExpandAndCollapseInfo(e) { - return this.expandAndCollapseInfo.get(e) - } - - getLastDelayHighLightId() { - return this.lastDelayHighLightId - } - - setLastDelayHighLightId() { - this.ListNode.forEach(((e, t) => { - t == this.lastDelayHighLightIndex && (this.lastDelayHighLightId = e.getCurrentNodeId()) - })) - } - - setLastPassId(e) { - this.lastPassId = e - } - - setLastDelayHighLightIndex(e) { - this.lastDelayHighLightIndex = e - } - - alterDragNode(e, t, o, i, a, d) { - let r = []; - let n = e; - let l = a; - let h = d.getNodeInfoData(); - let c = null; - let N = d.getNodeInfoNode(); - let u = !1; - let p = this.INITIAL_INVALID_VALUE; - let m = this.INITIAL_INVALID_VALUE; - let f = this.flag == g.DOWN_FLAG; - m = this.getChildIndex(i, a); - p = this.getChildIndex(e, t); - p = e != i ? f ? p + 1 : p : p > m ? f ? p : p - 1 : f ? p + 1 : p; - for (let e = 0;e < this.listNode.length; e++) if (this.listNode[e].getCurrentNodeId() == t) { - u = this.listNode[e].getIsHighLight(); - if (this.flag == g.DOWN_FLAG && this.expandAndCollapseInfo.get(t) == I.Expand) { - n = t; - p = 0 - } else if (this.flag == g.UP_FLAG && this.expandAndCollapseInfo.get(t) == I.Expand && 0 == this.listNode[e].getCanShowFlagLine()) { - n = t; - p = 0 - } else if (u) { - n = t; - p = 0 - } - break - } - let S = { currentNodeId: l, parentNodeId: n, childIndex: p }; - this.appEventBus.emit(s.NODE_MOVE, [S]); - r.push({ parentId: n, currentId: l, data: h }); - let C = null; - this.listNodeUtils.dragTraverseNodeDF((function (e, t) { - if (e) { - C = e; - n = C.parentNodeId; - l = C.currentNodeId; - for (let e = 0;e < t.length; e++) if (t[e].getNodeCurrentNodeId() == l) { - c = t[e]; - break - } - h = c.getNodeInfoData(); - n != i && r.push({ parentId: n, currentId: l, data: h }); - return !1 - } - return !1 - }), N, this.listNode); - this.listNodeUtils.removeNode(a, i, this.listNodeUtils.traverseNodeBF); - let D = t; - let _ = f; - if (this.expandAndCollapseInfo.get(t) == I.Expand) { - _ = !1; - this.listNode.forEach((e => { - e.getCurrentNodeId() == t && 0 == e.getCanShowFlagLine() && (D = e.getNodeInfoNode() - .children - .length ? e.getNodeInfoNode() - .children[0] - .currentNodeId : this.INITIAL_INVALID_VALUE) - })) - } else !this.expandAndCollapseInfo.get(t) && u && this.expandAndCollapseInfo.set(t, I.Expand); - this.listNodeUtils.addDragNode(r[0].parentId, r[0].currentId, D, _, r[0].data); - for (let e = 1;e < r.length; e++) this.listNodeUtils.addNode(r[e].parentId, r[e].currentId, r[e].data); - for (let e = 0;e < this.listNode.length; e++) if (this.listNode[e].getCurrentNodeId() == i && null == this.listNode[e].getNodeInfoNode() - .getNodeItem() - .imageCollapse) { - this.listNode[e].handleImageCollapseAfterAddNode(!1); - this.expandAndCollapseInfo.delete(i); - break - } - let T = [...this.listNode]; - this.reloadListNode(this.listNodeUtils, T) - } - - reloadListNode(e, t) { - let o = 0; - this.listNode = []; - this.listNodeUtils = e; - this.loadedNodeIdAndIndexMap.clear(); - this.listNodeUtils.traverseNodeDF((e => { - if (e.currentNodeId >= 0) { - var i = new S(e); - this.listNode.push(i); - this.expandAndCollapseInfo.get(e.currentNodeId) == I.Expand ? i.getNodeItem() - .imageCollapse - .changeImageCollapseSource(I.Expand) : this.expandAndCollapseInfo.get(e.currentNodeId) == I.Collapse && i.getNodeItem() - .imageCollapse - .changeImageCollapseSource(I.Collapse); - for (let e = 0;e < t.length; e++) if (t[e].getCurrentNodeId() == i.getCurrentNodeId()) { - i.setNodeIsShow(t[e].getNodeIsShow()); - i.setListItemHeight(t[e].getListItemHeight()); - i.getNodeItem().mainTitleNode && i.getIsShowTitle() && (i.getNodeItem() - .mainTitleNode - .title = t[e].getNodeItem().mainTitleNode.title); - break - } - i.getNodeIsShow() && this.loadedNodeIdAndIndexMap.set(i.getCurrentNodeId(), o++) - } - return !1 - })) - } - - getFlagLine() { - return this.FLAG_LINE - } - - getVisibility(e) { - let t = this.loadedNodeIdAndIndexMap.get(e.getCurrentNodeId()) - 1; - if (t > this.INITIAL_INVALID_VALUE) { - let o = this.getData(t); - return 1 != e.getCanShowFlagLine() || e.getIsHighLight() || o.getIsHighLight() ? Visibility.Hidden : Visibility.Visible - } - return 1 != e.getCanShowFlagLine() || e.getIsHighLight() ? Visibility.Hidden : Visibility.Visible - } - - getSubTitlePara() { - return this.subTitle - } - - getIsFolder(e) { - return!!this.loadedNodeIdAndIndexMap.has(e) && this.getData(this.loadedNodeIdAndIndexMap.get(e)).getIsFolder() - } - - getSubTitleFontColor(e) { - return e ? this.subTitle.highLightFontColor : this.subTitle.normalFontColor - } - - getChildIndex(e, t) { - let o = this.INITIAL_INVALID_VALUE; - this.listNodeUtils.traverseNodeBF((function (i) { - if (i.getCurrentNodeId() == e) { - i.children.forEach(((e, i) => { - e.getCurrentNodeId() == t && (o = i) - })); - return !0 - } - return !1 - })); - return o - } - - setCurrentFocusNodeId(e) { - this.currentFocusNodeId = e - } - - getCurrentFocusNodeId() { - return this.currentFocusNodeId - } - - setLastFocusNodeId(e) { - this.lastFocusNodeId = e - } - - getLastFocusNodeId() { - return this.lastFocusNodeId - } - - getAddFocusNodeId() { - return this.addFocusNodeId - } - - setFlag(e) { - this.flag = e - } - } - - e.ListNodeDataSource = D; - - function _(e) { - let t = 0; - this.listNodeDataSource.ListNode.forEach((function (o, i) { - o.getNodeCurrentNodeId() == e && (t = i) - })); - return t - } - - class T extends ViewPU { - constructor(e, t, o, i = -1) { - super(e, o, i); - this.listNodeDataSource = void 0; - this.treeController = void 0; - this.__dropSelectedIndex = new ObservedPropertySimplePU(0, this, "dropSelectedIndex"); - this.listTreeViewMenu = null; - this.__listTreeViewWidth = new SynchedPropertySimpleOneWayPU(t.listTreeViewWidth, this, "listTreeViewWidth"); - this.__listTreeViewHeight = new SynchedPropertySimpleOneWayPU(t.listTreeViewHeight, this, "listTreeViewHeight"); - this.MAX_CN_LENGTH = 254; - this.MAX_EN_LENGTH = 255; - this.INITIAL_INVALID_VALUE = -1; - this.MAX_TOUCH_DOWN_COUNT = 0; - this.isMultiPress = !1; - this.touchDownCount = this.INITIAL_INVALID_VALUE; - this.appEventBus = a.getInstance().getTreeListener(); - this.itemPadding = { - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_card_margin_middle"], - bundleName: "", - moduleName: "" - }, - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_card_margin_middle"], - bundleName: "", - moduleName: "" - }, - top: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_margin_vertical"], - bundleName: "", - moduleName: "" - }, - bottom: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_margin_vertical"], - bundleName: "", - moduleName: "" - } - }; - this.textInputPadding = { left: "0vp", right: "0vp", top: "0vp", bottom: "0vp" }; - this.setInitiallyProvidedValue(t) - } - - setInitiallyProvidedValue(e) { - void 0 !== e.listNodeDataSource && (this.listNodeDataSource = e.listNodeDataSource); - void 0 !== e.treeController && (this.treeController = e.treeController); - void 0 !== e.dropSelectedIndex && (this.dropSelectedIndex = e.dropSelectedIndex); - void 0 !== e.listTreeViewMenu && (this.listTreeViewMenu = e.listTreeViewMenu); - void 0 !== e.MAX_CN_LENGTH && (this.MAX_CN_LENGTH = e.MAX_CN_LENGTH); - void 0 !== e.MAX_EN_LENGTH && (this.MAX_EN_LENGTH = e.MAX_EN_LENGTH); - void 0 !== e.INITIAL_INVALID_VALUE && (this.INITIAL_INVALID_VALUE = e.INITIAL_INVALID_VALUE); - void 0 !== e.MAX_TOUCH_DOWN_COUNT && (this.MAX_TOUCH_DOWN_COUNT = e.MAX_TOUCH_DOWN_COUNT); - void 0 !== e.isMultiPress && (this.isMultiPress = e.isMultiPress); - void 0 !== e.touchDownCount && (this.touchDownCount = e.touchDownCount); - void 0 !== e.appEventBus && (this.appEventBus = e.appEventBus); - void 0 !== e.itemPadding && (this.itemPadding = e.itemPadding); - void 0 !== e.textInputPadding && (this.textInputPadding = e.textInputPadding) - } - - updateStateVars(e) { - this.__listTreeViewWidth.reset(e.listTreeViewWidth); - this.__listTreeViewHeight.reset(e.listTreeViewHeight) - } - - purgeVariableDependenciesOnElmtId(e) { - this.__dropSelectedIndex.purgeDependencyOnElmtId(e); - this.__listTreeViewWidth.purgeDependencyOnElmtId(e); - this.__listTreeViewHeight.purgeDependencyOnElmtId(e) - } - - aboutToBeDeleted() { - this.__dropSelectedIndex.aboutToBeDeleted(); - this.__listTreeViewWidth.aboutToBeDeleted(); - this.__listTreeViewHeight.aboutToBeDeleted(); - SubscriberManager.Get().delete(this.id__()); - this.aboutToBeDeletedInternal() - } - - get dropSelectedIndex() { - return this.__dropSelectedIndex.get() - } - - set dropSelectedIndex(e) { - this.__dropSelectedIndex.set(e) - } - - get listTreeViewWidth() { - return this.__listTreeViewWidth.get() - } - - set listTreeViewWidth(e) { - this.__listTreeViewWidth.set(e) - } - - get listTreeViewHeight() { - return this.__listTreeViewHeight.get() - } - - set listTreeViewHeight(e) { - this.__listTreeViewHeight.set(e) - } - - aboutToAppear() { - this.listTreeViewWidth = void 0 === this.listTreeViewWidth ? 200 : this.listTreeViewWidth; - this.listNodeDataSource = this.treeController.getListNodeDataSource() - } - - checkInvalidPattern(e) { - return /[\\\/:*?"<>|]/.test(e) - } - - checkIsAllCN(e) { - return /^[\u4e00-\u9fa5]+$/.test(e) - } - - popupForShowTitle(e, t, o, i = null) { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(t); - Row.border({ - radius: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_elements_margin_horizontal_l"], - bundleName: "", - moduleName: "" - } - }); - Row.padding({ - left: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_elements_margin_horizontal_l"], - bundleName: "", - moduleName: "" - }, - right: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_elements_margin_horizontal_l"], - bundleName: "", - moduleName: "" - }, - top: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_card_margin_middle"], - bundleName: "", - moduleName: "" - }, - bottom: { - id: -1, - type: 10002, - params: ["sys.float.ohos_id_card_margin_middle"], - bundleName: "", - moduleName: "" - } - }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((t, i) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Text.create(e); - Text.fontSize({ - id: -1, - type: 10002, - params: ["sys.float.ohos_id_text_size_body2"], - bundleName: "", - moduleName: "" - }); - Text.fontWeight("regular"); - Text.fontColor(o); - i || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - } - - builder(e = null) { - this.listTreeViewMenu.bind(this)() - } - - draggingPopup(e, o = null) { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.constraintSize({ - minWidth: this.listNodeDataSource.getDragPopupPara().floorConstraintSize.minWidth, - maxWidth: this.listNodeDataSource.getDragPopupPara().floorConstraintSize.maxWidth - }); - Row.height(this.listNodeDataSource.getDragPopupPara().height); - Row.backgroundColor(this.listNodeDataSource.getDragPopupPara().backgroundColor); - Row.padding({ - left: this.listNodeDataSource.getDragPopupPara().padding.left, - right: this.listNodeDataSource.getDragPopupPara().padding.right - }); - Row.shadow({ - radius: this.listNodeDataSource.getDragPopupPara().shadow.radius, - color: this.listNodeDataSource.getDragPopupPara().shadow.color, - offsetY: this.listNodeDataSource.getDragPopupPara().shadow.offsetY - }); - Row.borderRadius(this.listNodeDataSource.getDragPopupPara().borderRadius); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((o, i) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - If.create(); - e.getNodeItem().imageNode ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((o, i) => { - ViewStackProcessor.StartGetAccessRecordingFor(o); - Row.create(); - Row.backgroundColor(t); - Row.margin({ right: e.getNodeItem().imageNode.itemRightMargin }); - Row.height(e.getNodeItem().imageNode.itemHeight); - Row.width(e.getNodeItem().imageNode.itemWidth); - i || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Image.create(e.getNodeItem().imageNode.normalSource); - Image.objectFit(ImageFit.Contain); - Image.height(e.getNodeItem().imageNode.itemHeight); - Image.width(e.getNodeItem().imageNode.itemWidth); - Image.opacity(this.listNodeDataSource.getDragPopupPara().imageOpacity); - o || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })) : If.branchId(1); - i || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Row.create(); - Row.constraintSize({ - minWidth: e.getNodeItem().imageNode ? this.listNodeDataSource.getDragPopupPara() - .textConstraintSize - .minWidth1 : this.listNodeDataSource.getDragPopupPara() - .textConstraintSize - .minWidth2, - maxWidth: e.getNodeItem().imageNode ? this.listNodeDataSource.getDragPopupPara() - .textConstraintSize - .maxWidth1 : this.listNodeDataSource.getDragPopupPara() - .textConstraintSize - .maxWidth2 - }); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - If.create(); - e.getNodeItem().mainTitleNode && e.getIsShowTitle() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - Text.create(e.getNodeItem().mainTitleNode.title); - Text.maxLines(1); - Text.fontSize(e.getNodeItem().mainTitleNode.size); - Text.fontColor(this.listNodeDataSource.getDragPopupPara().fontColor); - Text.fontWeight(this.listNodeDataSource.getDragPopupPara().fontWeight); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - o || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Row.pop(); - Row.pop() - } - - initialRender() { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - List.create({}); - List.width(this.listTreeViewWidth); - List.height(this.listTreeViewHeight); - List.onDragMove((e => { - if (this.isMultiPress) { - console.error("drag error, a item has been dragged"); - return - } - let t = Math.floor(e.getY() / 24) % 2 ? g.DOWN_FLAG : g.UP_FLAG; - let o = Math.floor(e.getY() / 48); - let i = !1; - if (o >= this.listNodeDataSource.totalCount()) { - t = g.DOWN_FLAG; - o = this.listNodeDataSource.totalCount() - 1; - this.listNodeDataSource.getData(o).setIsOverBorder(!0); - i = !0 - } else this.listNodeDataSource.getData(o).setIsOverBorder(!1); - let s = this.listNodeDataSource.getData(o).getCurrentNodeId(); - if (o != this.listNodeDataSource.getLastPassIndex() && this.listNodeDataSource.getIsInnerDrag()) { - if (this.listNodeDataSource.getIsParentOfInsertNode(s)) { - this.listNodeDataSource.setPassIndex(o); - let e = this; - this.listNodeDataSource.clearTimeOutAboutDelayHighLightAndExpand(_.call(e, s)); - this.listNodeDataSource.setFlag(g.NONE); - return - } - } - this.listNodeDataSource.setLastPassIndex(o); - this.listNodeDataSource.setVisibility(t, o, i); - if (s != this.listNodeDataSource.getDraggingCurrentNodeId()) { - let e = this; - this.listNodeDataSource.delayHighLightAndExpandNode(_.call(e, s), s, o) - } - })); - List.onDragEnter(((e, t) => { - if (this.listNodeDataSource.getIsInnerDrag()) { - this.listNodeDataSource.setIsDrag(!0); - let e = .4; - this.listNodeDataSource.setListItemOpacity(e) - } - })); - List.onDragLeave(((e, t) => { - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.clearLastTimeoutExpand(); - this.listNodeDataSource.setListItemOpacity(1); - this.listNodeDataSource.setIsDrag(!1); - this.listNodeDataSource.notifyDataReload() - })); - List.onDrop(((e, t) => { - this.listNodeDataSource.clearLastTimeoutExpand(); - this.listNodeDataSource.setListItemOpacity(1); - let o = this.listNodeDataSource.getPassIndex(); - let i = this.dropSelectedIndex; - if (i - 1 > this.listNodeDataSource.totalCount() || null == i) { - console.error("drag error, currentNodeIndex is not found"); - this.listNodeDataSource.setIsDrag(!1); - return - } - if (o == this.listNodeDataSource.totalCount()) { - console.log("need to insert into the position of the last line, now insertNodeIndex = insertNodeIndex - 1"); - o -= 1 - } - let s = this.listNodeDataSource.getData(o); - let a = s.getNodeCurrentNodeId(); - if (!this.listNodeDataSource.getIsDrag() || !this.listNodeDataSource.getIsInnerDrag()) { - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.setIsInnerDrag(!1); - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.initialParameterAboutDelayHighLightAndExpandIndex(); - this.listNodeDataSource.refreshSubtitle(a); - this.listNodeDataSource.notifyDataReload(); - return - } - let d = this.listNodeDataSource.getCurrentNodeInfo(); - let n = s.getNodeParentNodeId(); - let l = this.listNodeDataSource.getDraggingCurrentNodeId(); - let h = this.listNodeDataSource.getDraggingParentNodeId(); - if (this.listNodeDataSource.getIsParentOfInsertNode(a)) { - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.setIsInnerDrag(!1); - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.notifyDataChange(o); - this.listNodeDataSource.initialParameterAboutDelayHighLightAndExpandIndex(); - this.listNodeDataSource.setIsDrag(!1); - let e = this; - let t = _.call(e, l); - this.listNodeDataSource.setClickIndex(t); - this.listNodeDataSource.handleEvent(r.DRAG, t); - return - } - if (this.listNodeDataSource.getExpandAndCollapseInfo(l) == I.Expand) { - let e = this; - this.listNodeDataSource.expandAndCollapseNode(_.call(e, l)) - } - if (this.listNodeDataSource.getExpandAndCollapseInfo(a) == I.Collapse) { - let e = this; - let t = _.call(e, a); - this.listNodeDataSource.ListNode[t].getIsHighLight() && this.listNodeDataSource.expandAndCollapseNode(t) - } - this.listNodeDataSource.setLastDelayHighLightId(); - if (l != a) { - this.listNodeDataSource.alterDragNode(n, a, s, h, l, d); - this.listNodeDataSource.hideLastLine() - } else { - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.setLastPassId(l); - this.listNodeDataSource.hideLastLine() - } - let g = _.call(this, this.listNodeDataSource.getLastDelayHighLightId()); - this.listNodeDataSource.setLastDelayHighLightIndex(g); - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.initialParameterAboutDelayHighLightAndExpandIndex(); - this.listNodeDataSource.setIsDrag(!1); - let c = _.call(this, l); - this.listNodeDataSource.setClickIndex(c); - this.listNodeDataSource.handleEvent(r.DRAG, c); - this.listNodeDataSource.setIsInnerDrag(!1); - this.listNodeDataSource.notifyDataReload() - })); - t || List.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - { - const e = e => { - const i = e; - { - const e = void 0 !== globalThis.__lazyForEachItemGenFunction && !0; - const a = (t, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(t); - ListItem.create(g, e); - ListItem.width("100%"); - ListItem.height(i.getListItemHeight()); - ListItem.padding({ left: this.itemPadding.left, right: this.itemPadding.right }); - ListItem.align(Alignment.Start); - ListItem.onDragStart(((e, t) => { - if (this.listNodeDataSource.getIsDrag() || this.listNodeDataSource.getIsInnerDrag() || this.isMultiPress) { - console.error("drag error, a item has been dragged"); - return - } - this.dropSelectedIndex = JSON.parse(t).selectedIndex; - let o = JSON.parse(t).selectedIndex; - let s = this.listNodeDataSource.getData(o); - let a = i.getNodeCurrentNodeId(); - if (o >= this.listNodeDataSource.totalCount() || null == o) { - console.error("drag error, currentNodeIndex is not found in onDragStart"); - return - } - this.listNodeDataSource.setIsInnerDrag(!0); - this.listNodeDataSource.setIsDrag(!0); - this.listNodeDataSource.setCurrentNodeInfo(s); - this.listNodeDataSource.setDraggingCurrentNodeId(s.getNodeCurrentNodeId()); - this.listNodeDataSource.setDraggingParentNodeId(s.getNodeParentNodeId()); - this.listNodeDataSource.setListItemOpacity(.4); - this.listNodeDataSource.notifyDataChange(o); - if (a == s.getNodeCurrentNodeId()) return { builder: () => { - this.draggingPopup.call(this, s) - } }; - console.error("drag is too fast,it attribute a fault to OH"); - this.listNodeDataSource.setIsDrag(!1) - })); - o || ListItem.pop(); - ViewStackProcessor.StopGetAccessRecording() - }; - const d = () => { - this.observeComponentCreation(a); - this.observeComponentCreation(((e, a) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeIsShow() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.focusable(!0); - Column.onMouse((e => { - let t = this; - let o = _.call(t, i.getNodeCurrentNodeId()); - if (e.button == MouseButton.Right) { - t.listNodeDataSource.handleEvent(r.MOUSE_BUTTON_RIGHT, _.call(t, i.getNodeCurrentNodeId())); - this.listTreeViewMenu = i.getMenu(); - t.listNodeDataSource.setClickIndex(o); - t.listNodeDataSource.setPopUpInfo(l.HINTS, h.NONE,!1, o); - clearTimeout(i.getNodeItem().mainTitleNode.popUpTimeout) - } - e.stopPropagation() - })); - Column.padding({ top: this.itemPadding.top, bottom: this.itemPadding.bottom }); - Column.bindPopup(i.getPopUpInfo().popUpIsShow, { - builder: { builder: () => { - this.popupForShowTitle.call(this, i.getPopUpInfo().popUpText, i.getPopUpInfo() - .popUpColor, i.getPopUpInfo().popUpTextColor) - } }, - placement: Placement.BottomLeft, - placementOnTop: !1, - popupColor: i.getPopUpInfo().popUpColor, - autoCancel: !0, - enableArrow: i.getPopUpInfo().popUpEnableArrow - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.height(this.listNodeDataSource.getFlagLine().flagLineHeight); - Divider.color(this.listNodeDataSource.getFlagLine().flagLineColor); - Divider.visibility(this.listNodeDataSource.getVisibility(i)); - Divider.lineCap(LineCapStyle.Round); - Divider.margin({ left: i.getFlagLineLeftMargin() }); - Divider.markAnchor({ - x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yTopOffset - }); - t || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create({}); - Row.opacity(this.listNodeDataSource.getListItemOpacity(i)); - Row.markAnchor({ - x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yBasePlateOffset - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create({}); - Row.width("100%"); - Row.onTouch((e => { - let t = this; - let o = _.call(t, i.getNodeCurrentNodeId()); - let a = i.getNodeCurrentNodeId(); - t.listNodeDataSource.setClickIndex(o); - if (e.type === TouchType.Down) { - this.touchDownCount++; - this.isMultiPress = this.touchDownCount > this.MAX_TOUCH_DOWN_COUNT; - this.listNodeDataSource.getIsTouchDown() || t.listNodeDataSource.handleEvent(r.TOUCH_DOWN, o) - } - if (e.type === TouchType.Up) { - this.touchDownCount--; - this.touchDownCount < this.MAX_TOUCH_DOWN_COUNT && (this.isMultiPress = !1); - let e = { currentNodeId: a }; - this.appEventBus.emit(s.NODE_CLICK, [e]); - t.listNodeDataSource.handleEvent(r.TOUCH_UP, o) - } - })); - Row.onHover((e => { - let t = this; - let o = _.call(t, i.getNodeCurrentNodeId()); - e ? t.listNodeDataSource.handleEvent(r.HOVER, o) : t.listNodeDataSource.getIsTouchDown() || t.listNodeDataSource.handleEvent(r.HOVER_OVER, o) - })); - Gesture.create(GesturePriority.Low); - TapGesture.create({ count: 2 }); - TapGesture.onAction((e => { - this.listNodeDataSource.expandAndCollapseNode(_.call(this, i.getNodeCurrentNodeId())) - })); - TapGesture.pop(); - Gesture.pop(); - Row.height(i.getNodeHeight()); - Row.padding({ left: i.getNodeLeftPadding() }); - Row.backgroundColor(i.getNodeItem().mainTitleNode && i.getNodeItem() - .inputText && i.getIsShowInputText() ? i.getNodeItem().inputText.editColor : i.getNodeColor()); - Row.border({ - width: i.getNodeBorder().borderWidth, - color: i.getNodeBorder().borderColor, - radius: i.getNodeBorder().borderRadius - }); - Row.bindContextMenu({ builder: this.builder.bind(this) }, ResponseType.RightClick); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().imageNode ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(t); - Row.margin({ right: i.getNodeItem().imageNode.itemRightMargin }); - Row.height(i.getNodeItem().imageNode.itemHeight); - Row.width(i.getNodeItem().imageNode.itemWidth); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(i.getNodeItem().imageNode.source); - Image.objectFit(ImageFit.Contain); - Image.height(i.getNodeItem().imageNode.itemHeight); - Image.width(i.getNodeItem().imageNode.itemWidth); - Image.opacity(i.getIsSelected() || i.getIsHighLight() ? i.getNodeItem() - .imageNode - .noOpacity : i.getNodeItem() - .imageNode - .opacity); - Image.focusable(null == i.getNodeItem().mainTitleNode); - Image.onFocus((() => { - this.listNodeDataSource.handleEvent(r.FOCUS, _.call(this, i.getNodeCurrentNodeId())) - })); - Image.onBlur((() => { - this.listNodeDataSource.handleEvent(r.BLUR, _.call(this, i.getNodeCurrentNodeId())) - })); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.layoutWeight(1); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().mainTitleNode && i.getIsShowTitle() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(i.getNodeItem().mainTitleNode.title); - Text.maxLines(1); - Text.fontSize(i.getNodeItem().mainTitleNode.size); - Text.fontColor(i.getNodeItem().mainTitleNode.color); - Text.margin({ right: i.getNodeItem().mainTitleNode.itemRightMargin }); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.fontWeight(i.getNodeItem().mainTitleNode.weight); - Text.focusable(!0); - Text.onFocus((() => { - this.listNodeDataSource.handleEvent(r.FOCUS, _.call(this, i.getNodeCurrentNodeId())) - })); - Text.onBlur((() => { - this.listNodeDataSource.handleEvent(r.BLUR, _.call(this, i.getNodeCurrentNodeId())) - })); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().mainTitleNode && i.getNodeItem() - .inputText && i.getIsShowInputText() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(i.getNodeItem().inputText.backgroundColor); - Row.borderRadius(i.getNodeItem().inputText.borderRadius); - Row.margin({ right: i.getNodeItem().inputText.itemRightMargin }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - TextInput.create({ text: i.getNodeItem().mainTitleNode.title }); - TextInput.height(i.getNodeItem().inputText.itemHeight); - TextInput.fontSize(i.getNodeItem().inputText.size); - TextInput.fontColor(i.getNodeItem().inputText.color); - TextInput.borderRadius(i.getNodeItem().inputText.borderRadius); - TextInput.backgroundColor(i.getNodeItem().inputText.backgroundColor); - TextInput.enterKeyType(EnterKeyType.Done); - TextInput.padding({ - left: this.textInputPadding.left, - right: this.textInputPadding.right, - top: this.textInputPadding.top, - bottom: this.textInputPadding.bottom - }); - TextInput.onChange((e => { - let t = this; - var o = _.call(t, i.getNodeCurrentNodeId()); - let s = ""; - let a = !1; - let d = !1; - if (t.checkInvalidPattern(e)) { - for (let o = 0;o < e.length; o++) t.checkInvalidPattern(e[o]) || (s += e[o]); - a = !0; - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.INVALID_ERROR,!0, o) - } else { - s = e; - a = !1; - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.INVALID_ERROR,!1, o) - } - if (t.checkIsAllCN(s) && s.length > this.MAX_CN_LENGTH || !t.checkIsAllCN(s) && s.length > this.MAX_EN_LENGTH) { - s = t.checkIsAllCN(s) ? s.substr(0, this.MAX_CN_LENGTH) : s.substr(0, this.MAX_EN_LENGTH); - d = !0; - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.LENGTH_ERROR,!0, o) - } else d = !1; - if (!d && !a) { - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.LENGTH_ERROR,!1, o); - t.listNodeDataSource.setMainTitleNameOnEdit(o, s) - } - })); - TextInput.onSubmit((e => { - let t = this; - var o = _.call(t, i.getNodeCurrentNodeId()); - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.NONE,!1, o); - t.listNodeDataSource.setItemVisibilityOnEdit(o, n.COMMIT_NODE) - })); - t || TextInput.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Blank.create(); - t || Blank.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Blank.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.listNodeDataSource.hasSubtitle(i.getCurrentNodeId()) ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ - left: this.listNodeDataSource.getSubTitlePara().margin.left, - right: i.getNodeItem().imageCollapse ? 0 : this.listNodeDataSource.getSubTitlePara() - .margin - .right - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.listNodeDataSource.getSubtitle(i.getCurrentNodeId())); - Text.fontSize(this.listNodeDataSource.getSubTitlePara().fontSize); - Text.fontColor(this.listNodeDataSource.getSubTitleFontColor(i.getIsHighLight() || i.getIsModify())); - Text.fontWeight(this.listNodeDataSource.getSubTitlePara().fontWeight); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, s) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().imageCollapse ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(t); - Row.height(i.getNodeItem().imageCollapse.itemHeight); - Row.width(i.getNodeItem().imageCollapse.itemWidth); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, s) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(i.getNodeItem().imageCollapse.collapseSource); - Image.fillColor(i.getNodeItem().imageCollapse.isCollapse ? t : o); - Image.align(Alignment.End); - Image.objectFit(ImageFit.Contain); - Image.height(i.getNodeItem().imageCollapse.itemHeight); - Image.width(i.getNodeItem().imageCollapse.itemWidth); - Image.opacity(i.getIsHighLight() ? i.getNodeItem().imageCollapse.noOpacity : i.getNodeItem() - .imageCollapse - .opacity); - Image.onTouch((e => { - if (e.type === TouchType.Down) { - let e = this; - e.listNodeDataSource.expandAndCollapseNode(_.call(e, i.getNodeCurrentNodeId())); - this.listNodeDataSource.setCurrentFocusNodeId(i.getCurrentNodeId()) - } - e.stopPropagation() - })); - s || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })) : If.branchId(1); - s || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Row.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getCanShowBottomFlagLine() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.listNodeDataSource.getPassIndex() != this.listNodeDataSource.totalCount() - 1 || i.getIsHighLight() ? If.branchId(1) : this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.height(this.listNodeDataSource.getFlagLine().flagLineHeight); - Divider.color(this.listNodeDataSource.getFlagLine().flagLineColor); - Divider.visibility(Visibility.Visible); - Divider.lineCap(LineCapStyle.Round); - Divider.margin({ left: i.getFlagLineLeftMargin() }); - Divider.markAnchor({ - x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yBottomOffset - }); - t || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Column.pop() - })) : If.branchId(1); - a || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - ListItem.pop() - }; - const g = (e, d) => { - a(e, d); - this.updateFuncByElmtId.set(e, a); - this.observeComponentCreation(((e, a) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeIsShow() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Column.create(); - Column.focusable(!0); - Column.onMouse((e => { - let t = this; - let o = _.call(t, i.getNodeCurrentNodeId()); - if (e.button == MouseButton.Right) { - t.listNodeDataSource.handleEvent(r.MOUSE_BUTTON_RIGHT, _.call(t, i.getNodeCurrentNodeId())); - this.listTreeViewMenu = i.getMenu(); - t.listNodeDataSource.setClickIndex(o); - t.listNodeDataSource.setPopUpInfo(l.HINTS, h.NONE,!1, o); - clearTimeout(i.getNodeItem().mainTitleNode.popUpTimeout) - } - e.stopPropagation() - })); - Column.padding({ top: this.itemPadding.top, bottom: this.itemPadding.bottom }); - Column.bindPopup(i.getPopUpInfo().popUpIsShow, { - builder: { builder: () => { - this.popupForShowTitle.call(this, i.getPopUpInfo().popUpText, i.getPopUpInfo() - .popUpColor, i.getPopUpInfo().popUpTextColor) - } }, - placement: Placement.BottomLeft, - placementOnTop: !1, - popupColor: i.getPopUpInfo().popUpColor, - autoCancel: !0, - enableArrow: i.getPopUpInfo().popUpEnableArrow - }); - t || Column.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.height(this.listNodeDataSource.getFlagLine().flagLineHeight); - Divider.color(this.listNodeDataSource.getFlagLine().flagLineColor); - Divider.visibility(this.listNodeDataSource.getVisibility(i)); - Divider.lineCap(LineCapStyle.Round); - Divider.margin({ left: i.getFlagLineLeftMargin() }); - Divider.markAnchor({ - x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yTopOffset - }); - t || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create({}); - Row.opacity(this.listNodeDataSource.getListItemOpacity(i)); - Row.markAnchor({ - x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yBasePlateOffset - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create({}); - Row.width("100%"); - Row.onTouch((e => { - let t = this; - let o = _.call(t, i.getNodeCurrentNodeId()); - let a = i.getNodeCurrentNodeId(); - t.listNodeDataSource.setClickIndex(o); - if (e.type === TouchType.Down) { - this.touchDownCount++; - this.isMultiPress = this.touchDownCount > this.MAX_TOUCH_DOWN_COUNT; - this.listNodeDataSource.getIsTouchDown() || t.listNodeDataSource.handleEvent(r.TOUCH_DOWN, o) - } - if (e.type === TouchType.Up) { - this.touchDownCount--; - this.touchDownCount < this.MAX_TOUCH_DOWN_COUNT && (this.isMultiPress = !1); - let e = { currentNodeId: a }; - this.appEventBus.emit(s.NODE_CLICK, [e]); - t.listNodeDataSource.handleEvent(r.TOUCH_UP, o) - } - })); - Row.onHover((e => { - let t = this; - let o = _.call(t, i.getNodeCurrentNodeId()); - e ? t.listNodeDataSource.handleEvent(r.HOVER, o) : t.listNodeDataSource.getIsTouchDown() || t.listNodeDataSource.handleEvent(r.HOVER_OVER, o) - })); - Gesture.create(GesturePriority.Low); - TapGesture.create({ count: 2 }); - TapGesture.onAction((e => { - this.listNodeDataSource.expandAndCollapseNode(_.call(this, i.getNodeCurrentNodeId())) - })); - TapGesture.pop(); - Gesture.pop(); - Row.height(i.getNodeHeight()); - Row.padding({ left: i.getNodeLeftPadding() }); - Row.backgroundColor(i.getNodeItem().mainTitleNode && i.getNodeItem() - .inputText && i.getIsShowInputText() ? i.getNodeItem().inputText.editColor : i.getNodeColor()); - Row.border({ - width: i.getNodeBorder().borderWidth, - color: i.getNodeBorder().borderColor, - radius: i.getNodeBorder().borderRadius - }); - Row.bindContextMenu({ builder: this.builder.bind(this) }, ResponseType.RightClick); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().imageNode ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(t); - Row.margin({ right: i.getNodeItem().imageNode.itemRightMargin }); - Row.height(i.getNodeItem().imageNode.itemHeight); - Row.width(i.getNodeItem().imageNode.itemWidth); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(i.getNodeItem().imageNode.source); - Image.objectFit(ImageFit.Contain); - Image.height(i.getNodeItem().imageNode.itemHeight); - Image.width(i.getNodeItem().imageNode.itemWidth); - Image.opacity(i.getIsSelected() || i.getIsHighLight() ? i.getNodeItem() - .imageNode - .noOpacity : i.getNodeItem() - .imageNode - .opacity); - Image.focusable(null == i.getNodeItem().mainTitleNode); - Image.onFocus((() => { - this.listNodeDataSource.handleEvent(r.FOCUS, _.call(this, i.getNodeCurrentNodeId())) - })); - Image.onBlur((() => { - this.listNodeDataSource.handleEvent(r.BLUR, _.call(this, i.getNodeCurrentNodeId())) - })); - t || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })) : If.branchId(1); - o || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.layoutWeight(1); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().mainTitleNode && i.getIsShowTitle() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(i.getNodeItem().mainTitleNode.title); - Text.maxLines(1); - Text.fontSize(i.getNodeItem().mainTitleNode.size); - Text.fontColor(i.getNodeItem().mainTitleNode.color); - Text.margin({ right: i.getNodeItem().mainTitleNode.itemRightMargin }); - Text.textOverflow({ overflow: TextOverflow.Ellipsis }); - Text.fontWeight(i.getNodeItem().mainTitleNode.weight); - Text.focusable(!0); - Text.onFocus((() => { - this.listNodeDataSource.handleEvent(r.FOCUS, _.call(this, i.getNodeCurrentNodeId())) - })); - Text.onBlur((() => { - this.listNodeDataSource.handleEvent(r.BLUR, _.call(this, i.getNodeCurrentNodeId())) - })); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().mainTitleNode && i.getNodeItem() - .inputText && i.getIsShowInputText() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(i.getNodeItem().inputText.backgroundColor); - Row.borderRadius(i.getNodeItem().inputText.borderRadius); - Row.margin({ right: i.getNodeItem().inputText.itemRightMargin }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - TextInput.create({ text: i.getNodeItem().mainTitleNode.title }); - TextInput.height(i.getNodeItem().inputText.itemHeight); - TextInput.fontSize(i.getNodeItem().inputText.size); - TextInput.fontColor(i.getNodeItem().inputText.color); - TextInput.borderRadius(i.getNodeItem().inputText.borderRadius); - TextInput.backgroundColor(i.getNodeItem().inputText.backgroundColor); - TextInput.enterKeyType(EnterKeyType.Done); - TextInput.padding({ - left: this.textInputPadding.left, - right: this.textInputPadding.right, - top: this.textInputPadding.top, - bottom: this.textInputPadding.bottom - }); - TextInput.onChange((e => { - let t = this; - var o = _.call(t, i.getNodeCurrentNodeId()); - let s = ""; - let a = !1; - let d = !1; - if (t.checkInvalidPattern(e)) { - for (let o = 0;o < e.length; o++) t.checkInvalidPattern(e[o]) || (s += e[o]); - a = !0; - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.INVALID_ERROR,!0, o) - } else { - s = e; - a = !1; - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.INVALID_ERROR,!1, o) - } - if (t.checkIsAllCN(s) && s.length > this.MAX_CN_LENGTH || !t.checkIsAllCN(s) && s.length > this.MAX_EN_LENGTH) { - s = t.checkIsAllCN(s) ? s.substr(0, this.MAX_CN_LENGTH) : s.substr(0, this.MAX_EN_LENGTH); - d = !0; - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.LENGTH_ERROR,!0, o) - } else d = !1; - if (!d && !a) { - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.LENGTH_ERROR,!1, o); - t.listNodeDataSource.setMainTitleNameOnEdit(o, s) - } - })); - TextInput.onSubmit((e => { - let t = this; - var o = _.call(t, i.getNodeCurrentNodeId()); - t.listNodeDataSource.setPopUpInfo(l.WARNINGS, h.NONE,!1, o); - t.listNodeDataSource.setItemVisibilityOnEdit(o, n.COMMIT_NODE) - })); - t || TextInput.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Blank.create(); - t || Blank.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Blank.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.listNodeDataSource.hasSubtitle(i.getCurrentNodeId()) ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.margin({ - left: this.listNodeDataSource.getSubTitlePara().margin.left, - right: i.getNodeItem().imageCollapse ? 0 : this.listNodeDataSource.getSubTitlePara() - .margin - .right - }); - t || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Text.create(this.listNodeDataSource.getSubtitle(i.getCurrentNodeId())); - Text.fontSize(this.listNodeDataSource.getSubTitlePara().fontSize); - Text.fontColor(this.listNodeDataSource.getSubTitleFontColor(i.getIsHighLight() || i.getIsModify())); - Text.fontWeight(this.listNodeDataSource.getSubTitlePara().fontWeight); - t || Text.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Text.pop(); - Row.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - this.observeComponentCreation(((e, s) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getNodeItem().imageCollapse ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, o) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Row.create(); - Row.backgroundColor(t); - Row.height(i.getNodeItem().imageCollapse.itemHeight); - Row.width(i.getNodeItem().imageCollapse.itemWidth); - o || Row.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - this.observeComponentCreation(((e, s) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Image.create(i.getNodeItem().imageCollapse.collapseSource); - Image.fillColor(i.getNodeItem().imageCollapse.isCollapse ? t : o); - Image.align(Alignment.End); - Image.objectFit(ImageFit.Contain); - Image.height(i.getNodeItem().imageCollapse.itemHeight); - Image.width(i.getNodeItem().imageCollapse.itemWidth); - Image.opacity(i.getIsHighLight() ? i.getNodeItem().imageCollapse.noOpacity : i.getNodeItem() - .imageCollapse - .opacity); - Image.onTouch((e => { - if (e.type === TouchType.Down) { - let e = this; - e.listNodeDataSource.expandAndCollapseNode(_.call(e, i.getNodeCurrentNodeId())); - this.listNodeDataSource.setCurrentFocusNodeId(i.getCurrentNodeId()) - } - e.stopPropagation() - })); - s || Image.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - Row.pop() - })) : If.branchId(1); - s || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Row.pop(); - Row.pop(); - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - i.getCanShowBottomFlagLine() ? this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - If.create(); - this.listNodeDataSource.getPassIndex() != this.listNodeDataSource.totalCount() - 1 || i.getIsHighLight() ? If.branchId(1) : this.ifElseBranchUpdateFunction(0, (() => { - this.observeComponentCreation(((e, t) => { - ViewStackProcessor.StartGetAccessRecordingFor(e); - Divider.create(); - Divider.height(this.listNodeDataSource.getFlagLine().flagLineHeight); - Divider.color(this.listNodeDataSource.getFlagLine().flagLineColor); - Divider.visibility(Visibility.Visible); - Divider.lineCap(LineCapStyle.Round); - Divider.margin({ left: i.getFlagLineLeftMargin() }); - Divider.markAnchor({ - x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yBottomOffset - }); - t || Divider.pop(); - ViewStackProcessor.StopGetAccessRecording() - })) - })); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop() - })) : If.branchId(1); - t || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - Column.pop() - })) : If.branchId(1); - a || If.pop(); - ViewStackProcessor.StopGetAccessRecording() - })); - If.pop(); - ListItem.pop() - }; - e ? (() => { - this.observeComponentCreation(a); - ListItem.pop() - })() : d() - } - }; - const i = e => JSON.stringify(e); - LazyForEach.create("1", this, this.listNodeDataSource, e, i); - LazyForEach.pop() - } - List.pop() - } - - rerender() { - this.updateDirtyElements() - } - } - - __decorate([], T.prototype, "popupForShowTitle", null); - __decorate([], T.prototype, "builder", null); - __decorate([], T.prototype, "draggingPopup", null); - e.TreeView = T; - e.TreeController = class { - constructor() { - this.ROOT_NODE_ID = -1; - this.nodeIdList = []; - this.listNodeUtils = new C; - this.listNodeDataSource = new D - } - - getListNodeDataSource() { - return this.listNodeDataSource - } - - getClickNodeChildrenInfo() { - let e = this.listNodeDataSource.getClickNodeId(); - return this.listNodeUtils.getClickNodeChildrenInfo(e) - } - - getChildrenId() { - let e = this.listNodeDataSource.getClickNodeId(); - return this.listNodeUtils.getClickChildId(e) - } - - removeNode() { - let e = this.listNodeDataSource.getClickNodeId(); - let t = this.listNodeUtils.findParentNodeId(e); - let o = this.listNodeUtils.removeNode(e, t, this.listNodeUtils.traverseNodeBF); - this.listNodeDataSource.refreshData(this.listNodeUtils, n.REMOVE_NODE, t, o); - this.nodeIdList.splice(this.nodeIdList.indexOf(e), 1) - } - - modifyNode() { - let e = this.listNodeDataSource.getClickNodeId(); - this.listNodeDataSource.setItemVisibilityOnEdit(e, n.MODIFY_NODE) - } - - add() { - let e = this.listNodeDataSource.getClickNodeId(); - if (e == this.listNodeDataSource.ROOT_NODE_ID || !this.listNodeDataSource.getIsFolder(e)) return; - let t = { - isFolder: !0, - icon: null, - selectedIcon: null, - editIcon: null, - menu: null, - secondaryTitle: "" - }; - t = this.listNodeUtils.getNewNodeInfo(e); - this.nodeIdList.push(this.nodeIdList[this.nodeIdList.length-1] + 1); - let o = this.nodeIdList[this.nodeIdList.length-1]; - this.listNodeUtils.addNewNodeId = o; - this.listNodeUtils.addNode(e, o, { - isFolder: t.isFolder, - icon: t.icon, - selectedIcon: t.selectedIcon, - editIcon: t.editIcon, - primaryTitle: "新建文件夹", - menu: t.menu, - secondaryTitle: t.secondaryTitle - }); - this.listNodeDataSource.refreshData(this.listNodeUtils, n.ADD_NODE, e, [o]) - } - - addNodeParam(e) { - if (null != e.primaryTitle && !this.listNodeUtils.checkMainTitleIsValid(e.primaryTitle)) throw new Error('ListTreeNode[addNode]: The directory name cannot contain the following characters /: *? "< > | or exceeds the maximum length.'); - if (null == e.primaryTitle && null == e.icon) throw new Error("ListTreeNode[addNode]: The icon and directory name cannot be empty at the same time."); - if (e.currentNodeId === this.ROOT_NODE_ID || null === e.currentNodeId) throw new Error("ListTreeNode[addNode]: currentNodeId can not be -1 or null."); - this.nodeIdList.push(e.currentNodeId); - this.listNodeUtils.addNode(e.parentNodeId, e.currentNodeId, e); - return this - } - - addNode(e) { - if (null != e) { - if (null != e.primaryTitle && !this.listNodeUtils.checkMainTitleIsValid(e.primaryTitle)) throw new Error('ListTreeNode[addNode]: The directory name cannot contain the following characters /: *? "< > | or exceeds the maximum length.'); - if (null == e.primaryTitle && null == e.icon) throw new Error("ListTreeNode[addNode]: The icon and directory name cannot be empty at the same time."); - if (e.currentNodeId === this.ROOT_NODE_ID || null === e.currentNodeId) throw new Error("ListTreeNode[addNode]: currentNodeId can not be -1 or null."); - this.nodeIdList.push(e.currentNodeId); - this.listNodeUtils.addNode(e.parentNodeId, e.currentNodeId, e); - return this - } - this.add() - } - - buildDone() { - this.listNodeDataSource.init(this.listNodeUtils); - this.nodeIdList.sort(((e, t) => e - t)) - } - - refreshNode(e, t = "", o = "") { - this.listNodeDataSource.setNodeSubtitlePara(e, t, o) - } - } -}(TreeView || (TreeView = {})); - -export default TreeView \ No newline at end of file diff --git a/source/ArkDialog/ArkDialog.ets b/source/ArkDialog/ArkDialog.ets deleted file mode 100644 index 37c4f0b..0000000 --- a/source/ArkDialog/ArkDialog.ets +++ /dev/null @@ -1,417 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const CHECKBOX_CONTAINER_HEIGHT: number = 48 -const CONTENT_MAX_LINES: number = 2 -const DIVIDER_CONTAINER_WIDTH: number = 16 -const DIVIDER_HEIGHT: number = 24 -const DIVIDER_WIDTH: number = 2 -const LOADING_PROGRESS_WIDTH: number = 40 -const LOADING_PROGRESS_HEIGHT: number = 48 -const ITEM_TEXT_SIZE: number = 14 -export declare type ButtonOptions = { - value: ResourceStr; - action?: () => void; - background?: ResourceColor; - fontColor?: ResourceColor; -} - -@CustomDialog -export struct TipsDialog{ - controller: CustomDialogController - imageRes: Resource - imageSize: SizeOptions = {width: '100%', height: 180} - title: ResourceStr = '' - content?: ResourceStr = '' - checkTips?: ResourceStr = '' - @State isChecked?: boolean = false - primaryButton?: ButtonOptions = {value: ""} - secondaryButton?: ButtonOptions = {value: ""} - - build() { - Column() { - Row() { - Column() { - Image(this.imageRes) - .size(this.imageSize) - .objectFit(ImageFit.Fill) - }.layoutWeight(1) - .clip(true) - }.width('100%') - .padding({ left: 24, right: 24}) - .margin({top: 24}) - Row() { - Text(this.title) - .fontSize($r('sys.float.ohos_id_text_size_headline8')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .textAlign(TextAlign.Center) - }.padding({ left: 24, right: 24 }) - .margin({top: 16}) - if (this.content) { - Row() { - Text(this.content) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .textAlign(TextAlign.Center) - .minFontSize($r('sys.float.ohos_id_text_size_body3')) - }.padding({ left: 24, right: 24, top: 8, bottom: 8 }) - .width('100%') - } - Row() { - Checkbox({ name: 'checkbox', group: 'checkboxGroup' }).select(this.isChecked) - .onChange((checked: boolean) => { - this.isChecked = checked - }) - .margin({ left: 0, right: 8}) - Text(this.checkTips).fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .maxLines(CONTENT_MAX_LINES) - .layoutWeight(1) - .focusOnTouch(true) - .onClick(() => { - this.isChecked = !this.isChecked - }) - }.height(CHECKBOX_CONTAINER_HEIGHT).width('100%').padding({ left: 24, right: 24 , top: 8, bottom: 8 }) - - Row() { - if (this.primaryButton.value) { - Button(this.primaryButton.value) - .fontSize($r('sys.float.ohos_id_text_size_button1')) - .fontWeight(FontWeight.Medium) - .layoutWeight(1) - .backgroundColor(this.primaryButton.background? this.primaryButton.background: $r('sys.color.ohos_id_color_background_transparent')) - .fontColor(this.primaryButton.fontColor ? this.primaryButton.fontColor: $r('sys.color.ohos_id_color_text_primary_activated')) - .onClick(() => { - if (this.primaryButton.action) this.primaryButton.action() - this.controller.close() - }) - } - if (this.secondaryButton.value && this.primaryButton.value) { - Column() { - if (!this.secondaryButton.background) { - Divider().width(DIVIDER_WIDTH).height(DIVIDER_HEIGHT).color($r('sys.color.ohos_id_color_list_separator')).vertical(true) - } - }.width(DIVIDER_CONTAINER_WIDTH).alignItems(HorizontalAlign.Center) - } - if (this.secondaryButton.value) { - Button(this.secondaryButton.value) - .fontSize($r('sys.float.ohos_id_text_size_button1')) - .fontWeight(FontWeight.Medium) - .layoutWeight(1) - .backgroundColor(this.secondaryButton.background? this.secondaryButton.background: $r('sys.color.ohos_id_color_background_transparent')) - .fontColor(this.secondaryButton.fontColor ? this.secondaryButton.fontColor: $r('sys.color.ohos_id_color_text_primary_activated')) - .onClick(() => { - if (this.secondaryButton.action) this.secondaryButton.action() - this.controller.close() - }) - } - }.width('100%').padding({ left: 16, right: 16, top: 16, bottom: 16 }) - } - .backgroundBlurStyle(BlurStyle.Thick) - .borderRadius($r('sys.float.ohos_id_corner_radius_dialog')) - .margin({ - left: $r('sys.float.ohos_id_dialog_margin_start'), - right: $r('sys.float.ohos_id_dialog_margin_end'), - bottom: $r('sys.float.ohos_id_dialog_margin_bottom') - }) - // 1.backgroundcolor use in blur enable mod mast set this color: colorDialogBgBlur. but now it is not found - .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) - } -} - -@CustomDialog -export struct SelectDialog{ - controller: CustomDialogController - title: ResourceStr = '' - content?: ResourceStr = '' - selectedIndex?: number = -1 - confirm?: ButtonOptions = {value: ""} - radioContent: Array = [] - - build() { - Column() { - Row() { - Text(this.title) - .fontSize($r('sys.float.ohos_id_text_size_dialog_tittle')) - .fontWeight(FontWeight.Medium) - .maxLines(CONTENT_MAX_LINES) - .minFontSize($r('sys.float.ohos_id_text_size_sub_title1')) - .textOverflow({ overflow: TextOverflow.Ellipsis}) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .textAlign(TextAlign.Start) - .width('100%') - }.padding({ left: 24, right: 24, top: 24 }) - .constraintSize({minHeight: 56}) - if (this.content) { - Row() { - Text(this.content) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .maxLines(CONTENT_MAX_LINES) - .textOverflow({ overflow: TextOverflow.Ellipsis}) - .minFontSize($r('sys.float.ohos_id_text_size_body3')) - }.padding({ left: 24, right: 24, top: 8, bottom: 8 }) - .width('100%') - } - List({space: 1}) { - ForEach(this.radioContent, (item: SheetInfo, index?: number) => { - ListItem() { - Column() { - Row() { - Text(item.title) - .fontSize(ITEM_TEXT_SIZE) - .fontWeight(FontWeight.Regular) - .maxLines(CONTENT_MAX_LINES) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .layoutWeight(1) - Radio({ value: 'item.title', group: 'radioGroup'}).checked(this.selectedIndex == index) - .onChange(() => { - item.action && item.action() - this.controller.close() - }) - .onClick(() => { - item.action && item.action() - this.controller.close() - }) - }.constraintSize({minHeight: 48}).clip(false) - .onClick(() => { - item.action && item.action() - this.controller.close() - }) - if (index < this.radioContent.length - 1) { - Divider().color($r('sys.color.ohos_id_color_list_separator')) - } - } - } - }) - }.width('100%').padding({ left: 24, right: 24, top: 8, bottom: 8 }).clip(false) - Row() { - if (this.confirm.value) { - Button(this.confirm.value) - .fontSize($r('sys.float.ohos_id_text_size_button1')) - .fontWeight(FontWeight.Medium) - .layoutWeight(1) - .backgroundColor(this.confirm.background? this.confirm.background: $r('sys.color.ohos_id_color_background_transparent')) - .fontColor(this.confirm.fontColor ? this.confirm.fontColor: $r('sys.color.ohos_id_color_text_primary_activated')) - .onClick(() => { - this.confirm.action && this.confirm.action() - this.controller.close() - }) - } - }.width('100%').padding({ left: 16, right: 16, top: 16, bottom: 16 }) - } - .backgroundBlurStyle(BlurStyle.Thick) - .borderRadius($r('sys.float.ohos_id_corner_radius_dialog')) - .margin({ - left: $r('sys.float.ohos_id_dialog_margin_start'), - right: $r('sys.float.ohos_id_dialog_margin_end'), - bottom: $r('sys.float.ohos_id_dialog_margin_bottom') - }) - // 1.backgroundcolor use in blur enable mod mast set this color: colorDialogBgBlur. but now it is not found - .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) - } -} - -@CustomDialog -export struct ConfirmDialog{ - controller: CustomDialogController - title: ResourceStr = '' - content?: ResourceStr = '' - checkTips?: ResourceStr = '' - @State isChecked?: boolean = false - primaryButton?: ButtonOptions = {value: ""} - secondaryButton?: ButtonOptions = {value: ""} - - build() { - Column() { - Row() { - Text(this.title) - .fontSize($r('sys.float.ohos_id_text_size_dialog_tittle')) - .fontWeight(FontWeight.Medium) - .maxLines(CONTENT_MAX_LINES) - .minFontSize($r('sys.float.ohos_id_text_size_sub_title1')) - .textOverflow({ overflow: TextOverflow.Ellipsis}) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .textAlign(TextAlign.Start) - .width('100%') - }.padding({ left: 24, right: 24, top: 24 }) - .constraintSize({minHeight: 56}) - if (this.content) { - Row() { - Text(this.content) - .fontSize($r('sys.float.ohos_id_text_size_body1')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .maxLines(CONTENT_MAX_LINES) - .textOverflow({ overflow: TextOverflow.Ellipsis}) - .minFontSize($r('sys.float.ohos_id_text_size_body3')) - }.padding({ left: 24, right: 24, top: 8, bottom: 8 }) - .width('100%') - .constraintSize({minHeight: 36}) - } - Row() { - Checkbox({ name: 'checkbox', group: 'checkboxGroup' }).select(this.isChecked) - .onChange((checked: boolean) => { - this.isChecked = checked - }) - .margin({ left: 0, right: 8}) - Text(this.checkTips).fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .maxLines(CONTENT_MAX_LINES) - .layoutWeight(1) - .focusOnTouch(true) - .onClick(() => { - this.isChecked = !this.isChecked - }) - }.height(CHECKBOX_CONTAINER_HEIGHT).width('100%').padding({ left: 24, right: 24 , top: 8, bottom: 8 }) - - Row() { - if (this.primaryButton.value) { - Button(this.primaryButton.value) - .fontSize($r('sys.float.ohos_id_text_size_button1')) - .fontWeight(FontWeight.Medium) - .layoutWeight(1) - .backgroundColor(this.primaryButton.background? this.primaryButton.background: $r('sys.color.ohos_id_color_background_transparent')) - .fontColor(this.primaryButton.fontColor ? this.primaryButton.fontColor: $r('sys.color.ohos_id_color_text_primary_activated')) - .onClick(() => { - if (this.primaryButton.action) this.primaryButton.action() - this.controller.close() - }) - } - if (this.secondaryButton.value && this.primaryButton.value) { - Column() { - if (!this.secondaryButton.background) { - Divider().width(DIVIDER_WIDTH).height(DIVIDER_HEIGHT).color($r('sys.color.ohos_id_color_list_separator')).vertical(true) - } - }.width(DIVIDER_CONTAINER_WIDTH).alignItems(HorizontalAlign.Center) - } - if (this.secondaryButton.value) { - Button(this.secondaryButton.value) - .fontSize($r('sys.float.ohos_id_text_size_button1')) - .fontWeight(FontWeight.Medium) - .layoutWeight(1) - .backgroundColor(this.secondaryButton.background? this.secondaryButton.background: $r('sys.color.ohos_id_color_background_transparent')) - .fontColor(this.secondaryButton.fontColor ? this.secondaryButton.fontColor: $r('sys.color.ohos_id_color_text_primary_activated')) - .onClick(() => { - if (this.secondaryButton.action) this.secondaryButton.action() - this.controller.close() - }) - } - }.width('100%').padding({ left: 16, right: 16, top: 16, bottom: 16 }) - } - .backgroundBlurStyle(BlurStyle.Thick) - .borderRadius($r('sys.float.ohos_id_corner_radius_dialog')) - .margin({ - left: $r('sys.float.ohos_id_dialog_margin_start'), - right: $r('sys.float.ohos_id_dialog_margin_end'), - bottom: $r('sys.float.ohos_id_dialog_margin_bottom') - }) - // 1.backgroundcolor use in blur enable mod mast set this color: colorDialogBgBlur. but now it is not found - .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) - } -} - -@CustomDialog -export struct AlertDialog{ - controller: CustomDialogController - content: ResourceStr = '' - primaryButton?: ButtonOptions = {value: ""} - secondaryButton?: ButtonOptions = {value: ""} - build() { - Column() { - Row() { - Text(this.content) - .fontSize($r('sys.float.ohos_id_text_size_body1')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - }.padding({ left: 24, right: 24, top: 24 }) - Row() { - if (this.primaryButton.value) { - Button(this.primaryButton.value) - .fontSize($r('sys.float.ohos_id_text_size_button1')) - .fontWeight(FontWeight.Medium) - .layoutWeight(1) - .backgroundColor(this.primaryButton.background? this.primaryButton.background: $r('sys.color.ohos_id_color_background_transparent')) - .fontColor(this.primaryButton.fontColor ? this.primaryButton.fontColor: $r('sys.color.ohos_id_color_text_primary_activated')) - .onClick(() => { - if (this.primaryButton.action) this.primaryButton.action() - this.controller.close() - }) - } - if (this.secondaryButton.value && this.primaryButton.value) { - Column() { - if (!this.secondaryButton.background) { - Divider().width(DIVIDER_WIDTH).height(DIVIDER_HEIGHT).color($r('sys.color.ohos_id_color_list_separator')).vertical(true) - } - }.width(DIVIDER_CONTAINER_WIDTH).alignItems(HorizontalAlign.Center) - } - if (this.secondaryButton.value) { - Button(this.secondaryButton.value) - .fontSize($r('sys.float.ohos_id_text_size_button1')) - .fontWeight(FontWeight.Medium) - .layoutWeight(1) - .backgroundColor(this.secondaryButton.background? this.secondaryButton.background: $r('sys.color.ohos_id_color_background_transparent')) - .fontColor(this.secondaryButton.fontColor ? this.secondaryButton.fontColor: $r('sys.color.ohos_id_color_text_primary_activated')) - .onClick(() => { - if (this.secondaryButton.action) this.secondaryButton.action() - this.controller.close() - }) - } - }.width('100%').padding({ left: 16, right: 16, top: 16, bottom: 16 }) - } - .backgroundBlurStyle(BlurStyle.Thick) - .borderRadius($r('sys.float.ohos_id_corner_radius_dialog')) - .margin({ - left: $r('sys.float.ohos_id_dialog_margin_start'), - right: $r('sys.float.ohos_id_dialog_margin_end'), - bottom: $r('sys.float.ohos_id_dialog_margin_bottom') - }) - // 1.backgroundcolor use in blur enable mod mast set this color: colorDialogBgBlur. but now it is not found - .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) - } -} - -@CustomDialog -export struct LoadingDialog{ - controller: CustomDialogController - content?: ResourceStr = '' - build() { - Column() { - Row() { - Text(this.content) - .fontSize($r('sys.float.ohos_id_text_size_body1')) - .fontWeight(FontWeight.Medium) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .layoutWeight(1) - LoadingProgress().width(LOADING_PROGRESS_WIDTH).height(LOADING_PROGRESS_HEIGHT).margin({ left: 16 }) - }.margin({ left: 24, right: 24, top: 24, bottom: 24 }) - .constraintSize({minHeight: 48}) - } - .backgroundBlurStyle(BlurStyle.Thick) - .borderRadius($r('sys.float.ohos_id_corner_radius_dialog')) - .margin({ - left: $r('sys.float.ohos_id_dialog_margin_start'), - right: $r('sys.float.ohos_id_dialog_margin_end'), - bottom: $r('sys.float.ohos_id_dialog_margin_bottom') - }) - // 1.backgroundcolor use in blur enable mod mast set this color: colorDialogBgBlur. but now it is not found - .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) - } -} \ No newline at end of file diff --git a/source/ComposeListItem/ComposeListItem.ets b/source/ComposeListItem/ComposeListItem.ets deleted file mode 100644 index 0c6bb53..0000000 --- a/source/ComposeListItem/ComposeListItem.ets +++ /dev/null @@ -1,488 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export enum IconType { - BADGE = 1, - NORMAL_ICON, - SYSTEM_ICON, - HEAD_SCULPTURE, - APP_ICON, - PREVIEW, - LONGITUDINAL, - VERTICAL -} - -enum ItemHeight { - FIRST_HEIGHT = 48, - SECOND_HEIGHT = 56, - THIRD_HEIGHT = 64, - FOURTH_HEIGHT = 72, - FIFTH_HEIGHT = 96 -} - -export type OperateItem = { - icon?: OperateIcon, - subIcon ?: OperateIcon, - button?: OperateButton; - switch?: OperateCheck; - checkbox?: OperateCheck; - radio?: OperateCheck; - image?: ResourceStr; - text?: ResourceStr; - arrow?: OperateIcon; -} - -export type ContentItem = { - iconStyle?: IconType; - icon?: ResourceStr; - primaryText?: ResourceStr; - secondaryText?: ResourceStr; - description?: ResourceStr; -} - -const LISTITEMCARD_BORDER_HIDDEN = 0; -const TEXT_MAX_LINE = 1; -const LISTITEMCARD_BORDER_SHOWN = 2; -const TEXT_COLUMN_SPACE = 2; -const TEXT_SAFE_MARGIN = 8; -const BADGE_SIZE = 8; -const SMALL_ICON_SIZE = 16; -const SYSTEM_ICON_SIZE = 24; -const SAFE_LIST_PADDING = 32; -const HEADSCULPTURE_SIZE = 40; -const BUTTON_SIZE = 28; -const APP_ICON_SIZE = 64; -const PREVIEW_SIZE = 96; -const LONGITUDINAL_SIZE = 96; -const VERTICAL_SIZE = 96; -const NORMAL_ITEM_ROW_SPACE = 16; -const SPECIAL_ITEM_ROW_SPACE = 0; -const SPECIAL_ICON_SIZE = 0; -const DEFAULT_ROW_SPACE = 0; -const SPECICAL_ROW_SPACE = 4; -const OPERATEITEM_ICONLIKE_SIZE = 24; -const OPERATEITEM_ARROW_WIDTH = 12 -const OPERATEITEM_ICON_CLICKABLE_SIZE = 48; -const OPERATEITEM_IMAGE_SIZE = 48; -const HOVERING_COLOR = '#0d000000'; -const TOUCH_DOWN_COLOR = '#1a000000'; -const ACTIVED_COLOR = '#1a0a59f7'; - -@Component -struct ContentItemStruct { - iconStyle: IconType = null - icon: Resource = null - title: string = null - subtitle: string = null - description: string = null - private iconSizeMap: Map = new Map([ - [IconType.BADGE, BADGE_SIZE], - [IconType.NORMAL_ICON, SMALL_ICON_SIZE], - [IconType.SYSTEM_ICON, SYSTEM_ICON_SIZE], - [IconType.HEAD_SCULPTURE, HEADSCULPTURE_SIZE], - [IconType.APP_ICON, APP_ICON_SIZE], - [IconType.PREVIEW, PREVIEW_SIZE], - [IconType.LONGITUDINAL, LONGITUDINAL_SIZE], - [IconType.VERTICAL, VERTICAL_SIZE] - ]) - private itemHeight: number = ItemHeight.FIRST_HEIGHT - private itemRowSpace: number = NORMAL_ITEM_ROW_SPACE - - aboutToAppear() { - if (this.subtitle == null && this.description == null) { - if (this.icon == null) { - this.itemHeight = ItemHeight.FIRST_HEIGHT - } - else { - this.itemHeight = this.iconStyle <= IconType.HEAD_SCULPTURE ? ItemHeight.SECOND_HEIGHT : ItemHeight.THIRD_HEIGHT - } - } - else if (this.description == null) { - if (this.icon == null || (this.icon != null && this.iconStyle <= IconType.SYSTEM_ICON)) { - this.itemHeight = ItemHeight.THIRD_HEIGHT - } - else { - this.itemHeight = ItemHeight.FOURTH_HEIGHT - } - } - else { - this.itemHeight = ItemHeight.FIFTH_HEIGHT - } - - if (this.icon == null && this.iconStyle == null) { - this.itemRowSpace = SPECIAL_ITEM_ROW_SPACE - } - - if (this.iconSizeMap.get(this.iconStyle) >= this.itemHeight) { - this.itemHeight = this.iconSizeMap.get(this.iconStyle) + SAFE_LIST_PADDING; - } - } - - @Builder - createIcon() { - if (this.icon != null && this.iconStyle != null) { - if (this.iconStyle <= IconType.PREVIEW) { - Image(this.icon) - .objectFit(ImageFit.Contain) - .width(this.iconSizeMap.get(this.iconStyle)) - .height(this.iconSizeMap.get(this.iconStyle)) - .borderRadius($r('sys.float.ohos_id_corner_radius_default_m')) - .focusable(true) - } - else { - Image(this.icon) - .objectFit(ImageFit.Contain) - .constraintSize({ - minWidth: SPECIAL_ICON_SIZE, - maxWidth: this.iconSizeMap.get(this.iconStyle), - minHeight: SPECIAL_ICON_SIZE, - maxHeight: this.iconSizeMap.get(this.iconStyle) - }) - .borderRadius($r('sys.float.ohos_id_corner_radius_default_m')) - .focusable(true) - } - } - } - - @Builder - createText() { - Column({ space: TEXT_COLUMN_SPACE }) { - Text(this.title) - .fontSize($r('sys.float.ohos_id_text_size_body1')) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .maxLines(TEXT_MAX_LINE) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .focusable(true) - if (this.subtitle != null) { - Text(this.subtitle) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .maxLines(TEXT_MAX_LINE) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .focusable(true) - } - if (this.description != null) { - Text(this.description) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .maxLines(TEXT_MAX_LINE) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .focusable(true) - } - } - .margin({ - top: TEXT_SAFE_MARGIN, - bottom: TEXT_SAFE_MARGIN - }) - .alignItems(HorizontalAlign.Start) - } - - build() { - Row({ space: this.itemRowSpace }) { - this.createIcon() - this.createText() - } - .height(this.itemHeight) - } -} - -@Component -struct OperateItemStruct { - arrow: OperateIcon = null - icon: OperateIcon = null - subIcon: OperateIcon = null - button: OperateButton = null - switch: OperateCheck = null - checkBox: OperateCheck = null - radio: OperateCheck = null - image: Resource = null - text: string = null - @State switchState: boolean = false - @State radioState: boolean = false - @State checkBoxState: boolean = false - private rowSpace: number = DEFAULT_ROW_SPACE - - aboutToAppear() { - if (this.switch != null) { - this.switchState = this.switch.isCheck - } - if (this.radio != null) { - this.radioState = this.radio.isCheck - } - if (this.checkBox != null) { - this.checkBoxState = this.checkBox.isCheck - } - - if ((this.button == null && this.image == null && this.icon != null && this.text != null) || - (this.button == null && this.image == null && this.icon == null && this.arrow != null && this.text != null)) { - this.rowSpace = SPECICAL_ROW_SPACE - } - } - - @Builder - createButton(text: string) { - Button(text) - .fontSize($r('sys.float.ohos_id_text_size_button3')) - .fontColor($r('sys.color.ohos_id_color_text_primary_activated_transparent')) - .height(BUTTON_SIZE) - .backgroundColor($r('sys.color.ohos_id_color_button_normal')) - .labelStyle({ - maxLines: TEXT_MAX_LINE - }) - } - - @Builder - createIcon(icon: OperateIcon) { - Row() { - Image(icon.value) - .height(OPERATEITEM_ICONLIKE_SIZE) - .width(OPERATEITEM_ICONLIKE_SIZE) - .focusable(true) - .fillColor($r('sys.color.ohos_id_color_primary')) - } - .height(OPERATEITEM_ICON_CLICKABLE_SIZE) - .width(OPERATEITEM_ICON_CLICKABLE_SIZE) - .justifyContent(FlexAlign.Center) - .onClick(icon.action) - } - - @Builder - createImage(image: Resource) { - Image(image) - .height(OPERATEITEM_IMAGE_SIZE) - .width(OPERATEITEM_IMAGE_SIZE) - } - - @Builder - createText(text: string) { - Text(text) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .focusable(true) - } - - @Builder - createArrow(icon: OperateIcon) { - Image(icon.value) - .height(OPERATEITEM_ICONLIKE_SIZE) - .width(OPERATEITEM_ARROW_WIDTH) - .focusable(true) - .fillColor($r('sys.color.ohos_id_color_fourth')) - .onClick(icon.action) - } - - @Builder - createRadio(radio: OperateCheck) { - Radio({ value: null, group: null }) - .checked(this.radioState) - .onChange(radio.onChange) - .height(OPERATEITEM_ICONLIKE_SIZE) - .width(OPERATEITEM_ICONLIKE_SIZE) - } - - @Builder - createCheckBox(checkBox: OperateCheck) { - Checkbox() - .select(this.checkBoxState) - .onChange(checkBox.onChange) - .height(OPERATEITEM_ICONLIKE_SIZE) - .height(OPERATEITEM_ICONLIKE_SIZE) - } - - @Builder - createSwitch(toggleParams: OperateCheck) { - Row() { - Toggle({ type: ToggleType.Switch, isOn: this.switchState }) - .onChange(toggleParams.onChange) - .onClick(() => { - this.switchState = !this.switchState - }) - } - .height(OPERATEITEM_ICON_CLICKABLE_SIZE) - .width(OPERATEITEM_ICON_CLICKABLE_SIZE) - .justifyContent(FlexAlign.Center) - } - - build() { - Row({ - space: this.rowSpace - }) { - if (this.button != null) { - this.createButton(this.button.text) - } - - else if (this.image != null) { - this.createImage(this.image) - } - else if (this.icon != null && this.text != null) { - this.createText(this.text) - this.createIcon(this.icon) - } - else if (this.arrow != null && this.text == null) { - this.createArrow(this.arrow) - } - else if (this.arrow != null && this.text != null) { - this.createText(this.text) - this.createArrow(this.arrow) - } - else if (this.text != null) { - this.createText(this.text) - } - else if (this.radio != null) { - this.createRadio(this.radio) - } - else if (this.checkBox != null) { - this.createCheckBox(this.checkBox) - } - else if (this.switch != null) { - this.createSwitch(this.switch) - } - else if (this.icon != null) { - this.createIcon(this.icon) - if (this.subIcon != null) { - this.createIcon(this.subIcon) - } - } - } - } -} - -/** - * Declare type OperateIcon - * @typedef OperationOption - * @syscap SystemCapability.ArkUI.ArkUI.Full - * @since 10 - */ -export declare type OperateIcon = { - /** - * The content of text or the address of icon. - * @type { ResourceStr }. - * @since 10 - */ - value: ResourceStr, - - /** - * Callback function when operate the icon. - * @type { () => void }. - * @since 10 - */ - action?: () => void -} - -export type OperateButton = { - /** - * The text on the button. - * @type { ResourceStr }. - * @since 10 - */ - text?: string -} - -/** - * Declare type OperateCheck - * @typedef OperationOption - * @syscap SystemCapability.ArkUI.ArkUI.Full - * @since 10 - */ -export declare type OperateCheck = { - /** - * Whether is checked on default. - * @type { ResourceStr }. - * @since 10 - */ - isCheck?: boolean, - - /** - * Callback function when operate the checkbox/switch/radio. - * @type { () => void }. - * @since 10 - */ - onChange?: (value: boolean) => void -} - -@Component -export struct ComposeListItem { - @Prop contentItem: ContentItem = null; - @Prop operateItem: OperateItem = null; - @State frontColor: string = Color.Transparent.toString() - @State borderSize: number = 0; - private isActive: boolean = false - - build() { - Column() { - Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { - if (this.contentItem == null) { - ContentItemStruct({ - title: null - }) - } - if (this.contentItem != null) { - ContentItemStruct({ - icon: typeof this.contentItem.icon === 'string' ? null : this.contentItem.icon, - iconStyle: this.contentItem.iconStyle, - title: typeof this.contentItem.primaryText === 'string' ? this.contentItem.primaryText : null, - subtitle: typeof this.contentItem.secondaryText === 'string' ? this.contentItem.secondaryText : null, - description: typeof this.contentItem.description === 'string' ? this.contentItem.description : null - }) - } - if (this.operateItem != null) { - OperateItemStruct({ - icon: this.operateItem.icon, - subIcon: this.operateItem.subIcon, - button: this.operateItem.button, - switch: this.operateItem.switch, - checkBox: this.operateItem.checkbox, - radio: this.operateItem.radio, - image: typeof this.operateItem.image === 'string' ? null : this.operateItem.image, - text: typeof this.operateItem.text === 'string' ? this.operateItem.text : null, - arrow: typeof this.operateItem.arrow === 'string' ? null : this.operateItem.arrow - }) - } - } - .focusable(true) - .border({ - width: this.borderSize, - color: $r('sys.color.ohos_id_color_focused_outline') - }) - .borderRadius($r('sys.float.ohos_id_corner_radius_default_m')) - .backgroundColor(this.frontColor) - .onFocus(() => { - this.borderSize = LISTITEMCARD_BORDER_SHOWN - }) - .onBlur(() => { - this.borderSize = LISTITEMCARD_BORDER_HIDDEN - }) - .onHover((isHover: boolean) => { - this.frontColor = isHover ? HOVERING_COLOR : (this.isActive ? ACTIVED_COLOR : Color.Transparent.toString()) - }) - .onTouch((event: TouchEvent) => { - if (event.type == TouchType.Down) { - this.frontColor = TOUCH_DOWN_COLOR - } - if (event.type == TouchType.Up) { - this.frontColor = this.isActive ? ACTIVED_COLOR : Color.Transparent.toString() - } - }) - .onClick(() => { - this.isActive = !this.isActive - this.frontColor = this.isActive ? ACTIVED_COLOR : Color.Transparent.toString() - }) - } - .padding({ - left: $r('sys.float.ohos_id_default_padding_start'), - right: $r('sys.float.ohos_id_default_padding_end') - }) - } -} \ No newline at end of file diff --git a/source/ComposeTitleBar/ComposeTitleBar.ets b/source/ComposeTitleBar/ComposeTitleBar.ets deleted file mode 100755 index 4e26592..0000000 --- a/source/ComposeTitleBar/ComposeTitleBar.ets +++ /dev/null @@ -1,369 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { KeyCode } from '@ohos.multimodalInput.keyCode' - -export declare type ComposeTitleBarMenuItem = { - value: ResourceStr - isEnabled: boolean - action?: () => void -} - -const PUBLIC_MORE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAY' + - 'AAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAA' + - 'AAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABEZJREFUeNrt3D1rFFEUBuA' + - 'xhmAhFlYpUohYiYWFRcAmKAhWK2pjo1iKf8BCMIKFf8BarCyMhVj4VZhGSKEg2FqJyCKWIhYWnstMINgYsh+cmfs88BI' + - 'Cydxw7jmzu2HvNg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBN+3r6dx+LXIqsRpa7FF8j48hm5Fn3Peo9mAEYRdY' + - 'jJ3f582Vj7nZfUe/eDsCRyMPI2h5/fyNyI/JDT6v3Tvt7sBllE15ETkxwjeORi5G3ke/6W737MgBnI68jh6ZwrcORq5H' + - 'nhkC9+zAA5YXXy8jBKV5zKXIu8jjyS7+rd+YBeNVtyrSVO9PRyBM9r94LSTfjWuTUDK9/eYIXeENUbb0zDsBi5PYc1rm' + - 'j79U74wCszuih+F/ljrSi/+uud8YBGA10rayqrnfGAVgb6FpZVV3vjAOwPNC1sqq63hkHYGWga2VVdb0XKt/8Rf1fd70' + - 'zDsB4jmt5u3Tl9a59AMb6v+56ZxyArYGulVXV9c44ABtzXOup/q+73hkH4N2cHio/Rj7r/7rrnXEAfkfuz2Gddb2v3ln' + - '/DfpgxneLzaY9xE3l9c46AH8iVyI/Z3Dt8nB/Xc+rd5H5QMy3yJemPVs6zY0edc9HUe/0Z4I/dQ/N5Vjd0oTXKp9QcKF' + - 'pD2qj3r0YgO1NeRM507TH6/bifeR85IMeV++d+vTBWOV9JDcjt5rdv6uw3M3uRR7pa/Xu+wBsOxA53bTnTP/3UX1b3fN' + - 'Q1BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqyr6d/97HIpchqZLlL8TUyjmxGnnX' + - 'fo96DGYBRZD1ycpc/XzbmbvcV9e7tAByJPIys7fH3NyI3Ij/0tHrvtL8Hm1E24UXkxATXOB65GHkb+a6/1bsvA3A28jp' + - 'yaArXOhy5GnluCNS7DwNQXni9jByc4jWXIucijyO/9Lt6Zx6AV92mTFu5Mx2NPNHz6r2QdDOuRU7N8PqXJ3iBN0TV1jv' + - 'jACxGbs9hnTv6Xr0zDsDqjB6K/1XuSCv6v+56ZxyA0UDXyqrqemccgLWBrpVV1fXOOADLA10rq6rrnXEAVga6VlZV13u' + - 'h8s1f1P911zvjAIznuJa3S1de79oHYKz/6653xgHYGuhaWVVd74wDsDHHtZ7q/7rrnXEA3s3pofJj5LP+r7veGQfgd+T' + - '+HNZZ1/vqnfXfoA9mfLfYbNpD3FRe76wD8CdyJfJzBtcuD/fX9bx6F5kPxHyLfGnas6XT3OhR93wU9U5/JvhT99BcjtU' + - 'tTXit8gkFF5r2oDbq3YsB2N6UN5EzTXu8bi/eR85HPuhx9d6pTx+MVd5HcjNyq9n9uwrL3exe5JG+Vu++D8C2A5HTTXv' + - 'O9H8f1bfVPQ9FvQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCn7C9HjBtwWfXpKAAAAAElFTkSuQmCC' - -const PUBLIC_BACK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAY' + - 'AAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAA' + - 'XNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA8VJREFUeNrt3LFLlHEYwPFXz0G' + - 'iIZpEoikkwsFRIiK3gqCigxIC/4Kmhv6OoChouaGoqKCgCKducGh0cDAIamhwiCaHCIeelztpUszee/vl8/nAM3Vd8nufr' + - '+fddVYVAAAAAAAAAAAAAAAAAAAAAABQijFH0KhrMd2Y2ZitmNWYRzHLjkYAB9lUzMOYizv8eS/mZsymoypLxxE0svzvY07' + - 'vcpu5mOmY145LAAdx+U/u4bZzwx+JPjq2cow7glaWf1vXsQkg6/JvPwoggJTLjwDSL/8nRyiAzN/5nzpGAWRd/n7MM0cpg' + - 'IzLvx6z6CjL453gdpZ/IWbDcQrA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD8CMDyIwDLjwAsPwKw/AjA8iMAy48ALD8CsPw' + - 'IwPIjAMuPACw/ArD85A3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2A' + - 'MtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/' + - 'aACw/aQOw/KQNwPLz3xlv6H4mYp5YfrI+AizF9BwnI/AlZi3mbsxy03feaeh+HsQcc60YgSMxMzE3YmZj3sX8LOlHoPoLn' + - 'HedaEE35n5pzwF856dN9SPBpZICmHRNaNnlkgL46nrQsvmSAqhftlx1TWjR4ZICqPVcE1q0XloA96rBa7XQhl5pAWzFXKm' + - '8i8vo9WMeN3VnnQa/sO8xL2POxEy7Toxo+RdjNpu6w1F9HuBqNXi99lw1eKMM9utHzIeYV8MftbccCQAAAAAAsBdt/XLc+s' + - 'Py9W+MmPqL+1iJuVA1+C4gdFr6d77FvK0GH2nb739lPR5zNuZ51eBnQhFAJQIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE' + - 'IAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAI' + - 'EIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE8M8jmBlGgABSRnAqZiXms+MUQNYIDnkUKMu4I/gj6z' + - 'ELMRv7/PsnHKEAMkcw6fgEkDmCNUcngMwRvHFsngRnfWJcL/9tRyaAgxrB+ZijO9ymH7MUs+m4yjLmCBozEXMr5nr1+9We1' + - 'ZgXMXccDwAAAAAAAAAAAAAAAAAAAAAAwO5+AfVgtqHKRnawAAAAAElFTkSuQmCC' - -@Component -export struct ComposeTitleBar { - item: ComposeTitleBarMenuItem - title: ResourceStr - subtitle: ResourceStr - menuItems: Array - - @State titleMaxWidth: number = 0 - @State isItemOnFocus: boolean = false - - private static readonly totalHeight = 56 - private static readonly leftPadding = 12 - private static readonly rightPadding = 12 - private static readonly portraitImageSize = 40 - private static readonly portraitImageLeftPadding = 4 - private static readonly portraitImageRightPadding = 16 - - build() { - Flex({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }) { - Row() { - Navigator() { - ImageMenuItem({ item: { - value: PUBLIC_BACK, - isEnabled: true - } }) - } - if (this.item !== undefined) { - Image(this.item.value) - .width(ComposeTitleBar.portraitImageSize) - .height(ComposeTitleBar.portraitImageSize) - .margin({ - left: $r('sys.float.ohos_id_text_paragraph_margin_xs'), - right: $r('sys.float.ohos_id_text_paragraph_margin_m') - }) - .focusable(this.item.isEnabled) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .onFocus(() => this.isItemOnFocus = true) - .onBlur(() => this.isItemOnFocus = false) - .border(this.isItemOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onClick(() => this.item.isEnabled && this.item.action && this.item.action()) - } - Column() { - if (this.title !== undefined) { - Row() { - Text(this.title) - .fontWeight(FontWeight.Medium) - .fontSize($r('sys.float.ohos_id_text_size_headline8')) - .fontColor($r('sys.color.ohos_id_color_titlebar_text')) - .maxLines(this.subtitle !== undefined ? 1 : 2) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .constraintSize({ maxWidth: this.titleMaxWidth }) - } - .justifyContent(FlexAlign.Start) - } - if (this.subtitle !== undefined) { - Row() { - Text(this.subtitle) - .fontSize($r('sys.float.ohos_id_text_size_over_line')) - .fontColor($r('sys.color.ohos_id_color_titlebar_subtitle_text')) - .maxLines(1) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .constraintSize({ maxWidth: this.titleMaxWidth }) - } - .justifyContent(FlexAlign.Start) - } - } - .justifyContent(FlexAlign.Start) - .alignItems(HorizontalAlign.Start) - .constraintSize({ maxWidth: this.titleMaxWidth }) - } - .margin({ left: $r('sys.float.ohos_id_default_padding_start') }) - if (this.menuItems !== undefined && this.menuItems.length > 0) { - CollapsibleMenuSection({ menuItems: this.menuItems }) - } - } - .width('100%') - .height(ComposeTitleBar.totalHeight) - .backgroundColor($r('sys.color.ohos_id_color_background')) - .onAreaChange((_oldValue: Area, newValue: Area) => { - let newWidth = Number(newValue.width) - if (this.menuItems !== undefined) { - let menusLength = this.menuItems.length - if (menusLength >= CollapsibleMenuSection.maxCountOfVisibleItems) { - newWidth = newWidth - ImageMenuItem.imageHotZoneWidth * CollapsibleMenuSection.maxCountOfVisibleItems - } else if (menusLength > 0) { - newWidth = newWidth - ImageMenuItem.imageHotZoneWidth * menusLength - } - } - this.titleMaxWidth = newWidth - this.titleMaxWidth -= ComposeTitleBar.leftPadding - this.titleMaxWidth -= ImageMenuItem.imageHotZoneWidth - if (this.item !== undefined) { - this.titleMaxWidth -= ComposeTitleBar.portraitImageLeftPadding - + ComposeTitleBar.portraitImageSize - + ComposeTitleBar.portraitImageRightPadding - } - this.titleMaxWidth -= ComposeTitleBar.rightPadding - }) - } -} - -@Component -struct CollapsibleMenuSection { - menuItems: Array - - static readonly maxCountOfVisibleItems = 3 - private static readonly focusPadding = 4 - private static readonly marginsNum = 2 - - @State isPopupShown: boolean = false - - @State isMoreIconOnFocus: boolean = false - @State isMoreIconOnHover: boolean = false - @State isMoreIconOnClick: boolean = false - - getMoreIconFgColor() { - return this.isMoreIconOnClick - ? $r('sys.color.ohos_id_color_titlebar_icon_pressed') - : $r('sys.color.ohos_id_color_titlebar_icon') - } - - getMoreIconBgColor() { - if (this.isMoreIconOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isMoreIconOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Column() { - Row() { - if (this.menuItems.length <= CollapsibleMenuSection.maxCountOfVisibleItems) { - ForEach(this.menuItems, (item) => { - ImageMenuItem({ item: item }) - }) - } else { - ForEach(this.menuItems.slice(0, CollapsibleMenuSection.maxCountOfVisibleItems - 1), (item) => { - ImageMenuItem({ item: item }) - }) - - Row() { - Image(PUBLIC_MORE) - .width(ImageMenuItem.imageSize) - .height(ImageMenuItem.imageSize) - .focusable(true) - } - .width(ImageMenuItem.imageHotZoneWidth) - .height(ImageMenuItem.imageHotZoneWidth) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .foregroundColor(this.getMoreIconFgColor()) - .backgroundColor(this.getMoreIconBgColor()) - .justifyContent(FlexAlign.Center) - .border(this.isMoreIconOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => this.isMoreIconOnFocus = true) - .onBlur(() => this.isMoreIconOnFocus = false) - .onHover((isOn) => this.isMoreIconOnHover = isOn) - .onKeyEvent((event) => { - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isMoreIconOnClick = true - } - if (event.type === KeyType.Up) { - this.isMoreIconOnClick = false - } - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - this.isMoreIconOnClick = true - } - if (event.type === TouchType.Up) { - this.isMoreIconOnClick = false - } - }) - .onClick(() => this.isPopupShown = true) - .bindPopup(this.isPopupShown, { - builder: this.popupBuilder, - placement: Placement.Bottom, - popupColor: Color.White, - enableArrow: false, - onStateChange: (e) => this.isPopupShown = e.isVisible - }) - } - } - } - .height('100%') - .margin({ right: $r('sys.float.ohos_id_default_padding_end') }) - .justifyContent(FlexAlign.Center) - } - - @Builder popupBuilder() { - Column() { - ForEach(this.menuItems.slice(CollapsibleMenuSection.maxCountOfVisibleItems - 1, this.menuItems.length), (item, _index?) => { - ImageMenuItem({ item: item }) - }) - } - .width(ImageMenuItem.imageHotZoneWidth + CollapsibleMenuSection.focusPadding * CollapsibleMenuSection.marginsNum) - .margin({ top: CollapsibleMenuSection.focusPadding, bottom: CollapsibleMenuSection.focusPadding }) - } -} - -@Component -struct ImageMenuItem { - item: ComposeTitleBarMenuItem - - static readonly imageSize = 24 - static readonly imageHotZoneWidth = 48 - static readonly buttonBorderRadius = 8 - static readonly focusBorderWidth = 2 - static readonly disabledImageOpacity = 0.4 - - @State isOnFocus: boolean = false - @State isOnHover: boolean = false - @State isOnClick: boolean = false - - getFgColor() { - return this.isOnClick - ? $r('sys.color.ohos_id_color_titlebar_icon_pressed') - : $r('sys.color.ohos_id_color_titlebar_icon') - } - - getBgColor() { - if (this.isOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Row() { - Image(this.item.value) - .width(ImageMenuItem.imageSize) - .height(ImageMenuItem.imageSize) - .focusable(this.item.isEnabled) - } - .width(ImageMenuItem.imageHotZoneWidth) - .height(ImageMenuItem.imageHotZoneWidth) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .foregroundColor(this.getFgColor()) - .backgroundColor(this.getBgColor()) - .justifyContent(FlexAlign.Center) - .opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity) - .border(this.isOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => { - if (!this.item.isEnabled) { - return - } - this.isOnFocus = true - }) - .onBlur(() => this.isOnFocus = false) - .onHover((isOn) => { - if (!this.item.isEnabled) { - return - } - this.isOnHover = isOn - }) - .onKeyEvent((event) => { - if (!this.item.isEnabled) { - return - } - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isOnClick = true - } - if (event.type === KeyType.Up) { - this.isOnClick = false - } - }) - .onTouch((event) => { - if (!this.item.isEnabled) { - return - } - if (event.type === TouchType.Down) { - this.isOnClick = true - } - if (event.type === TouchType.Up) { - this.isOnClick = false - } - }) - .onClick(() => this.item.isEnabled && this.item.action && this.item.action()) - } -} - -export default {ComposeTitleBar} \ No newline at end of file diff --git a/source/EditableTitleBar/EditableTitleBar.ets b/source/EditableTitleBar/EditableTitleBar.ets deleted file mode 100755 index fffa70e..0000000 --- a/source/EditableTitleBar/EditableTitleBar.ets +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { KeyCode } from '@ohos.multimodalInput.keyCode' - -export enum EditableLeftIconType { - Back, - Cancel -} - -export declare type EditableTitleBarMenuItem = { - value: ResourceStr - isEnabled: boolean - action?: () => void -} - -const PUBLIC_CANCEL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3Gw' + - 'HAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IA' + - 'rs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABKpJREFUeNrt3bFrlHccx/Ff4o2dgkOQ4' + - 'JzR4SYJgksnbYcGOrTQsUPtpE4d/RNcFBeFlg7NUlTSTrXQQgsKGV0KHTs4ODiJSL8PdxaUGJK7pPc893m94TvleZLnnt' + - '/7fcc9z5FrDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnDQrPTuej2u2a87VvKp5XLNT87OlGiSf1lx' + - '6Zz2/q3kkgLdZr7k5lX8/7tZ8XfOCU4OgW887U/n341bN9T6s56menLAfaj464OfdM8iF6XYv+dV7+X+pOX/ANuOatZqH' + - 'Amjti5prh9jurAgGI//mIbbtIvi15u9FHvBqD07a50fYdqtmt+YDrg1a/jd8tuiD7kMA4yNuL4LlkH+WtV/KAEYz7COC4' + - 'cs/69ovXQB7M+4ngmHLP8/aL1UAD+bYVwTDlX/etT8W+nAV6M82uQS6PuP+rg4NV/5vBNDa6za5HLY9xzO5CIYl/9OaT5' + - 'obYf/xrE1uioggQ/6LNf/04QGd6tHJFQH5owMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH' + - '54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDEAH54wMQAfnjAxAB+eMDSI6A/AKIjYD8AoiN' + - 'gPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI2A/AKIj' + - 'YD8AoiNgPwCiI2A/AKIjYD8AoiNgPwCiI1gjfyLY8UpmJnNqbjrc/yO32pOk98rQPIrwWnyCyA5AvILQATkF4AIyC8AEZ' + - 'BfACIgvwBEQH4BiID8J8qqU3BiPJ8O+XuMO8Eng8/2CID85BcA+ckvAPKT35tg8h+n/KP2/3/2SADojfzf1+yKYH7cBxi' + - 'm/N39hWX8RnsBkP9Q8r9BBAKIlV8EAoiXXwQCiJdfBAKIl18EAoiXXwQz4D5A/+Tv2KjZmuPvdfu6T+AVYJDyd3Qfo17G' + - 'b7QXAPkPzTMRCCBVfhEIIF5+EQggXn4RCCBefhEIIF5+EQggXn4RCCBefhEIIF5+EQggXn4RCCBefhEIIF5+EQggXn4RC' + - 'CBefhEIIF5+EQggXn4RCCBefhEIwD+qFUFuAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0' + - 'FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBbADkF0FsAOQXQWwA5BdBdAD3a8bkj4rgTM2PAmj' + - 'ty5or5I+L4FzNHzV/LfKB9OGb4rfJP0iO49xvL/pB9CGAMfljIxgLoLUR+WMjGAmgtT3yx0awJ4DWdsgfG8HOog+6D1eB' + - 'ntR8WLNB/sFzlKtDnfw3BNDa65rfp2+I3hfBo5rL5B9UBFttcoNzP35qk8vfLxZ9sCs9OnHdG6Kvps8e3TXiVzWPp88Ut' + - '3k1OLr1vFpz6Z31/LbmntMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAO/wLvsR65mx80NAAAAABJRU' + - '5ErkJggg==' - -const PUBLIC_OK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3' + - 'GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZ' + - 'iS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA+lJREFUeNrt3bFrFgccx+GLlSDi4JDBITiJZHBwEBGRIoqKoIu6iVMd3' + - 'OosCg6W0sm/wEFUDDgpCDoIDoqOKqIoHUrp4CDFoUMRB39HLotoeXMpMXff54EfFE0ivv1+kpQGrmkAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + - 'AAAAAAAAAAAAAAIBJTHkJGIhddT/V7ajbUPey7l7dlbpPAmCs1tb9Wne2++cvPa07Vfd7nw/+g9eXVT7+m3Wn69Z8421m6w7WXa37KADGN' + - 'v4TE7ztTN36uvtL/UPWeJ0Z+PgXnejzBwmAMYx/8VuhTQIgcfy9CYCxjP9D3TsBkPqZf95XAFLH3372vyAAEsf/T93Ruvd93tn/CWbo4z9' + - 'c96jvBxAAseMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0' + - 'eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eMXANHjFwDR4xcA0eP/HgG0z3f9uVl45uu2ZuGBBu3zXn9rej7mEuMfSgDtA46v1c195ff+rbt' + - 'U94stGv9KWqnHpLaPsXxSt/k//iXsq9vY9HjUJca/2gNoH2e/c4K32yUC4x9bAOvqrjeTP41GBMY/qgC2151Z4vuIwPhXxEo8I2xdz/c7W' + - '3fZXo1/6F8B/q471/N9fSUw/sEH8LEb8hYRGH9iAK3HdafrpkVg/IkBtA8yflt3bBn/3SEC4x9sAK3Xda9EYPypAYjA+OMDEIHxxwcgAuO' + - 'PD0AExh8fgAiMPz4AERh/fAAiMP74AERg/PEBiMD44wMQgfHHByAC448PQATGHx+ACIw/PgARGH98AMkRGL8AYiMwfgHERmD8AoiNwPgFE' + - 'BuB8QsgNgLjF0BsBMYvgNgIjF8AsREYvwBiIzB+AcRGYPwCiI3A+AUQG4HxCyA2AuMXQGwExi+A2AiMXwCxERi/AGIjMH4BjDaCTXUP6j5' + - '9423aJ2PeMH4BjDWCHd24n9f9+cXvHa+7U7fb+Fe/qeC/ezvU+e5bleX40A11pm6u+xapMX5fARK+Eix+u7O1brbp/1Bw4xfAoCP4Pxi/A' + - 'GIjMH4BxEZg/AKIjcD4BRAbgfELIDYC4xdAbATGL4DYCIxfAIOL4EXdkbrpZX6sd3WH6p56WQUwJG/qbtX92Cz8EFwfD+sO1L31cq4uU16' + - 'CibU/M3Sy7nzdlgnf51ndxbrbXj4BjCmEPXX76/Y2Cz8DNNP9+l91f3Sf8e92AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + - 'AAAAAzKZwK1uX4kZ6mnAAAAAElFTkSuQmCC' - -const PUBLIC_BACK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAY' + - 'AAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAA' + - 'XNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA8VJREFUeNrt3LFLlHEYwPFXz0G' + - 'iIZpEoikkwsFRIiK3gqCigxIC/4Kmhv6OoChouaGoqKCgCKducGh0cDAIamhwiCaHCIeelztpUszee/vl8/nAM3Vd8nufr' + - '+fddVYVAAAAAAAAAAAAAAAAAAAAAABQijFH0KhrMd2Y2ZitmNWYRzHLjkYAB9lUzMOYizv8eS/mZsymoypLxxE0svzvY07' + - 'vcpu5mOmY145LAAdx+U/u4bZzwx+JPjq2cow7glaWf1vXsQkg6/JvPwoggJTLjwDSL/8nRyiAzN/5nzpGAWRd/n7MM0cpg' + - 'IzLvx6z6CjL453gdpZ/IWbDcQrA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD8CMDyIwDLjwAsPwKw/AjA8iMAy48ALD8CsPw' + - 'IwPIjAMuPACw/ArD85A3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2A' + - 'MtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/' + - 'aACw/aQOw/KQNwPLz3xlv6H4mYp5YfrI+AizF9BwnI/AlZi3mbsxy03feaeh+HsQcc60YgSMxMzE3YmZj3sX8LOlHoPoLn' + - 'HedaEE35n5pzwF856dN9SPBpZICmHRNaNnlkgL46nrQsvmSAqhftlx1TWjR4ZICqPVcE1q0XloA96rBa7XQhl5pAWzFXKm' + - '8i8vo9WMeN3VnnQa/sO8xL2POxEy7Toxo+RdjNpu6w1F9HuBqNXi99lw1eKMM9utHzIeYV8MftbccCQAAAAAAsBdt/XLc+s' + - 'Py9W+MmPqL+1iJuVA1+C4gdFr6d77FvK0GH2nb739lPR5zNuZ51eBnQhFAJQIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE' + - 'IAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAI' + - 'EIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE8M8jmBlGgABSRnAqZiXms+MUQNYIDnkUKMu4I/gj6z' + - 'ELMRv7/PsnHKEAMkcw6fgEkDmCNUcngMwRvHFsngRnfWJcL/9tRyaAgxrB+ZijO9ymH7MUs+m4yjLmCBozEXMr5nr1+9We1' + - 'ZgXMXccDwAAAAAAAAAAAAAAAAAAAAAAwO5+AfVgtqHKRnawAAAAAElFTkSuQmCC' - -@Component -export struct EditableTitleBar { - leftIconStyle: EditableLeftIconType - title: ResourceStr - menuItems: Array - onSave?: () => void - onCancel?: () => void - - @State titleMaxWidth: number = 0 - - static readonly maxCountOfExtraItems = 2 - private static readonly totalHeight = 56 - private static readonly leftPadding = 12 - private static readonly rightPadding = 12 - private static readonly titlePadding = 16 - - build() { - Flex({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }) { - Row() { - if (this.leftIconStyle == EditableLeftIconType.Back) { - Navigator() { - ImageMenuItem({ item: { - value: PUBLIC_BACK, - isEnabled: true - } }) - } - } else { - ImageMenuItem({ item: { - value: PUBLIC_CANCEL, - isEnabled: true, - action: () => this.onCancel && this.onCancel() - } }) - } - - Column() { - Text(this.title) - .fontWeight(FontWeight.Medium) - .fontSize($r('sys.float.ohos_id_text_size_headline8')) - .fontColor($r('sys.color.ohos_id_color_titlebar_text')) - .maxLines(1) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .constraintSize({ maxWidth: this.titleMaxWidth }) - } - .justifyContent(FlexAlign.Start) - .alignItems(HorizontalAlign.Start) - .constraintSize({ maxWidth: this.titleMaxWidth }) - } - .margin({ left: $r('sys.float.ohos_id_default_padding_start') }) - - EditableTitleBarMenuSection({ - menuItems: this.menuItems, - onSave: this.onSave - }) - } - .width('100%') - .height(EditableTitleBar.totalHeight) - .backgroundColor($r('sys.color.ohos_id_color_background')) - .onAreaChange((_oldValue: Area, newValue: Area) => { - let nValue = Number(newValue.width) - nValue = nValue - EditableTitleBar.leftPadding - EditableTitleBar.rightPadding - EditableTitleBar.titlePadding - nValue = nValue - ImageMenuItem.imageHotZoneWidth - ImageMenuItem.imageHotZoneWidth - if (this.menuItems === undefined) { - this.titleMaxWidth = nValue - return - } - if (this.menuItems.length > EditableTitleBar.maxCountOfExtraItems) { - this.titleMaxWidth = nValue - ImageMenuItem.imageHotZoneWidth * EditableTitleBar.maxCountOfExtraItems - } else { - this.titleMaxWidth = nValue - ImageMenuItem.imageHotZoneWidth * this.menuItems.length - } - }) - } -} - -@Component -struct EditableTitleBarMenuSection { - menuItems: Array - onSave?: () => void - - build() { - Column() { - Row() { - if (this.menuItems !== undefined && this.menuItems.length > 0) { - ForEach(this.menuItems.slice(0, EditableTitleBar.maxCountOfExtraItems), (item: EditableTitleBarMenuItem) => { - ImageMenuItem({ item: item }) - }) - } - ImageMenuItem({ item: { - value: PUBLIC_OK, - isEnabled: true, - action: () => this.onSave && this.onSave() - } }) - } - } - .margin({ - left: $r('sys.float.ohos_id_elements_margin_vertical_l'), - right: $r('sys.float.ohos_id_default_padding_end') - }) - .justifyContent(FlexAlign.Center) - } -} - -@Component -struct ImageMenuItem { - item: EditableTitleBarMenuItem - - static readonly imageSize = 24 - static readonly imageHotZoneWidth = 48 - static readonly buttonBorderRadius = 8 - static readonly focusBorderWidth = 2 - static readonly disabledImageOpacity = 0.4 - - @State isOnFocus: boolean = false - @State isOnHover: boolean = false - @State isOnClick: boolean = false - - getFgColor() { - return this.isOnClick - ? $r('sys.color.ohos_id_color_titlebar_icon_pressed') - : $r('sys.color.ohos_id_color_titlebar_icon') - } - - getBgColor() { - if (this.isOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Row() { - Image(this.item.value) - .width(ImageMenuItem.imageSize) - .height(ImageMenuItem.imageSize) - .focusable(this.item.isEnabled) - } - .width(ImageMenuItem.imageHotZoneWidth) - .height(ImageMenuItem.imageHotZoneWidth) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .foregroundColor(this.getFgColor()) - .backgroundColor(this.getBgColor()) - .justifyContent(FlexAlign.Center) - .opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity) - .border(this.isOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => { - if (!this.item.isEnabled) { - return - } - this.isOnFocus = true - }) - .onBlur(() => this.isOnFocus = false) - .onHover((isOn) => { - if (!this.item.isEnabled) { - return - } - this.isOnHover = isOn - }) - .onKeyEvent((event) => { - if (!this.item.isEnabled) { - return - } - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isOnClick = true - } - if (event.type === KeyType.Up) { - this.isOnClick = false - } - }) - .onTouch((event) => { - if (!this.item.isEnabled) { - return - } - if (event.type === TouchType.Down) { - this.isOnClick = true - } - if (event.type === TouchType.Up) { - this.isOnClick = false - } - }) - .onClick(() => this.item.isEnabled && this.item.action && this.item.action()) - } -} - -export default { EditableLeftIconType, EditableTitleBar } \ No newline at end of file diff --git a/source/Filter/Filter.ets b/source/Filter/Filter.ets deleted file mode 100644 index eaddb3b..0000000 --- a/source/Filter/Filter.ets +++ /dev/null @@ -1,1025 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import measure from '@ohos.measure' -import curves from '@ohos.curves' - -const TEXT_HOT_AREA_WIDTH: number = 8 -const LIST_ROW_HEIGHT: number = 40 -const ARROW_IMG_SIZE: number = 24 -const MULTI_LINE_PADDING: number = 24 -const BAR_ANIMATION_DURATION: number = 150 -const ARROW_ANIMATION_DURATION: number = 200 -const ANIMATION_DURATION_250: number = 250 -const ANIMATION_DURATION_100: number = 100 -const FILTER_TOP_PADDING: number = 8 -const SEPARATOR_HEIGHT: number = 16 -const SEPARATOR_WIDTH: number = 1 -const FLOAT_OPACITY: number = 0.95 -const FILTER_FONT_SIZE = 12 -const FOCUS_BORDER_WIDTH = 2 -const ARROW_SHOW_DELAY = 300 -const PERCENT_100: Length = '100%' -const SHARP_CUBIC_BEZIER = curves.cubicBezierCurve(0.33, 0, 0.67, 1) -const INTER_POLATING_SPRING = curves.interpolatingSpring(0, 1, 328, 34) -const FRICTION_CUBIC_BEZIER = curves.cubicBezierCurve(0.2, 0, 0.2, 1) -const TRANS_COLOR: string = '#00FFFFFF' - -export enum FilterType { - MULTI_LINE_FILTER, - LIST_FILTER -} - -export declare type FilterParams = { - name: ResourceStr, - options: Array -} - -export declare type FilterResult = { - name: ResourceStr, - index: number, - value: ResourceStr -} - -@Observed -class FontWeightArray extends Array { -} - -@Observed -class ResourceArray extends Array { -} - -@Observed -class BooleanArray extends Array { -} - -@Observed -export class ObservedBoolean { - public value: boolean - - constructor(value: boolean) { - this.value = value - } -} - -@Observed -class ObservedNumber { - public value: number - - constructor(value: number) { - this.value = value - } -} - -@Component -struct ListFilterRow { - @ObjectLink colorRow: ResourceArray - @ObjectLink fontWeightRow: FontWeightArray - @ObjectLink backgroundColorRow: ResourceArray - @ObjectLink isBackgroundHoverRow: BooleanArray - filterRow: FilterParams - onItemClick: (colIndex: number) => void - - build() { - List() { - ForEach(this.filterRow.options, (option, colIndex?: number) => { - ListItem() { - Text(option.toString()) - .fontSize($r('sys.float.ohos_id_text_size_body3')) - .fontColor(this.colorRow[colIndex]) - .fontWeight(this.fontWeightRow[colIndex]) - .focusable(true) - } - .height(PERCENT_100) - .onClick(() => { - this.onItemClick(colIndex) - }) - .focusable(true) - .stateStyles({ - focused: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: FOCUS_BORDER_WIDTH, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - }) - .padding({ - left: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH, - right: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH - }) - }, - normal: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: 0 }) - .padding({ left: TEXT_HOT_AREA_WIDTH, right: TEXT_HOT_AREA_WIDTH }) - } - }) - .backgroundColor(this.isBackgroundHoverRow[colIndex] ? this.backgroundColorRow[colIndex] : TRANS_COLOR) - .onHover((isHover: boolean) => { - animateTo({ - curve: FRICTION_CUBIC_BEZIER, - duration: ANIMATION_DURATION_250 - }, () => { - if (isHover) { - this.backgroundColorRow[colIndex] = $r('sys.color.ohos_id_color_hover') - this.isBackgroundHoverRow[colIndex] = true - } else { - this.isBackgroundHoverRow[colIndex] = false - } - }) - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.backgroundColorRow[colIndex] = $r('sys.color.ohos_id_color_click_effect') - this.isBackgroundHoverRow[colIndex] = true - }) - } else if (event.type === TouchType.Up) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.isBackgroundHoverRow[colIndex] = false - }) - } - }) - }) - } - .listDirection(Axis.Horizontal) - .margin({ left: -TEXT_HOT_AREA_WIDTH * 2 }) - .scrollBar(BarState.Off) - .width(PERCENT_100) - .height(LIST_ROW_HEIGHT) - .align(Alignment.Start) - } -} - -@Component -struct MultiFilterRow { - @ObjectLink colorRow: ResourceArray - @ObjectLink fontWeightRow: FontWeightArray - @ObjectLink backgroundColorRow: ResourceArray - @ObjectLink isBackgroundHoverRow: BooleanArray - @ObjectLink twoLineModeItemNumRow: ObservedNumber - @ObjectLink twoLineModeItemNumRecordRow: ObservedNumber - @ObjectLink arrowShowStateRow: ObservedBoolean - @ObjectLink isArrowIconDown: ObservedBoolean - filterRow: FilterParams = null - onItemClick: (colIndex: number) => void - @State arrowBgColorRow: Resource = $r('sys.color.ohos_id_color_hover') - @State isArrowBgHoverRow: boolean = false - private filterColumnWidth: number = 0 - - private calcMultiFilterRowItemNum() { - var curLineRetainWidth = this.filterColumnWidth - vp2px(MULTI_LINE_PADDING) - var curLineSum = 0 - var curLine = 1 - for (var i = 0; i < this.filterRow.options.length; i++) { - let option = this.filterRow.options[i] - let itemWidth = measure.measureText({ - textContent: option, - fontSize: FILTER_FONT_SIZE - }) - if (i === 0) { - continue - } else { - itemWidth += vp2px(TEXT_HOT_AREA_WIDTH * 2) - } - if (curLineRetainWidth - itemWidth > 0) { - curLineRetainWidth -= itemWidth - curLineSum += 1 - } else { - if (curLineSum === 0) { - curLineSum++ - curLineRetainWidth = 0 - } - if (curLine === 1) { - curLine += 1 - curLineRetainWidth = this.filterColumnWidth - vp2px(ARROW_IMG_SIZE) - vp2px(MULTI_LINE_PADDING) - i-- - } else { - break - } - } - } - return curLineSum - } - - @Builder DownAndUpArrow() { - Row() { - Image(this.isArrowIconDown.value ? $r('sys.media.ohos_ic_public_arrow_down') : $r('sys.media.ohos_ic_public_arrow_up')) - .width(ARROW_IMG_SIZE) - .height(LIST_ROW_HEIGHT) - .fillColor($r('sys.color.ohos_id_color_tertiary')) - .focusable(true) - .stateStyles({ - focused: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: FOCUS_BORDER_WIDTH, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - }) - .width(ARROW_IMG_SIZE + FOCUS_BORDER_WIDTH * 2) - .offset({ x: -FOCUS_BORDER_WIDTH }) - }, - normal: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: 0 }) - .width(ARROW_IMG_SIZE) - .offset({ x: 0 }) - } - }) - } - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked') - }) - .height(LIST_ROW_HEIGHT) - .width(ARROW_IMG_SIZE) - .backgroundColor(this.isArrowBgHoverRow ? this.arrowBgColorRow : TRANS_COLOR) - .focusable(true) - .visibility(this.arrowShowStateRow.value ? Visibility.Visible : Visibility.Hidden) - .onHover((isHover: boolean) => { - animateTo({ - curve: FRICTION_CUBIC_BEZIER, - duration: ANIMATION_DURATION_250 - }, () => { - if (isHover) { - this.arrowBgColorRow = $r('sys.color.ohos_id_color_hover') - this.isArrowBgHoverRow = true - } else { - this.isArrowBgHoverRow = false - } - }) - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.arrowBgColorRow = $r('sys.color.ohos_id_color_click_effect') - this.isArrowBgHoverRow = true - }) - } else if (event.type === TouchType.Up) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.isArrowBgHoverRow = false - }) - } - }) - .onClick(() => { - if (this.isArrowIconDown.value) { - this.isArrowIconDown.value = false - this.arrowShowStateRow.value = false - animateTo({ - curve: INTER_POLATING_SPRING, - }, () => { - this.twoLineModeItemNumRow.value = this.filterRow.options.length - }) - - animateTo({ - delay: 300, - duration: ARROW_ANIMATION_DURATION, - curve: SHARP_CUBIC_BEZIER - }, () => { - this.arrowShowStateRow.value = true - }) - } else { - this.isArrowIconDown.value = true - this.arrowShowStateRow.value = false - - animateTo({ - curve: INTER_POLATING_SPRING, - }, () => { - this.twoLineModeItemNumRow.value = this.twoLineModeItemNumRecordRow.value - }) - animateTo({ - delay: ARROW_SHOW_DELAY, - duration: ARROW_ANIMATION_DURATION, - curve: SHARP_CUBIC_BEZIER - }, () => { - this.arrowShowStateRow.value = true - }) - } - - }) - - } - - build() { - Row() { - if (this.filterRow.options && this.filterRow.options.length > 0) { - Text(this.filterRow.options[0].toString()) - .height(LIST_ROW_HEIGHT) - .width(px2vp(measure.measureText({ - textContent: this.filterRow.options[0].toString(), - fontSize: FILTER_FONT_SIZE - })) + (TEXT_HOT_AREA_WIDTH * 2)) - .margin({ left: -TEXT_HOT_AREA_WIDTH }) - .fontSize($r('sys.float.ohos_id_text_size_body3')) - .fontColor(this.colorRow[0]) - .fontWeight(this.fontWeightRow[0]) - .backgroundColor(this.isBackgroundHoverRow[0] ? this.backgroundColorRow[0] : TRANS_COLOR) - .onClick(() => { - this.onItemClick(0) - }) - .focusable(true) - .onHover((isHover: boolean) => { - animateTo({ - curve: FRICTION_CUBIC_BEZIER, - duration: ANIMATION_DURATION_250 - }, () => { - if (isHover) { - this.backgroundColorRow[0] = $r('sys.color.ohos_id_color_hover') - this.isBackgroundHoverRow[0] = true - } else { - this.isBackgroundHoverRow[0] = false - } - }) - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.backgroundColorRow[0] = $r('sys.color.ohos_id_color_click_effect') - this.isBackgroundHoverRow[0] = true - }) - } else if (event.type === TouchType.Up) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.isBackgroundHoverRow[0] = false - }) - } - }) - .stateStyles({ - focused: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: FOCUS_BORDER_WIDTH, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - }) - .padding({ - left: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH, - right: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH - }) - }, - normal: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: 0 }) - .padding({ left: TEXT_HOT_AREA_WIDTH, right: TEXT_HOT_AREA_WIDTH }) - } - }) - } - Row() { - Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap }) { - ForEach(this.filterRow.options.slice(0, this.twoLineModeItemNumRow.value + 1), (option, colIndex?: number) => { - if (colIndex > 0) { - Text(option.toString()) - .transition(TransitionEffect.OPACITY) - .fontSize($r('sys.float.ohos_id_text_size_body3')) - .height(LIST_ROW_HEIGHT) - .fontColor(this.colorRow[colIndex]) - .fontWeight(this.fontWeightRow[colIndex]) - .backgroundColor(this.isBackgroundHoverRow[colIndex] ? this.backgroundColorRow[colIndex] : TRANS_COLOR) - .onClick(() => { - this.onItemClick(colIndex) - }) - .onHover((isHover: boolean) => { - animateTo({ - curve: FRICTION_CUBIC_BEZIER, - duration: ANIMATION_DURATION_250 - }, () => { - if (isHover) { - this.backgroundColorRow[colIndex] = $r('sys.color.ohos_id_color_hover') - this.isBackgroundHoverRow[colIndex] = true - } else { - this.isBackgroundHoverRow[colIndex] = false - } - }) - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.backgroundColorRow[colIndex] = $r('sys.color.ohos_id_color_click_effect') - this.isBackgroundHoverRow[colIndex] = true - }) - } else if (event.type === TouchType.Up) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.isBackgroundHoverRow[colIndex] = false - }) - } - }) - .focusable(true) - .stateStyles({ - focused: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: FOCUS_BORDER_WIDTH, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - }) - .padding({ - left: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH, - right: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH - }) - }, - normal: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: 0 }) - .padding({ left: TEXT_HOT_AREA_WIDTH, right: TEXT_HOT_AREA_WIDTH }) - } - }) - } - }) - this.DownAndUpArrow() - }.alignSelf(ItemAlign.Stretch) - }.width(PERCENT_100) - .padding({ right: $r('sys.float.ohos_id_max_padding_end') }) - .onAreaChange((_oldValue: Area, newValue: Area) => { - this.filterColumnWidth = vp2px(parseInt(newValue.width.toString(), 0)) - if (this.twoLineModeItemNumRow.value === 0) { - var curLineSum = this.calcMultiFilterRowItemNum() - this.twoLineModeItemNumRow.value = curLineSum - this.twoLineModeItemNumRecordRow.value = curLineSum - if (curLineSum < this.filterRow.options.length - 1) { - this.arrowShowStateRow.value = true - } else { - this.arrowShowStateRow.value = false - } - } - }) - - }.width(PERCENT_100) - .alignItems(VerticalAlign.Top) - .padding({ left: $r('sys.float.ohos_id_max_padding_start'), right: $r('sys.float.ohos_id_max_padding_end') }) - } -} - - -@Component -export struct Filter { - @BuilderParam container: () => void - @Prop multiFilters: Array = [] - @Prop additionFilters: FilterParams = null - onFilterChanged: (filterResults: Array) => void = null - @Prop filterType: FilterType = FilterType.LIST_FILTER - private selectedFilters: Array = null - @State private colorArr: Array = null - @State private fontWeightArr: Array = null - @State private backgroundColorArr: Array = null - @State private isBackgroundHover: Array = null - @State private floatArrowBgColor: Resource = null - @State private isFloatArrowBgHover: boolean = false - @State private isArrowIconDownArr: Array = null - @State private additionColorArr: Array = null - @State private additionFontWeightArr: Array = null - @State private additionBackgroundColorArr: Array = null - @State private isAdditionBackgroundHover: Array = null - @State colorRefresh: boolean = false - @State isFloatBarShow: boolean = false - isFloatBarShowWithoutAnimation: boolean = false - @State isFloatShowAllFilter: boolean = false - isFloatShowAllFilterWithoutAnimation: boolean = false - @State floatFilterPosition: number = 0 - @State floatFilterBarHeight: number = 0 - @State floatFilterBarPosition: number = 0 - filterDynamicHeight: number = 0 - @State twoLineModeItemNum: Array = null - @State twoLineModeItemNumRecord: Array = null - @State downArrowShowState: Array = null - - textColor(rowIndex: number, colIndex: number) { - if (this.selectedFilters.length > rowIndex && this.selectedFilters[rowIndex].index === colIndex) { - return $r('sys.color.ohos_id_color_text_primary_activated') - } - return $r('sys.color.ohos_id_color_text_primary') - } - - aboutToAppear() { - this.initParams() - } - - private filterItemClick(rowIndex: number, colIndex: number) { - let selectedFilterValue = this.multiFilters[rowIndex].options[colIndex] - if (colIndex != this.selectedFilters[rowIndex].index) { - this.colorArr[rowIndex][colIndex] = $r('sys.color.ohos_id_color_text_primary_activated') - this.colorArr[rowIndex][this.selectedFilters[rowIndex].index] = $r('sys.color.ohos_id_color_text_primary') - this.fontWeightArr[rowIndex][colIndex] = FontWeight.Medium - this.fontWeightArr[rowIndex][this.selectedFilters[rowIndex].index] = FontWeight.Regular - this.colorRefresh = !this.colorRefresh - this.selectedFilters[rowIndex].value = selectedFilterValue - this.selectedFilters[rowIndex].index = colIndex - this.onFilterChanged && this.onFilterChanged(this.selectedFilters); - } - } - - private initParams() { - if (!this.selectedFilters) { - this.selectedFilters = [] - for (let filter of this.multiFilters) { - var result: FilterResult = { name: filter.name, index: -1, value: null } - if (filter.options.length > 0) { - result.index = 0 - result.value = filter.options[0] - } - this.selectedFilters.push(result) - } - if (this.additionFilters && this.additionFilters.name) { - var result: FilterResult = { name: this.additionFilters.name, index: -1, value: null } - this.selectedFilters.push(result) - } - } - if (!this.colorArr) { - this.colorArr = [] - this.backgroundColorArr = [] - this.isBackgroundHover = [] - this.fontWeightArr = [] - this.isArrowIconDownArr = [] - this.floatArrowBgColor = $r('sys.color.ohos_id_color_hover') - for (let filter of this.multiFilters) { - var colorRow = new ResourceArray() - var fontWeightRow = new FontWeightArray() - var backgroundColorRow = new ResourceArray() - var isBackgroundHoverRow = new BooleanArray() - for (let index of filter.options.keys()) { - if (index === 0) { - colorRow.push($r('sys.color.ohos_id_color_text_primary_activated')) - fontWeightRow.push(FontWeight.Medium) - } else { - colorRow.push($r('sys.color.ohos_id_color_text_primary')) - fontWeightRow.push(FontWeight.Regular) - } - backgroundColorRow.push($r('sys.color.ohos_id_color_hover')) - } - this.colorArr.push(colorRow) - this.fontWeightArr.push(fontWeightRow) - this.backgroundColorArr.push(backgroundColorRow) - this.isBackgroundHover.push(isBackgroundHoverRow) - this.isArrowIconDownArr.push(new ObservedBoolean(true)) - } - } - if (this.additionFilters && this.additionFilters.options) { - this.additionColorArr = [] - this.additionFontWeightArr = [] - this.additionBackgroundColorArr = [] - this.isAdditionBackgroundHover = [] - for (let i = 0; i < this.additionFilters.options.length; i++) { - this.additionColorArr.push($r('sys.color.ohos_id_color_text_primary')) - this.additionFontWeightArr.push(FontWeight.Regular) - this.additionBackgroundColorArr.push($r('sys.color.ohos_id_color_hover')) - this.isAdditionBackgroundHover.push(false) - } - } - if (!this.twoLineModeItemNum) { - this.twoLineModeItemNum = [] - this.twoLineModeItemNumRecord = [] - this.downArrowShowState = [] - for (let i = 0; i < this.multiFilters.length; i++) { - this.twoLineModeItemNum.push(new ObservedNumber(0)) - this.twoLineModeItemNumRecord.push(new ObservedNumber(0)) - this.downArrowShowState.push(new ObservedBoolean(false)) - } - } - } - - @Builder ListFilter() { - Column() { - ForEach(this.multiFilters, (filter: FilterParams, rowIndex?: number) => { - ListFilterRow({ - colorRow: this.colorArr[rowIndex], - fontWeightRow: this.fontWeightArr[rowIndex], - backgroundColorRow: this.backgroundColorArr[rowIndex], - isBackgroundHoverRow: this.isBackgroundHover[rowIndex], - filterRow: filter, - onItemClick: (colIndex: number) => { - this.filterItemClick(rowIndex, colIndex); - } - }) - }) - }.width(PERCENT_100) - .align(Alignment.Start) - .padding({ left: $r('sys.float.ohos_id_max_padding_start') }) - .onAreaChange((_oldValue: Area, newValue: Area) => { - if (!this.isFloatShowAllFilterWithoutAnimation && !this.isFloatBarShowWithoutAnimation) { - if (this.additionFilters != null) { - this.filterDynamicHeight = parseInt(newValue.height.toString(), 0) + LIST_ROW_HEIGHT + FILTER_TOP_PADDING - } else { - this.filterDynamicHeight = parseInt(newValue.height.toString(), 0) + FILTER_TOP_PADDING - } - this.floatFilterPosition = -this.filterDynamicHeight - } - }) - } - - @Builder MultiLineFilter() { - Column() { - ForEach(this.multiFilters, (filterItem: FilterParams, rowIndex?: number) => { - MultiFilterRow({ - colorRow: this.colorArr[rowIndex], - fontWeightRow: this.fontWeightArr[rowIndex], - backgroundColorRow: this.backgroundColorArr[rowIndex], - isBackgroundHoverRow: this.isBackgroundHover[rowIndex], - arrowShowStateRow: this.downArrowShowState[rowIndex], - twoLineModeItemNumRow: this.twoLineModeItemNum[rowIndex], - twoLineModeItemNumRecordRow: this.twoLineModeItemNumRecord[rowIndex], - isArrowIconDown: this.isArrowIconDownArr[rowIndex], - filterRow: filterItem, - onItemClick: (colIndex: number) => { - this.filterItemClick(rowIndex, colIndex); - } - }) - }) - }.width(PERCENT_100) - .onAreaChange((_oldValue: Area, newValue: Area) => { - if (this.additionFilters != null) { - this.filterDynamicHeight = parseInt(newValue.height.toString(), 0) + LIST_ROW_HEIGHT + FILTER_TOP_PADDING - } else { - this.filterDynamicHeight = parseInt(newValue.height.toString(), 0) + FILTER_TOP_PADDING - } - if (!this.isFloatBarShowWithoutAnimation && !this.isFloatShowAllFilterWithoutAnimation) { - this.floatFilterPosition = -this.filterDynamicHeight - } - }) - } - - private additionItemClick(index: number) { - let additionRowIndex = this.multiFilters.length - if (this.selectedFilters[additionRowIndex].index != index) { - if (this.selectedFilters[additionRowIndex].index === -1) { - this.additionColorArr[index] = $r('sys.color.ohos_id_color_text_primary_activated') - this.additionFontWeightArr[index] = FontWeight.Medium - this.selectedFilters[additionRowIndex].value = this.additionFilters.options[index] - this.selectedFilters[additionRowIndex].index = index - } else { - let lastIndex = this.selectedFilters[additionRowIndex].index - this.additionColorArr[lastIndex] = $r('sys.color.ohos_id_color_text_primary') - this.additionColorArr[index] = $r('sys.color.ohos_id_color_text_primary_activated') - this.additionFontWeightArr[lastIndex] = FontWeight.Regular - this.additionFontWeightArr[index] = FontWeight.Medium - this.selectedFilters[additionRowIndex].value = this.additionFilters.options[index] - this.selectedFilters[additionRowIndex].index = index - } - } else { - this.additionColorArr[index] = $r('sys.color.ohos_id_color_text_primary') - this.additionFontWeightArr[index] = FontWeight.Regular - this.selectedFilters[additionRowIndex].value = null - this.selectedFilters[additionRowIndex].index = -1 - } - this.onFilterChanged && this.onFilterChanged(this.selectedFilters) - this.colorRefresh = !this.colorRefresh - } - - @Builder AdditionFilterList() { - if (this.additionFilters && this.additionFilters.name && this.additionFilters.options && this.additionFilters.options.length != 0) { - List() { - ListItem() { - Row() { - Text(this.additionFilters.name.toString()) - .fontSize($r('sys.float.ohos_id_text_size_body3')) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .margin({ left: TEXT_HOT_AREA_WIDTH, right: TEXT_HOT_AREA_WIDTH }) - Row() - .width(SEPARATOR_WIDTH) - .height(SEPARATOR_HEIGHT) - .backgroundColor($r('sys.color.ohos_id_color_list_separator')) - } - }.height(PERCENT_100) - - ForEach(this.additionFilters.options, (option, index?: number) => { - ListItem() { - Text(option.toString()) - .fontSize($r('sys.float.ohos_id_text_size_body3')) - .fontColor(this.additionColorArr[index]) - .fontWeight(this.additionFontWeightArr[index]) - .focusable(true) - } - .height(PERCENT_100) - .backgroundColor(this.isAdditionBackgroundHover[index] ? this.additionBackgroundColorArr[index] : TRANS_COLOR) - .onHover((isHover: boolean) => { - animateTo({ - curve: FRICTION_CUBIC_BEZIER, - duration: ANIMATION_DURATION_250 - }, () => { - if (isHover) { - this.additionBackgroundColorArr[index] = $r('sys.color.ohos_id_color_hover') - this.isAdditionBackgroundHover[index] = true - } else { - this.isAdditionBackgroundHover[index] = false - } - }) - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.additionBackgroundColorArr[index] = $r('sys.color.ohos_id_color_click_effect') - this.isAdditionBackgroundHover[index] = true - }) - } else if (event.type === TouchType.Up) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.isAdditionBackgroundHover[index] = false - }) - } - }) - .focusable(true) - .stateStyles({ - focused: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: FOCUS_BORDER_WIDTH, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - }) - .padding({ - left: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH, - right: TEXT_HOT_AREA_WIDTH - FOCUS_BORDER_WIDTH - }) - }, - normal: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: 0 }) - .padding({ left: TEXT_HOT_AREA_WIDTH, right: TEXT_HOT_AREA_WIDTH }) - } - }) - .onClick(() => { - this.additionItemClick(index) - }) - }) - } - .listDirection(Axis.Horizontal) - .scrollBar(BarState.Off) - .padding({ left: $r('sys.float.ohos_id_max_padding_start') }) - .margin({ left: -TEXT_HOT_AREA_WIDTH * 2 }) - .width(PERCENT_100) - .height(LIST_ROW_HEIGHT) - } - - } - - @Builder FilterHeader() { - Column() { - if (this.filterType === FilterType.LIST_FILTER) { - this.ListFilter() - } else { - this.MultiLineFilter() - } - this.AdditionFilterList() - }.padding({ top: FILTER_TOP_PADDING }) - .onVisibleAreaChange([0.0, 1.0], (_isVisible: boolean, currentRatio: number) => { - if (currentRatio > 0) { - this.isFloatShowAllFilter = false - this.isFloatShowAllFilterWithoutAnimation = false - this.isFloatBarShowWithoutAnimation = false - animateTo({ - curve: INTER_POLATING_SPRING, - onFinish: () => { - if (!this.isFloatBarShowWithoutAnimation) { - this.isFloatBarShow = false - } - } - }, () => { - this.floatFilterBarHeight = 0 - }) - } else { - this.isFloatBarShow = true - this.isFloatBarShowWithoutAnimation = true - animateTo({ - curve: INTER_POLATING_SPRING - }, () => { - this.floatFilterBarHeight = LIST_ROW_HEIGHT + FILTER_TOP_PADDING - }) - } - }) - } - - @Builder FloatFilterHeader() { - Column() { - if (this.filterType === FilterType.LIST_FILTER) { - this.ListFilter() - } else { - this.MultiLineFilter() - } - this.AdditionFilterList() - } - .padding({ top: FILTER_TOP_PADDING }) - .width(PERCENT_100) - .clip(true) - .backgroundColor($r('sys.color.ohos_id_color_background')) - .opacity(FLOAT_OPACITY) - .backgroundBlurStyle(BlurStyle.Thin) - .visibility(this.isFloatShowAllFilter ? Visibility.Visible : Visibility.Hidden) - .position({ x: 0, y: this.floatFilterPosition }) - .zIndex(2) - } - - @Builder FloatFilterBar() { - Row() { - Column() { - Row() { - ForEach(this.selectedFilters.slice(0, this.colorRefresh ? this.selectedFilters.length : this.selectedFilters.length), (selected, index?: number) => { - if (index != 0 && selected.value != null) { - Text('/') - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .fontSize($r('sys.float.ohos_id_text_size_body3')) - } - Text(selected.value) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .fontSize($r('sys.float.ohos_id_text_size_body3')) - }) - }.height(PERCENT_100) - .alignItems(VerticalAlign.Center) - } - .alignItems(HorizontalAlign.Center) - .width(PERCENT_100) - .height(LIST_ROW_HEIGHT) - - Row() { - Image($r('sys.media.ohos_ic_public_arrow_down')) - .width(ARROW_IMG_SIZE) - .height(ARROW_IMG_SIZE) - .fillColor($r('sys.color.ohos_id_color_tertiary')) - .focusable(true) - } - .height(LIST_ROW_HEIGHT) - .margin({ left: -ARROW_IMG_SIZE }) - .backgroundColor(this.isFloatArrowBgHover ? this.floatArrowBgColor : TRANS_COLOR) - .focusable(true) - .stateStyles({ - focused: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: FOCUS_BORDER_WIDTH, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - }) - .width(ARROW_IMG_SIZE + FOCUS_BORDER_WIDTH * 2) - .offset({ x: -FOCUS_BORDER_WIDTH }) - }, - normal: { - .border({ - radius: $r('sys.float.ohos_id_corner_radius_clicked'), - width: 0 }) - .width(ARROW_IMG_SIZE) - .offset({ x: 0 }) - } - }) - .onHover((isHover: boolean) => { - if (isHover) { - animateTo({ - curve: FRICTION_CUBIC_BEZIER, - duration: ANIMATION_DURATION_250 - }, () => { - this.floatArrowBgColor = $r('sys.color.ohos_id_color_hover') - this.isFloatArrowBgHover = true - }) - } else { - animateTo({ - curve: FRICTION_CUBIC_BEZIER, - duration: ANIMATION_DURATION_250 - }, () => { - this.isFloatArrowBgHover = false - }) - } - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.floatArrowBgColor = $r('sys.color.ohos_id_color_click_effect') - this.isFloatArrowBgHover = true - }) - } else if (event.type === TouchType.Up) { - animateTo({ - curve: SHARP_CUBIC_BEZIER, - duration: ANIMATION_DURATION_100 - }, () => { - this.isFloatArrowBgHover = false - }) - } - }) - .onClick(() => { - animateTo({ - duration: BAR_ANIMATION_DURATION, - curve: SHARP_CUBIC_BEZIER - }, () => { - this.isFloatBarShow = false - this.isFloatBarShowWithoutAnimation = false - }) - this.isFloatShowAllFilter = true - this.isFloatShowAllFilterWithoutAnimation = true - animateTo({ - curve: INTER_POLATING_SPRING - }, () => { - this.floatFilterPosition = 0 - this.floatFilterBarPosition = this.filterDynamicHeight - }) - }) - } - .width(PERCENT_100) - .padding({ right: $r('sys.float.ohos_id_max_padding_end') }) - .height(this.floatFilterBarHeight) - .backgroundColor($r('sys.color.ohos_id_color_background')) - .opacity(FLOAT_OPACITY) - .clip(true) - .backgroundBlurStyle(BlurStyle.Thin) - .visibility(this.isFloatBarShow ? Visibility.Visible : Visibility.Hidden) - .alignItems(VerticalAlign.Bottom) - .position({ x: 0, y: this.floatFilterBarPosition }) - .zIndex(1) - } - - private listScroller: Scroller = new Scroller() - - build() { - Stack({ alignContent: Alignment.Top }) { - this.FloatFilterBar(); - this.FloatFilterHeader(); - Column() { - List({ initialIndex: 0, scroller: this.listScroller }) { - ListItem() { - this.FilterHeader() - }.focusable(true) - .onFocus(() => { - this.listScroller.scrollToIndex(0, true) - }) - - ListItem() { - this.container() - }.focusable(true) - .onFocus(() => { - this.listScroller.scrollToIndex(1, true) - }) - } - .listDirection(Axis.Vertical) - .width(PERCENT_100) - .height(PERCENT_100) - .edgeEffect(EdgeEffect.Spring) - .onScroll((_scrollOffset: number, scrollState: ScrollState) => { - if (this.isFloatShowAllFilterWithoutAnimation && scrollState == ScrollState.Scroll) { - this.isFloatBarShowWithoutAnimation = true - this.isFloatShowAllFilterWithoutAnimation = false - animateTo({ - duration: BAR_ANIMATION_DURATION, - curve: SHARP_CUBIC_BEZIER - }, () => { - this.isFloatBarShow = true - }) - - animateTo({ - curve: INTER_POLATING_SPRING, - onFinish: () => { - if (!this.isFloatShowAllFilterWithoutAnimation) { - this.isFloatShowAllFilter = false - } - } - }, () => { - this.floatFilterPosition = -this.filterDynamicHeight - this.floatFilterBarPosition = 0 - }) - } - }) - }.zIndex(0) - }.clip(true) - } -} \ No newline at end of file diff --git a/source/ProgressButton/ProgressButton.ets b/source/ProgressButton/ProgressButton.ets deleted file mode 100644 index 82f0d43..0000000 --- a/source/ProgressButton/ProgressButton.ets +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const EMPTY_STRING: string = '' -const MAX_PROGRESS: number = 100 -const MAX_PERCENTAGE: string = '100%' -const MIN_PERCENTAGE: string = '0%' - -@Component -export struct ProgressButton { - @Prop @Watch('getProgressContext') progress: number - @State textProgress: string = EMPTY_STRING - @Prop content: string = EMPTY_STRING - @State isLoading: boolean = false - progressButtonWidth?: Length = 44 - clickCallback: () => void = null - @Prop enable: boolean = true - - private getButtonProgress(): number { - if (this.progress < 0) { - return 0 - } else if (this.progress > MAX_PROGRESS) { - return MAX_PROGRESS - } - return this.progress - } - - private getProgressContext() { - if (this.progress < 0) { - this.isLoading = false - this.textProgress = MIN_PERCENTAGE - } else if (this.progress >= MAX_PROGRESS) { - this.isLoading = false - this.textProgress = MAX_PERCENTAGE - } else { - this.textProgress = Math.floor(this.progress / MAX_PROGRESS * MAX_PROGRESS).toString() + "%" - } - } - - build() { - Button() { - Stack(){ - Progress({ value: this.getButtonProgress(), total: MAX_PROGRESS, - style: ProgressStyle.Capsule }) - .height(28) - .borderRadius(14) - .width('100%') - .hoverEffect(HoverEffect.None) - .clip(false) - .enabled(this.enable) - Row() { - Text(this.isLoading? this.textProgress: this.content) - .fontSize($r('sys.float.ohos_id_text_size_button3')) - .fontWeight(FontWeight.Medium) - .fontColor(this.isLoading? $r('sys.color.ohos_id_color_text_primary') - :$r('sys.color.ohos_id_color_emphasize')) - .maxLines(1) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .padding({left: 8, right: 8}) - .opacity(this.enable? 1.0: 0.4) - } - } - } - .borderRadius(14) - .clip(false) - .hoverEffect(HoverEffect.None) - .backgroundColor($r("sys.color.ohos_id_color_foreground_contrary")) - .border({ width: 0.5, color: this.enable ? $r("sys.color.ohos_id_color_toolbar_text_actived") - : $r('sys.color.ohos_id_color_foreground_contrary_disable') }) - .constraintSize({minWidth: 44}) - .width(this.progressButtonWidth < 44? 44: this.progressButtonWidth) - .stateEffect(this.enable) - .onClick(() => { - if(!this.enable){ - return - } - if (this.progress < MAX_PROGRESS) { - this.isLoading = !this.isLoading - } - this.clickCallback && this.clickCallback() - }) - } -} \ No newline at end of file diff --git a/source/SelectTitleBar/SelectTitleBar.ets b/source/SelectTitleBar/SelectTitleBar.ets deleted file mode 100755 index 15d82bb..0000000 --- a/source/SelectTitleBar/SelectTitleBar.ets +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { KeyCode } from '@ohos.multimodalInput.keyCode' - -export declare type SelectTitleBarMenuItem = { - value: ResourceStr - isEnabled: boolean - action?: () => void -} - -const PUBLIC_MORE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAY' + - 'AAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAA' + - 'AAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAABEZJREFUeNrt3D1rFFEUBuA' + - 'xhmAhFlYpUohYiYWFRcAmKAhWK2pjo1iKf8BCMIKFf8BarCyMhVj4VZhGSKEg2FqJyCKWIhYWnstMINgYsh+cmfs88BI' + - 'Cydxw7jmzu2HvNg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBN+3r6dx+LXIqsRpa7FF8j48hm5Fn3Peo9mAEYRdY' + - 'jJ3f582Vj7nZfUe/eDsCRyMPI2h5/fyNyI/JDT6v3Tvt7sBllE15ETkxwjeORi5G3ke/6W737MgBnI68jh6ZwrcORq5H' + - 'nhkC9+zAA5YXXy8jBKV5zKXIu8jjyS7+rd+YBeNVtyrSVO9PRyBM9r94LSTfjWuTUDK9/eYIXeENUbb0zDsBi5PYc1rm' + - 'j79U74wCszuih+F/ljrSi/+uud8YBGA10rayqrnfGAVgb6FpZVV3vjAOwPNC1sqq63hkHYGWga2VVdb0XKt/8Rf1fd70' + - 'zDsB4jmt5u3Tl9a59AMb6v+56ZxyArYGulVXV9c44ABtzXOup/q+73hkH4N2cHio/Rj7r/7rrnXEAfkfuz2Gddb2v3ln' + - '/DfpgxneLzaY9xE3l9c46AH8iVyI/Z3Dt8nB/Xc+rd5H5QMy3yJemPVs6zY0edc9HUe/0Z4I/dQ/N5Vjd0oTXKp9QcKF' + - 'pD2qj3r0YgO1NeRM507TH6/bifeR85IMeV++d+vTBWOV9JDcjt5rdv6uw3M3uRR7pa/Xu+wBsOxA53bTnTP/3UX1b3fN' + - 'Q1BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqyr6d/97HIpchqZLlL8TUyjmxGnnX' + - 'fo96DGYBRZD1ycpc/XzbmbvcV9e7tAByJPIys7fH3NyI3Ij/0tHrvtL8Hm1E24UXkxATXOB65GHkb+a6/1bsvA3A28jp' + - 'yaArXOhy5GnluCNS7DwNQXni9jByc4jWXIucijyO/9Lt6Zx6AV92mTFu5Mx2NPNHz6r2QdDOuRU7N8PqXJ3iBN0TV1jv' + - 'jACxGbs9hnTv6Xr0zDsDqjB6K/1XuSCv6v+56ZxyA0UDXyqrqemccgLWBrpVV1fXOOADLA10rq6rrnXEAVga6VlZV13u' + - 'h8s1f1P911zvjAIznuJa3S1de79oHYKz/6653xgHYGuhaWVVd74wDsDHHtZ7q/7rrnXEA3s3pofJj5LP+r7veGQfgd+T' + - '+HNZZ1/vqnfXfoA9mfLfYbNpD3FRe76wD8CdyJfJzBtcuD/fX9bx6F5kPxHyLfGnas6XT3OhR93wU9U5/JvhT99BcjtU' + - 'tTXit8gkFF5r2oDbq3YsB2N6UN5EzTXu8bi/eR85HPuhx9d6pTx+MVd5HcjNyq9n9uwrL3exe5JG+Vu++D8C2A5HTTXv' + - 'O9H8f1bfVPQ9FvQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCn7C9HjBtwWfXpKAAAAAElFTkSuQmCC' - -const PUBLIC_BACK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAY' + - 'AAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAA' + - 'XNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA8VJREFUeNrt3LFLlHEYwPFXz0G' + - 'iIZpEoikkwsFRIiK3gqCigxIC/4Kmhv6OoChouaGoqKCgCKducGh0cDAIamhwiCaHCIeelztpUszee/vl8/nAM3Vd8nufr' + - '+fddVYVAAAAAAAAAAAAAAAAAAAAAABQijFH0KhrMd2Y2ZitmNWYRzHLjkYAB9lUzMOYizv8eS/mZsymoypLxxE0svzvY07' + - 'vcpu5mOmY145LAAdx+U/u4bZzwx+JPjq2cow7glaWf1vXsQkg6/JvPwoggJTLjwDSL/8nRyiAzN/5nzpGAWRd/n7MM0cpg' + - 'IzLvx6z6CjL453gdpZ/IWbDcQrA8iMAy48ALD8CsPwIwPIjAMuPACw/ArD8CMDyIwDLjwAsPwKw/AjA8iMAy48ALD8CsPw' + - 'IwPIjAMuPACw/ArD85A3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2A' + - 'MtP2gAsP2kDsPykDcDykzYAy0/aACw/aQOw/KQNwPKTNgDLT9oALD9pA7D8pA3A8pM2AMtP2gAsP2kDsPykDcDykzYAy0/' + - 'aACw/aQOw/KQNwPLz3xlv6H4mYp5YfrI+AizF9BwnI/AlZi3mbsxy03feaeh+HsQcc60YgSMxMzE3YmZj3sX8LOlHoPoLn' + - 'HedaEE35n5pzwF856dN9SPBpZICmHRNaNnlkgL46nrQsvmSAqhftlx1TWjR4ZICqPVcE1q0XloA96rBa7XQhl5pAWzFXKm' + - '8i8vo9WMeN3VnnQa/sO8xL2POxEy7Toxo+RdjNpu6w1F9HuBqNXi99lw1eKMM9utHzIeYV8MftbccCQAAAAAAsBdt/XLc+s' + - 'Py9W+MmPqL+1iJuVA1+C4gdFr6d77FvK0GH2nb739lPR5zNuZ51eBnQhFAJQIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE' + - 'IAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAI' + - 'EIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIEIAIE8M8jmBlGgABSRnAqZiXms+MUQNYIDnkUKMu4I/gj6z' + - 'ELMRv7/PsnHKEAMkcw6fgEkDmCNUcngMwRvHFsngRnfWJcL/9tRyaAgxrB+ZijO9ymH7MUs+m4yjLmCBozEXMr5nr1+9We1' + - 'ZgXMXccDwAAAAAAAAAAAAAAAAAAAAAAwO5+AfVgtqHKRnawAAAAAElFTkSuQmCC' - -@Component -export struct SelectTitleBar { - @State selected: number = 0 - - options: Array - menuItems: Array - - subtitle: ResourceStr - badgeValue: number - hidesBackButton: boolean - - onSelected: ((index: number) => void) - - private static readonly badgeSize = 16 - private static readonly totalHeight = 56 - private static readonly leftPadding = 24 - private static readonly leftPaddingWithBack = 12 - private static readonly rightPadding = 24 - private static readonly badgePadding = 16 - private static readonly subtitleLeftPadding = 8 - - @State selectMaxWidth: number = 0 - - build() { - Flex({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }) { - Row() { - if (!this.hidesBackButton) { - Navigator() { - ImageMenuItem({ item: { - value: PUBLIC_BACK, - isEnabled: true - } }) - } - } - Column() { - if (this.badgeValue !== undefined) { - Badge({ - count: this.badgeValue, - position: BadgePosition.Right, - style: { - badgeSize: SelectTitleBar.badgeSize, - badgeColor: $r('sys.color.ohos_id_color_emphasize'), - borderColor: $r('sys.color.ohos_id_color_emphasize'), - borderWidth: 0 - } - }) { - Row() { - Select(this.options) - .selected(this.selected) - .value(this.selected < this.options.length ? this.options[this.selected].value.toString() : "") - .font({ size: $r('sys.float.ohos_id_text_size_headline8') }) - .fontColor($r('sys.color.ohos_id_color_titlebar_text')) - .onSelect(this.onSelected) - .constraintSize({ maxWidth: this.selectMaxWidth }) - } - .justifyContent(FlexAlign.Start) - .margin({ right: $r('sys.float.ohos_id_elements_margin_horizontal_l') }) - } - } else { - Row() { - Select(this.options) - .selected(this.selected) - .value(this.selected < this.options.length ? this.options[this.selected].value.toString() : "") - .font({ size: $r('sys.float.ohos_id_text_size_headline8') }) - .fontColor($r('sys.color.ohos_id_color_titlebar_text')) - .onSelect(this.onSelected) - .constraintSize({ maxWidth: this.selectMaxWidth }) - } - .justifyContent(FlexAlign.Start) - } - if (this.subtitle !== undefined) { - Row() { - Text(this.subtitle) - .fontSize($r('sys.float.ohos_id_text_size_over_line')) - .fontColor($r('sys.color.ohos_id_color_titlebar_subtitle_text')) - .maxLines(1) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .constraintSize({ maxWidth: this.selectMaxWidth }) - } - .justifyContent(FlexAlign.Start) - .margin({ left: SelectTitleBar.subtitleLeftPadding }) - } - } - .justifyContent(FlexAlign.Start) - .alignItems(HorizontalAlign.Start) - .constraintSize({ maxWidth: this.selectMaxWidth }) - } - .margin({ left: this.hidesBackButton ? $r('sys.float.ohos_id_max_padding_start') : $r('sys.float.ohos_id_default_padding_start') }) - if (this.menuItems !== undefined && this.menuItems.length > 0) { - CollapsibleMenuSection({ menuItems: this.menuItems }) - } - } - .width('100%') - .height(SelectTitleBar.totalHeight) - .backgroundColor($r('sys.color.ohos_id_color_background')) - .onAreaChange((_oldValue: Area, newValue: Area) => { - let newWidth = Number(newValue.width) - if (!this.hidesBackButton) { - newWidth -= ImageMenuItem.imageHotZoneWidth - newWidth += SelectTitleBar.leftPadding - newWidth -= SelectTitleBar.leftPaddingWithBack - } - if (this.menuItems !== undefined) { - let menusLength = this.menuItems.length - if (menusLength >= CollapsibleMenuSection.maxCountOfVisibleItems) { - newWidth -= ImageMenuItem.imageHotZoneWidth * CollapsibleMenuSection.maxCountOfVisibleItems - } else if (menusLength > 0) { - newWidth -= ImageMenuItem.imageHotZoneWidth * menusLength - } - } - if (this.badgeValue !== undefined) { - this.selectMaxWidth = newWidth - SelectTitleBar.badgeSize - SelectTitleBar.leftPadding - SelectTitleBar.rightPadding - SelectTitleBar.badgePadding - } else { - this.selectMaxWidth = newWidth - SelectTitleBar.leftPadding - SelectTitleBar.rightPadding - } - }) - } -} - -@Component -struct CollapsibleMenuSection { - menuItems: Array - - static readonly maxCountOfVisibleItems = 3 - private static readonly focusPadding = 4 - private static readonly marginsNum = 2 - - @State isPopupShown: boolean = false - - @State isMoreIconOnFocus: boolean = false - @State isMoreIconOnHover: boolean = false - @State isMoreIconOnClick: boolean = false - - getMoreIconFgColor() { - return this.isMoreIconOnClick - ? $r('sys.color.ohos_id_color_titlebar_icon_pressed') - : $r('sys.color.ohos_id_color_titlebar_icon') - } - - getMoreIconBgColor() { - if (this.isMoreIconOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isMoreIconOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Column() { - Row() { - if (this.menuItems.length <= CollapsibleMenuSection.maxCountOfVisibleItems) { - ForEach(this.menuItems, (item) => { - ImageMenuItem({ item: item }) - }) - } else { - ForEach(this.menuItems.slice(0, CollapsibleMenuSection.maxCountOfVisibleItems - 1), (item) => { - ImageMenuItem({ item: item }) - }) - - Row() { - Image(PUBLIC_MORE) - .width(ImageMenuItem.imageSize) - .height(ImageMenuItem.imageSize) - .focusable(true) - } - .width(ImageMenuItem.imageHotZoneWidth) - .height(ImageMenuItem.imageHotZoneWidth) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .foregroundColor(this.getMoreIconFgColor()) - .backgroundColor(this.getMoreIconBgColor()) - .justifyContent(FlexAlign.Center) - .border(this.isMoreIconOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => this.isMoreIconOnFocus = true) - .onBlur(() => this.isMoreIconOnFocus = false) - .onHover((isOn) => this.isMoreIconOnHover = isOn) - .onKeyEvent((event) => { - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isMoreIconOnClick = true - } - if (event.type === KeyType.Up) { - this.isMoreIconOnClick = false - } - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - this.isMoreIconOnClick = true - } - if (event.type === TouchType.Up) { - this.isMoreIconOnClick = false - } - }) - .onClick(() => this.isPopupShown = true) - .bindPopup(this.isPopupShown, { - builder: this.popupBuilder, - placement: Placement.Bottom, - popupColor: Color.White, - enableArrow: false, - onStateChange: (e) => this.isPopupShown = e.isVisible - }) - } - } - } - .height('100%') - .margin({ right: $r('sys.float.ohos_id_default_padding_end') }) - .justifyContent(FlexAlign.Center) - } - - @Builder popupBuilder() { - Column() { - ForEach(this.menuItems.slice(CollapsibleMenuSection.maxCountOfVisibleItems - 1, this.menuItems.length), (item, _index?) => { - ImageMenuItem({ item: item }) - }) - } - .width(ImageMenuItem.imageHotZoneWidth + CollapsibleMenuSection.focusPadding * CollapsibleMenuSection.marginsNum) - .margin({ top: CollapsibleMenuSection.focusPadding, bottom: CollapsibleMenuSection.focusPadding }) - } -} - -@Component -struct ImageMenuItem { - item: SelectTitleBarMenuItem - - static readonly imageSize = 24 - static readonly imageHotZoneWidth = 48 - static readonly buttonBorderRadius = 8 - static readonly focusBorderWidth = 2 - static readonly disabledImageOpacity = 0.4 - - @State isOnFocus: boolean = false - @State isOnHover: boolean = false - @State isOnClick: boolean = false - - getFgColor() { - return this.isOnClick - ? $r('sys.color.ohos_id_color_titlebar_icon_pressed') - : $r('sys.color.ohos_id_color_titlebar_icon') - } - - getBgColor() { - if (this.isOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Row() { - Image(this.item.value) - .width(ImageMenuItem.imageSize) - .height(ImageMenuItem.imageSize) - .focusable(this.item.isEnabled) - } - .width(ImageMenuItem.imageHotZoneWidth) - .height(ImageMenuItem.imageHotZoneWidth) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .foregroundColor(this.getFgColor()) - .backgroundColor(this.getBgColor()) - .justifyContent(FlexAlign.Center) - .opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity) - .border(this.isOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => { - if (!this.item.isEnabled) { - return - } - this.isOnFocus = true - }) - .onBlur(() => this.isOnFocus = false) - .onHover((isOn) => { - if (!this.item.isEnabled) { - return - } - this.isOnHover = isOn - }) - .onKeyEvent((event) => { - if (!this.item.isEnabled) { - return - } - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isOnClick = true - } - if (event.type === KeyType.Up) { - this.isOnClick = false - } - }) - .onTouch((event) => { - if (!this.item.isEnabled) { - return - } - if (event.type === TouchType.Down) { - this.isOnClick = true - } - if (event.type === TouchType.Up) { - this.isOnClick = false - } - }) - .onClick(() => this.item.isEnabled && this.item.action && this.item.action()) - } -} - -export default { SelectTitleBar } \ No newline at end of file diff --git a/source/SplitLayout/SplitLayout.ets b/source/SplitLayout/SplitLayout.ets deleted file mode 100644 index 9fb74a2..0000000 --- a/source/SplitLayout/SplitLayout.ets +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@Component -export struct splitlayout { - @BuilderParam container: () => void - @State sizeValue: string = '' - @State areaWidth: number = 0 - @State imageBackgroundColor: string = "#19000000" - @Prop mainImage: Resource = $r("app.media.music") - @Prop primaryText: string = "新歌推荐" - secondaryText?: string = "私人订制新歌精选站,为你推荐专属优质新歌;为你推荐专属优质新歌" - tertiaryText?: string = "每日更新" - - build() { - Column() { - if (this.areaWidth < 600) { - GridRow({ - columns: 4, - breakpoints: { - reference: BreakpointsReference.WindowSize }, - direction: GridRowDirection.Row - }) { - GridCol({ span: { xs: 4, sm: 4, md: 4, lg: 4 } }) { - Column() { - Stack({ alignContent: Alignment.Bottom }) { - Image(this.mainImage) - - Column() { - Text(this.primaryText) - .textAlign(TextAlign.Center) - .fontSize($r('sys.float.ohos_id_text_size_headline7')) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - Text(this.secondaryText) - .textAlign(TextAlign.Center) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .margin({ top: 4, bottom: 8 }) - Text(this.tertiaryText) - .textAlign(TextAlign.Center) - .fontSize($r('sys.float.ohos_id_text_size_caption')) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .margin({ bottom: 24 }) - } - .alignItems(HorizontalAlign.Center) - .margin({ - left: $r('sys.float.ohos_id_max_padding_start'), - right: $r('sys.float.ohos_id_max_padding_end'), }) - } - .height('34%') - .width('100%') - - Column() { - this.container() - } - .height('66%') - .width('100%') - } - } - } - } else if (600 < this.areaWidth && this.areaWidth < 840) { - // 形态二 - GridRow({ - columns: 8, - breakpoints: { - reference: BreakpointsReference.WindowSize }, - direction: GridRowDirection.Row - }) { - GridCol({ span: { xs: 8, sm: 8, md: 8, lg: 8 } }) { - Column() { - Row() { - Image(this.mainImage) - .margin({ left: 96, right: 36 }) - .height('60%') - .width('20%') - Column() { - Text(this.primaryText) - .fontSize($r('sys.float.ohos_id_text_size_headline7')) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - Text(this.secondaryText) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .margin({ top: 4, bottom: 8 }) - Text(this.tertiaryText) - .fontSize($r('sys.float.ohos_id_text_size_caption')) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - } - .alignItems(HorizontalAlign.Start) - .margin({ right: 96 }) - } - .backgroundColor(this.imageBackgroundColor) - .height('34%') - - Column() { - this.container() - } - .height('66%') - } - - } - } - - } else if (this.areaWidth > 840) { - GridRow({ - columns: 12, - breakpoints: { - reference: BreakpointsReference.WindowSize }, - direction: GridRowDirection.Row - }) { - GridCol({ span: { xs: 4, sm: 4, md: 4, lg: 4 } }) { - Column() { - Image(this.mainImage) - .height('17%') - .width('34%') - .margin({ bottom: 36 }) - Text(this.primaryText) - .textAlign(TextAlign.Center) - .fontSize($r('sys.float.ohos_id_text_size_headline7')) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .margin({ left: 48, right: 48 }) - Text(this.secondaryText) - .textAlign(TextAlign.Center) - .fontSize($r('sys.float.ohos_id_text_size_body1')) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .margin({ top: 4, bottom: 8, left: 48, right: 48 }) - Text(this.tertiaryText) - .textAlign(TextAlign.Center) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .margin({ bottom: 24, left: 48, right: 48 }) - } - .height('100%') - .backgroundColor(this.imageBackgroundColor) - .justifyContent(FlexAlign.Center) - .alignItems(HorizontalAlign.Center) - } - .height('100%') - - GridCol({ span: { xs: 8, sm: 8, md: 8, lg: 8 } }) { - this.container() - } - - } - } - } - - .onAreaChange((oldValue: Area, newValue: Area) => { - console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`) - this.sizeValue = JSON.stringify(newValue) - this.areaWidth = parseInt(newValue.width.toString(), 0); - console.info(`pingAce: on area change, oldValue is` + this.areaWidth) - console.info(`pingAce: on area change, oldValue is` + parseInt(newValue.height.toString(), 0)) - }) - } -} diff --git a/source/SubHeader/SubHeader.ets b/source/SubHeader/SubHeader.ets deleted file mode 100644 index da40ac5..0000000 --- a/source/SubHeader/SubHeader.ets +++ /dev/null @@ -1,399 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const SPACE_MARGIN: number = 8 -const MARGIN_NUM: number = 4 -const IMAGE_WIDTH_NUM: number = 16 -const IMAGE_HEIGHT_NUM: number = 24 -const BUTTON_SIZE: number = 32 -const SINGLE_LINE_HEIGHT: number = 48 -const DOUBLE_LINE_HEIGHT: number = 64 -const BUTTON_HEIGHT: number = 28 -const IMAGE_WIDTH: number = 12 -const BORDER_WIDTH = 2 -const DIVIDEND_WIDTH = 3 -const SINGLE_LINE_NUM: number = 1 -const DOUBLE_LINE_NUM: number = 2 -const MIN_FONT_SIZE: number = 14 -const MAIN_TEXT_SIZE: number = 10 -const CONSTRAINT_WIDTH: number = 40 -const CONSTRAINT_NUM: number = 44 - -export enum OperationType { - TEXT_ARROW = 0, - BUTTON = 1, - ICON_GROUP = 2, - LOADING = 3, -} - -export declare type OperationOption = { - value: ResourceStr; - action?: () => void; -} - -export declare type SelectOptions = { - options: Array; - selected?: number; - value?: string; - onSelect?: (index: number, value?: string) => void; -} - -@Component -struct IconGroup { - @State bgColor: Resource = $r('sys.color.ohos_id_color_background') - @State isFocus: boolean = false - item: OperationOption - focusBorderWidth = BORDER_WIDTH - - build() { - Row() { - Image(this.item.value) - .fillColor($r('sys.color.ohos_id_color_primary')) - .width(IMAGE_HEIGHT_NUM) - .height(IMAGE_HEIGHT_NUM) - .focusable(true) - } - .focusable(true) - .width(BUTTON_SIZE) - .height(BUTTON_SIZE) - .margin({ right: SPACE_MARGIN, bottom: MARGIN_NUM }) - .justifyContent(FlexAlign.Center) - .borderRadius($r('sys.float.ohos_id_corner_radius_clicked')) - .backgroundColor(this.bgColor) - .onTouch((event) => { - if (event.type === TouchType.Down) { - this.item.action && this.item.action() - this.bgColor = $r('sys.color.ohos_id_color_click_effect') - } - if (event.type === TouchType.Up) { - this.bgColor = $r('sys.color.ohos_id_color_background') - } - }) - .onHover((isHover: boolean) => { - if (isHover) { - this.bgColor = $r('sys.color.ohos_id_color_hover') - } else { - this.bgColor = $r('sys.color.ohos_id_color_background') - } - }) - .border(this.isFocus ? - { width: this.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => { - this.isFocus = true; - }) - .onBlur(() => { - this.isFocus = false; - }) - .onKeyEvent((event) => { - if (event.keyCode === 2054 || event.keyCode === 2050) { - this.item.action && this.item.action() - } - }) - } -} - -@Component -export struct SubHeader1 { - @Prop icon: Resource - @Prop primaryTitle: string - @Prop secondaryTitle: string - @Prop select: SelectOptions - @Prop operationType: OperationType = OperationType.BUTTON - operationItem: Array - @State isDuplicateLine: boolean = false - @State textArrowBgColor: Resource = $r('sys.color.ohos_id_color_background') - @State buttonBgColor: Resource = $r('sys.color.ohos_id_color_background') - @State iconBgColor: Resource = $r('sys.color.ohos_id_color_background') - @State firstIconBgColor: Resource = $r('sys.color.ohos_id_color_background') - @State SecondaryIconBgColor: Resource = $r('sys.color.ohos_id_color_background') - @State thirdIconBgColor: Resource = $r('sys.color.ohos_id_color_background') - @State flag: boolean = false - @State isTextArrowFocus: boolean = false - @State flexWidth: number = 0 - @State titleWidth: number = 0 - @State titleWidth1: number = 0 - @State isButtonFocus: boolean = false - focusBorderWidth = BORDER_WIDTH - - @Builder ListTextStyle($$: { content: ResourceStr }) { - Text($$.content) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .fontSize($r('sys.float.ohos_id_text_size_sub_title3')) - .fontWeight(FontWeight.Medium) - .maxLines(DOUBLE_LINE_NUM) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .constraintSize({ minWidth: this.titleWidth }) - .margin({ left: $r('sys.float.ohos_id_max_padding_end'), bottom: SPACE_MARGIN, right: MARGIN_NUM }).borderWidth(1) - } - - @Builder ListIconStyle($$: { content: ResourceStr }, icon: ResourceStr) { - Row() { - Image(icon) - .width(IMAGE_WIDTH_NUM) - .height(IMAGE_WIDTH_NUM) - .margin({ right: SPACE_MARGIN }) - Text($$.content) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .fontSize($r('sys.float.ohos_id_text_size_sub_title3')) - .fontWeight(FontWeight.Medium) - .maxLines(DOUBLE_LINE_NUM) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .constraintSize({ minWidth: this.titleWidth - CONSTRAINT_WIDTH }) - } - .margin({ left: $r('sys.float.ohos_id_max_padding_end'), bottom: SPACE_MARGIN, right: MARGIN_NUM }) - } - - @Builder ContentTextStyle($$: { content: ResourceStr }) { - Text($$.content) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .fontSize($r('sys.float.ohos_id_text_size_sub_title2')) - .fontWeight(FontWeight.Medium) - .maxLines(DOUBLE_LINE_NUM) - .maxFontSize($r('sys.float.ohos_id_text_size_sub_title2')) - .minFontSize(MIN_FONT_SIZE) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .constraintSize({ maxWidth: this.titleWidth }) - .margin({ left: $r('sys.float.ohos_id_max_padding_start'), - right: MARGIN_NUM, bottom: SPACE_MARGIN }) - } - - @Builder SubTextStyle($$: { content: ResourceStr, subContent: ResourceStr }) { - Column() { - Text($$.content) - .fontColor($r('sys.color.ohos_id_color_text_primary')) - .fontSize($r('sys.float.ohos_id_text_size_sub_title2')) - .fontWeight(FontWeight.Medium) - .maxLines(SINGLE_LINE_NUM) - .maxFontSize($r('sys.float.ohos_id_text_size_sub_title2')) - .minFontSize(MIN_FONT_SIZE) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - Text($$.subContent) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .fontSize($r('sys.float.ohos_id_text_size_sub_title3')) - .fontWeight(FontWeight.Medium) - .maxLines(SINGLE_LINE_NUM) - .maxFontSize($r('sys.float.ohos_id_text_size_sub_title3')) - .minFontSize(MAIN_TEXT_SIZE) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - } - .constraintSize({ maxWidth: this.titleWidth }) - .alignItems(HorizontalAlign.Start) - .onAppear(() => { - this.isDuplicateLine = true - }) - .margin({ left: $r('sys.float.ohos_id_max_padding_start'), - right: MARGIN_NUM, bottom: SPACE_MARGIN }) - } - - @Builder SelectStyle(selectParam: SelectOptions) { - Select(selectParam.options) - .selected(selectParam.selected) - .value(selectParam.value) - .onSelect((index: number, value?: string) => { - if (selectParam.onSelect) { - selectParam.onSelect(index, value) - } - }) - .constraintSize({ maxWidth: this.titleWidth }) - .margin({ left: $r('sys.float.ohos_id_default_padding_start'), right: MARGIN_NUM}) - } - - @Builder LoadingProcessStyle() { - LoadingProgress() - .width(IMAGE_HEIGHT_NUM) - .height(IMAGE_HEIGHT_NUM) - .focusable(true) - .margin({ right: $r('sys.float.ohos_id_default_padding_end'), bottom: MARGIN_NUM }) - } - - @Builder TextArrowStyle(textArrow: OperationOption) { - Row() { - Row() { - if (textArrow != null) { - Text(textArrow.value) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - .margin({ right: MARGIN_NUM }) - .focusable(true) - .maxLines(DOUBLE_LINE_NUM) - } - Image($r('sys.media.ohos_ic_public_arrow_right')) - .fillColor($r('sys.color.ohos_id_color_tertiary')) - .width(IMAGE_WIDTH) - .height(IMAGE_HEIGHT_NUM) - .focusable(true) - }.margin({ left: SPACE_MARGIN, right: SPACE_MARGIN }) - } - .justifyContent(FlexAlign.End) - .focusable(true) - .margin({ left:MARGIN_NUM, right: MARGIN_NUM, bottom: MARGIN_NUM }) - .borderRadius($r('sys.float.ohos_id_corner_radius_subtab')) - .backgroundColor(this.textArrowBgColor) - .onTouch((event) => { - if (event.type === TouchType.Down) { - if (textArrow.action) { - textArrow.action() - } - this.textArrowBgColor = $r('sys.color.ohos_id_color_click_effect') - } - if (event.type === TouchType.Up) { - this.textArrowBgColor = $r('sys.color.ohos_id_color_background') - } - }) - .onHover((isHover: boolean) => { - if (isHover) { - this.textArrowBgColor = $r('sys.color.ohos_id_color_hover') - } else { - this.textArrowBgColor = $r('sys.color.ohos_id_color_background') - } - }) - .border(this.isTextArrowFocus ? - { width: this.focusBorderWidth, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => { - this.isTextArrowFocus = true; - }) - .onBlur(() => { - this.isTextArrowFocus = false; - }) - .onKeyEvent((event) => { - if (event.keyCode === 2054 || event.keyCode === 2050) { - textArrow.action && textArrow.action() - } - }) - } - - @Builder ButtonStyle(button: OperationOption) { - Row() { - if (button != null) { - Text(button.value) - .maxLines(1) - .fontColor($r('sys.color.ohos_id_color_text_primary_activated')) - .fontSize($r('sys.float.ohos_id_text_size_button2')) - .fontWeight(FontWeight.Medium) - .margin({ left: SPACE_MARGIN, right: SPACE_MARGIN }) - .focusable(true) - } - } - .onAreaChange((oldValue: Area, newValue: Area) => { - Number(parseInt(newValue.width.toString(), 0)) - console.log('wy buttonStyle1'+Number(parseInt(newValue.width.toString(), 0))) - }) - .justifyContent(FlexAlign.End) - .alignItems(VerticalAlign.Center) - .constraintSize({ maxWidth: this.flexWidth-this.titleWidth1 + 36 }) - .focusable(true) - .height(BUTTON_HEIGHT) - .margin({ left: SPACE_MARGIN, right: MARGIN_NUM }) - .borderRadius(IMAGE_WIDTH_NUM) - .backgroundColor(this.buttonBgColor) - .onTouch((event) => { - if (event.type === TouchType.Down) { - if (button.action) { - button.action() - } - this.buttonBgColor = $r('sys.color.ohos_id_color_click_effect') - } - if (event.type === TouchType.Up) { - this.buttonBgColor = $r('sys.color.ohos_id_color_background') - } - }) - .onHover((isHover: boolean) => { - if (isHover) { - this.buttonBgColor = $r('sys.color.ohos_id_color_hover') - } else { - this.buttonBgColor = $r('sys.color.ohos_id_color_background') - } - }) - .border(this.isButtonFocus ? - { width: this.focusBorderWidth, - color: $r('sys.color.ohos_id_color_focused_outline'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => { - this.isButtonFocus = true; - }) - .onBlur(() => { - this.isButtonFocus = false; - }) - .onKeyEvent((event) => { - if (event.keyCode === 2054 || event.keyCode === 2050) { - button.action && button.action() - } - }) - } - - build() { - Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.End }) { - Row() { - if (this.secondaryTitle != null && this.icon != null) { - this.ListIconStyle({ content: this.secondaryTitle }, this.icon) - } else if (this.secondaryTitle != null && this.primaryTitle != null) { - this.SubTextStyle({ content: this.primaryTitle, subContent: this.secondaryTitle }) - } else if (this.secondaryTitle != null) { - this.ListTextStyle({ content: this.secondaryTitle }) - } else if (this.select != null) { - this.SelectStyle(this.select) - } else if (this.primaryTitle != null) { - this.ContentTextStyle({ content: this.primaryTitle }) - } - } - .onAreaChange((oldValue: Area, newValue: Area) => { - this.titleWidth1 = Number(parseInt(newValue.width.toString(), 0)) - console.log('wy titleWidth1'+this.titleWidth.toString()) - }) - - Row() { - if (this.operationType === OperationType.BUTTON && this.operationItem != null) { - this.ButtonStyle(this.operationItem[0] ) - } - if (this.operationType === OperationType.ICON_GROUP && this.operationItem != null) { - Row() { - ForEach(this.operationItem, (item, index?: number) => { - if (index == 0) { - IconGroup({ item: item }) - } - if (index == 1) { - IconGroup({ item: item }) - } - if (index == 2) { // Image count - IconGroup({ item: item }) - } - }) - } - } - if (this.operationType === OperationType.TEXT_ARROW && this.operationItem != null) { - this.TextArrowStyle(this.operationItem[0]) - } - if (this.operationType === OperationType.LOADING) { - this.LoadingProcessStyle() - } - } - } - .onAreaChange((oldValue: Area, newValue: Area) => { - let flexWidth = Number(parseInt(newValue.width.toString(), 0)) - this.flexWidth = flexWidth - CONSTRAINT_NUM - this.titleWidth = this.flexWidth / DIVIDEND_WIDTH * BORDER_WIDTH - console.log('wy flexWidth'+this.flexWidth.toString()) - }) - .padding({ right: $r('sys.float.ohos_id_default_padding_end') }) - .height(this.isDuplicateLine ? DOUBLE_LINE_HEIGHT : SINGLE_LINE_HEIGHT) - } -} \ No newline at end of file diff --git a/source/Swiperefresher/SwipeRefresher.ets b/source/Swiperefresher/SwipeRefresher.ets deleted file mode 100644 index 141a8cf..0000000 --- a/source/Swiperefresher/SwipeRefresher.ets +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const LOADINGPROGRESS_SIZE = 24 -const DEFAULT_MARGIN = 16 -const ITEM_SPACE = 4 - -@Component -export struct SwipeRefresher { - @Prop - content: string = null - - @Prop - isLoading: boolean = false; - - build() { - Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { - if (this.isLoading) { - LoadingProgress() - .height(LOADINGPROGRESS_SIZE) - .width(LOADINGPROGRESS_SIZE) - .margin({ - right: ITEM_SPACE - }) - } - Text(this.content) - .fontColor($r('sys.color.ohos_id_color_text_secondary')) - .fontSize($r('sys.float.ohos_id_text_size_body2')) - } - .margin({ - top: DEFAULT_MARGIN, - bottom: DEFAULT_MARGIN - }) - } -} \ No newline at end of file diff --git a/source/TabTitleBar/TabTitleBar.ets b/source/TabTitleBar/TabTitleBar.ets deleted file mode 100755 index ae5217b..0000000 --- a/source/TabTitleBar/TabTitleBar.ets +++ /dev/null @@ -1,478 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { KeyCode } from '@ohos.multimodalInput.keyCode' - -export declare type TabTitleBarMenuItem = { - value: ResourceStr - isEnabled: boolean - action?: () => void -} - -export declare type TabTitleBarTabItem = { - title: ResourceStr - icon?: ResourceStr -} - -const PUBLIC_MORE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAAIGNIUk0AAHomAACAhAAA+' + - 'gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAO' + - 'xAAADsQBlSsOGwAABEZJREFUeNrt3D1rFFEUBuAxhmAhFlYpUohYiYWFRcAmKAhWK2pjo1iKf8BCMIKFf8BarCyMhVj4VZhGSKEg2FqJyCKWIhY' + - 'WnstMINgYsh+cmfs88BICydxw7jmzu2HvNg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBN+3r6dx+LXIqsRpa7FF8j48hm5Fn3Peo9mAEYRd' + - 'YjJ3f582Vj7nZfUe/eDsCRyMPI2h5/fyNyI/JDT6v3Tvt7sBllE15ETkxwjeORi5G3ke/6W737MgBnI68jh6ZwrcORq5HnhkC9+zAA5YXXy8jBK' + - 'V5zKXIu8jjyS7+rd+YBeNVtyrSVO9PRyBM9r94LSTfjWuTUDK9/eYIXeENUbb0zDsBi5PYc1rmj79U74wCszuih+F/ljrSi/+uud8YBGA10rayq' + - 'rnfGAVgb6FpZVV3vjAOwPNC1sqq63hkHYGWga2VVdb0XKt/8Rf1fd70zDsB4jmt5u3Tl9a59AMb6v+56ZxyArYGulVXV9c44ABtzXOup/q+73hk' + - 'H4N2cHio/Rj7r/7rrnXEAfkfuz2Gddb2v3ln/DfpgxneLzaY9xE3l9c46AH8iVyI/Z3Dt8nB/Xc+rd5H5QMy3yJemPVs6zY0edc9HUe/0Z4I/dQ' + - '/N5Vjd0oTXKp9QcKFpD2qj3r0YgO1NeRM507TH6/bifeR85IMeV++d+vTBWOV9JDcjt5rdv6uw3M3uRR7pa/Xu+wBsOxA53bTnTP/3UX1b3fNQ1' + - 'BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqyr6d/97HIpchqZLlL8TUyjmxGnnXfo96DGYBRZD1ycpc/Xzbm' + - 'bvcV9e7tAByJPIys7fH3NyI3Ij/0tHrvtL8Hm1E24UXkxATXOB65GHkb+a6/1bsvA3A28jpyaArXOhy5GnluCNS7DwNQXni9jByc4jWXIucijyO' + - '/9Lt6Zx6AV92mTFu5Mx2NPNHz6r2QdDOuRU7N8PqXJ3iBN0TV1jvjACxGbs9hnTv6Xr0zDsDqjB6K/1XuSCv6v+56ZxyA0UDXyqrqemccgLWBrp' + - 'VV1fXOOADLA10rq6rrnXEAVga6VlZV13uh8s1f1P911zvjAIznuJa3S1de79oHYKz/6653xgHYGuhaWVVd74wDsDHHtZ7q/7rrnXEA3s3pofJj5' + - 'LP+r7veGQfgd+T+HNZZ1/vqnfXfoA9mfLfYbNpD3FRe76wD8CdyJfJzBtcuD/fX9bx6F5kPxHyLfGnas6XT3OhR93wU9U5/JvhT99BcjtUtTXit' + - '8gkFF5r2oDbq3YsB2N6UN5EzTXu8bi/eR85HPuhx9d6pTx+MVd5HcjNyq9n9uwrL3exe5JG+Vu++D8C2A5HTTXvO9H8f1bfVPQ9FvQEAAAAAAAA' + - 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCn7C9HjBtwWfXpKAAAAAElFTkSuQmCC' - -@Component -export struct TabTitleBar { - tabItems: Array - menuItems: Array - @BuilderParam swiperContent: () => void - - @State tabWidth: number = 0 - @State currentIndex: number = 0 - - static readonly totalHeight = 56 - static readonly correctionOffset = -40.0 - static readonly gradientMaskWidth = 24 - private menuSectionWidth = 0 - - private scroller: Scroller = new Scroller() - private swiperController: SwiperController = new SwiperController() - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private leftContext2D: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private rightContext2D: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - @Builder GradientMask(context2D: CanvasRenderingContext2D, x0: number, y0: number, x1: number, y1: number) { - Column() { - Canvas(context2D) - .width(TabTitleBar.gradientMaskWidth) - .height(TabTitleBar.totalHeight) - .onReady(() => { - var grad = context2D.createLinearGradient(x0, y0, x1, y1) - grad.addColorStop(0.0, '#ffffffff') - grad.addColorStop(1, '#00ffffff') - context2D.fillStyle = grad - context2D.fillRect(0, 0, TabTitleBar.gradientMaskWidth, TabTitleBar.totalHeight) - }) - } - .width(TabTitleBar.gradientMaskWidth) - .height(TabTitleBar.totalHeight) - } - - build() { - Column() { - Flex({ - justifyContent: FlexAlign.SpaceBetween, - alignItems: ItemAlign.Stretch - }) { - Stack({ alignContent: Alignment.End }) { - Stack({ alignContent: Alignment.Start }) { - Column() { - List({ initialIndex: 0, scroller: this.scroller, space: 0 }) { - ForEach(this.tabItems, (tabItem, index?: number) => { - ListItem() { - TabContentItem({ - item: tabItem, - index: index, - maxIndex: this.tabItems.length - 1, - currentIndex: this.currentIndex, - onCustomClick: () => this.currentIndex = index - }) - } - }) - } - .width('100%') - .height(TabTitleBar.totalHeight) - .constraintSize({ maxWidth: this.tabWidth }) - .edgeEffect(EdgeEffect.Spring) - .listDirection(Axis.Horizontal) - .scrollBar(BarState.Off) - } - this.GradientMask(this.leftContext2D, 0, TabTitleBar.totalHeight / 2, - TabTitleBar.gradientMaskWidth, TabTitleBar.totalHeight / 2) - } - this.GradientMask(this.rightContext2D, TabTitleBar.gradientMaskWidth, - TabTitleBar.totalHeight / 2, 0, TabTitleBar.totalHeight / 2) - } - - if (this.menuItems !== undefined && this.menuItems.length > 0) { - CollapsibleMenuSection({ menuItems: this.menuItems }) - .height(TabTitleBar.totalHeight) - .onAreaChange((_oldValue: Area, newValue: Area) => { - this.menuSectionWidth = Number(newValue.width) - }) - } - } - .backgroundColor($r('sys.color.ohos_id_color_background')) - .margin({ right: $r('sys.float.ohos_id_max_padding_end') }) - .onAreaChange((_oldValue: Area, newValue: Area) => { - this.tabWidth = Number(newValue.width) - this.menuSectionWidth - }) - - Column() { - Swiper(this.swiperController) { this.swiperContent() } - .index(this.currentIndex) - .itemSpace(0) - .indicator(false) - .width('100%') - .height('100%') - .curve(Curve.Friction) - .onChange((index) => { - this.currentIndex = index - this.scroller.scrollToIndex(this.currentIndex) - this.scroller.scrollBy(TabTitleBar.correctionOffset, 0) - }) - .onAppear(() => { - this.scroller.scrollToIndex(this.currentIndex) - this.scroller.scrollBy(TabTitleBar.correctionOffset, 0) - }) - } - } - } -} - -@Component -struct CollapsibleMenuSection { - menuItems: Array - - static readonly maxCountOfVisibleItems = 1 - private static readonly focusPadding = 4 - private static readonly marginsNum = 2 - - @State isPopupShown: boolean = false - - @State isMoreIconOnFocus: boolean = false - @State isMoreIconOnHover: boolean = false - @State isMoreIconOnClick: boolean = false - - getMoreIconFgColor() { - return this.isMoreIconOnClick - ? $r('sys.color.ohos_id_color_titlebar_icon_pressed') - : $r('sys.color.ohos_id_color_titlebar_icon') - } - - getMoreIconBgColor() { - if (this.isMoreIconOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isMoreIconOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Column() { - Row() { - if (this.menuItems.length <= CollapsibleMenuSection.maxCountOfVisibleItems) { - ForEach(this.menuItems, (item) => { - ImageMenuItem({ item: item }) - }) - } else { - ForEach(this.menuItems.slice(0, CollapsibleMenuSection.maxCountOfVisibleItems - 1), (item) => { - ImageMenuItem({ item: item }) - }) - - Row() { - Image(PUBLIC_MORE) - .width(ImageMenuItem.imageSize) - .height(ImageMenuItem.imageSize) - .focusable(true) - } - .width(ImageMenuItem.imageHotZoneWidth) - .height(ImageMenuItem.imageHotZoneWidth) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .foregroundColor(this.getMoreIconFgColor()) - .backgroundColor(this.getMoreIconBgColor()) - .justifyContent(FlexAlign.Center) - .border(this.isMoreIconOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => this.isMoreIconOnFocus = true) - .onBlur(() => this.isMoreIconOnFocus = false) - .onHover((isOn) => this.isMoreIconOnHover = isOn) - .onKeyEvent((event) => { - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isMoreIconOnClick = true - } - if (event.type === KeyType.Up) { - this.isMoreIconOnClick = false - } - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - this.isMoreIconOnClick = true - } - if (event.type === TouchType.Up) { - this.isMoreIconOnClick = false - } - }) - .onClick(() => this.isPopupShown = true) - .bindPopup(this.isPopupShown, { - builder: this.popupBuilder, - placement: Placement.Bottom, - popupColor: Color.White, - enableArrow: false, - onStateChange: (e) => this.isPopupShown = e.isVisible - }) - } - } - } - .height('100%') - // .margin({ right: $r('sys.float.ohos_id_default_padding_end') }) - .justifyContent(FlexAlign.Center) - } - - @Builder popupBuilder() { - Column() { - ForEach(this.menuItems.slice(CollapsibleMenuSection.maxCountOfVisibleItems - 1, this.menuItems.length), (item, _index?) => { - ImageMenuItem({ item: item }) - }) - } - .width(ImageMenuItem.imageHotZoneWidth + CollapsibleMenuSection.focusPadding * CollapsibleMenuSection.marginsNum) - .margin({ top: CollapsibleMenuSection.focusPadding, bottom: CollapsibleMenuSection.focusPadding }) - } -} - -@Component -struct TabContentItem { - item: TabTitleBarTabItem - index: number - maxIndex: number - onCustomClick?: () => void - - @Prop currentIndex: number - - @State isOnFocus: boolean = false - @State isOnHover: boolean = false - @State isOnClick: boolean = false - - static readonly imageSize = 24 - static readonly imageHotZoneWidth = 48 - static readonly imageMagnificationFactor = 1.4 - static readonly buttonBorderRadius = 8 - static readonly focusBorderWidth = 2 - - getBgColor() { - if (this.isOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Row() { - Column() { - if (this.item.icon === undefined) { - Text(this.item.title) - .fontSize(this.index === this.currentIndex - ? $r('sys.float.ohos_id_text_size_headline7') - : $r('sys.float.ohos_id_text_size_headline9')) - .fontColor(this.index === this.currentIndex - ? $r('sys.color.ohos_id_color_titlebar_text') - : $r('sys.color.ohos_id_color_titlebar_text_off')) - .fontWeight(FontWeight.Medium) - .focusable(true) - .padding({ top: this.index === this.currentIndex ? 6 : 10, left: 8, bottom: 2, right: 8 }) - .onFocus(() => this.isOnFocus = true) - .onBlur(() => this.isOnFocus = false) - .onHover((isOn) => this.isOnHover = isOn) - .onKeyEvent((event) => { - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isOnClick = true - } - if (event.type === KeyType.Up) { - this.isOnClick = false - } - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - this.isOnClick = true - } - if (event.type === TouchType.Up) { - this.isOnClick = false - } - }) - .onClick(() => this.onCustomClick && this.onCustomClick()) - } else { - Row() { - Image(this.item.icon) - .alt(this.item.title) - .height(TabContentItem.imageSize) - .focusable(true) - .scale({ - x: this.index === this.currentIndex ? TabContentItem.imageMagnificationFactor : 1, - y: this.index === this.currentIndex ? TabContentItem.imageMagnificationFactor : 1 - }) - } - .width(TabContentItem.imageHotZoneWidth) - .height(TabContentItem.imageHotZoneWidth) - .justifyContent(FlexAlign.Center) - .onFocus(() => this.isOnFocus = true) - .onBlur(() => this.isOnFocus = false) - .onHover((isOn) => this.isOnHover = isOn) - .onKeyEvent((event) => { - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isOnClick = true - } - if (event.type === KeyType.Up) { - this.isOnClick = false - } - }) - .onTouch((event) => { - if (event.type === TouchType.Down) { - this.isOnClick = true - } - if (event.type === TouchType.Up) { - this.isOnClick = false - } - }) - .onClick(() => this.onCustomClick && this.onCustomClick()) - } - } - .justifyContent(FlexAlign.Center) - } - .height(TabTitleBar.totalHeight) - .alignItems(VerticalAlign.Center) - .justifyContent(FlexAlign.Center) - .margin({ - left: this.index === 0 ? 16 : 0, - right: this.index === this.maxIndex ? 12 : 0 - }) // sys.float.ohos_id_max_padding_start - 8 - .borderRadius(TabContentItem.buttonBorderRadius) - .backgroundColor(this.getBgColor()) - .border(this.isOnFocus ? - { width: TabContentItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - } -} - -@Component -struct ImageMenuItem { - item: TabTitleBarMenuItem - - static readonly imageSize = 24 - static readonly imageHotZoneWidth = 48 - static readonly buttonBorderRadius = 8 - static readonly focusBorderWidth = 2 - static readonly disabledImageOpacity = 0.4 - - @State isOnFocus: boolean = false - @State isOnHover: boolean = false - @State isOnClick: boolean = false - - getFgColor() { - return this.isOnClick - ? $r('sys.color.ohos_id_color_titlebar_icon_pressed') - : $r('sys.color.ohos_id_color_titlebar_icon') - } - - getBgColor() { - if (this.isOnClick) { - return $r('sys.color.ohos_id_color_click_effect') - } else if (this.isOnHover) { - return $r('sys.color.ohos_id_color_hover') - } else { - return Color.Transparent - } - } - - build() { - Row() { - Image(this.item.value) - .width(ImageMenuItem.imageSize) - .height(ImageMenuItem.imageSize) - .focusable(this.item.isEnabled) - } - .width(ImageMenuItem.imageHotZoneWidth) - .height(ImageMenuItem.imageHotZoneWidth) - .borderRadius(ImageMenuItem.buttonBorderRadius) - .foregroundColor(this.getFgColor()) - .backgroundColor(this.getBgColor()) - .justifyContent(FlexAlign.Center) - .opacity(this.item.isEnabled ? 1 : ImageMenuItem.disabledImageOpacity) - .border(this.isOnFocus ? - { width: ImageMenuItem.focusBorderWidth, - color: $r('sys.color.ohos_id_color_emphasize'), - style: BorderStyle.Solid - } : { width: 0 }) - .onFocus(() => { - if (!this.item.isEnabled) { - return - } - this.isOnFocus = true - }) - .onBlur(() => this.isOnFocus = false) - .onHover((isOn) => { - if (!this.item.isEnabled) { - return - } - this.isOnHover = isOn - }) - .onKeyEvent((event) => { - if (!this.item.isEnabled) { - return - } - if (event.keyCode !== KeyCode.KEYCODE_ENTER && event.keyCode !== KeyCode.KEYCODE_SPACE) { - return - } - if (event.type === KeyType.Down) { - this.isOnClick = true - } - if (event.type === KeyType.Up) { - this.isOnClick = false - } - }) - .onTouch((event) => { - if (!this.item.isEnabled) { - return - } - if (event.type === TouchType.Down) { - this.isOnClick = true - } - if (event.type === TouchType.Up) { - this.isOnClick = false - } - }) - .onClick(() => this.item.isEnabled && this.item.action && this.item.action()) - } -} - -export default { TabTitleBar } \ No newline at end of file diff --git a/source/ToolBar/ToolBar.ets b/source/ToolBar/ToolBar.ets deleted file mode 100644 index 06bf3fd..0000000 --- a/source/ToolBar/ToolBar.ets +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export enum ItemState { - ENABLE = 1, - DISABLE = 2, - ACTIVATE = 3 -} - -const PUBLIC_MORE = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAIGNIUk0AAHomAACAhAAA" + - "+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAEZ0FNQQAAsY58+1GTAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzA" + - "AAOxAAADsQBlSsOGwAAAYFJREFUeNrt3CFLQ1EUB/CpCwYRo8G4j2IwCNrUYjH4AfwcfgBBwWZRMNgtFqPdILJgEhGDweAZvDjmJnfv3I" + - "3fD/5l3DfOfWdv23vhdDoAAAAAAAAwzxam9L5rkePIdmSjee05chu5iHxXej5ar3saDdiJXDabGaYfOYg8VHbyU+peKryJvch1ZHnEmtXIY" + - "eQ+8lrJyU+re7HgJtYj52Ou7Uau/thwW1LrLtmAk8jKBOsH37FHFTQgte6SDdht6ZjSUusu2YBeS8eUllr3YvLmuzP6971bYwP6/zjmpYKT" + - "mVp3yQbctXRMaal1l2zAaeRngvUfkbMKGpBad8kbsffIZ2RrzPX7kacKGpBad+k74cfmE7I54ur6au4obyr6UU2re1oP43rNDc6wh1qDS/6t0" + - "n83s1o3AAAAAAAAAAAAAEAysyKS6zYrIrlusyKS6zYrwqyIdGZFJDMrIplZETPIrIh5qdusCLMi0pkVkcysiAqYFVEJsyIAAAAAAAAAKOYXUlF" + - "8EUcdfbsAAAAASUVORK5CYII="; - -@Observed -export class ToolBarOption { - content: string; - action?: () => void; - icon?: Resource; - state?: ItemState = 1; -} - -@Observed -export class ToolBarOptions extends Array { -} - -@Component -export struct ToolBar { - @ObjectLink toolBarList: ToolBarOptions - controller: TabsController - @Prop activateIndex: number = -1 - @State menuContent: { value: string, action: () => void }[] = [] - toolBarItemBackground: Resource[] = [] - @State itemBackground: Resource = $r('sys.color.ohos_id_color_toolbar_bg') - @Builder MoreTabBuilder(index: number) { - Column() { - Image(PUBLIC_MORE) - .width(24) - .height(24) - .fillColor($r('sys.color.ohos_id_color_toolbar_icon')) - .margin({ top: 8, bottom: 2 }) - .objectFit(ImageFit.Contain) - Text($r('app.string.id_string_more')) - .fontColor($r('sys.color.ohos_id_color_toolbar_text')) - .fontSize($r('sys.float.ohos_id_text_size_caption')) - .fontWeight(FontWeight.Medium) - }.width('100%').height('100%').bindMenu(this.menuContent, { offset: { x: 5, y : -10}}) - .padding({left: 4, right: 4}) - .borderRadius($r('sys.float.ohos_id_corner_radius_clicked')) - } - - @Builder TabBuilder(index: number) { - Column() { - Image(this.toolBarList[index].icon) - .width(24) - .height(24) - .fillColor(this.activateIndex === index && !(this.toolBarList[index].state === 2) - ? $r('sys.color.ohos_id_color_text_primary_activated') : $r('sys.color.ohos_id_color_primary')) - .opacity((this.toolBarList[index].state === 2) ? 0.4 : 1) - .margin({ top: 8, bottom: 2 }) - .objectFit(ImageFit.Contain) - Text(this.toolBarList[index].content) - .fontColor(this.activateIndex === index && !(this.toolBarList[index].state === 2) - ? $r('sys.color.ohos_id_color_toolbar_text_actived') : $r('sys.color.ohos_id_color_toolbar_text')) - .fontSize($r('sys.float.ohos_id_text_size_caption')) - .maxFontSize($r('sys.float.ohos_id_text_size_caption')) - .minFontSize(9) - .fontWeight(FontWeight.Medium) - .maxLines(2) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .opacity((this.toolBarList[index].state === 2) ? 0.4 : 1) - } - .width('100%').height('100%') - .focusable(!(this.toolBarList[index].state === 2)) - .focusOnTouch(!(this.toolBarList[index].state === 2)) - .padding({left: 4, right: 4}) - .borderRadius($r('sys.float.ohos_id_corner_radius_clicked')) - .backgroundColor(this.itemBackground) - .onClick(() => { - if (this.toolBarList[index].state === 3) { - if (this.activateIndex === index) - this.activateIndex = -1 - else { - this.activateIndex = index - } - } - if (!(this.toolBarList[index].state === 2)) { - this.toolBarList[index].action && this.toolBarList[index].action() - } - }) - .onHover((isHover: boolean) => { - if (isHover ) { - this.toolBarItemBackground[index] = (this.toolBarList[index].state === 2) - ? $r('sys.color.ohos_id_color_toolbar_bg'): $r('sys.color.ohos_id_color_hover') - } else { - this.toolBarItemBackground[index] = $r('sys.color.ohos_id_color_toolbar_bg') - } - this.itemBackground = this.toolBarItemBackground[index] - }) - .stateStyles({ - pressed: { - .backgroundColor((this.toolBarList[index].state === 2) ? this.toolBarItemBackground[index] : $r('sys.color.ohos_id_color_click_effect')) - }, - normal: { - .backgroundColor(this.toolBarItemBackground[index]) - } - }) - } - - refreshData() { - this.menuContent = [] - for (let i = 0; i < this.toolBarList.length; i++) { - if (i >= 4 && this.toolBarList.length > 5) { - this.menuContent[i - 4] = { - value: this.toolBarList[i].content, - action: this.toolBarList[i].action - } - } else { - this.toolBarItemBackground[i] = $r('sys.color.ohos_id_color_toolbar_bg') - this.menuContent = [] - } - } - return true - } - - aboutToAppear() { - this.refreshData() - } - build() { - Column() { - Divider().width('100%').height(1) - Column() { - Tabs({ barPosition: BarPosition.End, controller: this.controller}) { - ForEach(this.toolBarList, (item: ToolBarOption, index: number) => { - if (this.toolBarList.length <= 5) { - TabContent() { - }.tabBar(this.TabBuilder(index)) - .enabled(!(this.toolBarList[index].state === 2)) - .focusOnTouch(!(this.toolBarList[index].state === 2)) - } else if (index < 4){ - TabContent() { - }.tabBar(this.TabBuilder(index)) - .enabled(!(this.toolBarList[index].state === 2)) - .focusOnTouch(!(this.toolBarList[index].state === 2)) - } - }) - if (this.refreshData() && this.toolBarList.length > 5) { - TabContent() { - }.tabBar(this.MoreTabBuilder(4)) - } - } - .vertical(false) - .constraintSize({ minHeight: 56, maxHeight: 56}) - .barMode(BarMode.Fixed) - .onChange((index: number) => { - }) - .width('100%') - .backgroundColor($r('sys.color.ohos_id_color_toolbar_bg')) - }.width('100%') - } - } -} \ No newline at end of file diff --git a/source/TreeView/TreeView.ets b/source/TreeView/TreeView.ets deleted file mode 100644 index 8f56915..0000000 --- a/source/TreeView/TreeView.ets +++ /dev/null @@ -1,3327 +0,0 @@ -/* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export namespace TreeView { - const IMAGE_NODE_HEIGHT: number = 24 - const IMAGE_NODE_WIDTH: number = 24 - const ITEM_WIDTH: number = 0 - const ITEM_HEIGHT: number = 44 - const ITEM_HEIGHT_INPUT: number = 32 - const BORDER_WIDTH_HAS: number = 2 - const BORDER_WIDTH_NONE: number = 0 - const NODE_HEIGHT: number = 44 - const LIST_ITEM_HEIGHT_NONE: number = 0 - const LIST_ITEM_HEIGHT: number = 48 - const SHADOW_OFFSETY: number = 10 - const FLAG_NUMBER: number = 2 - const DRAG_OPACITY: number = 0.4 - const DRAG_OPACITY_NONE: number = 1 - const FLAG_LINE_HEIGHT: string = '1.5vp' - const X_OFF_SET: string = '0vp' - const Y_OFF_SET: string = '2.75vp' - const Y_BOTTOM_OFF_SET: string = '-1.25vp' - const Y_BASE_PLATE_OFF_SET: string = '1.5vp' - const COLOR_SELECT: string = '#1A0A59F7' - const COLOR_IMAGE_ROW: string = '#00000000' - const COLOR_IMAGE_EDIT: string = '#FFFFFF' - const SHADOW_COLOR: string = '#00001E' - const GRAG_POP_UP_HEIGHT: string = '48' - const LEFT_PADDING: string = '8vp' - const RIGHT_PADDING: string = '8vp' - const FLOOR_MIN_WIDTH: string = '128vp' - const FLOOR_MAX_WIDTH: string = '208vp' - const TEXT_MIN_WIDTH: string = '80vp' - const TEXT_MAX_WIDTH: string = '160vp' - const MIN_WIDTH: string = '112vp' - const MAX_WIDTH: string = '192vp' - - export class TreeListener { - _events = [] - - constructor() { - } - - /* - * Event registration and processing. - * - * The event will not be destroyed after being processed. - * - * @param type Registered Events. - * @param callback Event callback. - * @since 10 - */ - public on(type: TreeListenType, callback: (callbackParam: CallbackParam) => void) { - if (Array.isArray(type)) { - for (let i = 0, l = type.length; i < l; i++) { - this.on(type[i], callback) - } - } else { - (this._events[type] || (this._events[type] = [])).push(callback) - } - } - - /* - * Event registration and processing. - * - * After the event is processed once, it will be destroyed. - * - * @param type Registered Events. - * @param callback Event callback. - * @since 10 - */ - public once(type: TreeListenType, callback: (callbackParam: CallbackParam) => void) { - let _self = this; - function handler() { - _self.off(type, handler); - callback.apply(null, [type, callback]); - } - - handler.callback = callback; - this.on(type, handler); - } - - /* - * Destroy event. - * - * @param type Registered Events. - * @param callback Event callback. - * @since 10 - */ - public off(type: TreeListenType, callback: (callbackParam: CallbackParam) => void) { - if (type == null) { - this._events = []; - } - if (Array.isArray(type)) { - for (let i = 0, l = type.length; i < l; i++) { - this.off(type[i], callback) - } - } - const cbs = this._events[type]; - if (!cbs) { - return; - } - if (callback == null) { - this._events[type] = null - } - let cb, i = cbs.length - while (i--) { - cb = cbs[i] - if (cb === callback || cb.callback === callback) { - cbs.splice(i, 1) - break - } - } - } - - /* - * Triggers all callbacks of an event with parameters. - * - * @param event Registered Events. - * @param argument Parameters returned by the callback event. - * @since 10 - */ - public emit(event, argument: any[]) { - let _self = this - if (!this._events[event]) { - return - } - let cbs = [...this._events[event]]; - if (cbs) { - for (let i = 0, l = cbs.length; i < l; i++) { - try { - cbs[i].apply(_self,argument) - } catch (e) { - new Error(e) - } - } - } - } - } - - /* - * TreeListenType listen type. - * - * @since 10 - */ - export enum TreeListenType { - NODE_ADD = "NodeAdd", - NODE_DELETE = "NodeDelete", - NODE_MODIFY = "NodeModify", - NODE_MOVE = "NodeMove", - NODE_CLICK = 'NodeClick', - } - - /* - * TreeListenerManager. - * - * @since 10 - */ - export class TreeListenerManager { - static readonly APP_KEY_EVENT_BUS = "app_key_event_bus"; - private appEventBus: TreeListener; - private constructor() { - this.appEventBus = new TreeListener(); - } - - /* - * Obtains the EventBusManager object. - * - * @since 10 - */ - public static getInstance(): TreeListenerManager { - if (AppStorage.Get(this.APP_KEY_EVENT_BUS) == null) { - AppStorage.SetOrCreate(this.APP_KEY_EVENT_BUS, new TreeListenerManager()) - } - return AppStorage.Get(this.APP_KEY_EVENT_BUS); - } - - /* - * Obtains the EventBus object. - * - * @since 10 - */ - public getTreeListener(): TreeListener { - return this.appEventBus; - } - } - - class BasicDataSource implements IDataSource { - private listeners: DataChangeListener[] = [] - - public totalCount(): number { - return 0 - } - public getData(index: number): any { - return undefined - } - - registerDataChangeListener(listener: DataChangeListener): void { - if (this.listeners.indexOf(listener) < 0) { - this.listeners.push(listener) - } - } - unregisterDataChangeListener(listener: DataChangeListener): void { - const pos = this.listeners.indexOf(listener); - if (pos >= 0) { - this.listeners.splice(pos, 1) - } - } - - notifyDataReload(): void { - this.listeners.forEach(listener => { - listener.onDataReloaded() - }) - } - notifyDataAdd(index: number): void { - this.listeners.forEach(listener => { - listener.onDataAdd(index) - }) - } - notifyDataChange(index: number): void { - this.listeners.forEach(listener => { - listener.onDataChange(index) - }) - } - notifyDataDelete(index: number): void { - this.listeners.forEach(listener => { - listener.onDataDelete(index) - }) - } - notifyDataMove(from: number, to: number): void { - this.listeners.forEach(listener => { - listener.onDataMove(from, to) - }) - } - } - - export enum Event { - TOUCH_DOWN = 0, - TOUCH_UP = 1, - HOVER = 3, - HOVER_OVER = 4, - FOCUS = 5, - BLUR = 6, - MOUSE_BUTTON_RIGHT = 7, - DRAG = 8 - } - - export enum MenuOperation { - ADD_NODE = 0, - REMOVE_NODE = 1, - MODIFY_NODE = 2, - COMMIT_NODE = 3 - } - - export enum PopUpType { - HINTS = 0, - WARNINGS = 1 - } - - export enum InputError { - INVALID_ERROR = 0, - LENGTH_ERROR = 1, - NONE = 2 - } - - export enum Flag { - DOWN_FLAG = 0, - UP_FLAG = 1, - NONE = 2 - } - - export class NodeItem { - private nodeItem: { imageNode?: ImageNode, - mainTitleNode?: MainTitleNode, - imageCollapse?: ImageNode}; - private childNodeInfo: { isHasChildNode: boolean, childNum: number, allChildNum: number }; - menu: () => void; - nodeLevel: number; - parentNodeId: number; - currentNodeId: number; - children: Array; - data: { isFolder?: boolean, - icon?: Resource, - selectedIcon?: Resource, - editIcon?: Resource, - primaryTitle?: string, - menu?: () => void, - objectCount?: number | string } - - constructor(data: { isFolder?: boolean, - icon?: Resource, - selectedIcon?: Resource, - editIcon?: Resource, - primaryTitle?: string, - menu?: () => void, - objectCount?: number | string }) { - this.data = data; - this.nodeLevel = -1; - this.parentNodeId = -1; - this.nodeItem = { imageNode: null, mainTitleNode: null, imageCollapse: null }; - this.childNodeInfo = { isHasChildNode: false, childNum: 0, allChildNum: 0 }; - this.menu = data.menu; - if (data.icon) { - this.nodeItem.imageNode = new ImageNode(data.icon, data.selectedIcon, data.editIcon, - $r('sys.float.ohos_id_alpha_content_fourth'), - IMAGE_NODE_HEIGHT, - IMAGE_NODE_WIDTH); - } - if (data.primaryTitle) { - this.nodeItem.mainTitleNode = new MainTitleNode(data.primaryTitle); - } - this.children = []; - } - - addImageCollapse(isHasChildNode: boolean) { - if (isHasChildNode) { - this.nodeItem.imageCollapse = new ImageNode($r('sys.media.ohos_ic_public_arrow_right'), null, null, - $r('sys.float.ohos_id_alpha_content_tertiary'), - IMAGE_NODE_HEIGHT, - IMAGE_NODE_WIDTH); - this.nodeItem.imageCollapse.itemRightMargin = ($r('sys.float.ohos_id_text_paragraph_margin_xs')); - } else { - this.nodeItem.imageCollapse = null; - } - } - - getNodeItem() { - return this.nodeItem; - } - - getChildNodeInfo() { - return this.childNodeInfo; - } - - getMenu(): () => void { - return this.menu; - } - - getCurrentNodeId() { - return this.currentNodeId; - } - - getIsFolder() { - return this.data.isFolder; - } - } - - class NodeBaseInfo { - public rightMargin: Resource | number; - private width: number; - private height: number; - constructor() { - } - - set itemWidth(width: number) { - this.width = width; - } - - get itemWidth(): number { - return this.width; - } - - set itemHeight(height: number) { - this.height = height; - } - - get itemHeight(): number { - return this.height; - } - - set itemRightMargin(rightMargin: Resource | number) { - this.rightMargin = rightMargin; - } - - get itemRightMargin() { - return this.rightMargin; - } - } - - export enum NodeStatus { - Expand = 0, - Collapse - } - - export enum InteractionStatus { - Normal = 0, - Selected, - Edit, - FinishEdit, - DragInsert, - FinishDragInsert - } - - export class ImageNode extends NodeBaseInfo { - private imageSource: Resource; - private imageNormalSource: Resource; - private imageSelectedSource: Resource; - private imageEditSource: Resource; - private imageOpacity: Resource; - private currentInteractionStatus: InteractionStatus; - private imageCollapseSource: Resource; - private imageCollapseDownSource: Resource; - private isImageCollapse: boolean; - private imageCollapseRightSource: Resource; - constructor(imageSource: Resource, itemSelectedIcon: Resource, itemEditIcon: Resource, - imageOpacity: Resource, itemWidth: number, itemHeight: number) { - super(); - this.rightMargin = $r('sys.float.ohos_id_elements_margin_horizontal_m'); - this.imageSource = imageSource; - this.imageNormalSource = imageSource; - if (itemSelectedIcon != null) { - this.imageSelectedSource = itemSelectedIcon; - } else { - this.imageSelectedSource = this.imageNormalSource; - } - if (itemEditIcon != null) { - this.imageEditSource = itemEditIcon; - } else { - this.imageEditSource = this.imageNormalSource; - } - this.imageOpacity = imageOpacity; - this.itemWidth = itemWidth; - this.itemHeight = itemHeight; - this.imageCollapseSource = imageSource; - this.imageCollapseDownSource = $r('sys.media.ohos_ic_public_arrow_down'); - this.imageCollapseRightSource = $r('sys.media.ohos_ic_public_arrow_right'); - this.isImageCollapse = true; - } - - get source() { - return this.imageSource; - } - - get normalSource() { - return this.imageNormalSource; - } - - get selectedSource() { - return this.imageSelectedSource; - } - - get editSource() { - return this.imageEditSource; - } - - get opacity() { - return this.imageOpacity; - } - - get noOpacity() { - return 1; - } - - get collapseSource() { - return this.imageCollapseSource; - } - - get isCollapse() { - return this.isImageCollapse; - } - - changeImageCollapseSource(nodeStatus: NodeStatus) { - if (nodeStatus == NodeStatus.Expand) { - this.imageCollapseSource = this.imageCollapseDownSource; - } else if (nodeStatus == NodeStatus.Collapse) { - this.imageCollapseSource = this.imageCollapseRightSource; - } - } - - setImageCollapseSource(interactionStatus: InteractionStatus, nodeStatus: NodeStatus) { - if (interactionStatus === InteractionStatus.Edit || interactionStatus === InteractionStatus.DragInsert) { - this.imageCollapseDownSource = $r('sys.media.ohos_ic_public_arrow_down'); - this.imageCollapseRightSource = $r('sys.media.ohos_ic_public_arrow_right'); - this.isImageCollapse = false; - } else if (interactionStatus === InteractionStatus.FinishEdit || - interactionStatus === InteractionStatus.FinishDragInsert) { - this.imageCollapseDownSource = $r('sys.media.ohos_ic_public_arrow_down'); - this.imageCollapseRightSource = $r('sys.media.ohos_ic_public_arrow_right'); - this.isImageCollapse = true; - } - this.imageCollapseSource = (nodeStatus == NodeStatus.Collapse) ? - this.imageCollapseRightSource : this.imageCollapseDownSource; - } - - setImageSource(interactionStatus: InteractionStatus) { - switch (interactionStatus) { - case InteractionStatus.Normal: - this.imageSource = this.imageNormalSource; - this.currentInteractionStatus = interactionStatus; - break; - case InteractionStatus.Selected: - if (this.currentInteractionStatus !== InteractionStatus.Edit) { - this.imageSource = this.imageSelectedSource; - this.currentInteractionStatus = interactionStatus; - } - break; - case InteractionStatus.Edit: - this.imageSource = this.imageEditSource; - this.currentInteractionStatus = interactionStatus; - break; - case InteractionStatus.FinishEdit: - this.imageSource = this.imageSelectedSource; - this.currentInteractionStatus = interactionStatus; - break; - case InteractionStatus.DragInsert: - this.imageSource = this.imageEditSource; - this.currentInteractionStatus = interactionStatus; - break; - case InteractionStatus.FinishDragInsert: - this.imageSource = this.imageNormalSource; - this.currentInteractionStatus = interactionStatus; - break; - default: - break; - } - } - } - - export class MainTitleNode extends NodeBaseInfo { - private mainTitleName: string; - private mainTitleSetting: { fontColor: Resource, fontSize: Resource, fontWeight: FontWeight } - private showPopUpTimeout: number; - constructor(mainTitleName: string) { - super(); - this.mainTitleName = mainTitleName; - this.itemWidth = ITEM_WIDTH; - this.itemHeight = ITEM_HEIGHT; - this.rightMargin = $r('sys.float.ohos_id_text_paragraph_margin_xs'); - this.mainTitleSetting = { fontColor: $r('sys.color.ohos_id_color_primary'), - fontSize: $r('sys.float.ohos_id_text_size_body1'), - fontWeight: FontWeight.Normal }; - this.showPopUpTimeout = 0; - } - setMainTitleSelected(isSelected: boolean): void { - if (isSelected) { - this.mainTitleSetting = { fontColor: $r('sys.color.ohos_id_color_text_primary_activated'), - fontSize: $r('sys.float.ohos_id_text_size_body1'), - fontWeight: FontWeight.Regular }; - } else { - this.mainTitleSetting = { fontColor: $r('sys.color.ohos_id_color_primary'), - fontSize: $r('sys.float.ohos_id_text_size_body1'), - fontWeight: FontWeight.Normal }; - } - } - set title(text: string) { - this.mainTitleName = text; - } - get title(): string { - return this.mainTitleName; - } - - set popUpTimeout(showPopUpTimeout: number) { - this.showPopUpTimeout = showPopUpTimeout; - } - - get popUpTimeout() { - return this.showPopUpTimeout; - } - - get color(): Resource { - return this.mainTitleSetting.fontColor; - } - - - get size(): Resource { - return this.mainTitleSetting.fontSize; - } - - get weight(): FontWeight { - return this.mainTitleSetting.fontWeight; - } - - setMainTitleHighLight(isHighLight: boolean): void { - if (isHighLight) { - this.mainTitleSetting = { fontColor: $r('sys.color.ohos_id_color_primary_contrary'), - fontSize: $r('sys.float.ohos_id_text_size_body1'), - fontWeight: FontWeight.Regular }; - } else { - this.mainTitleSetting = { fontColor: $r('sys.color.ohos_id_color_primary'), - fontSize: $r('sys.float.ohos_id_text_size_body1'), - fontWeight: FontWeight.Normal }; - } - } - - } - - export class InputText extends NodeBaseInfo { - private inputTextSetting: { fontColor: Resource, fontSize: Resource, fontWeight: FontWeight } - private status: { normal: Resource, hover: Resource, press: Resource }; - private statusColor: Resource = $r('sys.color.ohos_id_color_background'); - private editItemColor: Resource = $r('sys.color.ohos_id_color_emphasize'); - private radius: Resource = $r('sys.float.ohos_id_corner_radius_default_xs') - constructor() { - super(); - this.itemWidth = ITEM_WIDTH; - this.itemHeight = ITEM_HEIGHT_INPUT; - this.rightMargin = $r('sys.float.ohos_id_text_paragraph_margin_xs'); - this.inputTextSetting = { - fontColor: $r('sys.color.ohos_id_color_text_primary'), - fontSize: $r('sys.float.ohos_id_text_size_body1'), - fontWeight: FontWeight.Normal }; - } - - get color(): Resource { - return this.inputTextSetting.fontColor; - } - - get size(): Resource { - return this.inputTextSetting.fontSize; - } - - get weight(): FontWeight { - return this.inputTextSetting.fontWeight; - } - - get borderRadius(): Resource { - return this.radius; - } - - get backgroundColor() { - return this.statusColor; - } - - get editColor() { - return this.editItemColor; - } - - get textInputStatusColor() { - return this.status; - } - } - - export class NodeInfo { - private childNodeInfo: { isHasChildNode: boolean, childNum: number, allChildNum: number }; - private parentNodeId: number; - private currentNodeId: number; - private nodeHeight: Resource | number; - private nodeLevel: number; - private nodeItem: { imageNode?: ImageNode, - inputText: InputText, - mainTitleNode?: MainTitleNode, - imageCollapse?: ImageNode }; - private nodeLeftPadding: number; - private nodeColor: Resource | string; - private nodeIsShow: boolean; - private status: { normal: Resource, hover: Resource, press: Resource, selected: string, highLight: Resource }; - private nodeBorder: { borderWidth: Resource | number, borderColor: Resource, borderRadius: Resource }; - private popUpInfo: { popUpIsShow: boolean, - popUpEnableArrow: boolean, - popUpColor: Resource, - popUpText: string | Resource, - popUpTextColor: Resource}; - private listItemHeight: number; - private menu: () => void; - private isShowTitle: boolean; - private isShowInputText: boolean; - private isSelected: boolean; - readonly borderWidth: {has: Resource | number, none: Resource | number } = - {has: BORDER_WIDTH_HAS/* 2vp */, none: BORDER_WIDTH_NONE/* 0vp */} - - /* parameter of the drag event.*/ - private nodeParam: { - isFolder?: boolean, - icon?: Resource, - selectedIcon?: Resource, - editIcon?: Resource, - primaryTitle?: string, - menu?: () => void, - secondaryTitle?: number | string - }; - private node: NodeItem; - private canShowFlagLine: boolean = false; - private isOverBorder: boolean = false; - private canShowBottomFlagLine: boolean = false; - private isHighLight: boolean = false; - private flagLineLeftMargin: number; - private isModify: boolean = false; - - constructor(node: NodeItem) { - this.childNodeInfo = node.getChildNodeInfo(); - this.nodeItem = { imageNode: null, inputText: null, mainTitleNode: null, imageCollapse: null }; - this.popUpInfo = { popUpIsShow: false, - popUpEnableArrow: false, - popUpColor: null, - popUpText: '', - popUpTextColor: null }; - this.nodeItem.imageNode = node.getNodeItem().imageNode; - this.nodeItem.inputText = new InputText(); - this.nodeItem.mainTitleNode = node.getNodeItem().mainTitleNode; - this.nodeItem.imageCollapse = node.getNodeItem().imageCollapse; - this.menu = node.menu; - this.parentNodeId = node.parentNodeId; - this.currentNodeId = node.currentNodeId; - this.nodeHeight = NODE_HEIGHT; - this.nodeLevel = node.nodeLevel; - this.nodeLeftPadding = node.nodeLevel * 12 + 8; // calculate left padding - this.nodeColor = $r('sys.color.ohos_id_color_background'); - this.nodeIsShow = (this.nodeLevel > 0) ? false : true; - this.listItemHeight = (this.nodeLevel > 0) ? LIST_ITEM_HEIGHT_NONE : LIST_ITEM_HEIGHT; - this.isShowTitle = true; - this.isShowInputText = false; - this.isSelected = false; - this.status = { normal: $r('sys.color.ohos_id_color_background_transparent'), - hover: $r('sys.color.ohos_id_color_hover'), - press: $r('sys.color.ohos_id_color_click_effect'), - selected: COLOR_SELECT, - highLight: $r('sys.color.ohos_id_color_activated') - }; - this.nodeBorder = { borderWidth: BORDER_WIDTH_NONE, - borderColor: $r('sys.color.ohos_id_color_focused_outline'), - borderRadius: $r('sys.float.ohos_id_corner_radius_clicked') - }; - this.flagLineLeftMargin = node.nodeLevel * 12 + 8; - this.node = node; - this.nodeParam = node.data; - } - - getPopUpInfo() { - return this.popUpInfo; - } - - setPopUpIsShow(isShow: boolean) { - this.popUpInfo.popUpIsShow = isShow; - } - - setPopUpEnableArrow(popUpEnableArrow: boolean) { - this.popUpInfo.popUpEnableArrow = popUpEnableArrow; - } - - setPopUpColor(color: Resource) { - this.popUpInfo.popUpColor = color; - } - - setPopUpText(text: string | Resource) { - this.popUpInfo.popUpText = text; - } - - setPopUpTextColor(popUpTextColor: Resource) { - this.popUpInfo.popUpTextColor = popUpTextColor; - } - - getIsShowTitle() { - return this.isShowTitle; - } - - getIsShowInputText() { - return this.isShowInputText; - } - - setTitleAndInputTextStatus(isModify: boolean) { - if (isModify) { - this.isShowTitle = false; - this.isShowInputText = true; - } else { - this.isShowTitle = true; - this.isShowInputText = false; - } - } - - handleImageCollapseAfterAddNode(isAddImageCollapse: boolean) { - // listTree this node already has ImageCollapse. - if (isAddImageCollapse) { - this.nodeItem.imageCollapse = new ImageNode($r('sys.media.ohos_ic_public_arrow_down'), null, null, - $r('sys.float.ohos_id_alpha_content_tertiary'), - IMAGE_NODE_HEIGHT, - IMAGE_NODE_WIDTH); - this.nodeItem.imageCollapse.itemRightMargin = ($r('sys.float.ohos_id_text_paragraph_margin_xs')); - } else { - this.nodeItem.imageCollapse = null; - } - } - - setNodeColor(nodeColor: Resource | string): void { - this.nodeColor = nodeColor; - } - - getNodeColor(): Resource | string { - return this.nodeColor; - } - - setListItemHeight(listItemHeight: number): void { - this.listItemHeight = listItemHeight; - } - - getListItemHeight(): number { - return this.listItemHeight; - } - - getNodeCurrentNodeId(): number { - return this.currentNodeId; - } - - getNodeParentNodeId(): number { - return this.parentNodeId; - } - - getNodeLeftPadding(): number { - return this.nodeLeftPadding; - } - - getNodeHeight(): Resource | number { - return this.nodeHeight; - } - - setNodeIsShow(nodeIsShow: boolean): void { - this.nodeIsShow = nodeIsShow; - } - - getNodeIsShow(): boolean { - return this.nodeIsShow; - } - - getNodeItem() { - return this.nodeItem; - } - - getNodeStatus() { - return this.status; - } - - getNodeBorder() { - return this.nodeBorder; - } - - setNodeBorder(isClearFocusStatus: boolean): void { - this.nodeBorder.borderWidth = isClearFocusStatus ? this.borderWidth.has : this.borderWidth.none; - } - - getChildNodeInfo() { - return this.childNodeInfo; - } - - getCurrentNodeId() { - return this.currentNodeId; - } - - getMenu() { - return this.menu; - } - - setIsSelected(isSelected: boolean) { - this.isSelected = isSelected; - } - - getIsSelected() { - return this.isSelected; - } - - /* To gain the information while to alter node. */ - getNodeInfoData() { - return this.nodeParam; - } - - /* To gain the tree Node(NodeItem) while to alter node. */ - public getNodeInfoNode() { - return this.node; - } - - public getIsFolder() { - return this.nodeParam.isFolder; - } - - public setCanShowFlagLine(canShowFlagLine: boolean) { - this.canShowFlagLine = canShowFlagLine; - } - - public getCanShowFlagLine(): boolean { - return this.canShowFlagLine; - } - - public setFlagLineLeftMargin(currentNodeLevel: number) { - this.flagLineLeftMargin = currentNodeLevel * 12 + 8; // calculate - } - - public getFlagLineLeftMargin(): number { - return this.flagLineLeftMargin; - } - - public getNodeLevel(): number { - return this.nodeLevel; - } - - public setIsOverBorder(isOverBorder: boolean) { - this.isOverBorder = isOverBorder; - } - - public getIsOverBorder() { - return this.isOverBorder; - } - - public setCanShowBottomFlagLine(canShowBottomFlagLine: boolean) { - this.canShowBottomFlagLine = canShowBottomFlagLine; - } - - public getCanShowBottomFlagLine() { - return this.canShowBottomFlagLine; - } - - public setIsHighLight(isHighLight: boolean) { - this.isHighLight = isHighLight; - } - - public getIsHighLight(): boolean { - return this.isHighLight; - } - - public setIsModify(isModify: boolean) { - this.isModify = isModify; - } - - public getIsModify(): boolean { - return this.isModify; - } - - } - - - export class ListNodeUtils { - private _root: NodeItem; - public addNewNodeId: number; - private readonly MaxNodeLevel = 50; - private readonly MAX_CN_LENGTH: number = 254; - private readonly MAX_EN_LENGTH: number = 255; - private readonly INITIAL_INVALID_VALUE = -1; - constructor() { - this._root = new NodeItem({}); - this._root.nodeLevel = -1; - this._root.parentNodeId = -1; - this._root.currentNodeId = -1; - } - - getNewNodeId() { - return this.addNewNodeId; - } - - traverseNodeDF(callback, root: NodeItem = this._root) { - let stack = [], found = false; - stack.unshift(root); - let currentNode = stack.shift(); - while(!found && currentNode) { - found = callback(currentNode) === true; - if (!found) { - stack.unshift(...currentNode.children); - currentNode = stack.shift(); - } - } - } - - traverseNodeBF(callback) { - let queue = []; - let found: boolean = false; - queue.push(this._root); - let currentNode: NodeItem = queue.shift(); - while(!found && currentNode) { - try { - found = callback(currentNode); - } catch(err) { - var e = err.name + " == " + err.message; - } - if (!found) { - queue.push(...currentNode.children) - currentNode = queue.shift(); - } - } - } - - private contains(callback, traversal) { - traversal.call(this, callback, true); - } - - private updateParentChildNum(parentNode: NodeItem, isAdd: boolean, count: number) { - let parentNodeId: number = parentNode.parentNodeId; - while(parentNodeId >= 0) { - this.traverseNodeDF((node: NodeItem): boolean => { - if (node.currentNodeId == parentNodeId) { - node.getChildNodeInfo().allChildNum = - isAdd ? node.getChildNodeInfo().allChildNum + count : node.getChildNodeInfo().allChildNum - count; - parentNodeId = node.parentNodeId; - return false; - } - return false; - }) - } - } - - findParentNodeId(currentNodeId: number): number { - let current = null, - callback = function(node): boolean { - if (node.currentNodeId == currentNodeId ) { - current = node; - return true; - } - return false; - }; - this.contains(callback, this.traverseNodeBF); - return current.parentNodeId; - } - - addNode(parentNodeId: number, - currentNodeId: number, - data: { isFolder?: boolean, - icon?: Resource, - selectedIcon?: Resource, - editIcon?: Resource, - primaryTitle?: string, - secondaryTitle?: number | string, - menu?: () => void, - }): ListNodeUtils { - if (this._root === null) { - this._root = new NodeItem({}); - this._root.nodeLevel = -1; - this._root.parentNodeId = -1; - this._root.currentNodeId = -1; - } - - let parent = null, - callback = function(node): boolean { - if (node.currentNodeId == parentNodeId ) { - parent = node; - return true; - } - return false; - }; - this.contains(callback, this.traverseNodeBF); - if (parent) { - let currentNode: NodeItem = new NodeItem(data); - if (parent.nodeLevel > this.MaxNodeLevel) { - throw new Error('ListNodeUtils[addNode]: The level of the tree view cannot exceed 50.'); - } - currentNode.nodeLevel = parent.nodeLevel + 1; // nodeLevel - currentNode.parentNodeId = parentNodeId; - currentNode.currentNodeId = currentNodeId; - parent.children.push(currentNode); - parent.getChildNodeInfo().isHasChildNode = true; - parent.getChildNodeInfo().childNum = parent.children.length; - parent.getChildNodeInfo().allChildNum += 1; // childNum - parent.addImageCollapse(parent.getChildNodeInfo().isHasChildNode); - this.updateParentChildNum(parent, true, 1); - return this; - } else { - throw new Error('ListNodeUtils[addNode]: Parent node not found.'); - } - } - - findNodeIndex(children, currentNodeId: number) { - let index = this.INITIAL_INVALID_VALUE; - for (let i = 0, len = children.length; i < len; i++) { - if (children[i].currentNodeId === currentNodeId) { - index = i; - break; - } - } - return index; - } - - private freeNodeMemory(rootNode: NodeItem, removeNodeIdList: number[]) { - let deleteNode: NodeItem[] = []; - let callback = function(node): boolean { - deleteNode.push(node); - return false; - }; - this.traverseNodeDF(callback, rootNode); - deleteNode.forEach((value)=>{ - removeNodeIdList.push(value.currentNodeId); - value = null; - }) - } - - removeNode(currentNodeId: number, parentNodeId: number, traversal: any) { - let parent = null, - callback = function(node): boolean { - if (node.currentNodeId == parentNodeId) { - parent = node; - return true; - } - return false; - }; - this.contains(callback, traversal); - - if (parent) { - let removeNodeIdList: number[] = []; - let index = this.findNodeIndex(parent.children, currentNodeId); - if (index < 0) { - throw new Error('Node does not exist.'); - } else { - var deleteNodeAllChildNum = parent.children[index].getChildNodeInfo().allChildNum + 1; - this.freeNodeMemory(parent.children[index], removeNodeIdList); - let node = parent.children.splice(index, 1); - node = null; - if (parent.children.length == 0) { - parent.addImageCollapse(false); - } - } - parent.getChildNodeInfo().childNum = parent.children.length; - parent.getChildNodeInfo().allChildNum -= (deleteNodeAllChildNum); - this.updateParentChildNum(parent, false, deleteNodeAllChildNum); - return removeNodeIdList; - } else { - throw new Error('Parent does not exist.'); - } - } - - getNewNodeInfo(nodeId: number) { - let parent = null, - callback = function(node): boolean { - if (node.currentNodeId == nodeId) { - parent = node; - return true; - } - return false; - }; - this.contains(callback, this.traverseNodeBF); - let newNodeInfo: { isFolder: boolean, icon: Resource, selectedIcon: Resource, editIcon: Resource, menu: () => any, secondaryTitle: number | string } = - { isFolder: true, icon: null, selectedIcon: null, editIcon: null, menu: null, secondaryTitle: '' }; - if (parent) { - if (parent.children.length === 0) { - if (parent.getNodeItem().imageNode != null) { - newNodeInfo.icon = parent.getNodeItem().imageNode.normalSource; - newNodeInfo.selectedIcon = parent.getNodeItem().imageNode.selectedSource; - newNodeInfo.editIcon = parent.getNodeItem().imageNode.editSource; - newNodeInfo.menu = parent.getMenu(); - } else { - newNodeInfo.icon = null; - newNodeInfo.selectedIcon = null; - newNodeInfo.editIcon = null; - newNodeInfo.menu = parent.getMenu(); - } - } else if (parent.children.length > 0) { - if (parent.getNodeItem().imageNode != null) { - newNodeInfo.icon = (parent.children[0].getNodeItem().imageNode != null) ? - parent.children[0].getNodeItem().imageNode.normalSource : null; - newNodeInfo.selectedIcon = (parent.children[0].getNodeItem().imageNode != null) ? - parent.children[0].getNodeItem().imageNode.selectedSource : null; - newNodeInfo.editIcon = (parent.children[0].getNodeItem().imageNode != null) ? - parent.children[0].getNodeItem().imageNode.editSource : null; - newNodeInfo.menu = parent.children[0].getMenu(); - } else { - newNodeInfo.icon = null; - newNodeInfo.selectedIcon = null; - newNodeInfo.editIcon = null; - newNodeInfo.menu = parent.children[0].getMenu(); - } - } - } - return newNodeInfo; - } - - getClickChildId(nodeId: number) { - let parent = null, - callback = function(node): boolean { - if (node.currentNodeId == nodeId) { - parent = node; - return true; - } - return false; - }; - this.contains(callback, this.traverseNodeBF); - if (parent) { - if (parent.children.length === 0) { - return []; - } else if (parent.children.length > 0) { - var nodeInfo: { itemId: number, itemIcon: Resource, itemTitle: string } = - { itemId: null, itemIcon: null, itemTitle: null } - var childrenNodeInfo: Array = new Array(parent.children.length); - for (let i = 0; i < childrenNodeInfo.length; i++) { - childrenNodeInfo[i] = 0; - } - for (let i = 0; i < parent.children.length && i < childrenNodeInfo.length; i++) { - childrenNodeInfo[i] = parent.children[i].currentNodeId; - } - return childrenNodeInfo; - } - } - return []; - } - - getClickNodeChildrenInfo(nodeId: number) { - let parent = null, - callback = function(node): boolean { - if (node.currentNodeId == nodeId) { - parent = node; - return true; - } - return false; - }; - this.contains(callback, this.traverseNodeBF); - if (parent) { - if (parent.children.length === 0) { - return []; - } else if (parent.children.length > 0) { - var nodeInfo: { itemId: number, itemIcon: Resource, itemTitle: string } = - { itemId: null, itemIcon: null, itemTitle: null } - var childrenNodeInfo: Array<{ itemId: number, itemIcon: Resource, itemTitle: string, isFolder: boolean }> = new Array(parent.children.length); - for (let i = 0; i < childrenNodeInfo.length; i++) { - childrenNodeInfo[i] = { itemId: null, itemIcon: null, itemTitle: null, isFolder: null }; - } - for (let i = 0; i < parent.children.length && i < childrenNodeInfo.length; i++) { - childrenNodeInfo[i].itemId = parent.children[i].currentNodeId; - if (parent.children[i].getNodeItem().imageNode) { - childrenNodeInfo[i].itemIcon = parent.children[i].getNodeItem().imageNode.source; - } - if (parent.children[i].getNodeItem().mainTitleNode) { - childrenNodeInfo[i].itemTitle = parent.children[i].getNodeItem().mainTitleNode.title; - } - childrenNodeInfo[i].isFolder = parent.children[i].getIsFolder(); - } - return childrenNodeInfo; - } - } - return []; - } - - public checkMainTitleIsValid(title: string) : boolean { - let invalid = /[\\\/:*?"<>|]/; - let invalidLength = /^[\u4e00-\u9fa5]+$/; - if (invalid.test(title)) { - return false; - } - if ((invalidLength.test(title) && title.length > this.MAX_CN_LENGTH) || - (!invalidLength.test(title) && title.length > this.MAX_EN_LENGTH)) { - return false; - } - return true; - } - - /* - * DFS: Depth first traversal in drag event. - * @param callback - */ - dragTraverseNodeDF(callback, root: NodeItem = this._root, listNode) { - let stack = [], found = false; - stack.unshift(root); - let currentNode = stack.shift(); - while(!found && currentNode) { - found = callback(currentNode, listNode) === true; - if (!found) { - stack.unshift(...currentNode.children); - currentNode = stack.shift(); - } - } - } - - /* - * Add the first dragging node in dragging nodes - * 1.the first dragging node needs to distinguish the position to insert - */ - addDragNode(parentNodeId: number, - currentNodeId: number, - insertCurrentNodeId: number, - isAfter: boolean, - data: { isFolder?: boolean, - icon?: Resource, - selectedIcon?: Resource, - editIcon?: Resource, - primaryTitle?: string, - menu?: () => any, - objectCount?: number }): ListNodeUtils { - - if (this._root === null) { - this._root = new NodeItem({}); - this._root.nodeLevel = this.INITIAL_INVALID_VALUE; - this._root.parentNodeId = this.INITIAL_INVALID_VALUE; - this._root.currentNodeId = this.INITIAL_INVALID_VALUE; - } - - let parent = null, - callback = function(node): boolean { - if (node.currentNodeId == parentNodeId ) { - parent = node; - return true; - } - return false; - }; - this.contains(callback, this.traverseNodeBF); - if (parent) { - let currentNode: NodeItem = new NodeItem(data); - if (parent.nodeLevel > this.MaxNodeLevel) { - throw new Error('ListNodeUtils[addNode]: The level of the tree view cannot exceed 50.'); - } - currentNode.nodeLevel = parent.nodeLevel + 1; - currentNode.parentNodeId = parentNodeId; - currentNode.currentNodeId = currentNodeId; - let insertIndex: number = this.INITIAL_INVALID_VALUE; - if (parent.children.length) { - for (let i = 0; i < parent.children.length; i++) { - if ( parent.children[i].getCurrentNodeId() == insertCurrentNodeId) { - insertIndex = i; - break; - } - } - if (isAfter) { - parent.children.splice(insertIndex + 1, 0, currentNode); - } else { - parent.children.splice(insertIndex, 0, currentNode); - } - } else { - parent.children.push(currentNode); - } - parent.getChildNodeInfo().isHasChildNode = true; - parent.getChildNodeInfo().childNum = parent.children.length; - parent.getChildNodeInfo().allChildNum += 1; - parent.addImageCollapse(parent.getChildNodeInfo().isHasChildNode); - this.updateParentChildNum(parent, true, 1); - return this; - } else { - throw new Error('ListNodeUtils[addNode]: Parent node not found.'); - } - } - - } - - - export class ListNodeDataSource extends BasicDataSource { - readonly ROOT_NODE_ID = -1; - private listNodeUtils: ListNodeUtils = new ListNodeUtils(); - private listNode: NodeInfo[] = []; - private readonly INITIAL_INVALID_VALUE = -1; - private lastIndex: number = -1; // record the last focused node. - thisIndex: number = -1; // records clicked nodes in the current period. - private modifyNodeIndex: number = -1; // records the nodes edited in the current period. - modifyNodeId: number = -1 - private currentOperation: MenuOperation; - private expandAndCollapseInfo = new Map(); - private loadedNodeIdAndIndexMap = new Map(); // [currentNodeId, index] - private isTouchDown: boolean = false; - private appEventBus: TreeListener = TreeListenerManager.getInstance().getTreeListener(); - - /* parameter of the drag event. */ - private isInnerDrag: boolean = false; // Judge whether it is an internal drag event. - private isDrag: boolean = false; // It is used to handle events(For example, prevent press events) during global drag. - private draggingCurrentNodeId: number = this.INITIAL_INVALID_VALUE; // Record the current ID of the dragged node. - private draggingParentNodeId: number = this.INITIAL_INVALID_VALUE; // Record the parent ID of the dragged node. - private currentNodeInfo: NodeInfo = null; // To solve the problem of currentIndex missed in onDrop event. - private listItemOpacity : number = 1; // It is used to set the opacity of the node when dragged. - private lastPassIndex: number = this.INITIAL_INVALID_VALUE; // record the last passing node index in drag. - private lastPassId: number = this.INITIAL_INVALID_VALUE; // record the last passing node Id in drag. - private thisPassIndex: number = this.INITIAL_INVALID_VALUE; // record the current passing node in drag. - private lastDelayExpandIndex: number = this.INITIAL_INVALID_VALUE; // record last passing node in delay expand event. - private timeoutExpandId: number = this.INITIAL_INVALID_VALUE; - private lastTimeoutExpandId: number = this.INITIAL_INVALID_VALUE; - private clearTimeoutExpandId: number = this.INITIAL_INVALID_VALUE; - private timeoutHighLightId: number = this.INITIAL_INVALID_VALUE; - private lastTimeoutHighLightId: number = this.INITIAL_INVALID_VALUE; - private clearTimeoutHighLightId: number = this.INITIAL_INVALID_VALUE; - private lastDelayHighLightIndex: number = this.INITIAL_INVALID_VALUE; // record last passing node in HighLight event. - private lastDelayHighLightId: number = this.INITIAL_INVALID_VALUE; //record last passing node Id in HighLight event. - private nodeIdAndSubtitleMap = new Map(); // [currentNodeId, subtitle] - private flag: Flag = Flag.NONE; - private selectedParentNodeId: number = this.INITIAL_INVALID_VALUE; - private selectedParentNodeSubtitle: any = ''; - private insertNodeSubtitle: any = ''; - private currentFocusNodeId: number = this.INITIAL_INVALID_VALUE; - private lastFocusNodeId: number = this.INITIAL_INVALID_VALUE; - private addFocusNodeId: number = this.INITIAL_INVALID_VALUE; - - readonly FLAG_LINE: { flagLineHeight: string, - flagLineColor: Resource, - xOffset: string, - yTopOffset: string, - yBottomOffset: string, - yBasePlateOffset: string } = { - flagLineHeight: FLAG_LINE_HEIGHT, - flagLineColor: $r('sys.color.ohos_id_color_activated'), - xOffset: X_OFF_SET, - yTopOffset: Y_OFF_SET, - yBottomOffset: Y_BOTTOM_OFF_SET, - yBasePlateOffset: Y_BASE_PLATE_OFF_SET - } - - private readonly DRAG_POPUP: { floorConstraintSize: { minWidth: string, maxWidth: string }, - textConstraintSize: { minWidth1: string, maxWidth1: string, - minWidth2: string, maxWidth2: string }, - padding: { left: string, right: string }, - backgroundColor: ResourceColor, - height: string, - shadow: { radius: Resource, color: ResourceColor, offsetX?: number, offsetY?: number }, - borderRadius : Resource, - fontColor: Resource, - fontSize: Resource, - fontWeight: FontWeight - imageOpacity: Resource } = { - floorConstraintSize: { minWidth: FLOOR_MIN_WIDTH, maxWidth: FLOOR_MAX_WIDTH }, - textConstraintSize: { minWidth1: TEXT_MIN_WIDTH, maxWidth1: TEXT_MAX_WIDTH, minWidth2: MIN_WIDTH, maxWidth2: MAX_WIDTH }, - padding: { left: LEFT_PADDING, right: RIGHT_PADDING }, - backgroundColor: COLOR_IMAGE_EDIT, - height: GRAG_POP_UP_HEIGHT, - shadow: { radius: $r('sys.float.ohos_id_corner_radius_default_m'), color: SHADOW_COLOR, offsetX: 0, offsetY: SHADOW_OFFSETY }, - borderRadius: $r('sys.float.ohos_id_corner_radius_clicked'), - fontColor: $r('sys.color.ohos_id_color_primary'), - fontSize: $r('sys.float.ohos_id_text_size_body1'), - fontWeight: FontWeight.Regular, - imageOpacity: $r('sys.float.ohos_id_alpha_content_fourth') - } - - private readonly subTitle: { normalFontColor: Resource, - highLightFontColor: Resource, - fontSize: Resource, - fontWeight: FontWeight, - margin: { left: string, right: string } } = { - normalFontColor: $r('sys.color.ohos_id_color_secondary'), - highLightFontColor: $r('sys.color.ohos_id_color_primary_contrary'), - fontSize: $r('sys.float.ohos_id_text_size_body2'), - fontWeight: FontWeight.Regular, - margin: { left: '4vp', right: '24' } - } - - private changeNodeColor(index: number, color: Resource | string): void { - this.listNode[index].setNodeColor(color); - } - - private getNodeColor(index) { - return this.listNode[index].getNodeColor(); - } - - private handleFocusEffect(index: number, isClearFocusStatus: boolean) { - if (this.listNode[index].getNodeIsShow()) { - this.listNode[index].setNodeBorder(isClearFocusStatus); - } - } - - private setImageSource(index: number, interactionStatus: InteractionStatus) { - let nodeInfo: NodeInfo = this.listNode[index]; - nodeInfo.setIsSelected(interactionStatus === InteractionStatus.Selected || - interactionStatus === InteractionStatus.Edit || interactionStatus === InteractionStatus.FinishEdit); - if (nodeInfo.getNodeItem().mainTitleNode != null && interactionStatus != InteractionStatus.DragInsert && - interactionStatus != InteractionStatus.FinishDragInsert) { - nodeInfo.getNodeItem().mainTitleNode.setMainTitleSelected(interactionStatus === InteractionStatus.Selected || - interactionStatus === InteractionStatus.FinishEdit); - } - if (nodeInfo.getNodeItem().imageNode != null) { - nodeInfo.getNodeItem().imageNode.setImageSource(interactionStatus); - } - } - - private setImageCollapseSource(index: number, interactionStatus: InteractionStatus) { - let nodeInfo: NodeInfo = this.listNode[index]; - if (nodeInfo.getNodeItem().imageCollapse != null) { - nodeInfo.getNodeItem().imageCollapse.setImageCollapseSource(interactionStatus, - this.expandAndCollapseInfo.get(nodeInfo.getCurrentNodeId())); - } - } - - public clearLastIndexStatus() { - if (this.lastIndex == -1 || this.lastIndex >= this.listNode.length) { - return; - } - this.setImageSource(this.lastIndex, InteractionStatus.Normal); - this.changeNodeColor(this.lastIndex, this.listNode[this.lastIndex].getNodeStatus().normal); - this.handleFocusEffect(this.lastIndex, false); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(this.listNode[this.lastIndex].getCurrentNodeId())); - } - - private changeNodeStatus(clickIndex: number): void { - let thisIndex: number = clickIndex; - let tmp: NodeInfo[] = this.ListNode; - let nodeId = tmp[clickIndex].getCurrentNodeId(); - if (this.expandAndCollapseInfo.get(nodeId) == NodeStatus.Expand) { - this.expandAndCollapseInfo.set(nodeId, NodeStatus.Collapse); - tmp[thisIndex].getNodeItem().imageCollapse.changeImageCollapseSource(NodeStatus.Collapse); - } else if (this.expandAndCollapseInfo.get(nodeId) == NodeStatus.Collapse) { - this.expandAndCollapseInfo.set(nodeId, NodeStatus.Expand); - tmp[thisIndex].getNodeItem().imageCollapse.changeImageCollapseSource(NodeStatus.Expand); - } - } - - private handleExpandAndCollapse(clickIndex: number) { - let thisIndex: number = clickIndex; - let tmp: NodeInfo[] = this.ListNode; - let nodeId = tmp[thisIndex].getCurrentNodeId(); - if (!this.expandAndCollapseInfo.has(nodeId)) { - return; - } - - let rootNodeStatus: NodeStatus = this.expandAndCollapseInfo.get(nodeId); - if (tmp[thisIndex].getChildNodeInfo().isHasChildNode && rootNodeStatus == NodeStatus.Collapse) { - for(var i = 0; i < tmp[thisIndex].getChildNodeInfo().allChildNum; i++) { - tmp[thisIndex + 1 + i].setNodeIsShow(false); - tmp[thisIndex + 1 + i].setListItemHeight(LIST_ITEM_HEIGHT_NONE); - } - this.notifyDataReload(); - return; - } - - let childNum: number[] = new Array(tmp[thisIndex].getChildNodeInfo().childNum); - childNum[0] = thisIndex + 1; - let index = 1; - while(index < tmp[thisIndex].getChildNodeInfo().childNum) { - childNum[index] = childNum[index -1] + tmp[childNum[index - 1]].getChildNodeInfo().allChildNum + 1; - index++; - } - if (rootNodeStatus == NodeStatus.Expand) { - for(var i = 0; i < childNum.length; i++) { - tmp[childNum[i]].setNodeIsShow(true); - tmp[childNum[i]].setListItemHeight(LIST_ITEM_HEIGHT); - let nodeId = tmp[childNum[i]].getCurrentNodeId(); - if(this.expandAndCollapseInfo.get(nodeId) == NodeStatus.Expand) { - this.handleExpandAndCollapse(childNum[i]); - } - } - } - childNum = null; - this.notifyDataReload(); - } - - public init(listNodeUtils: ListNodeUtils) { - let index = 0; - this.listNode = []; - this.listNodeUtils = listNodeUtils; - this.loadedNodeIdAndIndexMap.clear(); - this.listNodeUtils.traverseNodeDF((node: NodeItem): boolean => { - if (node.currentNodeId >= 0) { - var nodeInfo: NodeInfo = new NodeInfo(node); - this.listNode.push(nodeInfo); - if (nodeInfo.getChildNodeInfo().isHasChildNode) { - this.expandAndCollapseInfo.set(nodeInfo.getCurrentNodeId(), NodeStatus.Collapse); - } - if (nodeInfo.getNodeIsShow()) { - this.loadedNodeIdAndIndexMap.set(nodeInfo.getCurrentNodeId(), index++); - } - if (nodeInfo.getIsFolder()) { - this.nodeIdAndSubtitleMap.set(nodeInfo.getCurrentNodeId(), - nodeInfo.getNodeInfoData().secondaryTitle || nodeInfo.getNodeInfoData().secondaryTitle == 0 ? - nodeInfo.getNodeInfoData().secondaryTitle : ''); - } - } - return false; - }); - } - - private refreshRemoveNodeData(removeNodeIdList: number[], parentNodeInfo: NodeInfo) { - let deleteIndexList: number[] = []; - for (let i = 0; i < removeNodeIdList.length; i++) { - for (let j = 0; j < this.listNode.length; j++) { - if (this.listNode[j].getNodeCurrentNodeId() == removeNodeIdList[i]) { - let currentNodeId = this.listNode[j].getNodeCurrentNodeId(); - if (this.loadedNodeIdAndIndexMap.has(currentNodeId)) { - // this.listNode index to lazyForEach index. - deleteIndexList.push(this.loadedNodeIdAndIndexMap.get(currentNodeId)); - } - let deleteNode = this.listNode.splice(j, 1); - deleteNode = null; // free memory - if (this.expandAndCollapseInfo.has(removeNodeIdList[i])) { - this.expandAndCollapseInfo.delete(removeNodeIdList[i]); // delete deleteNode expandAndCollapseInfo. - } - break; - } - } - } - deleteIndexList.forEach((value)=>{ - this.notifyDataDelete(value); // notifyDataDelete do not update data. - this.notifyDataChange(value); // call notifyDataChange to update data. - }) - let index: number = 0; - for (let i = 0; i < this.listNode.length; i++) { - if (this.listNode[i].getNodeCurrentNodeId() == parentNodeInfo.getNodeCurrentNodeId()) { - if (parentNodeInfo.getNodeItem().imageCollapse == null) { - this.listNode[i].handleImageCollapseAfterAddNode(false); - // delete deleteNode parentNode expandAndCollapseInfo. - this.expandAndCollapseInfo.delete(parentNodeInfo.getNodeCurrentNodeId()); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(this.listNode[i].getNodeCurrentNodeId())); - } - break; - } - } - let callbackParam: CallbackParam = {currentNodeId: parentNodeInfo.getNodeCurrentNodeId(), parentNodeId: parentNodeInfo.getNodeParentNodeId()}; - this.appEventBus.emit(TreeListenType.NODE_DELETE, [callbackParam]); - } - - private refreshAddNodeData(addNodeIdList: number[]) { - var addNodeInfo: NodeInfo; - this.listNodeUtils.traverseNodeDF((node: NodeItem): boolean => { - if (node.currentNodeId === addNodeIdList[0]) { - addNodeInfo = new NodeInfo(node); - return true; - } - return false; - }); - addNodeInfo.setIsModify(true); - - let index: number = 0; - for (let i = 0; i < this.listNode.length; i++) { - if (this.listNode[i].getNodeCurrentNodeId() == addNodeInfo.getNodeParentNodeId()) { - index = i; - if (this.listNode[i].getNodeItem().imageCollapse == null) { - this.listNode[i].handleImageCollapseAfterAddNode(true); - this.notifyDataChange(index); - } else if (this.expandAndCollapseInfo.get(this.listNode[i].getNodeCurrentNodeId()) == NodeStatus.Collapse) { - this.changeNodeStatus(index); - } - this.listNode.splice(i + 1, 0, addNodeInfo); - this.listNode[i + 1].setTitleAndInputTextStatus(true); // false->true: realize inner Interaction. - this.listNode[i + 1].setNodeIsShow(true); - this.listNode[i + 1].setListItemHeight(LIST_ITEM_HEIGHT); - this.setImageSource(i + 1, InteractionStatus.Edit); // Normal->Edit : realize inner Interaction. - this.currentOperation = MenuOperation.ADD_NODE; - this.notifyDataAdd(i + 1); - this.notificationNodeInfo(i+1, this.currentOperation); - break; - } - } - this.modifyNodeIndex = index + 1; - this.expandAndCollapseInfo.set(addNodeInfo.getNodeParentNodeId(), NodeStatus.Expand); - this.handleExpandAndCollapse(index); - } - - public refreshData(listNodeUtils: ListNodeUtils, operation: MenuOperation, - parentNodeId: number, changeNodeIdList: number[]) { - let parentNodeInfo: NodeInfo; - this.listNodeUtils = listNodeUtils; - this.listNodeUtils.traverseNodeDF((node: NodeItem): boolean => { - if (node.currentNodeId == parentNodeId) { - parentNodeInfo = new NodeInfo(node); - return true; - } - return false; - }); - - if (operation === MenuOperation.REMOVE_NODE) { - this.nodeIdAndSubtitleMap.set(parentNodeId, this.selectedParentNodeSubtitle); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(parentNodeId)); - this.refreshRemoveNodeData(changeNodeIdList, parentNodeInfo); - } - - if (operation === MenuOperation.ADD_NODE) { - this.addFocusNodeId = changeNodeIdList[0]; - this.nodeIdAndSubtitleMap.set(this.getClickNodeId(), this.selectedParentNodeSubtitle); - this.nodeIdAndSubtitleMap.set(changeNodeIdList[0], this.insertNodeSubtitle); - this.refreshAddNodeData(changeNodeIdList); - } - } - - public setClickIndex(index: number) { - this.thisIndex = index; - } - - public getClickNodeId(): number { - if (this.thisIndex < 0 || this.thisIndex >= this.ListNode.length) { - return -1; - } - return this.ListNode[this.thisIndex].getCurrentNodeId(); - } - - public expandAndCollapseNode(clickIndex: number) { - this.changeNodeStatus(clickIndex); - this.handleExpandAndCollapse(clickIndex) - } - - public getIsTouchDown(): boolean { - return this.isTouchDown; - } - - public getLastIndex(): number { - return this.lastIndex; - } - - public handleEvent(event: Event, index: number) { - /* Return while the event is dragging event. */ - if (this.isDrag) { - return; - } - - if (event === Event.TOUCH_DOWN || event === Event.TOUCH_UP || event === Event.MOUSE_BUTTON_RIGHT) { - if (index != this.lastIndex) { - this.clearLastIndexStatus(); - } - } - let lazyForEachIndex = this.loadedNodeIdAndIndexMap.get(this.listNode[index].getCurrentNodeId()); - switch(event) { - case Event.TOUCH_DOWN: - this.isTouchDown = true; - this.changeNodeColor(index, this.listNode[index].getNodeStatus().press); - break; - case Event.TOUCH_UP: { - if (this.isInnerDrag) { - this.isInnerDrag = false; - } - this.isTouchDown = false; - let nodeInfo: NodeInfo = this.listNode[index]; - this.setImageSource(index, InteractionStatus.Selected); - this.lastIndex = index; - this.changeNodeColor(index, nodeInfo.getNodeStatus().selected); - this.notifyDataChange(lazyForEachIndex); - break; - } - case Event.HOVER: - if (this.getNodeColor(index) != this.listNode[index].getNodeStatus().selected) { - this.changeNodeColor(index, this.listNode[index].getNodeStatus().hover); - this.notifyDataChange(lazyForEachIndex); - } - break; - case Event.HOVER_OVER: - if (this.getNodeColor(index) != this.listNode[index].getNodeStatus().selected) { - this.changeNodeColor(index, this.listNode[index].getNodeStatus().normal); - this.notifyDataChange(lazyForEachIndex); - } - break; - case Event.FOCUS: - this.handleFocusEffect(index, true); - this.notifyDataChange(lazyForEachIndex); - break; - case Event.BLUR: - this.handleFocusEffect(index, false); - this.notifyDataChange(lazyForEachIndex); - break; - case Event.MOUSE_BUTTON_RIGHT: - this.lastIndex = index; - this.finishEditing(); - break; - case Event.DRAG: - this.isTouchDown = false; - let nodeInfo: NodeInfo = this.listNode[index]; - this.setImageSource(index, InteractionStatus.Selected); - this.lastIndex = index; - this.changeNodeColor(index, nodeInfo.getNodeStatus().selected); - this.notifyDataChange(lazyForEachIndex); - break; - default: - break; - } - } - - private notificationNodeInfo(addNodeId: number, operation: MenuOperation) { - if (operation === MenuOperation.MODIFY_NODE) { - let modifyNodeInfo: NodeInfo = this.listNode[this.modifyNodeIndex]; - let backParamModify: CallbackParam = { currentNodeId: modifyNodeInfo.getNodeCurrentNodeId(), - parentNodeId: modifyNodeInfo.getNodeParentNodeId() } - this.appEventBus.emit(TreeListenType.NODE_MODIFY, - [backParamModify]); - } else if (operation === MenuOperation.ADD_NODE) { - let addNodeInfo: NodeInfo = this.listNode[addNodeId]; - let icon: Resource = (addNodeInfo.getNodeItem().imageNode != null) ? - addNodeInfo.getNodeItem().imageNode.source : null; - let selectedIcon: Resource = (addNodeInfo.getNodeItem().imageNode != null) ? - addNodeInfo.getNodeItem().imageNode.selectedSource : null; - let editIcon: Resource = (addNodeInfo.getNodeItem().imageNode != null) ? - addNodeInfo.getNodeItem().imageNode.editSource : null; - let callbackParam: CallbackParam = { currentNodeId: addNodeInfo.getNodeCurrentNodeId(), - parentNodeId: addNodeInfo.getNodeParentNodeId() } - this.appEventBus.emit(TreeListenType.NODE_ADD, - [callbackParam]); - } - } - - public finishEditing() { - if (this.modifyNodeIndex!= -1) { - this.setImageSource(this.modifyNodeIndex, InteractionStatus.FinishEdit); - this.setImageCollapseSource(this.modifyNodeIndex, InteractionStatus.FinishEdit); - this.listNode[this.modifyNodeIndex].setIsModify(false); - this.listNode[this.modifyNodeIndex].setTitleAndInputTextStatus(false); - this.notificationNodeInfo(this.modifyNodeIndex, this.currentOperation); - this.notifyDataChange(this.modifyNodeIndex); - } - } - - public setItemVisibilityOnEdit(nodeId: number, operation: MenuOperation) { - let index: number = -1; - if (nodeId == -1) { - return; - } - if (operation === MenuOperation.MODIFY_NODE) { - for (let i = 0; i < this.listNode.length; i++) { // nodeId to find index - if (this.listNode[i].getCurrentNodeId() == nodeId) { - index = i; - break; - } - } - let nodeInfo: NodeInfo = this.listNode[index]; - nodeInfo.setIsModify(true); - if (nodeInfo.getNodeItem().mainTitleNode === null) { - return; // no title - } - - this.currentOperation = MenuOperation.MODIFY_NODE; - nodeInfo.setTitleAndInputTextStatus(true); - this.setImageSource(index, InteractionStatus.Edit); - this.setImageCollapseSource(index, InteractionStatus.Edit); - this.modifyNodeIndex = index; - if (nodeInfo.getNodeItem().inputText) { - if (nodeInfo.getNodeItem().imageCollapse != null) { - nodeInfo.getNodeItem().inputText.rightMargin = - $r('sys.float.ohos_id_text_paragraph_margin_xs') - } else { - nodeInfo.getNodeItem().inputText.rightMargin = - $r('sys.float.ohos_id_elements_margin_horizontal_m') - } - } - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(nodeId)); - } - index = nodeId; - if (operation === MenuOperation.COMMIT_NODE) { - let nodeInfo: NodeInfo = this.listNode[index]; - nodeInfo.setTitleAndInputTextStatus(false); - nodeInfo.setIsModify(false); - this.setImageSource(index, InteractionStatus.FinishEdit); - this.setImageCollapseSource(index, InteractionStatus.FinishEdit); - this.notificationNodeInfo(this.modifyNodeIndex, this.currentOperation); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(nodeInfo.getCurrentNodeId())); - } - } - - public setPopUpInfo(popUpType: PopUpType, inputError: InputError, isShow: boolean, index: number) { - let nodeInfo: NodeInfo = this.listNode[index]; - nodeInfo.setPopUpIsShow(isShow); - // this.listNode index to lazyForEach index. - let lazyForEachIndex = this.loadedNodeIdAndIndexMap.get(nodeInfo.getCurrentNodeId()); - if (!isShow) { - this.notifyDataChange(lazyForEachIndex); - return; - } - if (popUpType === PopUpType.HINTS) { - if (nodeInfo.getNodeItem().mainTitleNode != null) { - nodeInfo.setPopUpText(nodeInfo.getNodeItem().mainTitleNode.title); - } else { - nodeInfo.setPopUpText(''); - nodeInfo.setPopUpIsShow(false); - } - nodeInfo.setPopUpEnableArrow(false); - nodeInfo.setPopUpColor($r('sys.color.ohos_id_color_background')); - nodeInfo.setPopUpTextColor($r('sys.color.ohos_id_color_text_secondary')); - } else if (popUpType === PopUpType.WARNINGS) { - if (nodeInfo.getNodeItem().inputText != null) { - if (inputError === InputError.INVALID_ERROR) { - nodeInfo.setPopUpText("invalid error"); - } else if (inputError === InputError.LENGTH_ERROR) { - nodeInfo.setPopUpText("length error"); - } - nodeInfo.setPopUpEnableArrow(true); - nodeInfo.setPopUpColor($r('sys.color.ohos_id_color_help_tip_bg')); - nodeInfo.setPopUpTextColor($r('sys.color.ohos_id_color_text_hint_contrary')); - } - } - this.notifyDataChange(lazyForEachIndex); - } - - public setShowPopUpTimeout(timeout: number, index: number) { - if (this.listNode[index].getNodeItem().mainTitleNode != null) { - this.listNode[index].getNodeItem().mainTitleNode.popUpTimeout = timeout; - } - // this.notifyDataChange(index) lazyForEachIndex; - let lazyForEachIndex = this.loadedNodeIdAndIndexMap.get(this.listNode[index].getCurrentNodeId()); - this.notifyDataChange(lazyForEachIndex); - } - - public setMainTitleNameOnEdit(index: number, text: string) { - this.modifyNodeIndex = index; - if (this.listNode[index].getNodeItem().mainTitleNode != null) { - this.listNode[index].getNodeItem().mainTitleNode.title = text; - // this.listNode index to lazyForEach index. - let lazyForEachIndex = this.loadedNodeIdAndIndexMap.get(this.listNode[index].getCurrentNodeId()); - this.notifyDataChange(lazyForEachIndex); - } - } - - public get ListNode(): NodeInfo[] { - return this.listNode; - } - - public totalCount(): number { - let count: number = 0; - let index: number = 0; - this.loadedNodeIdAndIndexMap.clear(); - for (let i =0 ; i < this.listNode.length; i++) { - if (this.listNode[i].getNodeIsShow()) { - this.loadedNodeIdAndIndexMap.set(this.listNode[i].getCurrentNodeId(), index++); - count++; - } - } - return count; - } - - public getData(index: number): any { - let count = 0; - for (let i = 0; i < this.listNode.length; i++) { - if (this.listNode[i].getNodeIsShow()) { - if (index == count) { - return this.listNode[i]; - } - count++; - } - } - return null; - } - - public addData(index: number, data: NodeInfo): void { - this.listNode.splice(index, 0, data) - this.notifyDataAdd(index) - } - - public pushData(data: NodeInfo): void { - this.listNode.push(data) - this.notifyDataAdd(this.listNode.length - 1) - } - - public setIsInnerDrag(isInnerDrag: boolean) { - this.isInnerDrag = isInnerDrag; - } - - public getIsInnerDrag(): boolean { - return this.isInnerDrag; - } - - public setIsDrag(isDrag: boolean) { - this.isDrag = isDrag; - } - - public getIsDrag(): boolean { - return this.isDrag; - } - - public setCurrentNodeInfo(currentNodeInfo: NodeInfo) { - this.currentNodeInfo = currentNodeInfo; - } - - public getCurrentNodeInfo() { - return this.currentNodeInfo; - } - - public setDraggingParentNodeId(draggingParentNodeId: number) { - this.draggingParentNodeId = draggingParentNodeId; - } - - public getDraggingParentNodeId() { - return this.draggingParentNodeId; - } - - public getDraggingCurrentNodeId() { - return this.draggingCurrentNodeId; - } - - public setDraggingCurrentNodeId(draggingCurrentNodeId: number) { - this.draggingCurrentNodeId = draggingCurrentNodeId; - } - - public setListItemOpacity(listItemOpacity: number) { - this.listItemOpacity = listItemOpacity; - } - - public getListItemOpacity(item: NodeInfo) { - return item.getCurrentNodeId() == this.getDraggingCurrentNodeId() ? this.listItemOpacity : 1; - } - - public getDragPopupPara() { - return this.DRAG_POPUP; - } - - public setLastPassIndex(lastPassIndex: number) { - this.lastPassIndex = lastPassIndex; - } - - public getLastPassIndex(): number { - return this.lastPassIndex; - } - - public getIsParentOfInsertNode(insertNodeId: number): boolean { - let selectedNodeItem: NodeItem = this.currentNodeInfo.getNodeInfoNode(); - let isParentNodeOfInsertNode = false, - callback = function(node): boolean { - if (node.currentNodeId == insertNodeId ) { - isParentNodeOfInsertNode = true; - return true; - } - return false; - }; - this.listNodeUtils.traverseNodeDF(callback, selectedNodeItem); - return isParentNodeOfInsertNode; - } - - public setPassIndex(thisPassIndex: number) { - this.thisPassIndex = thisPassIndex; - } - - public getPassIndex(): number { - return this.thisPassIndex; - } - - public clearTimeOutAboutDelayHighLightAndExpand(currentIndex: number) { - if (this.lastPassId != this.INITIAL_INVALID_VALUE && this.loadedNodeIdAndIndexMap.has(this.lastPassId)) { - let index: number = this.loadedNodeIdAndIndexMap.get(this.lastPassId); - let that =this; - this.ListNode.forEach(function(value) { - if (value.getNodeCurrentNodeId() == that.lastPassId) { - value.setCanShowFlagLine(false); - } - }) - this.notifyDataChange(index); - } - - if ((this.lastTimeoutHighLightId != this.INITIAL_INVALID_VALUE && - this.clearTimeoutHighLightId != this.lastTimeoutHighLightId)) { - clearTimeout(this.lastTimeoutHighLightId); - if (this.lastDelayHighLightIndex != this.INITIAL_INVALID_VALUE) { - this.clearHighLight(this.lastDelayHighLightIndex); - let index: number = this.loadedNodeIdAndIndexMap - .get(this.listNode[this.lastDelayHighLightIndex].getCurrentNodeId()); - this.notifyDataChange(index); - } - this.clearTimeoutHighLightId = this.lastTimeoutHighLightId; - } - this.lastTimeoutHighLightId = this.timeoutHighLightId; - this.lastDelayHighLightIndex = currentIndex; - - if ((this.lastTimeoutExpandId != this.INITIAL_INVALID_VALUE && - this.clearTimeoutExpandId != this.lastTimeoutExpandId)) { - clearTimeout(this.lastTimeoutExpandId); - this.clearTimeoutExpandId = this.lastTimeoutExpandId; - } - this.lastTimeoutExpandId = this.timeoutExpandId; - this.lastDelayExpandIndex = this.INITIAL_INVALID_VALUE; - } - - public clearHighLight(currentIndex: number) { - this.changeNodeColor(currentIndex, this.listNode[currentIndex].getNodeStatus().normal); - this.changeNodeHighLightColor(currentIndex, false); - this.setImageSource(currentIndex, InteractionStatus.FinishDragInsert); - this.setImageCollapseSource(currentIndex, InteractionStatus.FinishDragInsert); - this.listNode[currentIndex].setIsHighLight(false); - } - - private changeNodeHighLightColor(index: number, isHighLight: boolean): void { - if (this.listNode[index].getNodeItem().mainTitleNode && this.listNode[index].getIsShowTitle()) { - this.listNode[index].getNodeItem().mainTitleNode.setMainTitleHighLight(isHighLight); - } - } - - public setVisibility(flag: Flag, index: number, isOverBorder: boolean) { - let isChanged: boolean = (this.thisPassIndex != index || this.flag != flag) ? true : false; - this.thisPassIndex = index; - if ((isChanged || isOverBorder) && this.isInnerDrag) { - this.flag = flag; - let currentNodeId: number = this.getData(index).getCurrentNodeId(); - let currentNodeLevel: number = this.expandAndCollapseInfo.get(currentNodeId) == NodeStatus.Expand && - this.flag == Flag.DOWN_FLAG ? this.getData(index).getNodeLevel() + 1 : this.getData(index).getNodeLevel(); - if (this.lastPassId != this.INITIAL_INVALID_VALUE && this.loadedNodeIdAndIndexMap.has(this.lastPassId)) { - let lastIndex: number = this.loadedNodeIdAndIndexMap.get(this.lastPassId); - let that = this; - this.ListNode.forEach(function (value) { - if (value.getNodeCurrentNodeId() == that.lastPassId) { - value.setCanShowFlagLine(false); - } - }) - this.notifyDataChange(lastIndex); - } - if (this.flag == Flag.DOWN_FLAG && index < this.totalCount() - 1) { - this.getData(index).setCanShowFlagLine(false); - this.getData(index+1).setCanShowFlagLine(true); - this.getData(index).setCanShowBottomFlagLine(false); - this.getData(index+1).setFlagLineLeftMargin(currentNodeLevel); - this.notifyDataChange(index); - this.notifyDataChange(index + 1); - this.lastPassId = this.getData(index + 1).getNodeCurrentNodeId(); - } else if (this.flag == Flag.UP_FLAG && index < this.totalCount() - 1) { - this.getData(index).setCanShowFlagLine(true); - this.getData(index+1).setCanShowFlagLine(false); - this.getData(index).setCanShowBottomFlagLine(false); - this.getData(index).setFlagLineLeftMargin(currentNodeLevel); - this.notifyDataChange(index); - this.notifyDataChange(index + 1); - this.lastPassId = this.getData(index).getNodeCurrentNodeId(); - } else if (index >= this.totalCount() - 1) { - if (this.flag == Flag.DOWN_FLAG) { - this.getData(index).setCanShowFlagLine(false); - this.getData(index).setCanShowBottomFlagLine(true); - } else { - this.getData(index).setCanShowFlagLine(true); - this.getData(index).setCanShowBottomFlagLine(false); - } - this.getData(index).setFlagLineLeftMargin(currentNodeLevel); - this.notifyDataChange(index); - this.lastPassId = this.getData(index).getNodeCurrentNodeId(); - } - } - } - - public delayHighLightAndExpandNode(currentIndex: number, currentNodeId: number, showIndex: number) { - let isChangIndex: boolean = currentIndex != this.lastDelayExpandIndex ? true : false; - let isOverBorder: boolean = this.getData(showIndex).getIsOverBorder(); - if (isOverBorder) { - this.lastDelayExpandIndex = this.INITIAL_INVALID_VALUE; - } else { - this.lastDelayExpandIndex = currentIndex; - } - if (isOverBorder || isChangIndex) { - let that = this; - - /* highLight node time-out. */ - let canDelayHighLight: boolean = !isOverBorder && (!this.isInnerDrag || - (this.expandAndCollapseInfo.get(currentNodeId) == NodeStatus.Collapse && this.isInnerDrag) || - (!this.expandAndCollapseInfo.has(currentNodeId) && this.listNode[currentIndex].getIsFolder())); - if (canDelayHighLight) { - /* set hoverState color before highLight. */ - this.changeNodeColor(currentIndex, this.listNode[currentIndex].getNodeStatus().hover); - this.notifyDataChange(showIndex); - - let delayHighLightTime: number = this.isInnerDrag ? 1000 : 0; // ms - this.timeoutHighLightId = setTimeout(function() { - that.delayHighLight(currentIndex); - }, delayHighLightTime) - } - if (isOverBorder || (this.lastTimeoutHighLightId != this.INITIAL_INVALID_VALUE && - this.clearTimeoutHighLightId != this.lastTimeoutHighLightId)) { - clearTimeout(this.lastTimeoutHighLightId); - if (this.lastDelayHighLightIndex != this.INITIAL_INVALID_VALUE) { - this.clearHighLight(this.lastDelayHighLightIndex); - this.notifyDataReload(); - } - this.clearTimeoutHighLightId = this.lastTimeoutHighLightId; - } - this.lastTimeoutHighLightId = this.timeoutHighLightId; - this.lastDelayHighLightIndex = currentIndex; - - /* alter flagLine and expand node time-out. */ - if (!isOverBorder && this.expandAndCollapseInfo.get(currentNodeId) == NodeStatus.Collapse) { - let firstChildNodeId: number = this.getData(showIndex).getNodeInfoNode().children[0].currentNodeId; - let delayAlterFlagLineAndExpandNodeTime: number = 2000; // ms - this.timeoutExpandId = setTimeout(function() { - that.clearHighLight(that.lastDelayHighLightIndex); - that.alterFlagLineAndExpandNode(currentIndex, firstChildNodeId); - }, delayAlterFlagLineAndExpandNodeTime) - } - if (isOverBorder || (this.lastTimeoutExpandId != this.INITIAL_INVALID_VALUE && - this.clearTimeoutExpandId != this.lastTimeoutExpandId)) { - clearTimeout(this.lastTimeoutExpandId); - this.clearTimeoutExpandId = this.lastTimeoutExpandId; - } - this.lastTimeoutExpandId = this.timeoutExpandId; - } - } - - public delayHighLight(currentIndex: number) { - let that =this; - this.ListNode.forEach(function (value) { - if (value.getNodeCurrentNodeId() == that.lastPassId) { - value.setCanShowFlagLine(false); - value.setCanShowBottomFlagLine(false); - } - }) - this.changeNodeColor(currentIndex, this.listNode[currentIndex].getNodeStatus().highLight); - this.listNode[currentIndex].setIsHighLight(true); - this.changeNodeHighLightColor(currentIndex, true); - this.setImageSource(currentIndex, InteractionStatus.DragInsert); - this.setImageCollapseSource(currentIndex, InteractionStatus.DragInsert); - this.notifyDataReload(); - } - - public alterFlagLineAndExpandNode(currentIndex: number, firstChildNodeId: number) { - let that =this; - this.ListNode.forEach(function (value) { - if (value.getNodeCurrentNodeId() == that.lastPassId) { - value.setCanShowFlagLine(false); - value.setCanShowBottomFlagLine(false); - } - }) - this.ListNode.forEach(function (value) { - if (that.isInnerDrag && value.getNodeCurrentNodeId() == firstChildNodeId) { - value.setCanShowFlagLine(true); - } - }) - this.changeNodeStatus(currentIndex); - this.handleExpandAndCollapse(currentIndex); - this.lastPassId = firstChildNodeId; - } - - public hideLastLine() { - if (this.lastPassId != this.INITIAL_INVALID_VALUE && this.loadedNodeIdAndIndexMap.has(this.lastPassId)) { - let that = this; - this.ListNode.forEach(function (value) { - if (value.getNodeCurrentNodeId() == that.lastPassId) { - value.setCanShowFlagLine(false); - value.setCanShowBottomFlagLine(false); - } - }) - let index: number = this.loadedNodeIdAndIndexMap.get(this.lastPassId); - this.notifyDataChange(index); - } - } - - public clearLastTimeoutHighLight() { - if (this.lastTimeoutHighLightId != this.INITIAL_INVALID_VALUE && - this.clearTimeoutHighLightId != this.lastTimeoutHighLightId) { - clearTimeout(this.lastTimeoutHighLightId); - if (this.lastDelayHighLightIndex != this.INITIAL_INVALID_VALUE) { - this.clearHighLight(this.lastDelayHighLightIndex); - } - } - } - - public clearLastTimeoutExpand() { - if (this.lastTimeoutExpandId != this.INITIAL_INVALID_VALUE && - this.clearTimeoutExpandId != this.lastTimeoutExpandId) { - clearTimeout(this.lastTimeoutExpandId); - } - } - - public getSubtitle(currentNodeId: number): string { - if (this.nodeIdAndSubtitleMap.has(currentNodeId)) { - if (typeof this.nodeIdAndSubtitleMap.get(currentNodeId) == "number") { - return this.nodeIdAndSubtitleMap.get(currentNodeId).toString(); - } else { - return this.nodeIdAndSubtitleMap.get(currentNodeId) - } - } else { - return ''; - } - } - - public hasSubtitle(currentNodeId: number) { - return this.nodeIdAndSubtitleMap.has(currentNodeId); - } - - public initialParameterAboutDelayHighLightAndExpandIndex() { - this.lastDelayHighLightIndex = this.INITIAL_INVALID_VALUE; - this.lastDelayExpandIndex = this.INITIAL_INVALID_VALUE; - this.lastPassIndex = this.INITIAL_INVALID_VALUE; - this.draggingCurrentNodeId = this.INITIAL_INVALID_VALUE; - this.flag = Flag.NONE; - } - - public refreshSubtitle(insertNodeCurrentNodeId: number) { - this.nodeIdAndSubtitleMap.set(this.selectedParentNodeId, this.selectedParentNodeSubtitle); - this.nodeIdAndSubtitleMap.set(insertNodeCurrentNodeId, this.insertNodeSubtitle); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(this.selectedParentNodeId)); - this.notifyDataChange(this.loadedNodeIdAndIndexMap.get(insertNodeCurrentNodeId)); - } - - public setNodeSubtitlePara( - selectedParentNodeId: number, - selectedParentNodeSubtitle: ResourceStr, - insertNodeSubtitle: ResourceStr - ) { - this.selectedParentNodeId = selectedParentNodeId; - this.selectedParentNodeSubtitle = selectedParentNodeSubtitle; - this.insertNodeSubtitle = insertNodeSubtitle; - } - - public getInsertNodeSubtitle() { - return this.insertNodeSubtitle; - } - - public getExpandAndCollapseInfo(currentNodeId: number) { - return this.expandAndCollapseInfo.get(currentNodeId); - } - - public getLastDelayHighLightId() { - return this.lastDelayHighLightId; - } - - public setLastDelayHighLightId() { - this.ListNode.forEach((value, index) => { - if (index == this.lastDelayHighLightIndex) { - this.lastDelayHighLightId = value.getCurrentNodeId(); - } - }) - } - - public setLastPassId(lastPassId: number) { - this.lastPassId = lastPassId; - } - - public setLastDelayHighLightIndex(lastDelayHighLightIndex) { - this.lastDelayHighLightIndex = lastDelayHighLightIndex; - } - - /* - * Alter the current node location to a needful position. - * 1.Create an array named 'dragNodeParam' to store dragging node information. - * 2.Delete the dragging node from the tree. - * 3.Add the dragging node to the tree. - */ - public alterDragNode(rearParentNodeId: number, rearCurrentNodeId: number, insertNodeInfo: NodeInfo, - dragParentNodeId: number, dragCurrentNodeId: number, frontNodeInfoItem: NodeInfo) { - let dragNodeParam: { parentId: number, currentId: number, data: any }[] = []; - let parentNodeId: number = rearParentNodeId; - let currentNodeId: number = dragCurrentNodeId; - let nodeParam = frontNodeInfoItem.getNodeInfoData(); - let nodeInfo: NodeInfo = null; - let nodeInfoNode: NodeItem = frontNodeInfoItem.getNodeInfoNode(); - let isHighLight : boolean = false; - let insertChildIndex: number = this.INITIAL_INVALID_VALUE; - let currentChildIndex: number = this.INITIAL_INVALID_VALUE; - let isDownFlag: boolean = this.flag == Flag.DOWN_FLAG ? true : false; - - currentChildIndex = this.getChildIndex(dragParentNodeId, dragCurrentNodeId); - insertChildIndex = this.getChildIndex(rearParentNodeId, rearCurrentNodeId); - - if (rearParentNodeId != dragParentNodeId) { - insertChildIndex = isDownFlag ? insertChildIndex + 1 : insertChildIndex; - } else { - if (insertChildIndex > currentChildIndex) { - insertChildIndex = isDownFlag ? insertChildIndex : insertChildIndex - 1; - } else { - insertChildIndex = isDownFlag ? insertChildIndex + 1 : insertChildIndex; - } - } - - for (let i = 0; i < this.listNode.length; i++) { - if (this.listNode[i].getCurrentNodeId() == rearCurrentNodeId) { - isHighLight = this.listNode[i].getIsHighLight(); - if (this.flag == Flag.DOWN_FLAG && this.expandAndCollapseInfo.get(rearCurrentNodeId) == NodeStatus.Expand) { - parentNodeId = rearCurrentNodeId; - insertChildIndex = 0; - } else if (this.flag == Flag.UP_FLAG && this.expandAndCollapseInfo.get(rearCurrentNodeId) == NodeStatus.Expand - && this.listNode[i].getCanShowFlagLine() == false) { - parentNodeId = rearCurrentNodeId; - insertChildIndex = 0; - } else if (isHighLight) { - parentNodeId = rearCurrentNodeId; - insertChildIndex = 0; - } - break; - } - } - - let callbackParam: CallbackParam = { currentNodeId: currentNodeId, parentNodeId: parentNodeId, childIndex: insertChildIndex } - - /* export inner drag node Id. */ - this.appEventBus.emit(TreeListenType.NODE_MOVE, [callbackParam]); - - /* To store dragging node information by the array named 'dragNodeParam'. */ - dragNodeParam.push({parentId: parentNodeId, currentId: currentNodeId, data: nodeParam}); - - let oneself = null, - callback = function(node, listNode): boolean { - if (node) { - oneself = node; - parentNodeId = oneself.parentNodeId; - currentNodeId = oneself.currentNodeId; - for (let i = 0; i < listNode.length; i++) { - if (listNode[i].getNodeCurrentNodeId() == currentNodeId) { - nodeInfo = listNode[i]; - break; - } - } - nodeParam = nodeInfo.getNodeInfoData(); - if (parentNodeId != dragParentNodeId) { - dragNodeParam.push({parentId: parentNodeId, currentId: currentNodeId, data: nodeParam}); - } - return false; - } - return false; - } - this.listNodeUtils.dragTraverseNodeDF(callback, nodeInfoNode, this.listNode); - - /* Delete the dragging node from the tree. */ - this.listNodeUtils.removeNode(dragCurrentNodeId, dragParentNodeId, this.listNodeUtils.traverseNodeBF); - - /* - * Add the dragging node to the tree - * 1.The first dragging node is added singly, because it needs to distinguish the position to insert - * - * Add first node. - */ - let insertCurrentNodeId: number = rearCurrentNodeId; - let isAfter: boolean = isDownFlag; - if (this.expandAndCollapseInfo.get(rearCurrentNodeId) == NodeStatus.Expand) { - isAfter = false; - this.listNode.forEach((value) => { - if (value.getCurrentNodeId() == rearCurrentNodeId && value.getCanShowFlagLine() == false) { - if (value.getNodeInfoNode().children.length) { - insertCurrentNodeId = value.getNodeInfoNode().children[0].currentNodeId; - } else { - insertCurrentNodeId = this.INITIAL_INVALID_VALUE; - } - } - }) - } else if (!this.expandAndCollapseInfo.get(rearCurrentNodeId) && isHighLight) { - this.expandAndCollapseInfo.set(rearCurrentNodeId, NodeStatus.Expand); - } - - this.listNodeUtils.addDragNode(dragNodeParam[0].parentId, dragNodeParam[0].currentId, insertCurrentNodeId, - isAfter, dragNodeParam[0].data); - - /* Add remaining node. */ - for (let j = 1; j < dragNodeParam.length; j++) { - this.listNodeUtils.addNode(dragNodeParam[j].parentId, dragNodeParam[j].currentId, dragNodeParam[j].data); - } - - /* Update node data and reload the array named 'listNode'. */ - for (let i = 0; i < this.listNode.length; i++) { - if (this.listNode[i].getCurrentNodeId() == dragParentNodeId) { - if (this.listNode[i].getNodeInfoNode().getNodeItem().imageCollapse == null) { - this.listNode[i].handleImageCollapseAfterAddNode(false); - this.expandAndCollapseInfo.delete(dragParentNodeId); - break; - } - } - } - let tmp: NodeInfo[] = [...this.listNode]; - this.reloadListNode(this.listNodeUtils, tmp); - - } - - /* - * Reload the array named 'listNode' - * @param listNodeUtils - * @param tmp - */ - public reloadListNode(listNodeUtils: ListNodeUtils, tmp: NodeInfo[]) { - let index = 0; - this.listNode = []; - this.listNodeUtils = listNodeUtils; - this.loadedNodeIdAndIndexMap.clear(); - this.listNodeUtils.traverseNodeDF((node: NodeItem): boolean => { - if (node.currentNodeId >= 0) { - var nodeInfo: NodeInfo = new NodeInfo(node); - this.listNode.push(nodeInfo); - - if (this.expandAndCollapseInfo.get(node.currentNodeId) == NodeStatus.Expand) { - nodeInfo.getNodeItem().imageCollapse.changeImageCollapseSource(NodeStatus.Expand); - } else if (this.expandAndCollapseInfo.get(node.currentNodeId) == NodeStatus.Collapse) { - nodeInfo.getNodeItem().imageCollapse.changeImageCollapseSource(NodeStatus.Collapse); - } - - for (let i = 0; i < tmp.length; i++){ - if (tmp[i].getCurrentNodeId() == nodeInfo.getCurrentNodeId()) { - nodeInfo.setNodeIsShow(tmp[i].getNodeIsShow()); - nodeInfo.setListItemHeight(tmp[i].getListItemHeight()); - if (nodeInfo.getNodeItem().mainTitleNode && nodeInfo.getIsShowTitle()) { - nodeInfo.getNodeItem().mainTitleNode.title = tmp[i].getNodeItem().mainTitleNode.title; - } - break; - } - } - if (nodeInfo.getNodeIsShow()) { - this.loadedNodeIdAndIndexMap.set(nodeInfo.getCurrentNodeId(), index++); - } - } - return false; - }); - } - - public getFlagLine() { - return this.FLAG_LINE; - } - - public getVisibility(nodeInfo: NodeInfo): any { - let lastShowIndex: number = this.loadedNodeIdAndIndexMap.get(nodeInfo.getCurrentNodeId()) - 1; - if (lastShowIndex > this.INITIAL_INVALID_VALUE) { - let lastNodeInfo: NodeInfo = this.getData(lastShowIndex); - return (nodeInfo.getCanShowFlagLine() == true && !nodeInfo.getIsHighLight() && !lastNodeInfo.getIsHighLight()) ? - Visibility.Visible : Visibility.Hidden; - } else { - return (nodeInfo.getCanShowFlagLine() == true && !nodeInfo.getIsHighLight()) ? - Visibility.Visible : Visibility.Hidden; - } - } - - public getSubTitlePara() { - return this.subTitle; - } - - public getIsFolder(nodeId: number) { - if (this.loadedNodeIdAndIndexMap.has(nodeId)) { - return this.getData(this.loadedNodeIdAndIndexMap.get(nodeId)).getIsFolder(); - } - return false; - } - - public getSubTitleFontColor(isHighLight: boolean) { - return isHighLight ? this.subTitle.highLightFontColor : this.subTitle.normalFontColor; - } - - private getChildIndex(rearParentNodeId: number, rearCurrentNodeId: number) { - let insertChildIndex: number = this.INITIAL_INVALID_VALUE; - this.listNodeUtils.traverseNodeBF(function(node): boolean { - if (node.getCurrentNodeId() == rearParentNodeId) { - node.children.forEach((value, index) => { - if (value.getCurrentNodeId() == rearCurrentNodeId) { - insertChildIndex = index; - } - }) - return true; - } - return false; - }); - return insertChildIndex; - } - - public setCurrentFocusNodeId(focusNodeId: number) { - this.currentFocusNodeId = focusNodeId; - } - - public getCurrentFocusNodeId(): number { - return this.currentFocusNodeId; - } - - public setLastFocusNodeId(focusNodeId: number) { - this.lastFocusNodeId = focusNodeId; - } - - public getLastFocusNodeId(): number { - return this.lastFocusNodeId; - } - - public getAddFocusNodeId(): number { - return this.addFocusNodeId; - } - - public setFlag(flag: Flag) { - this.flag = flag; - } - } - - /* nodeId to find index */ - function findCurrentNodeIndex(this, currentNodeId: number): number { - let thisIndex: number = 0; - this.listNodeDataSource.ListNode.forEach(function (value, index) { - if (value.getNodeCurrentNodeId() == currentNodeId) { - thisIndex = index; - } - }) - return thisIndex; - } - - /** - * Tree view control, which is created by using the TreeController class. - * - * When you create this component, you must initialize the listNodeDataSource. - * You can run the listTreeViewWidth command to set the width of the component. - * The default width is 200vp. - * - * @since 10 - */ - @Component - export struct TreeView { - listNodeDataSource: ListNodeDataSource; - treeController: TreeController; - @State dropSelectedIndex: number = 0; - @BuilderParam private listTreeViewMenu: () => void = null; - @Prop listTreeViewWidth: string | number; - @Prop listTreeViewHeight: number | string; - private readonly MAX_CN_LENGTH: number = 254; - private readonly MAX_EN_LENGTH: number = 255; - private readonly INITIAL_INVALID_VALUE = -1; - private readonly MAX_TOUCH_DOWN_COUNT = 0; - private isMultiPress: boolean = false; - private touchDownCount: number = this.INITIAL_INVALID_VALUE; - private appEventBus: TreeListener = TreeListenerManager.getInstance().getTreeListener(); - private readonly itemPadding: { left: Resource, right: Resource, top: Resource, bottom: Resource } = - { left: $r('sys.float.ohos_id_card_margin_middle'), - right: $r('sys.float.ohos_id_card_margin_middle'), - top: $r('sys.float.ohos_id_text_margin_vertical'), - bottom: $r('sys.float.ohos_id_text_margin_vertical')}; - /* { left: '12vp', right: '12vp', top: '2vp', bottom: '2vp' } */ - private readonly textInputPadding: { left : string, right: string, top: string, bottom: string } = - { left : '0vp', right: '0vp', top: '0vp', bottom: '0vp'} - aboutToAppear(): void { - this.listTreeViewWidth = (this.listTreeViewWidth === undefined) ? 200 : this.listTreeViewWidth; - this.listNodeDataSource = this.treeController.getListNodeDataSource(); - } - - private checkInvalidPattern(title: string): boolean { - let pattern = /[\\\/:*?"<>|]/; - return pattern.test(title) - } - - private checkIsAllCN(title: string): boolean { - let pattern = /^[\u4e00-\u9fa5]+$/; - return pattern.test(title) - } - - @Builder popupForShowTitle(text: string | Resource, backgroundColor: Resource, fontColor: Resource ) { - Row() { - Text(text).fontSize($r('sys.float.ohos_id_text_size_body2')).fontWeight('regular').fontColor(fontColor) - }.backgroundColor(backgroundColor) - .border({radius: $r('sys.float.ohos_id_elements_margin_horizontal_l')}) - .padding({left: $r('sys.float.ohos_id_elements_margin_horizontal_l'), - right: $r('sys.float.ohos_id_elements_margin_horizontal_l'), - top: $r('sys.float.ohos_id_card_margin_middle'), - bottom: $r('sys.float.ohos_id_card_margin_middle')}) - } - - @Builder builder() { - this.listTreeViewMenu() - } - - /* Set the popup of dragging node. */ - @Builder draggingPopup(item: NodeInfo) { - Row() { - if (item.getNodeItem().imageNode) { - Row() { - Image(item.getNodeItem().imageNode.normalSource) - .objectFit(ImageFit.Contain) - .height(item.getNodeItem().imageNode.itemHeight) - .width(item.getNodeItem().imageNode.itemWidth) - .opacity(this.listNodeDataSource.getDragPopupPara().imageOpacity) - } - .backgroundColor(COLOR_IMAGE_ROW) - .margin({ right: item.getNodeItem().imageNode.itemRightMargin }) - .height(item.getNodeItem().imageNode.itemHeight) - .width(item.getNodeItem().imageNode.itemWidth) - } - Row() { - if (item.getNodeItem().mainTitleNode && item.getIsShowTitle()) { - Text(item.getNodeItem().mainTitleNode.title) - .maxLines(1) - .fontSize(item.getNodeItem().mainTitleNode.size) - .fontColor(this.listNodeDataSource.getDragPopupPara().fontColor) - .fontWeight(this.listNodeDataSource.getDragPopupPara().fontWeight) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - } - } - .constraintSize({ - minWidth: item.getNodeItem().imageNode ? - this.listNodeDataSource.getDragPopupPara().textConstraintSize.minWidth1 : - this.listNodeDataSource.getDragPopupPara().textConstraintSize.minWidth2, - maxWidth: item.getNodeItem().imageNode ? - this.listNodeDataSource.getDragPopupPara().textConstraintSize.maxWidth1 : - this.listNodeDataSource.getDragPopupPara().textConstraintSize.maxWidth2 }) - } - .constraintSize({ minWidth: this.listNodeDataSource.getDragPopupPara().floorConstraintSize.minWidth, - maxWidth: this.listNodeDataSource.getDragPopupPara().floorConstraintSize.maxWidth }) - .height(this.listNodeDataSource.getDragPopupPara().height) - .backgroundColor(this.listNodeDataSource.getDragPopupPara().backgroundColor) - .padding({ left: this.listNodeDataSource.getDragPopupPara().padding.left, - right: this.listNodeDataSource.getDragPopupPara().padding.right }) - .shadow({ radius: this.listNodeDataSource.getDragPopupPara().shadow.radius, - color: this.listNodeDataSource.getDragPopupPara().shadow.color, - offsetY: this.listNodeDataSource.getDragPopupPara().shadow.offsetY }) - .borderRadius(this.listNodeDataSource.getDragPopupPara().borderRadius) // need to doubleCheck. - } - - build() { - List({ }) { - LazyForEach(this.listNodeDataSource, (item: NodeInfo) => { - ListItem() { - if (item.getNodeIsShow()) { - Column() { - Divider() - .height(this.listNodeDataSource.getFlagLine().flagLineHeight) - .color(this.listNodeDataSource.getFlagLine().flagLineColor) - .visibility(this.listNodeDataSource.getVisibility(item)) - .lineCap(LineCapStyle.Round) - .margin({ left: item.getFlagLineLeftMargin() }) - .markAnchor({ x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yTopOffset }) - Row({}) { - Row({}) { - if (item.getNodeItem().imageNode) { - Row() { - Image(item.getNodeItem().imageNode.source) - .objectFit(ImageFit.Contain) - .height(item.getNodeItem().imageNode.itemHeight) - .width(item.getNodeItem().imageNode.itemWidth) - .opacity(!item.getIsSelected() && !item.getIsHighLight() ? - item.getNodeItem().imageNode.opacity : item.getNodeItem().imageNode.noOpacity) - .focusable(item.getNodeItem().mainTitleNode != null ? false : true) - .onFocus(() => { - let that = this; - that.listNodeDataSource.handleEvent(Event.FOCUS, - findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId())); - }) - .onBlur(() => { - let that = this; - that.listNodeDataSource.handleEvent(Event.BLUR, - findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId())); - }) - } - .backgroundColor(COLOR_IMAGE_ROW) - .margin({ right: item.getNodeItem().imageNode.itemRightMargin }) - .height(item.getNodeItem().imageNode.itemHeight) - .width(item.getNodeItem().imageNode.itemWidth) - } - Row() { - if (item.getNodeItem().mainTitleNode && item.getIsShowTitle()) { - Text(item.getNodeItem().mainTitleNode.title) - .maxLines(1) // max line - .fontSize(item.getNodeItem().mainTitleNode.size) - .fontColor(item.getNodeItem().mainTitleNode.color) - .margin({ right: item.getNodeItem().mainTitleNode.itemRightMargin }) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .fontWeight(item.getNodeItem().mainTitleNode.weight) - .focusable(true) - .onFocus(() => { - let that = this; - this.listNodeDataSource.handleEvent(Event.FOCUS, - findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId())); - }) - .onBlur(() => { - let that = this; - that.listNodeDataSource.handleEvent(Event.BLUR, - findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId())); - }) - } - if (item.getNodeItem().mainTitleNode && - item.getNodeItem().inputText && - item.getIsShowInputText()) { - Row() { - TextInput({ text: item.getNodeItem().mainTitleNode.title }) - .height(item.getNodeItem().inputText.itemHeight) - .fontSize(item.getNodeItem().inputText.size) - .fontColor(item.getNodeItem().inputText.color) - .borderRadius(item.getNodeItem().inputText.borderRadius) - .backgroundColor(item.getNodeItem().inputText.backgroundColor) - .enterKeyType(EnterKeyType.Done) - .padding({ left: this.textInputPadding.left, right: this.textInputPadding.right, - top: this.textInputPadding.top, bottom: this.textInputPadding.bottom }) - .onChange((value: string) => { - let that = this; - var thisIndex = findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId()); - let res: string = ''; - let isInvalidError: boolean = false; - let isLengthError: boolean = false; - if (that.checkInvalidPattern(value)) { - for (let i = 0; i < value.length; i++) { - if (!that.checkInvalidPattern(value[i])) { - res += value[i]; - } - } - isInvalidError = true; - that.listNodeDataSource.setPopUpInfo(PopUpType.WARNINGS, - InputError.INVALID_ERROR, true, thisIndex); - } else { - res = value; - isInvalidError = false; - that.listNodeDataSource.setPopUpInfo(PopUpType.WARNINGS, - InputError.INVALID_ERROR, false, thisIndex); - } - if ((that.checkIsAllCN(res) && res.length > this.MAX_CN_LENGTH) || - (!that.checkIsAllCN(res) && res.length > this.MAX_EN_LENGTH)) { - res = that.checkIsAllCN(res) ? - res.substr(0, this.MAX_CN_LENGTH) : res.substr(0, this.MAX_EN_LENGTH); - isLengthError = true; - that.listNodeDataSource.setPopUpInfo(PopUpType.WARNINGS, - InputError.LENGTH_ERROR, true, thisIndex); - } else { - isLengthError = false; - } - if (!isLengthError && !isInvalidError) { - that.listNodeDataSource.setPopUpInfo(PopUpType.WARNINGS, - InputError.LENGTH_ERROR, false, thisIndex); - that.listNodeDataSource.setMainTitleNameOnEdit(thisIndex, res); - } - - }) - .onSubmit((enterKey: EnterKeyType) => { - let that = this; - var thisIndex = findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId()); - that.listNodeDataSource.setPopUpInfo(PopUpType.WARNINGS, InputError.NONE, false, thisIndex); - that.listNodeDataSource.setItemVisibilityOnEdit(thisIndex, MenuOperation.COMMIT_NODE); - }) - }.backgroundColor(item.getNodeItem().inputText.backgroundColor) - .borderRadius(item.getNodeItem().inputText.borderRadius) - .margin({ right: item.getNodeItem().inputText.itemRightMargin }) - } - Blank() - }.layoutWeight(1) - - if (this.listNodeDataSource.hasSubtitle(item.getCurrentNodeId())) { - Row() { - Text(this.listNodeDataSource.getSubtitle(item.getCurrentNodeId())) - .fontSize(this.listNodeDataSource.getSubTitlePara().fontSize) - .fontColor(this.listNodeDataSource.getSubTitleFontColor(item.getIsHighLight() || item.getIsModify())) - .fontWeight(this.listNodeDataSource.getSubTitlePara().fontWeight) - } - .margin({ left: this.listNodeDataSource.getSubTitlePara().margin.left, - right: item.getNodeItem().imageCollapse ? - 0 : this.listNodeDataSource.getSubTitlePara().margin.right }) - } - - if (item.getNodeItem().imageCollapse) { - Row() { - Image(item.getNodeItem().imageCollapse.collapseSource) - .fillColor(item.getNodeItem().imageCollapse.isCollapse ? COLOR_IMAGE_ROW : COLOR_IMAGE_EDIT) - .align(Alignment.End) - .objectFit(ImageFit.Contain) - .height(item.getNodeItem().imageCollapse.itemHeight) - .width(item.getNodeItem().imageCollapse.itemWidth) - .opacity(!item.getIsHighLight() ? - item.getNodeItem().imageCollapse.opacity : item.getNodeItem().imageCollapse.noOpacity) - .onTouch((event: TouchEvent) => { - if (event.type === TouchType.Down) { - let that = this; - that.listNodeDataSource.expandAndCollapseNode( - findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId())); - this.listNodeDataSource.setCurrentFocusNodeId(item.getCurrentNodeId()); - } - event.stopPropagation(); - }) - } - .backgroundColor(COLOR_IMAGE_ROW) - .height(item.getNodeItem().imageCollapse.itemHeight) - .width(item.getNodeItem().imageCollapse.itemWidth) - } - } - .width('100%') - .onTouch((event: TouchEvent) => { - let that = this; - let index = findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId()); - let currentId = item.getNodeCurrentNodeId(); - that.listNodeDataSource.setClickIndex(index); - if (event.type === TouchType.Down) { - this.touchDownCount ++; - this.isMultiPress = this.touchDownCount > this.MAX_TOUCH_DOWN_COUNT ? true : false; - if (!this.listNodeDataSource.getIsTouchDown()) { - that.listNodeDataSource.handleEvent(Event.TOUCH_DOWN, index); - } - } - if (event.type === TouchType.Up) { - this.touchDownCount--; - if (this.touchDownCount < this.MAX_TOUCH_DOWN_COUNT) { - this.isMultiPress = false; - } - let callbackParam = { currentNodeId: currentId } - this.appEventBus.emit(TreeListenType.NODE_CLICK, [callbackParam]); - that.listNodeDataSource.handleEvent(Event.TOUCH_UP, index); - } - }) - .onHover((isHover: boolean) => { - let that = this; - let index = findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId()) - if (isHover) { - that.listNodeDataSource.handleEvent(Event.HOVER, index); - } else { - if (!that.listNodeDataSource.getIsTouchDown()) { - that.listNodeDataSource.handleEvent(Event.HOVER_OVER, index); - } - } - }) - .gesture( - TapGesture({ count: 2 }) // doubleClick - .onAction((event: GestureEvent) => { - let that = this; - that.listNodeDataSource.expandAndCollapseNode( - findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId())); - }) - ) - .height(item.getNodeHeight()) - .padding({ left: item.getNodeLeftPadding() }) - /* backgroundColor when editing and in other states. */ - .backgroundColor((item.getNodeItem().mainTitleNode && item.getNodeItem().inputText && - item.getIsShowInputText()) ? item.getNodeItem().inputText.editColor : item.getNodeColor()) - .border({ - width: item.getNodeBorder().borderWidth, - color: item.getNodeBorder().borderColor, - radius: item.getNodeBorder().borderRadius - }) - .bindContextMenu(this.builder, ResponseType.RightClick) - } - .opacity(this.listNodeDataSource.getListItemOpacity(item)) - .markAnchor({ x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yBasePlateOffset }) - if (item.getCanShowBottomFlagLine()) { - if (this.listNodeDataSource.getPassIndex() == this.listNodeDataSource.totalCount() - 1 && - !item.getIsHighLight()) { - Divider() - .height(this.listNodeDataSource.getFlagLine().flagLineHeight) - .color(this.listNodeDataSource.getFlagLine().flagLineColor) - .visibility(Visibility.Visible) - .lineCap(LineCapStyle.Round) - .margin({ left: item.getFlagLineLeftMargin() }) - .markAnchor({ x: this.listNodeDataSource.getFlagLine().xOffset, - y: this.listNodeDataSource.getFlagLine().yBottomOffset }) - } - } - } - .focusable(true) - .onMouse((event: MouseEvent) => { - let that = this; - let thisIndex = findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId()); - if (event.button == MouseButton.Right) { - that.listNodeDataSource.handleEvent(Event.MOUSE_BUTTON_RIGHT, - findCurrentNodeIndex.call(that, item.getNodeCurrentNodeId())); - this.listTreeViewMenu = item.getMenu(); - that.listNodeDataSource.setClickIndex(thisIndex); - that.listNodeDataSource.setPopUpInfo(PopUpType.HINTS, InputError.NONE, false, thisIndex); - clearTimeout(item.getNodeItem().mainTitleNode.popUpTimeout); - } - event.stopPropagation(); - }) - .padding({ top: this.itemPadding.top, bottom: this.itemPadding.bottom }) - .bindPopup(item.getPopUpInfo().popUpIsShow, { - builder: this.popupForShowTitle(item.getPopUpInfo().popUpText, item.getPopUpInfo().popUpColor, - item.getPopUpInfo().popUpTextColor), - placement: Placement.BottomLeft, - placementOnTop: false, - popupColor: item.getPopUpInfo().popUpColor, - autoCancel: true, - enableArrow: item.getPopUpInfo().popUpEnableArrow - }) - } - - } - .width('100%').height(item.getListItemHeight()) - .padding({ left: this.itemPadding.left, right: this.itemPadding.right}) - .align(Alignment.Start) - .onDragStart((event: DragEvent, extraParams: string) => { - if (this.listNodeDataSource.getIsDrag() || this.listNodeDataSource.getIsInnerDrag() || this.isMultiPress) { - console.error('drag error, a item has been dragged'); - return; - } - this.dropSelectedIndex = JSON.parse(extraParams).selectedIndex; - let currentNodeIndex = JSON.parse(extraParams).selectedIndex; - let currentNodeInfo = this.listNodeDataSource.getData(currentNodeIndex); - let currentItemNodeId = item.getNodeCurrentNodeId(); - - /* handle the situation of drag error, currentNodeIndex is not found in onDragStart. */ - if (currentNodeIndex >= this.listNodeDataSource.totalCount() || currentNodeIndex == undefined) { - console.error('drag error, currentNodeIndex is not found in onDragStart'); - return; - } - - this.listNodeDataSource.setIsInnerDrag(true); - this.listNodeDataSource.setIsDrag(true); - this.listNodeDataSource.setCurrentNodeInfo(currentNodeInfo); - this.listNodeDataSource.setDraggingCurrentNodeId(currentNodeInfo.getNodeCurrentNodeId()); - this.listNodeDataSource.setDraggingParentNodeId(currentNodeInfo.getNodeParentNodeId()); - - /* set the opacity of the dragging node. */ - let draggingNodeOpacity: number = DRAG_OPACITY; - this.listNodeDataSource.setListItemOpacity(draggingNodeOpacity); - this.listNodeDataSource.notifyDataChange(currentNodeIndex); - - /* - * handle the situation of drag is too fast,it attribute a fault to OH. - * OH has Solved on real machine. - */ - if (currentItemNodeId != currentNodeInfo.getNodeCurrentNodeId()) { - console.error('drag is too fast,it attribute a fault to OH'); - this.listNodeDataSource.setIsDrag(false); - return; - } - return this.draggingPopup(currentNodeInfo); - }) - }, item => JSON.stringify(item)) - }.width(this.listTreeViewWidth).height(this.listTreeViewHeight) - - /* Move the dragged node. */ - .onDragMove((event: DragEvent) => { - if (this.isMultiPress) { - console.error('drag error, a item has been dragged'); - return; - } - let nodeHeight: number = LIST_ITEM_HEIGHT; - - /* flag the position of the focus on the node. */ - let flag: Flag = Math.floor(event.getY() / (nodeHeight / FLAG_NUMBER)) % FLAG_NUMBER ? Flag.DOWN_FLAG : Flag.UP_FLAG; - - /* Record the node position to which the dragged node moves. */ - let index: number = Math.floor(event.getY() / nodeHeight); - - /* Handle the situation where the focus(index) exceeds the list area. */ - let isOverBorder: boolean = false; - if (index >= this.listNodeDataSource.totalCount()) { - flag = Flag.DOWN_FLAG; - index = this.listNodeDataSource.totalCount() - 1; - this.listNodeDataSource.getData(index).setIsOverBorder(true); - isOverBorder = true; - } else { - this.listNodeDataSource.getData(index).setIsOverBorder(false); - } - - let currentNodeInfo: NodeInfo = this.listNodeDataSource.getData(index); - let currentNodeId: number = currentNodeInfo.getCurrentNodeId(); - - /* - * handle a situation that "draggingCurrentNodeId" is parent of "insertNodeCurrentNodeId"; - * do not perform some functions. - */ - if (index != this.listNodeDataSource.getLastPassIndex() && this.listNodeDataSource.getIsInnerDrag()) { - let isParentNodeOfInsertNode: boolean = this.listNodeDataSource.getIsParentOfInsertNode(currentNodeId); - if (isParentNodeOfInsertNode) { - this.listNodeDataSource.setPassIndex(index); - let that = this; - this.listNodeDataSource.clearTimeOutAboutDelayHighLightAndExpand(findCurrentNodeIndex.call(that, - currentNodeId)); - this.listNodeDataSource.setFlag(Flag.NONE); - return; - } - } - this.listNodeDataSource.setLastPassIndex(index); - - /* Set the visibility of the flag line. */ - this.listNodeDataSource.setVisibility(flag, index, isOverBorder); - - /* Automatically HighLight one second delay and expand after two second delay. */ - if (currentNodeId != this.listNodeDataSource.getDraggingCurrentNodeId()) { - let that = this; - this.listNodeDataSource.delayHighLightAndExpandNode(findCurrentNodeIndex.call(that, currentNodeId), - currentNodeId, index); - } - }) - - /* DragEvent Enter. */ - .onDragEnter((event: DragEvent, extraParams: string) => { - if (this.listNodeDataSource.getIsInnerDrag()) { - this.listNodeDataSource.setIsDrag(true); - - /* set the opacity of the dragging node. */ - let draggingNodeOpacity: number = DRAG_OPACITY; - this.listNodeDataSource.setListItemOpacity(draggingNodeOpacity); - } - }) - - /* DragEvent Leave. */ - .onDragLeave((event: DragEvent, extraParams: string) => { - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.clearLastTimeoutExpand(); - let draggingNodeOpacity: number = DRAG_OPACITY_NONE; - this.listNodeDataSource.setListItemOpacity(draggingNodeOpacity); - this.listNodeDataSource.setIsDrag(false); - this.listNodeDataSource.notifyDataReload(); - }) - - /* DragEvent Drop. */ - .onDrop((event: DragEvent, extraParams: string) => { - this.listNodeDataSource.clearLastTimeoutExpand(); - let draggingNodeOpacity: number = DRAG_OPACITY_NONE; - this.listNodeDataSource.setListItemOpacity(draggingNodeOpacity); - let insertNodeIndex: number = this.listNodeDataSource.getPassIndex(); - let currentNodeIndex: number = this.dropSelectedIndex; - - if (currentNodeIndex - 1 > this.listNodeDataSource.totalCount() || currentNodeIndex == undefined) { - console.error('drag error, currentNodeIndex is not found'); - this.listNodeDataSource.setIsDrag(false); - return; - } - - if (insertNodeIndex == this.listNodeDataSource.totalCount()) { - console.log('need to insert into the position of the last line, now insertNodeIndex = insertNodeIndex - 1'); - insertNodeIndex -= 1; - } - - let insertNodeInfo: NodeInfo = this.listNodeDataSource.getData(insertNodeIndex); - let insertNodeCurrentNodeId: number = insertNodeInfo.getNodeCurrentNodeId(); - - /* outer node is move in. */ - if (!this.listNodeDataSource.getIsDrag() || !this.listNodeDataSource.getIsInnerDrag()) { - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.setIsInnerDrag(false); - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.initialParameterAboutDelayHighLightAndExpandIndex(); - this.listNodeDataSource.refreshSubtitle(insertNodeCurrentNodeId); - this.listNodeDataSource.notifyDataReload(); - return; - } - - let currentNodeInfo: NodeInfo = this.listNodeDataSource.getCurrentNodeInfo(); - let insertNodeParentNodeId: number = insertNodeInfo.getNodeParentNodeId(); - let draggingCurrentNodeId: number = this.listNodeDataSource.getDraggingCurrentNodeId(); - let draggingParentNodeId: number = this.listNodeDataSource.getDraggingParentNodeId(); - - /* - * handle a situation that "draggingCurrentNodeId" is parent of "insertNodeCurrentNodeId". - * drag is fail. - */ - let isParentNodeOfInsertNode: boolean = this.listNodeDataSource.getIsParentOfInsertNode(insertNodeCurrentNodeId); - if (isParentNodeOfInsertNode) { - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.setIsInnerDrag(false); - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.notifyDataChange(insertNodeIndex); - this.listNodeDataSource.initialParameterAboutDelayHighLightAndExpandIndex(); - this.listNodeDataSource.setIsDrag(false); - - /* set the position of focus. */ - let that = this; - let currentFocusIndex: number = findCurrentNodeIndex.call(that, draggingCurrentNodeId); - this.listNodeDataSource.setClickIndex(currentFocusIndex); - this.listNodeDataSource.handleEvent(Event.DRAG, currentFocusIndex); - return; - } - - /* Collapse drag node. */ - if (this.listNodeDataSource.getExpandAndCollapseInfo(draggingCurrentNodeId) == NodeStatus.Expand) { - let that = this; - this.listNodeDataSource.expandAndCollapseNode( - findCurrentNodeIndex.call(that, draggingCurrentNodeId)); - } - - /* Expand insert node. */ - if (this.listNodeDataSource.getExpandAndCollapseInfo(insertNodeCurrentNodeId) == NodeStatus.Collapse) { - let that = this; - let currentIndex: number = findCurrentNodeIndex.call(that, insertNodeCurrentNodeId); - if (this.listNodeDataSource.ListNode[currentIndex].getIsHighLight()) { - this.listNodeDataSource.expandAndCollapseNode(currentIndex); - } - } - - /* alter dragNode. */ - this.listNodeDataSource.setLastDelayHighLightId(); - if (draggingCurrentNodeId != insertNodeCurrentNodeId) { - this.listNodeDataSource.alterDragNode(insertNodeParentNodeId, insertNodeCurrentNodeId, insertNodeInfo, - draggingParentNodeId, draggingCurrentNodeId, currentNodeInfo); - this.listNodeDataSource.hideLastLine(); - } else { - /*the position of dragNode is equal with the position of insertNode. */ - this.listNodeDataSource.hideLastLine(); - this.listNodeDataSource.setLastPassId(draggingCurrentNodeId); - this.listNodeDataSource.hideLastLine(); - } - - let that = this; - let lastDelayHighLightIndex: number = findCurrentNodeIndex.call(that, - this.listNodeDataSource.getLastDelayHighLightId()); - this.listNodeDataSource.setLastDelayHighLightIndex(lastDelayHighLightIndex); - this.listNodeDataSource.clearLastTimeoutHighLight(); - this.listNodeDataSource.initialParameterAboutDelayHighLightAndExpandIndex(); - this.listNodeDataSource.setIsDrag(false); - - /* set the position of focus. */ - let currentFocusIndex: number = findCurrentNodeIndex.call(that, draggingCurrentNodeId); - this.listNodeDataSource.setClickIndex(currentFocusIndex); - this.listNodeDataSource.handleEvent(Event.DRAG, currentFocusIndex); - - /* innerDrag is over. */ - this.listNodeDataSource.setIsInnerDrag(false); - this.listNodeDataSource.notifyDataReload(); - }) - } - } - - // Declare NodeParam - export interface NodeParam { - parentNodeId?: number, - currentNodeId?: number, - isFolder?: boolean, - icon?: Resource, - selectedIcon?: Resource, - editIcon? : Resource, - primaryTitle?: string, - secondaryTitle?: number | string, - menu?: () => void, - } - - - // Declare CallbackParam - export interface CallbackParam { - currentNodeId: number, - parentNodeId?: number, - childIndex?: number, - } - - /** - * Create a tree view control proxy class to generate a tree view. - * - * @since 10 - */ - export class TreeController { - readonly ROOT_NODE_ID: number = -1; - private nodeIdList: number[] = []; - private listNodeUtils : ListNodeUtils = new ListNodeUtils(); - private listNodeDataSource : ListNodeDataSource = new ListNodeDataSource(); - - /** - * After the addNode interface is invoked, - * this interface is used to obtain the initialization data of - * the tree view component for creating a tree view component. - * - * @return ListNodeDataSource Obtains the initialization data of the tree view component. - * - * @since 10 - */ - public getListNodeDataSource(): ListNodeDataSource { - return this.listNodeDataSource; - } - - /** - * Obtains the subNode information of the currently clicked node. - * - * @return Array Returns an array that stores the configuration information of each node. - * If there is no child node, an empty array is returned. - * - * @since 10 - */ - public getClickNodeChildrenInfo(): Array<{ itemId: number, itemIcon: Resource, itemTitle: string, - isFolder: boolean }> { - let clickNodeId = this.listNodeDataSource.getClickNodeId(); - return this.listNodeUtils.getClickNodeChildrenInfo(clickNodeId); - } - - public getChildrenId(): Array { - let clickNodeId = this.listNodeDataSource.getClickNodeId(); - return this.listNodeUtils.getClickChildId(clickNodeId); - } - - /** - * Delete a node. - * - * Register an ON_ITEM_DELETE callback through the EventBus mechanism to obtain the IDs of all deleted nodes. - * - * @since 10 - */ - public removeNode(): void { - let clickNodeId = this.listNodeDataSource.getClickNodeId(); - let parentNodeId = this.listNodeUtils.findParentNodeId(clickNodeId); - let removeNodeIdList: number[] = this.listNodeUtils.removeNode(clickNodeId, - parentNodeId, this.listNodeUtils.traverseNodeBF); - this.listNodeDataSource.refreshData(this.listNodeUtils, MenuOperation.REMOVE_NODE, parentNodeId, removeNodeIdList); - this.nodeIdList.splice(this.nodeIdList.indexOf(clickNodeId), 1); - } - - /** - * Modify the node name. - * - * Register an ON_ITEM_MODIFY callback to obtain the ID, parent node ID, and node name of the modified node. - * - * @since 10 - */ - public modifyNode(): void { - let clickNodeId = this.listNodeDataSource.getClickNodeId(); - this.listNodeDataSource.setItemVisibilityOnEdit(clickNodeId, MenuOperation.MODIFY_NODE); - } - - /** - * Add a node. - * - * Icon of a new node, which is generated by the system by default. - * If there is a same-level node, the icon of the first node of the same-level node is used. - * If no icon is set for the first node of the same-level node, the new node does not have an icon. - * If there is no peer node, the icon of the parent node is used. - * If no icon is set for the parent node, the new node does not have an icon. - * The system generates an ID for the new node and registers an ON_ITEM_ADD callback through - * the EventBus mechanism to obtain the ID, parent node ID, node name, normal icon, selected icon, - * edit icon of the new node. - * - * @since 10 - */ - public add(): void { - let clickNodeId: number = this.listNodeDataSource.getClickNodeId(); - if (clickNodeId == this.listNodeDataSource.ROOT_NODE_ID || !this.listNodeDataSource.getIsFolder(clickNodeId)) { - return; - } - let newNodeInfo: { isFolder: boolean, icon: Resource, selectedIcon: Resource, editIcon: Resource, - menu: () =>any, secondaryTitle: number | string } = - { isFolder: true, icon: null, selectedIcon: null, editIcon: null, menu: null, secondaryTitle: '' }; - newNodeInfo = this.listNodeUtils.getNewNodeInfo(clickNodeId); - this.nodeIdList.push(this.nodeIdList[this.nodeIdList.length - 1] + 1); - let newNodeId: number = this.nodeIdList[this.nodeIdList.length - 1]; - this.listNodeUtils.addNewNodeId = newNodeId; - this.listNodeUtils.addNode(clickNodeId, newNodeId, - { isFolder: newNodeInfo.isFolder, icon: newNodeInfo.icon, selectedIcon: newNodeInfo.selectedIcon, - editIcon: newNodeInfo.editIcon, primaryTitle: '新建文件夹', menu: newNodeInfo.menu, - secondaryTitle: newNodeInfo.secondaryTitle }); - this.listNodeDataSource.refreshData(this.listNodeUtils, MenuOperation.ADD_NODE, clickNodeId, [newNodeId]); - } - - public addNodeParam(nodeParam: NodeParam): TreeController { - if (nodeParam.primaryTitle != null && - !this.listNodeUtils.checkMainTitleIsValid(nodeParam.primaryTitle)) { - throw new Error('ListTreeNode[addNode]: ' + - 'The directory name cannot contain the following characters\ /: *? "< > | or exceeds the maximum length.'); - return null; - } - if (nodeParam.primaryTitle == null && nodeParam.icon == null) { - throw new Error('ListTreeNode[addNode]: ' + - 'The icon and directory name cannot be empty at the same time.'); - return null; - } - if (nodeParam.currentNodeId === this.ROOT_NODE_ID || nodeParam.currentNodeId === null) { - throw new Error('ListTreeNode[addNode]: currentNodeId can not be -1 or null.'); - return null; - } - this.nodeIdList.push(nodeParam.currentNodeId); - this.listNodeUtils.addNode(nodeParam.parentNodeId, nodeParam.currentNodeId, nodeParam); - return this; - } - - /** - * Initialize the interface of the tree view. This interface is used to generate ListNodeDataSource data. - * addNode is only designed for initialization. It can only be invoked during initialization. - * - * A maximum of 50 directory levels can be added. - * - * @param parentNodeId ID of the parent node. - * @param currentNodeId ID of the new node. The value cannot be -1 or null. - * @param nodeParam Configuration information of the newly added node. - * For details, see the comment description of NodeParam. - * @return ListTreeNode Tree view component proxy class. - * - * @since 10 - */ - public addNode(nodeParam?: NodeParam): TreeController { - if (nodeParam == null) { - this.add(); - } else { - if (nodeParam.primaryTitle != null && - !this.listNodeUtils.checkMainTitleIsValid(nodeParam.primaryTitle)) { - throw new Error('ListTreeNode[addNode]: ' + - 'The directory name cannot contain the following characters\ /: *? "< > | or exceeds the maximum length.'); - return null; - } - if (nodeParam.primaryTitle == null && nodeParam.icon == null) { - throw new Error('ListTreeNode[addNode]: ' + - 'The icon and directory name cannot be empty at the same time.'); - return null; - } - if (nodeParam.currentNodeId === this.ROOT_NODE_ID || nodeParam.currentNodeId === null) { - throw new Error('ListTreeNode[addNode]: currentNodeId can not be -1 or null.'); - return null; - } - this.nodeIdList.push(nodeParam.currentNodeId); - this.listNodeUtils.addNode(nodeParam.parentNodeId, nodeParam.currentNodeId, nodeParam); - return this; - } - } - - /** - * After the initialization is complete by calling the addNode interface, - * call this interface to complete initialization. - * - * This interface must be called when you finish initializing the ListTreeView by addNode. - * @since 10 - */ - public buildDone() { - this.listNodeDataSource.init(this.listNodeUtils); - this.nodeIdList.sort((a, b) => a - b); - } - - public refreshNode(parentId: number, parentSubTitle: ResourceStr = '', - currentSubtitle: ResourceStr = '') { - this.listNodeDataSource.setNodeSubtitlePara(parentId, parentSubTitle, currentSubtitle); - } - } -} \ No newline at end of file -- Gitee From 1c5ebbedcdbc237a5317fb350004d65ed71b6d18 Mon Sep 17 00:00:00 2001 From: humeng Date: Sat, 19 Oct 2024 15:03:35 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E9=AB=98=E9=98=B6?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: humeng --- BUILD.gn | 9 +- atomicservicenavigation/interfaces/BUILD.gn | 59 + .../interfaces/atomicservicenavigation.cpp | 51 + .../interfaces/atomicservicenavigation.js | 181 +++ .../source/atomicservicenavigation.ets | 68 + atomicserviceweb/interfaces/BUILD.gn | 64 + .../interfaces/api_policy_adapter.cpp | 47 + .../interfaces/api_policy_adapter.h | 39 + .../interfaces/atomicserviceweb.cpp | 114 ++ .../interfaces/atomicserviceweb.js | 1348 ++++++++++++++++ atomicserviceweb/source/atomicserviceweb.ets | 1362 +++++++++++++++++ bundle.json | 9 +- .../interfaces/BUILD.gn | 61 + .../innerfullscreenlaunchcomponent.cpp | 52 + .../innerfullscreenlaunchcomponent.js | 214 +++ .../source/innerfullscreenlaunchcomponent.ets | 171 +++ interstitialdialogaction/interfaces/BUILD.gn | 59 + .../interfaces/interstitialdialogaction.cpp | 51 + .../interfaces/interstitialdialogaction.js | 267 ++++ .../source/interstitialdialogaction.ets | 296 ++++ navpushpathhelper/BUILD.gn | 76 + navpushpathhelper/include/hsp_silentinstall.h | 37 + .../include/hsp_silentinstall_napi.h | 59 + .../include/silent_install_callback.h | 170 ++ navpushpathhelper/navpushpathhelper.js | 146 ++ navpushpathhelper/src/hsp_silentinstall.cpp | 117 ++ .../src/hsp_silentinstall_napi.cpp | 273 ++++ navpushpathhelper/src/navpushpathhelper.cpp | 75 + 28 files changed, 5472 insertions(+), 3 deletions(-) create mode 100644 atomicservicenavigation/interfaces/BUILD.gn create mode 100644 atomicservicenavigation/interfaces/atomicservicenavigation.cpp create mode 100644 atomicservicenavigation/interfaces/atomicservicenavigation.js create mode 100644 atomicservicenavigation/source/atomicservicenavigation.ets create mode 100644 atomicserviceweb/interfaces/BUILD.gn create mode 100644 atomicserviceweb/interfaces/api_policy_adapter.cpp create mode 100644 atomicserviceweb/interfaces/api_policy_adapter.h create mode 100644 atomicserviceweb/interfaces/atomicserviceweb.cpp create mode 100644 atomicserviceweb/interfaces/atomicserviceweb.js create mode 100644 atomicserviceweb/source/atomicserviceweb.ets create mode 100644 innerfullscreenlaunchcomponent/interfaces/BUILD.gn create mode 100644 innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.cpp create mode 100644 innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js create mode 100644 innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets create mode 100644 interstitialdialogaction/interfaces/BUILD.gn create mode 100644 interstitialdialogaction/interfaces/interstitialdialogaction.cpp create mode 100644 interstitialdialogaction/interfaces/interstitialdialogaction.js create mode 100644 interstitialdialogaction/source/interstitialdialogaction.ets create mode 100644 navpushpathhelper/BUILD.gn create mode 100644 navpushpathhelper/include/hsp_silentinstall.h create mode 100644 navpushpathhelper/include/hsp_silentinstall_napi.h create mode 100644 navpushpathhelper/include/silent_install_callback.h create mode 100644 navpushpathhelper/navpushpathhelper.js create mode 100644 navpushpathhelper/src/hsp_silentinstall.cpp create mode 100644 navpushpathhelper/src/hsp_silentinstall_napi.cpp create mode 100644 navpushpathhelper/src/navpushpathhelper.cpp diff --git a/BUILD.gn b/BUILD.gn index f01339f..545b2db 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -12,5 +12,12 @@ # limitations under the License. group("as_advanced_ui_component") { - deps = [ "atomicservicetabs/interfaces:atomicservicetabs" ] + deps = [ + "atomicservicenavigation/interfaces:atomicservicenavigation", + "atomicservicetabs/interfaces:atomicservicetabs", + "atomicserviceweb/interfaces:atomicserviceweb", + "innerfullscreenlaunchcomponent/interfaces:innerfullscreenlaunchcomponent", + "interstitialdialogaction/interfaces:interstitialdialogaction", + "navpushpathhelper:navpushpathhelper", + ] } diff --git a/atomicservicenavigation/interfaces/BUILD.gn b/atomicservicenavigation/interfaces/BUILD.gn new file mode 100644 index 0000000..5808d6b --- /dev/null +++ b/atomicservicenavigation/interfaces/BUILD.gn @@ -0,0 +1,59 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/config/components/ets_frontend/es2abc_config.gni") +import("//build/ohos.gni") +import("//foundation/arkui/ace_engine/ace_config.gni") +import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") +import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") + +es2abc_gen_abc("gen_atomicservicenavigation_abc") { + src_js = rebase_path("atomicservicenavigation.js") + dst_file = rebase_path(target_out_dir + "/atomicservicenavigation.abc") + in_puts = [ "atomicservicenavigation.js" ] + out_puts = [ target_out_dir + "/atomicservicenavigation.abc" ] + extra_args = [ "--module" ] +} + +gen_js_obj("atomicservicenavigation_abc") { + input = get_label_info(":gen_atomicservicenavigation_abc", "target_out_dir") + + "/atomicservicenavigation.abc" + output = target_out_dir + "/atomicservicenavigation_abc.o" + dep = ":gen_atomicservicenavigation_abc" +} + +gen_obj("atomicservicenavigation_abc_preview") { + input = get_label_info(":gen_atomicservicenavigation_abc", "target_out_dir") + + "/atomicservicenavigation.abc" + output = target_out_dir + "/atomicservicenavigation_abc.c" + snapshot_dep = [ ":gen_atomicservicenavigation_abc" ] +} + +ohos_shared_library("atomicservicenavigation") { + sources = [ "atomicservicenavigation.cpp" ] + + if (use_mingw_win || use_mac || use_linux) { + deps = [ ":gen_obj_src_atomicservicenavigation_abc_preview" ] + } else { + deps = [ ":atomicservicenavigation_abc" ] + } + + external_deps = [ + "hilog:libhilog", + "napi:ace_napi", + ] + + relative_install_dir = "module/atomicservice" + subsystem_name = "arkui" + part_name = "as_advanced_ui_component" +} diff --git a/atomicservicenavigation/interfaces/atomicservicenavigation.cpp b/atomicservicenavigation/interfaces/atomicservicenavigation.cpp new file mode 100644 index 0000000..8cdce4d --- /dev/null +++ b/atomicservicenavigation/interfaces/atomicservicenavigation.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "napi/native_node_api.h" + +extern const char _binary_atomicservicenavigation_abc_start[]; +extern const char _binary_atomicservicenavigation_abc_end[]; + +// Napi get abc code function +extern "C" __attribute__((visibility("default"))) +void NAPI_atomicservice_AtomicServiceNavigation_GetABCCode(const char **buf, int *buflen) +{ + if (buf != nullptr) { + *buf = _binary_atomicservicenavigation_abc_start; + } + if (buflen != nullptr) { + *buflen = _binary_atomicservicenavigation_abc_end - _binary_atomicservicenavigation_abc_start; + } +} + +/* + * Module define + */ +static napi_module AtomicServiceNavigationModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_modname = "atomicservice.AtomicServiceNavigation", + .nm_priv = ((void*)0), + .reserved = { 0 }, +}; + +/* + * Module registerfunction + */ +extern "C" __attribute__((constructor)) void AtomicServiceNavigationRegisterModule(void) +{ + napi_module_register(&AtomicServiceNavigationModule); +} \ No newline at end of file diff --git a/atomicservicenavigation/interfaces/atomicservicenavigation.js b/atomicservicenavigation/interfaces/atomicservicenavigation.js new file mode 100644 index 0000000..8d98ae4 --- /dev/null +++ b/atomicservicenavigation/interfaces/atomicservicenavigation.js @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if (!("finalizeConstruction" in ViewPU.prototype)) { + Reflect.set(ViewPU.prototype, "finalizeConstruction", () => { }); +} +export class AtomicServiceNavigation extends ViewPU { + constructor(w, x, y, z = -1, a1 = undefined, b1) { + super(w, y, z, b1); + if (typeof a1 === "function") { + this.paramsGenerator_ = a1; + } + this.__navPathStack = new ObservedPropertyObjectPU(new NavPathStack(), this, "navPathStack"); + this.navigationContent = undefined; + this.__title = new SynchedPropertyObjectOneWayPU(x.title, this, "title"); + this.__titleOptions = new SynchedPropertyObjectOneWayPU(x.titleOptions, this, "titleOptions"); + this.__hideTitleBar = new SynchedPropertySimpleOneWayPU(x.hideTitleBar, this, "hideTitleBar"); + this.__navBarWidth = new SynchedPropertyObjectOneWayPU(x.navBarWidth, this, "navBarWidth"); + this.__mode = new SynchedPropertySimpleOneWayPU(x.mode, this, "mode"); + this.navDestinationBuilder = this.defaultNavDestinationBuilder; + this.__navBarWidthRange = new SynchedPropertyObjectOneWayPU(x.navBarWidthRange, this, "navBarWidthRange"); + this.__minContentWidth = new SynchedPropertyObjectOneWayPU(x.minContentWidth, this, "minContentWidth"); + this.stateChangeCallback = undefined; + this.modeChangeCallback = undefined; + this.setInitiallyProvidedValue(x); + this.finalizeConstruction(); + } + setInitiallyProvidedValue(v) { + if (v.navPathStack !== undefined) { + this.navPathStack = v.navPathStack; + } + if (v.navigationContent !== undefined) { + this.navigationContent = v.navigationContent; + } + if (v.titleOptions === undefined) { + this.__titleOptions.set({ isBlurEnabled: true }); + } + if (v.navDestinationBuilder !== undefined) { + this.navDestinationBuilder = v.navDestinationBuilder; + } + if (v.stateChangeCallback !== undefined) { + this.stateChangeCallback = v.stateChangeCallback; + } + if (v.modeChangeCallback !== undefined) { + this.modeChangeCallback = v.modeChangeCallback; + } + } + updateStateVars(u) { + this.__title.reset(u.title); + this.__titleOptions.reset(u.titleOptions); + this.__hideTitleBar.reset(u.hideTitleBar); + this.__navBarWidth.reset(u.navBarWidth); + this.__mode.reset(u.mode); + this.__navBarWidthRange.reset(u.navBarWidthRange); + this.__minContentWidth.reset(u.minContentWidth); + } + purgeVariableDependenciesOnElmtId(t) { + this.__navPathStack.purgeDependencyOnElmtId(t); + this.__title.purgeDependencyOnElmtId(t); + this.__titleOptions.purgeDependencyOnElmtId(t); + this.__hideTitleBar.purgeDependencyOnElmtId(t); + this.__navBarWidth.purgeDependencyOnElmtId(t); + this.__mode.purgeDependencyOnElmtId(t); + this.__navBarWidthRange.purgeDependencyOnElmtId(t); + this.__minContentWidth.purgeDependencyOnElmtId(t); + } + aboutToBeDeleted() { + this.__navPathStack.aboutToBeDeleted(); + this.__title.aboutToBeDeleted(); + this.__titleOptions.aboutToBeDeleted(); + this.__hideTitleBar.aboutToBeDeleted(); + this.__navBarWidth.aboutToBeDeleted(); + this.__mode.aboutToBeDeleted(); + this.__navBarWidthRange.aboutToBeDeleted(); + this.__minContentWidth.aboutToBeDeleted(); + SubscriberManager.Get().delete(this.id__()); + this.aboutToBeDeletedInternal(); + } + get navPathStack() { + return this.__navPathStack.get(); + } + set navPathStack(s) { + this.__navPathStack.set(s); + } + get title() { + return this.__title.get(); + } + set title(r) { + this.__title.set(r); + } + get titleOptions() { + return this.__titleOptions.get(); + } + set titleOptions(q) { + this.__titleOptions.set(q); + } + get hideTitleBar() { + return this.__hideTitleBar.get(); + } + set hideTitleBar(p) { + this.__hideTitleBar.set(p); + } + get navBarWidth() { + return this.__navBarWidth.get(); + } + set navBarWidth(o) { + this.__navBarWidth.set(o); + } + get mode() { + return this.__mode.get(); + } + set mode(n) { + this.__mode.set(n); + } + get navBarWidthRange() { + return this.__navBarWidthRange.get(); + } + set navBarWidthRange(m) { + this.__navBarWidthRange.set(m); + } + get minContentWidth() { + return this.__minContentWidth.get(); + } + set minContentWidth(l) { + this.__minContentWidth.set(l); + } + defaultNavDestinationBuilder(i, j, k = null) { + } + initialRender() { + this.observeComponentCreation2((g, h) => { + Navigation.create(this.navPathStack); + Navigation.title(ObservedObject.GetRawObject(this.title), { + backgroundColor: this.titleOptions?.backgroundColor, + backgroundBlurStyle: this.titleOptions?.isBlurEnabled ? BlurStyle.COMPONENT_THICK : BlurStyle.NONE, + barStyle: this.titleOptions?.barStyle + }); + Navigation.titleMode(NavigationTitleMode.Mini); + Navigation.hideBackButton(true); + Navigation.hideTitleBar(this.hideTitleBar); + Navigation.navBarWidth(ObservedObject.GetRawObject(this.navBarWidth)); + Navigation.navBarPosition(NavBarPosition.Start); + Navigation.mode(this.mode); + Navigation.navDestination({ builder: this.navDestinationBuilder.bind(this) }); + Navigation.navBarWidthRange(ObservedObject.GetRawObject(this.navBarWidthRange)); + Navigation.minContentWidth(ObservedObject.GetRawObject(this.minContentWidth)); + Navigation.onNavBarStateChange(this.stateChangeCallback); + Navigation.onNavigationModeChange(this.modeChangeCallback); + }, Navigation); + this.observeComponentCreation2((c, d) => { + If.create(); + if (this.navigationContent) { + this.ifElseBranchUpdateFunction(0, () => { + this.navigationContent.bind(this)(this); + }); + } + else { + this.ifElseBranchUpdateFunction(1, () => { + }); + } + }, If); + If.pop(); + Navigation.pop(); + } + rerender() { + this.updateDirtyElements(); + } +} + +export default { AtomicServiceNavigation }; \ No newline at end of file diff --git a/atomicservicenavigation/source/atomicservicenavigation.ets b/atomicservicenavigation/source/atomicservicenavigation.ets new file mode 100644 index 0000000..13596b8 --- /dev/null +++ b/atomicservicenavigation/source/atomicservicenavigation.ets @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Callback } from '@ohos.base'; + +@Component +export struct AtomicServiceNavigation { + @State navPathStack?: NavPathStack = new NavPathStack(); + @BuilderParam navigationContent?: Callback; + @Prop title?: ResourceStr; + @Prop titleOptions?: TitleOptions = { isBlurEnabled: true }; + @Prop hideTitleBar?: boolean; + @Prop navBarWidth?: Length; + @Prop mode?: NavigationMode; + @BuilderParam navDestinationBuilder?: NavDestinationBuilder = this.defaultNavDestinationBuilder; + @Prop navBarWidthRange?: [Dimension, Dimension]; + @Prop minContentWidth?: Dimension; + stateChangeCallback?: Callback; + modeChangeCallback?: Callback; + + @Builder + defaultNavDestinationBuilder(name: string, param?: Object) { + } + + build() { + Navigation(this.navPathStack) { + if (this.navigationContent) { + this.navigationContent() + } + } + .title(this.title, { + backgroundColor: this.titleOptions?.backgroundColor, + backgroundBlurStyle: this.titleOptions?.isBlurEnabled ? BlurStyle.COMPONENT_THICK : BlurStyle.NONE, + barStyle: this.titleOptions?.barStyle + }) + .titleMode(NavigationTitleMode.Mini) + .hideBackButton(true) + .hideTitleBar(this.hideTitleBar) + .navBarWidth(this.navBarWidth) + .navBarPosition(NavBarPosition.Start) + .mode(this.mode) + .navDestination(this.navDestinationBuilder) + .navBarWidthRange(this.navBarWidthRange) + .minContentWidth(this.minContentWidth) + .onNavBarStateChange(this.stateChangeCallback) + .onNavigationModeChange(this.modeChangeCallback) + } +} + +export interface TitleOptions { + backgroundColor?: ResourceColor, + isBlurEnabled?: boolean, + barStyle?: BarStyle +} + +export type NavDestinationBuilder = (name: string, param?: Object) => void; \ No newline at end of file diff --git a/atomicserviceweb/interfaces/BUILD.gn b/atomicserviceweb/interfaces/BUILD.gn new file mode 100644 index 0000000..a8deb63 --- /dev/null +++ b/atomicserviceweb/interfaces/BUILD.gn @@ -0,0 +1,64 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/config/components/ets_frontend/es2abc_config.gni") +import("//build/ohos.gni") +import("//foundation/arkui/ace_engine/ace_config.gni") +import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") +import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") + +es2abc_gen_abc("gen_atomicserviceweb_abc") { + src_js = rebase_path("atomicserviceweb.js") + dst_file = rebase_path(target_out_dir + "/atomicserviceweb.abc") + in_puts = [ "atomicserviceweb.js" ] + out_puts = [ target_out_dir + "/atomicserviceweb.abc" ] + extra_args = [ "--module" ] +} + +gen_js_obj("atomicserviceweb_abc") { + input = get_label_info(":gen_atomicserviceweb_abc", "target_out_dir") + + "/atomicserviceweb.abc" + output = target_out_dir + "/atomicserviceweb_abc.o" + dep = ":gen_atomicserviceweb_abc" +} + +gen_obj("atomicserviceweb_abc_preview") { + input = get_label_info(":gen_atomicserviceweb_abc", "target_out_dir") + + "/atomicserviceweb.abc" + output = target_out_dir + "/atomicserviceweb_abc.c" + snapshot_dep = [ ":gen_atomicserviceweb_abc" ] +} + +ohos_shared_library("atomicserviceweb") { + include_dirs = [ "include" ] + + sources = [ + "api_policy_adapter.cpp", + "atomicserviceweb.cpp", + ] + + if (use_mingw_win || use_mac || use_linux) { + deps = [ ":gen_obj_src_atomicserviceweb_abc_preview" ] + } else { + deps = [ ":atomicserviceweb_abc" ] + } + + external_deps = [ + "hilog:libhilog", + "napi:ace_napi", + ] + + relative_install_dir = "module/atomicservice" + subsystem_name = "arkui" + part_name = "as_advanced_ui_component" +} diff --git a/atomicserviceweb/interfaces/api_policy_adapter.cpp b/atomicserviceweb/interfaces/api_policy_adapter.cpp new file mode 100644 index 0000000..05c6ea7 --- /dev/null +++ b/atomicserviceweb/interfaces/api_policy_adapter.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "api_policy_adapter.h" + +ApiPolicyAdapter::ApiPolicyAdapter() +{ +#ifndef __WIN32 + handle = dlopen("/system/lib64/platformsdk/libapipolicy_client.z.so", RTLD_NOW); + if (!handle) { + return; + } + func = reinterpret_cast(dlsym(handle, "CheckUrl")); +#endif +} + +ApiPolicyAdapter::~ApiPolicyAdapter() +{ +#ifndef __WIN32 + if (handle) { + dlclose(handle); + handle = nullptr; + } +#endif +} + +int32_t ApiPolicyAdapter::CheckUrl(const std::string& bundleName, const std::string& domainType, const std::string& url) +{ + int32_t res = 0; + if (func == nullptr) { + return res; + } + res = func(bundleName, domainType, url); + return res; +} diff --git a/atomicserviceweb/interfaces/api_policy_adapter.h b/atomicserviceweb/interfaces/api_policy_adapter.h new file mode 100644 index 0000000..03f009e --- /dev/null +++ b/atomicserviceweb/interfaces/api_policy_adapter.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef API_POLICY_ADAPTER_H +#define API_POLICY_ADAPTER_H + +#include "string" +#ifndef __WIN32 +#include +#endif + +class ApiPolicyAdapter { +public: + ApiPolicyAdapter(); + ~ApiPolicyAdapter(); + + int32_t CheckUrl(const std::string& bundleName, const std::string& domainType, const std::string& url); + + using CheckUrlFunc = int32_t (*)(const std::string&, const std::string&, const std::string&); + void SetCheckUrlFunc(CheckUrlFunc& func); + +private: + void *handle = nullptr; + CheckUrlFunc func = nullptr; +}; + +#endif diff --git a/atomicserviceweb/interfaces/atomicserviceweb.cpp b/atomicserviceweb/interfaces/atomicserviceweb.cpp new file mode 100644 index 0000000..03a3ba8 --- /dev/null +++ b/atomicserviceweb/interfaces/atomicserviceweb.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "napi/native_node_api.h" +#include "api_policy_adapter.h" + +using namespace std; + +extern const char _binary_atomicserviceweb_abc_start[]; +extern const char _binary_atomicserviceweb_abc_end[]; + +namespace HMS::AtomicServiceWeb { + static napi_value CheckUrl(napi_env env, napi_callback_info info) + { + const int indexTwo = 2; + size_t requireArgc = 3; + size_t argc = 3; + napi_value args[3] = { nullptr }; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); + + NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments"); + + napi_valuetype bundleNameType; + NAPI_CALL(env, napi_typeof(env, args[0], &bundleNameType)); + + napi_valuetype domainTypeType; + NAPI_CALL(env, napi_typeof(env, args[1], &domainTypeType)); + + napi_valuetype urlType; + NAPI_CALL(env, napi_typeof(env, args[indexTwo], &urlType)); + + NAPI_ASSERT(env, bundleNameType == napi_string && domainTypeType == napi_string && urlType == napi_string, + "Wrong argument type. String expected."); + + size_t maxValueLen = 1024; + char bundleNameValue[maxValueLen]; + size_t bundleNameLength = 0; + napi_get_value_string_utf8(env, args[0], bundleNameValue, maxValueLen, &bundleNameLength); + std::string bundleName = bundleNameValue; + + char domainTypeValue[maxValueLen]; + size_t domainTypeLength = 0; + napi_get_value_string_utf8(env, args[1], domainTypeValue, maxValueLen, &domainTypeLength); + std::string domainType = domainTypeValue; + + char urlValue[maxValueLen]; + size_t urlLength = 0; + napi_get_value_string_utf8(env, args[indexTwo], urlValue, maxValueLen, &urlLength); + std::string url = urlValue; + + std::shared_ptr apiPolicyAdapter = std::make_shared(); + int32_t res = apiPolicyAdapter->CheckUrl(bundleName, domainType, url); + + napi_value result; + NAPI_CALL(env, napi_create_double(env, res, &result)); + return result; + } + + static napi_value Init(napi_env env, napi_value exports) + { + napi_property_descriptor desc[] = { + DECLARE_NAPI_FUNCTION("checkUrl", CheckUrl), + }; + NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); + return exports; + } + + // Napi get abc code function + extern "C" __attribute__((visibility("default"))) + void NAPI_atomicservice_AtomicServiceWeb_GetABCCode(const char **buf, int *buflen) + { + if (buf != nullptr) { + *buf = _binary_atomicserviceweb_abc_start; + } + if (buflen != nullptr) { + *buflen = _binary_atomicserviceweb_abc_end - _binary_atomicserviceweb_abc_start; + } + } + + /* + * Module define + */ + static napi_module AtomicServiceWebModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "atomicservice.AtomicServiceWeb", + .nm_priv = ((void*)0), + .reserved = { 0 }, + }; + + /* + * Module registerfunction + */ + extern "C" __attribute__((constructor)) void AtomicServiceWebRegisterModule(void) + { + napi_module_register(&AtomicServiceWebModule); + } +} diff --git a/atomicserviceweb/interfaces/atomicserviceweb.js b/atomicserviceweb/interfaces/atomicserviceweb.js new file mode 100644 index 0000000..5cb35b2 --- /dev/null +++ b/atomicserviceweb/interfaces/atomicserviceweb.js @@ -0,0 +1,1348 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var __decorate = (this && this.__decorate) || function (a12, b12, c12, d12) { + var e12 = arguments.length, + f12 = e12 < 3 ? b12 : d12 === null ? d12 = Object.getOwnPropertyDescriptor(b12, c12) : d12, g12; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") { + f12 = Reflect.decorate(a12, b12, c12, d12); + } else { + for (var h12 = a12.length - 1; h12 >= 0; h12--) { + if (g12 = a12[h12]) { + f12 = (e12 < 3 ? g12(f12) : e12 > 3 ? g12(b12, c12, f12) : g12(b12, c12)) || f12; + } + } + } + return e12 > 3 && f12 && Object.defineProperty(b12, c12, f12), f12; +}; + +if (!("finalizeConstruction" in ViewPU.prototype)) { + Reflect.set(ViewPU.prototype, "finalizeConstruction", () => { + }); +} +const web_webview = requireNapi('web.webview'); +const router = requireNapi('router'); +const deviceInfo = requireNapi('deviceInfo'); +const geoLocationManager = requireNapi('geoLocationManager'); +const bundleManager = requireNapi('bundle.bundleManager'); +const abilityAccessCtrl = requireNapi('abilityAccessCtrl'); +const connection = requireNapi('net.connection'); +const request = requireNapi('request'); +const fs = requireNapi('file.fs'); +const util = requireNapi('util'); +const photoAccessHelper = requireNapi('file.photoAccessHelper'); +const filePreview = globalThis.requireNapi('filemanagement.filepreview', false, '', 'hms'); +const fileUri = requireNapi('file.fileuri'); +const picker = requireNapi('multimedia.cameraPicker'); +const filePicker = requireNapi('file.picker'); +const atomicServiceWebNapi = requireInternal('atomicservice.AtomicServiceWeb'); + +class AsError { + constructor(m11, n11) { + this.code = m11; + this.message = n11; + } +} + +class JsApiConfig { + constructor(i11, j11, k11, l11) { + this.apiName = i11; + this.minVersion = j11; + this.maxVersion = k11; + this.requiredFieldNames = l11; + } +} + +const LOG_ENABLE = true; +const LOG_PREFIX = '[AtomicServiceWebLog]'; +const UPLOAD_IMAGE_CACHE_DIR = '/cache/'; +const JAVA_SCRIPT_PROXY_OBJECT_NAME = 'atomicServiceProxy'; +const JAVA_SCRIPT_PROXY_API_NAME_LIST = ['invokeJsApi']; +const ATOMIC_SERVICE_JS_API_MAP = new Map(); +const registerJsApi = (u11, v11, w11, x11, y11) => { + ATOMIC_SERVICE_JS_API_MAP.set(u11, new JsApiConfig(v11, w11, x11, y11)); +}; +const MAX_VERSION = '99.99.99'; +const ATOMIC_SERVICE_JS_SDK_CURRENT_VERSION = '1.0.0'; +const PERMISSION_APPROXIMATELY_LOCATION = 'ohos.permission.APPROXIMATELY_LOCATION'; +const SYSTEM_INTERNAL_ERROR = new AsError(500, 'System internal error.'); +const JS_API_INVALID_INVOKE_ERROR = new AsError(200001, 'Invalid invoke.'); +const PARAM_REQUIRED_ERROR_CODE = 200002; +const PARAM_NUMBER_POSITIVE_ERROR_CODE = 200003; +const ROUTER_PARAM_MODE_INVALID_ERROR = new AsError(200004, 'Param mode is invalid.'); +const BACK_URL_NOT_EXIST_OR_OPENED_ERROR = new AsError(200005, 'Url is not exist or opened, can not be back.'); +const NAV_PATH_STACK_NOT_EXIST_ERROR_CODE = 200006; +const POP_PATH_NAME_NOT_EXIST_ERROR = new AsError(200007, 'Name is not exist or opened, can not be pop.'); +const POP_PATH_PARAM_INDEX_INVALID_ERROR = new AsError(200008, 'Param index is invalid.'); +const POP_PATH_INDEX_OUT_OF_RANGE_ERROR = new AsError(200009, 'The Index is out of range.'); +const UPLOAD_IMAGE_FILES_REQUIRED_ERROR = new AsError(200010, 'Param files is required.'); +const UPLOAD_IMAGE_FILE_NOT_EXIST_ERROR_CODE = 200011; +const UPLOAD_IMAGE_FILES_URI_REQUIRED_ERROR = new AsError(200012, 'Param uri of files is required.'); +const UPLOAD_FILE_ERROR = new AsError(200013, 'Upload file error.'); +const IMAGE_CAN_NOT_PREVIEW_ERROR = new AsError(200014, 'The filePath can not preview.'); +const NETWORK_NO_ACTIVE_ERROR = new AsError(200015, 'The network is not active.'); + +registerJsApi('router.pushUrl', 'pushUrl', '1.0.0', MAX_VERSION, ['url']); +registerJsApi('router.replaceUrl', 'replaceUrl', '1.0.0', MAX_VERSION, ['url']); +registerJsApi('router.back', 'backUrl', '1.0.0', MAX_VERSION, []); +registerJsApi('router.clear', 'clearUrl', '1.0.0', MAX_VERSION, []); +registerJsApi('navPathStack.pushPath', 'pushPath', '1.0.0', MAX_VERSION, ['name']); +registerJsApi('navPathStack.replacePath', 'replacePath', '1.0.0', MAX_VERSION, ['name']); +registerJsApi('navPathStack.pop', 'popPath', '1.0.0', MAX_VERSION, []); +registerJsApi('navPathStack.clear', 'clearPath', '1.0.0', MAX_VERSION, []); +registerJsApi('asWeb.postMessage', 'postMessage', '1.0.0', MAX_VERSION, ['data']); +registerJsApi('asWeb.getEnv', 'getEnv', '1.0.0', MAX_VERSION, []); +registerJsApi('asWeb.checkJsApi', 'checkJsApi', '1.0.0', MAX_VERSION, ['jsApiList']); +registerJsApi('cameraPicker.pick', 'pickCamera', '1.0.0', MAX_VERSION, ['mediaTypes', 'cameraPosition']); +registerJsApi('photoViewPicker.select', 'selectPhoto', '1.0.0', MAX_VERSION, []); +registerJsApi('filePreview.openPreview', 'openPreview', '1.0.0', MAX_VERSION, ['uri']); +registerJsApi('request.uploadFile', 'uploadFile', '1.0.0', MAX_VERSION, ['url', 'files']); +registerJsApi('request.downloadFile', 'downloadFile', '1.0.0', MAX_VERSION, ['url']); +registerJsApi('connection.getNetworkType', 'getNetworkType', '1.0.0', MAX_VERSION, []); +registerJsApi('location.getLocation', 'getLocation', '1.0.0', MAX_VERSION, []); + +export class AtomicServiceWeb extends ViewPU { + constructor(s10, t10, u10, v10 = -1, w10 = undefined, x10) { + super(s10, u10, v10, x10); + if (typeof w10 === "function") { + this.paramsGenerator_ = w10; + } + this.src = undefined; + this.navPathStack = undefined; + this.__mixedMode = new SynchedPropertySimpleOneWayPU(t10.mixedMode, this, "mixedMode"); + this.__darkMode = new SynchedPropertySimpleOneWayPU(t10.darkMode, this, "darkMode"); + this.__forceDarkAccess = new SynchedPropertySimpleOneWayPU(t10.forceDarkAccess, this, "forceDarkAccess"); + this.__controller = new SynchedPropertyNesedObjectPU(t10.controller, this, "controller"); + this.onMessage = () => { + }; + this.onErrorReceive = () => { + }; + this.onHttpErrorReceive = () => { + }; + this.onPageBegin = () => { + }; + this.onPageEnd = () => { + }; + this.onProgressChange = () => { + }; + this.onControllerAttached = undefined; + this.onLoadIntercept = undefined; + this.context = this.getUIContext().getHostContext(); + this.webViewController = new web_webview.WebviewController(); + this.schemeHandler = new web_webview.WebSchemeHandler(); + this.atomicService = undefined; + this.atomicServiceProxy = undefined; + this.setInitiallyProvidedValue(t10); + this.finalizeConstruction(); + } + + setInitiallyProvidedValue(r10) { + if (r10.src !== undefined) { + this.src = r10.src; + } + if (r10.navPathStack !== undefined) { + this.navPathStack = r10.navPathStack; + } + this.__controller.set(r10.controller); + if (r10.onMessage !== undefined) { + this.onMessage = r10.onMessage; + } + if (r10.onErrorReceive !== undefined) { + this.onErrorReceive = r10.onErrorReceive; + } + if (r10.onHttpErrorReceive !== undefined) { + this.onHttpErrorReceive = r10.onHttpErrorReceive; + } + if (r10.onPageBegin !== undefined) { + this.onPageBegin = r10.onPageBegin; + } + if (r10.onPageEnd !== undefined) { + this.onPageEnd = r10.onPageEnd; + } + if (r10.onProgressChange !== undefined) { + this.onProgressChange = r10.onProgressChange; + } + if (r10.onControllerAttached !== undefined) { + this.onControllerAttached = r10.onControllerAttached; + } + if (r10.onLoadIntercept !== undefined) { + this.onLoadIntercept = r10.onLoadIntercept; + } + if (r10.context !== undefined) { + this.context = r10.context; + } + if (r10.webViewController !== undefined) { + this.webViewController = r10.webViewController; + } + if (r10.schemeHandler !== undefined) { + this.schemeHandler = r10.schemeHandler; + } + if (r10.atomicService !== undefined) { + this.atomicService = r10.atomicService; + } + if (r10.atomicServiceProxy !== undefined) { + this.atomicServiceProxy = r10.atomicServiceProxy; + } + } + + updateStateVars(q10) { + this.__mixedMode.reset(q10.mixedMode); + this.__darkMode.reset(q10.darkMode); + this.__forceDarkAccess.reset(q10.forceDarkAccess); + this.__controller.set(q10.controller); + } + + purgeVariableDependenciesOnElmtId(p10) { + this.__mixedMode.purgeDependencyOnElmtId(p10); + this.__darkMode.purgeDependencyOnElmtId(p10); + this.__forceDarkAccess.purgeDependencyOnElmtId(p10); + this.__controller.purgeDependencyOnElmtId(p10); + } + + aboutToBeDeleted() { + this.__mixedMode.aboutToBeDeleted(); + this.__darkMode.aboutToBeDeleted(); + this.__forceDarkAccess.aboutToBeDeleted(); + this.__controller.aboutToBeDeleted(); + SubscriberManager.Get().delete(this.id__()); + this.aboutToBeDeletedInternal(); + } + + get mixedMode() { + return this.__mixedMode.get(); + } + + set mixedMode(t11) { + this.__mixedMode.set(t11); + } + + get darkMode() { + return this.__darkMode.get(); + } + + set darkMode(s11) { + this.__darkMode.set(s11); + } + + get forceDarkAccess() { + return this.__forceDarkAccess.get(); + } + + set forceDarkAccess(r11) { + this.__forceDarkAccess.set(r11); + } + + get controller() { + return this.__controller.get(); + } + + aboutToAppear() { + if (!this.atomicService) { + this.atomicService = new AtomicServiceApi(this.context, this.navPathStack, this.onMessage); + this.atomicServiceProxy = new AtomicServiceProxy(this.atomicService); + } + try { + let h2 = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); + if (h2?.appInfo?.appProvisionType === 'debug') { + console.log(`AtomicServiceWeb setWebDebuggingAccess`); + web_webview.WebviewController.setWebDebuggingAccess(true); + } + } catch (d2) { + console.error(`AtomicServiceWeb set Web Debug Mode failed, code is ${d2.code}, message is ${d2.message}`); + } + } + + aboutToDisappear() { + this.atomicService?.notifyMessage(); + } + + initialRender() { + this.observeComponentCreation2((g10, h10) => { + Web.create({ src: this.src, controller: this.webViewController }); + Web.zoomAccess(false); + Web.allowWindowOpenMethod(false); + Web.domStorageAccess(true); + Web.layoutMode(WebLayoutMode.NONE); + Web.mixedMode(this.mixedMode); + Web.darkMode(this.darkMode); + Web.forceDarkAccess(this.forceDarkAccess); + Web.onErrorReceive((q11) => this.onCommonCallBack('onErrorReceive', q11, this.onErrorReceive)); + Web.onHttpErrorReceive((p11) => this.onCommonCallBack('onHttpErrorReceive', p11, this.onHttpErrorReceive)); + Web.onPageBegin((l10) => this.onCommonCallBack('onPageBegin', l10, this.onPageBegin)); + Web.onPageEnd((b11) => this.onCommonCallBack('onPageEnd', b11, this.onPageEnd)); + Web.onProgressChange((a11) => this.onCommonCallBack('onProgressChange', a11, this.onProgressChange)); + Web.onControllerAttached(() => { + this.registerJavaScriptProxy(); + this.schemeHandler.onRequestStart((z10) => { + return !this.checkUrl(z10.getRequestUrl()); + }); + this.webViewController.setWebSchemeHandler('https', this.schemeHandler); + this.initAtomicServiceWebController(); + if (this.onControllerAttached) { + try { + this.onControllerAttached(); + } catch (y10) { + console.error(`AtomicServiceWeb onControllerAttached failed, code is ${y10.code}, message is ${y10.message}`); + } + } + }); + Web.onOverrideUrlLoading((i10) => { + return !this.checkUrl(i10.getRequestUrl()); + }); + Web.onLoadIntercept(m7 => { + let n7 = !this.checkUrl(m7.data.getRequestUrl()); + if (!n7 && this.onLoadIntercept) { + try { + return this.onLoadIntercept(m7); + } catch (u7) { + console.error(`AtomicServiceWeb onLoadIntercept failed, code is ${u7.code}, message is ${u7.message}`); + return true; + } + } + return n7; + }); + }, Web); + } + + onCommonCallBack(q5, e6, j6) { + try { + j6 && j6(e6); + } catch (k7) { + console.error(`AtomicServiceWeb ${q5} failed, code is ${k7.code}, message is ${k7.message}`); + } + } + + registerJavaScriptProxy() { + try { + this.webViewController.registerJavaScriptProxy(this.atomicServiceProxy, JAVA_SCRIPT_PROXY_OBJECT_NAME, + JAVA_SCRIPT_PROXY_API_NAME_LIST); + } catch (d10) { + let e10 = d10; + console.error(`AtomicServiceWeb registerJavaScriptProxy failed, code is ${e10.code}, message is ${e10.message}`); + } + } + + initAtomicServiceWebController() { + if (!this.controller) { + return; + } + this.controller.setWebviewController(this.webViewController); + } + + cutUrl(b10) { + if (b10) { + let c10 = b10.indexOf('?'); + if (c10 > -1) { + return b10.substring(0, c10); + } + } + return b10; + } + + checkUrl(q1) { + if (!q1) { + return false; + } + if (q1.startsWith('resource://rawfile')) { + return true; + } + try { + let w1 = this.context.abilityInfo.bundleName; + let t1 = 'webView'; + q1 = this.cutUrl(q1); + let res = atomicServiceWebNapi.checkUrl(w1, t1, q1); + return res === 0; + } catch (j2) { + let n2 = j2; + console.error(`AtomicServiceWeb checkUrl failed, code is ${n2.code}, message is ${n2.message}`); + return false; + } + } + + rerender() { + this.updateDirtyElements(); + } +} +let AtomicServiceWebController = class AtomicServiceWebController { + setWebviewController(l5) { + this.webViewController = l5; + } + + checkWebviewController() { + if (!this.webViewController) { + const d5 = { + name: '', + message: 'Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component.', + code: 17100001, + }; + throw d5; + } + } + + getUserAgent() { + this.checkWebviewController(); + return this.webViewController?.getUserAgent(); + } + + getCustomUserAgent() { + this.checkWebviewController(); + return this.webViewController?.getCustomUserAgent(); + } + + setCustomUserAgent(z4) { + this.checkWebviewController(); + this.webViewController?.setCustomUserAgent(z4); + } + + accessForward() { + this.checkWebviewController(); + return this.webViewController?.accessForward(); + } + + accessBackward() { + this.checkWebviewController(); + return this.webViewController?.accessBackward(); + } + + accessStep(d4) { + this.checkWebviewController(); + return this.webViewController?.accessStep(d4); + } + + forward() { + this.checkWebviewController(); + this.webViewController?.forward(); + } + + backward() { + this.checkWebviewController(); + this.webViewController?.backward(); + } + + refresh() { + this.checkWebviewController(); + this.webViewController?.refresh(); + } + + loadUrl(t3, y3) { + this.checkWebviewController(); + if (y3) { + this.webViewController?.loadUrl(t3, y3); + } else { + this.webViewController?.loadUrl(t3); + } + } +}; +AtomicServiceWebController = __decorate([ + Observed +], AtomicServiceWebController); + +export { AtomicServiceWebController }; + +class AtomicServiceProxy { + constructor(z9) { + this.atomicService = z9; + } + + invokeJsApi(u9, v9) { + try { + v9 = v9 || {}; + if (!u9 || !ATOMIC_SERVICE_JS_API_MAP.has(u9)) { + this.atomicService.errorWithCodeAndMsg(JS_API_INVALID_INVOKE_ERROR, v9); + return; + } + let x9 = ATOMIC_SERVICE_JS_API_MAP.get(u9); + if (!this.atomicService.checkRequiredFieldInOptions(x9, v9)) { + return; + } + let y9 = this.atomicService; + y9[x9?.apiName](v9); + } catch (w9) { + this.atomicService.error(w9, v9); + } + } +} + +class AtomicService { + constructor(q9, r9, s9) { + this.messageDataList = []; + this.onMessage = () => { + }; + this.context = q9; + this.navPathStack = r9; + this.onMessage = s9 ? s9 : this.onMessage; + } + + success(o9, p9) { + try { + p9?.callback && p9?.callback(undefined, o9); + } catch (f3) { + this.consoleError(`callback error, code is ${f3.code}, message is ${f3.message}`); + } + } + + error(m9, n9) { + try { + n9?.callback && n9?.callback(new AsError(m9.code ? m9.code : SYSTEM_INTERNAL_ERROR.code, + m9.message ? m9.message : SYSTEM_INTERNAL_ERROR.message)); + } catch (a3) { + this.consoleError(`callback error, code is ${a3.code}, message is ${a3.message}`); + } + } + + errorWithCodeAndMsg(k9, l9) { + try { + l9?.callback && l9?.callback(k9); + } catch (u2) { + this.consoleError(`callback error, code is ${u2.code}, message is ${u2.message}`); + } + } + + consoleLog(j9) { + if (LOG_ENABLE) { + console.log(`${LOG_PREFIX} ${j9}`); + } + } + + consoleError(i9) { + if (LOG_ENABLE) { + console.error(`${LOG_PREFIX} ${i9}`); + } + } + + logOptions(g9, h9) { + this.consoleLog(`${g9} options=${JSON.stringify(h9)}`); + } + + checkParamRequired(d9, e9, f9) { + if (e9 === undefined || e9 === null || e9 === '') { + this.errorWithCodeAndMsg(new AsError(PARAM_REQUIRED_ERROR_CODE, `Param ${d9} is required.`), f9); + return false; + } + return true; + } + + checkNumberParamPositive(a9, b9, c9) { + if (b9 <= 0) { + this.errorWithCodeAndMsg(new AsError(PARAM_NUMBER_POSITIVE_ERROR_CODE, + `Param ${a9} must be a positive number.`), c9); + return false; + } + return true; + } + + checkRequiredFieldInOptions(v8, w8) { + if (!v8) { + return false; + } + if (!v8.requiredFieldNames) { + return true; + } + let x8 = w8; + for (let y8 = 0; y8 < v8.requiredFieldNames.length; y8++) { + let z8 = v8.requiredFieldNames[y8]; + if (!this.checkParamRequired(z8, x8[z8], w8)) { + return false; + } + } + return true; + } + + checkRouterMode(t8, u8) { + if (!t8 || t8 === 'Single' || t8 === 'Standard') { + return true; + } + this.errorWithCodeAndMsg(ROUTER_PARAM_MODE_INVALID_ERROR, u8); + return false; + } + + parseRouterMode(s8) { + return s8 === 'Single' ? router.RouterMode.Single : router.RouterMode.Standard; + } + + getRouterIndexByDelta(o8) { + let p8 = Number.parseInt(router.getLength()); + for (let q8 = p8; q8 > 0; q8--) { + let r8 = router.getStateByIndex(q8); + if (r8?.name && o8-- == 0) { + return q8; + } + } + return 1; + } + + checkBackUrlExists(i8, j8) { + let k8 = Number.parseInt(router.getLength()); + for (let l8 = k8; l8 > 0; l8--) { + let m8 = router.getStateByIndex(l8); + if (m8?.name) { + let n8 = m8?.path + m8?.name; + if (n8 === i8) { + return true; + } + } + } + this.errorWithCodeAndMsg(BACK_URL_NOT_EXIST_OR_OPENED_ERROR, j8); + return false; + } + + checkNavPathStack(g8, h8) { + if (!this.navPathStack) { + this.errorWithCodeAndMsg(new AsError(NAV_PATH_STACK_NOT_EXIST_ERROR_CODE, + `Current page is not NavDestination, not support ${g8}().`), h8); + return false; + } + return true; + } + + getNavPathIndexByDelta(e8) { + let f8 = this.navPathStack?.getAllPathName(); + if (!f8 || f8.length == 0) { + return -1; + } + return f8.length > e8 ? (f8.length - e8 - 1) : -1; + } + + onPopHandler(c8, d8) { + if (!c8?.info || !d8) { + return; + } + d8(new OnPopEvent(c8.info.name, c8.info.param, c8.result)); + } + + getCurrentNavPathInfo() { + let a8 = this.navPathStack?.getAllPathName(); + let b8 = (a8 && a8.length > 0) ? + new NavPathInfo(a8[a8.length - 1], a8.length - 1) : new NavPathInfo(undefined, -1); + if (b8.index >= 0) { + b8.param = this.navPathStack?.getParamByIndex(b8.index); + } + return b8; + } + + notifyMessage() { + if (this.messageDataList.length <= 0) { + return; + } + try { + this.onMessage(new OnMessageEvent(this.messageDataList)); + } catch (q2) { + this.consoleError(`onMessage failed, code is ${q2.code}, message is ${q2.message}`); + } + this.messageDataList = []; + } + + isJsApiEnable(z7) { + if (!z7) { + return false; + } + if (this.compareVersion(z7.minVersion, ATOMIC_SERVICE_JS_SDK_CURRENT_VERSION) && + this.compareVersion(ATOMIC_SERVICE_JS_SDK_CURRENT_VERSION, z7.maxVersion)) { + return true; + } + return false; + } + + compareVersion(p7, q7) { + if (!p7 || !q7) { + return false; + } + let r7 = p7.split('.').map(y7 => Number.parseInt(y7)); + let s7 = q7.split('.').map(x7 => Number.parseInt(x7)); + const t7 = Math.max(r7.length, s7.length); + for (let w7 = 0; w7 < t7; w7++) { + if (r7[w7] < s7[w7]) { + return true; + } else if (r7[w7] > s7[w7]) { + return false; + } + } + if (r7.length < s7.length) { + return true; + } + if (r7.length > s7.length) { + return false; + } + return true; + } + + getUri(o7) { + if (!o7 || o7.startsWith('file://')) { + return o7; + } + return fileUri.getUriFromPath(o7); + } + + async checkUploadFile(e7) { + if (!e7.files || e7.files.length <= 0) { + this.errorWithCodeAndMsg(UPLOAD_IMAGE_FILES_REQUIRED_ERROR, e7); + return new CheckUploadFileResult(false); + } + let f7 = new Map(); + for (let g7 = 0; g7 < e7.files?.length; g7++) { + let h7 = e7.files[g7]; + if (!h7.uri) { + this.errorWithCodeAndMsg(UPLOAD_IMAGE_FILES_URI_REQUIRED_ERROR, e7); + return new CheckUploadFileResult(false); + } + if (!h7.uri.startsWith('file://') && !fs.accessSync(h7.uri, fs.AccessModeType.EXIST)) { + this.errorWithCodeAndMsg(new AsError(UPLOAD_IMAGE_FILE_NOT_EXIST_ERROR_CODE, + `File uri ${h7.uri} is not exist.`), e7); + return new CheckUploadFileResult(false); + } + let i7 = h7.uri; + let j7 = h7.uri; + if (j7.indexOf(UPLOAD_IMAGE_CACHE_DIR) < 0) { + let l7 = j7.startsWith('file://') ? j7 : fileUri.getUriFromPath(h7.uri); + j7 = this.context.cacheDir + '/' + j7.substring(j7.lastIndexOf('/') + 1); + try { + await fs.copy(l7, fileUri.getUriFromPath(j7)); + } catch (x1) { + this.errorWithCodeAndMsg(UPLOAD_FILE_ERROR, e7); + return new CheckUploadFileResult(false); + } + } + h7.uri = 'internal://' + j7.substring(j7.indexOf(UPLOAD_IMAGE_CACHE_DIR) + 1); + f7.set(j7, i7); + } + return new CheckUploadFileResult(true, f7); + } + + convertToRequestData(a7) { + let b7 = []; + if (a7) { + a7.forEach(d7 => { + if (!d7.name || !d7.value) { + return; + } + b7.push({ name: d7.name, value: d7.value }); + }); + } + return b7; + } + + convertToFile(w6) { + let x6 = []; + if (w6) { + w6.forEach(z6 => { + x6.push({ + filename: z6.filename, + name: z6.name, + uri: z6.uri, + type: z6.type + }); + }); + } + return x6; + } + + handleUploadFileResult(p6, q6, r6) { + let s6 = []; + if (p6) { + p6.forEach(u6 => { + let v6 = u6.path ? q6.get(u6.path) : u6.path; + s6.push(new UploadFileTaskState(v6 ? v6 : u6.path, u6.responseCode, u6.message)); + }); + } + this.success(new UploadFileResult(s6), r6); + } + + parseFileNameFromUrl(m6) { + if (!m6) { + return ''; + } + let n6 = m6.split('?')[0]; + if (n6.indexOf('/') < 0) { + return ''; + } + let o6 = n6.lastIndexOf('/'); + if (o6 == (n6.length - 1)) { + return ''; + } + return n6.substring(o6 + 1); + } + + saveDownloadFile(z5, a6, b6, c6) { + let d6 = new filePicker.DocumentViewPicker(); + d6.save({ + newFileNames: [a6] + }).then(h6 => { + let i6 = h6[0]; + fs.copy(fileUri.getUriFromPath(z5), i6).then(() => { + c6 && c6(i6); + }).catch((l6) => { + this.error(l6, b6); + }); + }).catch((g6) => { + this.error(g6, b6); + }); + } + + checkAccessToken(v5) { + let w5 = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); + let x5 = w5.appInfo.accessTokenId; + let y5 = abilityAccessCtrl.createAtManager(); + return y5.checkAccessToken(x5, v5); + } + + checkPermissions(j5, k5) { + this.checkAccessToken(j5).then(o5 => { + if (o5 == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { + k5(undefined); + } else { + let p5 = abilityAccessCtrl.createAtManager(); + p5.requestPermissionsFromUser(this.context, [j5]).then(t5 => { + for (let u5 = 0; u5 < t5.authResults.length; u5++) { + if (t5.authResults[u5] != 0) { + return; + } + } + k5(undefined); + }).catch((s5) => { + k5(s5); + }); + } + }).catch((n5) => { + k5(n5); + }); + } +} + +class AtomicServiceApi extends AtomicService { + constructor(g5, h5, i5) { + super(g5, h5, i5); + } + + pushUrl(c5) { + if (!this.checkRouterMode(c5.mode, c5)) { + return; + } + router.pushUrl({ url: c5.url, params: c5.params }, this.parseRouterMode(c5.mode)).then(() => { + this.success(new PushUrlResult(), c5); + }).catch((f5) => { + this.error(f5, c5); + }); + } + + replaceUrl(y4) { + if (!this.checkRouterMode(y4.mode, y4)) { + return; + } + router.replaceUrl({ url: y4.url, params: y4.params }, this.parseRouterMode(y4.mode)).then(() => { + this.success(new ReplaceUrlResult(), y4); + }).catch((b5) => { + this.error(b5, y4); + }); + } + + backUrl(x4) { + if (x4.url) { + if (!this.checkBackUrlExists(x4.url, x4)) { + return; + } + router.back({ url: x4.url, params: x4.params }); + this.success(new BackUrlResult(), x4); + } else if (x4.index || x4.index === 0) { + if (!this.checkNumberParamPositive('index', x4.index, x4)) { + return; + } + router.back(x4.index, x4.params); + this.success(new BackUrlResult(), x4); + } else if (x4.delta || x4.delta === 0) { + if (!this.checkNumberParamPositive('delta', x4.delta, x4)) { + return; + } + router.back(this.getRouterIndexByDelta(x4.delta), x4.params); + this.success(new BackUrlResult(), x4); + } else { + router.back(); + this.success(new BackUrlResult(), x4); + } + } + + clearUrl(w4) { + router.clear(); + this.success(new ClearUrlResult(), w4); + } + + pushPath(u4) { + if (!this.checkNavPathStack('navPathStack.pushPath', u4)) { + return; + } + this.navPathStack?.pushPath({ + name: u4.name, + param: u4.param, + onPop: v4 => this.onPopHandler(v4, u4.onPop) + }, u4.animated); + this.success(new PushPathResult(), u4); + } + + replacePath(s4) { + if (!this.checkNavPathStack('navPathStack.replacePath', s4)) { + return; + } + this.navPathStack?.replacePath({ + name: s4.name, + param: s4.param, + onPop: t4 => this.onPopHandler(t4, s4.onPop) + }, s4.animated); + this.success(new ReplacePathResult(), s4); + } + + popPath(p4) { + if (!this.checkNavPathStack('navPathStack.pop', p4)) { + return; + } + if (p4.name) { + let r4 = this.navPathStack?.popToName(p4.name, p4.result, p4.animated); + if (r4 === undefined || r4 === -1) { + this.errorWithCodeAndMsg(POP_PATH_NAME_NOT_EXIST_ERROR, p4); + return; + } + } else if (p4.index || p4.index === 0) { + if (p4.index < -1) { + this.errorWithCodeAndMsg(POP_PATH_PARAM_INDEX_INVALID_ERROR, p4); + return; + } + if (p4.index > this.getCurrentNavPathInfo().index) { + this.errorWithCodeAndMsg(POP_PATH_INDEX_OUT_OF_RANGE_ERROR, p4); + return; + } + this.navPathStack?.popToIndex(p4.index, p4.result, p4.animated); + } else if (p4.delta || p4.delta === 0) { + if (!this.checkNumberParamPositive('delta', p4.delta, p4)) { + return; + } + this.navPathStack?.popToIndex(this.getNavPathIndexByDelta(p4.delta), p4.result, p4.animated); + } else { + this.navPathStack?.pop(p4.result, p4.animated); + } + let q4 = this.getCurrentNavPathInfo(); + this.success(new PopPathResult(q4.name, q4.index, q4.param), p4); + } + + clearPath(o4) { + if (!this.checkNavPathStack('navPathStack.clear', o4)) { + return; + } + this.navPathStack?.clear(o4.animated); + this.success(new ClearPathResult(), o4); + } + + postMessage(n4) { + n4.data && this.messageDataList.push(n4.data); + this.success(new PostMessageResult(), n4); + } + + getEnv(l4) { + let m4 = new GetEnvResult(); + m4.deviceType = deviceInfo.deviceType; + m4.brand = deviceInfo.brand; + m4.productModel = deviceInfo.productModel; + m4.osFullName = deviceInfo.osFullName; + this.success(m4, l4); + } + + checkJsApi(h4) { + let i4 = new Map(); + h4.jsApiList?.forEach(k4 => { + i4[k4] = this.isJsApiEnable(ATOMIC_SERVICE_JS_API_MAP.get(k4)); + }); + this.success(new CheckJsApiResult(i4), h4); + } + + pickCamera(c4) { + picker.pick(this.context, c4.mediaTypes, { + cameraPosition: c4.cameraPosition, + saveUri: c4.saveUri, + videoDuration: c4.videoDuration + }).then((g4) => { + this.success(new PickCameraResult(g4.resultCode, g4.resultUri, g4.mediaType), c4); + }).catch((f4) => { + this.error(f4, c4); + }); + } + + selectPhoto(w3) { + let x3 = new photoAccessHelper.PhotoViewPicker(); + x3.select({ + MIMEType: w3.mimeType, + maxSelectNumber: w3.maxSelectNumber, + isPhotoTakingSupported: w3.isPhotoTakingSupported, + isEditSupported: w3.isEditSupported, + isSearchSupported: w3.isSearchSupported, + recommendationOptions: { + recommendationType: w3.recommendationType + }, + preselectedUris: w3.preselectedUris + }).then((b4) => { + this.success(new SelectPhotoResult(b4.photoUris, b4.isOriginalPhoto), w3); + }).catch((a4) => { + this.error(a4, w3); + }); + } + + openPreview(n3) { + let o3 = this.getUri(n3.uri); + filePreview.canPreview(this.context, o3).then((s3) => { + if (!s3) { + this.errorWithCodeAndMsg(IMAGE_CAN_NOT_PREVIEW_ERROR, n3); + return; + } + filePreview.openPreview(this.context, { + uri: o3, + mimeType: n3.mimeType, + title: n3.title + }).then(() => { + this.success(new OpenPreviewResult(), n3); + }).catch((v3) => { + this.error(v3, n3); + }); + }).catch((r3) => { + this.error(r3, n3); + }); + } + + uploadFile(z2) { + this.checkUploadFile(z2).then(d3 => { + if (!d3.checkResult) { + return; + } + let e3 = { + url: z2.url, + header: z2.header, + method: z2.method, + files: this.convertToFile(z2.files), + data: this.convertToRequestData(z2.data) + }; + request.uploadFile(this.context, e3).then((i3) => { + i3.on('complete', (m3) => { + this.handleUploadFileResult(m3, d3.uriMap, z2); + }); + i3.on('fail', (l3) => { + this.handleUploadFileResult(l3, d3.uriMap, z2); + }); + }).catch((h3) => { + this.error(h3, z2); + }); + }).catch((c3) => { + this.error(c3, z2); + }); + } + + downloadFile(m2) { + let n2 = m2.fileName ? m2.fileName : this.parseFileNameFromUrl(m2.url); + let o2 = `${util.generateRandomUUID().replaceAll('-', '')}`; + let p2 = `${this.context.cacheDir}/${o2}`; + request.downloadFile(this.context, { + url: m2.url, + header: m2.header ? m2.header : new Object(), + filePath: p2, + enableMetered: m2.enableMetered, + enableRoaming: m2.enableRoaming, + networkType: m2.networkType, + background: false + }).then((t2) => { + t2.on('complete', () => { + this.saveDownloadFile(p2, n2, m2, y2 => { + this.success(new DownloadFileResult(y2), m2); + }); + }); + t2.on('fail', w2 => { + this.errorWithCodeAndMsg(new AsError(w2, 'File download fail.'), m2); + }); + }).catch((s2) => { + this.error(s2, m2); + }); + } + + getNetworkType(c2) { + connection.getDefaultNet().then(g2 => { + if (!g2 || g2.netId === 0) { + this.errorWithCodeAndMsg(NETWORK_NO_ACTIVE_ERROR, c2); + return; + } + connection.getNetCapabilities(g2).then(k2 => { + let l2 = new GetNetworkTypeResult(k2.bearerTypes, k2.networkCap, k2.linkUpBandwidthKbps, + k2.linkDownBandwidthKbps); + this.success(l2, c2); + }).catch((j2) => { + this.error(j2, c2); + }); + }).catch((f2) => { + this.error(f2, c2); + }); + } + + getLocation(u1) { + this.checkPermissions(PERMISSION_APPROXIMATELY_LOCATION, w1 => { + if (w1) { + this.error(w1, u1); + return; + } + geoLocationManager.getCurrentLocation({ + priority: u1.priority, + scenario: u1.scenario, + maxAccuracy: u1.maxAccuracy, + timeoutMs: u1.timeoutMs + }).then(a2 => { + let b2 = + new GetLocationResult(a2.latitude, a2.longitude, a2.altitude, a2.accuracy, a2.speed, a2.timeStamp, + a2.direction, a2.timeSinceBoot, a2.additions, a2.additionSize); + this.success(b2, u1); + }).catch((z1) => { + this.error(z1, u1); + }); + }); + } +} + +class NavPathInfo { + constructor(s1, t1) { + this.name = s1; + this.index = t1; + } +} + +class CheckUploadFileResult { + constructor(q1, r1) { + this.checkResult = q1; + this.uriMap = r1; + } +} + +class BaseOptions { +} + +class PushUrlOptions extends BaseOptions { +} + +class PushUrlResult { +} + +class ReplaceUrlOptions extends BaseOptions { +} + +class ReplaceUrlResult { +} + +class BackUrlOptions extends BaseOptions { +} + +class BackUrlResult { +} + +class ClearUrlOptions extends BaseOptions { +} + +class ClearUrlResult { +} + +class OnPopEvent { + constructor(n1, o1, p1) { + this.name = n1; + this.param = o1; + this.result = p1; + } +} + +class PushPathOptions extends BaseOptions { +} + +class PushPathResult { +} + +class ReplacePathOptions extends BaseOptions { +} + +class ReplacePathResult { +} + +class PopPathOptions extends BaseOptions { +} + +class PopPathResult { + constructor(k1, l1, m1) { + this.name = k1; + this.index = l1; + this.param = m1; + } +} + +class ClearPathOptions extends BaseOptions { +} + +class ClearPathResult { +} + +class PostMessageOptions extends BaseOptions { +} + +class PostMessageResult { +} + +export class OnMessageEvent { + constructor(j1) { + this.data = j1; + } +} + +export class OnErrorReceiveEvent { + constructor(h1, i1) { + this.request = h1; + this.error = i1; + } +} + +export class OnHttpErrorReceiveEvent { + constructor(f1, g1) { + this.request = f1; + this.response = g1; + } +} + +export class OnPageBeginEvent { + constructor(e1) { + this.url = e1; + } +} + +export class OnPageEndEvent { + constructor(d1) { + this.url = d1; + } +} + +export class WebHeader { + constructor(j3, p3) { + this.headerKey = j3; + this.headerValue = p3; + } +} + +class GetEnvOptions extends BaseOptions { +} + +class GetEnvResult { +} + +class CheckJsApiOptions extends BaseOptions { +} + +class CheckJsApiResult { + constructor(c1) { + this.checkResult = c1; + } +} + +class PickCameraOptions extends BaseOptions { +} + +class PickCameraResult { + constructor(z, a1, b1) { + this.resultCode = z; + this.resultUri = a1; + this.mediaType = b1; + } +} + +class SelectPhotoOptions extends BaseOptions { +} + +class SelectPhotoResult { + constructor(x, y) { + this.photoUris = x; + this.isOriginalPhoto = y; + } +} + +class OpenPreviewOptions extends BaseOptions { +} + +class OpenPreviewResult { +} + +class UploadFileOptions extends BaseOptions { +} + +class UploadFile { + constructor(t, u, v, w) { + this.filename = t; + this.name = u; + this.uri = v; + this.type = w; + } +} + +class UploadRequestData { +} + +class UploadFileResult { + constructor(s) { + this.taskStates = s; + } +} + +class UploadFileTaskState { + constructor(p, q, r) { + this.path = p; + this.responseCode = q; + this.message = r; + } +} + +class DownloadFileOptions extends BaseOptions { +} + +class DownloadFileResult { + constructor(o) { + this.uri = o; + } +} + +class GetNetworkTypeOptions extends BaseOptions { +} + +class GetNetworkTypeResult { + constructor(k, l, m, n) { + this.bearerTypes = k; + this.networkCap = l; + this.linkUpBandwidthKbps = m; + this.linkDownBandwidthKbps = n; + } +} + +class GetLocationOptions extends BaseOptions { +} + +class GetLocationResult { + constructor(a, b, c, d, e, f, g, h, i, j) { + this.latitude = a; + this.longitude = b; + this.altitude = c; + this.accuracy = d; + this.speed = e; + this.timeStamp = f; + this.direction = g; + this.timeSinceBoot = h; + this.additions = i; + this.additionSize = j; + } +} + +export default { + AtomicServiceWeb, + AtomicServiceWebController +} diff --git a/atomicserviceweb/source/atomicserviceweb.ets b/atomicserviceweb/source/atomicserviceweb.ets new file mode 100644 index 0000000..201d409 --- /dev/null +++ b/atomicserviceweb/source/atomicserviceweb.ets @@ -0,0 +1,1362 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import web_webview from '@ohos.web.webview'; +import router from '@ohos.router'; +import deviceInfo from '@ohos.deviceInfo'; +import common from '@ohos.app.ability.common'; +import geoLocationManager from '@ohos.geoLocationManager'; +import bundleManager from '@ohos.bundle.bundleManager'; +import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; +import connection from '@ohos.net.connection'; +import request from '@ohos.request'; +import fs from '@ohos.file.fs'; +import util from '@ohos.util'; +import photoAccessHelper from '@ohos.file.photoAccessHelper'; +import { filePreview } from '@kit.PreviewKit'; +import fileUri from '@ohos.file.fileuri'; +import picker from '@ohos.multimedia.cameraPicker'; +import filePicker from '@ohos.file.picker'; +import { BusinessError } from '@ohos.base'; + +class AsError { + public code: number; + public message: string; + + constructor(code: number, message: string) { + this.code = code; + this.message = message; + } +} + +class JsApiConfig { + public apiName: string; + public minVersion: string; + public maxVersion: string; + public requiredFieldNames?: string[]; + + constructor(apiName: string, minVersion: string, maxVersion: string, requiredFieldNames?: string[]) { + this.apiName = apiName; + this.minVersion = minVersion; + this.maxVersion = maxVersion; + this.requiredFieldNames = requiredFieldNames; + } +} + +const LOG_ENABLE: boolean = true; +const LOG_PREFIX: string = '[AtomicServiceWebLog]'; +const UPLOAD_IMAGE_CACHE_DIR: string = '/cache/'; +const JAVA_SCRIPT_PROXY_OBJECT_NAME: string = 'atomicServiceProxy'; +const JAVA_SCRIPT_PROXY_API_NAME_LIST: string[] = ['invokeJsApi']; +const ATOMIC_SERVICE_JS_API_MAP = new Map(); +const registerJsApi = (apiNameAlias: string, apiName: string, minVersion: string, maxVersion: string, + requiredFieldNames: string[]): void => { + ATOMIC_SERVICE_JS_API_MAP.set(apiNameAlias, new JsApiConfig(apiName, minVersion, maxVersion, requiredFieldNames)); +}; +const MAX_VERSION = '99.99.99'; +const ATOMIC_SERVICE_JS_SDK_CURRENT_VERSION = '1.0.0'; +const PERMISSION_APPROXIMATELY_LOCATION: Permissions = 'ohos.permission.APPROXIMATELY_LOCATION'; + +const SYSTEM_INTERNAL_ERROR: AsError = new AsError(500, 'System internal error.'); +const JS_API_INVALID_INVOKE_ERROR: AsError = new AsError(200001, 'Invalid invoke.'); +const PARAM_REQUIRED_ERROR_CODE: number = 200002; +const PARAM_NUMBER_POSITIVE_ERROR_CODE: number = 200003; +const ROUTER_PARAM_MODE_INVALID_ERROR: AsError = new AsError(200004, 'Param mode is invalid.'); +const BACK_URL_NOT_EXIST_OR_OPENED_ERROR: AsError = new AsError(200005, 'Url is not exist or opened, can not be back.'); +const NAV_PATH_STACK_NOT_EXIST_ERROR_CODE: number = 200006; +const POP_PATH_NAME_NOT_EXIST_ERROR: AsError = new AsError(200007, 'Name is not exist or opened, can not be pop.'); +const POP_PATH_PARAM_INDEX_INVALID_ERROR: AsError = new AsError(200008, 'Param index is invalid.'); +const POP_PATH_INDEX_OUT_OF_RANGE_ERROR: AsError = new AsError(200009, 'The Index is out of range.'); +const UPLOAD_IMAGE_FILES_REQUIRED_ERROR: AsError = new AsError(200010, 'Param files is required.'); +const UPLOAD_IMAGE_FILE_NOT_EXIST_ERROR_CODE: number = 200011; +const UPLOAD_IMAGE_FILES_URI_REQUIRED_ERROR: AsError = new AsError(200012, 'Param uri of files is required.'); +const UPLOAD_FILE_ERROR: AsError = new AsError(200013, 'Upload file error.'); +const IMAGE_CAN_NOT_PREVIEW_ERROR: AsError = new AsError(200014, 'The filePath can not preview.'); +const NETWORK_NO_ACTIVE_ERROR: AsError = new AsError(200015, 'The network is not active.'); + +registerJsApi('router.pushUrl', 'pushUrl', '1.0.0', MAX_VERSION, ['url']); +registerJsApi('router.replaceUrl', 'replaceUrl', '1.0.0', MAX_VERSION, ['url']); +registerJsApi('router.back', 'backUrl', '1.0.0', MAX_VERSION, []); +registerJsApi('router.clear', 'clearUrl', '1.0.0', MAX_VERSION, []); +registerJsApi('navPathStack.pushPath', 'pushPath', '1.0.0', MAX_VERSION, ['name']); +registerJsApi('navPathStack.replacePath', 'replacePath', '1.0.0', MAX_VERSION, ['name']); +registerJsApi('navPathStack.pop', 'popPath', '1.0.0', MAX_VERSION, []); +registerJsApi('navPathStack.clear', 'clearPath', '1.0.0', MAX_VERSION, []); +registerJsApi('asWeb.postMessage', 'postMessage', '1.0.0', MAX_VERSION, ['data']); +registerJsApi('asWeb.getEnv', 'getEnv', '1.0.0', MAX_VERSION, []); +registerJsApi('asWeb.checkJsApi', 'checkJsApi', '1.0.0', MAX_VERSION, ['jsApiList']); +registerJsApi('cameraPicker.pick', 'pickCamera', '1.0.0', MAX_VERSION, ['mediaTypes', 'cameraPosition']); +registerJsApi('photoViewPicker.select', 'selectPhoto', '1.0.0', MAX_VERSION, []); +registerJsApi('filePreview.openPreview', 'openPreview', '1.0.0', MAX_VERSION, ['uri']); +registerJsApi('request.uploadFile', 'uploadFile', '1.0.0', MAX_VERSION, ['url', 'files']); +registerJsApi('request.downloadFile', 'downloadFile', '1.0.0', MAX_VERSION, ['url']); +registerJsApi('connection.getNetworkType', 'getNetworkType', '1.0.0', MAX_VERSION, []); +registerJsApi('location.getLocation', 'getLocation', '1.0.0', MAX_VERSION, []); + +@Component +export struct AtomicServiceWeb { + public src: ResourceStr | undefined = undefined; + public navPathStack?: NavPathStack; + @Prop mixedMode?: MixedMode; + @Prop darkMode?: WebDarkMode; + @Prop forceDarkAccess?: boolean; + @ObjectLink controller: AtomicServiceWebController; + public onMessage?: Callback = () => { + }; + public onErrorReceive?: Callback = () => { + }; + public onHttpErrorReceive?: Callback = () => { + }; + public onPageBegin?: Callback = () => { + }; + public onPageEnd?: Callback = () => { + }; + public onProgressChange?: Callback = () => { + }; + public onControllerAttached?: VoidCallback; + public onLoadIntercept?: Callback; + private context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; + private webViewController: web_webview.WebviewController = new web_webview.WebviewController(); + private schemeHandler: web_webview.WebSchemeHandler = new web_webview.WebSchemeHandler(); + private atomicService?: AtomicService; + private atomicServiceProxy?: AtomicServiceProxy; + + aboutToAppear(): void { + if (!this.atomicService) { + this.atomicService = new AtomicServiceApi(this.context, this.navPathStack, this.onMessage); + this.atomicServiceProxy = new AtomicServiceProxy(this.atomicService); + } + + try { + let bundleInfo: bundleManager.BundleInfo = bundleManager.getBundleInfoForSelfSync( + bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); + if (bundleInfo?.appInfo?.appProvisionType === 'debug') { + console.log(`AtomicServiceWeb setWebDebuggingAccess`); + web_webview.WebviewController.setWebDebuggingAccess(true); + } + } catch (err) { + console.error(`AtomicServiceWeb set Web Debug Mode failed, code is ${err.code}, message is ${err.message}`); + } + } + + aboutToDisappear(): void { + this.atomicService?.notifyMessage(); + } + + build() { + Web({ src: this.src, controller: this.webViewController }) + .zoomAccess(false) + .allowWindowOpenMethod(false) + .domStorageAccess(true) + .layoutMode(WebLayoutMode.NONE) + .mixedMode(this.mixedMode) + .darkMode(this.darkMode) + .forceDarkAccess(this.forceDarkAccess) + .onErrorReceive((event: OnErrorReceiveEvent) => this.onCommonCallBack('onErrorReceive', event, + this.onErrorReceive)) + .onHttpErrorReceive((event: OnHttpErrorReceiveEvent) => this.onCommonCallBack('onHttpErrorReceive', event, + this.onHttpErrorReceive)) + .onPageBegin((event: OnPageBeginEvent) => this.onCommonCallBack('onPageBegin', event, this.onPageBegin)) + .onPageEnd((event: OnPageEndEvent) => this.onCommonCallBack('onPageEnd', event, this.onPageEnd)) + .onProgressChange((event: OnProgressChangeEvent) => this.onCommonCallBack('onProgressChange', event, + this.onProgressChange)) + .onControllerAttached(() => { + this.registerJavaScriptProxy(); + this.schemeHandler.onRequestStart((request: web_webview.WebSchemeHandlerRequest) => { + return !this.checkUrl(request.getRequestUrl()); + }); + this.webViewController.setWebSchemeHandler('https', this.schemeHandler); + this.initAtomicServiceWebController(); + if (this.onControllerAttached) { + try { + this.onControllerAttached(); + } catch (error) { + console.error(`AtomicServiceWeb onControllerAttached failed, code is ${error.code}, message is ${error.message}`); + } + } + }) + .onOverrideUrlLoading((webResourceRequest: WebResourceRequest) => { + return !this.checkUrl(webResourceRequest.getRequestUrl()); + }) + .onLoadIntercept(event => { + let checkResult = !this.checkUrl(event.data.getRequestUrl()); + if (!checkResult && this.onLoadIntercept) { + try { + return this.onLoadIntercept(event); + } catch (error) { + console.error(`AtomicServiceWeb onLoadIntercept failed, code is ${error.code}, message is ${error.message}`); + return true; + } + } + return checkResult + }) + } + + onCommonCallBack(method: string, event: T, callback?: (event: T) => void): void { + try { + callback && callback(event); + } catch (error) { + console.error(`AtomicServiceWeb ${method} failed, code is ${error.code}, message is ${error.message}`); + } + } + + registerJavaScriptProxy(): void { + try { + this.webViewController.registerJavaScriptProxy(this.atomicServiceProxy, JAVA_SCRIPT_PROXY_OBJECT_NAME, + JAVA_SCRIPT_PROXY_API_NAME_LIST); + } catch (error) { + let e: BusinessError = error as BusinessError; + console.error(`AtomicServiceWeb registerJavaScriptProxy failed, code is ${e.code}, message is ${e.message}`); + } + } + + initAtomicServiceWebController(): void { + if (!this.controller) { + return; + } + this.controller.setWebviewController(this.webViewController); + } + + cutUrl(url: string): string { + if (url) { + let index: number = url.indexOf('?'); + if (index > -1) { + return url.substring(0, index); + } + } + return url; + } + + checkUrl(url: string): boolean { + if (!url) { + return false; + } + if (url.startsWith('resource://rawfile')) { + return true; + } + url = this.cutUrl(url); + console.log(`AtomicServiceWebLog checkUrl url=${url}`); + return true; + } +} + +@Observed +export class AtomicServiceWebController { + private webViewController?: web_webview.WebviewController; + + setWebviewController(webViewController: web_webview.WebviewController): void { + this.webViewController = webViewController; + } + + checkWebviewController(): void { + if (!this.webViewController) { + const error: BusinessError = { + name: '', + message: 'Init error. The AtomicServiceWebController must be associated with a AtomicServiceWeb component.', + code: 17100001, + } + throw error as Error; + } + } + + getUserAgent(): string | undefined { + this.checkWebviewController(); + return this.webViewController?.getUserAgent(); + } + + getCustomUserAgent(): string | undefined { + this.checkWebviewController(); + return this.webViewController?.getCustomUserAgent(); + } + + setCustomUserAgent(userAgent: string): void { + this.checkWebviewController(); + this.webViewController?.setCustomUserAgent(userAgent); + } + + accessForward(): boolean | undefined { + this.checkWebviewController(); + return this.webViewController?.accessForward(); + } + + accessBackward(): boolean | undefined { + this.checkWebviewController(); + return this.webViewController?.accessBackward(); + } + + accessStep(step: number): boolean | undefined { + this.checkWebviewController(); + return this.webViewController?.accessStep(step); + } + + forward(): void { + this.checkWebviewController(); + this.webViewController?.forward(); + } + + backward(): void { + this.checkWebviewController(); + this.webViewController?.backward(); + } + + refresh(): void { + this.checkWebviewController(); + this.webViewController?.refresh(); + } + + loadUrl(url: string | Resource, headers?: Array): void { + this.checkWebviewController(); + if (headers) { + this.webViewController?.loadUrl(url, headers); + } else { + this.webViewController?.loadUrl(url); + } + } +} + +class AtomicServiceProxy { + private atomicService: AtomicService; + + constructor(atomicService: AtomicService) { + this.atomicService = atomicService; + } + + invokeJsApi(apiNameAlias: string, options: BaseOptions): void { + try { + options = options || {}; + if (!apiNameAlias || !ATOMIC_SERVICE_JS_API_MAP.has(apiNameAlias)) { + this.atomicService.errorWithCodeAndMsg(JS_API_INVALID_INVOKE_ERROR, options); + return; + } + let jsApiConfig: JsApiConfig | undefined = ATOMIC_SERVICE_JS_API_MAP.get(apiNameAlias); + if (!this.atomicService.checkRequiredFieldInOptions(jsApiConfig, options)) { + return; + } + let atomicService: object = this.atomicService; + atomicService[jsApiConfig?.apiName as string](options); + } catch (err) { + this.atomicService.error(err, options); + } + } +} + +class AtomicService { + protected context: common.UIAbilityContext; + protected navPathStack?: NavPathStack; + protected messageDataList: object[] = []; + protected onMessage: (event: OnMessageEvent) => void = () => { + }; + + constructor(context: common.UIAbilityContext, navPathStack?: NavPathStack, + onMessage?: (event: OnMessageEvent) => void) { + this.context = context; + this.navPathStack = navPathStack; + this.onMessage = onMessage ? onMessage : this.onMessage; + } + + success(res: T, options: BaseOptions): void { + try { + options?.callback && options?.callback(undefined, res); + } catch (err) { + this.consoleError(`callback error, code is ${err.code}, message is ${err.message}`); + } + } + + error(err: BusinessError, options: BaseOptions,): void { + try { + options?.callback && options?.callback(new AsError(err.code ? err.code : SYSTEM_INTERNAL_ERROR.code, + err.message ? err.message : SYSTEM_INTERNAL_ERROR.message)); + } catch (err) { + this.consoleError(`callback error, code is ${err.code}, message is ${err.message}`); + } + } + + errorWithCodeAndMsg(error: AsError, options: BaseOptions): void { + try { + options?.callback && options?.callback(error); + } catch (err) { + this.consoleError(`callback error, code is ${err.code}, message is ${err.message}`); + } + } + + consoleLog(msg: string): void { + if (LOG_ENABLE) { + console.log(`${LOG_PREFIX} ${msg}`); + } + } + + consoleError(msg: string): void { + if (LOG_ENABLE) { + console.error(`${LOG_PREFIX} ${msg}`); + } + } + + logOptions(name: string, options: BaseOptions): void { + this.consoleLog(`${name} options=${JSON.stringify(options)}`); + } + + checkParamRequired(paramKey: string, paramValue: V, options: BaseOptions): boolean { + if (paramValue === undefined || paramValue === null || paramValue === '') { + this.errorWithCodeAndMsg(new AsError(PARAM_REQUIRED_ERROR_CODE, `Param ${paramKey} is required.`), options); + return false; + } + return true; + } + + checkNumberParamPositive(paramKey: string, paramValue: number, options: BaseOptions): boolean { + if (paramValue <= 0) { + this.errorWithCodeAndMsg(new AsError(PARAM_NUMBER_POSITIVE_ERROR_CODE, + `Param ${paramKey} must be a positive number.`), options); + return false; + } + return true; + } + + checkRequiredFieldInOptions(jsApiConfig: JsApiConfig | undefined, options: BaseOptions): boolean { + if (!jsApiConfig) { + return false; + } + if (!jsApiConfig.requiredFieldNames) { + return true; + } + let obj: object = options; + for (let i = 0; i < jsApiConfig.requiredFieldNames.length; i++) { + let fieldName: string = jsApiConfig.requiredFieldNames[i]; + if (!this.checkParamRequired(fieldName, obj[fieldName], options)) { + return false; + } + } + return true; + } + + checkRouterMode(mode: string | undefined, options: BaseOptions): boolean { + if (!mode || mode === 'Single' || mode === 'Standard') { + return true; + } + this.errorWithCodeAndMsg(ROUTER_PARAM_MODE_INVALID_ERROR, options); + return false; + } + + parseRouterMode(routerMode?: string): router.RouterMode { + return routerMode === 'Single' ? router.RouterMode.Single : router.RouterMode.Standard; + } + + getRouterIndexByDelta(delta: number): number { + let length: number = Number.parseInt(router.getLength()); + for (let i = length; i > 0; i--) { + let state = router.getStateByIndex(i); + if (state?.name && delta-- == 0) { + return i; + } + } + return 1; + } + + checkBackUrlExists(url: string, options: BaseOptions): boolean { + let length: number = Number.parseInt(router.getLength()); + for (let i = length; i > 0; i--) { + let state = router.getStateByIndex(i); + if (state?.name) { + let stateUrl: string = state?.path + state?.name; + if (stateUrl === url) { + return true; + } + } + } + this.errorWithCodeAndMsg(BACK_URL_NOT_EXIST_OR_OPENED_ERROR, options); + return false; + } + + checkNavPathStack(apiName: string, options: BaseOptions): boolean { + if (!this.navPathStack) { + this.errorWithCodeAndMsg(new AsError(NAV_PATH_STACK_NOT_EXIST_ERROR_CODE, + `Current page is not NavDestination, not support ${apiName}().`), options); + return false; + } + return true; + } + + getNavPathIndexByDelta(delta: number): number { + let pathStack: string[] | undefined = this.navPathStack?.getAllPathName(); + if (!pathStack || pathStack.length == 0) { + return -1; + } + return pathStack.length > delta ? (pathStack.length - delta - 1) : -1; + } + + onPopHandler(popInfo: PopInfo, onPop?: (event: OnPopEvent) => void): void { + if (!popInfo?.info || !onPop) { + return; + } + onPop(new OnPopEvent(popInfo.info.name, popInfo.info.param as object, popInfo.result)); + } + + getCurrentNavPathInfo(): NavPathInfo { + let navPathStack: Array | undefined = this.navPathStack?.getAllPathName(); + let navPathInfo: NavPathInfo = (navPathStack && navPathStack.length > 0) ? + new NavPathInfo(navPathStack[navPathStack.length - 1], navPathStack.length - 1) : new NavPathInfo(undefined, -1); + if (navPathInfo.index >= 0) { + navPathInfo.param = this.navPathStack?.getParamByIndex(navPathInfo.index) as object; + } + return navPathInfo; + } + + notifyMessage(): void { + if (this.messageDataList.length <= 0) { + return; + } + try { + this.onMessage(new OnMessageEvent(this.messageDataList)); + } catch (err) { + this.consoleError(`onMessage failed, code is ${err.code}, message is ${err.message}`); + } + this.messageDataList = []; + } + + isJsApiEnable(jsApiConfig?: JsApiConfig): boolean { + if (!jsApiConfig) { + return false; + } + if (this.compareVersion(jsApiConfig.minVersion, ATOMIC_SERVICE_JS_SDK_CURRENT_VERSION) && + this.compareVersion(ATOMIC_SERVICE_JS_SDK_CURRENT_VERSION, jsApiConfig.maxVersion)) { + return true; + } + return false; + } + + compareVersion(lowVersion: string, highVersion: string): boolean { + if (!lowVersion || !highVersion) { + return false; + } + let v1 = lowVersion.split('.').map(m => Number.parseInt(m)); + let v2 = highVersion.split('.').map(m => Number.parseInt(m)); + const maxLength = Math.max(v1.length, v2.length); + for (let i = 0; i < maxLength; i++) { + if (v1[i] < v2[i]) { + return true; + } else if (v1[i] > v2[i]) { + return false; + } + } + if (v1.length < v2.length) { + return true; + } + if (v1.length > v2.length) { + return false; + } + return true; + } + + getUri(uriOrFilePath: string): string { + if (!uriOrFilePath || uriOrFilePath.startsWith('file://')) { + return uriOrFilePath; + } + return fileUri.getUriFromPath(uriOrFilePath); + } + + async checkUploadFile(options: UploadFileOptions): Promise { + if (!options.files || options.files.length <= 0) { + this.errorWithCodeAndMsg(UPLOAD_IMAGE_FILES_REQUIRED_ERROR, options); + return new CheckUploadFileResult(false); + } + let uriMap: Map = new Map(); + for (let i = 0; i < options.files?.length; i++) { + let file: UploadFile = options.files[i]; + if (!file.uri) { + this.errorWithCodeAndMsg(UPLOAD_IMAGE_FILES_URI_REQUIRED_ERROR, options); + return new CheckUploadFileResult(false); + } + if (!file.uri.startsWith('file://') && !fs.accessSync(file.uri, fs.AccessModeType.EXIST)) { + this.errorWithCodeAndMsg(new AsError(UPLOAD_IMAGE_FILE_NOT_EXIST_ERROR_CODE, + `File uri ${file.uri} is not exist.`), options); + return new CheckUploadFileResult(false); + } + let originUri: string = file.uri; + let uploadUri: string = file.uri; + if (uploadUri.indexOf(UPLOAD_IMAGE_CACHE_DIR) < 0) { + let srcUri: string = uploadUri.startsWith('file://') ? uploadUri : fileUri.getUriFromPath(file.uri); + uploadUri = this.context.cacheDir + '/' + uploadUri.substring(uploadUri.lastIndexOf('/') + 1); + try { + await fs.copy(srcUri, fileUri.getUriFromPath(uploadUri)) + } catch (err) { + this.errorWithCodeAndMsg(UPLOAD_FILE_ERROR, options); + return new CheckUploadFileResult(false); + } + } + file.uri = 'internal://' + uploadUri.substring(uploadUri.indexOf(UPLOAD_IMAGE_CACHE_DIR) + 1); + uriMap.set(uploadUri, originUri); + } + return new CheckUploadFileResult(true, uriMap); + } + + convertToRequestData(data?: UploadRequestData[]): request.RequestData[] { + let requestData: request.RequestData[] = []; + if (data) { + data.forEach(item => { + if (!item.name || !item.value) { + return; + } + requestData.push({ name: item.name, value: item.value }); + }); + } + return requestData; + } + + convertToFile(files?: UploadFile[]): request.File[] { + let requestFiles: request.File[] = []; + if (files) { + files.forEach(item => { + requestFiles.push({ + filename: item.filename, + name: item.name, + uri: item.uri, + type: item.type + }); + }); + } + return requestFiles; + } + + handleUploadFileResult(taskStateArray: Array, uriMap: Map, + options: UploadFileOptions): void { + let taskStates: UploadFileTaskState[] = []; + if (taskStateArray) { + taskStateArray.forEach(taskState => { + let path: (string | undefined) = taskState.path ? uriMap.get(taskState.path) : taskState.path; + taskStates.push(new UploadFileTaskState(path ? path : taskState.path, taskState.responseCode, + taskState.message)); + }); + } + this.success(new UploadFileResult(taskStates), options); + } + + parseFileNameFromUrl(url?: string): string { + if (!url) { + return ''; + } + let http: string = url.split('?')[0]; + if (http.indexOf('/') < 0) { + return ''; + } + let index: number = http.lastIndexOf('/'); + if (index == (http.length - 1)) { + return ''; + } + return http.substring(index + 1); + } + + saveDownloadFile(filePath: string, fileName: string, options: DownloadFileOptions, + callback: (uri: string) => void): void { + let documentPicker = new filePicker.DocumentViewPicker(); + documentPicker.save({ + newFileNames: [fileName] + }).then(res => { + let uri: string = res[0]; + fs.copy(fileUri.getUriFromPath(filePath), uri).then(() => { + callback && callback(uri); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + checkAccessToken(permissionName: Permissions): Promise { + let bundleInfo: bundleManager.BundleInfo = bundleManager.getBundleInfoForSelfSync( + bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); + let tokenId: number = bundleInfo.appInfo.accessTokenId; + let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); + return atManager.checkAccessToken(tokenId, permissionName); + } + + checkPermissions(permissionName: Permissions, grantCallback: (err?: BusinessError) => void): void { + this.checkAccessToken(permissionName).then(grantStatus => { + if (grantStatus == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { + grantCallback(undefined); + } else { + let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); + atManager.requestPermissionsFromUser(this.context, [permissionName]).then(permissionRequestResult => { + for (let i = 0; i < permissionRequestResult.authResults.length; i++) { + if (permissionRequestResult.authResults[i] != 0) { + return; + } + } + grantCallback(undefined); + }).catch((err: BusinessError) => { + grantCallback(err); + }); + } + }).catch((err: BusinessError) => { + grantCallback(err); + }); + } +} + +class AtomicServiceApi extends AtomicService { + constructor(context: common.UIAbilityContext, navPathStack?: NavPathStack, + onMessage?: (event: OnMessageEvent) => void) { + super(context, navPathStack, onMessage); + } + + pushUrl(options: PushUrlOptions): void { + if (!this.checkRouterMode(options.mode, options)) { + return; + } + router.pushUrl({ url: options.url, params: options.params }, this.parseRouterMode(options.mode)).then(() => { + this.success(new PushUrlResult(), options); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + replaceUrl(options: ReplaceUrlOptions): void { + if (!this.checkRouterMode(options.mode, options)) { + return; + } + router.replaceUrl({ url: options.url, params: options.params }, this.parseRouterMode(options.mode)).then(() => { + this.success(new ReplaceUrlResult(), options); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + backUrl(options: BackUrlOptions): void { + if (options.url) { + if (!this.checkBackUrlExists(options.url, options)) { + return; + } + router.back({ url: options.url, params: options.params }); + this.success(new BackUrlResult(), options); + } else if (options.index || options.index === 0) { + if (!this.checkNumberParamPositive('index', options.index, options)) { + return; + } + router.back(options.index, options.params); + this.success(new BackUrlResult(), options); + } else if (options.delta || options.delta === 0) { + if (!this.checkNumberParamPositive('delta', options.delta, options)) { + return; + } + router.back(this.getRouterIndexByDelta(options.delta), options.params); + this.success(new BackUrlResult(), options); + } else { + router.back(); + this.success(new BackUrlResult(), options); + } + } + + clearUrl(options: ClearUrlOptions): void { + router.clear(); + this.success(new ClearUrlResult(), options); + } + + pushPath(options: PushPathOptions): void { + if (!this.checkNavPathStack('navPathStack.pushPath', options)) { + return; + } + this.navPathStack?.pushPath({ + name: options.name, + param: options.param, + onPop: popInfo => this.onPopHandler(popInfo, options.onPop) + }, options.animated); + this.success(new PushPathResult(), options); + } + + replacePath(options: ReplacePathOptions): void { + if (!this.checkNavPathStack('navPathStack.replacePath', options)) { + return; + } + this.navPathStack?.replacePath({ + name: options.name, + param: options.param, + onPop: popInfo => this.onPopHandler(popInfo, options.onPop) + }, options.animated); + this.success(new ReplacePathResult(), options); + } + + popPath(options: PopPathOptions): void { + if (!this.checkNavPathStack('navPathStack.pop', options)) { + return; + } + if (options.name) { + let index: number | undefined = this.navPathStack?.popToName(options.name, options.result, options.animated); + if (index === undefined || index === -1) { + this.errorWithCodeAndMsg(POP_PATH_NAME_NOT_EXIST_ERROR, options); + return; + } + } else if (options.index || options.index === 0) { + if (options.index < -1) { + this.errorWithCodeAndMsg(POP_PATH_PARAM_INDEX_INVALID_ERROR, options); + return; + } + if (options.index > this.getCurrentNavPathInfo().index) { + this.errorWithCodeAndMsg(POP_PATH_INDEX_OUT_OF_RANGE_ERROR, options); + return; + } + this.navPathStack?.popToIndex(options.index, options.result, options.animated); + } else if (options.delta || options.delta === 0) { + if (!this.checkNumberParamPositive('delta', options.delta, options)) { + return; + } + this.navPathStack?.popToIndex(this.getNavPathIndexByDelta(options.delta), options.result, options.animated); + } else { + this.navPathStack?.pop(options.result, options.animated); + } + let navPathInfo: NavPathInfo = this.getCurrentNavPathInfo(); + this.success(new PopPathResult(navPathInfo.name, navPathInfo.index, navPathInfo.param), options); + } + + clearPath(options: ClearPathOptions): void { + if (!this.checkNavPathStack('navPathStack.clear', options)) { + return; + } + this.navPathStack?.clear(options.animated); + this.success(new ClearPathResult(), options); + } + + postMessage(options: PostMessageOptions): void { + options.data && this.messageDataList.push(options.data); + this.success(new PostMessageResult(), options); + } + + getEnv(options: GetEnvOptions): void { + let res: GetEnvResult = new GetEnvResult(); + res.deviceType = deviceInfo.deviceType; + res.brand = deviceInfo.brand; + res.productModel = deviceInfo.productModel; + res.osFullName = deviceInfo.osFullName; + this.success(res, options); + } + + checkJsApi(options: CheckJsApiOptions): void { + let res: Map = new Map(); + options.jsApiList?.forEach(jsApi => { + res[jsApi] = this.isJsApiEnable(ATOMIC_SERVICE_JS_API_MAP.get(jsApi)); + }); + this.success(new CheckJsApiResult(res), options); + } + + pickCamera(options: PickCameraOptions): void { + picker.pick(this.context, options.mediaTypes as Array, { + cameraPosition: options.cameraPosition, + saveUri: options.saveUri, + videoDuration: options.videoDuration + }).then((pickerResult: picker.PickerResult) => { + this.success(new PickCameraResult(pickerResult.resultCode, pickerResult.resultUri, pickerResult.mediaType), + options); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + selectPhoto(options: SelectPhotoOptions): void { + let photoViewPicker = new photoAccessHelper.PhotoViewPicker(); + photoViewPicker.select({ + MIMEType: options.mimeType as photoAccessHelper.PhotoViewMIMETypes, + maxSelectNumber: options.maxSelectNumber, + isPhotoTakingSupported: options.isPhotoTakingSupported, + isEditSupported: options.isEditSupported, + isSearchSupported: options.isSearchSupported, + recommendationOptions: { + recommendationType: options.recommendationType + }, + preselectedUris: options.preselectedUris + }).then((selectResult: photoAccessHelper.PhotoSelectResult) => { + this.success(new SelectPhotoResult(selectResult.photoUris, selectResult.isOriginalPhoto), options); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + openPreview(options: OpenPreviewOptions): void { + let uri: string = this.getUri(options.uri as string); + filePreview.canPreview(this.context, uri).then((res: boolean) => { + if (!res) { + this.errorWithCodeAndMsg(IMAGE_CAN_NOT_PREVIEW_ERROR, options); + return; + } + filePreview.openPreview(this.context, { + uri: uri, + mimeType: options.mimeType as string, + title: options.title + }).then(() => { + this.success(new OpenPreviewResult(), options); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + uploadFile(options: UploadFileOptions): void { + this.checkUploadFile(options).then(res => { + if (!res.checkResult) { + return; + } + let uploadConfig: request.UploadConfig = { + url: options.url as string, + header: options.header as object, + method: options.method as string, + files: this.convertToFile(options.files), + data: this.convertToRequestData(options.data) + }; + request.uploadFile(this.context, uploadConfig).then((uploadTask: request.UploadTask) => { + uploadTask.on('complete', (taskStateArray: Array) => { + this.handleUploadFileResult(taskStateArray, res.uriMap as Map, options); + }); + uploadTask.on('fail', (taskStateArray: Array) => { + this.handleUploadFileResult(taskStateArray, res.uriMap as Map, options); + }); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + downloadFile(options: DownloadFileOptions): void { + let fileName: string = options.fileName ? options.fileName : this.parseFileNameFromUrl(options.url); + let cacheFileName: string = `${util.generateRandomUUID().replaceAll('-', '')}`; + let filePath: string = `${this.context.cacheDir}/${cacheFileName}`; + request.downloadFile(this.context, { + url: options.url, + header: options.header ? options.header : new Object(), + filePath: filePath, + enableMetered: options.enableMetered, + enableRoaming: options.enableRoaming, + networkType: options.networkType, + background: false + }).then((downloadTask: request.DownloadTask) => { + downloadTask.on('complete', () => { + this.saveDownloadFile(filePath, fileName, options, uri => { + this.success(new DownloadFileResult(uri), options); + }); + }); + downloadTask.on('fail', errCode => { + this.errorWithCodeAndMsg(new AsError(errCode, 'File download fail.'), options); + }); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + getNetworkType(options: GetNetworkTypeOptions): void { + connection.getDefaultNet().then(netHandle => { + if (!netHandle || netHandle.netId === 0) { + this.errorWithCodeAndMsg(NETWORK_NO_ACTIVE_ERROR, options); + return; + } + connection.getNetCapabilities(netHandle).then(netCapabilities => { + let res: GetNetworkTypeResult = new GetNetworkTypeResult(netCapabilities.bearerTypes, + netCapabilities.networkCap, netCapabilities.linkUpBandwidthKbps, netCapabilities.linkDownBandwidthKbps); + this.success(res, options); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + } + + getLocation(options: GetLocationOptions): void { + this.checkPermissions(PERMISSION_APPROXIMATELY_LOCATION, err => { + if (err) { + this.error(err, options); + return; + } + geoLocationManager.getCurrentLocation({ + priority: options.priority, + scenario: options.scenario, + maxAccuracy: options.maxAccuracy, + timeoutMs: options.timeoutMs + }).then(location => { + let res: GetLocationResult = new GetLocationResult(location.latitude, location.longitude, location.altitude, + location.accuracy, location.speed, location.timeStamp, location.direction, location.timeSinceBoot, + location.additions, location.additionSize); + this.success(res, options); + }).catch((err: BusinessError) => { + this.error(err, options); + }); + }); + } +} + +class NavPathInfo { + public name: string | undefined; + public index: number; + public param?: object; + + constructor(name: string | undefined, index: number) { + this.name = name; + this.index = index; + } +} + +class CheckUploadFileResult { + public checkResult: boolean; + public uriMap?: Map; + + constructor(checkResult: boolean, uriMap?: Map) { + this.checkResult = checkResult; + this.uriMap = uriMap; + } +} + +class BaseOptions { + public callback?: (err: AsError | undefined, res?: T) => void; +} + +class PushUrlOptions extends BaseOptions { + public url?: string; + public params?: object; + public mode?: string; +} + +class PushUrlResult { +} + +class ReplaceUrlOptions extends BaseOptions { + public url?: string; + public params?: object; + public mode?: string; +} + +class ReplaceUrlResult { +} + +class BackUrlOptions extends BaseOptions { + public url?: string; + public index?: number; + public delta?: number; + public params?: object; +} + +class BackUrlResult { +} + +class ClearUrlOptions extends BaseOptions { +} + +class ClearUrlResult { +} + +class OnPopEvent { + public name?: string; + public param?: object; + public result?: object; + + constructor(name?: string, param?: object, result?: object) { + this.name = name; + this.param = param; + this.result = result; + } +} + +class PushPathOptions extends BaseOptions { + public name?: string; + public param?: object; + public animated?: boolean; + public onPop?: (event: OnPopEvent) => void; +} + +class PushPathResult { +} + +class ReplacePathOptions extends BaseOptions { + public name?: string; + public param?: object; + public animated?: boolean; + public onPop?: (event: OnPopEvent) => void; +} + +class ReplacePathResult { +} + +class PopPathOptions extends BaseOptions { + public name?: string; + public index?: number; + public delta?: number; + public result?: object; + public animated?: boolean; +} + +class PopPathResult { + public name: string | undefined; + public index: number; + public param?: object; + + constructor(name: string | undefined, index: number, param?: object) { + this.name = name; + this.index = index; + this.param = param; + } +} + +class ClearPathOptions extends BaseOptions { + public animated?: boolean; +} + +class ClearPathResult { +} + +class PostMessageOptions extends BaseOptions { + public data?: object; +} + +class PostMessageResult { +} + +export class OnMessageEvent { + public data: object[]; + + constructor(data: object[]) { + this.data = data; + } +} + +export class OnErrorReceiveEvent { + public request: WebResourceRequest; + public error: WebResourceError; + + constructor(request: WebResourceRequest, error: WebResourceError) { + this.request = request; + this.error = error; + } +} + +export class OnHttpErrorReceiveEvent { + public request: WebResourceRequest; + public response: WebResourceResponse; + + constructor(request: WebResourceRequest, response: WebResourceResponse) { + this.request = request; + this.response = response; + } +} + +export class OnPageBeginEvent { + public url: string; + + constructor(url: string) { + this.url = url; + } +} + +export class OnPageEndEvent { + public url: string; + + constructor(url: string) { + this.url = url; + } +} + +export class WebHeader { + public headerKey: string; + public headerValue: string; + + constructor(headerKey: string, headerValue: string) { + this.headerKey = headerKey; + this.headerValue = headerValue; + } +} + +class GetEnvOptions extends BaseOptions { +} + +class GetEnvResult { + public deviceType?: string; + public brand?: string; + public productModel?: string; + public osFullName?: string; +} + +class CheckJsApiOptions extends BaseOptions { + public jsApiList?: string[]; +} + +class CheckJsApiResult { + public checkResult?: Map; + + constructor(checkResult?: Map) { + this.checkResult = checkResult; + } +} + +class PickCameraOptions extends BaseOptions { + public mediaTypes?: string[]; + public cameraPosition?: number; + public saveUri?: string; + public videoDuration?: number; +} + +class PickCameraResult { + public resultCode?: number; + public resultUri?: string; + public mediaType?: string; + + constructor(resultCode?: number, resultUri?: string, mediaType?: string) { + this.resultCode = resultCode; + this.resultUri = resultUri; + this.mediaType = mediaType; + } +} + +class SelectPhotoOptions extends BaseOptions { + public mimeType?: string; + public maxSelectNumber?: number; + public isPhotoTakingSupported?: boolean; + public isEditSupported?: boolean; + public isSearchSupported?: boolean; + public recommendationType?: number; + public preselectedUris?: string[]; +} + +class SelectPhotoResult { + public photoUris?: string[]; + public isOriginalPhoto?: boolean; + + constructor(photoUris?: string[], isOriginalPhoto?: boolean) { + this.photoUris = photoUris; + this.isOriginalPhoto = isOriginalPhoto; + } +} + +class OpenPreviewOptions extends BaseOptions { + public title?: string; + public uri?: string; + public mimeType?: string; +} + +class OpenPreviewResult { +} + +class UploadFileOptions extends BaseOptions { + public url?: string; + public header?: object; + public method?: string; + public files?: UploadFile[]; + public data?: UploadRequestData[]; +} + +class UploadFile { + public filename: string; + public name: string; + public uri: string; + public type: string; + + constructor(filename: string, name: string, uri: string, type: string) { + this.filename = filename; + this.name = name; + this.uri = uri; + this.type = type; + } +} + +class UploadRequestData { + public name?: string; + public value?: string; +} + +class UploadFileResult { + public taskStates?: UploadFileTaskState[]; + + constructor(taskStates?: UploadFileTaskState[]) { + this.taskStates = taskStates; + } +} + +class UploadFileTaskState { + public path?: string; + public responseCode?: number; + public message?: string; + + constructor(path?: string, responseCode?: number, message?: string) { + this.path = path; + this.responseCode = responseCode; + this.message = message; + } +} + +class DownloadFileOptions extends BaseOptions { + public url?: string; + public header?: object; + public fileName?: string; + public enableMetered?: boolean; + public enableRoaming?: boolean; + public networkType?: number; +} + +class DownloadFileResult { + public uri?: string; + + constructor(uri?: string) { + this.uri = uri; + } +} + +class GetNetworkTypeOptions extends BaseOptions { +} + +class GetNetworkTypeResult { + public bearerTypes: number[]; + public networkCap?: number[]; + public linkUpBandwidthKbps?: number; + public linkDownBandwidthKbps?: number; + + constructor(bearerTypes: number[], networkCap?: number[], linkUpBandwidthKbps?: number, + linkDownBandwidthKbps?: number) { + this.bearerTypes = bearerTypes; + this.networkCap = networkCap; + this.linkUpBandwidthKbps = linkUpBandwidthKbps; + this.linkDownBandwidthKbps = linkDownBandwidthKbps; + } +} + +class GetLocationOptions extends BaseOptions { + public priority?: number; + public scenario?: number; + public maxAccuracy?: number; + public timeoutMs?: number; +} + +class GetLocationResult { + public latitude: number; + public longitude: number; + public altitude: number; + public accuracy: number; + public speed: number; + public timeStamp: number; + public direction: number; + public timeSinceBoot: number; + public additions?: string[] | undefined; + public additionSize?: number; + + constructor(latitude: number, longitude: number, altitude: number, accuracy: number, speed: number, + timeStamp: number, direction: number, timeSinceBoot: number, additions?: string[], additionSize?: number) { + this.latitude = latitude; + this.longitude = longitude; + this.altitude = altitude; + this.accuracy = accuracy; + this.speed = speed; + this.timeStamp = timeStamp; + this.direction = direction; + this.timeSinceBoot = timeSinceBoot; + this.additions = additions; + this.additionSize = additionSize; + } +} diff --git a/bundle.json b/bundle.json index b9a2d95..2f1102e 100644 --- a/bundle.json +++ b/bundle.json @@ -1,5 +1,5 @@ { - "name": "@ohos/advanced_ui_component", + "name": "@ohos/as_advanced_ui_component", "version": "1.0.0", "description": "as_advanced_ui_component", "publishAs": "code-segment", @@ -25,7 +25,12 @@ }, "build": { "sub_component": [ - "//foundation/arkui/arkui_advanced_ui_component/atomicservicetabs/interfaces:atomicservicetabs" + "//foundation/arkui/arkui_advanced_ui_component/atomicservicenavigation/interfaces:atomicservicenavigation", + "//foundation/arkui/arkui_advanced_ui_component/atomicservicetabs/interfaces:atomicservicetabs", + "//foundation/arkui/arkui_advanced_ui_component/atomicserviceweb/interfaces:atomicserviceweb", + "//foundation/arkui/arkui_advanced_ui_component/innerfullscreenlaunchcomponent/interfaces:innerfullscreenlaunchcomponent", + "//foundation/arkui/arkui_advanced_ui_component/interstitialdialogaction/interfaces:interstitialdialogaction", + "//foundation/arkui/arkui_advanced_ui_component/navpushpathhelper/interfaces:navpushpathhelper" ], "inner_kits": [], "test": [] diff --git a/innerfullscreenlaunchcomponent/interfaces/BUILD.gn b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn new file mode 100644 index 0000000..4a79668 --- /dev/null +++ b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn @@ -0,0 +1,61 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/config/components/ets_frontend/es2abc_config.gni") +import("//build/ohos.gni") +import("//foundation/arkui/ace_engine/ace_config.gni") +import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") +import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") + +es2abc_gen_abc("gen_innerfullscreenlaunchcomponent_abc") { + src_js = rebase_path("innerfullscreenlaunchcomponent.js") + dst_file = rebase_path(target_out_dir + "/innerfullscreenlaunchcomponent.abc") + in_puts = [ "innerfullscreenlaunchcomponent.js" ] + out_puts = [ target_out_dir + "/innerfullscreenlaunchcomponent.abc" ] + extra_args = [ "--module" ] +} + +gen_js_obj("innerfullscreenlaunchcomponent_abc") { + input = + get_label_info(":gen_innerfullscreenlaunchcomponent_abc", + "target_out_dir") + "/innerfullscreenlaunchcomponent.abc" + output = target_out_dir + "/innerfullscreenlaunchcomponent_abc.o" + dep = ":gen_innerfullscreenlaunchcomponent_abc" +} + +gen_obj("innerfullscreenlaunchcomponent_abc_preview") { + input = + get_label_info(":gen_innerfullscreenlaunchcomponent_abc", + "target_out_dir") + "/innerfullscreenlaunchcomponent.abc" + output = target_out_dir + "/innerfullscreenlaunchcomponent_abc.c" + snapshot_dep = [ ":gen_innerfullscreenlaunchcomponent_abc" ] +} + +ohos_shared_library("innerfullscreenlaunchcomponent") { + sources = [ "innerfullscreenlaunchcomponent.cpp" ] + + if (use_mingw_win || use_mac || use_linux) { + deps = [ ":gen_obj_src_innerfullscreenlaunchcomponent_abc_preview" ] + } else { + deps = [ ":innerfullscreenlaunchcomponent_abc" ] + } + + external_deps = [ + "hilog:libhilog", + "napi:ace_napi", + ] + + relative_install_dir = "module/arkui/advanced" + subsystem_name = "arkui" + part_name = "as_advanced_ui_component" +} diff --git a/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.cpp b/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.cpp new file mode 100644 index 0000000..07cab76 --- /dev/null +++ b/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "napi/native_node_api.h" + +extern const char _binary_innerfullscreenlaunchcomponent_abc_start[]; +extern const char _binary_innerfullscreenlaunchcomponent_abc_end[]; + +// Napi get abc code function +extern "C" __attribute__((visibility("default"))) void NAPI_arkui_advanced_InnerFullScreenLaunchComponent_GetABCCode( + const char** buf, int* buflen) +{ + if (buf != nullptr) { + *buf = _binary_innerfullscreenlaunchcomponent_abc_start; + } + if (buflen != nullptr) { + *buflen = _binary_innerfullscreenlaunchcomponent_abc_end - + _binary_innerfullscreenlaunchcomponent_abc_start; + } +} + +/* + * Module define + */ +static napi_module InnerFullScreenLaunchComponentModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_modname = "arkui.advanced.InnerFullScreenLaunchComponent", + .nm_priv = ((void*)0), + .reserved = { 0 }, +}; + +/* + * Module registerfunction + */ +extern "C" __attribute__((constructor)) void InnerFullScreenLaunchComponentRegisterModule(void) +{ + napi_module_register(&InnerFullScreenLaunchComponentModule); +} \ No newline at end of file diff --git a/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js b/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js new file mode 100644 index 0000000..107564d --- /dev/null +++ b/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if (!("finalizeConstruction" in ViewPU.prototype)) { + Reflect.set(ViewPU.prototype, "finalizeConstruction", () => { }); +} +const hilog = requireNapi('hilog'); +const abilityManager = requireNapi('app.ability.abilityManager'); +const commonEventManager = requireNapi('commonEventManager'); +export class LaunchController { + constructor() { + this.launchAtomicService = (n1, o1) => { }; + } +} + +const EMBEDDED_FULL_MODE = 1; +export class InnerFullScreenLaunchComponent extends ViewPU { + constructor(d1, e1, f1, g1 = -1, h1 = undefined, i1) { + super(d1, f1, g1, i1); + if (typeof h1 === "function") { + this.paramsGenerator_ = h1; + } + this.content = this.doNothingBuilder; + this.context = getContext(this); + this.controller = new LaunchController(); + this.appId = ''; + this.options = undefined; + this.__isShow = new ObservedPropertySimplePU(false, this, "isShow"); + this.subscriber = null; + this.launchAtomicService = (k1, l1) => { + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', 'launchAtomicService, appId: %{public}s.', k1); + this.appId = k1; + this.options = l1; + this.checkAbility(); + }; + this.setInitiallyProvidedValue(e1); + this.finalizeConstruction(); + } + setInitiallyProvidedValue(c1) { + if (c1.content !== undefined) { + this.content = c1.content; + } + if (c1.context !== undefined) { + this.context = c1.context; + } + if (c1.controller !== undefined) { + this.controller = c1.controller; + } + if (c1.appId !== undefined) { + this.appId = c1.appId; + } + if (c1.options !== undefined) { + this.options = c1.options; + } + if (c1.isShow !== undefined) { + this.isShow = c1.isShow; + } + if (c1.subscriber !== undefined) { + this.subscriber = c1.subscriber; + } + if (c1.launchAtomicService !== undefined) { + this.launchAtomicService = c1.launchAtomicService; + } + } + updateStateVars(b1) { + } + purgeVariableDependenciesOnElmtId(a1) { + this.__isShow.purgeDependencyOnElmtId(a1); + } + aboutToBeDeleted() { + this.__isShow.aboutToBeDeleted(); + SubscriberManager.Get().delete(this.id__()); + this.aboutToBeDeletedInternal(); + } + get isShow() { + return this.__isShow.get(); + } + set isShow(z) { + this.__isShow.set(z); + } + aboutToAppear() { + let s = { + events: [commonEventManager.Support.COMMON_EVENT_DISTRIBUTED_ACCOUNT_LOGOUT], + }; + commonEventManager.createSubscriber(s, (u, v) => { + if (u) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'Failed to create subscriber, err: %{public}s.', u.message); + return; + } + if (v == null || v == undefined) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'Failed to create subscriber, data is null.'); + return; + } + this.subscriber = v; + commonEventManager.subscribe(this.subscriber, (x, y) => { + if (x) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'Failed to subscribe common event, err: %{public}s.', x.message); + return; + } + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', 'Received account logout event.'); + this.isShow = false; + }); + }); + this.controller.launchAtomicService = this.launchAtomicService; + } + aboutToDisappear() { + if (this.subscriber !== null) { + commonEventManager.unsubscribe(this.subscriber, (r) => { + if (r) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'UnsubscribeCallBack, err: %{public}s.', r.message); + } + else { + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', 'Unsubscribe.'); + this.subscriber = null; + } + }); + } + } + doNothingBuilder(p = null) { + } + resetOptions() { + if (this.options?.parameters) { + this.options.parameters['ohos.extra.param.key.showMode'] = EMBEDDED_FULL_MODE; + this.options.parameters['ability.want.params.IsNotifyOccupiedAreaChange'] = true; + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', 'replaced options is %{public}s !', JSON.stringify(this.options)); + } + else { + this.options = { + parameters: { + 'ohos.extra.param.key.showMode': EMBEDDED_FULL_MODE, + 'ability.want.params.IsNotifyOccupiedAreaChange': true, + } + }; + } + } + async checkAbility() { + this.resetOptions(); + try { + const o = await abilityManager.isEmbeddedOpenAllowed(this.context, this.appId); + if (o) { + this.isShow = true; + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', ' EmbeddedOpen is Allowed!'); + } + else { + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', ' EmbeddedOpen is not Allowed!'); + this.popUp(); + } + } + catch (n) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'isEmbeddedOpenAllowed called error!%{public}s', n.message); + } + } + async popUp() { + this.isShow = false; + try { + const m = await this.context.openAtomicService(this.appId, this.options); + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', '%{public}s open service success!', m.want); + } + catch (l) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', '%{public}s open service error!', l.message); + } + } + initialRender() { + this.observeComponentCreation2((i, j) => { + Row.create(); + Row.justifyContent(FlexAlign.Center); + Row.bindContentCover({ value: this.isShow, changeEvent: k => { this.isShow = k; } }, { builder: () => { + this.uiExtensionBuilder.call(this); + } }, { modalTransition: ModalTransition.DEFAULT }); + }, Row); + this.content.bind(this)(this); + Row.pop(); + } + uiExtensionBuilder(a = null) { + this.observeComponentCreation2((c, d) => { + UIExtensionComponent.create({ + bundleName: `com.atomicservice.${this.appId}`, + flags: this.options?.flags, + parameters: this.options?.parameters + }); + UIExtensionComponent.height('100%'); + UIExtensionComponent.width('100%'); + UIExtensionComponent.onRelease(() => { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'onRelease'); + this.isShow = false; + }); + UIExtensionComponent.onError(g => { + this.isShow = false; + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'call up UIExtension error!%{public}s', g.message); + this.getUIContext().showAlertDialog({ + message: g.message + }); + }); + }, UIExtensionComponent); + } + rerender() { + this.updateDirtyElements(); + } +} + + +export default { InnerFullScreenLaunchComponent, LaunchController}; \ No newline at end of file diff --git a/innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets b/innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets new file mode 100644 index 0000000..ad3567d --- /dev/null +++ b/innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import hilog from '@ohos.hilog'; +import abilityManager from '@ohos.app.ability.abilityManager'; +import common from '@ohos.app.ability.common'; +import { Callback } from '@ohos.base'; +import AtomicServiceOptions from '@ohos.app.ability.AtomicServiceOptions'; +import commonEventManager from '@ohos.commonEventManager'; +import Base from '@ohos.base'; + +export class LaunchController { + public launchAtomicService = (appId: string, options?: AtomicServiceOptions) => {}; +} + +const EMBEDDED_FULL_MODE: number = 1; + +@Component +export struct InnerFullScreenLaunchComponent { + @BuilderParam content: Callback = this.doNothingBuilder; + private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; + controller: LaunchController = new LaunchController(); + private appId: string = ''; + private options?: AtomicServiceOptions; + @State private isShow: boolean = false; + private subscriber: commonEventManager.CommonEventSubscriber | null = null; + private launchAtomicService = (appId: string, options?: AtomicServiceOptions) => { + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', + 'launchAtomicService, appId: %{public}s.', appId); + this.appId = appId; + this.options = options; + this.checkAbility(); + } + + aboutToAppear() { + let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = { + events: [commonEventManager.Support.COMMON_EVENT_DISTRIBUTED_ACCOUNT_LOGOUT], + }; + + commonEventManager.createSubscriber(subscribeInfo, + (err:Base.BusinessError, data: commonEventManager.CommonEventSubscriber) => { + if (err) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', + 'Failed to create subscriber, err: %{public}s.', err.message); + return; + } + + if (data == null || data == undefined) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'Failed to create subscriber, data is null.'); + return; + } + + this.subscriber = data; + commonEventManager.subscribe(this.subscriber, + (err: Base.BusinessError, data: commonEventManager.CommonEventData) => { + if (err) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', + 'Failed to subscribe common event, err: %{public}s.', err.message); + return; + } + + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', 'Received account logout event.'); + this.isShow = false; + }) + }) + this.controller.launchAtomicService = this.launchAtomicService; + } + + aboutToDisappear() { + if (this.subscriber !== null) { + commonEventManager.unsubscribe(this.subscriber, (err) => { + if (err) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', + 'UnsubscribeCallBack, err: %{public}s.', err.message); + } else { + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', 'Unsubscribe.'); + this.subscriber = null; + } + }) + } + } + + @Builder + doNothingBuilder() { + }; + + resetOptions() { + if (this.options?.parameters) { + this.options.parameters['ohos.extra.param.key.showMode'] = EMBEDDED_FULL_MODE; + this.options.parameters['ability.want.params.IsNotifyOccupiedAreaChange'] = true; + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', 'replaced options is %{public}s !', JSON.stringify(this.options)); + } else { + this.options = { + parameters: { + 'ohos.extra.param.key.showMode': EMBEDDED_FULL_MODE, + 'ability.want.params.IsNotifyOccupiedAreaChange': true, + } + }; + } + } + + async checkAbility() { + this.resetOptions(); + try { + const res: boolean = await abilityManager.isEmbeddedOpenAllowed(this.context, this.appId); + if (res) { + this.isShow = true; + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', ' EmbeddedOpen is Allowed!'); + } else { + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', ' EmbeddedOpen is not Allowed!'); + this.popUp(); + } + } catch (e) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'isEmbeddedOpenAllowed called error!%{public}s', e.message); + } + } + + async popUp() { + this.isShow = false; + try { + const ability = await this.context.openAtomicService(this.appId, this.options); + hilog.info(0x3900, 'InnerFullScreenLaunchComponent', '%{public}s open service success!', ability.want); + } catch (e) { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', '%{public}s open service error!', e.message); + } + } + + build() { + Row() { + this.content(); + } + .justifyContent(FlexAlign.Center) + .bindContentCover($$this.isShow, this.uiExtensionBuilder()) + } + + @Builder + uiExtensionBuilder() { + UIExtensionComponent({ + bundleName: `com.atomicservice.${this.appId}`, + flags: this.options?.flags, + parameters: this.options?.parameters + }) + .height('100%') + .width('100%') + .onRelease( + () => { + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'onRelease'); + this.isShow = false; + } + ).onError( + err => { + this.isShow = false; + hilog.error(0x3900, 'InnerFullScreenLaunchComponent', 'call up UIExtension error! %{public}s', err.message); + this.getUIContext().showAlertDialog({ + message: err.message + }); + } + ) + } +} \ No newline at end of file diff --git a/interstitialdialogaction/interfaces/BUILD.gn b/interstitialdialogaction/interfaces/BUILD.gn new file mode 100644 index 0000000..10f84ab --- /dev/null +++ b/interstitialdialogaction/interfaces/BUILD.gn @@ -0,0 +1,59 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/config/components/ets_frontend/es2abc_config.gni") +import("//build/ohos.gni") +import("//foundation/arkui/ace_engine/ace_config.gni") +import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") +import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") + +es2abc_gen_abc("gen_interstitialdialogaction_abc") { + src_js = rebase_path("interstitialdialogaction.js") + dst_file = rebase_path(target_out_dir + "/interstitialdialogaction.abc") + in_puts = [ "interstitialdialogaction.js" ] + out_puts = [ target_out_dir + "/interstitialdialogaction.abc" ] + extra_args = [ "--module" ] +} + +gen_js_obj("interstitialdialogaction_abc") { + input = get_label_info(":gen_interstitialdialogaction_abc", + "target_out_dir") + "/interstitialdialogaction.abc" + output = target_out_dir + "/interstitialdialogaction_abc.o" + dep = ":gen_interstitialdialogaction_abc" +} + +gen_obj("interstitialdialogaction_abc_preview") { + input = get_label_info(":gen_interstitialdialogaction_abc", + "target_out_dir") + "/interstitialdialogaction.abc" + output = target_out_dir + "/interstitialdialogaction_abc.c" + snapshot_dep = [ ":gen_interstitialdialogaction_abc" ] +} + +ohos_shared_library("interstitialdialogaction") { + sources = [ "interstitialdialogaction.cpp" ] + + if (use_mingw_win || use_mac || use_linux) { + deps = [ ":gen_obj_src_interstitialdialogaction_abc_preview" ] + } else { + deps = [ ":interstitialdialogaction_abc" ] + } + + external_deps = [ + "hilog:libhilog", + "napi:ace_napi", + ] + + relative_install_dir = "module/atomicservice" + subsystem_name = "arkui" + part_name = "as_advanced_ui_component" +} diff --git a/interstitialdialogaction/interfaces/interstitialdialogaction.cpp b/interstitialdialogaction/interfaces/interstitialdialogaction.cpp new file mode 100644 index 0000000..5b65be0 --- /dev/null +++ b/interstitialdialogaction/interfaces/interstitialdialogaction.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "napi/native_node_api.h" + +extern const char _binary_interstitialdialogaction_abc_start[]; +extern const char _binary_interstitialdialogaction_abc_end[]; + +// Napi get abc code function +extern "C" __attribute__((visibility("default"))) +void NAPI_atomicservice_InterstitialDialogAction_GetABCCode(const char **buf, int *buflen) +{ + if (buf != nullptr) { + *buf = _binary_interstitialdialogaction_abc_start; + } + if (buflen != nullptr) { + *buflen = _binary_interstitialdialogaction_abc_end - _binary_interstitialdialogaction_abc_start; + } +} + +/* + * Module define + */ +static napi_module InterstitialDialogActionModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_modname = "atomicservice.InterstitialDialogAction", + .nm_priv = ((void*)0), + .reserved = { 0 }, +}; + +/* + * Module registerfunction + */ +extern "C" __attribute__((constructor)) void InterstitialDialogActionRegisterModule(void) +{ + napi_module_register(&InterstitialDialogActionModule); +} \ No newline at end of file diff --git a/interstitialdialogaction/interfaces/interstitialdialogaction.js b/interstitialdialogaction/interfaces/interstitialdialogaction.js new file mode 100644 index 0000000..61bcff3 --- /dev/null +++ b/interstitialdialogaction/interfaces/interstitialdialogaction.js @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const ComponentContent = requireNapi("arkui.node").ComponentContent; +const curves = requireNativeModule('ohos.curves'); +const DIALOG_BORDER_RADIUS = { "id": -1, "type": 10002, params: ['sys.float.ohos_id_corner_radius_default_m'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }; +const DIALOG_INNER_PADDING_SIZE = 16; +const DIALOG_MAX_WIDTH = 480; +const DIALOG_OFFSET_X = 0; +const DIALOG_OFFSET_Y_FOR_BAR = -88; +const DIALOG_OFFSET_Y_FOR_NONE = -44; +const STANDARD_MIN_COMPONENT_HEIGHT = 82; +const STANDARD_MAX_COMPONENT_HEIGHT = 94; +const DIALOG_SHADOW_RADIUS = 16; +const DIALOG_SHADOW_OFFSET_Y = 10; +const DIALOG_SHADOW_COLOR = '#19000000'; +const TITLE_LINE_DISTANCE = 2; +const TITLE_MAX_LINE = 2; +const SUBTITLE_MAX_LINE = 1; +const TEXT_LEFT_MARGIN_SIZE = 16; +const SUBTITLE_DEFAULT_COLOR = { "id": -1, "type": 10001, params: ['sys.color.ohos_id_color_text_secondary_contrary'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }; +const TITLE_DEFAULT_COLOR = { "id": -1, "type": 10001, params: ['sys.color.ohos_id_color_text_primary_contrary'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }; +const OPERATE_AREA_AVOID_WIDTH = 28; +const CLOSE_ICON_DARK_RESOURCE = { "id": -1, "type": 10001, params: ['sys.color.ohos_id_color_tertiary'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }; +const CLOSE_ICON_LIGHT_RESOURCE = { "id": -1, "type": 10001, params: ['sys.color.ohos_id_color_primary_contrary'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }; +const CLOSE_BUTTON_BORDER_RADIUS = 8; +const CLOSE_BUTTON_ICON_SIZE = 16; +const CLOSE_BUTTON_HOT_SPOT_SIZE = 32; +const CLOSE_BUTTON_MARGIN = 8; +const CLOSE_BUTTON_ICON_OPACITY = 0.6; +const CLOSE_BUTTON_RESPONSE_REGION_OFFSET_X = -8; +const CLOSE_BUTTON_RESPONSE_REGION_OFFSET_Y = -8; +const CLOSE_BUTTON_OFFSET_X = 0; +const CLOSE_BUTTON_OFFSET_Y = -50; +const FOREGROUND_IMAGE_OFFSET_X = 4; +const FOREGROUND_IMAGE_OFFSET_Y = 0; +export var IconStyle; +(function (e2) { + e2[e2["DARK"] = 0] = "DARK"; + e2[e2["LIGHT"] = 1] = "LIGHT"; +})(IconStyle || (IconStyle = {})); +export var TitlePosition; +(function (d2) { + d2[d2["TOP"] = 0] = "TOP"; + d2[d2["BOTTOM"] = 1] = "BOTTOM"; +})(TitlePosition || (TitlePosition = {})); +export var BottomOffset; +(function (c2) { + c2[c2["OFFSET_FOR_BAR"] = 0] = "OFFSET_FOR_BAR"; + c2[c2["OFFSET_FOR_NONE"] = 1] = "OFFSET_FOR_NONE"; +})(BottomOffset || (BottomOffset = {})); +class DialogParams { + constructor(a2, b2) { + this.options = a2; + this.defaultCloseAction = b2; + } +} +function dialogBuilder(k, l = null) { + const m = k; + (l ? l : this).observeComponentCreation2((x1, y1, z1 = m) => { + Row.create(); + Row.backgroundColor('rgba(0,0,0,0)'); + Row.width('100%'); + Row.height(STANDARD_MAX_COMPONENT_HEIGHT); + Row.padding({ + left: DIALOG_INNER_PADDING_SIZE, + right: DIALOG_INNER_PADDING_SIZE + }); + Row.constraintSize({ + minHeight: STANDARD_MIN_COMPONENT_HEIGHT, + maxHeight: STANDARD_MAX_COMPONENT_HEIGHT, + maxWidth: DIALOG_MAX_WIDTH + }); + }, Row); + (l ? l : this).observeComponentCreation2((t1, u1, v1 = m) => { + Flex.create(); + Flex.backgroundColor(v1.options.backgroundImage === undefined ? '#EBEEF5' : 'rgba(0,0,0,0)'); + Flex.shadow({ + radius: DIALOG_SHADOW_RADIUS, + offsetX: 0, + offsetY: DIALOG_SHADOW_OFFSET_Y, + color: DIALOG_SHADOW_COLOR + }); + Flex.height(STANDARD_MIN_COMPONENT_HEIGHT); + Flex.width('100%'); + Flex.alignSelf(ItemAlign.End); + Flex.direction(Direction.Rtl); + Flex.zIndex(1); + Flex.borderRadius({ + topLeft: DIALOG_BORDER_RADIUS, + topRight: DIALOG_BORDER_RADIUS, + bottomLeft: DIALOG_BORDER_RADIUS, + bottomRight: DIALOG_BORDER_RADIUS + }); + Flex.onClick(() => { + if (v1.options.onDialogClick !== undefined) { + v1.options.onDialogClick(); + } + v1.defaultCloseAction(); + }); + }, Flex); + (l ? l : this).observeComponentCreation2((q1, r1, s1 = m) => { + Row.create(); + Row.padding({ left: OPERATE_AREA_AVOID_WIDTH }); + Row.direction(Direction.Rtl); + Row.defaultFocus(true); + Row.align(Alignment.End); + Row.alignSelf(ItemAlign.End); + Row.constraintSize({ + maxWidth: '50%', + minWidth: '40%' + }); + }, Row); + (l ? l : this).observeComponentCreation2((m1, n1, o1 = m) => { + SymbolGlyph.create({ "id": -1, "type": 40000, params: ['sys.symbol.xmark_circle_fill'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }); + SymbolGlyph.fontColor([o1.options.iconStyle === IconStyle.DARK ? + CLOSE_ICON_DARK_RESOURCE : CLOSE_ICON_LIGHT_RESOURCE]); + SymbolGlyph.borderRadius(CLOSE_BUTTON_BORDER_RADIUS); + SymbolGlyph.width(CLOSE_BUTTON_ICON_SIZE); + SymbolGlyph.height(CLOSE_BUTTON_ICON_SIZE); + SymbolGlyph.opacity(CLOSE_BUTTON_ICON_OPACITY); + SymbolGlyph.draggable(false); + SymbolGlyph.focusable(true); + SymbolGlyph.responseRegion({ + x: CLOSE_BUTTON_RESPONSE_REGION_OFFSET_X, + y: CLOSE_BUTTON_RESPONSE_REGION_OFFSET_Y, + width: CLOSE_BUTTON_HOT_SPOT_SIZE, + height: CLOSE_BUTTON_HOT_SPOT_SIZE + }); + SymbolGlyph.margin(CLOSE_BUTTON_MARGIN); + SymbolGlyph.alignSelf(ItemAlign.End); + SymbolGlyph.offset({ + x: CLOSE_BUTTON_OFFSET_X, + y: CLOSE_BUTTON_OFFSET_Y + }); + SymbolGlyph.onClick(() => { + if (o1.options.onDialogClose !== undefined) { + o1.options.onDialogClose(); + } + o1.defaultCloseAction(); + }); + }, SymbolGlyph); + (l ? l : this).observeComponentCreation2((j1, k1, l1 = m) => { + Image.create(l1.options.foregroundImage); + Image.height(STANDARD_MAX_COMPONENT_HEIGHT); + Image.objectFit(ImageFit.Contain); + Image.fitOriginalSize(true); + Image.offset({ + x: FOREGROUND_IMAGE_OFFSET_X, + y: FOREGROUND_IMAGE_OFFSET_Y + }); + Image.alignSelf(ItemAlign.End); + }, Image); + Row.pop(); + (l ? l : this).observeComponentCreation2((g1, h1, i1 = m) => { + Flex.create({ + direction: i1.options.titlePosition === TitlePosition.BOTTOM ? + FlexDirection.ColumnReverse : FlexDirection.Column, + justifyContent: FlexAlign.Center + }); + Flex.constraintSize({ + maxWidth: '60%', + minWidth: '50%' + }); + Flex.flexGrow(1); + Flex.margin({ left: TEXT_LEFT_MARGIN_SIZE }); + }, Flex); + (l ? l : this).observeComponentCreation2((d1, e1, f1 = m) => { + Text.create(f1.options.title); + Text.alignSelf(ItemAlign.Start); + Text.maxFontSize({ "id": -1, "type": 10002, params: ['sys.float.ohos_id_text_size_sub_title1'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }); + Text.minFontSize(16); + Text.fontColor(f1.options.titleColor !== undefined ? f1.options.titleColor : TITLE_DEFAULT_COLOR); + Text.fontWeight(FontWeight.Bold); + Text.margin(f1.options.titlePosition ? { top: TITLE_LINE_DISTANCE } : { bottom: TITLE_LINE_DISTANCE }); + Text.maxLines(TITLE_MAX_LINE); + Text.wordBreak(WordBreak.BREAK_WORD); + Text.textOverflow({ overflow: TextOverflow.Ellipsis }); + }, Text); + Text.pop(); + (l ? l : this).observeComponentCreation2((a1, b1, c1 = m) => { + Text.create(c1.options.subtitle); + Text.alignSelf(ItemAlign.Start); + Text.maxFontSize({ "id": -1, "type": 10002, params: ['sys.float.ohos_id_text_size_caption'], "bundleName": "__harDefaultBundleName__", "moduleName": "__harDefaultModuleName__" }); + Text.minFontSize(9); + Text.fontColor(c1.options.subtitleColor !== undefined ? c1.options.subtitleColor : SUBTITLE_DEFAULT_COLOR); + Text.maxLines(SUBTITLE_MAX_LINE); + Text.wordBreak(WordBreak.BREAK_WORD); + Text.textOverflow({ overflow: TextOverflow.Ellipsis }); + }, Text); + Text.pop(); + Flex.pop(); + Flex.pop(); + (l ? l : this).observeComponentCreation2((w, x, y = m) => { + Image.create(y.options.backgroundImage); + Image.width('100%'); + Image.height(STANDARD_MIN_COMPONENT_HEIGHT); + Image.offset({ x: '-100%', y: 0 }); + Image.borderRadius(DIALOG_BORDER_RADIUS); + Image.zIndex(0); + Image.alignSelf(ItemAlign.End); + Image.onClick(() => { + if (y.options.onDialogClose !== undefined) { + y.options.onDialogClose(); + } + y.defaultCloseAction(); + }); + }, Image); + Row.pop(); +} +export class InterstitialDialogAction { + constructor(i) { + this.uiContext = i.uiContext; + this.bottomOffsetType = i.bottomOffsetType; + this.dialogParam = new DialogParams(i, () => { + this.closeDialog(); + }); + this.contentNode = new ComponentContent(this.uiContext, wrapBuilder(dialogBuilder), this.dialogParam); + } + openDialog() { + if (this.contentNode !== null) { + this.uiContext.getPromptAction().openCustomDialog(this.contentNode, { + isModal: false, + autoCancel: false, + offset: { + dx: DIALOG_OFFSET_X, + dy: this.bottomOffsetType === BottomOffset.OFFSET_FOR_BAR ? + DIALOG_OFFSET_Y_FOR_BAR : DIALOG_OFFSET_Y_FOR_NONE + }, + alignment: DialogAlignment.Bottom, + transition: TransitionEffect.asymmetric(TransitionEffect.OPACITY.animation({ duration: 150, curve: Curve.Sharp }) + .combine(TransitionEffect.scale({ x: 0.85, y: 0.85, centerX: '50%', centerY: '85%' }) + .animation({ curve: curves.interpolatingSpring(0, 1, 228, 24) })), TransitionEffect.OPACITY.animation({ duration: 250, curve: Curve.Sharp }) + .combine(TransitionEffect.scale({ x: 0.85, y: 0.85, centerX: '50%', centerY: '85%' }) + .animation({ duration: 250, curve: Curve.Friction }))) + }) + .catch((f) => { + let g = f.message; + let h = f.code; + console.error(`${h}: ${g}`); + }); + } + } + closeDialog() { + if (this.contentNode !== null) { + this.uiContext.getPromptAction().closeCustomDialog(this.contentNode) + .catch((b) => { + let c = b.message; + let d = b.code; + console.error(`${d}: ${c}`); + }); + } + } +} + +export default { InterstitialDialogAction, IconStyle, TitlePosition, BottomOffset }; \ No newline at end of file diff --git a/interstitialdialogaction/source/interstitialdialogaction.ets b/interstitialdialogaction/source/interstitialdialogaction.ets new file mode 100644 index 0000000..427e504 --- /dev/null +++ b/interstitialdialogaction/source/interstitialdialogaction.ets @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { UIContext } from '@ohos.arkui.UIContext'; +import { ComponentContent } from '@ohos.arkui.node'; +import { BusinessError } from '@ohos.base'; +import { curves } from '@kit.ArkUI'; + +const DIALOG_BORDER_RADIUS: Resource = $r('sys.float.ohos_id_corner_radius_default_m'); +const DIALOG_INNER_PADDING_SIZE: number = 16; +const DIALOG_MAX_WIDTH: number = 480; +const DIALOG_OFFSET_X: number = 0; +const DIALOG_OFFSET_Y_FOR_BAR: number = -88; +const DIALOG_OFFSET_Y_FOR_NONE: number = -44; + +const STANDARD_MIN_COMPONENT_HEIGHT: number = 82; +const STANDARD_MAX_COMPONENT_HEIGHT: number = 94; + +const DIALOG_SHADOW_RADIUS: number = 16; +const DIALOG_SHADOW_OFFSET_Y: number = 10; +const DIALOG_SHADOW_COLOR: ResourceStr = '#19000000'; + +const TITLE_LINE_DISTANCE: number = 2; +const TITLE_MAX_LINE: number = 2; +const SUBTITLE_MAX_LINE: number = 1; +const TEXT_LEFT_MARGIN_SIZE: number = 16; +const SUBTITLE_DEFAULT_COLOR: Resource = $r('sys.color.ohos_id_color_text_secondary_contrary'); +const TITLE_DEFAULT_COLOR: Resource = $r('sys.color.ohos_id_color_text_primary_contrary'); + +const OPERATE_AREA_AVOID_WIDTH: number = 28; + +const CLOSE_ICON_DARK_RESOURCE: Resource = $r('sys.color.ohos_id_color_tertiary'); +const CLOSE_ICON_LIGHT_RESOURCE: Resource = $r('sys.color.ohos_id_color_primary_contrary'); + +const CLOSE_BUTTON_BORDER_RADIUS: number = 8; +const CLOSE_BUTTON_ICON_SIZE: number = 16; +const CLOSE_BUTTON_HOT_SPOT_SIZE: number = 32; +const CLOSE_BUTTON_MARGIN: number = 8; +const CLOSE_BUTTON_ICON_OPACITY = 0.6; +const CLOSE_BUTTON_RESPONSE_REGION_OFFSET_X: number = -8; +const CLOSE_BUTTON_RESPONSE_REGION_OFFSET_Y: number = -8; +const CLOSE_BUTTON_OFFSET_X: number = 0; +const CLOSE_BUTTON_OFFSET_Y: number = -50; + +const FOREGROUND_IMAGE_OFFSET_X: number = 4; +const FOREGROUND_IMAGE_OFFSET_Y: number = 0; + +export enum IconStyle { + DARK = 0, + LIGHT = 1 +} + +export enum TitlePosition { + TOP = 0, + BOTTOM = 1 +} + +export enum BottomOffset { + OFFSET_FOR_BAR = 0, + OFFSET_FOR_NONE = 1 +} + +class DialogParams { + public options: DialogOptions; + public defaultCloseAction: Callback; + + constructor( + options: DialogOptions, + defaultCloseAction: Callback, + ) { + this.options = options; + this.defaultCloseAction = defaultCloseAction; + } +} + +@Builder +function dialogBuilder(params: DialogParams) { + Row() { + Flex() { + Row() { + SymbolGlyph($r('sys.symbol.xmark_circle_fill')) + .fontColor([params.options.iconStyle === IconStyle.DARK ? + CLOSE_ICON_DARK_RESOURCE : CLOSE_ICON_LIGHT_RESOURCE]) + .borderRadius(CLOSE_BUTTON_BORDER_RADIUS) + .width(CLOSE_BUTTON_ICON_SIZE) + .height(CLOSE_BUTTON_ICON_SIZE) + .opacity(CLOSE_BUTTON_ICON_OPACITY) + .draggable(false) + .focusable(true) + .responseRegion({ + x: CLOSE_BUTTON_RESPONSE_REGION_OFFSET_X, + y: CLOSE_BUTTON_RESPONSE_REGION_OFFSET_Y, + width: CLOSE_BUTTON_HOT_SPOT_SIZE, + height: CLOSE_BUTTON_HOT_SPOT_SIZE + }) + .margin(CLOSE_BUTTON_MARGIN) + .alignSelf(ItemAlign.End) + .offset({ + x: CLOSE_BUTTON_OFFSET_X, + y: CLOSE_BUTTON_OFFSET_Y + }) + .onClick(() => { + if (params.options.onDialogClose !== undefined) { + params.options.onDialogClose() + } + params.defaultCloseAction() + }) + + Image(params.options.foregroundImage) + .height(STANDARD_MAX_COMPONENT_HEIGHT) + .objectFit(ImageFit.Contain) + .fitOriginalSize(true) + .offset({ + x: FOREGROUND_IMAGE_OFFSET_X, + y: FOREGROUND_IMAGE_OFFSET_Y + }) + .alignSelf(ItemAlign.End) + } + .padding({ left: OPERATE_AREA_AVOID_WIDTH }) + .direction(Direction.Rtl) + .defaultFocus(true) + .align(Alignment.End) + .alignSelf(ItemAlign.End) + .constraintSize({ + maxWidth: '50%', + minWidth: '40%' + }) + + Flex({ + direction: params.options.titlePosition === TitlePosition.BOTTOM ? + FlexDirection.ColumnReverse : FlexDirection.Column, + justifyContent: FlexAlign.Center + }) { + Text(params.options.title) + .alignSelf(ItemAlign.Start) + .maxFontSize($r('sys.float.ohos_id_text_size_sub_title1')) + .minFontSize(16) + .fontColor(params.options.titleColor !== undefined ? params.options.titleColor : TITLE_DEFAULT_COLOR) + .fontWeight(FontWeight.Bold) + .margin(params.options.titlePosition ? { top: TITLE_LINE_DISTANCE } : { bottom: TITLE_LINE_DISTANCE }) + .maxLines(TITLE_MAX_LINE) + .wordBreak(WordBreak.BREAK_WORD) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + Text(params.options.subtitle) + .alignSelf(ItemAlign.Start) + .maxFontSize($r('sys.float.ohos_id_text_size_caption')) + .minFontSize(9) + .fontColor(params.options.subtitleColor !== undefined ? params.options.subtitleColor : SUBTITLE_DEFAULT_COLOR) + .maxLines(SUBTITLE_MAX_LINE) + .wordBreak(WordBreak.BREAK_WORD) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + } + .constraintSize({ + maxWidth: '60%', + minWidth: '50%' + }) + .flexGrow(1) + .margin({ left: TEXT_LEFT_MARGIN_SIZE }) + } + .backgroundColor(params.options.backgroundImage === undefined ? '#EBEEF5' : 'rgba(0,0,0,0)') + .shadow({ + radius: DIALOG_SHADOW_RADIUS, + offsetX: 0, + offsetY: DIALOG_SHADOW_OFFSET_Y, + color: DIALOG_SHADOW_COLOR + }) + .height(STANDARD_MIN_COMPONENT_HEIGHT) + .width('100%') + .alignSelf(ItemAlign.End) + .direction(Direction.Rtl) + .zIndex(1) + .borderRadius({ + topLeft: DIALOG_BORDER_RADIUS, + topRight: DIALOG_BORDER_RADIUS, + bottomLeft: DIALOG_BORDER_RADIUS, + bottomRight: DIALOG_BORDER_RADIUS + }) + .onClick(() => { + if (params.options.onDialogClick !== undefined) { + params.options.onDialogClick() + } + params.defaultCloseAction() + }) + + Image(params.options.backgroundImage) + .width('100%') + .height(STANDARD_MIN_COMPONENT_HEIGHT) + .offset({ x: '-100%', y: 0 }) + .borderRadius(DIALOG_BORDER_RADIUS) + .zIndex(0) + .alignSelf(ItemAlign.End) + .onClick(() => { + if (params.options.onDialogClose !== undefined) { + params.options.onDialogClose() + } + params.defaultCloseAction() + }) + } + .backgroundColor('rgba(0,0,0,0)') + .width('100%') + .height(STANDARD_MAX_COMPONENT_HEIGHT) + .padding({ + left: DIALOG_INNER_PADDING_SIZE, + right: DIALOG_INNER_PADDING_SIZE + }) + .constraintSize({ + minHeight: STANDARD_MIN_COMPONENT_HEIGHT, + maxHeight: STANDARD_MAX_COMPONENT_HEIGHT, + maxWidth: DIALOG_MAX_WIDTH + }) +} + +declare interface DialogOptions { + uiContext: UIContext, + bottomOffsetType?: BottomOffset, + title?: ResourceStr, + subtitle?: ResourceStr, + titleColor?: ResourceStr | Color, + subtitleColor?: ResourceStr | Color, + backgroundImage?: Resource, + foregroundImage?: Resource, + iconStyle?: IconStyle, + titlePosition?: TitlePosition, + onDialogClick?: Callback, + onDialogClose?: Callback +} + +export class InterstitialDialogAction { + private uiContext: UIContext; + private contentNode: ComponentContent; + private dialogParam: DialogParams; + private bottomOffsetType?: BottomOffset; + + constructor(dialogOptions: DialogOptions) { + this.uiContext = dialogOptions.uiContext; + this.bottomOffsetType = dialogOptions.bottomOffsetType; + this.dialogParam = new DialogParams( + dialogOptions, + () => { + this.closeDialog() + } + ); + this.contentNode = new ComponentContent(this.uiContext, wrapBuilder(dialogBuilder), this.dialogParam) + } + + openDialog() { + if (this.contentNode !== null) { + this.uiContext.getPromptAction().openCustomDialog(this.contentNode, { + isModal: false, + autoCancel: false, + offset: { + dx: DIALOG_OFFSET_X, + dy: this.bottomOffsetType === BottomOffset.OFFSET_FOR_BAR ? + DIALOG_OFFSET_Y_FOR_BAR : DIALOG_OFFSET_Y_FOR_NONE + }, + alignment: DialogAlignment.Bottom, + transition: TransitionEffect.asymmetric( + TransitionEffect.OPACITY.animation({ duration: 150, curve: Curve.Sharp }) + .combine(TransitionEffect.scale({ x: 0.85, y: 0.85, centerX: '50%', centerY: '85%' }) + .animation({ curve: curves.interpolatingSpring(0, 1, 228, 24)})) + , + TransitionEffect.OPACITY.animation({ duration: 250, curve: Curve.Sharp }) + .combine(TransitionEffect.scale({ x: 0.85, y: 0.85, centerX: '50%', centerY: '85%' }) + .animation({ duration: 250, curve: Curve.Friction })) + ) + }) + .catch((error: BusinessError) => { + let message = (error as BusinessError).message + let code = (error as BusinessError).code + console.error(`${code}: ${message}`); + }) + } + } + + closeDialog() { + if (this.contentNode !== null) { + this.uiContext.getPromptAction().closeCustomDialog(this.contentNode) + .catch((error: BusinessError) => { + let message = (error as BusinessError).message + let code = (error as BusinessError).code + console.error(`${code}: ${message}`); + }) + } + } +} \ No newline at end of file diff --git a/navpushpathhelper/BUILD.gn b/navpushpathhelper/BUILD.gn new file mode 100644 index 0000000..c540e9d --- /dev/null +++ b/navpushpathhelper/BUILD.gn @@ -0,0 +1,76 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") +import("//build/ohos.gni") +import("//foundation/arkui/ace_engine/ace_config.gni") +import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") +import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") + +es2abc_gen_abc("gen_navpushpathhelper_abc") { + src_js = rebase_path("navpushpathhelper.js") + dst_file = rebase_path(target_out_dir + "/navpushpathhelper.abc") + in_puts = [ "navpushpathhelper.js" ] + out_puts = [ target_out_dir + "/navpushpathhelper.abc" ] + extra_args = [ "--module" ] +} + +gen_js_obj("navpushpathhelper_abc") { + input = get_label_info(":gen_navpushpathhelper_abc", "target_out_dir") + + "/navpushpathhelper.abc" + output = target_out_dir + "/navpushpathhelper_abc.o" + dep = ":gen_navpushpathhelper_abc" +} + +gen_obj("navpushpathhelper_abc_preview") { + input = get_label_info(":gen_navpushpathhelper_abc", "target_out_dir") + + "/navpushpathhelper.abc" + output = target_out_dir + "/navpushpathhelper_abc.c" + snapshot_dep = [ ":gen_navpushpathhelper_abc" ] +} + +additional_include_dirs = [ "${ace_root}" ] + +ohos_shared_library("navpushpathhelper") { + sources = [ + "src/hsp_silentinstall.cpp", + "src/hsp_silentinstall_napi.cpp", + "src/navpushpathhelper.cpp", + ] + + if (use_mingw_win || use_mac || use_linux) { + deps = [ ":gen_obj_src_navpushpathhelper_abc_preview" ] + } else { + deps = [ ":navpushpathhelper_abc" ] + } + + include_dirs = additional_include_dirs + include_dirs += [ "${ace_root}/frameworks" ] + deps += [ "$ace_root/build:libace_compatible" ] + + external_deps = [ + "ability_base:want", + "ability_runtime:abilitykit_native", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", + "c_utils:utils", + "hilog:libhilog", + "ipc:ipc_core", + "napi:ace_napi", + "samgr:samgr_proxy", + ] + + relative_install_dir = "module/atomicservice" + subsystem_name = "arkui" + part_name = "as_advanced_ui_component" +} diff --git a/navpushpathhelper/include/hsp_silentinstall.h b/navpushpathhelper/include/hsp_silentinstall.h new file mode 100644 index 0000000..ecc6fec --- /dev/null +++ b/navpushpathhelper/include/hsp_silentinstall.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ADVANCED_UI_COMPONENT_NAVPUSHPATHHELPER_INCLUDE_HSP_SILENTINSTALL_H +#define ADVANCED_UI_COMPONENT_NAVPUSHPATHHELPER_INCLUDE_HSP_SILENTINSTALL_H + +#include "bundlemgr/bundle_mgr_interface.h" +#include "interfaces/inner_api/ace/ui_content.h" +namespace OHOS::NavPushPathHelper { + +class HspSilentInstall { +public: + HspSilentInstall() = default; + ~HspSilentInstall() = default; + + static int32_t SilentInstall(const std::string& moduleName, const std::function& callback, + const std::function& silentInstallErrorCallBack); + static bool IsHspExist(const std::string& moduleName, const std::string& pathName); + static void InitRouteMap(); + +private: + static OHOS::sptr GetBundleManager(); +}; +} // namespace OHOS::NavPushPathHelper +#endif \ No newline at end of file diff --git a/navpushpathhelper/include/hsp_silentinstall_napi.h b/navpushpathhelper/include/hsp_silentinstall_napi.h new file mode 100644 index 0000000..e7cedac --- /dev/null +++ b/navpushpathhelper/include/hsp_silentinstall_napi.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ADVANCED_UI_COMPONENT_NAVPUSHPATHHELPER_INCLUDE_HSP_SILENT_INSTALL_NAPI_H +#define ADVANCED_UI_COMPONENT_NAVPUSHPATHHELPER_INCLUDE_HSP_SILENT_INSTALL_NAPI_H + +#include "native_engine/native_engine.h" + +#include "napi/native_api.h" +#include "napi/native_node_api.h" + +namespace OHOS::NavPushPathHelper { +class HspSilentInstallNapi { + public: + static napi_value SilentInstall(napi_env env, napi_callback_info info); + static napi_value IsHspExist(napi_env env, napi_callback_info info); + static napi_value InitRouteMap(napi_env env, napi_callback_info info); + + private: + struct CallbackData { + napi_env env = nullptr; + int32_t errCode = 0; + std::string errorMessage; + napi_ref successCallback = nullptr; + napi_ref failCallback = nullptr; + + ~CallbackData() + { + if (this->successCallback != nullptr) { + napi_delete_reference(this->env, this->successCallback); + this->successCallback = nullptr; + } + if (this->failCallback != nullptr) { + napi_delete_reference(this->env, this->failCallback); + this->failCallback = nullptr; + } + } + }; + + static void SendSuccessBackWork(uv_work_t *work, int statusIn); + static void SendFailBackWork(uv_work_t *work, int statusIn); + static napi_value CreateResultMessage(CallbackData *callbackData); + static napi_value getModuleName(napi_env env, napi_value args, std::string& moduleName); +}; +} + +#endif \ No newline at end of file diff --git a/navpushpathhelper/include/silent_install_callback.h b/navpushpathhelper/include/silent_install_callback.h new file mode 100644 index 0000000..d7fec29 --- /dev/null +++ b/navpushpathhelper/include/silent_install_callback.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef ADVANCED_UI_COMPONENT_NAVPUSHPATHHELPER_INCLUDE_SILENT_INSTALL_CALLBACK_H +#define ADVANCED_UI_COMPONENT_NAVPUSHPATHHELPER_INCLUDE_SILENT_INSTALL_CALLBACK_H + +#include "atomic_service_status_callback.h" +#include "errors.h" +#include "iremote_broker.h" +#include "iremote_object.h" +#include "iremote_stub.h" +#include "base/log/log.h" +#include "want_params_wrapper.h" +#include "want.h" + +namespace OHOS::NavPushPathHelper { +constexpr int32_t SILENT_INSTALL_SUCCESS = 0; +constexpr int32_t SILENT_INSTALL_FAIL_CODE = 300001; +constexpr char SILENT_INSTALL_FAIL_MESSAGE[] = "hsp silent install fail"; + +/** + * @class IAtomicServiceStatusCallback + * IAtomicServiceStatusCallback is used to notify caller ability that free install is complete. + */ +class IAtomicServiceStatusCallback : public OHOS::IRemoteBroker { +public: + DECLARE_INTERFACE_DESCRIPTOR(u"ohos.IAtomicServiceStatusCallback"); + + /** + * @brief OnActionEvent. + */ + virtual int32_t OnActionEvent() = 0; + /** + * @brief OnError. + * @param code The code. + * @param msg The msg. + */ + virtual int32_t OnError(int32_t code, const std::string& msg) = 0; +}; + +/** + * @class AtomicServiceStatusCallbackStub + * AtomicServiceStatusCallbackStub. + */ +class AtomicServiceStatusCallbackStub : public OHOS::IRemoteStub { +public: + AtomicServiceStatusCallbackStub() + { + handleOnActionEventFunc_ = &AtomicServiceStatusCallbackStub::HandleOnActionEvent; + handleOnErrorFunc_ = &AtomicServiceStatusCallbackStub::HandleOnError; + } + ~AtomicServiceStatusCallbackStub() override + { + handleOnActionEventFunc_ = nullptr; + handleOnErrorFunc_ = nullptr; + } + + int32_t OnRemoteRequest(uint32_t code, OHOS::MessageParcel &data, OHOS::MessageParcel &reply, + OHOS::MessageOption &option) override + { + TAG_LOGD(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, + "AtomicServiceStatusCallbackStub::OnReceived, code = %{public}u, flags= %{public}d.", + code, option.GetFlags()); + std::u16string descriptor = AtomicServiceStatusCallbackStub::GetDescriptor(); + std::u16string remoteDescriptor = data.ReadInterfaceToken(); + if (descriptor != remoteDescriptor) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, + "%{public}s failed, local descriptor is not equal to remote", __func__); + return OHOS::ERR_INVALID_VALUE; + } + + auto resultCode = data.ReadInt32(); + if (resultCode == SILENT_INSTALL_SUCCESS) { + if (handleOnActionEventFunc_ != nullptr) { + return (this->*handleOnActionEventFunc_)(); + } + } + + if (resultCode < SILENT_INSTALL_SUCCESS) { + if (handleOnErrorFunc_ != nullptr) { + return (this->*handleOnErrorFunc_)(); + } + } + return IPCObjectStub::OnRemoteRequest(code, data, reply, option); + } + +private: + int32_t HandleOnActionEvent() + { + return OnActionEvent(); + } + int32_t HandleOnError() + { + return OnError(SILENT_INSTALL_FAIL_CODE, SILENT_INSTALL_FAIL_MESSAGE); + } + + using HandleOnActionEventFunc = int32_t (AtomicServiceStatusCallbackStub::*)(); + HandleOnActionEventFunc handleOnActionEventFunc_; + + using HandleOnErrorFunc = int32_t (AtomicServiceStatusCallbackStub::*)(); + HandleOnErrorFunc handleOnErrorFunc_; + + DISALLOW_COPY_AND_MOVE(AtomicServiceStatusCallbackStub); +}; + +/** + * @class AtomicServiceStatusCallback + * AtomicServiceStatusCallback. + */ +class AtomicServiceStatusCallback : public AtomicServiceStatusCallbackStub { +public: + AtomicServiceStatusCallback() = default; + ~AtomicServiceStatusCallback() override = default; + + /** + * @brief OnActionEvent. + */ + int32_t OnActionEvent() override + { + if (!actionEventHandler_) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "actionEventHandler_ is null."); + return OHOS::ERR_INVALID_VALUE; + } + actionEventHandler_(); + return OHOS::ERR_OK; + } + /** + * @brief OnError. + * @param code The code. + * @param msg The msg. + */ + int32_t OnError(int32_t code, const std::string& msg) override + { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "OnError code: %{public}d, msg: %{public}s", + code, msg.c_str()); + if (!errorEventHandler_) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "errorEventHandler_ is null"); + return OHOS::ERR_INVALID_VALUE; + } + + errorEventHandler_(code, msg); + return OHOS::ERR_OK; + } + + void SetActionEventHandler(const std::function& listener) + { + actionEventHandler_ = listener; + } + void SetErrorEventHandler(const std::function& listener) + { + errorEventHandler_ = listener; + } + +private: + std::function actionEventHandler_; + std::function errorEventHandler_; +}; +} +#endif \ No newline at end of file diff --git a/navpushpathhelper/navpushpathhelper.js b/navpushpathhelper/navpushpathhelper.js new file mode 100644 index 0000000..7d6fe2e --- /dev/null +++ b/navpushpathhelper/navpushpathhelper.js @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const navPushPathHelperApi = requireInternal('atomicservice.NavPushPathHelper'); +const hilog = requireNapi('hilog'); + +const tag = 'NavPushPathHelper::JS::'; + +export class NavPushPathHelper { + static currentID = 0; + constructor(navPathStack) { + this.navPathStack_ = navPathStack; + this.currentHelperId_ = NavPushPathHelper.currentID; + NavPushPathHelper.currentID++; + } + + async pushPath(moduleName, info, optionParam) { + hilog.info(0x3900, tag, `pushPath -> currentID: ${this.currentHelperId_}`); + if (navPushPathHelperApi.isHspExist(moduleName, info.name)) { + this.navPathStack_?.pushPath(info, optionParam); + return; + } + return new Promise((resolve, reject) => { + navPushPathHelperApi.silentInstall(moduleName, () => { + navPushPathHelperApi.initRouteMap(); + this.navPathStack_?.pushPath(info, optionParam); + resolve(); + }, + (error) => { + const err = new Error(error.message); + err.code = error.code; + reject(err); + }); + }); + } + + async pushDestination(moduleName, info, optionParam) { + hilog.info(0x3900, tag, `pushDestination -> currentID: ${this.currentHelperId_}`); + if (navPushPathHelperApi.isHspExist(moduleName, info.name)) { + await this.navPathStack_?.pushDestination(info, optionParam); + return; + } + return new Promise((resolve, reject) => { + navPushPathHelperApi.silentInstall(moduleName, () => { + navPushPathHelperApi.initRouteMap(); + this.navPathStack_?.pushDestination(info, optionParam) + .then(resolve).catch(reject); + }, (error) => { + const err = new Error(error.message); + err.code = error.code; + reject(err); + }); + }); + } + + async pushPathByName(moduleName, name, param, onPop, optionParam) { + hilog.info(0x3900, tag, `pushPathByName -> currentID: ${this.currentHelperId_}`); + if (navPushPathHelperApi.isHspExist(moduleName, name)) { + this.navPathStack_?.pushPathByName(name, param, onPop, optionParam); + return; + } + return new Promise((resolve, reject) => { + navPushPathHelperApi.silentInstall(moduleName, () => { + navPushPathHelperApi.initRouteMap(); + this.navPathStack_?.pushPathByName(name, param, onPop, optionParam); + resolve(); + }, (error) => { + const err = new Error(error.message); + err.code = error.code; + reject(err); + }); + }); + } + + async pushDestinationByName(moduleName, name, param, onPop, optionParam) { + hilog.info(0x3900, tag, `pushDestinationByName -> currentID: ${this.currentHelperId_}`); + if (navPushPathHelperApi.isHspExist(moduleName, name)) { + await this.navPathStack_?.pushDestinationByName(name, param, onPop, optionParam); + return; + } + return new Promise((resolve, reject) => { + navPushPathHelperApi.silentInstall(moduleName, () => { + navPushPathHelperApi.initRouteMap(); + this.navPathStack_?.pushDestinationByName(name, param, onPop, optionParam) + .then(resolve).catch(reject); + }, (error) => { + const err = new Error(error.message); + err.code = error.code; + reject(err); + }); + }); + } + + async replacePath(moduleName, info, optionParam) { + hilog.info(0x3900, tag, `replacePath -> currentID: ${this.currentHelperId_}`); + if (navPushPathHelperApi.isHspExist(moduleName, info.name)) { + this.navPathStack_?.replacePath(info, optionParam); + return; + } + return new Promise((resolve, reject) => { + navPushPathHelperApi.silentInstall(moduleName, () => { + navPushPathHelperApi.initRouteMap(); + this.navPathStack_?.replacePath(info, optionParam); + resolve(); + }, (error) => { + const err = new Error(error.message); + err.code = error.code; + reject(err); + }); + }); + } + + async replacePathByName(moduleName, name, param, optionParam) { + hilog.info(0x3900, tag, `replacePathByName -> currentID: ${this.currentHelperId_}`); + if (navPushPathHelperApi.isHspExist(moduleName, name)) { + this.navPathStack_?.replacePathByName(name, param, optionParam); + return; + } + return new Promise((resolve, reject) => { + navPushPathHelperApi.silentInstall(moduleName, () => { + hilog.info(0x3900, tag, `silentInstall success`); + navPushPathHelperApi.initRouteMap(); + this.navPathStack_?.replacePathByName(name, param, optionParam); + resolve(); + }, (error) => { + const err = new Error(error.message); + err.code = error.code; + reject(err); + }); + }); + } +} + +export default { NavPushPathHelper }; \ No newline at end of file diff --git a/navpushpathhelper/src/hsp_silentinstall.cpp b/navpushpathhelper/src/hsp_silentinstall.cpp new file mode 100644 index 0000000..8bc7eca --- /dev/null +++ b/navpushpathhelper/src/hsp_silentinstall.cpp @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "advanced_ui_component/navpushpathhelper/include/hsp_silentinstall.h" +#include "advanced_ui_component/navpushpathhelper/include/silent_install_callback.h" + +#include "iservice_registry.h" +#include "system_ability_definition.h" +#include "ability_runtime/context/context.h" +#include "want.h" +#include "adapter/ohos/entrance/ace_container.h" +#include "core/pipeline_ng/pipeline_context.h" +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components_ng/manager/navigation/navigation_manager.h" +#include "core/components_ng/pattern/image/image_pattern.h" + +namespace OHOS::NavPushPathHelper { + +OHOS::sptr HspSilentInstall::GetBundleManager() +{ + auto systemAbilityMgr = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (!systemAbilityMgr) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "get system ability failed"); + return nullptr; + } + auto bundleObj = systemAbilityMgr->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); + if (!bundleObj) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "get bundle service failed"); + return nullptr; + } + return OHOS::iface_cast(bundleObj); +} + +int32_t HspSilentInstall::SilentInstall(const std::string& moduleName, const std::function& callback, + const std::function& silentInstallErrorCallBack) +{ + auto pipeline = OHOS::Ace::NG::PipelineContext::GetCurrentContextSafely(); + CHECK_NULL_RETURN(pipeline, -1); + + auto runtimeContext = OHOS::Ace::Platform::AceContainer::GetRuntimeContext(pipeline->GetInstanceId()); + CHECK_NULL_RETURN(runtimeContext, -1); + + auto bundleName = runtimeContext->GetBundleName(); + if (bundleName.empty()) { + return -1; + } + + auto appInfo = runtimeContext->GetApplicationInfo(); + if (!appInfo) { + return -1; + } + auto bms = GetBundleManager(); + CHECK_NULL_RETURN(bms, -1); + + OHOS::AAFwk::Want want; + want.SetBundle(bundleName); + want.SetModuleName(moduleName); + OHOS::sptr routerCallback = new AtomicServiceStatusCallback(); + routerCallback->SetActionEventHandler(callback); + routerCallback->SetErrorEventHandler(silentInstallErrorCallBack); + if (bms->SilentInstall(want, appInfo->uid / OHOS::AppExecFwk::Constants::BASE_USER_RANGE, routerCallback)) { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "Begin to silent install"); + return 0; + } + return -1; +} + +bool HspSilentInstall::IsHspExist(const std::string &moduleName, const std::string &pathName) +{ + auto pipeline = OHOS::Ace::NG::PipelineContext::GetCurrentContextSafely(); + CHECK_NULL_RETURN(pipeline, false); + auto container = OHOS::Ace::Container::CurrentSafely(); + CHECK_NULL_RETURN(container, false); + auto navigationRoute = container->GetNavigationRoute(); + CHECK_NULL_RETURN(navigationRoute, false); + if (navigationRoute->IsNavigationItemExits(pathName)) { + return true; + } + + auto runtimeContext = OHOS::Ace::Platform::AceContainer::GetRuntimeContext(pipeline->GetInstanceId()); + CHECK_NULL_RETURN(runtimeContext, false); + + auto appInfo = runtimeContext->GetApplicationInfo(); + if (!appInfo) { + return false; + } + std::vector moduleList = appInfo->moduleInfos; + auto res = std::any_of(moduleList.begin(), moduleList.end(), [moduleName](const auto &module) { + return module.moduleName == moduleName; + }); + if (res) { + return true; + } + return false; +} + +void HspSilentInstall::InitRouteMap() +{ + auto container = OHOS::Ace::Container::CurrentSafely(); + CHECK_NULL_VOID(container); + auto navigationRoute = container->GetNavigationRoute(); + CHECK_NULL_VOID(navigationRoute); + navigationRoute->InitRouteMap(); +} +} // namespace OHOS::NavPushPathHelper \ No newline at end of file diff --git a/navpushpathhelper/src/hsp_silentinstall_napi.cpp b/navpushpathhelper/src/hsp_silentinstall_napi.cpp new file mode 100644 index 0000000..d6959c6 --- /dev/null +++ b/navpushpathhelper/src/hsp_silentinstall_napi.cpp @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "advanced_ui_component/navpushpathhelper/include/hsp_silentinstall_napi.h" +#include "advanced_ui_component/navpushpathhelper/include/hsp_silentinstall.h" +#include "base/log/log.h" + +using namespace std; + +namespace OHOS::NavPushPathHelper { + +napi_value HspSilentInstallNapi::IsHspExist(napi_env env, napi_callback_info info) +{ + size_t argc = 2; + size_t requireArgc = 2; + napi_value args[2] = { nullptr }; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); + NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments"); + + // get first parameter:moduleName + napi_valuetype moduleNameType; + NAPI_CALL(env, napi_typeof(env, args[0], &moduleNameType)); + NAPI_ASSERT(env, moduleNameType == napi_string, "Wrong argument type. String expected."); + + size_t maxValueLen = 1024; + char moduleNameValue[maxValueLen]; + size_t moduleNameLength = 0; + napi_get_value_string_utf8(env, args[0], moduleNameValue, maxValueLen, &moduleNameLength); + std::string moduleName = moduleNameValue; + + // get second parameter:pathName + napi_valuetype pathNameType; + NAPI_CALL(env, napi_typeof(env, args[1], &pathNameType)); + NAPI_ASSERT(env, pathNameType == napi_string, "Wrong argument type. String expected."); + + char pathNameValue[maxValueLen]; + size_t pathNameLength = 0; + napi_get_value_string_utf8(env, args[1], pathNameValue, maxValueLen, &pathNameLength); + std::string pathName = pathNameValue; + + bool isHspExits = HspSilentInstall::IsHspExist(moduleName, pathName); + napi_value jsResult; + NAPI_CALL(env, napi_get_boolean(env, isHspExits, &jsResult)); + return jsResult; +} + +napi_value HspSilentInstallNapi::InitRouteMap(napi_env env, napi_callback_info info) +{ + HspSilentInstall::InitRouteMap(); + return nullptr; +} + +napi_value HspSilentInstallNapi::SilentInstall(napi_env env, napi_callback_info info) +{ + napi_value result = nullptr; + size_t argc = 3; + size_t requireArgc = 3; + napi_value args[3] = { nullptr }; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); + NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments"); + + // get first parameter:moduleName + std::string moduleName; + getModuleName(env, args[0], moduleName); + + auto callbackData = new (std::nothrow) CallbackData(); + if (callbackData == nullptr) { + return result; + } + uv_work_t *work = new (std::nothrow) uv_work_t; + if (work == nullptr) { + delete callbackData; + callbackData = nullptr; + return result; + } + int parameterNum = 1; + const int indexTwo = 2; + napi_create_reference(env, args[1], parameterNum, &(callbackData->successCallback)); + napi_create_reference(env, args[indexTwo], parameterNum, &(callbackData->failCallback)); + callbackData->env = env; + + auto successCallback = [callbackData, work]() { + uv_loop_s *loop = nullptr; + napi_get_uv_event_loop(callbackData->env, &loop); + work->data = reinterpret_cast(callbackData); + uv_queue_work(loop, work, [](uv_work_t *work) { (void)work; }, SendSuccessBackWork); + }; + + auto failCallback = [callbackData, work](int32_t errorCode, const std::string& errorMessage) { + callbackData->errCode = errorCode; + callbackData->errorMessage = errorMessage; + + uv_loop_s *loop = nullptr; + napi_get_uv_event_loop(callbackData->env, &loop); + work->data = reinterpret_cast(callbackData); + uv_queue_work(loop, work, [](uv_work_t *work) { (void)work; }, SendFailBackWork); + }; + + HspSilentInstall::SilentInstall(moduleName, successCallback, failCallback); + return result; +} + +napi_value HspSilentInstallNapi::getModuleName(napi_env env, napi_value args, std::string& moduleName) +{ + napi_valuetype moduleNameType; + NAPI_CALL(env, napi_typeof(env, args, &moduleNameType)); + NAPI_ASSERT(env, moduleNameType == napi_string, "Wrong argument type. String expected."); + + napi_status status; + size_t maxValueLen = 1024; + char moduleNameValue[maxValueLen]; + size_t moduleNameLength = 0; + status = napi_get_value_string_utf8(env, args, moduleNameValue, maxValueLen, &moduleNameLength); + NAPI_ASSERT(env, status == napi_ok, "Failed to napi_get_value_string_utf8"); + moduleName = moduleNameValue; + return nullptr; +} + +void HspSilentInstallNapi::SendSuccessBackWork(uv_work_t *work, int statusIn) +{ + if (work == nullptr) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendSuccessBackWork -> work is null"); + return; + } + (void)statusIn; + napi_status status; + napi_handle_scope scope = nullptr; + CallbackData *callbackData = reinterpret_cast(work->data); + if (callbackData == nullptr) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendSuccessBackWork -> callbackData is null"); + return; + } + + napi_open_handle_scope(callbackData->env, &scope); + if (scope == nullptr) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendSuccessBackWork -> scope is null"); + return; + } + + napi_value callback = nullptr; + status = napi_get_reference_value(callbackData->env, callbackData->successCallback, &callback); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendSuccessBackWork -> napi_get_reference_value error"); + napi_close_handle_scope(callbackData->env, scope); + return; + } + + napi_value result; + status = napi_call_function(callbackData->env, nullptr, callback, 0, nullptr, &result); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendSuccessBackWork -> napi_call_function error"); + napi_close_handle_scope(callbackData->env, scope); + return; + } + + napi_close_handle_scope(callbackData->env, scope); + + if (callbackData != nullptr) { + delete callbackData; + callbackData = nullptr; + } + + if (work != nullptr) { + delete work; + work = nullptr; + } +} + +void HspSilentInstallNapi::SendFailBackWork(uv_work_t *work, int statusIn) +{ + if (work == nullptr) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendSuccessBackWork -> work is null"); + return; + } + (void)statusIn; + napi_status status; + napi_handle_scope scope = nullptr; + CallbackData *callbackData = reinterpret_cast(work->data); + if (callbackData == nullptr) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendFailBackWork -> callbackData is null"); + return; + } + + napi_open_handle_scope(callbackData->env, &scope); + if (scope == nullptr) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendFailBackWork -> scope is null"); + return; + } + + napi_value callback = nullptr; + status = napi_get_reference_value(callbackData->env, callbackData->failCallback, &callback); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendFailBackWork -> napi_get_reference_value error"); + napi_close_handle_scope(callbackData->env, scope); + return; + } + + size_t resultLength = 1; + napi_value resultMessage = CreateResultMessage(callbackData); + napi_value result[] = { resultMessage }; + status = napi_call_function(callbackData->env, nullptr, callback, resultLength, result, nullptr); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "SendFailBackWork -> napi_call_function error"); + napi_close_handle_scope(callbackData->env, scope); + return; + } + + napi_close_handle_scope(callbackData->env, scope); + + if (callbackData != nullptr) { + delete callbackData; + callbackData = nullptr; + } + + if (work != nullptr) { + delete work; + work = nullptr; + } +} + +napi_value HspSilentInstallNapi::CreateResultMessage(CallbackData *callbackData) +{ + napi_status status; + napi_value result = nullptr; + napi_value code = nullptr; + + status = napi_create_int32(callbackData->env, callbackData->errCode, &code); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "CreateResultMessage -> napi_create_int32 error"); + return result; + } + + napi_value message = nullptr; + status = napi_create_string_utf8(callbackData->env, callbackData->errorMessage.c_str(), + NAPI_AUTO_LENGTH, &message); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "CreateResultMessage -> napi_create_string_utf8 error"); + return result; + } + + napi_value businessError = nullptr; + status = napi_create_object(callbackData->env, &businessError); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "CreateResultMessage -> napi_create_object error"); + return result; + } + + status = napi_set_named_property(callbackData->env, businessError, "code", code); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "CreateResultMessage -> napi_set_named_property error"); + return result; + } + + status = napi_set_named_property(callbackData->env, businessError, "message", message); + if (status != napi_ok) { + TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "CreateResultMessage -> napi_set_named_property error"); + return result; + } + return businessError; +} +} \ No newline at end of file diff --git a/navpushpathhelper/src/navpushpathhelper.cpp b/navpushpathhelper/src/navpushpathhelper.cpp new file mode 100644 index 0000000..59496cb --- /dev/null +++ b/navpushpathhelper/src/navpushpathhelper.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "native_engine/native_engine.h" + +#include "napi/native_api.h" +#include "napi/native_node_api.h" +#include "advanced_ui_component/navpushpathhelper/include/hsp_silentinstall_napi.h" + +extern const char _binary_navpushpathhelper_abc_start[]; +extern const char _binary_navpushpathhelper_abc_end[]; + +namespace OHOS::NavPushPathHelper { + /* + * function for module exports + */ + static napi_value Init(napi_env env, napi_value exports) + { + /* + * Properties define + */ + napi_property_descriptor desc[] = { + DECLARE_NAPI_FUNCTION("silentInstall", HspSilentInstallNapi::SilentInstall), + DECLARE_NAPI_FUNCTION("isHspExist", HspSilentInstallNapi::IsHspExist), + DECLARE_NAPI_FUNCTION("initRouteMap", HspSilentInstallNapi::InitRouteMap), + }; + NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); + return exports; + } + + // Napi get abc code function + extern "C" __attribute__((visibility("default"))) + void NAPI_atomicservice_NavPushPathHelper_GetABCCode(const char **buf, int *buflen) + { + if (buf != nullptr) { + *buf = _binary_navpushpathhelper_abc_start; + } + if (buflen != nullptr) { + *buflen = _binary_navpushpathhelper_abc_end - _binary_navpushpathhelper_abc_start; + } + } + + /* + * Module define + */ + static napi_module NavPushPathHelperModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "atomicservice.NavPushPathHelper", + .nm_priv = ((void*)0), + .reserved = { 0 }, + }; + + /* + * Module registerfunction + */ + extern "C" __attribute__((constructor)) void NavPushPathHelperRegisterModule(void) + { + napi_module_register(&NavPushPathHelperModule); + } +} \ No newline at end of file -- Gitee From 8622b92e3e8d9163c5f43336db496669c72c9285 Mon Sep 17 00:00:00 2001 From: humeng Date: Fri, 25 Oct 2024 10:50:57 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E4=BB=B6?= =?UTF-8?q?=E5=90=8D&&=E5=88=86=E5=8C=85=E8=B7=AF=E7=94=B1=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: humeng --- BUILD.gn | 2 +- bundle.json | 8 ++++---- navpushpathhelper/navpushpathhelper.js | 13 +++++++------ navpushpathhelper/src/hsp_silentinstall.cpp | 2 +- navpushpathhelper/src/hsp_silentinstall_napi.cpp | 4 ++-- navpushpathhelper/src/navpushpathhelper.cpp | 2 +- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 545b2db..e21eff4 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -11,7 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -group("as_advanced_ui_component") { +group("advanced_ui_component") { deps = [ "atomicservicenavigation/interfaces:atomicservicenavigation", "atomicservicetabs/interfaces:atomicservicetabs", diff --git a/bundle.json b/bundle.json index 2f1102e..9f4cf86 100644 --- a/bundle.json +++ b/bundle.json @@ -1,13 +1,13 @@ { - "name": "@ohos/as_advanced_ui_component", + "name": "@ohos/advanced_ui_component", "version": "1.0.0", - "description": "as_advanced_ui_component", + "description": "advanced_ui_component", "publishAs": "code-segment", "segment": { - "destPath": "foundation/arkui/as_advanced_ui_component" + "destPath": "foundation/arkui/advanced_ui_component" }, "component": { - "name": "as_advanced_ui_component", + "name": "advanced_ui_component", "subsystem": "arkui", "syscap": [], "features": [], diff --git a/navpushpathhelper/navpushpathhelper.js b/navpushpathhelper/navpushpathhelper.js index 7d6fe2e..e91df36 100644 --- a/navpushpathhelper/navpushpathhelper.js +++ b/navpushpathhelper/navpushpathhelper.js @@ -34,7 +34,7 @@ export class NavPushPathHelper { } return new Promise((resolve, reject) => { navPushPathHelperApi.silentInstall(moduleName, () => { - navPushPathHelperApi.initRouteMap(); + navPushPathHelperApi.updateRouteMap(); this.navPathStack_?.pushPath(info, optionParam); resolve(); }, @@ -54,7 +54,7 @@ export class NavPushPathHelper { } return new Promise((resolve, reject) => { navPushPathHelperApi.silentInstall(moduleName, () => { - navPushPathHelperApi.initRouteMap(); + navPushPathHelperApi.updateRouteMap(); this.navPathStack_?.pushDestination(info, optionParam) .then(resolve).catch(reject); }, (error) => { @@ -73,7 +73,8 @@ export class NavPushPathHelper { } return new Promise((resolve, reject) => { navPushPathHelperApi.silentInstall(moduleName, () => { - navPushPathHelperApi.initRouteMap(); + hilog.info(0x3900, tag, `silentInstall success`); + navPushPathHelperApi.updateRouteMap(); this.navPathStack_?.pushPathByName(name, param, onPop, optionParam); resolve(); }, (error) => { @@ -92,7 +93,7 @@ export class NavPushPathHelper { } return new Promise((resolve, reject) => { navPushPathHelperApi.silentInstall(moduleName, () => { - navPushPathHelperApi.initRouteMap(); + navPushPathHelperApi.updateRouteMap(); this.navPathStack_?.pushDestinationByName(name, param, onPop, optionParam) .then(resolve).catch(reject); }, (error) => { @@ -111,7 +112,7 @@ export class NavPushPathHelper { } return new Promise((resolve, reject) => { navPushPathHelperApi.silentInstall(moduleName, () => { - navPushPathHelperApi.initRouteMap(); + navPushPathHelperApi.updateRouteMap(); this.navPathStack_?.replacePath(info, optionParam); resolve(); }, (error) => { @@ -131,7 +132,7 @@ export class NavPushPathHelper { return new Promise((resolve, reject) => { navPushPathHelperApi.silentInstall(moduleName, () => { hilog.info(0x3900, tag, `silentInstall success`); - navPushPathHelperApi.initRouteMap(); + navPushPathHelperApi.updateRouteMap(); this.navPathStack_?.replacePathByName(name, param, optionParam); resolve(); }, (error) => { diff --git a/navpushpathhelper/src/hsp_silentinstall.cpp b/navpushpathhelper/src/hsp_silentinstall.cpp index 8bc7eca..ac28f9a 100644 --- a/navpushpathhelper/src/hsp_silentinstall.cpp +++ b/navpushpathhelper/src/hsp_silentinstall.cpp @@ -106,7 +106,7 @@ bool HspSilentInstall::IsHspExist(const std::string &moduleName, const std::stri return false; } -void HspSilentInstall::InitRouteMap() +void HspSilentInstall::UpdateRouteMap() { auto container = OHOS::Ace::Container::CurrentSafely(); CHECK_NULL_VOID(container); diff --git a/navpushpathhelper/src/hsp_silentinstall_napi.cpp b/navpushpathhelper/src/hsp_silentinstall_napi.cpp index d6959c6..fdee451 100644 --- a/navpushpathhelper/src/hsp_silentinstall_napi.cpp +++ b/navpushpathhelper/src/hsp_silentinstall_napi.cpp @@ -56,9 +56,9 @@ napi_value HspSilentInstallNapi::IsHspExist(napi_env env, napi_callback_info inf return jsResult; } -napi_value HspSilentInstallNapi::InitRouteMap(napi_env env, napi_callback_info info) +napi_value HspSilentInstallNapi::UpdateRouteMap(napi_env env, napi_callback_info info) { - HspSilentInstall::InitRouteMap(); + HspSilentInstall::UpdateRouteMap(); return nullptr; } diff --git a/navpushpathhelper/src/navpushpathhelper.cpp b/navpushpathhelper/src/navpushpathhelper.cpp index 59496cb..2a562e3 100644 --- a/navpushpathhelper/src/navpushpathhelper.cpp +++ b/navpushpathhelper/src/navpushpathhelper.cpp @@ -34,7 +34,7 @@ namespace OHOS::NavPushPathHelper { napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("silentInstall", HspSilentInstallNapi::SilentInstall), DECLARE_NAPI_FUNCTION("isHspExist", HspSilentInstallNapi::IsHspExist), - DECLARE_NAPI_FUNCTION("initRouteMap", HspSilentInstallNapi::InitRouteMap), + DECLARE_NAPI_FUNCTION("updateRouteMap", HspSilentInstallNapi::UpdateRouteMap), }; NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); return exports; -- Gitee From c8764757c7c8bcdee5f7e57807f3c025f464322b Mon Sep 17 00:00:00 2001 From: humeng Date: Fri, 25 Oct 2024 16:10:08 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=95=8F=E6=84=9F=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=88=A0=E9=99=A4&&=E5=B5=8C=E5=85=A5=E5=BC=8F=E6=8B=89?= =?UTF-8?q?=E8=B5=B7=E5=85=83=E6=9C=8D=E5=8A=A1=E7=84=A6=E7=82=B9=E5=8A=A8?= =?UTF-8?q?=E6=95=88=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: humeng --- atomicserviceweb/source/atomicserviceweb.ets | 1 - .../interfaces/innerfullscreenlaunchcomponent.js | 2 ++ .../source/innerfullscreenlaunchcomponent.ets | 2 ++ navpushpathhelper/include/hsp_silentinstall.h | 2 +- navpushpathhelper/include/hsp_silentinstall_napi.h | 2 +- 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/atomicserviceweb/source/atomicserviceweb.ets b/atomicserviceweb/source/atomicserviceweb.ets index 201d409..46fa5b1 100644 --- a/atomicserviceweb/source/atomicserviceweb.ets +++ b/atomicserviceweb/source/atomicserviceweb.ets @@ -247,7 +247,6 @@ export struct AtomicServiceWeb { return true; } url = this.cutUrl(url); - console.log(`AtomicServiceWebLog checkUrl url=${url}`); return true; } } diff --git a/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js b/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js index 107564d..30dd75d 100644 --- a/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js +++ b/innerfullscreenlaunchcomponent/interfaces/innerfullscreenlaunchcomponent.js @@ -190,6 +190,8 @@ export class InnerFullScreenLaunchComponent extends ViewPU { flags: this.options?.flags, parameters: this.options?.parameters }); + UIExtensionComponent.backgroundColor({ 'id': -1, 'type': 10001, params: ['sys.color.ohos_id_color_titlebar_bg'], 'bundleName': '__harDefaultBundleName__', 'moduleName': '__harDefaultModuleName__' }); + UIExtensionComponent.defaultFocus(true); UIExtensionComponent.height('100%'); UIExtensionComponent.width('100%'); UIExtensionComponent.onRelease(() => { diff --git a/innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets b/innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets index ad3567d..a54aacb 100644 --- a/innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets +++ b/innerfullscreenlaunchcomponent/source/innerfullscreenlaunchcomponent.ets @@ -151,6 +151,8 @@ export struct InnerFullScreenLaunchComponent { flags: this.options?.flags, parameters: this.options?.parameters }) + .backgroundColor($r('sys.color.ohos_id_color_titlebar_bg')) + .defaultFocus(true) .height('100%') .width('100%') .onRelease( diff --git a/navpushpathhelper/include/hsp_silentinstall.h b/navpushpathhelper/include/hsp_silentinstall.h index ecc6fec..e3df828 100644 --- a/navpushpathhelper/include/hsp_silentinstall.h +++ b/navpushpathhelper/include/hsp_silentinstall.h @@ -28,7 +28,7 @@ public: static int32_t SilentInstall(const std::string& moduleName, const std::function& callback, const std::function& silentInstallErrorCallBack); static bool IsHspExist(const std::string& moduleName, const std::string& pathName); - static void InitRouteMap(); + static void UpdateRouteMap(); private: static OHOS::sptr GetBundleManager(); diff --git a/navpushpathhelper/include/hsp_silentinstall_napi.h b/navpushpathhelper/include/hsp_silentinstall_napi.h index e7cedac..86361b6 100644 --- a/navpushpathhelper/include/hsp_silentinstall_napi.h +++ b/navpushpathhelper/include/hsp_silentinstall_napi.h @@ -26,7 +26,7 @@ class HspSilentInstallNapi { public: static napi_value SilentInstall(napi_env env, napi_callback_info info); static napi_value IsHspExist(napi_env env, napi_callback_info info); - static napi_value InitRouteMap(napi_env env, napi_callback_info info); + static napi_value UpdateRouteMap(napi_env env, napi_callback_info info); private: struct CallbackData { -- Gitee From 517832f5db12f3c02acc1616cc7d109e190c63e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=BC=AA?= Date: Wed, 30 Oct 2024 11:17:43 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=90=8D=E5=92=8C=E9=83=A8=E4=BB=B6=E5=90=8D=E4=B8=BAatomicser?= =?UTF-8?q?vice=5Fui=5Fcomponent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 连漪 --- BUILD.gn | 3 +-- atomicservicenavigation/interfaces/BUILD.gn | 2 +- atomicservicetabs/interfaces/BUILD.gn | 2 +- atomicserviceweb/interfaces/BUILD.gn | 2 +- bundle.json | 9 ++++----- innerfullscreenlaunchcomponent/interfaces/BUILD.gn | 2 +- interstitialdialogaction/interfaces/BUILD.gn | 2 +- 7 files changed, 10 insertions(+), 12 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index e21eff4..8c00849 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -11,13 +11,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -group("advanced_ui_component") { +group("atomicservice_ui_component") { deps = [ "atomicservicenavigation/interfaces:atomicservicenavigation", "atomicservicetabs/interfaces:atomicservicetabs", "atomicserviceweb/interfaces:atomicserviceweb", "innerfullscreenlaunchcomponent/interfaces:innerfullscreenlaunchcomponent", "interstitialdialogaction/interfaces:interstitialdialogaction", - "navpushpathhelper:navpushpathhelper", ] } diff --git a/atomicservicenavigation/interfaces/BUILD.gn b/atomicservicenavigation/interfaces/BUILD.gn index 5808d6b..2c56761 100644 --- a/atomicservicenavigation/interfaces/BUILD.gn +++ b/atomicservicenavigation/interfaces/BUILD.gn @@ -55,5 +55,5 @@ ohos_shared_library("atomicservicenavigation") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "as_advanced_ui_component" + part_name = "atomicservice_ui_component" } diff --git a/atomicservicetabs/interfaces/BUILD.gn b/atomicservicetabs/interfaces/BUILD.gn index dead4b3..2247ab2 100644 --- a/atomicservicetabs/interfaces/BUILD.gn +++ b/atomicservicetabs/interfaces/BUILD.gn @@ -55,5 +55,5 @@ ohos_shared_library("atomicservicetabs") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "as_advanced_ui_component" + part_name = "atomicservice_ui_component" } diff --git a/atomicserviceweb/interfaces/BUILD.gn b/atomicserviceweb/interfaces/BUILD.gn index a8deb63..f8b10fe 100644 --- a/atomicserviceweb/interfaces/BUILD.gn +++ b/atomicserviceweb/interfaces/BUILD.gn @@ -60,5 +60,5 @@ ohos_shared_library("atomicserviceweb") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "as_advanced_ui_component" + part_name = "atomicservice_ui_component" } diff --git a/bundle.json b/bundle.json index 9f4cf86..b622245 100644 --- a/bundle.json +++ b/bundle.json @@ -1,13 +1,13 @@ { "name": "@ohos/advanced_ui_component", "version": "1.0.0", - "description": "advanced_ui_component", + "description": "atomicservice_ui_component", "publishAs": "code-segment", "segment": { - "destPath": "foundation/arkui/advanced_ui_component" + "destPath": "foundation/arkui/arkui_advanced_ui_component" }, "component": { - "name": "advanced_ui_component", + "name": "atomicservice_ui_component", "subsystem": "arkui", "syscap": [], "features": [], @@ -29,8 +29,7 @@ "//foundation/arkui/arkui_advanced_ui_component/atomicservicetabs/interfaces:atomicservicetabs", "//foundation/arkui/arkui_advanced_ui_component/atomicserviceweb/interfaces:atomicserviceweb", "//foundation/arkui/arkui_advanced_ui_component/innerfullscreenlaunchcomponent/interfaces:innerfullscreenlaunchcomponent", - "//foundation/arkui/arkui_advanced_ui_component/interstitialdialogaction/interfaces:interstitialdialogaction", - "//foundation/arkui/arkui_advanced_ui_component/navpushpathhelper/interfaces:navpushpathhelper" + "//foundation/arkui/arkui_advanced_ui_component/interstitialdialogaction/interfaces:interstitialdialogaction" ], "inner_kits": [], "test": [] diff --git a/innerfullscreenlaunchcomponent/interfaces/BUILD.gn b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn index 4a79668..c77e449 100644 --- a/innerfullscreenlaunchcomponent/interfaces/BUILD.gn +++ b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn @@ -57,5 +57,5 @@ ohos_shared_library("innerfullscreenlaunchcomponent") { relative_install_dir = "module/arkui/advanced" subsystem_name = "arkui" - part_name = "as_advanced_ui_component" + part_name = "atomicservice_ui_component" } diff --git a/interstitialdialogaction/interfaces/BUILD.gn b/interstitialdialogaction/interfaces/BUILD.gn index 10f84ab..aab43e2 100644 --- a/interstitialdialogaction/interfaces/BUILD.gn +++ b/interstitialdialogaction/interfaces/BUILD.gn @@ -55,5 +55,5 @@ ohos_shared_library("interstitialdialogaction") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "as_advanced_ui_component" + part_name = "atomicservice_ui_component" } -- Gitee From 4d4be25fc6490b5b038258d60fafed701ce05d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=BC=AA?= Date: Fri, 22 Nov 2024 16:40:39 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=92=8C=E9=83=A8=E4=BB=B6=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 连漪 --- BUILD.gn | 2 +- atomicservice_config.gni | 95 +++++++++++++++++++ atomicservicenavigation/interfaces/BUILD.gn | 6 +- atomicservicetabs/interfaces/BUILD.gn | 6 +- atomicserviceweb/interfaces/BUILD.gn | 6 +- .../interfaces/atomicserviceweb.js | 7 ++ atomicserviceweb/source/atomicserviceweb.ets | 7 ++ bundle.json | 16 ++-- .../interfaces/BUILD.gn | 2 +- interstitialdialogaction/interfaces/BUILD.gn | 6 +- navpushpathhelper/BUILD.gn | 8 +- 11 files changed, 130 insertions(+), 31 deletions(-) create mode 100644 atomicservice_config.gni diff --git a/BUILD.gn b/BUILD.gn index 8c00849..c681d2a 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -11,7 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -group("atomicservice_ui_component") { +group("advanced_ui_component") { deps = [ "atomicservicenavigation/interfaces:atomicservicenavigation", "atomicservicetabs/interfaces:atomicservicetabs", diff --git a/atomicservice_config.gni b/atomicservice_config.gni new file mode 100644 index 0000000..77087d8 --- /dev/null +++ b/atomicservice_config.gni @@ -0,0 +1,95 @@ +# Copyright (c) 2024 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/config/clang/clang.gni") +import("//build/ohos.gni") +import("//build/test.gni") + +enable_dump_drawcmd = false +is_ohos_standard_system = is_standard_system && !is_arkui_x +use_mingw_win = "${current_os}_${current_cpu}" == "mingw_x86_64" +use_mac = "${current_os}_${current_cpu}" == "mac_x64" || + "${current_os}_${current_cpu}" == "mac_arm64" +use_ios = "${current_os}_${current_cpu}" == "ios_x64" || + "${current_os}_${current_cpu}" == "ios_arm64" +use_linux = "${current_os}_${current_cpu}" == "linux_x64" + +# Config toolchain +windows_buildtool = "//build/toolchain/mingw:mingw_x86_64" +objcopy_default = "//prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/aarch64-linux-android/bin/objcopy" +objcopy_mingw = "//prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/bin/objcopy" +objcopy_x86_64 = "${default_clang_base_path}/bin/llvm-objcopy" +if ("${current_os}_${current_cpu}" == "mac_arm64") { + mac_buildtool = "//build/toolchain/mac:clang_arm64" +} else if ("${current_os}_${current_cpu}" == "mac_x64") { + mac_buildtool = "//build/toolchain/mac:clang_x64" +} + +objcopy_clang = "$clang_base_path/bin/llvm-objcopy" + +if (is_ohos_standard_system) { + objcopy_default = "//prebuilts/clang/ohos/linux-x86_64/llvm/bin/llvm-objcopy" +} else if (is_arkui_x) { + if (host_os == "mac") { + objcopy_default = objcopy_clang + } +} + +use_hilog = is_mingw || is_mac || is_linux || is_ohos || is_ohos_standard_system + +# Config gen_obj +template("gen_obj") { + name = target_name + action("gen_obj_" + name) { + visibility = [ ":*" ] # Only targets in this file can depend on this. + + if (use_mingw_win) { + objcopy_tool = objcopy_mingw + script = "//foundation/arkui/ace_engine/build/tools/build_resource_to_bytecode.py" + } else if (use_mac || target_os == "ios") { + objcopy_tool = objcopy_clang + script = "//foundation/arkui/ace_engine/build/tools/build_resource_to_bytecode.py" + } else if (use_linux) { + objcopy_tool = objcopy_x86_64 + script = "//foundation/arkui/ace_engine/build/tools/build_resource_to_bytecode.py" + } else if (target_cpu == "x86_64") { + objcopy_tool = objcopy_x86_64 + script = "//foundation/arkui/ace_engine/build/tools/run_objcopy.py" + } else { + objcopy_tool = objcopy_default + script = "//foundation/arkui/ace_engine/build/tools/run_objcopy.py" + } + + args = [ + "--objcopy", + rebase_path(objcopy_tool), + "--input", + rebase_path(invoker.input), + "--output", + rebase_path(invoker.output), + "--arch", + current_cpu, + ] + + deps = [] + deps += invoker.snapshot_dep + + inputs = [ invoker.input ] + outputs = [ invoker.output ] + } + + source_set("gen_obj_src_" + name) { + sources = [ invoker.output ] + deps = [ ":gen_obj_" + name ] + } +} diff --git a/atomicservicenavigation/interfaces/BUILD.gn b/atomicservicenavigation/interfaces/BUILD.gn index 2c56761..614b698 100644 --- a/atomicservicenavigation/interfaces/BUILD.gn +++ b/atomicservicenavigation/interfaces/BUILD.gn @@ -13,9 +13,7 @@ import("//build/config/components/ets_frontend/es2abc_config.gni") import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") -import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") +import("//foundation/arkui/advanced_ui_component/atomicservice_config.gni") es2abc_gen_abc("gen_atomicservicenavigation_abc") { src_js = rebase_path("atomicservicenavigation.js") @@ -55,5 +53,5 @@ ohos_shared_library("atomicservicenavigation") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "atomicservice_ui_component" + part_name = "advanced_ui_component" } diff --git a/atomicservicetabs/interfaces/BUILD.gn b/atomicservicetabs/interfaces/BUILD.gn index 2247ab2..6fbe8cb 100644 --- a/atomicservicetabs/interfaces/BUILD.gn +++ b/atomicservicetabs/interfaces/BUILD.gn @@ -13,9 +13,7 @@ import("//build/config/components/ets_frontend/es2abc_config.gni") import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") -import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") +import("//foundation/arkui/advanced_ui_component/atomicservice_config.gni") es2abc_gen_abc("gen_atomicservicetabs_abc") { src_js = rebase_path("atomicservicetabs.js") @@ -55,5 +53,5 @@ ohos_shared_library("atomicservicetabs") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "atomicservice_ui_component" + part_name = "advanced_ui_component" } diff --git a/atomicserviceweb/interfaces/BUILD.gn b/atomicserviceweb/interfaces/BUILD.gn index f8b10fe..92718c9 100644 --- a/atomicserviceweb/interfaces/BUILD.gn +++ b/atomicserviceweb/interfaces/BUILD.gn @@ -13,9 +13,7 @@ import("//build/config/components/ets_frontend/es2abc_config.gni") import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") -import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") +import("//foundation/arkui/advanced_ui_component/atomicservice_config.gni") es2abc_gen_abc("gen_atomicserviceweb_abc") { src_js = rebase_path("atomicserviceweb.js") @@ -60,5 +58,5 @@ ohos_shared_library("atomicserviceweb") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "atomicservice_ui_component" + part_name = "advanced_ui_component" } diff --git a/atomicserviceweb/interfaces/atomicserviceweb.js b/atomicserviceweb/interfaces/atomicserviceweb.js index 5cb35b2..6bf2ff7 100644 --- a/atomicserviceweb/interfaces/atomicserviceweb.js +++ b/atomicserviceweb/interfaces/atomicserviceweb.js @@ -93,6 +93,7 @@ const UPLOAD_IMAGE_FILES_URI_REQUIRED_ERROR = new AsError(200012, 'Param uri of const UPLOAD_FILE_ERROR = new AsError(200013, 'Upload file error.'); const IMAGE_CAN_NOT_PREVIEW_ERROR = new AsError(200014, 'The filePath can not preview.'); const NETWORK_NO_ACTIVE_ERROR = new AsError(200015, 'The network is not active.'); +const PERMISSION_LOCATION_USER_REFUSED_ERROR = 200016; registerJsApi('router.pushUrl', 'pushUrl', '1.0.0', MAX_VERSION, ['url']); registerJsApi('router.replaceUrl', 'replaceUrl', '1.0.0', MAX_VERSION, ['url']); @@ -806,6 +807,12 @@ class AtomicService { p5.requestPermissionsFromUser(this.context, [j5]).then(t5 => { for (let u5 = 0; u5 < t5.authResults.length; u5++) { if (t5.authResults[u5] != 0) { + const error = { + name: '', + message: `RequestPermissionsFromUser error. authResult: ${t5.authResults[u5]}.`, + code: PERMISSION_LOCATION_USER_REFUSED_ERROR + }; + k5(error); return; } } diff --git a/atomicserviceweb/source/atomicserviceweb.ets b/atomicserviceweb/source/atomicserviceweb.ets index 46fa5b1..625fc86 100644 --- a/atomicserviceweb/source/atomicserviceweb.ets +++ b/atomicserviceweb/source/atomicserviceweb.ets @@ -85,6 +85,7 @@ const UPLOAD_IMAGE_FILES_URI_REQUIRED_ERROR: AsError = new AsError(200012, 'Para const UPLOAD_FILE_ERROR: AsError = new AsError(200013, 'Upload file error.'); const IMAGE_CAN_NOT_PREVIEW_ERROR: AsError = new AsError(200014, 'The filePath can not preview.'); const NETWORK_NO_ACTIVE_ERROR: AsError = new AsError(200015, 'The network is not active.'); +const PERMISSION_LOCATION_USER_REFUSED_ERROR: number = 200016; registerJsApi('router.pushUrl', 'pushUrl', '1.0.0', MAX_VERSION, ['url']); registerJsApi('router.replaceUrl', 'replaceUrl', '1.0.0', MAX_VERSION, ['url']); @@ -690,6 +691,12 @@ class AtomicService { atManager.requestPermissionsFromUser(this.context, [permissionName]).then(permissionRequestResult => { for (let i = 0; i < permissionRequestResult.authResults.length; i++) { if (permissionRequestResult.authResults[i] != 0) { + const error: BusinessError = { + name: '', + message: `RequestPermissionsFromUser error. authResult: ${permissionRequestResult.authResults[i]}.`, + code: PERMISSION_LOCATION_USER_REFUSED_ERROR + }; + grantCallback(error); return; } } diff --git a/bundle.json b/bundle.json index b622245..ca80fc0 100644 --- a/bundle.json +++ b/bundle.json @@ -1,13 +1,13 @@ { "name": "@ohos/advanced_ui_component", "version": "1.0.0", - "description": "atomicservice_ui_component", + "description": "advanced_ui_component", "publishAs": "code-segment", "segment": { - "destPath": "foundation/arkui/arkui_advanced_ui_component" + "destPath": "foundation/arkui/advanced_ui_component" }, "component": { - "name": "atomicservice_ui_component", + "name": "advanced_ui_component", "subsystem": "arkui", "syscap": [], "features": [], @@ -25,11 +25,11 @@ }, "build": { "sub_component": [ - "//foundation/arkui/arkui_advanced_ui_component/atomicservicenavigation/interfaces:atomicservicenavigation", - "//foundation/arkui/arkui_advanced_ui_component/atomicservicetabs/interfaces:atomicservicetabs", - "//foundation/arkui/arkui_advanced_ui_component/atomicserviceweb/interfaces:atomicserviceweb", - "//foundation/arkui/arkui_advanced_ui_component/innerfullscreenlaunchcomponent/interfaces:innerfullscreenlaunchcomponent", - "//foundation/arkui/arkui_advanced_ui_component/interstitialdialogaction/interfaces:interstitialdialogaction" + "//foundation/arkui/advanced_ui_component/atomicservicenavigation/interfaces:atomicservicenavigation", + "//foundation/arkui/advanced_ui_component/atomicservicetabs/interfaces:atomicservicetabs", + "//foundation/arkui/advanced_ui_component/atomicserviceweb/interfaces:atomicserviceweb", + "//foundation/arkui/advanced_ui_component/innerfullscreenlaunchcomponent/interfaces:innerfullscreenlaunchcomponent", + "//foundation/arkui/advanced_ui_component/interstitialdialogaction/interfaces:interstitialdialogaction" ], "inner_kits": [], "test": [] diff --git a/innerfullscreenlaunchcomponent/interfaces/BUILD.gn b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn index c77e449..7a0ad27 100644 --- a/innerfullscreenlaunchcomponent/interfaces/BUILD.gn +++ b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn @@ -57,5 +57,5 @@ ohos_shared_library("innerfullscreenlaunchcomponent") { relative_install_dir = "module/arkui/advanced" subsystem_name = "arkui" - part_name = "atomicservice_ui_component" + part_name = "advanced_ui_component" } diff --git a/interstitialdialogaction/interfaces/BUILD.gn b/interstitialdialogaction/interfaces/BUILD.gn index aab43e2..495c7cd 100644 --- a/interstitialdialogaction/interfaces/BUILD.gn +++ b/interstitialdialogaction/interfaces/BUILD.gn @@ -13,9 +13,7 @@ import("//build/config/components/ets_frontend/es2abc_config.gni") import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") -import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") +import("//foundation/arkui/advanced_ui_component/atomicservice_config.gni") es2abc_gen_abc("gen_interstitialdialogaction_abc") { src_js = rebase_path("interstitialdialogaction.js") @@ -55,5 +53,5 @@ ohos_shared_library("interstitialdialogaction") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "atomicservice_ui_component" + part_name = "advanced_ui_component" } diff --git a/navpushpathhelper/BUILD.gn b/navpushpathhelper/BUILD.gn index c540e9d..dcbf22d 100644 --- a/navpushpathhelper/BUILD.gn +++ b/navpushpathhelper/BUILD.gn @@ -11,11 +11,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -import("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") +import("//build/config/components/ets_frontend/es2abc_config.gni") import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") -import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") +import("//foundation/arkui/advanced_ui_component/atomicservice_config.gni") es2abc_gen_abc("gen_navpushpathhelper_abc") { src_js = rebase_path("navpushpathhelper.js") @@ -72,5 +70,5 @@ ohos_shared_library("navpushpathhelper") { relative_install_dir = "module/atomicservice" subsystem_name = "arkui" - part_name = "as_advanced_ui_component" + part_name = "advanced_ui_component" } -- Gitee From da9b5dbb3b4372b99ff6b5fd7dcf927174b81031 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=BC=AA?= Date: Tue, 26 Nov 2024 12:05:34 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9innerfullscreenlaunchcomp?= =?UTF-8?q?onent=20gn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 连漪 --- innerfullscreenlaunchcomponent/interfaces/BUILD.gn | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/innerfullscreenlaunchcomponent/interfaces/BUILD.gn b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn index 7a0ad27..e48444a 100644 --- a/innerfullscreenlaunchcomponent/interfaces/BUILD.gn +++ b/innerfullscreenlaunchcomponent/interfaces/BUILD.gn @@ -13,9 +13,7 @@ import("//build/config/components/ets_frontend/es2abc_config.gni") import("//build/ohos.gni") -import("//foundation/arkui/ace_engine/ace_config.gni") -import("//foundation/arkui/ace_engine/adapter/preview/build/config.gni") -import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") +import("//foundation/arkui/advanced_ui_component/atomicservice_config.gni") es2abc_gen_abc("gen_innerfullscreenlaunchcomponent_abc") { src_js = rebase_path("innerfullscreenlaunchcomponent.js") -- Gitee From 8c82766fc0643609d493b712a79a83272cbcab20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=BC=AA?= Date: Thu, 28 Nov 2024 20:34:50 +0800 Subject: [PATCH 8/8] =?UTF-8?q?asweb=E4=B8=ADdownloadfile=E4=B8=8Eopenprev?= =?UTF-8?q?iew=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3=20Signed-off-by:=20?= =?UTF-8?q?=E8=BF=9E=E6=BC=AA=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interfaces/atomicserviceweb.js | 45 ++++--------------- atomicserviceweb/source/atomicserviceweb.ets | 42 +++-------------- 2 files changed, 16 insertions(+), 71 deletions(-) diff --git a/atomicserviceweb/interfaces/atomicserviceweb.js b/atomicserviceweb/interfaces/atomicserviceweb.js index 6bf2ff7..232beec 100644 --- a/atomicserviceweb/interfaces/atomicserviceweb.js +++ b/atomicserviceweb/interfaces/atomicserviceweb.js @@ -775,22 +775,6 @@ class AtomicService { return n6.substring(o6 + 1); } - saveDownloadFile(z5, a6, b6, c6) { - let d6 = new filePicker.DocumentViewPicker(); - d6.save({ - newFileNames: [a6] - }).then(h6 => { - let i6 = h6[0]; - fs.copy(fileUri.getUriFromPath(z5), i6).then(() => { - c6 && c6(i6); - }).catch((l6) => { - this.error(l6, b6); - }); - }).catch((g6) => { - this.error(g6, b6); - }); - } - checkAccessToken(v5) { let w5 = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); let x5 = w5.appInfo.accessTokenId; @@ -1003,22 +987,14 @@ class AtomicServiceApi extends AtomicService { openPreview(n3) { let o3 = this.getUri(n3.uri); - filePreview.canPreview(this.context, o3).then((s3) => { - if (!s3) { - this.errorWithCodeAndMsg(IMAGE_CAN_NOT_PREVIEW_ERROR, n3); - return; - } - filePreview.openPreview(this.context, { - uri: o3, - mimeType: n3.mimeType, - title: n3.title - }).then(() => { - this.success(new OpenPreviewResult(), n3); - }).catch((v3) => { - this.error(v3, n3); - }); - }).catch((r3) => { - this.error(r3, n3); + filePreview.openPreview(this.context, { + uri: o3, + mimeType: n3.mimeType, + title: n3.title + }).then(() => { + this.success(new OpenPreviewResult(), n3); + }).catch((v3) => { + this.error(v3, n3); }); } @@ -1050,7 +1026,6 @@ class AtomicServiceApi extends AtomicService { } downloadFile(m2) { - let n2 = m2.fileName ? m2.fileName : this.parseFileNameFromUrl(m2.url); let o2 = `${util.generateRandomUUID().replaceAll('-', '')}`; let p2 = `${this.context.cacheDir}/${o2}`; request.downloadFile(this.context, { @@ -1063,9 +1038,7 @@ class AtomicServiceApi extends AtomicService { background: false }).then((t2) => { t2.on('complete', () => { - this.saveDownloadFile(p2, n2, m2, y2 => { - this.success(new DownloadFileResult(y2), m2); - }); + this.success(new DownloadFileResult(p2), m2); }); t2.on('fail', w2 => { this.errorWithCodeAndMsg(new AsError(w2, 'File download fail.'), m2); diff --git a/atomicserviceweb/source/atomicserviceweb.ets b/atomicserviceweb/source/atomicserviceweb.ets index 625fc86..67faf48 100644 --- a/atomicserviceweb/source/atomicserviceweb.ets +++ b/atomicserviceweb/source/atomicserviceweb.ets @@ -657,23 +657,6 @@ class AtomicService { return http.substring(index + 1); } - saveDownloadFile(filePath: string, fileName: string, options: DownloadFileOptions, - callback: (uri: string) => void): void { - let documentPicker = new filePicker.DocumentViewPicker(); - documentPicker.save({ - newFileNames: [fileName] - }).then(res => { - let uri: string = res[0]; - fs.copy(fileUri.getUriFromPath(filePath), uri).then(() => { - callback && callback(uri); - }).catch((err: BusinessError) => { - this.error(err, options); - }); - }).catch((err: BusinessError) => { - this.error(err, options); - }); - } - checkAccessToken(permissionName: Permissions): Promise { let bundleInfo: bundleManager.BundleInfo = bundleManager.getBundleInfoForSelfSync( bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); @@ -889,20 +872,12 @@ class AtomicServiceApi extends AtomicService { openPreview(options: OpenPreviewOptions): void { let uri: string = this.getUri(options.uri as string); - filePreview.canPreview(this.context, uri).then((res: boolean) => { - if (!res) { - this.errorWithCodeAndMsg(IMAGE_CAN_NOT_PREVIEW_ERROR, options); - return; - } - filePreview.openPreview(this.context, { - uri: uri, - mimeType: options.mimeType as string, - title: options.title - }).then(() => { - this.success(new OpenPreviewResult(), options); - }).catch((err: BusinessError) => { - this.error(err, options); - }); + filePreview.openPreview(this.context, { + uri: uri, + mimeType: options.mimeType as string, + title: options.title + }).then(() => { + this.success(new OpenPreviewResult(), options); }).catch((err: BusinessError) => { this.error(err, options); }); @@ -936,7 +911,6 @@ class AtomicServiceApi extends AtomicService { } downloadFile(options: DownloadFileOptions): void { - let fileName: string = options.fileName ? options.fileName : this.parseFileNameFromUrl(options.url); let cacheFileName: string = `${util.generateRandomUUID().replaceAll('-', '')}`; let filePath: string = `${this.context.cacheDir}/${cacheFileName}`; request.downloadFile(this.context, { @@ -949,9 +923,7 @@ class AtomicServiceApi extends AtomicService { background: false }).then((downloadTask: request.DownloadTask) => { downloadTask.on('complete', () => { - this.saveDownloadFile(filePath, fileName, options, uri => { - this.success(new DownloadFileResult(uri), options); - }); + this.success(new DownloadFileResult(filePath), options); }); downloadTask.on('fail', errCode => { this.errorWithCodeAndMsg(new AsError(errCode, 'File download fail.'), options); -- Gitee