• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SYMBOL_SYMBOL_EFFECT_OPTIONS_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SYMBOL_SYMBOL_EFFECT_OPTIONS_H
18 
19 #include <optional>
20 #include <string>
21 
22 #include "base/json/json_util.h"
23 #include "core/components_ng/pattern/symbol/constants.h"
24 
25 namespace OHOS::Ace::NG {
26 class SymbolEffectOptions {
27 public:
28     explicit SymbolEffectOptions(SymbolEffectType effectType);
29 
SymbolEffectOptions(SymbolEffectType effectType,Ace::ScopeType scopeType)30     SymbolEffectOptions(SymbolEffectType effectType, Ace::ScopeType scopeType)
31         : effectType_(effectType), scopeType_(scopeType)
32     {}
33 
SymbolEffectOptions(SymbolEffectType effectType,Ace::ScopeType scopeType,CommonSubType commonSubType)34     SymbolEffectOptions(SymbolEffectType effectType, Ace::ScopeType scopeType, CommonSubType commonSubType)
35         : effectType_(effectType), scopeType_(scopeType), commonSubType_(commonSubType)
36     {}
37 
SymbolEffectOptions(SymbolEffectType effectType,FillStyle fillStyle)38     SymbolEffectOptions(SymbolEffectType effectType, FillStyle fillStyle)
39         : effectType_(effectType), fillStyle_(fillStyle)
40     {}
41 
42     SymbolEffectOptions() = default;
43     ~SymbolEffectOptions() = default;
44 
SetEffectType(SymbolEffectType effectType)45     void SetEffectType(SymbolEffectType effectType)
46     {
47         effectType_ = effectType;
48     }
49 
SetScopeType(Ace::ScopeType scopeType)50     void SetScopeType(Ace::ScopeType scopeType)
51     {
52         scopeType_ = scopeType;
53     }
54 
SetCommonSubType(CommonSubType commonSubType)55     void SetCommonSubType(CommonSubType commonSubType)
56     {
57         commonSubType_ = commonSubType;
58     }
59 
SetFillStyle(FillStyle fillStyle)60     void SetFillStyle(FillStyle fillStyle)
61     {
62         fillStyle_ = fillStyle;
63     }
64 
SetRepeatCount(int32_t repeatCount)65     void SetRepeatCount(int32_t repeatCount)
66     {
67         repeatCount_ = repeatCount;
68     }
69 
SetIsActive(std::optional<bool> isActive)70     void SetIsActive(std::optional<bool> isActive)
71     {
72         isActive_ = isActive;
73     }
74 
Reset()75     void Reset()
76     {
77         if (isTxtActiveSource_ == 1) {
78             isTxtActive_ = false;
79         }
80     }
81 
SetTriggerNum(int32_t triggerNum)82     void SetTriggerNum(int32_t triggerNum)
83     {
84         triggerNum_ = triggerNum;
85     }
86 
UpdateFlags(const SymbolEffectOptions & lastOptions)87     void UpdateFlags(const SymbolEffectOptions& lastOptions)
88     {
89         bool isCurTriggerSetted = triggerNum_.has_value();
90         bool isTriggerHasSetted = lastOptions.GetTriggerNum().has_value();
91         bool isCurActiveSetted = isActive_.has_value();
92 
93         if (isCurTriggerSetted) {
94             // 本次设置了triggerValue, 比较两次的TriggerNum值
95             isTxtActiveSource_ = 1;
96             if (!isTriggerHasSetted) {
97                 // 上次无值
98                 if (triggerNum_ == -1) {
99                     isTxtActive_ = false;
100                 } else {
101                     isTxtActive_ = true;
102                 }
103             } else {
104                 // 上次有值
105                 int32_t lastTriggerNum = lastOptions.GetTriggerNum().value();
106                 int32_t curTriggerNum = triggerNum_.value();
107                 isTxtActive_ = curTriggerNum != lastTriggerNum;
108             }
109         } else if (isTriggerHasSetted) {
110             // 历史设置过triggerValue,本次没设置triggerValue(两个接口混用,isActive写在下面场景)
111             isTxtActiveSource_ = 1;
112             isTxtActive_ = lastOptions.GetIsTxtActive();
113             triggerNum_ = lastOptions.GetTriggerNum().value();
114         } else if (isCurActiveSetted) {
115             // 只设isActive => isActive
116             isTxtActiveSource_ = 0;
117             isTxtActive_ = isActive_.value();
118         } else {
119             // isActive && triggerValue都未设置 => false
120             isTxtActiveSource_ = -1;
121             isTxtActive_ = false;
122         }
123     }
124 
SetIsTxtActive(bool isTxtActive)125     void SetIsTxtActive(bool isTxtActive)
126     {
127         isTxtActive_ = isTxtActive;
128     }
129 
SetIsTxtActiveSource(int16_t isTxtActiveSource)130     void SetIsTxtActiveSource(int16_t isTxtActiveSource)
131     {
132         isTxtActiveSource_ = isTxtActiveSource;
133     }
134 
GetEffectType()135     const SymbolEffectType& GetEffectType() const
136     {
137         return effectType_;
138     }
139 
GetScopeType()140     const std::optional<Ace::ScopeType>& GetScopeType() const
141     {
142         return scopeType_;
143     }
144 
GetCommonSubType()145     const std::optional<CommonSubType>& GetCommonSubType() const
146     {
147         return commonSubType_;
148     }
149 
GetFillStyle()150     const std::optional<FillStyle>& GetFillStyle() const
151     {
152         return fillStyle_;
153     }
154 
GetRepeatCount()155     int32_t GetRepeatCount() const
156     {
157         return repeatCount_;
158     }
159 
GetIsActive()160     const std::optional<bool>& GetIsActive() const
161     {
162         return isActive_;
163     }
164 
GetIsTxtActive()165     bool GetIsTxtActive() const
166     {
167         return isTxtActive_;
168     }
169 
IsTriggerChanged()170     const std::optional<bool>& IsTriggerChanged() const
171     {
172         return isTriggerNumChanged_;
173     }
174 
GetTriggerNum()175     const std::optional<int32_t>& GetTriggerNum() const
176     {
177         return triggerNum_;
178     }
179 
180     bool operator==(const SymbolEffectOptions& info) const;
181     bool operator!=(const SymbolEffectOptions& info) const;
182 
183     std::string ToString() const;
184 
185 private:
186     SymbolEffectType effectType_ = SymbolEffectType::NONE;
187     std::optional<Ace::ScopeType> scopeType_;
188     std::optional<CommonSubType> commonSubType_;
189     std::optional<FillStyle> fillStyle_;
190     std::optional<bool> isActive_;
191     std::optional<int32_t> triggerNum_;
192     std::optional<bool> isTriggerNumChanged_;
193     bool isTxtActive_ = false;
194     int16_t isTxtActiveSource_ = -1; // -1:未设置开关   0:isActive   1:用户js接口的Trigger
195     int32_t repeatCount_ = 1;
196 };
197 } // namespace OHOS::Ace::NG
198 
199 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SYMBOL_SYMBOL_SOURCE_INFO_H
200