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_PATTERN_DIALOG_DIALOG_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_DIALOG_DIALOG_LAYOUT_PROPERTY_H 18 19 #include "base/geometry/dimension_offset.h" 20 #include "base/geometry/offset.h" 21 #include "core/components/common/properties/placement.h" 22 #include "core/components/dialog/dialog_properties.h" 23 #include "core/components_ng/layout/layout_property.h" 24 25 namespace OHOS::Ace::NG { 26 class ACE_EXPORT DialogLayoutProperty : public LayoutProperty { 27 DECLARE_ACE_TYPE(DialogLayoutProperty, LayoutProperty); 28 29 public: 30 DialogLayoutProperty() = default; 31 ~DialogLayoutProperty() override = default; 32 Clone()33 RefPtr<LayoutProperty> Clone() const override 34 { 35 auto props = MakeRefPtr<DialogLayoutProperty>(); 36 props->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 37 props->propDialogAlignment_ = CloneDialogAlignment(); 38 props->propDialogOffset_ = CloneDialogOffset(); 39 props->propGridCount_ = CloneGridCount(); 40 props->propUseCustomStyle_ = CloneUseCustomStyle(); 41 props->propAutoCancel_ = CloneAutoCancel(); 42 props->propShowInSubWindow_ = CloneShowInSubWindow(); 43 props->propDialogButtonDirection_ = CloneDialogButtonDirection(); 44 return props; 45 } 46 Reset()47 void Reset() override 48 { 49 LayoutProperty::Reset(); 50 ResetDialogAlignment(); 51 ResetDialogOffset(); 52 ResetGridCount(); 53 ResetUseCustomStyle(); 54 ResetAutoCancel(); 55 ResetShowInSubWindow(); 56 } 57 58 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DialogAlignment, DialogAlignment, PROPERTY_UPDATE_MEASURE); 59 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DialogOffset, DimensionOffset, PROPERTY_UPDATE_MEASURE); 60 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(GridCount, int32_t, PROPERTY_UPDATE_MEASURE); 61 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UseCustomStyle, bool, PROPERTY_UPDATE_MEASURE); 62 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AutoCancel, bool, PROPERTY_UPDATE_RENDER); 63 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowInSubWindow, bool, PROPERTY_UPDATE_RENDER); 64 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DialogButtonDirection, DialogButtonDirection, PROPERTY_UPDATE_MEASURE); 65 ToJsonValue(std::unique_ptr<JsonValue> & json)66 void ToJsonValue(std::unique_ptr<JsonValue>& json) const override 67 { 68 LayoutProperty::ToJsonValue(json); 69 json->Put("alignment", DialogAlignmentUtils::ConvertDialogAlignmentToString( 70 propDialogAlignment_.value_or(DialogAlignment::BOTTOM)) 71 .c_str()); 72 73 auto offsetValue = JsonUtil::Create(true); 74 offsetValue->Put("dX", propDialogOffset_.value_or(DimensionOffset()).GetX().Value()); 75 offsetValue->Put("dY", propDialogOffset_.value_or(DimensionOffset()).GetY().Value()); 76 json->Put("offset", offsetValue); 77 78 json->Put("gridCount", std::to_string(propGridCount_.value_or(-1)).c_str()); 79 json->Put("customStyle", propUseCustomStyle_.value_or(false) ? "true" : "false"); 80 json->Put("autoCancel", propAutoCancel_.value_or(true) ? "true" : "false"); 81 json->Put("showInSubWindow", propShowInSubWindow_.value_or(false) ? "true" : "false"); 82 json->Put("buttonDirection", DialogButtonDirectionUtils::ConvertDialogButtonDirectionToString( 83 propDialogButtonDirection_.value_or(DialogButtonDirection::AUTO)) 84 .c_str()); 85 } 86 87 private: 88 ACE_DISALLOW_COPY_AND_MOVE(DialogLayoutProperty); 89 }; 90 } // namespace OHOS::Ace::NG 91 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_DIALOG_DIALOG_LAYOUT_PROPERTY_H