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