• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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_REFRESH_LAYOUT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_REFRESH_LAYOUT_PROPERTY_H
18 
19 #include "frameworks/core/components_ng/layout/layout_property.h"
20 #include "frameworks/core/components_ng/pattern/refresh/refresh_theme_styles.h"
21 #include "frameworks/core/components_ng/property/property.h"
22 
23 namespace OHOS::Ace::NG {
24 
25 enum class RefreshStatus {
26     // The default status.
27     INACTIVE = 0,
28     // While being dragged but not enough to trig refresh.
29     DRAG,
30     // Dragging enough to refresh, and less than the max distance.
31     OVER_DRAG,
32     // While it is refreshing.
33     REFRESH,
34     // While it will scroll back to the top after refreshing.
35     DONE,
36 };
37 
38 enum class RefreshState {
39     STATE_LOADING = 0,
40     STATE_DRAG,
41     STATE_RECYCLE,
42 };
43 
44 class ACE_EXPORT RefreshLayoutProperty : public LayoutProperty {
45     DECLARE_ACE_TYPE(RefreshLayoutProperty, LayoutProperty);
46 
47 public:
48     RefreshLayoutProperty() = default;
49 
50     ~RefreshLayoutProperty() override = default;
51 
Clone()52     RefPtr<LayoutProperty> Clone() const override
53     {
54         auto value = MakeRefPtr<RefreshLayoutProperty>();
55         value->UpdateLayoutProperty(this);
56         value->propRefreshDistance_ = CloneRefreshDistance();
57         value->propIsUseOffset_ = CloneIsUseOffset();
58         value->propIndicatorOffset_ = CloneIndicatorOffset();
59         value->propShowTimeOffset_ = CloneShowTimeOffset();
60         value->propFriction_ = CloneFriction();
61         value->propIsRefresh_ = CloneIsRefresh();
62         value->propIsShowLastTime_ = CloneIsShowLastTime();
63         value->propScrollableOffset_ = CloneScrollableOffset();
64         value->propLoadingProcessOffset_ = CloneLoadingProcessOffset();
65         value->propTriggerRefreshDistance_ = CloneTriggerRefreshDistance();
66         return value;
67     }
68 
Reset()69     void Reset() override
70     {
71         LayoutProperty::Reset();
72         ResetRefreshStyle();
73         ResetRefreshDistance();
74         ResetIsUseOffset();
75         ResetIndicatorOffset();
76         ResetShowTimeOffset();
77         ResetFriction();
78         ResetIsRefresh();
79         ResetIsShowLastTime();
80         ResetScrollableOffset();
81         ResetLoadingProcessOffset();
82         ResetTriggerRefreshDistance();
83     }
84 
ToJsonValue(std::unique_ptr<JsonValue> & json)85     void ToJsonValue(std::unique_ptr<JsonValue>& json) const override
86     {
87         LayoutProperty::ToJsonValue(json);
88 
89         json->Put("offset", propIndicatorOffset_.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str());
90         json->Put("friction", propFriction_.value_or(1));
91     }
92 
93     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(RefreshDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
94     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsUseOffset, bool, PROPERTY_UPDATE_LAYOUT);
95     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IndicatorOffset, Dimension, PROPERTY_UPDATE_LAYOUT);
96     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowTimeOffset, OffsetF, PROPERTY_UPDATE_LAYOUT);
97     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Friction, int32_t, PROPERTY_UPDATE_LAYOUT);
98     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsRefresh, bool, PROPERTY_UPDATE_LAYOUT);
99     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsShowLastTime, bool, PROPERTY_UPDATE_LAYOUT);
100     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollableOffset, OffsetF, PROPERTY_UPDATE_LAYOUT);
101     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(LoadingProcessOffset, OffsetF, PROPERTY_UPDATE_LAYOUT);
102     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TriggerRefreshDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
103 
104     ACE_DEFINE_PROPERTY_GROUP(RefreshStyle, RefreshStyle);
105     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, LoadingDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
106     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ProgressDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
107     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ProgressDiameter, Dimension, PROPERTY_UPDATE_LAYOUT);
108     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, MaxDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
109     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ShowTimeDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
110     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, TextStyle, TextStyle, PROPERTY_UPDATE_LAYOUT);
111     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ProgressColor, Color, PROPERTY_UPDATE_LAYOUT);
112     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, BackgroundColor, Color, PROPERTY_UPDATE_LAYOUT);
113 
114 private:
115     ACE_DISALLOW_COPY_AND_MOVE(RefreshLayoutProperty);
116 };
117 } // namespace OHOS::Ace::NG
118 
119 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
120