1 /* 2 * Copyright (c) 2022 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_NAVIGATION_BAR_ITEM_PATTERN_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_BAR_ITEM_PATTERN_H 18 19 #include "base/memory/referenced.h" 20 #include "core/components_ng/base/ui_node.h" 21 #include "core/components_ng/pattern/navigation/bar_item_event_hub.h" 22 #include "core/components_ng/pattern/navigation/bar_item_layout_algorithm.h" 23 #include "core/components_ng/pattern/pattern.h" 24 25 namespace OHOS::Ace::NG { 26 27 class BarItemPattern : public Pattern { 28 DECLARE_ACE_TYPE(BarItemPattern, Pattern); 29 30 public: 31 BarItemPattern() = default; 32 ~BarItemPattern() override = default; 33 CreateLayoutProperty()34 RefPtr<LayoutProperty> CreateLayoutProperty() override 35 { 36 return MakeRefPtr<LayoutProperty>(); 37 } 38 CreateLayoutAlgorithm()39 RefPtr<LayoutAlgorithm> CreateLayoutAlgorithm() override 40 { 41 return MakeRefPtr<BarItemLayoutAlgorithm>(); 42 } 43 CreateEventHub()44 RefPtr<EventHub> CreateEventHub() override 45 { 46 return MakeRefPtr<BarItemEventHub>(); 47 } 48 IsAtomicNode()49 bool IsAtomicNode() const override 50 { 51 return false; 52 } 53 54 void OnModifyDone() override; 55 GetFocusPattern()56 FocusPattern GetFocusPattern() const override 57 { 58 return { FocusType::NODE, true }; 59 } 60 SetActiveIconImageSourceInfo(const ImageSourceInfo & info)61 void SetActiveIconImageSourceInfo(const ImageSourceInfo& info) 62 { 63 info_ = info; 64 } 65 GetActiveIconImageSourceInfo()66 const ImageSourceInfo& GetActiveIconImageSourceInfo() const 67 { 68 return info_; 69 } 70 SetInitialIconImageSourceInfo(const ImageSourceInfo & info)71 void SetInitialIconImageSourceInfo(const ImageSourceInfo& info) 72 { 73 initalInfo_ = info; 74 } 75 GetInitialIconImageSourceInfo()76 const ImageSourceInfo& GetInitialIconImageSourceInfo() const 77 { 78 return initalInfo_; 79 } 80 SetInitialIconSymbol(const std::function<void (WeakPtr<NG::FrameNode>)> & symbol)81 void SetInitialIconSymbol(const std::function<void(WeakPtr<NG::FrameNode>)>& symbol) 82 { 83 initalSymbol_ = symbol; 84 } 85 GetInitialIconSymbol()86 const std::function<void(WeakPtr<NG::FrameNode>)>& GetInitialIconSymbol() const 87 { 88 return initalSymbol_; 89 } 90 SetActiveIconSymbol(const std::function<void (WeakPtr<NG::FrameNode>)> & symbol)91 void SetActiveIconSymbol(const std::function<void(WeakPtr<NG::FrameNode>)>& symbol) 92 { 93 activeSymbol_ = symbol; 94 } 95 GetActiveIconSymbol()96 const std::function<void(WeakPtr<NG::FrameNode>)>& GetActiveIconSymbol() const 97 { 98 return activeSymbol_; 99 } 100 SetToolbarItemStatus(NavToolbarItemStatus status)101 void SetToolbarItemStatus(NavToolbarItemStatus status) 102 { 103 status_ = status; 104 } 105 GetToolbarItemStatus()106 NavToolbarItemStatus GetToolbarItemStatus() const 107 { 108 return status_; 109 } 110 SetCurrentIconStatus(ToolbarIconStatus iconStatus)111 void SetCurrentIconStatus(ToolbarIconStatus iconStatus) 112 { 113 iconStatus_ = iconStatus; 114 } 115 GetCurrentIconStatus()116 ToolbarIconStatus GetCurrentIconStatus() const 117 { 118 return iconStatus_; 119 } 120 121 void UpdateBarItemActiveStatusResource(); 122 123 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override; 124 125 private: 126 RefPtr<ClickEvent> clickListener_; 127 ImageSourceInfo info_; 128 ImageSourceInfo initalInfo_; 129 std::function<void(WeakPtr<NG::FrameNode>)> initalSymbol_; 130 std::function<void(WeakPtr<NG::FrameNode>)> activeSymbol_; 131 NavToolbarItemStatus status_ = NavToolbarItemStatus::NORMAL; 132 ToolbarIconStatus iconStatus_ = ToolbarIconStatus::INITIAL; 133 }; 134 135 } // namespace OHOS::Ace::NG 136 137 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_BAR_ITEM_PATTERN_H 138