• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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_BASE_LAYOUT_GRID_COLUMN_INFO_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_COLUMN_INFO_H
18 
19 #include "core/components/common/layout/grid_container_info.h"
20 
21 namespace OHOS::Ace {
22 
23 constexpr uint32_t DEFAULT_GRID_COLUMN_SPAN = 0;
24 
25 class GridColumnInfo : public GridLayoutInfo {
26     DECLARE_ACE_TYPE(GridColumnInfo, GridLayoutInfo);
27 
28 public:
29     class Builder : public AceType {
DECLARE_ACE_TYPE(Builder,AceType)30         DECLARE_ACE_TYPE(Builder, AceType)
31     public:
32         Builder()
33         {
34             columnInfo_ = AceType::Claim(new GridColumnInfo());
35         }
36         void SetXsSizeColumn(uint32_t xsSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION)
37         {
38             columnInfo_->xsSizeColumn_ = xsSizeColumn;
39             columnInfo_->xsSizeOffset_ = offset;
40         }
41 
42         void SetSmSizeColumn(uint32_t smSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION)
43         {
44             columnInfo_->smSizeColumn_ = smSizeColumn;
45             columnInfo_->smSizeOffset_ = offset;
46         }
47 
48         void SetMdSizeColumn(uint32_t mdSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION)
49         {
50             columnInfo_->mdSizeColumn_ = mdSizeColumn;
51             columnInfo_->mdSizeOffset_ = offset;
52         }
53 
54         void SetLgSizeColumn(uint32_t lgSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION)
55         {
56             columnInfo_->lgSizeColumn_ = lgSizeColumn;
57             columnInfo_->lgSizeOffset_ = offset;
58         }
59 
60         void SetSizeColumn(GridSizeType type, uint32_t column, const Dimension& offset = UNDEFINED_DIMENSION)
61         {
62             if (type == GridSizeType::XS) {
63                 SetXsSizeColumn(column, offset);
64             } else if (type == GridSizeType::SM) {
65                 SetSmSizeColumn(column, offset);
66             } else if (type == GridSizeType::MD) {
67                 SetMdSizeColumn(column, offset);
68             } else if (type == GridSizeType::LG) {
69                 SetLgSizeColumn(column, offset);
70             } else if (type == GridSizeType::UNDEFINED) {
71                 SetColumns(column);
72             }
73         }
74 
SetSmSizeMaxColumn(uint32_t smSizeMaxColumn)75         void SetSmSizeMaxColumn(uint32_t smSizeMaxColumn)
76         {
77             columnInfo_->smSizeMaxColumn_ = smSizeMaxColumn;
78         }
SetMdSizeMaxColumn(uint32_t mdSizeMaxColumn)79         void SetMdSizeMaxColumn(uint32_t mdSizeMaxColumn)
80         {
81             columnInfo_->mdSizeMaxColumn_ = mdSizeMaxColumn;
82         }
SetLgSizeMaxColumn(uint32_t lgSizeMaxColumn)83         void SetLgSizeMaxColumn(uint32_t lgSizeMaxColumn)
84         {
85             columnInfo_->lgSizeMaxColumn_ = lgSizeMaxColumn;
86         }
87 
SetColumns(uint32_t columns)88         void SetColumns(uint32_t columns)
89         {
90             columnInfo_->columns_ = columns;
91         }
92 
93         void ACE_EXPORT SetOffset(int32_t offset, GridSizeType type = GridSizeType::UNDEFINED);
94 
SetParent(const RefPtr<GridContainerInfo> & parent)95         void SetParent(const RefPtr<GridContainerInfo>& parent)
96         {
97             columnInfo_->parent_ = parent;
98         }
99 
Build()100         const RefPtr<GridColumnInfo>& Build() const
101         {
102             return columnInfo_;
103         }
104 
105     private:
106         RefPtr<GridColumnInfo> columnInfo_;
107     };
108 
109     ~GridColumnInfo() override = default;
110     double GetWidth() const;
111     double GetWidth(uint32_t columns) const;
112     double GetMaxWidth() const;
113     Dimension GetOffset() const;
GetParent()114     const RefPtr<GridContainerInfo>& GetParent() const
115     {
116         return parent_;
117     }
GetColumns()118     uint32_t GetColumns() const
119     {
120         return columns_;
121     }
GetOffset(GridSizeType type)122     int32_t GetOffset(GridSizeType type) const
123     {
124         return offsets_[static_cast<const int32_t>(type)];
125     }
GetColumns(GridSizeType type)126     uint32_t GetColumns(GridSizeType type) const
127     {
128         switch (type) {
129             case GridSizeType::UNDEFINED:
130                 return columns_;
131             case GridSizeType::XS:
132                 return xsSizeColumn_;
133             case GridSizeType::SM:
134                 return smSizeColumn_;
135             case GridSizeType::MD:
136                 return mdSizeColumn_;
137             case GridSizeType::LG:
138                 return lgSizeColumn_;
139             default:
140                 return DEFAULT_GRID_COLUMN_SPAN;
141         }
142     }
143 
144 private:
145     GridColumnInfo() = default;
146 
147     uint32_t xsSizeColumn_ = 0;
148     uint32_t smSizeColumn_ = 0;
149     uint32_t mdSizeColumn_ = 0;
150     uint32_t lgSizeColumn_ = 0;
151 
152     Dimension xsSizeOffset_ = UNDEFINED_DIMENSION;
153     Dimension smSizeOffset_ = UNDEFINED_DIMENSION;
154     Dimension mdSizeOffset_ = UNDEFINED_DIMENSION;
155     Dimension lgSizeOffset_ = UNDEFINED_DIMENSION;
156 
157     uint32_t smSizeMaxColumn_ = 0;
158     uint32_t mdSizeMaxColumn_ = 0;
159     uint32_t lgSizeMaxColumn_ = 0;
160 
161     // default column and offset which no define column of the size
162     uint32_t columns_ = DEFAULT_GRID_COLUMN_SPAN;
163     bool hasColumnOffset_ = false;
164     int32_t offsets_[static_cast<const int32_t>(GridSizeType::XL)] = { 0 };
165     // parent container grid infos
166     RefPtr<GridContainerInfo> parent_;
167 };
168 
169 } // namespace OHOS::Ace
170 
171 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_COLUMN_INFO_H
172