1 /* 2 * Copyright (c) 2023 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_NG_PATTERNS_SIDE_BAR_CONTAINER_MODEL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SIDE_BAR_CONTAINER_MODEL_H 18 19 #include <optional> 20 21 #include "base/geometry/dimension.h" 22 #include "base/utils/macros.h" 23 #include "core/components/common/layout/constants.h" 24 #include "core/components_ng/base/frame_node.h" 25 #include "core/components_ng/pattern/side_bar/side_bar_container_event_hub.h" 26 27 namespace OHOS::Ace { 28 enum class WidthType : uint32_t { 29 SIDEBAR_WIDTH = 0, 30 MIN_SIDEBAR_WIDTH, 31 MAX_SIDEBAR_WIDTH, 32 }; 33 34 class ACE_FORCE_EXPORT SideBarContainerModel { 35 public: 36 static SideBarContainerModel* GetInstance(); 37 virtual ~SideBarContainerModel() = default; 38 39 virtual void Create(); 40 virtual void SetSideBarContainerType(SideBarContainerType type); 41 virtual void SetShowSideBar(bool isShow); 42 virtual void SetShowControlButton(bool showControlButton); 43 virtual void ParseAndSetWidth(WidthType widthType, Dimension& width); 44 virtual void SetSideBarWidth(const Dimension& sideBarWidth); 45 virtual void SetMinSideBarWidth(const Dimension& minSideBarWidth); 46 virtual void SetMaxSideBarWidth(const Dimension& maxSideBarWidth); 47 virtual void SetAutoHide(bool autoHide); 48 virtual void SetSideBarPosition(SideBarPosition sideBarPosition); 49 virtual void SetControlButtonWidth(const Dimension& width); 50 virtual void SetControlButtonHeight(const Dimension& height); 51 virtual void SetControlButtonLeft(const Dimension& left); ResetControlButtonLeft()52 virtual void ResetControlButtonLeft() {} 53 virtual void SetControlButtonTop(const Dimension& top); 54 virtual void SetControlButtonShowIconInfo( 55 const std::string& showIconStr, bool isPixelMap, RefPtr<PixelMap> pixMap); 56 virtual void SetControlButtonHiddenIconInfo( 57 const std::string& hiddenIconStr, bool isPixelMap, RefPtr<PixelMap> pixMap); 58 virtual void SetControlButtonSwitchingIconInfo( 59 const std::string& switchingIconStr, bool isPixelMap, RefPtr<PixelMap> pixMap); 60 virtual void ResetControlButtonIconInfo(); 61 virtual void SetOnChange(std::function<void(const bool)>&& onChange); 62 virtual void SetDividerStrokeWidth(const Dimension& strokeWidth); 63 virtual void SetDividerColor(const Color& color); 64 virtual void SetDividerStartMargin(const Dimension& startMargin); 65 virtual void SetDividerEndMargin(const Dimension& endMargin); 66 virtual void SetOnChangeEvent(std::function<void(const bool)>&& onChangeEvent); 67 virtual void SetMinContentWidth(const Dimension& minContentWidth); 68 69 private: 70 static std::unique_ptr<SideBarContainerModel> instance_; 71 static std::mutex mutex_; 72 73 virtual void MarkNeedInitRealSideBarWidth(); 74 }; 75 } // namespace OHOS::Ace::NG 76 77 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SIDE_BAR_CONTAINER_MODEL_H 78