• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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