1 /* 2 * Copyright (c) 2020-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 OHOS_ACELITE_PICKER_VIEW_COMPONENT_H 17 #define OHOS_ACELITE_PICKER_VIEW_COMPONENT_H 18 19 #include "acelite_config.h" 20 #include "component.h" 21 #include "non_copyable.h" 22 #if (FEATURE_COMPONENT_DATE_PICKER == 1) 23 #include "ui_date_picker.h" 24 #endif // FEATURE_COMPONENT_DATE_PICKER 25 #include "ui_time_picker.h" 26 27 namespace OHOS { 28 namespace ACELite { 29 static constexpr char TEXT_PICKER_NEW_VALUE[] = "newValue"; 30 static constexpr char TEXT_PICKER_NEW_SELECTED[] = "newSelected"; 31 static constexpr char TIME_PICKER_HOUR[] = "hour"; 32 static constexpr char TIME_PICKER_MINUTE[] = "minute"; 33 #if (FEATURE_COMPONENT_DATE_PICKER == 1) 34 static constexpr char DATE_PICKER_YEAR[] = "year"; 35 static constexpr char DATE_PICKER_MONTH[] = "month"; 36 static constexpr char DATE_PICKER_DAY[] = "day"; 37 #endif // FEATURE_COMPONENT_DATE_PICKER 38 static constexpr int16_t PICKER_ITEM_HEIGHT = 50; // default picker item height 39 static constexpr uint8_t PICKER_SELECTED_FONT_SIZE = 38; // F_HYQIHEI_65S_38_4 40 41 /** 42 * @brief listener class for text picker onchange event. 43 */ 44 class TextPickerListener final : public OHOS::UIPicker::SelectedListener { 45 public: 46 ACE_DISALLOW_COPY_AND_MOVE(TextPickerListener); TextPickerListener()47 TextPickerListener() : pTextArray_(nullptr), textCallback_(UNDEFINED) {} ~TextPickerListener()48 ~TextPickerListener() 49 { 50 jerry_release_value(textCallback_); 51 } 52 53 void OnPickerStoped(UIPicker& picker) override; 54 SetTextCallback(jerry_value_t callback)55 void SetTextCallback(jerry_value_t callback) 56 { 57 jerry_release_value(textCallback_); 58 textCallback_ = jerry_acquire_value(callback); 59 } 60 SetTextRange(char ** range)61 void SetTextRange(char** range) 62 { 63 pTextArray_ = range; 64 } 65 66 private: 67 char** pTextArray_; 68 jerry_value_t textCallback_; 69 }; 70 71 /** 72 * @brief listener class for time picker onchange event. 73 */ 74 class TimePickerListener final : public OHOS::UITimePicker::SelectedListener { 75 public: 76 ACE_DISALLOW_COPY_AND_MOVE(TimePickerListener); TimePickerListener()77 TimePickerListener() : timeCallback_(UNDEFINED) {} ~TimePickerListener()78 ~TimePickerListener() 79 { 80 jerry_release_value(timeCallback_); 81 } 82 83 void OnTimePickerStoped(UITimePicker& picker) override; 84 SetTimeCallback(jerry_value_t callback)85 void SetTimeCallback(jerry_value_t callback) 86 { 87 jerry_release_value(timeCallback_); 88 timeCallback_ = jerry_acquire_value(callback); 89 } 90 91 private: 92 jerry_value_t timeCallback_; 93 }; 94 95 #if (FEATURE_COMPONENT_DATE_PICKER == 1) 96 /** 97 * @brief listener class for date picker onchange event. 98 */ 99 class DatePickerListener final : public UIDatePicker::SelectedListener { 100 public: 101 ACE_DISALLOW_COPY_AND_MOVE(DatePickerListener); DatePickerListener()102 DatePickerListener() : dateCallback_(UNDEFINED) {} ~DatePickerListener()103 ~DatePickerListener() 104 { 105 jerry_release_value(dateCallback_); 106 } 107 108 void OnDatePickerStoped(UIDatePicker& picker) override; 109 SetDateCallback(jerry_value_t callback)110 void SetDateCallback(jerry_value_t callback) 111 { 112 jerry_release_value(dateCallback_); 113 dateCallback_ = jerry_acquire_value(callback); 114 } 115 116 private: 117 jerry_value_t dateCallback_; 118 }; 119 #endif // FEATURE_COMPONENT_DATE_PICKER 120 121 /** 122 * @brief class for picker-view component adaptation. 123 */ 124 class PickerViewComponent final : public Component { 125 public: 126 ACE_DISALLOW_COPY_AND_MOVE(PickerViewComponent); 127 PickerViewComponent() = delete; 128 PickerViewComponent(jerry_value_t options, jerry_value_t children, AppStyleManager* styleManager); ~PickerViewComponent()129 ~PickerViewComponent() override {} 130 131 protected: 132 bool CreateNativeViews() override; 133 void ReleaseNativeViews() override; 134 UIView *GetComponentRootView() const override; 135 bool SetPrivateAttribute(uint16_t attrKeyId, jerry_value_t attrValue) override; 136 bool ApplyPrivateStyle(const AppStyleItem* styleItem) override; 137 bool RegisterPrivateEventListener(uint16_t eventTypeId, jerry_value_t funcValue, bool isStopPropagation) override; 138 void PostRender() override; 139 void PostUpdate(uint16_t attrKeyId) override; 140 141 /** 142 * @enum PickerType 143 * 144 * @brief Values that represent different types of picker-view 145 */ 146 enum class PickerType : uint8_t { 147 UNKNOWN, 148 TEXT, 149 TIME, 150 #if (FEATURE_COMPONENT_DATE_PICKER == 1) 151 DATE, 152 #endif // FEATURE_COMPONENT_DATE_PICKER 153 TYPE_MAX 154 }; 155 156 private: 157 char* GetStringAttrByName(const char * const name, uint16_t& length) const; 158 PickerType GetPickerType() const; 159 bool CreateTextPicker(); 160 bool CreateTimePicker(); 161 #if (FEATURE_COMPONENT_DATE_PICKER == 1) 162 bool CreateDatePicker(); 163 #endif // FEATURE_COMPONENT_DATE_PICKER 164 bool SetPickerSelected(jerry_value_t selectedValue); 165 void SetPickerListener(jerry_value_t funcValue) const; 166 bool SetTextPickerRange(jerry_value_t rangeValue); 167 void ReleaseTextRange(); 168 void UpdatePickerAttrs() const; 169 void UpdatePickerStyles() const; 170 171 jerry_value_t options_; 172 PickerType pickerType_; 173 UIView* pickerView_; 174 ColorType color_; 175 uint8_t fontSize_; 176 char* fontFamily_; 177 ColorType selectedColor_; 178 uint8_t selectedFontSize_; 179 char* selectedFontFamily_; 180 181 // text picker-view attributes 182 uint16_t textSelected_; 183 char** pTextArray_; 184 uint16_t textArraySize_; 185 TextPickerListener* textPickerListener_; 186 187 #if (FEATURE_COMPONENT_DATE_PICKER == 1) 188 // date picker-view attributes 189 char* dateSelected_; 190 char* dateStart_; 191 char* dateEnd_; 192 DatePickerListener* datePickerListener_; 193 #endif // FEATURE_COMPONENT_DATE_PICKER 194 195 // time picker-view listener 196 TimePickerListener* timePickerListener_; 197 char* timeSelected_; 198 }; 199 } // namespace ACELite 200 } // namespace OHOS 201 202 #endif // OHOS_ACELITE_PICKER_VIEW_COMPONENT_H 203