1 /* 2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TEXTPICKER_H 17 #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TEXTPICKER_H 18 19 #include "bridge/declarative_frontend/jsview/js_interactable_view.h" 20 #include "bridge/declarative_frontend/jsview/js_view_abstract.h" 21 #include "core/components/picker/picker_text_component.h" 22 #include "core/components_ng/pattern/picker/picker_type_define.h" 23 #include "core/components_ng/pattern/text_picker/textpicker_event_hub.h" 24 25 namespace OHOS::Ace::Framework { 26 27 enum class PickerStyle { 28 INLINE = 0, 29 BLOCK, 30 FADE, 31 }; 32 33 struct ParseTextArrayParam { 34 std::vector<NG::RangeContent> result; 35 uint32_t kind = NG::TEXT; 36 uint32_t selected = 0; 37 std::vector<Dimension> columnWidths; 38 std::string value; 39 std::vector<NG::TextCascadePickerOptions> options; 40 std::vector<uint32_t> selecteds; 41 std::vector<std::string> values; 42 JSRef<JSVal> valueChangeEventVal; 43 JSRef<JSVal> selectedChangeEventVal; 44 }; 45 46 class JSTextPickerParser : public JSViewAbstract { 47 public: 48 static bool ParseIconTextArray(const JSRef<JSObject>& paramObject, ParseTextArrayParam& param); 49 static bool ParseTextArray(const JSRef<JSObject>& paramObject, ParseTextArrayParam& param); 50 static void ParseTextStyle(const JSRef<JSObject>& paramObj, NG::PickerTextStyle& textStyle, const std::string& pos); 51 static bool ParseMultiTextArray(const JSRef<JSObject>& paramObj, ParseTextArrayParam& param); 52 static bool ParseCascadeTextArray(const JSRef<JSObject>& paramObj, std::vector<uint32_t>& selecteds, 53 std::vector<std::string>& values, NG::TextCascadePickerOptionsAttr& attr); 54 static bool GenerateCascadeOptions(const JSRef<JSArray>& array, 55 std::vector<NG::TextCascadePickerOptions>& options); 56 static bool GenerateCascadeOptionsInternal(const JSRef<JSObject>& jsObj, 57 std::vector<NG::TextCascadePickerOptions>& options); 58 static bool ParseInternalArray(const JSRef<JSArray>& jsRangeValue, std::vector<uint32_t>& selecteds, 59 std::vector<std::string>& values, uint32_t index, bool isHasSelectAttr); 60 static void SetSelectedValues(std::vector<uint32_t>& selectedValues, std::vector<std::string>& values, 61 uint32_t index, bool isHasSelectAttr, std::vector<std::string>& resultStr); 62 static bool ParseMultiTextArrayValue(const JsiRef<JsiValue>& jsValue, ParseTextArrayParam& param); 63 static bool ParseMultiTextArraySelect(const JsiRef<JsiValue>& jsSelectedValue, ParseTextArrayParam& param); 64 static bool ParseMultiColumnWidths(const JsiRef<JsiValue>& jsColumnWidthsValue, ParseTextArrayParam& param); 65 static void ParseMultiTextArraySelectInternal(const std::vector<NG::TextCascadePickerOptions>& options, 66 const std::vector<std::string>& values, std::vector<uint32_t>& selecteds); 67 static bool ParseMultiTextArrayRange(const JSRef<JSArray>& jsRangeValue, 68 std::vector<NG::TextCascadePickerOptions>& options); 69 static bool ParseMultiTextArrayRangeInternal(const JSRef<JSVal>& value, 70 std::vector<NG::TextCascadePickerOptions>& options); 71 static void ParseMultiTextArraySelectArrayInternal(const std::vector<NG::TextCascadePickerOptions>& options, 72 std::vector<uint32_t>& selecteds); 73 static void ParseMultiTextArrayValueInternal(const std::vector<NG::TextCascadePickerOptions>& options, 74 std::vector<std::string>& values); 75 static void ParseMultiTextArrayValueSingleInternal( 76 const std::vector<NG::TextCascadePickerOptions>& options, const std::string& value, 77 std::vector<std::string>& values); 78 static void IsUserDefinedFontFamily(const std::string& pos); 79 static void ParseDefaultTextStyle(const JSRef<JSObject>& paramObj, NG::PickerTextStyle& textStyle); 80 static bool ParseColumnWidths(const JSRef<JSObject>& paramObject, ParseTextArrayParam& param); 81 }; 82 83 class JSTextPicker : public JSViewAbstract { 84 public: 85 static void Create(const JSCallbackInfo& info); 86 static void JSBind(BindingTarget globalObj); 87 88 static void SetDefaultPickerItemHeight(const JSCallbackInfo& info); 89 static void SetCanLoop(const JSCallbackInfo& info); 90 static void SetDigitalCrownSensitivity(const JSCallbackInfo& info); 91 92 static void OnAccept(const JSCallbackInfo& info); 93 static void OnCancel(const JSCallbackInfo& info); 94 static void OnChange(const JSCallbackInfo& info); 95 static void OnScrollStop(const JSCallbackInfo& info); 96 static void OnEnterSelectedArea(const JSCallbackInfo& info); 97 static void SetDisappearTextStyle(const JSCallbackInfo& info); 98 static void SetTextStyle(const JSCallbackInfo& info); 99 static void SetSelectedTextStyle(const JSCallbackInfo& info); 100 static void SetSelectedIndex(const JSCallbackInfo& info); 101 static void PickerBackgroundColor(const JSCallbackInfo& info); 102 static void SetDivider(const JSCallbackInfo& info); 103 static void SetGradientHeight(const JSCallbackInfo& info); 104 static void JsOpacity(const JSCallbackInfo& info); 105 106 static void SetDisableTextStyleAnimation(const JSCallbackInfo& info); 107 static void SetDefaultTextStyle(const JSCallbackInfo& info); 108 static void SetEnableHapticFeedback(const JSCallbackInfo& info); 109 110 private: 111 static size_t ProcessCascadeOptionDepth(const NG::TextCascadePickerOptions& option); 112 static void ProcessCascadeSelected(const std::vector<NG::TextCascadePickerOptions>& options, 113 uint32_t index, std::vector<uint32_t>& selecteds); 114 static bool ProcessCascadeOptions(const JSRef<JSObject>& paramObject, ParseTextArrayParam& param, 115 NG::TextCascadePickerOptionsAttr& attr); 116 static void SetSelectedIndexMulti(const JsiRef<JsiValue>& jsSelectedValue); 117 static void SetSelectedIndexMultiInternal(uint32_t count, std::vector<NG::TextCascadePickerOptions>& options, 118 std::vector<uint32_t>& selecteds); 119 static void SetSelectedInternal(uint32_t count, std::vector<NG::TextCascadePickerOptions>& options, 120 std::vector<uint32_t>& selecteds); 121 static void SetSelectedIndexSingle(const JsiRef<JsiValue>& jsSelectedValue); 122 static bool ProcessSingleRangeValue(const JSRef<JSObject>& paramObjec, ParseTextArrayParam& param); 123 static void SetSelectedIndexSingleInternal(const std::vector<NG::TextCascadePickerOptions>& options, 124 uint32_t count, uint32_t& selectedValue, std::vector<uint32_t>& selectedValues); 125 static void CreateSingle(const RefPtr<PickerTheme>& theme, ParseTextArrayParam& param); 126 static void CreateMulti(const RefPtr<PickerTheme>& theme, 127 const NG::TextCascadePickerOptionsAttr& attr, ParseTextArrayParam& param); 128 static bool CheckDividerValue(const Dimension &dimension); 129 }; 130 131 class JSTextPickerDialog { 132 public: 133 static void JSBind(BindingTarget globalObj); 134 static void Show(const JSCallbackInfo& info); 135 static void TextPickerDialogShow(const JSRef<JSObject>& paramObj, 136 const std::map<std::string, NG::DialogTextEvent>& dialogEvent, 137 const std::map<std::string, NG::DialogGestureEvent>& dialogCancelEvent); 138 static std::map<std::string, NG::DialogTextEvent> DialogEvent(const JSCallbackInfo& info); 139 static std::map<std::string, NG::DialogGestureEvent> DialogCancelEvent(const JSCallbackInfo& info); 140 141 private: 142 static void ParseText(RefPtr<PickerTextComponent>& component, const JSRef<JSObject>& paramObj); 143 static void AddEvent(RefPtr<PickerTextComponent>& picker, const JSCallbackInfo& info); 144 static bool ParseShowData(const JSRef<JSObject>& paramObj, NG::TextPickerSettingData& settingData); 145 static void ParseTextProperties(const JSRef<JSObject>& paramObj, NG::PickerTextProperties& result); 146 static void ParseShowDataMultiContent(const std::vector<NG::TextCascadePickerOptions>& options, 147 const std::vector<uint32_t>& selecteds, const std::vector<std::string>& values, 148 NG::TextCascadePickerOptionsAttr& attr, NG::TextPickerSettingData& settingData); 149 static bool ParseShowDataAttribute(const JSRef<JSObject>& paramObject, 150 NG::TextPickerSettingData& settingData); 151 static bool ParseCanLoop(const JSRef<JSObject>& paramObject, bool& canLoop); 152 static bool ParseShowDataOptions( 153 const JSRef<JSObject>& paramObject, ParseTextArrayParam& param, NG::TextCascadePickerOptionsAttr& attr); 154 static void ParseDisableTextStyleAnimation(const JSRef<JSObject>& paramObject, bool& isDisableTextStyleAnimation); 155 static void ParseEnterSelectedAreaEvent(const JSRef<JSObject>& paramObject, const JSCallbackInfo& info, 156 const WeakPtr<NG::FrameNode>& targetNode, std::map<std::string, NG::DialogTextEvent>& dialogEvent); 157 }; 158 } // namespace OHOS::Ace::Framework 159 #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TEXTPICKER_H 160