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 #include "core/components/common/layout/screen_system_manager.h" 21 22 namespace OHOS::Ace { 23 24 constexpr uint32_t DEFAULT_GRID_COLUMN_SPAN = 0; 25 26 class GridColumnInfo : public GridLayoutInfo { 27 DECLARE_ACE_TYPE(GridColumnInfo, GridLayoutInfo); 28 29 public: 30 class Builder : public AceType { DECLARE_ACE_TYPE(Builder,AceType)31 DECLARE_ACE_TYPE(Builder, AceType) 32 public: 33 Builder() 34 { 35 columnInfo_ = AceType::Claim(new GridColumnInfo()); 36 } 37 void SetXsSizeColumn(uint32_t xsSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) 38 { 39 columnInfo_->columns_[ScreenSizeType::XS] = static_cast<int32_t>(xsSizeColumn); 40 columnInfo_->dimOffsets_[ScreenSizeType::XS] = offset; 41 } 42 43 void SetSmSizeColumn(uint32_t smSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) 44 { 45 columnInfo_->columns_[ScreenSizeType::SM] = static_cast<int32_t>(smSizeColumn); 46 columnInfo_->dimOffsets_[ScreenSizeType::SM] = offset; 47 } 48 49 void SetMdSizeColumn(uint32_t mdSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) 50 { 51 columnInfo_->columns_[ScreenSizeType::MD] = static_cast<int32_t>(mdSizeColumn); 52 columnInfo_->dimOffsets_[ScreenSizeType::MD] = offset; 53 } 54 55 void SetLgSizeColumn(uint32_t lgSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) 56 { 57 columnInfo_->columns_[ScreenSizeType::LG] = static_cast<int32_t>(lgSizeColumn); 58 columnInfo_->dimOffsets_[ScreenSizeType::LG] = offset; 59 } 60 61 void SetSizeColumn(GridSizeType type, uint32_t column, const Dimension& offset = UNDEFINED_DIMENSION) 62 { 63 columnInfo_->columns_[type] = static_cast<int32_t>(column); 64 columnInfo_->dimOffsets_[type] = offset; 65 } 66 SetSmSizeMaxColumn(uint32_t smSizeMaxColumn)67 void SetSmSizeMaxColumn(uint32_t smSizeMaxColumn) 68 { 69 columnInfo_->maxColumns_[ScreenSizeType::SM] = static_cast<int32_t>(smSizeMaxColumn); 70 } SetMdSizeMaxColumn(uint32_t mdSizeMaxColumn)71 void SetMdSizeMaxColumn(uint32_t mdSizeMaxColumn) 72 { 73 columnInfo_->maxColumns_[ScreenSizeType::MD] = static_cast<int32_t>(mdSizeMaxColumn); 74 } SetLgSizeMaxColumn(uint32_t lgSizeMaxColumn)75 void SetLgSizeMaxColumn(uint32_t lgSizeMaxColumn) 76 { 77 columnInfo_->maxColumns_[ScreenSizeType::LG] = static_cast<int32_t>(lgSizeMaxColumn); 78 } 79 SetColumns(uint32_t columns)80 void SetColumns(uint32_t columns) 81 { 82 columnInfo_->columns_[ScreenSizeType::UNDEFINED] = static_cast<int32_t>(columns); 83 } 84 85 void ACE_EXPORT SetOffset(int32_t offset, GridSizeType type = GridSizeType::UNDEFINED); 86 SetParent(const RefPtr<GridContainerInfo> & parent)87 void SetParent(const RefPtr<GridContainerInfo>& parent) 88 { 89 columnInfo_->parent_ = parent; 90 } 91 Build()92 const RefPtr<GridColumnInfo>& Build() const 93 { 94 return columnInfo_; 95 } 96 97 private: 98 RefPtr<GridColumnInfo> columnInfo_; 99 }; 100 101 ~GridColumnInfo() override = default; 102 double GetWidth() const; 103 double GetWidth(uint32_t columns) const; 104 double GetMaxWidth() const; 105 Dimension GetOffset() const; GetParent()106 const RefPtr<GridContainerInfo>& GetParent() const 107 { 108 return parent_; 109 } GetColumns()110 uint32_t GetColumns() const 111 { 112 return columns_[ScreenSizeType::UNDEFINED]; 113 } GetOffset(GridSizeType type)114 int32_t GetOffset(GridSizeType type) const 115 { 116 return offsets_[type]; 117 } GetColumns(GridSizeType type)118 uint32_t GetColumns(GridSizeType type) const 119 { 120 return IsValid(type) ? columns_[type] : DEFAULT_GRID_COLUMN_SPAN; 121 } 122 123 private: 124 static constexpr int32_t INVALID_OFFSET = -1; 125 GridColumnInfo()126 GridColumnInfo() 127 { 128 // default column and offset which no define column of the size 129 columns_[ScreenSizeType::UNDEFINED] = DEFAULT_GRID_COLUMN_SPAN; 130 } 131 132 bool hasColumnOffset_ = false; 133 ArrayByScreenType<int32_t> columns_ {0}; 134 ArrayByScreenType<int32_t> maxColumns_ {0}; 135 ArrayByScreenType<Dimension> dimOffsets_ {UNDEFINED_DIMENSION}; 136 ArrayByScreenType<int32_t> offsets_ {INVALID_OFFSET}; 137 // parent container grid infos 138 RefPtr<GridContainerInfo> parent_; 139 }; 140 141 } // namespace OHOS::Ace 142 143 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_COLUMN_INFO_H 144