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