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