1 /* 2 * Copyright (c) 2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_SELECT_SELECT_MODEL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_SELECT_SELECT_MODEL_H 18 19 #include <optional> 20 #include <string_view> 21 22 #include "base/utils/macros.h" 23 #include "core/common/resource/resource_object.h" 24 #include "core/components/common/properties/color.h" 25 #include "core/components_ng/base/symbol_modifier.h" 26 #include "core/components_ng/pattern/select/select_event_hub.h" 27 #include "core/components_ng/pattern/select/select_properties.h" 28 #include "core/components_ng/pattern/text/text_styles.h" 29 30 namespace OHOS::Ace { 31 namespace NG { 32 struct MenuParam; 33 } 34 enum class SelectColorType { 35 FONT_COLOR, 36 BACKGROUND_COLOR, 37 SELECTED_OPTION_BG_COLOR, 38 SELECTED_OPTION_FONT_COLOR, 39 OPTION_BG_COLOR, 40 OPTION_FONT_COLOR, 41 MENU_BACKGROUND_COLOR 42 }; 43 44 enum class SelectOptionType { 45 TEXT, 46 ICON 47 }; 48 49 enum class ArrowPosition { 50 END = 0, 51 START, 52 }; 53 54 enum class MenuAlignType { 55 START = 0, 56 CENTER, 57 END, 58 }; 59 60 struct MenuAlign { 61 MenuAlignType alignType = MenuAlignType::START; 62 DimensionOffset offset = DimensionOffset(Dimension(0, DimensionUnit::VP), Dimension(0, DimensionUnit::VP)); 63 }; 64 65 enum class AvoidanceMode { 66 COVER_TARGET = 0, 67 AVOID_AROUND_TARGET, 68 }; 69 70 struct SelectParam { 71 std::string text; 72 std::string icon; 73 std::function<void(WeakPtr<NG::FrameNode>)> symbolIcon = nullptr; 74 RefPtr<SymbolModifier> symbolModifier = nullptr; 75 }; 76 77 struct SelectResObjParam { 78 RefPtr<ResourceObject> valueResObj = nullptr; 79 RefPtr<ResourceObject> iconResObj = nullptr; 80 }; 81 82 class ACE_FORCE_EXPORT SelectModel { 83 public: 84 static SelectModel* GetInstance(); 85 virtual ~SelectModel() = default; 86 87 virtual void Create(const std::vector<SelectParam>& params); 88 virtual void SetSelected(int32_t idx); 89 virtual void SetValue(const std::string& value); 90 virtual void SetFontSize(const Dimension& value); 91 virtual void SetFontWeight(const FontWeight& value); 92 virtual void SetFontFamily(const std::vector<std::string>& value); 93 virtual void SetItalicFontStyle(const Ace::FontStyle& value); 94 virtual void SetFontColor(const Color& color); 95 virtual void SetSelectedOptionBgColor(const Color& color); 96 virtual void SetSelectedOptionFontSize(const Dimension& value); 97 virtual void SetSelectedOptionFontWeight(const FontWeight& value); 98 virtual void SetSelectedOptionFontFamily(const std::vector<std::string>& value); 99 virtual void SetSelectedOptionItalicFontStyle(const Ace::FontStyle& value); 100 virtual void SetSelectedOptionFontColor(const Color& color); 101 virtual void SetOptionBgColor(const Color& color); 102 virtual void SetOptionFontSize(const Dimension& value); 103 virtual void SetOptionFontWeight(const FontWeight& value); 104 virtual void SetOptionFontFamily(const std::vector<std::string>& value); 105 virtual void SetOptionItalicFontStyle(const Ace::FontStyle& value); 106 virtual void SetOptionFontColor(const Color& color); 107 virtual void SetOnSelect(NG::SelectEvent&& onSelect); 108 virtual void SetWidth(Dimension& value); 109 virtual void SetHeight(Dimension& value); 110 virtual void SetSize(Dimension& width, Dimension& height); 111 virtual void SetPaddings(const std::optional<CalcDimension>& top, const std::optional<CalcDimension>& bottom, 112 const std::optional<CalcDimension>& left, const std::optional<CalcDimension>& right); 113 virtual void SetPadding(const CalcDimension& value); 114 virtual void SetPaddingLeft(const CalcDimension& value); 115 virtual void SetPaddingTop(const CalcDimension& value); 116 virtual void SetPaddingRight(const CalcDimension& value); 117 virtual void SetPaddingBottom(const CalcDimension& value); 118 virtual void SetSpace(const Dimension& value); 119 virtual void SetArrowPosition(const ArrowPosition value); 120 virtual void SetMenuAlign(const MenuAlign& menuAlign); 121 virtual void SetAvoidance(AvoidanceMode mode); 122 virtual void SetSelectChangeEvent(NG::SelectChangeEvent&& selectChangeEvent); 123 virtual void SetValueChangeEvent(NG::ValueChangeEvent&& valueChangeEvent); 124 virtual void SetOptionWidth(const Dimension& value); 125 virtual void SetOptionHeight(const Dimension& value); 126 virtual void SetOptionWidthFitTrigger(bool isFitTrigger); 127 virtual void SetHasOptionWidth(bool hasOptionWidth); 128 virtual void SetMenuBackgroundColor(const Color& color); 129 virtual void SetMenuBackgroundBlurStyle(const BlurStyleOption& blurStyle); 130 virtual void SetDivider(const NG::SelectDivider& divider); 131 virtual void SetDividerStyle(const NG::SelectDivider& divider, const DividerMode& mode); 132 virtual void SetControlSize(const std::optional<ControlSize>& controlSize); 133 virtual void SetLayoutDirection(TextDirection value); 134 virtual ControlSize GetControlSize(); 135 virtual void BackgroundColor(const Color& color) = 0; 136 virtual void ResetBackgroundColor() = 0; ResetFontColor()137 virtual void ResetFontColor() {}; 138 virtual void SetMenuOutline(const NG::MenuParam& menuParam); 139 virtual void SetTextModifierApply(const std::function<void(WeakPtr<NG::FrameNode>)>& textApply); 140 virtual void SetArrowModifierApply(const std::function<void(WeakPtr<NG::FrameNode>)>& arrowApply); 141 virtual void SetOptionTextModifier(const std::function<void(WeakPtr<NG::FrameNode>)>& optionApply); 142 virtual void SetSelectedOptionTextModifier(const std::function<void(WeakPtr<NG::FrameNode>)>& optionSelectedApply); 143 virtual void SetShowInSubWindow(bool isShowInSubWindow) = 0; 144 virtual void ResetShowInSubWindow() = 0; 145 virtual void SetShowDefaultSelectedIcon(bool show) = 0; 146 virtual void ResetShowDefaultSelectedIcon() = 0; CreateWithColorResourceObj(const RefPtr<ResourceObject> & resObj,const SelectColorType & selectColorType)147 virtual void CreateWithColorResourceObj( 148 const RefPtr<ResourceObject>& resObj, const SelectColorType& selectColorType) {}; CreateWithValueIconResourceObj(const std::vector<SelectResObjParam> & resObjVec)149 virtual void CreateWithValueIconResourceObj(const std::vector<SelectResObjParam>& resObjVec) {}; CreateWithIntegerResourceObj(const RefPtr<ResourceObject> & resObj)150 virtual void CreateWithIntegerResourceObj(const RefPtr<ResourceObject>& resObj) {}; CreateWithStringResourceObj(const RefPtr<ResourceObject> & resObj)151 virtual void CreateWithStringResourceObj(const RefPtr<ResourceObject>& resObj) {}; 152 virtual void SetOptionFontColorByUser(bool isValidValue = true) {}; 153 virtual void SetMenuBackgroundColorByUser(bool isValidValue = true) {}; 154 virtual void SetFontColorByUser(bool isValidValue = true) {}; 155 virtual void SetSelectedOptionFontColorByUser(bool isValidValue = true) {}; 156 virtual void SetOptionBgColorByUser(bool isValidValue = true) {}; 157 virtual void SetSelectedOptionBgColorByUser(bool isValidValue = true) {}; 158 159 private: 160 static std::unique_ptr<SelectModel> instance_; 161 static std::mutex mutex_; 162 }; 163 } // namespace OHOS::Ace 164 165 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_SELECT_SELECT_MODEL_H 166