2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <Elementary.h>
18 #include <Ecore_IMF.h>
20 #include "cst-common.h"
21 #include "cst-common-string.h"
22 #include "cst-widget.h"
25 static Elm_Genlist_Item_Class *itc = NULL;
26 static Elm_Genlist_Item_Class *itc_2text_expand = NULL;
27 static Elm_Genlist_Item_Class *itc_sub_expand = NULL;
29 static void __cst_on_click_reject_rule_exp(void *data, Evas *evas, Evas_Object *obj, void *event_info);
30 static CstGlItemDisplayInfo_t list_dep1_rule[] = {
31 {1, CST_STR_MATCH_CRITERIA, ELM_GENLIST_ITEM_TREE, CST_GL_ITEM_EXPANDABLE, __cst_on_click_reject_rule_exp},
32 {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
35 static CstGlItemDisplayInfo_t list_dep2_rule[] = {
36 {2, CST_STR_EXACTLY_THE_SAME_AS, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)PH_MISC_BLOCK_RULE_EXACTLY},
37 {2, CST_STR_START_WITH, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)PH_MISC_BLOCK_RULE_START},
38 {2, CST_STR_INCLUDE, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)PH_MISC_BLOCK_RULE_INCLUDE},
39 {2, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
42 int _cst_get_reject_number(char *buffer, void *data)
44 ENTER(_cst_get_reject_number);
45 retv_if(NULL == data, 0);
46 CstUgData_t *ugd = (CstUgData_t *)data;
47 const char *entry_input;
49 Ecore_IMF_Context *imf_ctx;
51 entry_input = elm_entry_entry_get(ugd->dg_entry);
52 retv_if(NULL == entry_input, -1);
53 if (strlen(entry_input) == 0) {
54 imf_ctx = elm_entry_imf_context_get(ugd->dg_entry);
56 ecore_imf_context_input_panel_hide(imf_ctx);
58 error = _cst_create_error_popup(ugd->nf, CST_ERROR_ENTER_NUMBER);
60 evas_object_show(error);
64 DBG("IME input string = %s length=%d", entry_input, strlen(entry_input));
66 snprintf(buffer, CST_MAX_PHONE_NUMBER_LEN, "%s", entry_input);
67 return strlen(entry_input);
70 static Evas_Object *__cst_gl_icon_get_autoreject_ime(void *data, Evas_Object *obj, const char *part)
72 ENTER(__cst_gl_icon_get_autoreject_ime);
73 retv_if(NULL == data, NULL);
74 CstUgData_t *ugd = (CstUgData_t *)data;
76 if (!strcmp(part, "elm.icon")) {
77 Evas_Object *ef = _cst_create_ime_editfield(ugd, obj, CST_IME_AUTO_REJECT, NULL);
78 retv_if(ef == NULL, NULL);
80 return _cst_create_ime_btn_layout(obj, ef,
81 _cst_on_click_ime_contact_btn, (void *)ugd);
86 static void __cst_gl_reject_cst_del(void *data, Evas_Object *obj)
88 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
94 static char *__cst_gl_label_get_reject_expand(void *data, Evas_Object *obj, const char *part)
96 retv_if(NULL == data, NULL);
97 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
98 if (!strcmp(part, "elm.text.1")) {
99 if (list_dep1_rule[item_data->index].str_id != -1)
100 return strdup(T_(list_dep1_rule[item_data->index].str_id));
101 } else if (!strcmp(part, "elm.text.2")) {
102 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
103 retv_if(NULL == ugd, NULL);
106 for (index = 0; list_dep2_rule[index].style != CST_GL_ITEM_NONE; ++index) {
107 DBG("index :%d", index);
108 if (ugd->reject_rule == (ph_misc_block_rules)list_dep2_rule[index].func) {
109 if (list_dep2_rule[index].str_id != -1)
110 return strdup(T_(list_dep2_rule[index].str_id));
114 DBG("Rejection rule is not exist : %d", ugd->reject_rule);
119 static void __cst_gl_reject_rule_sel(void *data, Evas_Object *obj, void *event_info)
121 ret_if(NULL == data);
122 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
123 CstUgData_t *ugd = item_data->ugd;
124 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
126 if (list_dep1_rule[item_data->index].func) {
127 if (list_dep1_rule[item_data->index].style == CST_GL_ITEM_EXPANDABLE)
128 list_dep1_rule[item_data->index].func((void *)ugd, NULL, obj, event_info);
133 static char *__cst_gl_2nd_reject_rule_label_get(void *data, Evas_Object *obj, const char *part)
135 retv_if(NULL == data, NULL);
136 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
137 if (!strcmp(part, "elm.text")) {
138 if (list_dep2_rule[item_data->index].str_id != -1)
139 return strdup(T_(list_dep2_rule[item_data->index].str_id));
144 static Evas_Object *__cst_gl_2nd_reject_rule_icon_get(void *data, Evas_Object *obj, const char *part)
146 retv_if(NULL == data, NULL);
147 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
148 CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
150 retv_if(NULL == ugd, NULL);
151 if (!strcmp(part, "elm.icon")) {
152 if (ugd->rdg_reject_rule == NULL) {
153 ugd->rdg_reject_rule = elm_radio_add(obj);
154 elm_radio_value_set(ugd->rdg_reject_rule, -1);
156 Evas_Object *radio = _cst_create_radio_icon(obj,
157 ugd->rdg_reject_rule, (int)list_dep2_rule[item_data->index].func,
158 ugd->reject_rule, NULL);
164 static void __cst_gl_2nd_reject_rule_sel(void *data, Evas_Object *obj, void *event_info)
166 ret_if(data == NULL);
167 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
168 CstUgData_t *ugd = item_data->ugd;
170 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
171 ugd->reject_rule = (ph_misc_block_rules)list_dep2_rule[item_data->index].func;
172 if (ugd->rdg_reject_rule) {
173 elm_radio_value_set(ugd->rdg_reject_rule, ugd->reject_rule);
174 elm_genlist_item_update(item_data->parent_gl_item);
179 static void __cst_gl_reject_rule_exp(void *data, Evas_Object *obj, void *event_info)
181 ENTER(__cst_gl_reject_rule_exp);
182 ret_if(NULL == data);
183 CstUgData_t *ugd = (CstUgData_t *)data;
184 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
185 ret_if(NULL == item);
186 Evas_Object *genlist = elm_object_item_widget_get(item);
187 ret_if(NULL == genlist);
188 ugd->rdg_reject_rule = NULL;
190 CstGlItemData_t *item_data2;
193 itc_sub_expand->item_style = "dialogue/1text.1icon/expandable2";
194 itc_sub_expand->func.text_get = __cst_gl_2nd_reject_rule_label_get;
195 itc_sub_expand->func.content_get = __cst_gl_2nd_reject_rule_icon_get;
196 itc_sub_expand->func.state_get = NULL;
197 itc_sub_expand->func.del = __cst_gl_reject_cst_del;
199 ugd->rdg_reject_rule = elm_radio_add(genlist);
200 elm_radio_value_set(ugd->rdg_reject_rule, -1);
201 for (i = 0; list_dep2_rule[i].style != CST_GL_ITEM_NONE; i++) {
202 item_data2 = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
203 ret_if(item_data2 == NULL);
204 item_data2->index = i;
205 item_data2->ugd = ugd;
206 item_data2->parent_gl_item = item;
208 elm_genlist_item_append(genlist, itc_sub_expand,
209 (void *)item_data2, item, list_dep2_rule[i].flags,
210 __cst_gl_2nd_reject_rule_sel, item_data2);
214 static void __cst_gl_reject_rule_con(void *data, Evas_Object *obj, void *event_info)
217 Elm_Object_Item *item = event_info;
218 elm_genlist_item_subitems_clear(item);
221 static void __cst_gl_reject_rule_exp_req(void *data, Evas_Object *obj, void *event_info)
223 if (data != NULL) { /*Close IME*/
224 CstUgData_t *ugd = (CstUgData_t *)data;
225 elm_object_focus_set(ugd->dg_entry, EINA_FALSE);
228 Elm_Object_Item *item = event_info;
229 elm_genlist_item_expanded_set(item, EINA_TRUE);
232 static void __cst_gl_reject_rule_con_req(void *data, Evas_Object *obj, void *event_info)
234 Elm_Object_Item *item = event_info;
235 elm_genlist_item_expanded_set(item, EINA_FALSE);
238 static void __cst_on_click_reject_rule_exp(void *data, Evas *evas, Evas_Object *obj, void *event_info)
240 ENTER(__cst_on_click_reject_rule_exp);
241 Elm_Object_Item *item = event_info;
242 ret_if(NULL == data);
243 if (elm_genlist_item_expanded_get(item)) {
244 __cst_gl_reject_rule_con_req(data, obj, event_info);
245 __cst_gl_reject_rule_con(data, obj, event_info);
247 elm_genlist_tree_effect_enabled_set(elm_object_item_widget_get(item), EINA_TRUE);
248 __cst_gl_reject_rule_exp_req(data, obj, event_info);
249 __cst_gl_reject_rule_exp(data, obj, event_info);
253 static Evas_Object *__cst_create_autoreject_ime_genlist(CstUgData_t *ugd)
255 ENTER(__cst_create_autoreject_ime_genlist);
256 Elm_Object_Item *item = NULL;
257 Evas_Object *genlist;
258 retv_if(NULL == ugd, NULL);
259 genlist = elm_genlist_add(ugd->nf);
262 itc = elm_genlist_item_class_new();
264 if (!itc_2text_expand)
265 itc_2text_expand = elm_genlist_item_class_new();
268 itc_sub_expand = elm_genlist_item_class_new();
270 itc->item_style = "1icon";
271 itc->func.text_get = NULL;
272 itc->func.content_get = __cst_gl_icon_get_autoreject_ime;
273 itc->func.state_get = NULL;
274 itc->func.del = NULL;
276 itc_2text_expand->item_style = "dialogue/2text.3/expandable";
277 itc_2text_expand->func.text_get = __cst_gl_label_get_reject_expand;
278 itc_2text_expand->func.content_get = NULL;
279 itc_2text_expand->func.state_get = NULL;
280 itc_2text_expand->func.del = __cst_gl_reject_cst_del;
282 item = elm_genlist_item_append(genlist, itc,
283 (void *)ugd, NULL, ELM_GENLIST_ITEM_NONE,
286 CstGlItemData_t *item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
287 retv_if(NULL == item_data, NULL);
289 item_data->ugd = ugd;
290 item = elm_genlist_item_append(genlist, itc_2text_expand,
291 (void *)item_data, NULL, ELM_GENLIST_ITEM_TREE,
292 __cst_gl_reject_rule_sel, item_data);
297 Evas_Object *_cst_create_autoreject_ime(Evas_Object *parent, char *edit_string, void *data)
299 ENTER(_cst_create_autoreject_ime);
300 CstUgData_t *ugd = (CstUgData_t *)data;
302 Evas_Object *genlist = __cst_create_autoreject_ime_genlist(ugd);