• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 class ACE_EXPORT RefreshLayoutProperty : public LayoutProperty {
39     DECLARE_ACE_TYPE(RefreshLayoutProperty, LayoutProperty);
40 
41 public:
42     RefreshLayoutProperty() = default;
43 
44     ~RefreshLayoutProperty() override = default;
45 
Clone()46     RefPtr<LayoutProperty> Clone() const override
47     {
48         auto value = MakeRefPtr<RefreshLayoutProperty>();
49         value->UpdateLayoutProperty(this);
50         value->propRefreshDistance_ = CloneRefreshDistance();
51         value->propIsUseOffset_ = CloneIsUseOffset();
52         value->propIndicatorOffset_ = CloneIndicatorOffset();
53         value->propShowTimeOffset_ = CloneShowTimeOffset();
54         value->propFriction_ = CloneFriction();
55         value->propIsRefresh_ = CloneIsRefresh();
56         value->propIsShowLastTime_ = CloneIsShowLastTime();
57         value->propScrollableOffset_ = CloneScrollableOffset();
58         value->propLoadingProcessOffset_ = CloneLoadingProcessOffset();
59         value->propTriggerRefreshDistance_ = CloneTriggerRefreshDistance();
60         return value;
61     }
62 
Reset()63     void Reset() override
64     {
65         LayoutProperty::Reset();
66         ResetRefreshStyle();
67         ResetRefreshDistance();
68         ResetIsUseOffset();
69         ResetIndicatorOffset();
70         ResetShowTimeOffset();
71         ResetFriction();
72         ResetIsRefresh();
73         ResetIsShowLastTime();
74         ResetScrollableOffset();
75         ResetLoadingProcessOffset();
76         ResetTriggerRefreshDistance();
77     }
78 
ToJsonValue(std::unique_ptr<JsonValue> & json)79     void ToJsonValue(std::unique_ptr<JsonValue>& json) const override
80     {
81         LayoutProperty::ToJsonValue(json);
82 
83         json->Put("offset", propIndicatorOffset_.value_or(Dimension(0, DimensionUnit::VP)).ToString().c_str());
84         json->Put("friction", propFriction_.value_or(1));
85     }
86 
87     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(RefreshDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
88     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsUseOffset, bool, PROPERTY_UPDATE_LAYOUT);
89     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IndicatorOffset, Dimension, PROPERTY_UPDATE_LAYOUT);
90     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowTimeOffset, OffsetF, PROPERTY_UPDATE_LAYOUT);
91     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Friction, int32_t, PROPERTY_UPDATE_LAYOUT);
92     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsRefresh, bool, PROPERTY_UPDATE_LAYOUT);
93     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsShowLastTime, bool, PROPERTY_UPDATE_LAYOUT);
94     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollableOffset, OffsetF, PROPERTY_UPDATE_LAYOUT);
95     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(LoadingProcessOffset, OffsetF, PROPERTY_UPDATE_LAYOUT);
96     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TriggerRefreshDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
97 
98     ACE_DEFINE_PROPERTY_GROUP(RefreshStyle, RefreshStyle);
99     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, LoadingDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
100     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ProgressDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
101     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ProgressDiameter, Dimension, PROPERTY_UPDATE_LAYOUT);
102     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, MaxDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
103     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ShowTimeDistance, Dimension, PROPERTY_UPDATE_LAYOUT);
104     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, TextStyle, TextStyle, PROPERTY_UPDATE_LAYOUT);
105     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, ProgressColor, Color, PROPERTY_UPDATE_LAYOUT);
106     ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(RefreshStyle, BackgroundColor, Color, PROPERTY_UPDATE_LAYOUT);
107 
108 private:
109     ACE_DISALLOW_COPY_AND_MOVE(RefreshLayoutProperty);
110 };
111 } // namespace OHOS::Ace::NG
112 
113 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_TEXT_LAYOUT_PROPERTY_H
114