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_PICKER_PICKER_VALUE_ELEMENT_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_ELEMENT_H 18 19 #include "core/components/box/render_box.h" 20 #include "core/components/picker/render_picker_value.h" 21 #include "core/pipeline/base/sole_child_element.h" 22 23 namespace OHOS::Ace { 24 25 class PickerValueElement : public SoleChildElement, public FocusNode { 26 DECLARE_ACE_TYPE(PickerValueElement, SoleChildElement, FocusNode); 27 28 public: PerformBuild()29 void PerformBuild() override 30 { 31 SetFocusable(true); 32 SoleChildElement::PerformBuild(); 33 HandleSelfFocus(); 34 } 35 Update()36 void Update() override 37 { 38 customComponent_ = component_; 39 SoleChildElement::Update(); 40 } 41 CanUpdate(const RefPtr<Component> & newComponent)42 bool CanUpdate(const RefPtr<Component>& newComponent) override 43 { 44 return (newComponent == customComponent_) && Element::CanUpdate(newComponent); 45 } 46 47 protected: 48 void OnClick() override; 49 OnFocus()50 void OnFocus() override 51 { 52 HandleSelfFocus(true); 53 } 54 OnBlur()55 void OnBlur() override 56 { 57 HandleSelfFocus(false); 58 } 59 60 private: 61 RefPtr<RenderBox> GetRenderBox() const; 62 63 void HandleSelfFocus(bool focus); 64 65 void HandleSelfFocus(); 66 67 WeakPtr<Component> customComponent_; 68 }; 69 70 } // namespace OHOS::Ace 71 72 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_ELEMENT_H 73