1c41cb6d2Sopenharmony_ci/** 2c41cb6d2Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3c41cb6d2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c41cb6d2Sopenharmony_ci * you may not use this file except in compliance with the License. 5c41cb6d2Sopenharmony_ci * You may obtain a copy of the License at 6c41cb6d2Sopenharmony_ci * 7c41cb6d2Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c41cb6d2Sopenharmony_ci * 9c41cb6d2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c41cb6d2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c41cb6d2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c41cb6d2Sopenharmony_ci * See the License for the specific language governing permissions and 13c41cb6d2Sopenharmony_ci * limitations under the License. 14c41cb6d2Sopenharmony_ci */ 15c41cb6d2Sopenharmony_ciimport ComponentConfig from './ComponentConfig'; 16c41cb6d2Sopenharmony_ci 17c41cb6d2Sopenharmony_ci/** 18c41cb6d2Sopenharmony_ci * Slider component 19c41cb6d2Sopenharmony_ci */ 20c41cb6d2Sopenharmony_ci@Component 21c41cb6d2Sopenharmony_ciexport default struct SliderComponent { 22c41cb6d2Sopenharmony_ci @State clickConfirm: boolean = true; 23c41cb6d2Sopenharmony_ci @State showStep: boolean = false; 24c41cb6d2Sopenharmony_ci @State value: number = 0; 25c41cb6d2Sopenharmony_ci @State fontSize: number = 18; // Font size 26c41cb6d2Sopenharmony_ci private visible: boolean = true; 27c41cb6d2Sopenharmony_ci private min: number = 0; 28c41cb6d2Sopenharmony_ci private max: number = 100; 29c41cb6d2Sopenharmony_ci private step: number = 1; 30c41cb6d2Sopenharmony_ci private leftImage: string = ''; 31c41cb6d2Sopenharmony_ci private rightImage: string = ''; 32c41cb6d2Sopenharmony_ci private onChange?: (value: number, mode: SliderChangeMode) => void 33c41cb6d2Sopenharmony_ci private summary: string | Resource = ''; // Text details 34c41cb6d2Sopenharmony_ci 35c41cb6d2Sopenharmony_ci build() { 36c41cb6d2Sopenharmony_ci Flex({ direction: FlexDirection.Row }) { 37c41cb6d2Sopenharmony_ci Column() { 38c41cb6d2Sopenharmony_ci Image(this.leftImage) 39c41cb6d2Sopenharmony_ci .width($r('app.float.slider_image_width')) 40c41cb6d2Sopenharmony_ci .height($r('app.float.slider_image_height')) 41c41cb6d2Sopenharmony_ci .objectFit(ImageFit.Contain); 42c41cb6d2Sopenharmony_ci } 43c41cb6d2Sopenharmony_ci .align(Alignment.TopStart) 44c41cb6d2Sopenharmony_ci .visibility(this.visible ? Visibility.Visible : Visibility.None) 45c41cb6d2Sopenharmony_ci .padding({ left: $r('app.float.slider_image_margin') }) 46c41cb6d2Sopenharmony_ci .onClick(() => { 47c41cb6d2Sopenharmony_ci if (this.value != this.min && this.clickConfirm) { 48c41cb6d2Sopenharmony_ci this.value = Math.max(this.min, this.value - this?.step); 49c41cb6d2Sopenharmony_ci this.onChangeHandler(this.value, SliderChangeMode.End); 50c41cb6d2Sopenharmony_ci } 51c41cb6d2Sopenharmony_ci }) 52c41cb6d2Sopenharmony_ci .align(Alignment.Center) 53c41cb6d2Sopenharmony_ci 54c41cb6d2Sopenharmony_ci Column() { 55c41cb6d2Sopenharmony_ci Row() { 56c41cb6d2Sopenharmony_ci Text(this.summary) 57c41cb6d2Sopenharmony_ci .fontSize(this.fontSize) 58c41cb6d2Sopenharmony_ci .textAlign(TextAlign.Start); 59c41cb6d2Sopenharmony_ci } 60c41cb6d2Sopenharmony_ci .width(ComponentConfig.WH_83_100) 61c41cb6d2Sopenharmony_ci 62c41cb6d2Sopenharmony_ci Slider({ 63c41cb6d2Sopenharmony_ci value: this.value, 64c41cb6d2Sopenharmony_ci min: this.min, 65c41cb6d2Sopenharmony_ci max: this.max, 66c41cb6d2Sopenharmony_ci step: this.step 67c41cb6d2Sopenharmony_ci }) 68c41cb6d2Sopenharmony_ci .selectedColor(Color.Blue) 69c41cb6d2Sopenharmony_ci .blockColor(Color.Blue) 70c41cb6d2Sopenharmony_ci .width(ComponentConfig.WH_100_100) 71c41cb6d2Sopenharmony_ci .showSteps(this.showStep) 72c41cb6d2Sopenharmony_ci .onChange((value, mode) => { 73c41cb6d2Sopenharmony_ci this.onChangeHandler(value, mode) 74c41cb6d2Sopenharmony_ci }); 75c41cb6d2Sopenharmony_ci }.align(Alignment.Center).flexGrow(1) 76c41cb6d2Sopenharmony_ci 77c41cb6d2Sopenharmony_ci Column() { 78c41cb6d2Sopenharmony_ci Image(this.rightImage) 79c41cb6d2Sopenharmony_ci .width($r('app.float.slider_image_width')) 80c41cb6d2Sopenharmony_ci .height($r('app.float.slider_image_height')) 81c41cb6d2Sopenharmony_ci .align(Alignment.Start) 82c41cb6d2Sopenharmony_ci .objectFit(ImageFit.Contain); 83c41cb6d2Sopenharmony_ci } 84c41cb6d2Sopenharmony_ci .align(Alignment.TopEnd) 85c41cb6d2Sopenharmony_ci .visibility(this.visible ? Visibility.Visible : Visibility.None) 86c41cb6d2Sopenharmony_ci .padding({ right: $r('app.float.slider_image_margin') }) 87c41cb6d2Sopenharmony_ci .onClick(() => { 88c41cb6d2Sopenharmony_ci if (this.value != this.max && this.clickConfirm) { 89c41cb6d2Sopenharmony_ci this.value = Math.min(this.max, this.value + this?.step); 90c41cb6d2Sopenharmony_ci this.onChangeHandler(this.value, SliderChangeMode.End); 91c41cb6d2Sopenharmony_ci } 92c41cb6d2Sopenharmony_ci }) 93c41cb6d2Sopenharmony_ci .align(Alignment.Center) 94c41cb6d2Sopenharmony_ci 95c41cb6d2Sopenharmony_ci }.width(ComponentConfig.WH_100_100).align(Alignment.TopStart) 96c41cb6d2Sopenharmony_ci } 97c41cb6d2Sopenharmony_ci 98c41cb6d2Sopenharmony_ci /** 99c41cb6d2Sopenharmony_ci * Change handler 100c41cb6d2Sopenharmony_ci * 101c41cb6d2Sopenharmony_ci * @param value - Change value 102c41cb6d2Sopenharmony_ci * @param mode - State 103c41cb6d2Sopenharmony_ci */ 104c41cb6d2Sopenharmony_ci onChangeHandler(value: number, mode: SliderChangeMode) { 105c41cb6d2Sopenharmony_ci if (this.onChange) { 106c41cb6d2Sopenharmony_ci this.onChange(value, mode); 107c41cb6d2Sopenharmony_ci } 108c41cb6d2Sopenharmony_ci } 109c41cb6d2Sopenharmony_ci}